mirror of
https://github.com/Resxt/Plutonium-T6-Scripts.git
synced 2025-04-22 06:35:44 +00:00
Made it possible to have a default randomized map and mode from a user defined list when the human players count is between two values defined by the user Added dvar mapvote_default_rotation_maps Added dvar mapvote_default_rotation_modes (MP only) Added dvar mapvote_default_rotation_min_players Added dvar mapvote_default_rotation_max_players
154 lines
3.4 KiB
Plaintext
154 lines
3.4 KiB
Plaintext
/*
|
|
All the credits for this script go to DoktorSAS for both the source code and for helping me figuring this out
|
|
https://github.com/DoktorSAS/PlutoniumT6Mapvote/blob/master/Zombies/mapvote.gsc
|
|
|
|
menuSounds = array("zmb_meteor_activate", "zmb_spawn_powerup", "zmb_powerup_grabbed", "zmb_switch_flip", "zmb_elec_start", "zmb_perks_packa_ready");
|
|
*/
|
|
|
|
#include common_scripts\utility;
|
|
#include maps\mp\_utility;
|
|
|
|
Init()
|
|
{
|
|
if (GetDvarInt("mapvote_enable"))
|
|
{
|
|
replaceFunc(maps\mp\zombies\_zm::intermission, ::OnIntermissionStart);
|
|
}
|
|
}
|
|
|
|
OnIntermissionStart()
|
|
{
|
|
level.intermission = 1;
|
|
level notify("intermission");
|
|
|
|
for (i = 0; i < level.players.size; i++)
|
|
{
|
|
level.players[i] thread player_intermission();
|
|
level.players[i] hide();
|
|
level.players[i] setclientuivisibilityflag("hud_visible", 0);
|
|
|
|
level.players[i] setclientthirdperson(0);
|
|
level.players[i].health = 100;
|
|
level.players[i] stopsounds();
|
|
level.players[i] stopsounds();
|
|
}
|
|
|
|
wait GetDvarInt("mapvote_display_wait_time");
|
|
|
|
[[level.mapvote_rotate_function]]();
|
|
|
|
for (i = 0; i < level.players.size; i++)
|
|
{
|
|
level.players[i] notify("_zombie_game_over");
|
|
level.players[i].sessionstate = "intermission";
|
|
}
|
|
|
|
players = get_players();
|
|
i = 0;
|
|
while (i < players.size)
|
|
{
|
|
setclientsysstate("levelNotify", "zi", players[i]);
|
|
i++;
|
|
}
|
|
wait 0.25;
|
|
players = get_players();
|
|
i = 0;
|
|
while (i < players.size)
|
|
{
|
|
setclientsysstate("lsm", "0", players[i]);
|
|
i++;
|
|
}
|
|
level thread maps\mp\zombies\_zm::zombie_game_over_death();
|
|
}
|
|
|
|
player_intermission()
|
|
{
|
|
self closemenu();
|
|
self closeingamemenu();
|
|
|
|
level endon("stop_intermission");
|
|
self endon("disconnect");
|
|
self endon("death");
|
|
|
|
self.score = self.score_total;
|
|
|
|
self.spectatorclient = -1;
|
|
self.killcamentity = -1;
|
|
self.archivetime = 0;
|
|
self.psoffsettime = 0;
|
|
self.friendlydamage = undefined;
|
|
points = getstructarray("intermission", "targetname");
|
|
if (!isDefined(points) || points.size == 0)
|
|
{
|
|
points = getentarray("info_intermission", "classname");
|
|
|
|
location = getDvar("ui_zm_mapstartlocation");
|
|
for(i = 0;i < points.size;i++)
|
|
{
|
|
if(points[i].script_string == location)
|
|
{
|
|
points = points[i];
|
|
}
|
|
}
|
|
|
|
if (points.size < 1)
|
|
{
|
|
return;
|
|
}
|
|
}
|
|
if (isdefined(self.game_over_bg))
|
|
self.game_over_bg destroy();
|
|
org = undefined;
|
|
while (1)
|
|
{
|
|
points = array_randomize(points);
|
|
i = 0;
|
|
while (i < points.size)
|
|
{
|
|
point = points[i];
|
|
if (!isDefined(org))
|
|
{
|
|
self spawn(point.origin, point.angles);
|
|
}
|
|
if (isDefined(points[i].target))
|
|
{
|
|
if (!isDefined(org))
|
|
{
|
|
org = spawn("script_model", self.origin + vectorScale((0, 0, -1), 60));
|
|
org setmodel("tag_origin");
|
|
}
|
|
org.origin = points[i].origin;
|
|
org.angles = points[i].angles;
|
|
j = 0;
|
|
while (j < get_players().size)
|
|
{
|
|
player = get_players()[j];
|
|
player camerasetposition(org);
|
|
player camerasetlookat();
|
|
player cameraactivate(1);
|
|
j++;
|
|
}
|
|
speed = 20;
|
|
if (isDefined(points[i].speed))
|
|
{
|
|
speed = points[i].speed;
|
|
}
|
|
target_point = getstruct(points[i].target, "targetname");
|
|
dist = distance(points[i].origin, target_point.origin);
|
|
time = dist / speed;
|
|
q_time = time * 0.25;
|
|
if (q_time > 1)
|
|
{
|
|
q_time = 1;
|
|
}
|
|
org moveto(target_point.origin, time, q_time, q_time);
|
|
org rotateto(target_point.angles, time, q_time, q_time);
|
|
wait(time - q_time);
|
|
wait q_time;
|
|
i++;
|
|
continue;
|
|
}
|
|
i++;
|
|
}
|
|
}
|
|
} |