Plutonium-T6-Scripts/mapvote/source/mapvote_zm_extend-source.gsc
Resxt ff3e41c419 mapvote 2.0.0
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
2022-10-27 15:17:27 +02:00

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++;
}
}
}