foobard
This commit is contained in:
1356
mod/main.gsc
Executable file
1356
mod/main.gsc
Executable file
File diff suppressed because it is too large
Load Diff
699
mod/streaks.gsc
Executable file
699
mod/streaks.gsc
Executable file
@@ -0,0 +1,699 @@
|
||||
#include common_scripts\utility;
|
||||
#include maps\mp\_utility;
|
||||
#include maps\mp\gametypes\_hud_util;
|
||||
|
||||
loadStreaks()
|
||||
{
|
||||
precacheShader("cardicon_helmet_brit_ww2");
|
||||
precacheShader("cardicon_boot");
|
||||
precacheShader("cardicon_headshot");
|
||||
precacheShader("cardicon_ghost_mic");
|
||||
precacheShader("cardicon_biohazard");
|
||||
precacheShader("cardicon_juggernaut_2");
|
||||
precacheShader("cardicon_paratrooper");
|
||||
precacheShader("cardicon_xray");
|
||||
precacheShader("dpad_killstreak_sentry");
|
||||
precacheShader("cardicon_b2");
|
||||
precacheShader("cardicon_fmj");
|
||||
precacheShader("cardicon_thebomb");
|
||||
precacheShader("cardicon_cod4");
|
||||
precacheShader("cardicon_loadedfinger");
|
||||
|
||||
// Pre-cache Jetpack FX at level init (loadfx must NOT be called at runtime).
|
||||
level._effect["jetpack_smoke"] = loadfx("smoke/smoke_trail_white_heli");
|
||||
level._effect["jetpack_flare"] = loadfx("misc/flares_cobra");
|
||||
|
||||
level.streaks3 = [];
|
||||
level.streaks6 = [];
|
||||
level.streaks9 = [];
|
||||
// add
|
||||
// - no reload
|
||||
// - radioactive
|
||||
|
||||
level.streaks3[level.streaks3.size] = "No Recoil";
|
||||
level.streaks3[level.streaks3.size] = "Riotshield";
|
||||
level.streaks3[level.streaks3.size] = "Speed";
|
||||
level.streaks3[level.streaks3.size] = "No Reload";
|
||||
|
||||
level.streaks6[level.streaks6.size] = "Suicide Bomber";
|
||||
level.streaks6[level.streaks6.size] = "I.M.S";
|
||||
level.streaks6[level.streaks6.size] = "Explosive Bullets";
|
||||
level.streaks6[level.streaks6.size] = "Radioactive";
|
||||
|
||||
level.streaks9[level.streaks9.size] = "Juggernaut";
|
||||
level.streaks9[level.streaks9.size] = "Jetpack";
|
||||
level.streaks9[level.streaks9.size] = "XRay";
|
||||
}
|
||||
getStreak(which)
|
||||
{
|
||||
switch(which)
|
||||
{
|
||||
case 0:
|
||||
invalid = true;
|
||||
streak = undefined;
|
||||
while(invalid)
|
||||
{
|
||||
streak = level.streaks3[randomInt(level.streaks3.size)];
|
||||
if(!self.isJugger)
|
||||
invalid = false;
|
||||
else if(streak != "Speed")
|
||||
invalid = false;
|
||||
}
|
||||
return streak;
|
||||
case 1:
|
||||
return level.streaks6[randomInt(level.streaks6.size)];
|
||||
case 2:
|
||||
return level.streaks9[randomInt(level.streaks9.size)];
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
getStreakIcon(streak)
|
||||
{
|
||||
if(streak == "Riotshield")
|
||||
return "cardicon_helmet_brit_ww2";
|
||||
if(streak == "Speed")
|
||||
return "cardicon_boot";
|
||||
if(streak == "No Recoil")
|
||||
return "cardicon_headshot";
|
||||
if(streak == "Suicide Bomber")
|
||||
return "cardicon_ghost_mic";
|
||||
if(streak == "Radioactive")
|
||||
return "cardicon_biohazard"; //cardicon_hazard
|
||||
if(streak == "Juggernaut")
|
||||
return "cardicon_juggernaut_2";
|
||||
if(streak == "Jetpack")
|
||||
return "cardicon_paratrooper";
|
||||
if(streak == "XRay")
|
||||
return "cardicon_xray";
|
||||
if(streak == "Gl Sentry")
|
||||
return "dpad_killstreak_sentry";
|
||||
//return tableLookup( "mp/killstreakTable.csv", 1, "sentry", 14 );
|
||||
if(streak == "Bomber")
|
||||
return "cardicon_b2";
|
||||
if(streak == "Explosive Bullets")
|
||||
return "cardicon_fmj";
|
||||
if(streak == "I.M.S")
|
||||
return "cardicon_thebomb";
|
||||
if(streak == "Godmode")
|
||||
return "cardicon_chicken";
|
||||
if(streak == "No Reload")
|
||||
return "cardicon_loadedfinger";
|
||||
return "cardicon_cod4";
|
||||
}
|
||||
setStreaks()
|
||||
{
|
||||
if(!getDvarInt("streaks_online"))
|
||||
return;
|
||||
|
||||
self.streaks[0] = getStreak(0);
|
||||
self.streaks[1] = getStreak(1);
|
||||
self.streaks[2] = getStreak(2);
|
||||
|
||||
self thread drawStreaks();
|
||||
self thread onKilling();
|
||||
}
|
||||
drawStreaks()
|
||||
{
|
||||
if(isDefined(self.streakIcons[0]))
|
||||
{
|
||||
for(i=0;i<3;i++)
|
||||
{
|
||||
self.streakIcons[i] destroy();
|
||||
}
|
||||
self.streakText destroy();
|
||||
}
|
||||
self.streakIcons = [];
|
||||
for(index = 0;index < 3;index++)
|
||||
{
|
||||
self.streakIcons[index] = self createFontString( "objective", 2 );
|
||||
self.streakIcons[index].foreground = false;
|
||||
self.streakIcons[index].hideWhenInMenu = true;
|
||||
self.streakIcons[index].fontScale = 1;
|
||||
self.streakIcons[index].font = "hudbig";
|
||||
self.streakIcons[index].alpha = 1;
|
||||
self.streakIcons[index].glow = 1;
|
||||
self.streakIcons[index].glowColor = ( 0, 0, 1 );
|
||||
self.streakIcons[index].glowAlpha = 1;
|
||||
self.streakIcons[index].color = ( 1.0, 1.0, 1.0 );
|
||||
self.streakIcons[index] setPoint("RIGHT", "RIGHT", 0, 0-(index *45));
|
||||
self.streakIcons[index] setShader(getStreakIcon(self.streaks[index]), 40, 40 );
|
||||
}
|
||||
self.streakText = self createFontString( "objective", 2 );
|
||||
self.streakText.foreground = false;
|
||||
self.streakText.hideWhenInMenu = true;
|
||||
self.streakText.fontScale = 1;
|
||||
self.streakText.font = "hudbig";
|
||||
self.streakText.alpha = 1;
|
||||
self.streakText.glow = .3;
|
||||
self.streakText.glowColor = ( 1, 0, 0 );
|
||||
self.streakText.glowAlpha = 1;
|
||||
self.streakText.color = ( 1.0, 1.0, 0.0 );
|
||||
self.streakText setPoint("RIGHT", "RIGHT", -50, 0);
|
||||
}
|
||||
onKilling()
|
||||
{
|
||||
self endon("death");
|
||||
self endon("disconnect");
|
||||
level endon("nuke");
|
||||
spree = 0;
|
||||
value = 3;
|
||||
counter = 1;
|
||||
self.streakText setValue(value);
|
||||
while(true)
|
||||
{
|
||||
kills = self.kills;
|
||||
wait .1;
|
||||
if(kills != self.kills)
|
||||
{
|
||||
for(i = kills;i < self.kills;i++)
|
||||
{
|
||||
spree++;
|
||||
value--;
|
||||
if(spree == 3 || spree == 6 || spree == 9)
|
||||
{
|
||||
streak = self giveReward(spree);
|
||||
self thread doStreakPopup(spree,streak);
|
||||
if(spree == 9)
|
||||
spree = 0;
|
||||
}
|
||||
if(value == 0)
|
||||
{
|
||||
value = 3;
|
||||
if(counter < 3)
|
||||
{
|
||||
y = self.streakText.y - 45;
|
||||
self.streakText setPoint("RIGHT", "RIGHT", -50, y);
|
||||
counter++;
|
||||
}
|
||||
else
|
||||
{
|
||||
self.streakText setPoint("RIGHT", "RIGHT", -50, 100);
|
||||
counter = 1;
|
||||
self.streaks[0] = getStreak(0);
|
||||
self.streaks[1] = getStreak(1);
|
||||
self.streaks[2] = getStreak(2);
|
||||
self thread drawStreaks();
|
||||
}
|
||||
}
|
||||
self.streakText setValue(value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
doStreakPopup(spree, streak)
|
||||
{
|
||||
notifyHello = spawnstruct();
|
||||
notifyHello.glowColor = (0.0, 0.6, 0.3);
|
||||
notifyHello.titleText = spree + " Streak";
|
||||
notifyHello.notifyText = streak;
|
||||
notifyHello.iconName = getStreakIcon(streak);
|
||||
notifyHello.hideWhenInMenu = true;
|
||||
notifyHello.sound = "mp_war_objective_taken";
|
||||
self thread maps\mp\gametypes\_hud_message::notifyMessage( notifyHello );
|
||||
}
|
||||
giveReward(spree)
|
||||
{
|
||||
streak = "";
|
||||
if(spree == 3)
|
||||
streak = self.streaks[0];
|
||||
else if(spree == 6)
|
||||
streak = self.streaks[1];
|
||||
else if(spree == 9)
|
||||
streak = self.streaks[2];
|
||||
self thread giveStreak(streak);
|
||||
return streak;
|
||||
}
|
||||
giveStreak(streak)
|
||||
{
|
||||
switch(streak)
|
||||
{
|
||||
case "No Recoil":
|
||||
self player_recoilScaleOn(0);
|
||||
break;
|
||||
case "Speed":
|
||||
self.speed = true;
|
||||
wait 1;
|
||||
self maps\mp\perks\_perks::givePerk("specialty_lightweight");
|
||||
self setMoveSpeedScale(1.6);
|
||||
self.moveSpeedScaler = 1.6; // keep cached baseline in sync (was: self.setMoveSpeedScale = 1.6 — typo, set entity field not call function)
|
||||
break;
|
||||
case "Riotshield":
|
||||
self AttachShieldModel( "weapon_riot_shield_mp", "tag_shield_back" );
|
||||
break;
|
||||
case "Jetpack":
|
||||
self thread Jetpack();
|
||||
break;
|
||||
case "Suicide Bomber":
|
||||
self thread Suicidebomber();
|
||||
break;
|
||||
case "I.M.S":
|
||||
self thread tryUseIMS();
|
||||
self thread infoText("I.M.S");
|
||||
break;
|
||||
case "Juggernaut":
|
||||
self thread Juggernaut();
|
||||
break;
|
||||
case "XRay":
|
||||
self thread Wh();
|
||||
break;
|
||||
case "Explosive Bullets":
|
||||
self thread Explosive();
|
||||
break;
|
||||
case "No Reload":
|
||||
self thread NoReload();
|
||||
break; // FIX: was missing break, causing fall-through into Radioactive every time
|
||||
case "Radioactive":
|
||||
self thread Radioactive();
|
||||
break;
|
||||
default:
|
||||
self iPrintlnBold("^1ERROR: Unknown Streak!");
|
||||
break;
|
||||
}
|
||||
}
|
||||
Radioactive()
|
||||
{
|
||||
self endon("disconnect");
|
||||
self endon("death");
|
||||
level endon("nuke");
|
||||
// Cache once \u2014 getDvar() inside the inner foreach would cost ~120 native calls/sec.
|
||||
isTeamGame = (getDvar("g_gametype") == "gungame_team");
|
||||
playFxOnTag( level.spawnGlow["enemy"], self, "pelvis" );
|
||||
playFxOnTag( level.spawnGlow["friendly"], self, "j_head" );
|
||||
while(1)
|
||||
{
|
||||
wait .1;
|
||||
foreach(player in level.players)
|
||||
{
|
||||
if(player == self)
|
||||
continue;
|
||||
if(isTeamGame && player.team == self.team)
|
||||
continue;
|
||||
if(Distance(player.origin,self.origin) < 120 && isAlive(player))
|
||||
{
|
||||
player thread maps\mp\gametypes\_damage::finishPlayerDamageWrapper( self, self, 4, 0, "MOD_EXPLOSIVE", "none", player.origin, player.origin, "none", 0, 0 );
|
||||
self thread maps\mp\gametypes\_damagefeedback::updateDamageFeedback("");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Suicidebomber()
|
||||
{
|
||||
self endon("disconnect");
|
||||
self waittill("death");
|
||||
Earthquake( 0.4, 0.75, self.origin, 512 );
|
||||
MagicBullet("ac130_105mm_mp", self.origin+(0,0,20), self.origin, self);
|
||||
}
|
||||
Explosive()
|
||||
{
|
||||
self endon("disconnect");
|
||||
self endon("death");
|
||||
self notify("exploagain");
|
||||
self endon("exploagain");
|
||||
self.explodmg = 40;
|
||||
self.explomindmg = 20;
|
||||
self.explotime = .1;
|
||||
for(;;)
|
||||
{
|
||||
self waittill("weapon_fired");
|
||||
class = WeaponClass(self getCurrentWeapon());
|
||||
self setClassTime(class);
|
||||
forward = self getTagOrigin("j_head");
|
||||
end = self thread vector_scal(anglestoforward(self getPlayerAngles()),1000000);
|
||||
Location = BulletTrace( forward, end, 0, self )[ "position" ];
|
||||
playFx(level.explosionfx, Location);
|
||||
RadiusDamage(Location, 50, 30, 20, self );
|
||||
//self RadiusDamage(Location,250,self.explodmg,self.explomindmg,self,"MOD_Explosive","barrel_mp");
|
||||
wait self.explotime;
|
||||
}
|
||||
}
|
||||
Jetpack()
|
||||
{
|
||||
self endon("death");
|
||||
self endon("disconnect");
|
||||
self notify("jetpack");
|
||||
self endon("jetpack");
|
||||
self iPrintlnBold("^3Press ^1F ^7to use ^:Jetpack!");
|
||||
self.jetpack = 80;
|
||||
self maps\mp\perks\_perks::givePerk("specialty_falldamage");
|
||||
// Use pre-cached FX handles from loadStreaks() — loadfx() must not be called at runtime.
|
||||
JETPACKBACK = createPrimaryProgressBar( -275 );
|
||||
JETPACKBACK.bar.x = 40;
|
||||
JETPACKBACK.x = 100;
|
||||
JETPACKTXT = createPrimaryProgressBarText( -275 );
|
||||
JETPACKTXT.x=100;
|
||||
if(randomInt(10) < 8)
|
||||
JETPACKTXT settext("^:Jetpack");
|
||||
else
|
||||
{
|
||||
JETPACKTXT settext("^:Big Jetpack");
|
||||
self.jetpack = 120;
|
||||
}
|
||||
self thread dod(JETPACKBACK.bar,JETPACKBACK,JETPACKTXT);
|
||||
self attach("projectile_hellfire_missile","tag_stowed_back");
|
||||
while(true)
|
||||
{
|
||||
if(self usebuttonpressed() && self.jetpack>0)
|
||||
{
|
||||
self playsound("cobra_helicopter_dying_loop");
|
||||
self setstance("crouch");
|
||||
playfx(level._effect["jetpack_smoke"],self gettagorigin("j_spine4"));
|
||||
playfx(level._effect["jetpack_flare"],self gettagorigin("j_spine4"));
|
||||
earthquake(.15,.2,self gettagorigin("j_spine4"),50);
|
||||
self.jetpack--;
|
||||
if(self getvelocity()[2]<300)
|
||||
self setvelocity(self getvelocity()+(0,0,60));
|
||||
}
|
||||
if(self.jetpack < 80 &&!self usebuttonpressed())
|
||||
self.jetpack++;
|
||||
JETPACKBACK updateBar(self.jetpack/80);
|
||||
JETPACKBACK.bar.color=(1,self.jetpack/80,self.jetpack/80);
|
||||
wait .05;
|
||||
}
|
||||
}
|
||||
dod(a,b,c)
|
||||
{
|
||||
self waittill_any("death", "disconnect", "jetpack");
|
||||
a destroy();
|
||||
b destroy();
|
||||
c destroy();
|
||||
}
|
||||
tryUseIMS()
|
||||
{
|
||||
self notify("ims2");
|
||||
self endon("ims2");
|
||||
self endon("disconnect");
|
||||
self notifyonplayercommand("IMS", "+actionslot 4");
|
||||
self waittill("IMS");
|
||||
ims = spawn("script_model", self.origin);
|
||||
ims setModel( "sentry_minigun_folded" );
|
||||
ims.angles = (90,0,0);
|
||||
ims.imsbombs = 3;
|
||||
block = spawn("script_model", self.origin+(-40,0,0));
|
||||
block setModel("com_plasticcase_enemy");
|
||||
block.angles = (0,0,0);
|
||||
block Solid();
|
||||
block2 = spawn("script_model", self.origin+(40,0,0));
|
||||
block2 setModel("com_plasticcase_enemy");
|
||||
block2.angles = (0,0,0);
|
||||
block2 Solid();
|
||||
block3 = spawn("script_model", self.origin+(0,40,0));
|
||||
block3 setModel("com_plasticcase_enemy");
|
||||
block3.angles = (0,90,0);
|
||||
block3 Solid();
|
||||
block4 = spawn("script_model", self.origin+(0,-40,0));
|
||||
block4 setModel("com_plasticcase_enemy");
|
||||
block4.angles = (0,90,0);
|
||||
block4 Solid();
|
||||
self thread BombThem(ims);
|
||||
self thread DeleteIt(block, block2, block3, block4);
|
||||
self thread DeleteIMS(ims);
|
||||
self thread DeleteIMS2(ims);
|
||||
|
||||
}
|
||||
|
||||
DeleteIMS(ims)
|
||||
{
|
||||
self waittill_any("death", "disconnect", "Ims_Dead");
|
||||
ims delete();
|
||||
}
|
||||
|
||||
DeleteIMS2(ims)
|
||||
{
|
||||
// FIX: The original waited on "fuckemp" which was never notified anywhere —
|
||||
// this created a permanent zombie thread holding the ims entity reference.
|
||||
// Now we wait for nuke (end of match) and clean up the entity then.
|
||||
level waittill("nuke");
|
||||
if(isDefined(ims))
|
||||
ims delete();
|
||||
}
|
||||
|
||||
DeleteIt(block, block2, block3, block4)
|
||||
{
|
||||
self waittill_any("disconnect", "Ims_Dead");
|
||||
|
||||
block delete();
|
||||
block2 delete();
|
||||
block3 delete();
|
||||
block4 delete();
|
||||
}
|
||||
BombThem(ims)
|
||||
{
|
||||
//self endon("death");
|
||||
self endon("disconnect");
|
||||
self endon("Ims_Dead");
|
||||
expos = self.origin;
|
||||
wait 4;
|
||||
self iPrintln("I.M.S ready!");
|
||||
for(;;)
|
||||
{
|
||||
foreach(player in level.players)
|
||||
{
|
||||
if(player != self)
|
||||
{
|
||||
if(Distance(expos, player.origin) <= 300)
|
||||
{
|
||||
if(ims.imsbombs > 0)
|
||||
{
|
||||
ims.imsbombs--;
|
||||
self thread Boom(player, expos);
|
||||
if(ims.imsbombs == 0)
|
||||
self notify("Ims_Dead");
|
||||
wait 5;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
wait 1;
|
||||
}
|
||||
}
|
||||
Boom(player, expos)
|
||||
{
|
||||
player playsound ("claymore_activated");
|
||||
level._effect["bombexplosion"] = loadfx("explosions/tanker_explosion");
|
||||
PlayFx( level._effect["bombexplosion"], expos );
|
||||
//RadiusDamage(self.origin,350,500,100,level);
|
||||
MagicBullet("ac130_105mm_mp", expos, expos+(0,-100,-1000), self);
|
||||
MagicBullet("ac130_105mm_mp", expos, expos+(100,0, -10), self);
|
||||
MagicBullet("ac130_105mm_mp", expos, expos+(0,100, -10), self);
|
||||
MagicBullet("ac130_105mm_mp", expos, expos+(-100,0, -10), self);
|
||||
MagicBullet("ac130_105mm_mp", expos, expos+(0,-100, -10), self);
|
||||
PlayRumbleOnPosition( "grenade_rumble", self.origin );
|
||||
earthquake( 0.4, 0.75, self.origin, 512 );
|
||||
player playsound("exp_suitcase_bomb_main");
|
||||
}
|
||||
vector_scal(vec, scale)
|
||||
{
|
||||
vec = (vec[0] * scale, vec[1] * scale, vec[2] * scale);
|
||||
return vec;
|
||||
}
|
||||
setClassTime(class)
|
||||
{
|
||||
if(class == "rifle")
|
||||
{
|
||||
self.explodmg = 20;
|
||||
self.explotime = 0;
|
||||
self.explomindmg = 1;
|
||||
}
|
||||
else if(class == "smg")
|
||||
{
|
||||
self.explodmg = 20;
|
||||
self.explotime = 0;
|
||||
self.explomindmg = 1;
|
||||
}
|
||||
else if(class == "spread")
|
||||
{
|
||||
self.explodmg = 30;
|
||||
self.explotime = .5;
|
||||
self.explomindmg = 10;
|
||||
}
|
||||
else //pistol
|
||||
{
|
||||
self.explodmg = 40;
|
||||
self.explotime = 1;
|
||||
self.explomindmg = 15;
|
||||
}
|
||||
}
|
||||
|
||||
Wh()
|
||||
{
|
||||
self endon("death");
|
||||
self endon("disconnect");
|
||||
|
||||
self thermalVisionFOFOverlayOn();
|
||||
self iPrintlnBold("^1X-Ray Vision Active!");
|
||||
|
||||
wait 30;
|
||||
|
||||
self thermalVisionFOFOverlayOff();
|
||||
self iPrintlnBold("^1X-Ray Vision Expired");
|
||||
}
|
||||
|
||||
destroyGhostHud(hud)
|
||||
{
|
||||
self endon("disconnect");
|
||||
//self endon("ghostCounter_done");
|
||||
self waittill_any("death", "spawned_player");
|
||||
hud destroy();
|
||||
}
|
||||
scanPlayer()
|
||||
{
|
||||
//self endon("disconnect");
|
||||
//self endon("death");
|
||||
//self endon("ghostCounter_done");
|
||||
self.scanPlayer = [];
|
||||
while(self.recon)
|
||||
{
|
||||
foreach(player in level.players)
|
||||
{
|
||||
if(player == self)
|
||||
continue;
|
||||
if((getDvar("g_gametype") == "gungame_team") && self.team == player.team)
|
||||
continue;
|
||||
if(Distance(player.origin,self.origin) <= 1000)
|
||||
{
|
||||
go = true;
|
||||
foreach(scan in self.scanPlayer)
|
||||
{
|
||||
if(scan == "" + player.guid)
|
||||
go = false;
|
||||
}
|
||||
if(go)
|
||||
{
|
||||
self thread createScanImage(player);
|
||||
self.scanPlayer[self.scanPlayer.size] = "" + player.guid;
|
||||
}
|
||||
}
|
||||
}
|
||||
wait .5;
|
||||
}
|
||||
self notify("ghostCounter_done");
|
||||
}
|
||||
createText(text,size,align,pos,x,y,font)
|
||||
{
|
||||
if(!isDefined(font))
|
||||
hud = self createFontString("default",size);
|
||||
else
|
||||
hud = self createFontString(font,size);
|
||||
hud setPoint(align,pos,x,y);
|
||||
if(isDefined(text))
|
||||
hud setText(text);
|
||||
hud.glowAlpha = 1;
|
||||
hud.hideWhenInMenu = true;
|
||||
return hud;
|
||||
}
|
||||
createScanImage(player)
|
||||
{
|
||||
//self endon("disconnect");
|
||||
|
||||
rectpos = spawn("script_model", player getTagOrigin("j_head")+(0,0,-20));
|
||||
rectpos enableLinkTo();
|
||||
rectpos linkTo(player);
|
||||
|
||||
icon = NewClientHudElem(self);
|
||||
icon.elemType = "bar";
|
||||
icon.width = 64;
|
||||
icon.height = 80;
|
||||
icon SetShader( "cardicon_headshot", 40, 40 );
|
||||
icon.color = (1,0,0);
|
||||
icon.alpha = 0;
|
||||
icon.x = rectpos.origin[ 0 ];
|
||||
icon.y = rectpos.origin[ 1 ];
|
||||
icon.z = rectpos.origin[ 2 ];
|
||||
icon SetTargetEnt(rectpos);
|
||||
icon SetWayPoint( true, true );
|
||||
icon fadeovertime(1);
|
||||
icon.alpha = 1;
|
||||
self waittill_any("disconnect","ghostCounter_done");
|
||||
icon fadeovertime(2);
|
||||
icon.alpha = 0;
|
||||
wait 2;
|
||||
rectpos delete();
|
||||
icon destroy();
|
||||
}
|
||||
|
||||
Wh_Old()
|
||||
{
|
||||
self endon("death");
|
||||
self endon("disconnect");
|
||||
self notify("wh");
|
||||
self endon("wh");
|
||||
self ThermalVisionFOFOverlayOn();
|
||||
for(i = 30;i > 0;i--)
|
||||
{
|
||||
wait 1;
|
||||
self iPrintln("Infrared Vision for: " + i);
|
||||
}
|
||||
self ThermalVisionFOFOverlayOff();
|
||||
}
|
||||
///////////////////////////////////////////////////////////
|
||||
infoText(item)
|
||||
{
|
||||
infotext = self createFontString("hudsmall", 1);
|
||||
infotext setPoint("CENTER", "CENTER", 0, -50);
|
||||
infotext.color = (1,1,0);
|
||||
infotext.glowalpha = .5;
|
||||
infotext.glowcolor = (1,0,0);
|
||||
infotext setText("Press [{+actionslot 4}] to use " + item);
|
||||
//infoText fadeOverTime(2);
|
||||
//infoText.alpha = 0;
|
||||
wait 2;
|
||||
if(isDefined(infoText))
|
||||
infoText destroy();
|
||||
}
|
||||
Juggernaut()
|
||||
{
|
||||
level endon("nuke");
|
||||
self.isJugger = true;
|
||||
// FIX: Use the custom health system (actual_maxhealth/actual_health) instead of
|
||||
// the raw engine maxhealth. Setting engine maxhealth directly broke the HUD display
|
||||
// and regen logic. We multiply the effective HP pool through the custom system.
|
||||
self.actual_maxhealth = self.maxhp * 5; // 5× base HP (e.g. 300 in Fungame vs normal 60)
|
||||
self.actual_health = self.actual_maxhealth;
|
||||
// Speed floor is the mode base (1.5 in Fungame) — no slowdown penalty.
|
||||
// Juggernaut's balance trade-off is the 5× HP pool only.
|
||||
|
||||
juggIcon = newHudElem();
|
||||
juggIcon.x = self.origin[0];
|
||||
juggIcon.y = self.origin[1];
|
||||
juggIcon.z = self.origin[2] + 54;
|
||||
juggIcon.alpha = .8;
|
||||
juggIcon.archived = true;
|
||||
juggIcon setShader("cardicon_juggernaut_2");
|
||||
juggIcon SetWayPoint( true, true );
|
||||
juggIcon SetTargetEnt(self);
|
||||
self thread destroyJuggOnNuke(juggIcon);
|
||||
self waittill_any("death", "disconnect", "isMarked");
|
||||
juggicon destroy();
|
||||
}
|
||||
destroyJuggOnNuke(juggIcon)
|
||||
{
|
||||
self endon("death");
|
||||
self endon("disconnect");
|
||||
level waittill("nuke");
|
||||
juggIcon destroy();
|
||||
}
|
||||
NoReload()
|
||||
{
|
||||
level endon("nuke"); // FIX: was missing — thread survived past match end
|
||||
self endon("death");
|
||||
self endon("disconnect");
|
||||
while(true)
|
||||
{
|
||||
if(self AttackButtonPressed())
|
||||
{
|
||||
current = self getCurrentWeapon();
|
||||
clip = self GetWeaponAmmoClip(current);
|
||||
stock = self GetWeaponAmmoStock(current);
|
||||
if(stock > 0)
|
||||
{
|
||||
self setWeaponAmmoStock(current, stock-1);
|
||||
self setWeaponAmmoClip(current, clip+1);
|
||||
}
|
||||
waitFrame();
|
||||
}
|
||||
else
|
||||
self waittill("weapon_fired");
|
||||
}
|
||||
}
|
||||
672
mod/vote.gsc
Executable file
672
mod/vote.gsc
Executable file
@@ -0,0 +1,672 @@
|
||||
#include common_scripts\utility;
|
||||
#include maps\mp\_utility;
|
||||
#include maps\mp\gametypes\_hud_util;
|
||||
|
||||
// =========================================================
|
||||
// FileName: vote.gsc
|
||||
// Date: 11.05.2019
|
||||
//
|
||||
// Author Of Code: Santahunter
|
||||
//
|
||||
// =========================================================
|
||||
|
||||
|
||||
/*
|
||||
|
||||
ALPHA
|
||||
so_killspree_trainer "The Pit"
|
||||
so_rooftop_contingency "Sniper Fi"
|
||||
so_killspree_favela "O Cristo Redentor"
|
||||
so_forest_contingency "Evasion"
|
||||
so_crossing_so_bridge "Suspension"
|
||||
|
||||
BRAVO
|
||||
so_ac139_co_hunted "Overwatch" (Two-Players Min)
|
||||
so_killspree_invasion "Body Count"
|
||||
so_defuse_favela_escape "Bomb Squad"
|
||||
so_snowrace1_cliffhanger "Race"
|
||||
so_chopper_invasion "Big Brother" (Two-Players Min) /////////////////// BURGERTOWN
|
||||
|
||||
CHARLIE
|
||||
so_hidden_so_ghillies "Hidden"
|
||||
so_showers_gulag "Breach & Clear"
|
||||
so_snowrace2_cliffhanger "Time Trial"
|
||||
so_defuse_invasion "Homeland Security"
|
||||
so_intel_boneyard "Snatch & Grab"
|
||||
|
||||
DELTA
|
||||
so_download_arcadia "Wardriving"
|
||||
so_demo_so_bridge "Wreckage"
|
||||
so_sabotage_cliffhanger "Acceptable Losses"
|
||||
so_escape_airport "Terminal"
|
||||
so_takeover_estate "Estate Takedown"
|
||||
|
||||
ECHO
|
||||
so_assault_oilrig "Wetwork"
|
||||
so_juggernauts_favela "High Explosive"
|
||||
so_takeover_oilrig "Armor Piercing"
|
||||
|
||||
*/
|
||||
|
||||
loadVote()
|
||||
{
|
||||
precacheShader("line_horizontal");
|
||||
precacheShader("hudscoreboardscroll_uparrow");
|
||||
precacheShader("hudscoreboardscroll_downarrow");
|
||||
level.maxOptions = 8;
|
||||
maps();
|
||||
thread startVote();
|
||||
}
|
||||
maps()
|
||||
{
|
||||
level.maps = [];
|
||||
// MW2 Base Maps
|
||||
level.maps[level.maps.size] = "mp_rust";
|
||||
level.maps[level.maps.size] = "mp_afghan";
|
||||
level.maps[level.maps.size] = "mp_terminal";
|
||||
level.maps[level.maps.size] = "mp_highrise";
|
||||
//level.maps[level.maps.size] = "mp_derail"; //fuck derail
|
||||
level.maps[level.maps.size] = "mp_rundown";
|
||||
level.maps[level.maps.size] = "mp_brecourt"; //Wasteland
|
||||
level.maps[level.maps.size] = "mp_boneyard"; //Scrapyard
|
||||
level.maps[level.maps.size] = "mp_quarry";
|
||||
level.maps[level.maps.size] = "mp_nightshift"; //Skidrow
|
||||
level.maps[level.maps.size] = "mp_estate";
|
||||
level.maps[level.maps.size] = "mp_invasion";
|
||||
level.maps[level.maps.size] = "mp_checkpoint"; //Karachi
|
||||
level.maps[level.maps.size] = "mp_subbase";
|
||||
level.maps[level.maps.size] = "mp_favela";
|
||||
level.maps[level.maps.size] = "mp_underpass";
|
||||
//level.maps[level.maps.size] = "iw4_credits"; // no
|
||||
|
||||
// MW2 DLC Maps
|
||||
level.maps[level.maps.size] = "mp_complex"; //Bailout Stimulus DLC
|
||||
level.maps[level.maps.size] = "mp_crash"; //Crash
|
||||
level.maps[level.maps.size] = "mp_overgrown"; //Overgrown
|
||||
level.maps[level.maps.size] = "mp_compact"; //Salvage Stimulus DLC
|
||||
level.maps[level.maps.size] = "mp_storm"; //Storm
|
||||
|
||||
level.maps[level.maps.size] = "mp_abandon"; //Carnival
|
||||
//level.maps[level.maps.size] = "mp_fuel2"; // hell no
|
||||
level.maps[level.maps.size] = "mp_strike"; //Strike
|
||||
level.maps[level.maps.size] = "mp_trailerpark"; //Trailerpark
|
||||
level.maps[level.maps.size] = "mp_vacant"; //Vacant
|
||||
|
||||
level.maps[level.maps.size] = "mp_nuked"; //Nuketown
|
||||
|
||||
level.maps[level.maps.size] = "mp_cross_fire";
|
||||
level.maps[level.maps.size] = "mp_bloc";
|
||||
level.maps[level.maps.size] = "mp_cargoship";
|
||||
|
||||
level.maps[level.maps.size] = "mp_killhouse";
|
||||
level.maps[level.maps.size] = "mp_bog_sh";
|
||||
|
||||
level.maps[level.maps.size] = "mp_cargoship_sh";
|
||||
|
||||
level.maps[level.maps.size] = "mp_shipment_long";
|
||||
level.maps[level.maps.size] = "mp_rust_long";
|
||||
level.maps[level.maps.size] = "mp_firingrange";
|
||||
|
||||
level.maps[level.maps.size] = "mp_storm_spring";
|
||||
level.maps[level.maps.size] = "mp_fav_tropical";
|
||||
level.maps[level.maps.size] = "mp_estate_tropical";
|
||||
level.maps[level.maps.size] = "mp_crash_tropical";
|
||||
level.maps[level.maps.size] = "mp_bloc_sh";
|
||||
|
||||
////////////// NOT VANILLA /////////////////////////
|
||||
|
||||
//level.maps[level.maps.size] = "af_caves";
|
||||
//level.maps[level.maps.size] = "af_chase";
|
||||
//level.maps[level.maps.size] = "airport";
|
||||
//level.maps[level.maps.size] = "arcadia";
|
||||
//level.maps[level.maps.size] = "boneyard";
|
||||
//level.maps[level.maps.size] = "ending";
|
||||
//level.maps[level.maps.size] = "cliffhanger";
|
||||
//level.maps[level.maps.size] = "co_hunted";
|
||||
//level.maps[level.maps.size] = "so_forest_contingency";
|
||||
//level.maps[level.maps.size] = "dcburning";
|
||||
//level.maps[level.maps.size] = "dcemp";
|
||||
//level.maps[level.maps.size] = "estate";
|
||||
//level.maps[level.maps.size] = "favela";
|
||||
//level.maps[level.maps.size] = "so_showers_gulag";
|
||||
level.maps[level.maps.size] = "oilrig";
|
||||
//level.maps[level.maps.size] = "roadkill";
|
||||
//level.maps[level.maps.size] = "so_hidden_so_ghillies";
|
||||
//level.maps[level.maps.size] = "trainer";
|
||||
|
||||
/////////////// TAUROS //////////////////////////////
|
||||
|
||||
//level.maps[level.maps.size] = "so_chopper_invasion"; // Burgertown // so_killspree_invasion
|
||||
//level.maps[level.maps.size] = "so_killspree_trainer"; // Startmission // The Pit
|
||||
|
||||
/////////////// DRAGONITE //////////////////////////////
|
||||
//level.maps[level.maps.size] = "so_defuse_favela_escape";
|
||||
//level.maps[level.maps.size] = "dc_whitehouse";
|
||||
//level.maps[level.maps.size] = "so_crossing_so_bridge";
|
||||
|
||||
level.mapStruct = [];
|
||||
|
||||
foreach(map in level.maps)
|
||||
{
|
||||
level.mapStruct[level.mapStruct.size] = spawnStruct();
|
||||
level.mapStruct[level.mapStruct.size-1].mapname = map;
|
||||
level.mapStruct[level.mapStruct.size-1].displayName = getDisplayName(map);
|
||||
}
|
||||
|
||||
}
|
||||
getDisplayName(map)
|
||||
{
|
||||
if(map == "mp_afghan")
|
||||
return "Afghan";
|
||||
if(map == "mp_rust")
|
||||
return "Rust";
|
||||
if(map == "mp_terminal")
|
||||
return "Terminal";
|
||||
if(map == "mp_highrise")
|
||||
return "Highrise";
|
||||
if(map == "mp_derail")
|
||||
return "Derail";
|
||||
if(map == "mp_rundown")
|
||||
return "Rundown";
|
||||
if(map == "mp_brecourt")
|
||||
return "Wasteland";
|
||||
if(map == "mp_boneyard")
|
||||
return "Scrapyard";
|
||||
if(map == "mp_quarry")
|
||||
return "Quarry";
|
||||
if(map == "mp_estate")
|
||||
return "Estate";
|
||||
if(map == "mp_nightshift")
|
||||
return "Skidrow";
|
||||
if(map == "mp_invasion")
|
||||
return "Invasion";
|
||||
if(map == "mp_checkpoint")
|
||||
return "Karachi";
|
||||
if(map == "mp_subbase")
|
||||
return "Subbase";
|
||||
if(map == "mp_favela")
|
||||
return "Favela";
|
||||
if(map == "mp_underpass")
|
||||
return "Underpass";
|
||||
if(map == "iw4_credits")
|
||||
return "Testmap";
|
||||
if(map == "mp_abandon")
|
||||
return "Carnival";
|
||||
if(map == "mp_fuel2")
|
||||
return "Fuel";
|
||||
if(map == "mp_strike")
|
||||
return "Strike";
|
||||
if(map == "mp_trailerpark")
|
||||
return "Trailerpark";
|
||||
if(map == "mp_vacant")
|
||||
return "Vacant";
|
||||
if(map == "mp_complex")
|
||||
return "Bailout";
|
||||
if(map == "mp_crash")
|
||||
return "Crash";
|
||||
if(map == "mp_overgrown")
|
||||
return "Overgrown";
|
||||
if(map == "mp_compact")
|
||||
return "Salvage";
|
||||
if(map == "mp_storm")
|
||||
return "Storm";
|
||||
if(map == "mp_nuked")
|
||||
return "Nuketown";
|
||||
if(map == "mp_cross_fire")
|
||||
return "Crossfire";
|
||||
if(map == "mp_cargoship")
|
||||
return "Cargoship";
|
||||
if(map == "mp_bloc")
|
||||
return "Bloc";
|
||||
if(map == "mp_killhouse")
|
||||
return "Killhouse";
|
||||
if(map == "mp_bog_sh")
|
||||
return "Bog";
|
||||
if(map == "mp_cargoship_sh")
|
||||
return "Freighter";
|
||||
if(map == "mp_shipment_long")
|
||||
return "Shipment Long";
|
||||
if(map == "mp_rust_long")
|
||||
return "Rust Long";
|
||||
if(map == "mp_firingrange")
|
||||
return "Firing Range";
|
||||
if(map == "mp_storm_spring")
|
||||
return "Chemical Storm";
|
||||
if(map == "mp_fav_tropical")
|
||||
return "Tropical Favela";
|
||||
if(map == "mp_estate_tropical")
|
||||
return "Tropical Estate";
|
||||
if(map == "mp_crash_tropical")
|
||||
return "Tropical Crash";
|
||||
if(map == "mp_bloc_sh")
|
||||
return "Ruin City";
|
||||
if(map == "af_caves")
|
||||
return "Afghanistan Caves";
|
||||
if(map == "af_chase")
|
||||
return "Afghanistan Hunt";
|
||||
if(map == "airport")
|
||||
return "Airport";
|
||||
if(map == "arcadia")
|
||||
return "Arcadia";
|
||||
if(map == "boneyard")
|
||||
return "Airplane Scrapyard";
|
||||
if(map == "ending")
|
||||
return "Museum";
|
||||
if(map == "cliffhanger")
|
||||
return "Cliffhanger";
|
||||
if(map == "co_hunted")
|
||||
return "Hunted";
|
||||
if(map == "contingency" || map == "so_forest_contingency")
|
||||
return "Contingency";
|
||||
if(map == "dcburning")
|
||||
return "DC Burning";
|
||||
if(map == "dcemp")
|
||||
return "DC Dark";
|
||||
if(map == "estate")
|
||||
return "Makarovs House";
|
||||
if(map == "favela")
|
||||
return "Rojas Favelas";
|
||||
if(map == "favela_escape" || map == "so_defuse_favela_escape")
|
||||
{
|
||||
return "Favels Escape";
|
||||
}
|
||||
if(map == "gulag" || map == "so_showers_gulag")
|
||||
return "Gulag";
|
||||
if(map == "invasion")
|
||||
return "School";
|
||||
if(map == "oilrig")
|
||||
return "Oilrig";
|
||||
if(map == "roadkill")
|
||||
return "School";
|
||||
if(map == "so_hidden_so_ghillies")
|
||||
return "Chernobyl";
|
||||
if(map == "trainer" || map == "so_killspree_trainer")
|
||||
return "The Pit";
|
||||
if(map == "so_chopper_invasion" || map == "so_killspree_invasion")
|
||||
return "Burgertown";
|
||||
if(map == "dc_whitehouse")
|
||||
{
|
||||
return "DC Whitehouse";
|
||||
}
|
||||
if(map == "so_crossing_so_bridge")
|
||||
return "Bridge";
|
||||
return map;
|
||||
}
|
||||
|
||||
createRectangle(shader,align, relative, x, y, width, height)
|
||||
{
|
||||
hud = newHudElem();
|
||||
hud.sTexType = "bar";
|
||||
hud.width = width;
|
||||
hud.height = height;
|
||||
hud.align = align;
|
||||
hud.relative = relative;
|
||||
hud.alpha = 1;
|
||||
hud.xOffset = 0;
|
||||
hud.yOffset = 0;
|
||||
hud.children = [];
|
||||
hud.sort = 1;
|
||||
hud setParent(level.uiParent);
|
||||
hud setShader(shader,width,height);
|
||||
hud.hidden = false;
|
||||
hud.HideWhenInMenu = true;
|
||||
hud setPoint(align,relative,x,y);
|
||||
return hud;
|
||||
}
|
||||
createPlayerRectangle(shader,align, relative, x, y, width, height)
|
||||
{
|
||||
hud = newClientHudElem(self);
|
||||
hud.sTexType = "bar";
|
||||
hud.width = width;
|
||||
hud.height = height;
|
||||
hud.align = align;
|
||||
hud.relative = relative;
|
||||
hud.alpha = 1;
|
||||
hud.xOffset = 0;
|
||||
hud.yOffset = 0;
|
||||
hud.children = [];
|
||||
hud.sort = 1;
|
||||
hud setParent(level.uiParent);
|
||||
hud setShader(shader,width,height);
|
||||
hud.hidden = false;
|
||||
hud.HideWhenInMenu = true;
|
||||
hud setPoint(align,relative,x,y);
|
||||
return hud;
|
||||
}
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
doCountdown(timer,timer2)
|
||||
{
|
||||
secs = 20;
|
||||
milisecs = 10;
|
||||
while(secs > 0)
|
||||
{
|
||||
milisecs--;
|
||||
if(milisecs == 0)
|
||||
{
|
||||
milisecs = 10;
|
||||
secs--;
|
||||
}
|
||||
if(secs == 9)
|
||||
{
|
||||
timer2 setPoint("LEFT", "CENTER", 20,90);
|
||||
}
|
||||
timer setText("Time left: " + secs);
|
||||
timer2 setValue(milisecs);
|
||||
wait .1;
|
||||
}
|
||||
level notify("finishVote");
|
||||
}
|
||||
startVote()
|
||||
{
|
||||
//level waittill ( "game_ended" );
|
||||
//level waittill ( "spawning_intermission" );
|
||||
level waittill("spawnVote");
|
||||
//setDvar("g_hardcore", 1);
|
||||
setSlowMotion( 0.25, 1, 2.0 );
|
||||
thread killGungameHUD();
|
||||
background = createRectangle("black","CENTER", "CENTER", 0,0,250,350);
|
||||
background.alpha = .7;
|
||||
line = createRectangle("line_horizontal","CENTER", "CENTER", 0,-145,180,3);
|
||||
line.sort = 2;
|
||||
//line.color = (1,0,0);
|
||||
line2 = createRectangle("line_horizontal","CENTER", "CENTER", 0,70,180,3);
|
||||
line2.sort = 2;
|
||||
//line2.color = (1,0,0);
|
||||
line3 = createRectangle("line_horizontal","CENTER", "CENTER", 0,110,180,3);
|
||||
line3.sort = 2;
|
||||
//line3.color = (1,0,0);
|
||||
|
||||
//background2 = createRectangle("black","CENTER", "CENTER", -200,0,75,180);
|
||||
//background2.alpha = .7;
|
||||
arrowUp = createRectangle("hudscoreboardscroll_uparrow","CENTER", "CENTER", -100,-125,25,25);
|
||||
arrowDown = createRectangle("hudscoreboardscroll_downarrow","CENTER", "CENTER", 100,-125,25,25);
|
||||
arrowUp.sort = 2;
|
||||
arrowDown.sort = 2;
|
||||
controls = level createServerFontString("default", 1.5);
|
||||
controls setPoint("CENTER", "CENTER", -100,-100);
|
||||
controls.hideWhenInMenu = true;
|
||||
controls setText("[{+forward}]");
|
||||
controls2 = level createServerFontString("default", 1.5);
|
||||
controls2 setPoint("CENTER", "CENTER", 100,-100);
|
||||
controls2.hideWhenInMenu = true;
|
||||
controls2 setText("[{+back}]");
|
||||
controls3 = level createServerFontString("default", 1.3);
|
||||
controls3 setPoint("CENTER", "CENTER", 0,-125);
|
||||
controls3.hideWhenInMenu = true;
|
||||
controls3 setText("[{+gostand}] to select");
|
||||
|
||||
|
||||
//background3 = createRectangle("black","CENTER", "CENTER", 225,0,180,75);
|
||||
//background3.alpha = .7;
|
||||
timer = level createServerFontString("default", 1.8);
|
||||
timer setPoint("CENTER", "CENTER", -20,90);
|
||||
timer.hideWhenInMenu = true;
|
||||
|
||||
timer2 = level createServerFontString("default", 1.8);
|
||||
timer2 setPoint("CENTER", "CENTER", 30,90);
|
||||
timer2.hideWhenInMenu = true;
|
||||
timer2.label = &": ";
|
||||
timer2.sort = 3;
|
||||
|
||||
credits = level createServerFontString("default", 1.6);
|
||||
credits setPoint("CENTER", "CENTER", 0,130);
|
||||
credits.hideWhenInMenu = true;
|
||||
credits setText("Made by ^:Santahunter"); // if you change this credits Im gonna come to your house and smack ur sister... for real, dont change it, it took many hours and days to come to this point
|
||||
|
||||
thread doCountdown(timer,timer2);
|
||||
|
||||
header = createServerFontString("default", 2);
|
||||
header setPoint("CENTER", "CENTER", 0,-155);
|
||||
header.hideWhenInMenu = false;
|
||||
header setText("Votemap");
|
||||
|
||||
level.options = [];
|
||||
level.votes = [];
|
||||
level.invalidMaps = [];
|
||||
text = "";
|
||||
level.elems = createServerFontString("default", 1.5);
|
||||
level.elems setPoint("CENTER", "CENTER", 20,-75);
|
||||
level.elems.hideWhenInMenu = true;
|
||||
//level.elems = [];
|
||||
// FIX: Added maxRetries guard. If the map pool is smaller than maxOptions, the
|
||||
// i-- retry would loop forever (no wait = instant VM instruction-count crash).
|
||||
maxRetries = level.maps.size * 3;
|
||||
retries = 0;
|
||||
for(i = 0;i < level.maxOptions;i++)
|
||||
{
|
||||
retries++;
|
||||
if(retries > maxRetries)
|
||||
break; // pool exhausted: accept fewer options rather than loop forever
|
||||
valid = true;
|
||||
map = level.maps[randomInt(level.maps.size-1)];
|
||||
gamemode = level.gungamemodes[randomInt(level.gungamemodes.size)];
|
||||
foreach(invalid in level.invalidMaps)
|
||||
{
|
||||
if(map == invalid)
|
||||
valid = false;
|
||||
}
|
||||
if(!valid)
|
||||
i--;
|
||||
else
|
||||
{
|
||||
text += getDisplayName(map) + "[^3" + gamemode + "^7] [0]\n";
|
||||
level.votes[i] = 0;
|
||||
level.options[i] = spawnstruct();
|
||||
level.options[i].map = map;
|
||||
level.options[i].gamemode = gamemode;
|
||||
level.invalidMaps[level.invalidMaps.size] = map;
|
||||
}
|
||||
}
|
||||
level.elems setText(text);
|
||||
foreach(player in level.players)
|
||||
{
|
||||
player.scrollbarY = -75;
|
||||
player.scrollbar = player createPlayerRectangle("line_horizontal","CENTER", "CENTER", 0,player.scrollbarY,220,11);
|
||||
player.scrollbar.color = (0,1,0);
|
||||
player.scrollbar.sort = 2;
|
||||
player thread doControls();
|
||||
}
|
||||
level waittill("finishVote");
|
||||
background destroy();
|
||||
|
||||
//background2 destroy();
|
||||
//background3 destroy();
|
||||
header destroy();
|
||||
timer destroy();
|
||||
timer2 destroy();
|
||||
controls destroy();
|
||||
controls2 destroy();
|
||||
controls3 destroy();
|
||||
arrowUp destroy();
|
||||
arrowDown destroy();
|
||||
line destroy();
|
||||
line2 destroy();
|
||||
line3 destroy();
|
||||
credits destroy();
|
||||
maps = [];
|
||||
level.elems destroy();
|
||||
foreach(player in level.players)
|
||||
player.scrollbar destroy();
|
||||
|
||||
sameVote = -1;
|
||||
altVote = "";
|
||||
number = 0;
|
||||
maxVote = level.votes[0];
|
||||
for(i = 1;i < level.votes.size;i++)
|
||||
{
|
||||
if(level.votes[i] >= maxVote)
|
||||
{
|
||||
maxVote = level.votes[i];
|
||||
sameVote = -1;
|
||||
number = i;
|
||||
}
|
||||
}
|
||||
mod\main::initializeGametype(level.options[number].gamemode);
|
||||
setDvar("sv_mapRotationCurrent", "map " + level.options[number].map);
|
||||
setDvar("sv_mapRotation", "map " + level.options[number].map);
|
||||
level notify("endVote");
|
||||
wait 0.1;
|
||||
map(level.options[number].map);
|
||||
}
|
||||
doControls()
|
||||
{
|
||||
self endon("disconnect");
|
||||
level endon("finishVote");
|
||||
self.totalVotes = 0;
|
||||
self.position = 0;
|
||||
self.oldPosition = self.position;
|
||||
voted = false;
|
||||
self thread onForward();
|
||||
self thread onBackward();
|
||||
self notifyOnPlayerCommand("Stand", "+gostand");
|
||||
while(true)
|
||||
{
|
||||
self waittill("Stand");
|
||||
if(self.totalVotes > 3)
|
||||
{
|
||||
self iPrintln("^1Maximal votes done");
|
||||
continue;
|
||||
}
|
||||
self.totalVotes++;
|
||||
if(voted)
|
||||
{
|
||||
level.votes[self.oldPosition]--;
|
||||
//level.elems[self.oldPosition] setText(getDisplayName(level.options[self.oldPosition]) + " [" + level.votes[self.oldPosition] + "]");
|
||||
|
||||
}
|
||||
self.oldPosition = self.position;
|
||||
//voted = level.options[self.position];
|
||||
voted = true;
|
||||
level.votes[self.position]++;
|
||||
//level.elems[self.position] setText(getDisplayName(level.options[self.position]) + " [" + level.votes[self.position] + "]");
|
||||
text = "";
|
||||
for(i = 0;i < level.maxOptions;i++)
|
||||
{
|
||||
text += getDisplayName(level.options[i].map) + " [^3" + level.options[i].gamemode + "^7][" + level.votes[i] + "]\n";
|
||||
}
|
||||
level.elems setText(text);
|
||||
}
|
||||
}
|
||||
onForward()
|
||||
{
|
||||
self endon("disconnect");
|
||||
level endon("finishVote");
|
||||
self notify("onForward");
|
||||
self endon("onForward");
|
||||
self notifyOnPlayerCommand("Forward", "+forward");
|
||||
while(true)
|
||||
{
|
||||
self waittill("Forward");
|
||||
self.position--;
|
||||
self.scrollbar destroy();
|
||||
if(self.position < 0)
|
||||
{
|
||||
self.position = level.maxOptions-1;
|
||||
self.scrollbarY = 51;
|
||||
}
|
||||
else
|
||||
self.scrollbarY -= 18;
|
||||
|
||||
//self.scrollbar = self createPlayerRectangle("line_horizontal","CENTER", "CENTER", level.elems[self.position].x,level.elems[self.position].y,220,8);
|
||||
self.scrollbar = self createPlayerRectangle("line_horizontal","CENTER", "CENTER", 0,self.scrollbarY,220,11);
|
||||
self.scrollbar.color = (0,1,0);
|
||||
self.scrollbar.sort = 2;
|
||||
}
|
||||
}
|
||||
onBackward()
|
||||
{
|
||||
self endon("disconnect");
|
||||
level endon("finishVote");
|
||||
self notify("onBackward");
|
||||
self endon("onBackward");
|
||||
self notifyOnPlayerCommand("Backward", "+back");
|
||||
while(true)
|
||||
{
|
||||
self waittill("Backward");
|
||||
self.position++;
|
||||
if(self.position > level.maxOptions-1)
|
||||
{
|
||||
self.position = 0;
|
||||
self.scrollbarY = -75;
|
||||
}
|
||||
else
|
||||
self.scrollbarY += 18;
|
||||
//iPrintln(self.scrollbarY);
|
||||
self.scrollbar destroy();
|
||||
//self.scrollbar = self createPlayerRectangle("line_horizontal","CENTER", "CENTER", level.elems[self.position].x,level.elems[self.position].y,220,8);
|
||||
self.scrollbar = self createPlayerRectangle("line_horizontal","CENTER", "CENTER", 0,self.scrollbarY,220,11);
|
||||
self.scrollbar.color = (0,1,0);
|
||||
self.scrollbar.sort = 2;
|
||||
}
|
||||
}
|
||||
killGungameHUD()
|
||||
{
|
||||
foreach(player in level.players)
|
||||
{
|
||||
for(i=2;i<6;i++)
|
||||
{
|
||||
if(isDefined(player.multitext[i]))
|
||||
player.multitext[i] destroy();
|
||||
}
|
||||
|
||||
if(isdefined(player.scoretext))
|
||||
player.scoretext destroy();
|
||||
if(isdefined(player.scoretext_amount))
|
||||
player.scoretext_amount destroy();
|
||||
if(isdefined(player.weaponhud))
|
||||
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))
|
||||
player.ratiohud destroy();
|
||||
if(isDefined(player.streakText))
|
||||
player.streakText destroy();
|
||||
|
||||
if(isDefined(player.streakIcons))
|
||||
{
|
||||
foreach(icon in player.streakIcons)
|
||||
{
|
||||
if(isDefined(icon))
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
618
mod/weapons.gsc
Executable file
618
mod/weapons.gsc
Executable file
@@ -0,0 +1,618 @@
|
||||
#include common_scripts\utility;
|
||||
#include maps\mp\_utility;
|
||||
#include maps\mp\gametypes\_hud_util;
|
||||
|
||||
|
||||
loadWeapons()
|
||||
{
|
||||
level.gungameList = [];
|
||||
weaponList = [];
|
||||
amount_of_weapons = getDvarInt("amount_weapons");
|
||||
|
||||
if(getDvar("gunmode") == "Snipers only")
|
||||
{
|
||||
amount_of_weapons = int(amount_of_weapons/2);
|
||||
weaponList[weaponList.size] = "barrett_mp";
|
||||
weaponList[weaponList.size] = "wa2000_mp";
|
||||
weaponList[weaponList.size] = "m21_mp";
|
||||
weaponList[weaponList.size] = "cheytac_mp";
|
||||
}
|
||||
else if(getDvar("gunmode") == "Pistol & Shotguns only")
|
||||
{
|
||||
amount_of_weapons = int(amount_of_weapons/2);
|
||||
weaponList[weaponList.size] = "deserteagle_mp";
|
||||
weaponList[weaponList.size] = "coltanaconda_mp";
|
||||
weaponList[weaponList.size] = "beretta_mp";
|
||||
// semi auto pistols
|
||||
weaponList[weaponList.size] = "tmp_mp";
|
||||
weaponList[weaponList.size] = "glock_mp";
|
||||
weaponList[weaponList.size] = "beretta393_mp";
|
||||
weaponList[weaponList.size] = "pp2000_mp";
|
||||
// shotguns
|
||||
weaponList[weaponList.size] = "ranger_mp";
|
||||
weaponList[weaponList.size] = "model1887_mp";
|
||||
weaponList[weaponList.size] = "striker_mp";
|
||||
weaponList[weaponList.size] = "aa12_mp";
|
||||
weaponList[weaponList.size] = "m1014_mp";
|
||||
weaponList[weaponList.size] = "spas12_mp";
|
||||
}
|
||||
else if(getDvar("gunmode") == "Fungame")
|
||||
{
|
||||
loadFungameList();
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
// pistols
|
||||
weaponList[weaponList.size] = "usp_mp";
|
||||
weaponList[weaponList.size] = "deserteagle_mp";
|
||||
weaponList[weaponList.size] = "deserteagle_akimbo_mp"; // GL deagle
|
||||
weaponList[weaponList.size] = "coltanaconda_mp";
|
||||
weaponList[weaponList.size] = "beretta_mp";
|
||||
// semi auto pistols
|
||||
weaponList[weaponList.size] = "tmp_mp";
|
||||
weaponList[weaponList.size] = "glock_mp";
|
||||
weaponList[weaponList.size] = "beretta393_mp";
|
||||
weaponList[weaponList.size] = "pp2000_mp";
|
||||
// shotguns
|
||||
weaponList[weaponList.size] = "ranger_mp";
|
||||
weaponList[weaponList.size] = "model1887_mp";
|
||||
weaponList[weaponList.size] = "striker_mp";
|
||||
weaponList[weaponList.size] = "aa12_mp";
|
||||
weaponList[weaponList.size] = "m1014_mp";
|
||||
weaponList[weaponList.size] = "spas12_mp";
|
||||
// rocket launcher
|
||||
weaponList[weaponList.size] = "m79_mp";
|
||||
weaponList[weaponList.size] = "rpg_mp";
|
||||
weaponList[weaponList.size] = "at4_mp";
|
||||
//weaponList[weaponList.size] = "javelin_mp";
|
||||
// assault rifles
|
||||
weaponList[weaponList.size] = "ak47_mp";
|
||||
weaponList[weaponList.size] = "m16_mp";
|
||||
weaponList[weaponList.size] = "m4_mp";
|
||||
weaponList[weaponList.size] = "fn2000_mp";
|
||||
weaponList[weaponList.size] = "masada_mp";
|
||||
weaponList[weaponList.size] = "famas_mp";
|
||||
weaponList[weaponList.size] = "fal_mp";
|
||||
weaponList[weaponList.size] = "scar_mp";
|
||||
weaponList[weaponList.size] = "tavor_mp";
|
||||
weaponList[weaponList.size] = "ak47classic_mp";
|
||||
// sub machine guns
|
||||
weaponList[weaponList.size] = "mp5k_mp";
|
||||
weaponList[weaponList.size] = "uzi_mp";
|
||||
weaponList[weaponList.size] = "p90_mp";
|
||||
weaponList[weaponList.size] = "kriss_mp";
|
||||
weaponList[weaponList.size] = "ump45_mp";
|
||||
weaponList[weaponList.size] = "ak74u_mp";
|
||||
// light machine guns
|
||||
weaponList[weaponList.size] = "rpd_mp";
|
||||
weaponList[weaponList.size] = "sa80_mp";
|
||||
weaponList[weaponList.size] = "mg4_mp";
|
||||
weaponList[weaponList.size] = "m240_mp";
|
||||
weaponList[weaponList.size] = "aug_mp";
|
||||
// sniper
|
||||
weaponList[weaponList.size] = "barrett_mp";
|
||||
weaponList[weaponList.size] = "wa2000_mp";
|
||||
weaponList[weaponList.size] = "m21_mp";
|
||||
weaponList[weaponList.size] = "cheytac_mp";
|
||||
weaponList[weaponList.size] = "dragunov_mp";
|
||||
weaponList[weaponList.size] = "m40a3_mp";
|
||||
// special
|
||||
weaponList[weaponList.size] = "ac130_mp";
|
||||
//weaponList[weaponList.size] = "riotshield_mp";
|
||||
|
||||
}
|
||||
|
||||
shuffle = getDvarInt("shuffle_weapons");
|
||||
level.gungameList[0] = "defaultweapon_mp";
|
||||
for(i = 1; i <= amount_of_weapons; i++)
|
||||
{
|
||||
if(weaponList.size <= 0) break;
|
||||
|
||||
if(shuffle)
|
||||
id = randomInt(weaponList.size);
|
||||
else
|
||||
id = (i - 1) % weaponList.size;
|
||||
|
||||
level.gungameList[level.gungameList.size] = setWeapon(weaponList[id]);
|
||||
|
||||
// Only remove specific weapons if we still have enough unique ones left
|
||||
if(weaponList.size > 5)
|
||||
{
|
||||
if(weaponList[id] == "m79_mp" || weaponList[id] == "at4_mp" || weaponList[id] == "rpg_mp" || weaponList[id] == "riotshield_mp" || weaponList[id] == "dragunov_mp" || weaponList[id] == "m40a3_mp" || weaponList[id] == "peacekeeper_mp" || weaponList[id] == "deserteagle_akimbo_mp")
|
||||
weaponList = removeIDfromArray(id, weaponList);
|
||||
}
|
||||
}
|
||||
//level.gungameList[1] = setWeapon("rpg_mp");
|
||||
//level.gungameList[1] = "rpg_mp";
|
||||
}
|
||||
removeIDfromArray(id, weaponList)
|
||||
{
|
||||
newArray = [];
|
||||
for(i = 0; i < weaponList.size;i++)
|
||||
{
|
||||
if(id != i)
|
||||
newArray[newArray.size] = weaponList[i];
|
||||
}
|
||||
return newArray;
|
||||
}
|
||||
setWeapon(name)
|
||||
{
|
||||
// If the caller already specified a fully-qualified akimbo weapon (e.g.
|
||||
// "deserteagle_akimbo_mp"), pass it through unchanged — no randomization.
|
||||
if(isSubstr(name, "_akimbo_"))
|
||||
return name;
|
||||
name = strTok(name, "_");
|
||||
scope = "";
|
||||
attachments = "";
|
||||
switch(name[0])
|
||||
{
|
||||
case "ak47":
|
||||
scope = "acog,eotech,,reflex";
|
||||
attachments = "fmj,xmags,gl,heartbeat,silencer,thermal,,shotgun";
|
||||
break;
|
||||
case "m16":
|
||||
scope = "acog,eotech,,reflex";
|
||||
attachments = "fmj,xmags,gl,heartbeat,silencer,thermal,,shotgun";
|
||||
break;
|
||||
case "m4":
|
||||
scope = "acog,eotech,,reflex";
|
||||
attachments = "fmj,xmags,gl,heartbeat,silencer,thermal,,shotgun";
|
||||
break;
|
||||
case "fn2000":
|
||||
scope = "acog,eotech,,reflex";
|
||||
attachments = "fmj,xmags,gl,heartbeat,silencer,thermal,,shotgun";
|
||||
break;
|
||||
case "masada":
|
||||
scope = "acog,eotech,,reflex";
|
||||
attachments = "fmj,xmags,gl,heartbeat,silencer,thermal,,shotgun";
|
||||
break;
|
||||
case "famas":
|
||||
scope = "acog,eotech,,reflex";
|
||||
attachments = "fmj,xmags,gl,heartbeat,silencer,thermal,,shotgun";
|
||||
break;
|
||||
case "fal":
|
||||
scope = "acog,eotech,,reflex";
|
||||
attachments = "fmj,xmags,gl,heartbeat,silencer,thermal,,shotgun";
|
||||
break;
|
||||
case "scar":
|
||||
scope = "acog,eotech,,reflex";
|
||||
attachments = "fmj,xmags,gl,heartbeat,silencer,thermal,,shotgun";
|
||||
break;
|
||||
case "tavor":
|
||||
scope = "acog,eotech,,reflex";
|
||||
attachments = "fmj,xmags,gl,heartbeat,silencer,thermal,,shotgun";
|
||||
break;
|
||||
case "ak47classic":
|
||||
scope = "acog,,reflex";
|
||||
attachments = "fmj,gl,,silencer,xmags";
|
||||
break;
|
||||
// sub machine guns
|
||||
case "mp5k":
|
||||
scope = "acog,eotech,,reflex,akimbo";
|
||||
attachments = "fmj,xmags,silencer,thermal,,rof";
|
||||
break;
|
||||
case "uzi":
|
||||
scope = "acog,eotech,,reflex,akimbo";
|
||||
attachments = "fmj,xmags,silencer,thermal,,rof";
|
||||
break;
|
||||
case "p90":
|
||||
scope = "acog,eotech,,reflex,akimbo";
|
||||
attachments = "fmj,xmags,silencer,thermal,,rof";
|
||||
break;
|
||||
case "kriss":
|
||||
scope = "acog,eotech,,reflex,akimbo";
|
||||
attachments = "fmj,xmags,silencer,thermal,,rof";
|
||||
break;
|
||||
case "ump45":
|
||||
scope = "acog,eotech,,reflex,akimbo";
|
||||
attachments = "fmj,xmags,silencer,thermal,,rof";
|
||||
break;
|
||||
case "ak47u":
|
||||
scope = "acog,,";
|
||||
attachments = "xmags,,";
|
||||
break;
|
||||
// light machine guns
|
||||
case "rpd":
|
||||
scope = "acog,,eotech";
|
||||
attachments = "fmj,xmags,silencer,thermal,,grip,heartbeat"; // reflex
|
||||
break;
|
||||
case "sa80":
|
||||
scope = "acog,,eotech";
|
||||
attachments = "fmj,xmags,silencer,thermal,,grip,heartbeat";
|
||||
break;
|
||||
case "mg4":
|
||||
scope = "acog,,eotech";
|
||||
attachments = "fmj,xmags,silencer,thermal,,grip,heartbeat";
|
||||
break;
|
||||
case "m240":
|
||||
scope = "acog,,eotech";
|
||||
attachments = "fmj,xmags,silencer,thermal,,grip,heartbeat";
|
||||
break;
|
||||
case "aug":
|
||||
scope = "acog,,eotech";
|
||||
attachments = "fmj,xmags,silencer,thermal,,grip,heartbeat";
|
||||
break;
|
||||
// sniper
|
||||
case "barrett":
|
||||
scope = "acog,,";
|
||||
attachments = "fmj,xmags,silencer,thermal,,heartbeat";
|
||||
break;
|
||||
case "wa2000":
|
||||
scope = "acog,,";
|
||||
attachments = "fmj,xmags,silencer,thermal,,heartbeat";
|
||||
break;
|
||||
case "m21":
|
||||
scope = "acog,,";
|
||||
attachments = "fmj,xmags,silencer,thermal,,heartbeat";
|
||||
break;
|
||||
case "cheytac":
|
||||
scope = "acog,,";
|
||||
attachments = "fmj,xmags,silencer,thermal,,heartbeat";
|
||||
break;
|
||||
// shotgun
|
||||
case "ranger":
|
||||
scope = "akimbo,";
|
||||
attachments = "fmj,";
|
||||
break;
|
||||
case "model1887":
|
||||
scope = "akimbo,";
|
||||
attachments = "fmj,";
|
||||
break;
|
||||
case "striker":
|
||||
scope = "eotech,reflex,";
|
||||
attachments = "fmj,grip,silencer,xmags,";
|
||||
break;
|
||||
case "aa12":
|
||||
scope = "eotech,reflex,";
|
||||
attachments = "fmj,grip,silencer,xmags,";
|
||||
break;
|
||||
case "m1014":
|
||||
scope = "eotech,reflex,";
|
||||
attachments = "fmj,grip,silencer,xmags,";
|
||||
break;
|
||||
case "spas12":
|
||||
scope = "eotech,reflex,";
|
||||
attachments = "fmj,grip,silencer,xmags,";
|
||||
break;
|
||||
// pistols
|
||||
case "usp": // some variants get lost because fmj can be front and back attachment
|
||||
scope = "akimbo,";
|
||||
attachments = "fmj,silencer,xmags"; // tactical
|
||||
break;
|
||||
case "beretta":
|
||||
scope = "akimbo,";
|
||||
attachments = "fmj,silencer,xmags";
|
||||
break;
|
||||
case "deserteagle":
|
||||
scope = "akimbo,";
|
||||
attachments = "fmj,silencer,xmags";
|
||||
break;
|
||||
case "coltanaconda":
|
||||
scope = "akimbo,";
|
||||
attachments = "fmj,silencer,xmags";
|
||||
break;
|
||||
// semi automatic pistols
|
||||
case "tmp":
|
||||
scope = "akimbo,eotech,"; // reflex
|
||||
attachments = "fmj,silencer,xmags,";
|
||||
break;
|
||||
case "glock":
|
||||
scope = "akimbo,eotech,";
|
||||
attachments = "fmj,silencer,xmags,";
|
||||
break;
|
||||
case "beretta393":
|
||||
scope = "akimbo,eotech,";
|
||||
attachments = "fmj,silencer,xmags,";
|
||||
break;
|
||||
case "pp2000":
|
||||
scope = "akimbo,eotech,";
|
||||
attachments = "fmj,silencer,xmags,";
|
||||
break;
|
||||
case "ac130":
|
||||
scope = "";
|
||||
attachments = "25mm,40mm,105mm";
|
||||
break;
|
||||
default: // grenadelaunchers and riotshield
|
||||
scope = "";
|
||||
attachments = "";
|
||||
break;
|
||||
}
|
||||
|
||||
if(scope == "" && attachments == "")
|
||||
{
|
||||
return (name[0] + "_mp");
|
||||
}
|
||||
else if(scope == "") // ac130 only
|
||||
{
|
||||
attachmentsAr = strTok(attachments, ",");
|
||||
usedAttachment = attachmentsAr[randomInt(attachmentsAr.size)];
|
||||
return (name[0] + "_" + usedAttachment + "_mp");
|
||||
}
|
||||
|
||||
scopeAr = strTok(scope, ",");
|
||||
usedScope = scopeAr[randomInt(scopeAr.size)];
|
||||
attachmentsAr = strTok(attachments, ",");
|
||||
usedAttachment = attachmentsAr[randomInt(attachmentsAr.size)];
|
||||
|
||||
if((usedScope == "akimbo") && (name[0] == "deserteagle" || name[0] == "coltanaconda")){
|
||||
attachments = "fmj,";
|
||||
attachmentsAr = strTok(attachments, ",");
|
||||
usedAttachment = attachmentsAr[randomInt(attachmentsAr.size)];
|
||||
}
|
||||
else if(usedScope == "reflex")
|
||||
{
|
||||
if(name[0] == "aa12" || name[0] == "spas12" || name[0] == "striker" || name[0] == "m1014")
|
||||
{
|
||||
attachments = "silencer,xmags,";
|
||||
attachmentsAr = strTok(attachments, ",");
|
||||
usedAttachment = attachmentsAr[randomInt(attachmentsAr.size)];
|
||||
}
|
||||
else if(isAssaultRifle(name[0]))
|
||||
{
|
||||
if(usedAttachment == "gl" || usedAttachment == "fmj" || usedAttachment == "heartbeat")
|
||||
return (name[0] + "_" + usedAttachment + "_" + usedScope + "_mp");
|
||||
}
|
||||
else if(isSMG(name[0]))
|
||||
{
|
||||
if(usedAttachment == "fmj")
|
||||
return (name[0] + "_" + usedAttachment + "_" + usedScope + "_mp");
|
||||
}
|
||||
}
|
||||
//iPrintln("scope" + usedScope);
|
||||
//iPrintln("attachment" + usedAttachment);
|
||||
if(usedAttachment == "thermal")
|
||||
return (name[0] + "_" + usedAttachment + "_mp");
|
||||
else
|
||||
return (name[0] + "_" + usedScope + "_" + usedAttachment + "_mp");
|
||||
}
|
||||
isAssaultRifle(name)
|
||||
{
|
||||
ar = [];
|
||||
ar[ar.size] = "fn2000";
|
||||
ar[ar.size] = "masada";
|
||||
ar[ar.size] = "famas";
|
||||
ar[ar.size] = "fal";
|
||||
ar[ar.size] = "m4";
|
||||
ar[ar.size] = "m16";
|
||||
ar[ar.size] = "scar";
|
||||
ar[ar.size] = "tavor";
|
||||
ar[ar.size] = "ak47classic";
|
||||
foreach(a in ar)
|
||||
{
|
||||
if(name == a)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
loadFungameList()
|
||||
{
|
||||
level.fungameWeapons = [];
|
||||
|
||||
// PISTOLS (1-20)
|
||||
addFungameWeapon("m40a3_mp");
|
||||
addFungameWeapon("usp_mp");
|
||||
addFungameWeapon("usp_silencer_mp");
|
||||
addFungameWeapon("usp_tactical_mp");
|
||||
addFungameWeapon("usp_fmj_mp");
|
||||
addFungameWeapon("usp_akimbo_mp");
|
||||
addFungameWeapon("beretta_mp");
|
||||
addFungameWeapon("beretta_silencer_mp");
|
||||
addFungameWeapon("beretta_tactical_mp");
|
||||
addFungameWeapon("beretta_fmj_mp");
|
||||
addFungameWeapon("beretta_akimbo_mp");
|
||||
addFungameWeapon("deserteagle_mp");
|
||||
addFungameWeapon("deserteagle_fmj_mp");
|
||||
addFungameWeapon("deserteagle_tactical_mp");
|
||||
addFungameWeapon("deserteagle_akimbo_mp");
|
||||
addFungameWeapon("coltanaconda_mp");
|
||||
addFungameWeapon("coltanaconda_fmj_mp");
|
||||
addFungameWeapon("coltanaconda_tactical_mp");
|
||||
addFungameWeapon("coltanaconda_akimbo_mp");
|
||||
addFungameWeapon("usp_mp"); // Filler
|
||||
addFungameWeapon("beretta_mp"); // Filler
|
||||
|
||||
// MACHINE PISTOLS (21-40)
|
||||
addFungameWeapon("glock_mp");
|
||||
addFungameWeapon("glock_silencer_mp");
|
||||
addFungameWeapon("glock_reflex_mp");
|
||||
addFungameWeapon("glock_akimbo_mp");
|
||||
addFungameWeapon("tmp_mp");
|
||||
addFungameWeapon("tmp_silencer_mp");
|
||||
addFungameWeapon("tmp_reflex_mp");
|
||||
addFungameWeapon("tmp_akimbo_mp");
|
||||
addFungameWeapon("beretta393_mp");
|
||||
addFungameWeapon("beretta393_silencer_mp");
|
||||
addFungameWeapon("beretta393_reflex_mp");
|
||||
addFungameWeapon("beretta393_akimbo_mp");
|
||||
addFungameWeapon("pp2000_mp");
|
||||
addFungameWeapon("pp2000_silencer_mp");
|
||||
addFungameWeapon("pp2000_reflex_mp");
|
||||
addFungameWeapon("pp2000_akimbo_mp");
|
||||
addFungameWeapon("glock_eotech_mp");
|
||||
addFungameWeapon("tmp_eotech_mp");
|
||||
addFungameWeapon("beretta393_eotech_mp");
|
||||
addFungameWeapon("pp2000_eotech_mp");
|
||||
|
||||
wait .05;
|
||||
// SHOTGUNS (41-60)
|
||||
addFungameWeapon("spas12_mp");
|
||||
addFungameWeapon("spas12_grip_mp");
|
||||
addFungameWeapon("spas12_silencer_mp");
|
||||
addFungameWeapon("spas12_reflex_mp");
|
||||
addFungameWeapon("m1014_mp");
|
||||
addFungameWeapon("m1014_grip_mp");
|
||||
addFungameWeapon("m1014_silencer_mp");
|
||||
addFungameWeapon("m1014_reflex_mp");
|
||||
addFungameWeapon("aa12_mp");
|
||||
addFungameWeapon("aa12_grip_mp");
|
||||
addFungameWeapon("aa12_silencer_mp");
|
||||
addFungameWeapon("aa12_reflex_mp");
|
||||
addFungameWeapon("striker_mp");
|
||||
addFungameWeapon("striker_grip_mp");
|
||||
addFungameWeapon("striker_silencer_mp");
|
||||
addFungameWeapon("striker_reflex_mp");
|
||||
addFungameWeapon("ranger_mp");
|
||||
addFungameWeapon("ranger_akimbo_mp");
|
||||
addFungameWeapon("model1887_mp");
|
||||
addFungameWeapon("model1887_akimbo_mp");
|
||||
|
||||
wait .05;
|
||||
// SMGS (61-90)
|
||||
addFungameWeapon("mp5k_mp");
|
||||
addFungameWeapon("mp5k_silencer_mp");
|
||||
addFungameWeapon("mp5k_reflex_mp");
|
||||
addFungameWeapon("mp5k_akimbo_mp");
|
||||
addFungameWeapon("mp5k_rof_mp");
|
||||
addFungameWeapon("uzi_mp");
|
||||
addFungameWeapon("uzi_silencer_mp");
|
||||
addFungameWeapon("uzi_reflex_mp");
|
||||
addFungameWeapon("uzi_akimbo_mp");
|
||||
addFungameWeapon("uzi_rof_mp");
|
||||
addFungameWeapon("p90_mp");
|
||||
addFungameWeapon("p90_silencer_mp");
|
||||
addFungameWeapon("p90_reflex_mp");
|
||||
addFungameWeapon("p90_akimbo_mp");
|
||||
addFungameWeapon("p90_rof_mp");
|
||||
addFungameWeapon("kriss_mp");
|
||||
addFungameWeapon("kriss_silencer_mp");
|
||||
addFungameWeapon("kriss_reflex_mp");
|
||||
addFungameWeapon("kriss_akimbo_mp");
|
||||
addFungameWeapon("kriss_rof_mp");
|
||||
addFungameWeapon("ump45_mp");
|
||||
addFungameWeapon("ump45_silencer_mp");
|
||||
addFungameWeapon("ump45_reflex_mp");
|
||||
addFungameWeapon("ump45_akimbo_mp");
|
||||
addFungameWeapon("ump45_rof_mp");
|
||||
addFungameWeapon("ak74u_mp");
|
||||
addFungameWeapon("mp5k_acog_mp");
|
||||
addFungameWeapon("p90_acog_mp");
|
||||
addFungameWeapon("kriss_acog_mp");
|
||||
addFungameWeapon("ump45_acog_mp");
|
||||
|
||||
wait .05;
|
||||
// ASSAULT RIFLES (91-120)
|
||||
addFungameWeapon("m4_mp");
|
||||
addFungameWeapon("m4_silencer_mp");
|
||||
addFungameWeapon("m4_reflex_mp");
|
||||
addFungameWeapon("m4_acog_mp");
|
||||
addFungameWeapon("m4_gl_mp");
|
||||
addFungameWeapon("scar_mp");
|
||||
addFungameWeapon("scar_silencer_mp");
|
||||
addFungameWeapon("scar_reflex_mp");
|
||||
addFungameWeapon("scar_acog_mp");
|
||||
addFungameWeapon("scar_gl_mp");
|
||||
addFungameWeapon("tavor_mp");
|
||||
addFungameWeapon("tavor_silencer_mp");
|
||||
addFungameWeapon("tavor_reflex_mp");
|
||||
addFungameWeapon("tavor_acog_mp");
|
||||
addFungameWeapon("tavor_gl_mp");
|
||||
addFungameWeapon("masada_mp");
|
||||
addFungameWeapon("masada_silencer_mp");
|
||||
addFungameWeapon("masada_reflex_mp");
|
||||
addFungameWeapon("masada_acog_mp");
|
||||
addFungameWeapon("masada_gl_mp");
|
||||
addFungameWeapon("ak47_mp");
|
||||
addFungameWeapon("ak47_silencer_mp");
|
||||
addFungameWeapon("ak47_reflex_mp");
|
||||
addFungameWeapon("ak47_acog_mp");
|
||||
addFungameWeapon("ak47_gl_mp");
|
||||
addFungameWeapon("famas_mp");
|
||||
addFungameWeapon("famas_silencer_mp");
|
||||
addFungameWeapon("famas_reflex_mp");
|
||||
addFungameWeapon("famas_acog_mp");
|
||||
addFungameWeapon("famas_fmj_mp");
|
||||
addFungameWeapon("fal_mp");
|
||||
addFungameWeapon("fal_silencer_mp");
|
||||
addFungameWeapon("fal_reflex_mp");
|
||||
addFungameWeapon("fal_acog_mp");
|
||||
addFungameWeapon("fal_gl_mp");
|
||||
addFungameWeapon("m16_mp");
|
||||
addFungameWeapon("m16_silencer_mp");
|
||||
addFungameWeapon("m16_reflex_mp");
|
||||
addFungameWeapon("m16_acog_mp");
|
||||
addFungameWeapon("m16_gl_mp");
|
||||
addFungameWeapon("ak47classic_mp");
|
||||
|
||||
wait .05;
|
||||
// LMGS (121-135)
|
||||
addFungameWeapon("rpd_mp");
|
||||
addFungameWeapon("rpd_grip_mp");
|
||||
addFungameWeapon("rpd_reflex_mp");
|
||||
addFungameWeapon("mg4_mp");
|
||||
addFungameWeapon("mg4_grip_mp");
|
||||
addFungameWeapon("mg4_reflex_mp");
|
||||
addFungameWeapon("aug_mp");
|
||||
addFungameWeapon("aug_grip_mp");
|
||||
addFungameWeapon("aug_reflex_mp");
|
||||
addFungameWeapon("m240_mp");
|
||||
addFungameWeapon("m240_grip_mp");
|
||||
addFungameWeapon("m240_reflex_mp");
|
||||
addFungameWeapon("sa80_mp");
|
||||
addFungameWeapon("sa80_grip_mp");
|
||||
addFungameWeapon("sa80_reflex_mp");
|
||||
|
||||
// SNIPERS (136-145)
|
||||
addFungameWeapon("cheytac_mp");
|
||||
addFungameWeapon("cheytac_acog_mp");
|
||||
addFungameWeapon("cheytac_thermal_mp");
|
||||
addFungameWeapon("barrett_mp");
|
||||
addFungameWeapon("barrett_acog_mp");
|
||||
addFungameWeapon("barrett_thermal_mp");
|
||||
addFungameWeapon("wa2000_mp");
|
||||
addFungameWeapon("wa2000_thermal_mp");
|
||||
addFungameWeapon("m21_mp");
|
||||
addFungameWeapon("m21_thermal_mp");
|
||||
|
||||
// LAUNCHERS & SPECIAL (146-150)
|
||||
addFungameWeapon("m79_mp");
|
||||
addFungameWeapon("rpg_mp");
|
||||
addFungameWeapon("at4_mp");
|
||||
addFungameWeapon("riotshield_mp");
|
||||
addFungameWeapon("javelin_mp");
|
||||
|
||||
level.gungameList = [];
|
||||
level.gungameList[0] = "defaultweapon_mp";
|
||||
|
||||
amount = getDvarInt("amount_weapons");
|
||||
if(amount <= 0 || 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)
|
||||
{
|
||||
level.fungameWeapons[level.fungameWeapons.size] = weapon;
|
||||
}
|
||||
isSMG(name)
|
||||
{
|
||||
ar = [];
|
||||
ar[ar.size] = "mp5k";
|
||||
ar[ar.size] = "uzi";
|
||||
ar[ar.size] = "p90";
|
||||
ar[ar.size] = "kriss";
|
||||
ar[ar.size] = "ump45";
|
||||
ar[ar.size] = "ak74u"; //?
|
||||
foreach(a in ar)
|
||||
{
|
||||
if(name == a)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
Reference in New Issue
Block a user