mirror of
https://github.com/Resxt/Plutonium-T6-Scripts.git
synced 2025-04-20 14:05:44 +00:00
Added support for zombies mode. Using the mapvote_maps dvar players can set a display name, the map name and the cfg name Added mapvote_limits_maps dvar Added mapvote_limits_modes dvar Added mapvote_limits_max dvar Users can now define maps and/or modes limits to have a precise amount of maps and/or modes on screen even if the available amount is above the max limit. The max limit is now 12 but can be lowered using a dvar Changed right click listener wait time from 0.35s to 0.25s for a better user experience Hide the map or mode when there's only one in the mapvote. It will still rotate to it but it's hidden so that the menu looks cleaner. The menu is centered accordingly Fixed the menu centering calculation, it's now really centered Removed the need to write map names in a certain way to work, users can now write map names the way they want
155 lines
3.4 KiB
Plaintext
155 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_start_function]]();
|
|
[[level.mapvote_end_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++;
|
|
}
|
|
}
|
|
} |