by Barny-kun » Mon Dec 18, 2017 1:11 pm
This seems complexy
I'm curious on how mods like AOW, Zombie Horde, Deathrun, WhoDunIt and the likes do to select a new pursuer when the actual one leaves while the match is running..
Here is the full script, just to complement, also in the hope that someone find the issue:
Spoiler:Code: Select all
#include "zcommon.acs"
#define P_BASETID 1000
#define MAXPLAYERS 64
int Time = (60*5);
script 1 ENTER
{
ClearInventory();
delay(1);
Thing_ChangeTID(0, P_BASETID+PlayerNumber());
}
script 2 RESPAWN
{
Thing_ChangeTID(P_BASETID+PlayerNumber(), 0);
Thing_ChangeTID(0, P_BASETID+PlayerNumber());
Delay(1);
Thing_ChangeTID(1, 0);
}
script 3 OPEN
{
delay(1);
int r = random(0, MAXPLAYERS-1);
if (PlayerInGame(r))
{
SetFont("BIGFONT");
HudMessageBold(s:"\ccSelecting the Seeker"; HUDMSG_PLAIN, 2, 0, 0.020, 0.78, 3.5);
Delay(100);
Thing_ChangeTID(P_BASETID + r, 1);
SetFont("BIGFONT");
HudMessageBold(n:r+1, s:" \cdhas been chosen!"; HUDMSG_FADEOUT, 2, 0, 1.5, 0.4, 3.5);
TeleportOther(1,667,0);
Delay(1);
ACS_Execute(6,1,0,0,0);
}
else
restart;
}
script 4 DEATH
{
if (ActivatorTID() == 1)
{
ACS_Terminate(9, 0);
delay(1);
SetFont("BIGFONT");
HudMessageBold(s:"\cr<\cf!\cr> \cfSeeker died! Choosing new one! \cr<\cf!\cr>"; HUDMSG_FADEOUT, 3, 0, 1.5, 0.4, 3.5);
delay(35);
ACS_Execute(3,0,0,0,0); //Choosing new Seeker
}
}
script 5 (int playernum) DISCONNECT
{
if (ActivatorTID() == 1)
{
SetFont("BIGFONT");
HudMessageBold(s:"\ciSeeker left the game! Choosing new one!"; HUDMSG_FADEOUT, 3, 0, 1.5, 0.4, 3.5);
delay(35);
ACS_Execute(3,0,0,0,0); //Choosing new Seeker
}
}
script 6 (void)
{
acs_execute(7,0,0,0,0); //Gives seeker morph
acs_execute(8,0,0,0,0); //Seeker timer
acs_execute(11,0,0,0,0); //Player counter
}
script 7 (void)
{
SetActivator(1);
GiveInventory("seekermorph",1);
}
script 8 (void)
{
delay(35*5);
SetFont("BIGFONT");
HudMessageBold(s:"\cd10 \ccseconds left to hide.."; HUDMSG_PLAIN, 2, 0, 0.020, 0.78, 3.5);
Delay(35);
...
...
HudMessageBold(s:"\cg1 \ccseconds left to hide..."; HUDMSG_PLAIN, 2, 0, 0.020, 0.78, 3.5);
Delay(35);
SetHudSize(320, 200, TRUE);
SetFont("BIGFONT");
HudMessageBold(s:"\cgBegins!"; HUDMSG_FADEOUT, 3, 0, 160.0, 75.0, 3.5);
delay(1);
acs_execute(9,0,0,0,0);
}
script 9 (void)
{
SetFont("BIGFONT");
HudMessageBold(s:"\ccYou have \cg",
d:Time,
s:" \ccseconds left";
HUDMSG_PLAIN, 2, 0, 0.020, 0.78, 3.5);
delay(36);
Time--;
if(Time == 0)
{
delay(35);
SetHudSize(320, 200, TRUE);
SetFont("BIGFONT");
HudMessageBold(s:"\cgThe Hiders have won!"; HUDMSG_FADEOUT, 3, 0, 160.0, 75.0, 3.5);
delay(100);
exit_normal(0);
}
restart;
}
script 11 (void)
{
delay(35);
if (playercount() == 1)
{
if (CheckActorInventory(1, "SeekerEyes"))
{
ACS_Terminate(3, 0);
ACS_Terminate(8, 0);
ACS_Terminate(9, 0);
delay(35);
SetHudSize(320, 200, TRUE);
SetFont("BIGFONT");
HudMessageBold(s: "\cgThe Seeker has won!"; HUDMSG_FADEOUT, 3, 0, 160.0, 75.0, 3.5);
delay(100);
exit_normal(0);
}
else
{
ACS_Terminate(3, 0);
ACS_Terminate(8, 0);
ACS_Terminate(9, 0);
delay(35);
HudMessageBold(s:""; HUDMSG_PLAIN, 3, 0, 0, 0, 0);
delay(1);
SetFont("BIGFONT");
HudMessageBold(s:"\cr<\cf!\cr> \cgSeeker died! Not enough players. \cr<\cf!\cr>"; HUDMSG_FADEOUT, 2, 0, 0.020, 0.78, 3.5);
delay(35);
SetHudSize(320, 200, TRUE);
SetFont("BIGFONT");
HudMessageBold(s:"\chThe Hiders have won!"; HUDMSG_FADEOUT, 3, 0, 160.0, 75.0, 3.5);
delay(100);
exit_normal(0);
}
}
else
restart;
}
If someone know another way to prevent the game from breaking when the a seeker leaves while the match is running by choosing another seeker among the remaining players, please tell me.
This seems complexy :x I'm curious on how mods like AOW, Zombie Horde, Deathrun, WhoDunIt and the likes do to select a new pursuer when the actual one leaves while the match is running.. :o Here is the full script, just to complement, also in the hope that someone find the issue: [spoiler][code] #include "zcommon.acs" #define P_BASETID 1000 #define MAXPLAYERS 64 int Time = (60*5); script 1 ENTER { ClearInventory(); delay(1); Thing_ChangeTID(0, P_BASETID+PlayerNumber()); } script 2 RESPAWN { Thing_ChangeTID(P_BASETID+PlayerNumber(), 0); Thing_ChangeTID(0, P_BASETID+PlayerNumber()); Delay(1); Thing_ChangeTID(1, 0); } script 3 OPEN { delay(1); int r = random(0, MAXPLAYERS-1); if (PlayerInGame(r)) { SetFont("BIGFONT"); HudMessageBold(s:"\ccSelecting the Seeker"; HUDMSG_PLAIN, 2, 0, 0.020, 0.78, 3.5); Delay(100); Thing_ChangeTID(P_BASETID + r, 1); SetFont("BIGFONT"); HudMessageBold(n:r+1, s:" \cdhas been chosen!"; HUDMSG_FADEOUT, 2, 0, 1.5, 0.4, 3.5); TeleportOther(1,667,0); Delay(1); ACS_Execute(6,1,0,0,0); } else restart; } script 4 DEATH { if (ActivatorTID() == 1) { ACS_Terminate(9, 0); delay(1); SetFont("BIGFONT"); HudMessageBold(s:"\cr<\cf!\cr> \cfSeeker died! Choosing new one! \cr<\cf!\cr>"; HUDMSG_FADEOUT, 3, 0, 1.5, 0.4, 3.5); delay(35); ACS_Execute(3,0,0,0,0); //Choosing new Seeker } } script 5 (int playernum) DISCONNECT { if (ActivatorTID() == 1) { SetFont("BIGFONT"); HudMessageBold(s:"\ciSeeker left the game! Choosing new one!"; HUDMSG_FADEOUT, 3, 0, 1.5, 0.4, 3.5); delay(35); ACS_Execute(3,0,0,0,0); //Choosing new Seeker } } script 6 (void) { acs_execute(7,0,0,0,0); //Gives seeker morph acs_execute(8,0,0,0,0); //Seeker timer acs_execute(11,0,0,0,0); //Player counter } script 7 (void) { SetActivator(1); GiveInventory("seekermorph",1); } script 8 (void) { delay(35*5); SetFont("BIGFONT"); HudMessageBold(s:"\cd10 \ccseconds left to hide.."; HUDMSG_PLAIN, 2, 0, 0.020, 0.78, 3.5); Delay(35); ... ... HudMessageBold(s:"\cg1 \ccseconds left to hide..."; HUDMSG_PLAIN, 2, 0, 0.020, 0.78, 3.5); Delay(35); SetHudSize(320, 200, TRUE); SetFont("BIGFONT"); HudMessageBold(s:"\cgBegins!"; HUDMSG_FADEOUT, 3, 0, 160.0, 75.0, 3.5); delay(1); acs_execute(9,0,0,0,0); } script 9 (void) { SetFont("BIGFONT"); HudMessageBold(s:"\ccYou have \cg", d:Time, s:" \ccseconds left"; HUDMSG_PLAIN, 2, 0, 0.020, 0.78, 3.5); delay(36); Time--; if(Time == 0) { delay(35); SetHudSize(320, 200, TRUE); SetFont("BIGFONT"); HudMessageBold(s:"\cgThe Hiders have won!"; HUDMSG_FADEOUT, 3, 0, 160.0, 75.0, 3.5); delay(100); exit_normal(0); } restart; } script 11 (void) { delay(35); if (playercount() == 1) { if (CheckActorInventory(1, "SeekerEyes")) { ACS_Terminate(3, 0); ACS_Terminate(8, 0); ACS_Terminate(9, 0); delay(35); SetHudSize(320, 200, TRUE); SetFont("BIGFONT"); HudMessageBold(s: "\cgThe Seeker has won!"; HUDMSG_FADEOUT, 3, 0, 160.0, 75.0, 3.5); delay(100); exit_normal(0); } else { ACS_Terminate(3, 0); ACS_Terminate(8, 0); ACS_Terminate(9, 0); delay(35); HudMessageBold(s:""; HUDMSG_PLAIN, 3, 0, 0, 0, 0); delay(1); SetFont("BIGFONT"); HudMessageBold(s:"\cr<\cf!\cr> \cgSeeker died! Not enough players. \cr<\cf!\cr>"; HUDMSG_FADEOUT, 2, 0, 0.020, 0.78, 3.5); delay(35); SetHudSize(320, 200, TRUE); SetFont("BIGFONT"); HudMessageBold(s:"\chThe Hiders have won!"; HUDMSG_FADEOUT, 3, 0, 160.0, 75.0, 3.5); delay(100); exit_normal(0); } } else restart; } [/code][/spoiler] If someone know another way to prevent the game from breaking when the a seeker leaves while the match is running by choosing another seeker among the remaining players, please tell me.