Facebook Twitter YouTube Frictional Games | Forum | Privacy Policy | Dev Blog | Dev Wiki | Support | Gametee


Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Timer not stopping
Damascus Offline
Senior Member

Posts: 646
Threads: 118
Joined: Mar 2012
Reputation: 29
#1
Timer not stopping

PHP Code: (Select All)
void OnStart()
{
    for (
int i 014i++)
    {
        
AddEntityCollideCallback("Player""ShadowArea_"+i"ShadowDamage"true0);
    }
}

void ShadowDamage(string &in asParentstring &in asChildint alState)
{
    if (
alState == 1)
    {
        
AddTimer("damage"2.0f"TimerDamage");
    }
    else if (
alState == -1)
    {
        
RemoveTimer("damage");
    }
}

void TimerDamage(string &in asTimer)
{
    
GivePlayerDamage(20"BloodSplat"truetrue);
    
PlayGuiSound("attack_claw_hit.snt"0.5f);
    
AddTimer("damage"RandFloat(5.0f7.0f), "TimerDamage");


I'm trying to make an area that damages you ever 5-7 seconds while you're inside, but stops damaging you when you leave it. However, even after I leave the area, I keep getting damaged over and over. Am I missing something here?

01-01-2013, 04:43 PM
Find
FlawlessHappiness Offline
Posting Freak

Posts: 3,980
Threads: 145
Joined: Mar 2012
Reputation: 171
#2
RE: Timer not stopping

You can make the whole timer activate if a variable is 1
Then set it to 0 to make the timer not call


Timers that call themselves can be tricky

Trying is the first step to success.
(This post was last modified: 01-01-2013, 04:58 PM by FlawlessHappiness.)
01-01-2013, 04:58 PM
Find
TheGreatCthulhu Offline
Member

Posts: 213
Threads: 10
Joined: Oct 2010
Reputation: 32
#3
RE: Timer not stopping

(01-01-2013, 04:43 PM)Damascus Wrote: I'm trying to make an area that damages you ever 5-7 seconds while you're inside, but stops damaging you when you leave it. However, even after I leave the area, I keep getting damaged over and over. Am I missing something here?

You could try something like this - of the top of my head:
PHP Code: (Select All)
// NOTE: I'll use
      // <----------------
// to mark the important points.
// This assumes that the damage areas don't overlap.


// Add a bool variable here to use as an indicator
bool isInsideDamageArea false;    // <---------------

void OnStart()
{
    for (
int i 014i++)
    {
        
AddEntityCollideCallback("Player""ShadowArea_"+i"ShadowDamage"true0);
    }
}

void ShadowDamage(string &in asParentstring &in asChildint alState)
{
    
// Set isInsideDamageArea:
    // will be true if state == 1 (on enter area event),
    // otherwise false.
    
isInsideDamageArea = (state == 1);   // <-----------------    

    
if (alState == 1)
    {
        
AddTimer("damage"2.0f"TimerDamage");
    }
    else if (
alState == -1)
    {
        
RemoveTimer("damage");
    }
}

void TimerDamage(string &in asTimer)
{
    
// Wrap everything inside an if-statement:

    
if(isInsideDamageArea)    // <---------------
    
{
        
GivePlayerDamage(20"BloodSplat"truetrue);
        
PlayGuiSound("attack_claw_hit.snt"0.5f);
        
AddTimer("damage"RandFloat(5.0f7.0f), "TimerDamage");
    }

01-01-2013, 08:10 PM
Find
Damascus Offline
Senior Member

Posts: 646
Threads: 118
Joined: Mar 2012
Reputation: 29
#4
RE: Timer not stopping

I figured out what my (stupid) mistake was.

AddEntityCollideCallback("Player", "ShadowArea_"+i, "ShadowDamage", true, 0);

This had to be false, cause the callback is autoremoved otherwise.

01-01-2013, 08:53 PM
Find
TheGreatCthulhu Offline
Member

Posts: 213
Threads: 10
Joined: Oct 2010
Reputation: 32
#5
RE: Timer not stopping

Oh, I missed that! Big Grin Good.
01-01-2013, 09:11 PM
Find




Users browsing this thread: 1 Guest(s)