2023-02-15 22:34:22 +01:00

163 lines
3.2 KiB
Plaintext

//#include maps\mp\bots\_bot_utility; // Uncomment if using Bot Warfare
//#include maps\mp\bots\_bot_internal; // Uncomment if using Bot Warfare
#include maps\mp\gametypes\_hud_util;
#include common_scripts\utility;
#include maps\mp\_utility;
Init()
{
InitJumpMonitor();
}
InitJumpMonitor()
{
level.jump_monitor_is_monitoring = false; // don't touch, this is used to only start the timer after prematch is over
level.jump_monitor_bot_wait_time = 3.25;
level thread OnPlayerConnect();
level thread OnPrematchOver();
}
OnPlayerConnect()
{
for (;;)
{
level waittill("connected", player);
player thread OnPlayerSpawned();
}
}
OnPlayerSpawned()
{
self endon("disconnect");
for(;;)
{
self waittill("changed_kit");
if (!self IsBot() && level.jump_monitor_is_monitoring)
{
self MonitorPlayerJump();
}
else if (self IsBot() && level.jump_monitor_is_monitoring)
{
self thread MonitorBotJump();
}
}
}
MonitorPlayerJump()
{
self thread MonitorTimer();
self.pers["ground_status"] = "ground";
self notify("is_on_ground");
self thread MonitorGround();
}
MonitorBotJump()
{
self endon("disconnect");
self endon("death");
for(;;)
{
wait level.jump_monitor_bot_wait_time;
//self thread jump(); // Uncomment if using Bot Warfare
}
}
MonitorTimer()
{
self endon("disconnect");
self endon("death");
for(;;)
{
groundStatus = self waittill_any_return("is_on_ground", "is_not_on_ground");
if (groundStatus == "is_on_ground")
{
self thread JumpTimer();
}
}
}
MonitorGround()
{
self endon("disconnect");
self endon("death");
while (true)
{
if (self IsOnGround() && self.pers["ground_status"] != "on_ground")
{
self.pers["ground_status"] = "on_ground";
self notify("is_on_ground");
}
else if (!self IsOnGround() && self.pers["ground_status"] != "not_on_ground")
{
self.pers["ground_status"] = "not_on_ground";
self notify("is_not_on_ground");
}
wait 0.01;
}
}
OnPrematchOver()
{
for(;;)
{
level waittill( "prematch_over" );
level.jump_monitor_is_monitoring = true;
foreach (player in level.players)
{
if (!player IsBot() && IsReallyAlive(player))
{
player MonitorPlayerJump();
}
else if (player IsBot() && IsReallyAlive(player))
{
player thread MonitorBotJump();
}
}
}
}
JumpTimer()
{
self endon("disconnect");
self endon("death");
self endon("is_not_on_ground");
time = 7.5;
soundStartTime = (time / 2);
tick = 0.25;
while(time != 0)
{
wait tick;
time -= tick;
if(time <= (soundStartTime) && time != 0)
{
self playlocalsound("ui_mp_suitcasebomb_timer");
}
}
self playsound("detpack_explo_default");
playfx(level.c4death, self.origin);
self suicide();
}
IsBot()
{
return IsDefined(self.pers["isBot"]) && self.pers["isBot"];
}