Neelke 
 
 
		
			Senior Member 
			
			
			
 
			
	Posts: 668 
	Threads: 82 
	Joined: Apr 2013
	
 Reputation: 
26
		
	 | 
	
		
			
Some complex issue (SOLVED) 
			 
			
				So, this script worked perfectly before; I added something in and it doesn't work anymore. Since of my bad memory I can't remember what it was I added in. So, I'm taking some help from you guys. 
void TimerGuardian(string &in asTimer) 
{ 
    float fShadowLumpFadeMul = RandFloat(2.0, 3.0); 
    float fShadowNewStep = 3.0f; 
    float fDelayToEvent = 0.25f; 
     
    //Set up a random scream (33% chance) 
    if(alLumpIdx > 5 && RandInt(0,2)==0) 
    { 
        PlaySoundAtEntity("GuardianScream", "25_guardian_ontop.snt", "Player", 0, false); 
    } 
     
    //Reached final step, no need for further guardian sounds 
    if(GetLocalVarInt(sEvent) == 12) return; 
     
    //Configurables 
    string sEvent = asTimer; //Sets the timer name to the variable name 
    AddLocalVarInt(sEvent, 1); //Sets a variable to the guardians step 
    string sDmgDeathArea = "AreaGuardianKill_" + GetLocalVarInt(sEvent); //Sets a new dmg area after each variable 
     
    for(int i=1; i<=6; ++i) SetPropActiveAndFade("slime_"+GetLocalVarInt(sEvent)+"_"+i, true, fShadowLumpFadeMul); 
    GuardianGroundEffect("AreaGuardianEffectFloor_"+GetLocalVarInt(sEvent), true); 
    SetEntityActive(sDmgDeathArea, true); 
    FadeInGuardianLight("ShadowLight_"+GetLocalVarInt(sEvent)); 
     
    StartScreenShake(0.1f, RandFloat(0.15f,0.6f), 0, 0.1); 
    PlaySoundAtEntity("GuardianSplashSound", "25_guardian_slime_appear.snt", "Player", 0, false); 
     
    AddTimer(sEvent, fShadowNewStep, "TimerGuardian"); 
     
    //Set checkpoint 
    CheckPoint("reset", "PlayerStartArea_1", "ResetGuardian", "Hints", "DeathByWorm1"); 
     
    //Extra events depending on the step 
    int alLumpIdx = GetLocalVarInt(sEvent); 
    AddTimer("EventStep"+alLumpIdx, fDelayToEvent, "EventStep"+alLumpIdx); 
}
 
And the custom scripts (such as GuardianGroundEffect) works perfectly. I can assure you.
			  
			
			
 
Derp. 
			
				
(This post was last modified: 08-16-2014, 10:58 PM by Neelke.)
 
				
			 
		 |  
	 
 | 
 
	| 08-16-2014, 01:19 AM  | 
	
		
	 | 
 
 
	
		
		FlawlessHappiness 
 
 
		
			Posting Freak 
			
			
			
 
			
	Posts: 3,980 
	Threads: 145 
	Joined: Mar 2012
	
 Reputation: 
171
		
	 | 
	
		
			
RE: Some complex issue 
			 
			
				Could you specify in details: 
What's supposed to happen?
 
What's not happening?
 
Is it the whole script that's not happening, or is it just a small part? It's much easier to find something if you know what you're looking for   
			 
			
			
 
Trying is the first step to success. 
			
		 |  
	 
 | 
 
	| 08-16-2014, 02:32 AM  | 
	
		
	 | 
 
 
	
		
		Neelke 
 
 
		
			Senior Member 
			
			
			
 
			
	Posts: 668 
	Threads: 82 
	Joined: Apr 2013
	
 Reputation: 
26
		
	 | 
	
		
			
RE: Some complex issue 
			 
			
				Well, basically this is for the guardian walking forward. GuardianGroundEffect sets the particle and sound it generates. FadeInGuardianLight sets a pointlight to red. 
AddTimer("EventStep"+alLumpIdx, fDelayToEvent, "EventStep"+alLumpIdx);
 
This here is for checking if there's some extra stuff supposed to be happening during this step. Like blowing out some candles for example.
 void EventStep8(string &asX) 
{ 
    for(int i=56; i<=60; ++i) SetLampLit("candle_floor_blue_no_light_"+i, false, true); 
    for(int i=114; i<=117; ++i) SetLampLit("candle_floor_blue_no_light_"+i, false, true); 
     
    SetLampLit("candle_floor_blue_11", false, true); 
    SetLampLit("candle_floor_blue_20", false, true); 
}
 
When the guardian has reached step 12, no more steps are made.
 
Don't know if you need anymore information.
 
This whole script worked before, but I added some extra finesses in and now it crashes the level. So yeah.
 
 
Well, found out the scripts which messed everything up.
 //Set up a random scream (33% chance) 
    if(alLumpIdx > 5 && RandInt(0,2)==0) 
    { 
        PlaySoundAtEntity("GuardianScream", "25_guardian_ontop.snt", "Player", 0, false); 
    } 
     
    //Reached final step, no need for further guardian sounds 
    if(GetLocalVarInt(sEvent) == 12) return;
 
This here is wrong appearntly. Can you guys see anything wrong?
			  
			
			
 
Derp. 
			
				
(This post was last modified: 08-16-2014, 12:40 PM by Neelke.)
 
				
			 
		 |  
	 
 | 
 
	| 08-16-2014, 12:07 PM  | 
	
		
	 | 
 
 
	
		
		Mudbill 
 
 
		
			Muderator 
			
			
			
 
			
	Posts: 3,881 
	Threads: 59 
	Joined: Apr 2013
	
 Reputation: 
179
		
	 | 
	
		
			
RE: Some complex issue 
			 
			
				You might want to actually contain your RandInt in a variable. I don't think you can run void blocks within an if-statement. How about this? 
int iRandom = RandInt(0, 2);
  if(alLumpIdx > 5 && iRandom == 0) 
 
 
If that's not the issue, could you post the crash report as well?
			  
			
			
 
			
				
(This post was last modified: 08-16-2014, 03:45 PM by Mudbill.)
 
				
			 
		 |  
	 
 | 
 
	| 08-16-2014, 03:44 PM  | 
	
		
	 | 
 
 
	
		
		TheGreatCthulhu 
 
 
		
			Member 
			
			
			
 
			
	Posts: 213 
	Threads: 10 
	Joined: Oct 2010
	
 Reputation: 
32
		
	 | 
	
		
			
RE: Some complex issue 
			 
			
				That shouldn't cause the issue; the RandInt function returns an integer, so functionally the two variants of the code should be equivalent - if not, then it's a bug in the script engine (but I don't think that is the case). Try Mudbill's suggestion anyway, just in case. 
After that - if you are sure that the lines of code you quoted are the ones that are causing the problem, you can pinpoint the source like this: first comment out just the "PlaySoundAtEntity" part (just place // in front), and see if the game crashes or not. If it does, than that line is the problem. If not, un-comment it, and comment out the "if(GetLocalVarInt(sEvent) == 12) return;" part, then run, and if the game doesn't crash, that line was the problem.
 
That said, that particular line looks suspicious to me, because of this:
 //Reached final step, no need for further guardian sounds     if(GetLocalVarInt(sEvent) == 12) return;          //Configurables     string sEvent = asTimer; //Sets the timer name to the variable name 
 
 
Note that sEvent is declared  after it is used in the previous line of code. That shouldn't even compile.  
The "string sEvent = asTimer;" part should come before the call to GetLocalVarInt.
			  
			
			
			
		 |  
	 
 | 
 
	| 08-16-2014, 07:25 PM  | 
	
		
	 | 
 
 
	
		
		Neelke 
 
 
		
			Senior Member 
			
			
			
 
			
	Posts: 668 
	Threads: 82 
	Joined: Apr 2013
	
 Reputation: 
26
		
	 | 
	
		
			
RE: Some complex issue 
			 
			
				That did it. Both Mudbill and TheGreat. What I find weird here though is the fact that I had to delete the alLumpIdx premanently. For some reason it refused to work no matter what I changed. This is how it looks right now. 
int iRandom = RandInt(0,2); 
    if(iRandom == 0) 
    { 
        PlaySoundAtEntity("GuardianScream", "25_guardian_ontop.snt", "Player", 0, false); 
    }
  
string sEvent = asTimer; //Sets the timer name to the variable name 
    AddLocalVarInt(sEvent, 1); //Sets a variable to the guardians step 
    string sDmgDeathArea = "AreaGuardianKill_" + GetLocalVarInt(sEvent); //Sets a new dmg area after each variable 
     
    //No need for further steps after 12 
    if(GetLocalVarInt(sEvent) == 12) return;
 
The only thing here now that's making it worse is that the random guardian sound might be played at the first step, but I guess I gotta accept that as it is. Either way, it works. Thanks guys.
			  
			
			
 
Derp. 
			
		 |  
	 
 | 
 
	| 08-16-2014, 10:41 PM  | 
	
		
	 | 
 
 
	
		
		TheGreatCthulhu 
 
 
		
			Member 
			
			
			
 
			
	Posts: 213 
	Threads: 10 
	Joined: Oct 2010
	
 Reputation: 
32
		
	 | 
	
		
			
RE: Some complex issue (SOLVED) 
			 
			
				 (08-16-2014, 10:41 PM)Neelke Wrote:  What I find weird here though is the fact that I had to delete the alLumpIdx premanently. For some reason it refused to work no matter what I changed. [...] The only thing here now that's making it worse is that the random guardian sound might be played at the first step, but I guess I gotta accept that as it is. 
That happens for the same reason: aLumpIdx is used near the top of the function, but the script engine doesn't know what it is since it is declared at the very bottom of the function  
(where it says "int alLumpIdx = GetLocalVarInt(sEvent);").  
But in this case, you can't simly move that line, because the script changes the local variable's value, so you still need to make the call to GetLocalVarInt. 
 
Try something like this:
 void TimerGuardian(string &in asTimer) {     float fShadowLumpFadeMul = RandFloat(2.0, 3.0);     float fShadowNewStep = 3.0f;     float fDelayToEvent = 0.25f;          string sEvent = asTimer; //Sets the timer name to the variable name     int alLumpIdx = GetLocalVarInt(sEvent);          //If step > 5, set up a random scream (33% chance)     int iRandom = RandInt(0,2);     if(alLumpIdx > 5 && iRandom == 0)     {         PlaySoundAtEntity("GuardianScream", "25_guardian_ontop.snt", "Player", 0, false);     }                  AddLocalVarInt(sEvent, 1); //Sets a variable to the guardians step     string sDmgDeathArea = "AreaGuardianKill_" + GetLocalVarInt(sEvent); //Sets a new dmg area after each variable          //No need for further steps after 12     if(GetLocalVarInt(sEvent) == 12) return;          for(int i=1; i<=6; ++i) SetPropActiveAndFade("slime_"+GetLocalVarInt(sEvent)+"_"+i, true, fShadowLumpFadeMul);     GuardianGroundEffect("AreaGuardianEffectFloor_"+GetLocalVarInt(sEvent), true);     SetEntityActive(sDmgDeathArea, true);     FadeInGuardianLight("ShadowLight_"+GetLocalVarInt(sEvent));          StartScreenShake(0.1f, RandFloat(0.15f,0.6f), 0, 0.1);     PlaySoundAtEntity("GuardianSplashSound", "25_guardian_slime_appear.snt", "Player", 0, false);          AddTimer(sEvent, fShadowNewStep, "TimerGuardian");          //Set checkpoint     CheckPoint("reset", "PlayerStartArea_1", "ResetGuardian", "Hints", "DeathByWorm1");          //Extra events depending on the step     alLumpIdx = GetLocalVarInt(sEvent);     AddTimer("EventStep"+alLumpIdx, fDelayToEvent, "EventStep"+alLumpIdx); } 
 
 
Unless I missed something, that should work. 
These are the parts I changed:
 // NOTE: just reorganized the code and added one line     string sEvent = asTimer; //Sets the timer name to the variable name     int alLumpIdx = GetLocalVarInt(sEvent);  // <-- NOTE: the added line          //If step > 5, set up a random scream (33% chance)     int iRandom = RandInt(0,2);     if(alLumpIdx > 5 && iRandom == 0)     {         PlaySoundAtEntity("GuardianScream", "25_guardian_ontop.snt", "Player", 0, false);     }                  AddLocalVarInt(sEvent, 1); //Sets a variable to the guardians step     string sDmgDeathArea = "AreaGuardianKill_" + GetLocalVarInt(sEvent); //Sets a new dmg area after each variable 
 
 
and
 //Extra events depending on the step     alLumpIdx = GetLocalVarInt(sEvent);    // NOTE: removed the "int" 
 
  
			 
			
			
			
		 |  
	 
 | 
 
	| 08-17-2014, 01:11 PM  | 
	
		
	 | 
 
 
	
		
		Neelke 
 
 
		
			Senior Member 
			
			
			
 
			
	Posts: 668 
	Threads: 82 
	Joined: Apr 2013
	
 Reputation: 
26
		
	 | 
	
		
			
RE: Some complex issue (SOLVED) 
			 
			
				(facepalm) Man, sometimes you just don't know what you're doing. Thanks man XD
			 
			
			
 
Derp. 
			
		 |  
	 
 | 
 
	| 08-17-2014, 02:16 PM  | 
	
		
	 | 
 
 
	 
 |