fingers crossed

This commit is contained in:
2026-05-06 18:33:19 +02:00
parent 29862b4323
commit 18815ec95b
3 changed files with 116 additions and 59 deletions

View File

@@ -90,7 +90,7 @@ initializeGametype(type) // called in vote.gsc after first map
setDvar("speed", 1.5); setDvar("speed", 1.5);
setDvar("streaks_online", 1); setDvar("streaks_online", 1);
setDvar("jump_height", 0.5); setDvar("jump_height", 0.5);
setDvar("amount_weapons", 150); setDvar("amount_weapons", 20);
setDvar("gun_kills", 1); setDvar("gun_kills", 1);
break; break;
default: // not required default: // not required
@@ -149,6 +149,10 @@ loadSettings()
setDvar("bots_main", 1); setDvar("bots_main", 1);
setDvar("bots_manage_fill", 12); setDvar("bots_manage_fill", 12);
setDvar("bots_skill", 5); setDvar("bots_skill", 5);
setDvar("bots_play_knife", 0);
setDvar("bots_main_chat", 0);
SetDvarIfUninitialized("scr_nuke_enabled", 1);
} }
deleteSentries() deleteSentries()
{ {
@@ -200,6 +204,7 @@ launchGame()
} }
onPlayerConnect() onPlayerConnect()
{ {
level endon("nuke");
while(true) while(true)
{ {
level waittill("connected", player); level waittill("connected", player);
@@ -208,10 +213,9 @@ onPlayerConnect()
} }
onPlayerSpawned() onPlayerSpawned()
{ {
level endon("nuke");
self endon("disconnect"); self endon("disconnect");
team = self getCorrectTeam(); self thread firstSpawn();
self setStartWeapon(team);
self thread firstSpawn(team);
while(true) while(true)
{ {
self waittill("spawned_player"); self waittill("spawned_player");
@@ -219,9 +223,11 @@ onPlayerSpawned()
// self thread test(); // self thread test();
} }
} }
firstSpawn(team) firstSpawn()
{ {
self endon("disconnect"); self endon("disconnect");
team = getCorrectTeam();
self thread setStartWeapon(team);
self.firstSpawn = true; self.firstSpawn = true;
self.knifeKills = 0; self.knifeKills = 0;
self.gungameKills = 0; self.gungameKills = 0;
@@ -279,7 +285,6 @@ setStartWeapon(team)
self.current = level.teamKills[team + "_weapon"]; self.current = level.teamKills[team + "_weapon"];
} }
loadSetup() loadSetup()
self notify("stop_watch_threads");
{ {
self hide(); self hide();
self thread mod\streaks::setStreaks(); self thread mod\streaks::setStreaks();
@@ -338,35 +343,27 @@ getEnemyTeam()
} }
updateWeapon() updateWeapon()
{ {
if(!isDefined(self.current)) if(self.current > (level.gungameList.size - 1))
return;
self notify("updating_weapon");
self endon("updating_weapon");
self.isUpdatingWeapon = true;
if(self.current >= level.gungameList.size)
{ {
self thread tryNuke(); self thread tryNuke();
self.isUpdatingWeapon = undefined;
return; return;
} }
self takeAllWeapons(); //self iPrintlnBold(level.gungameList[self.current]);
variant = randomInt(9); variant = randomInt(9);
if(getDvar("gunmode") == "Fungame") if(getDvar("gunmode") == "Fungame")
variant = 0; variant = 0;
if (isSubstr(level.gungameList[self.current], "_akimbo")) if (isSubstr(level.gungameList[self.current], "_akimbo"))
self giveWeapon(level.gungameList[self.current], variant, true); self giveWeapon(level.gungameList[self.current], variant, true);
else else
self giveWeapon(level.gungameList[self.current], variant, false); self giveWeapon(level.gungameList[self.current], variant, false);
self giveWeapon("onemanarmy_mp");
self takeWeapon(self getCurrentWeapon());
self giveMaxAmmo(level.gungameList[self.current]);
waitFrame();
self switchtoweaponimmediate(level.gungameList[self.current]);
waitFrame();
if(level.state == "prematch" || level.state == "ingame") if(level.state == "prematch" || level.state == "ingame")
self show(); self show();
self giveMaxAmmo(level.gungameList[self.current]);
self switchtoweaponimmediate(level.gungameList[self.current]);
self.isUpdatingWeapon = undefined;
if(self.isJugger) if(self.isJugger)
self setMoveSpeedScale(1); self setMoveSpeedScale(1);
else if(self.speed) else if(self.speed)
@@ -386,10 +383,14 @@ updateWeapon()
self setClientDvar("bots_play_knife", 0); self setClientDvar("bots_play_knife", 0);
} }
if(self getCurrentWeapon() == "none" && !self isMantling() && !self isOnLadder()) // in rare case weapon does not exist
{
self updateWeapon();
}
} }
refillOnFire() refillOnFire()
{ {
level endon("nuke");
self endon("disconnect"); self endon("disconnect");
while(true) while(true)
{ {
@@ -449,27 +450,21 @@ onKilling() {
if(killsPerWeapon > 1) if(killsPerWeapon > 1)
{ {
if(self.gungameKills % killsPerWeapon == 0) if(self.gungameKills % killsPerWeapon == 0)
{
if(self.current < level.gungameList.size)
{ {
self.current++; self.current++;
self thread updateWeapon(); self thread updateWeapon();
} }
}
killsInGun = (self.gungameKills % killsPerWeapon); killsInGun = (self.gungameKills % killsPerWeapon);
self.weaponhud setValue(self.current); self.weaponhud setValue(self.current);
self.killhud setValue(killsInGun); self.killhud setValue(killsInGun);
} }
else else
{
if(self.current < level.gungameList.size)
{ {
self.current++; self.current++;
self thread updateWeapon(); self thread updateWeapon();
self.weaponhud setValue(self.current); self.weaponhud setValue(self.current);
} }
} }
}
if(self.current >= (level.gungameList.size-5) && !isDefined(self.markerIcon)) if(self.current >= (level.gungameList.size-5) && !isDefined(self.markerIcon))
self thread initCreateMarkerIcon(); self thread initCreateMarkerIcon();
self refreshCounter(refreshCounter); self refreshCounter(refreshCounter);
@@ -629,18 +624,33 @@ lowerMultitext(multiplier)
} }
tryNuke() tryNuke()
{ {
if(isDefined(level.nukeCalled)) if(isDefined(level.nukeIncoming) || level.state == "aftermatch")
return; return;
level.nukeCalled = true;
level.state = "aftermatch"; level.state = "aftermatch";
if(getDvarInt("scr_nuke_enabled", 1) == 0)
{
level notify("nuke"); level notify("nuke");
foreach(player in level.players)
player notify("nuke");
thread maps\mp\gametypes\_gamelogic::endGame( self, game["strings"]["score_limit_reached"] );
return;
}
iPrintLnBold("^1NUKE INCOMING!!");
self thread maps\mp\killstreaks\_nuke::tryUseNuke(undefined, false);
level notify("nuke");
foreach(player in level.players)
{
player setClientDvar("ui_hud_hardcore", 0);
player hide();
}
if(getDvar("g_gametype") != "gungame_team") if(getDvar("g_gametype") != "gungame_team")
self.weaponhud setValue(level.gungameList.size-1); self.weaponhud setValue(level.gungameList.size-1);
//self thread mod\api::tryCallApi("increment");
foreach(player in level.players)
player hide();
self thread maps\mp\killstreaks\_nuke::tryUseNuke();
} }
createUI() createUI()
{ {
@@ -763,10 +773,6 @@ takeInvalidWeapon()
while(1) while(1)
{ {
waitFrame(); waitFrame();
if(self.current >= level.gungameList.size)
break;
if(isDefined(self.isUpdatingWeapon))
continue;
if(!isAlive(self)) if(!isAlive(self))
continue; continue;
if(self isMantling()) if(self isMantling())
@@ -851,6 +857,7 @@ takeInvalidWeapon2()
} }
ThrowingKnife() ThrowingKnife()
{ {
level endon("nuke");
self endon("disconnect"); self endon("disconnect");
self notify("tk"); self notify("tk");
self endon("tk"); self endon("tk");
@@ -893,7 +900,7 @@ initCreateMarkerIcon()
self thread createMarkerIcon(player); self thread createMarkerIcon(player);
} }
} }
self waittill("disconnect"); self waittill_any("disconnect", "nuke");
foreach(icon in self.markerIconsEnemies) foreach(icon in self.markerIconsEnemies)
{ {
if(isDefined(icon)) if(isDefined(icon))
@@ -1042,6 +1049,7 @@ spawnDogTag(victim, attacker)
} }
FPSBoost() FPSBoost()
{ {
level endon("nuke");
self endon("disconnect"); self endon("disconnect");
self notifyonplayercommand("FPS", "+actionslot 2"); self notifyonplayercommand("FPS", "+actionslot 2");
for(;;) for(;;)
@@ -1094,8 +1102,8 @@ watchVersion()
} }
watchHealthHUD() watchHealthHUD()
{ {
level endon("nuke");
self endon("disconnect"); self endon("disconnect");
self endon("stop_watch_threads");
self endon("death"); self endon("death");
if(isDefined(self.healthHUD)) if(isDefined(self.healthHUD))
@@ -1118,8 +1126,8 @@ watchHealthHUD()
watchRegen() watchRegen()
{ {
level endon("nuke");
self endon("disconnect"); self endon("disconnect");
self endon("stop_watch_threads");
self endon("death"); self endon("death");
while(true) while(true)
@@ -1140,8 +1148,8 @@ watchRegen()
watchDeagleGL() watchDeagleGL()
{ {
level endon("nuke");
self endon("disconnect"); self endon("disconnect");
self endon("stop_watch_threads");
while(true) while(true)
{ {
self waittill("weapon_fired", weaponName); self waittill("weapon_fired", weaponName);
@@ -1156,17 +1164,15 @@ watchDeagleGL()
if(isDefined(self.pers["isBot"]) && self.pers["isBot"]) if(isDefined(self.pers["isBot"]) && self.pers["isBot"])
wait .6; wait .6;
else else
wait .15; wait .2;
} }
else
wait .05;
} }
} }
watchHUD() watchHUD()
{ {
level endon("nuke");
self endon("disconnect"); self endon("disconnect");
self endon("stop_watch_threads");
while(true) while(true)
{ {
self setClientDvar("ui_drawradar", 1); self setClientDvar("ui_drawradar", 1);
@@ -1186,8 +1192,8 @@ watchHUD()
watchM40A3() watchM40A3()
{ {
level endon("nuke");
self endon("disconnect"); self endon("disconnect");
self endon("stop_watch_threads");
while(true) while(true)
{ {
self waittill("weapon_fired", weaponName); self waittill("weapon_fired", weaponName);
@@ -1208,7 +1214,5 @@ watchM40A3()
wait .1; wait .1;
} }
} }
else
wait .05;
} }
} }

View File

@@ -597,22 +597,53 @@ killGungameHUD()
foreach(player in level.players) foreach(player in level.players)
{ {
for(i=2;i<6;i++) for(i=2;i<6;i++)
{
if(isDefined(player.multitext[i]))
player.multitext[i] destroy(); player.multitext[i] destroy();
}
if(isdefined(player.scoretext)) if(isdefined(player.scoretext))
player.scoretext destroy(); player.scoretext destroy();
if(isdefined(player.scoretext_amount)) if(isdefined(player.scoretext_amount))
player.scoretext_amount destroy(); player.scoretext_amount destroy();
if(isdefined(player.weaponhud)) if(isdefined(player.weaponhud))
player.weaponhud destroy(); player.weaponhud destroy();
if(isdefined(player.weapontotalhud))
player.weapontotalhud destroy();
if(isdefined(player.killhud))
player.killhud destroy();
if(isdefined(player.killtotalhud))
player.killtotalhud destroy();
if(isdefined(player.ratiohud)) if(isdefined(player.ratiohud))
player.ratiohud destroy(); player.ratiohud destroy();
if(isDefined(player.streakText)) if(isDefined(player.streakText))
player.streakText destroy(); player.streakText destroy();
if(isDefined(player.streakIcons))
{
foreach(icon in player.streakIcons) foreach(icon in player.streakIcons)
{ {
if(isDefined(icon)) if(isDefined(icon))
icon destroy(); icon destroy();
} }
}
if(isDefined(player.markerIconsEnemies))
{
foreach(icon in player.markerIconsEnemies)
{
if(isDefined(icon))
icon destroy();
}
}
if(isDefined(player.healthHUD))
player.healthHUD destroy();
if(isDefined(player.versionText))
player.versionText destroy();
if(isDefined(player.line))
player.line destroy(); player.line destroy();
} }
} }

View File

@@ -383,8 +383,7 @@ isAssaultRifle(name)
loadFungameList() loadFungameList()
{ {
level.gungameList = []; level.fungameWeapons = [];
level.gungameList[0] = "defaultweapon_mp";
// PISTOLS (1-20) // PISTOLS (1-20)
addFungameWeapon("m40a3_mp"); addFungameWeapon("m40a3_mp");
@@ -557,11 +556,34 @@ loadFungameList()
addFungameWeapon("at4_mp"); addFungameWeapon("at4_mp");
addFungameWeapon("riotshield_mp"); addFungameWeapon("riotshield_mp");
addFungameWeapon("javelin_mp"); addFungameWeapon("javelin_mp");
level.gungameList = [];
level.gungameList[0] = "defaultweapon_mp";
amount = getDvarInt("amount_weapons");
if(amount > level.fungameWeapons.size)
amount = level.fungameWeapons.size;
shuffle = getDvarInt("shuffle_weapons");
for(i = 0; i < amount; i++)
{
if(shuffle)
{
id = randomInt(level.fungameWeapons.size);
level.gungameList[level.gungameList.size] = level.fungameWeapons[id];
level.fungameWeapons = removeIDfromArray(id, level.fungameWeapons);
}
else
{
level.gungameList[level.gungameList.size] = level.fungameWeapons[i];
}
}
} }
addFungameWeapon(weapon) addFungameWeapon(weapon)
{ {
level.gungameList[level.gungameList.size] = weapon; level.fungameWeapons[level.fungameWeapons.size] = weapon;
} }
isSMG(name) isSMG(name)
{ {