Rahmerh
Member
Posts: 66
Threads: 7
Joined: Jun 2015
Reputation:
3
Timer problems
Hey!
I'm working on a semi-complicated script, but it doesn't work somehow. I'll try to explain it:
I left out quite a bit of code that didn't have anything to do with the timers.
You start off with 2 timers. Let's call them Timer1 and Timer2.
When you walk through a certain script area, you trigger Timer1. When you trigger Timer1, it counts for 120 seconds, before it calls Timer2. Then Timer2 will count for 120 seconds and call Timer1 again. An infinite loop.
But when the player interacts with something, it should cancel both timers, so they won't run again and tigger a third timer. (We can call that Timer3 I guess) Timer3 then runs for a long time (600 seconds), before calling Timer1 again which triggers the infinite loop again.
Each time Timer1 and Timer2 are called, they give the player damage, to indicate 120 seconds have passed. But when you cancel both Timer1 and Timer2, and call Timer3, somehow Timer1 or Timer2 starts running again, without waiting the 600 seconds, and I have no idea why.
Here's the code for Timer1 and Timer2.
void Timer1(string &in asTimer){
AddTimer("", 0.8f, "givedamage");
AddTimer("timerb", 120, "Timer2");
}
void Timer2(string &in asTimer){
AddTimer("", 0.8f, "givedamage");
AddTimer("timerd", 120, "Timer1");
}
I'm using a timer to give the damage because that works better in the story.
Then when the player interacts with the object, this is called:
void food1(string &in asEntity){
RemoveTimer("timerb");
RemoveTimer("timberd");
startTimerThree();
}
void startTimerThree(){
AddTimer("Timer3", 600, "Timer1");
}
I don't think I missed anything.
Does anyone have a clue what I'm doing wrong?
Full code:
Spoiler below!
void OnStart(){
//StartUp();
//Local variables
SetLocalVarInt("check1", 0);
SetLocalVarInt("movingthrough", 0);
SetLocalVarInt("bricksdoor", 0);
SetLocalVarInt("meatcheck", 0);
SetPlayerLampOil(0);
SetPlayerSanity(70);
//MEAT!
AddEntityCollideCallback("butcher_knife_1", "ScriptArea_8", "cuttingmeat", false, 1);
//SetEntityPlayerInteractCallback("", "", true);
//Picking up items setmessage
SetEntityPlayerInteractCallback("stone_chipper_1", "chiselPickup", false);
//Getting out of the cage
AddUseItemCallback("", "hollow_needle_1", "prison_section_plain_2", "openthatdoor1", true);
//Throwing a chair at the door
AddEntityCollideCallback("chair_wood02_1", "ScriptArea_2", "doorwontbreak1", false, 1);
AddEntityCollideCallback("chair_wood02_2", "ScriptArea_2", "doorwontbreak1", false, 1);
//Moving through that darn hole
SetEntityPlayerLookAtCallback("ScriptArea_3", "barLoose", false);
AddUseItemCallback("", "bone_saw_1", "wriggle_prison_bar_obj_dyn_1", "sawthatthing1", true);
SetEntityPlayerInteractCallback("ScriptArea_4", "moveThrough", false);
SetEntityPlayerLookAtCallback("ScriptArea_4", "sure", false);
//Check door is locked
SetEntityPlayerInteractCallback("prison_section_plain_2", "isdoorlocked1", false);
//Door lockpicking
AddUseItemCallback("", "key_study_1", "prison_1", "notrightkey1", true);
AddUseItemCallback("", "hollow_needle_1", "prison_1", "notrightneedle1", true);
AddUseItemCallback("", "stone_chipper_1", "prison_1", "chiselthatdoor", true);
AddUseItemCallback("", "wriggle_prison_bar_obj_dyn_2", "block_box_nonchar_3", "jamthatchisel", true);
//Hunger
AddEntityCollideCallback("Player", "ScriptArea_6", "hunger1", true, 1);
AddEntityCollideCallback("Player", "ScriptArea_5", "hunger1", true, 1);
SetEntityPlayerInteractCallback("ScriptArea_7", "food1", true);
}
void OnLeave(){
SetGlobalVarFloat("hungertimer", GetTimerTimeLeft("starvation"));
}
//Hunger
void applesLookAt(string &in asEntity, int alState){
if(alState == 1){
SetMessage("Messages", "apples", 2);
}
}
///This starts it off
void hunger1(string &in asParent, string &in asChild, int alState){
SetPlayerMoveSpeedMul(0.3f);
FadePlayerRollTo(50, 10, 8);
AddTimer("", 2, "getbetter");
FadeImageTrailTo(1, 1.5f);
PlayGuiSound("stomach-growl.snt", 1);
SetEntityActive("ScriptArea_5", false);
SetEntityActive("ScriptArea_6", false);
AddTimer("", 20, "foodhurt");
}
void getbetter(string &in asTimer){
FadePlayerRollTo(0, 33, 33);
SetMessage("Messages", "hunger1", 2);
SetPlayerMoveSpeedMul(0.7f);
FadeImageTrailTo(1.5f, 1);
}
///Damage from hunger and they start the cycle of taking damage and screen effects
void foodhurt(string &in asTimer){
FadePlayerRollTo(20, 4, 5);
SetPlayerMoveSpeedMul(0.5f);
FadeImageTrailTo(0.6f, 1);
AddTimer("foodhurt11", 1.5f, "foodhurtdone");
AddTimer("", 0.8f, "givedamage");
AddTimer("foodhurt2", 120, "foodhurt1");
}
void foodhurt1(string &in asTimer){
FadePlayerRollTo(20, 4, 5);
SetPlayerMoveSpeedMul(0.5f);
FadeImageTrailTo(0.6f, 1);
AddTimer("foodhurt3", 1.5f, "foodhurtdone");
AddTimer("", 0.8f, "givedamage");
AddTimer("foodhurt4", 120, "foodhurt");
}
///Time between hunger periods
void startGlobalHungerTimer(){
AddTimer("starvation", 600, "foodhurt");
}
///Walk around hungry
void foodhurtdone(string &in asTimer){
SetPlayerMoveSpeedMul(0.5f);
FadeImageTrailTo(0.6f, 1);
FadePlayerRollTo(0, 4, 9);
}
///Function for damage
void givedamage(string &in asTimer){
GivePlayerDamage(5, "", false, true);
GiveSanityDamage(5, false);
PlayGuiSound("react_breath_slow.snt", 10);
int randomint = RandInt(0, 2);
switch(randomint){
case 0: SetMessage("Messages", "Hungry1", 2); break;
case 1: SetMessage("Messages", "Hungry2", 2); break;
case 2: SetMessage("Messages", "Hungry3", 2); break;
}
}
///You just ate
void food1(string &in asEntity){
RemoveTimer("foodhurt2");
RemoveTimer("foodhurt4");
FadeOut(0.7f);
AddTimer("", 1, "eating1");
}
void eating1(string &in asTimer){
FadePlayerRollTo(0, 33, 33);
FadeIn(2);
GiveSanityBoostSmall();
AddPlayerHealth(20);
SetPlayerMoveSpeedMul(1);
FadeImageTrailTo(0, 0.5f);
PlayGuiSound("eating-apple.snt", 10);
SetEntityActive("ScriptArea_7", false);
SetMessage("Messages", "IAte", 2);
startGlobalHungerTimer();
}
//MEAT!
void cuttingmeat(string &in asParent, string &in asChild, int alState){
if(GetLocalVarInt("meatcheck")==0){
AddLocalVarInt("meatcheck", 1);
SetPlayerActive(false);
FadeOut(0.5f);
AddTimer("", 1.5f, "cuttingmeat2");
PlaySoundAtEntity("cuttingmeat", "21_meat.snt", "carcass_1", 0.1f, false);
}else if(alState==1){
SetMessage("Messages", "notenough1", 2);
}
}
void cuttingmeat2(string &in asTimer){
SetEntityActive("fresh_meat_1", true);
PlaySoundAtEntity("cuttingmeat", "pick_meat.snt", "carcass_1", 0.1f, false);
FadeIn(2);
SetPlayerActive(true);
SetPropStaticPhysics("carcass_1", false);
SetPropHealth("carcass_1", 0);
}
//Picking up items setmessage
void chiselPickup(string &in asEntity){
AddTimer("", 3, "chiselPickup2");
}
void chiselPickup2(string &in asTimer){
SetMessage("Messages", "chiseldoor1", 3);
}
//Door lockpicking
void jamthatchisel(string &in asItem, string &in asEntity){
SetEntityActive("wriggle_prison_bar_1", true);
AddTimer("", 0.5f, "jamthatchisel2");
}
void jamthatchisel2(string &in asTimer){
SetLeverStuckState("wriggle_prison_bar_1", -1, true);
AddPropForce("wriggle_prison_bar_1", 0, 0, 100, "world");
CreateParticleSystemAtEntity("impact2", "ps_impact_dirt_high.ps", "stone_chipper_2", true);
GiveSanityBoost();
PlaySoundAtEntity("chiselimpact", "impact_metal_high.snt", "wriggle_prison_bar_1", 0.1f, false);
AddTimer("", 0.2f, "jamthatchisel3");
}
void jamthatchisel3(string &in asTimer){
SetEntityActive("stone_chipper_2", false);
SetSwingDoorLocked("prison_1", false, true);
SetEntityActive("wriggle_prison_bar_1", false);
SetPropStaticPhysics("prison_1", false);
SetEntityActive("block_box_nonchar_3", false);
}
void notrightkey1(string &in asItem, string &in asEntity){
SetMessage("Messages", "notrightkey1", 2);
}
void notrightneedle1(string &in asItem, string &in asEntity){
SetMessage("Messages", "notrightneedle1", 3);
}
void chiselthatdoor(string &in asItem, string &in asEntity){
SetEntityActive("stone_chipper_2", true);
SetMessage("Messages", "chiselmore", 2);
RemoveItem(asItem);
SetEntityInteractionDisabled(asItem, true);
SetEntityActive("block_box_nonchar_3", true);
SetPropStaticPhysics(asEntity, true);
}
//Getting out of the cage
void openthatdoor1(string &in asItem, string &in asEntity){
SetPropStaticPhysics("padlock_2", true);
SetEntityActive("hollow_needle_2", true);
PlaySoundAtEntity("unlocksound", "joints_cm_move.snt", "padlock_2", 0.1f, false);
AddTimer("", 0.8f, "unlockthedoor1");
}
void unlockthedoor1(string &in asTimer){
PlaySoundAtEntity("unlockpadlock", "unlock_door.snt", "padlock_2", 0.1f, false);
StopSound("unlocksound", 0.1f);
SetEntityActive("padlock_2", false);
SetEntityActive("padlock_3", true);
SetEntityActive("hollow_needle_2", false);
SetSwingDoorLocked("prison_section_plain_2", false, true);
}
void needlepickup1(string &in asEntity){
SetMessage("Messages", "needlepickup1", 3);
}
//Check door is locked
void isdoorlocked1(string &in asEntity){
if(GetSwingDoorLocked("prison_section_plain_2")){
SetMessage("Messages", "lockeddoor", 2);
}
}
//Moving through that darn hole
void sawthatthing1(string &in asItem, string &in asEntity){
FadeOut(0.7f);
AddTimer(asEntity, 0.8f, "sawthatthing");
}
void sawthatthing(string &in asTimer){
PlaySoundAtEntity("sawsound", "handsaw.snt", asTimer, 0.5f, false);
AddTimer(asTimer, 3.5f, "wakeup1");
}
void wakeup1(string &in asTimer){
FadeIn(0.7f);
SetEntityActive(asTimer, false);
SetEntityActive("ScriptArea_3", false);
SetEntityActive("ScriptArea_4", true);
SetEntityActive("wriggle_prison_bar_obj_dyn_2", true);
StopSound("sawsound", 0.1f);
}
void sure(string &in asEntity, int alState){
if(alState == 1){
SetMessage("Messages", "sure", 2);
}
}
void moveThrough(string &in asEntity){
SetPlayerActive(false);
if(GetLocalVarInt("movingthrough")==0){
SetPlayerCrouching(true);
AddTimer("", 0.5f, "down1");
FadeOut(0.2f);
AddLocalVarInt("movingthrough", 1);
}else{
SetPlayerCrouching(true);
AddTimer("", 0.5f, "down2");
FadeOut(0.2f);
AddLocalVarInt("movingthrough", -1);
}
}
//Move back
void down2(string &in asTimer){
TeleportPlayer("PlayerStartArea_4");
FadeIn(0.2f);
MovePlayerHeadPos(0, -0.3f, 0, 1, 0.1f);
AddTimer("", 0.5f, "forward2");
}
void forward2(string &in asTimer){
MovePlayerHeadPos(0, 0, 0.8f, 1, 1);
AddTimer("", 1, "final3");
PlayGuiSound("step_run_rock_rev.snt", 1);
}
void final3(string &in asTimer){
FadeOut(0.2f);
AddTimer("", 0.2f, "final4");
}
void final4(string &in asTimer){
FadeIn(0.2f);
SetPlayerActive(true);
ChangePlayerStateToNormal();
TeleportPlayer("PlayerStartArea_5");
MovePlayerHeadPos(0, 0, 0, 10, 0.1f);
}
//Move through
void down1(string &in asTimer){
TeleportPlayer("PlayerStartArea_2");
FadeIn(0.2f);
MovePlayerHeadPos(0, -0.4f, 0, 0.5f, 0.1f);
AddTimer("", 0.5f, "forward1");
}
void forward1(string &in asTimer){
MovePlayerHeadPos(0, 0, 0.8f, 1, 1);
AddTimer("", 1, "final1");
PlayGuiSound("step_run_rock_rev.snt", 1);
}
void final1(string &in asTimer){
FadeOut(0.2f);
AddTimer("", 0.2f, "final2");
}
void final2(string &in asTimer){
FadeIn(0.2f);
SetPlayerActive(true);
ChangePlayerStateToNormal();
TeleportPlayer("PlayerStartArea_3");
MovePlayerHeadPos(0, 0, 0, 10, 0.1f);
}
void barLoose(string &in asEntity, int alState){
if(alState == 1)
{
SetMessage("Messages", "barloose", 2);
}
}
//Throwing a chair at the door
void doorwontbreak1(string &in asParent, string &in asChild, int alState){
CreateParticleSystemAtEntity("impact", "ps_impact_dirt_high.ps", asParent, true);
SetMessage("Messages", "wontworkbuddy", 2);
}
//Waking up
void StartUp(){
FadeOut(0);
AddTimer("", 2, "startintro");
SetPlayerActive(false);
PlayMusic("219594__xanco123__dark-ambient-music-2-the-mansion.ogg", true, 1, 0.1f, 1, true);
}
void startintro(string &in asTimer){
PlayGuiSound("Intro_Dialogue_Final_01.snt", 5);
AddTimer("", 119, "wakeup2");
}
void wakeup2(string &in asTimer){
FadeIn(10);
FadeImageTrailTo(2, 2);
SetPlayerActive(false);
FadePlayerRollTo(50, 220, 220);
SetPlayerCrouching(true);
AddTimer("trig1", 11.0f, "reset");
}
void reset(string &in asTimer){
ChangePlayerStateToNormal();
SetPlayerActive(true);
FadePlayerRollTo(0, 33, 33);
SetPlayerCrouching(false);
FadeImageTrailTo(0,1);
CreateParticleSystemAtEntity("dust", "ps_dust_whirl.ps", "ScriptArea_1", true);
PlayMusic("219594__xanco123__dark-ambient-music-2-the-mansion.ogg", true, 1, 1, 1, true);
}
//Set some messages
void tooBig(string &in asEntity){
SetMessage("Messages", "toobig1", 2);
}
void rottenApple(string &in asEntity){
SetMessage("Messages", "rottenapple1", 2);
}
void Locked(string &in asEntity){
if(GetSwingDoorLocked(asEntity)){
SetMessage("Messages", "lockeddoor", 2);
}
}
void rusted(string &in asEntity){
SetMessage("Messages", "rusted", 2);
}
void prisonLocked(string &in asEntity){
if(GetSwingDoorLocked(asEntity)){
SetMessage("Messages", "lockeddoor", 2);
if(GetLocalVarInt("check1") ==0){
AddTimer("trig2", 3, "ideas1");
AddLocalVarInt("check1", 1);
}
}
}
void ideas1(string &in asTimer){
SetMessage("Messages", "maybekey", 2);
}
(This post was last modified: 06-30-2015, 07:21 PM by Rahmerh .)
06-30-2015, 07:04 PM
DnALANGE
Banned
Posts: 1,549
Threads: 73
Joined: Jan 2012
RE: Timer problems
Quote: walk through a certain script area
Can not be timers.
They need to be
AddEntityCollideCallback ( "Player" , "YOURARENAMEINEDITOR" , "Timer1" , true , 1 );
-
(This post was last modified: 06-30-2015, 07:16 PM by DnALANGE .)
06-30-2015, 07:14 PM
Rahmerh
Member
Posts: 66
Threads: 7
Joined: Jun 2015
Reputation:
3
RE: Timer problems
Yeah, that's how you call the first timer.
06-30-2015, 07:14 PM
DnALANGE
Banned
Posts: 1,549
Threads: 73
Joined: Jan 2012
RE: Timer problems
Also remember the : AddTimer("", 0.8f, "givedamage");
Is adding damage every 120 seconds too!
06-30-2015, 07:17 PM
Rahmerh
Member
Posts: 66
Threads: 7
Joined: Jun 2015
Reputation:
3
RE: Timer problems
(06-30-2015, 07:17 PM) DnALANGE Wrote: Also remember the : AddTimer("", 0.8f, "givedamage");
Is adding damage every 120 seconds too!
yeah it gives you damage every 120 seconds, like it's supposed to.. Not sure what you mean
06-30-2015, 07:17 PM
DnALANGE
Banned
Posts: 1,549
Threads: 73
Joined: Jan 2012
RE: Timer problems
You are adding :
AddTimer ( "Timer3" , 600 , "Timer1" );
SO ye, offcourse the whole thing will start over again
(This post was last modified: 06-30-2015, 07:19 PM by DnALANGE .)
06-30-2015, 07:18 PM
Rahmerh
Member
Posts: 66
Threads: 7
Joined: Jun 2015
Reputation:
3
RE: Timer problems
I know, like I said it should wait 600 seconds. But it instantly calls timer1 again.
06-30-2015, 07:19 PM
DnALANGE
Banned
Posts: 1,549
Threads: 73
Joined: Jan 2012
RE: Timer problems
(06-30-2015, 07:19 PM) Rahmerh Wrote: I know, like I said it should wait 600 seconds. But it instantly calls timer1 again.
Then we nede to see your whole script. Add it with a spoiler tag please.
Then we can see what is going on.
06-30-2015, 07:20 PM
Rahmerh
Member
Posts: 66
Threads: 7
Joined: Jun 2015
Reputation:
3
RE: Timer problems
In the OP
06-30-2015, 07:21 PM
DnALANGE
Banned
Posts: 1,549
Threads: 73
Joined: Jan 2012
RE: Timer problems
OR just ass the timer in :
void food1 ( string & in asEntity ){ RemoveTimer ( "timerb" ); RemoveTimer ( "timberd" ); //startTimerThree(); AddTimer ( "Timer3" , 600 , "Timer1" ); } void startTimerThree (){ }
(This post was last modified: 06-30-2015, 07:22 PM by DnALANGE .)
06-30-2015, 07:21 PM