init fungun

This commit is contained in:
2026-05-05 17:34:27 +02:00
commit 3432eeacd6
8 changed files with 3003 additions and 0 deletions

4
gunfun/.gitignore vendored Normal file
View File

@@ -0,0 +1,4 @@
*.log*
maps/
scriptdata/
demos/

75
gunfun/mod/api.gsc Executable file
View File

@@ -0,0 +1,75 @@
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\gametypes\_hud_util;
// For sending data, you use - as split character and for response I use | as split character
// all-10 => top 10 guids split by |
Init()
{
if(true) // unfinished script
return;
//level.api = "http://178.63.44.165:80831/";
level.api = "";
level.chatCommands = [];
level.chatCommands[level.chatCommands.size] = "register";
level.chatCommands[level.chatCommands.size] = "increment";
level.chatCommands[level.chatCommands.size] = "all";
level.chatCommands[level.chatCommands.size] = "read";
thread onSay();
thread onPlayerConnect();
}
onPlayerConnect()
{
while(true)
{
level waittill("connected", player);
player thread tryCallApi("register");
}
}
onSay()
{
while(true)
{
level waittill("say", string, player);
iprintlnBold(string + " " + player.name);
player thread checkString(string);
}
}
checkString(string)
{
if(string[0] != "!" && string[0] != "-")
return;
string = GetSubStr(string,1); //GetSubStr( <string>, <start index>, <end index> )
iPrintln(string);
cmd = strTok(string, " ");
foreach(chat in level.chatCommands)
{
if(chat == cmd[0])
self callApi(chat);
}
}
callApi(string)
{
list = httpGet(level.api + "");
list waittill("done", success, data);
if(!success)
return "error";
iPrintln("^2green");
return data;
}
tryCallApi(parameter)
{
data = self callApi("!" + parameter + "-" + self.guid);
if(!isDefined(data))
self iPrintlnBold(parameter + " was successful");
else if(data == "error")
self iPrintlnBold("^1error calling the api");
else
{
wait 2;
ar = strTok(data, "|");
foreach(a in ar)
self iPrintlnBold(a);
}
}

991
gunfun/mod/main.gsc Executable file
View File

@@ -0,0 +1,991 @@
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\gametypes\_hud_util;
/////////////////////
//
// Gamemodes:
//
// - basic
// - team gungame
// - no streaks
// - snipers only
// - kill confirmed
// - pistol & shotgun only (disabled)
Init()
{
loadSettings();
thread mod\weapons::loadWeapons();
thread mod\streaks::loadStreaks();
thread mod\vote::loadVote(); // does not work
thread onPlayerConnect();
thread deleteSentries();
thread launchGame();
}
setGamemodes()
{
level.gungamemodes = [];
level.gungamemodes[level.gungamemodes.size] = "Fungame"; // God of Hellfire addition
level.gungamemodes[level.gungamemodes.size] = "Classic";
// level.gungamemodes[level.gungamemodes.size] = "Classic"; // raising the chance
// level.gungamemodes[level.gungamemodes.size] = "Classic";
// level.gungamemodes[level.gungamemodes.size] = "No Streaks";
// level.gungamemodes[level.gungamemodes.size] = "Snipers only";
//level.gungamemodes[level.gungamemodes.size] = "Pistol & Shotguns only"; // works but is it fun?
// level.gungamemodes[level.gungamemodes.size] = "Team Gungame";
// level.gungamemodes[level.gungamemodes.size] = "Kill Confirmed";
}
initializeGametype(type) // called in vote.gsc after first map
{
setDvar("gunmode", type);
if(type == "Team Gungame")
setDvar("g_gametype", "gungame_team");
else
setDvar("g_gametype", "gungame");
switch(type)
{
case "Classic":
setDvar("global_health", 60);
setDvar("speed", 1.2);
setDvar("streaks_online", 1);
setDvar("jump_height", 60);
setDvar("amount_weapons", 100);
setDvar("shuffle_weapons", 1);
break;
case "No Streaks":
setDvar("global_health", 70);
setDvar("speed", 1.2);
setDvar("streaks_online", 0);
setDvar("jump_height", 70);
break;
case "Snipers only":
setDvar("global_health", 70);
setDvar("speed", 1.2);
setDvar("streaks_online", 1);
setDvar("jump_height", 70);
break;
case "Pistol & Shotguns only":
setDvar("global_health", 70);
setDvar("speed", 1.2);
setDvar("streaks_online", 1);
setDvar("jump_height", 70);
break;
case "Team Gungame":
setDvar("global_health", 70);
setDvar("speed", 1.2);
setDvar("streaks_online", 1);
setDvar("jump_height", 70);
break;
case "Kill Confirmed":
setDvar("global_health", 100);
setDvar("speed", 1);
setDvar("streaks_online", 1);
setDvar("jump_height", 70);
break;
case "Fungame":
setDvar("global_health", 60);
setDvar("speed", 1.5);
setDvar("streaks_online", 1);
setDvar("jump_height", 0.5);
setDvar("amount_weapons", 150);
break;
default: // not required
setDvar("global_health", 70);
setDvar("speed", 1.2);
setDvar("streaks_online", 1);
setDvar("jump_height", 70);
setDvar("amount_weapons", 100);
break;
}
}
loadSettings()
{
/////////////////////// CUSTOM SETTINGS /////////////////////////////
//SetDvarIfUninitialized("gunmode", "Classic");
SetDvarIfUninitialized("gunmode", "Fungame");
initializeGametype(getDvar("gunmode"));
if(getDvar("g_gametype") == "gungame_team")
setDvar("amount_weapons", int(getDvarInt("amount_weapons")/4));
setDvar("shuffle_weapons", 0);
setDvar("intermission", 15);
SetDvarIfUninitialized("show_damage_ui", 1);
setDvar("gunversion", "1.4 Remaster by ^1Santahunter - Modified by God of Hellfire");
/////////////////////////////////////////////////////////////////////
setDvar("scr_" + (getDvar("g_gametype")) + "_timelimit", 0);
setDvar("scr_" + (getDvar("g_gametype")) + "_scorelimit", 0);
setDvar("ui_allow_teamchange", 0);
setDvar("testClients_watchKillcam", 0);
setDvar("scr_game_hardpoints", 0);
setDvar("scr_game_graceperiod", 0);
setDvar("scr_game_matchstarttime", 0);
setDvar("scr_game_playerwaittime", 0);
setDvar("g_hardcore", 0);
level.state = "prematch";
level.markerIcon = "ui_host";
level.teamKills = [];
level.teamKills["allies"] = 0;
level.teamKills["axis"] = 0;
level.teamKills["allies_weapon"] = 1;
level.teamKills["axis_weapon"] = 1;
precacheShader(level.markerIcon);
setGamemodes();
// Bot Management
setDvar("bots_main", 1);
setDvar("bots_manage_fill", 8);
setDvar("bots_skill", 3);
}
deleteSentries()
{
turret = GetEntArray("misc_turret","classname");
for(i=0;i<turret.size;i++)
turret[i] delete();
}
launchGame()
{
hud = createServerFontString("hudbig", 1);
hud setPoint("CENTER", "CENTER", 0,-80);
hud.color = (1,1,0);
hud.glowAlpha = 1;
hud.glowColor = (.7,0,0);
hud setText("Game starting in");
value = createServerFontString("hudbig", 1.75);
value setPoint("CENTER", "CENTER", 0,0);
value.glowAlpha = 1;
value.color = (1,1,0);
value.glowAlpha = 1;
value.glowColor = (.7,0,0);
for(i = getDvarInt("intermission");i > 0;i--)
{
value changeFontScaleOverTime(1);
value.fontScale = 0.5;
value setValue(i);
wait 1;
value.fontScale = 1.75;
foreach(player in level.players)
{
player playLocalSound("ui_mp_suitcasebomb_timer");
}
}
level.state = "ingame";
value setValue(0);
foreach(player in level.players)
{
player enableWeapons();
player visionSetNakedForPlayer(getDvar("mapname"), 2);
player setMoveSpeedScale(1.25);
}
setDvar("jump_height", 60);
hud destroy();
value destroy();
//player freezeControls(false);
}
onPlayerConnect()
{
while(true)
{
level waittill("connected", player);
player thread onPlayerSpawned();
}
}
onPlayerSpawned()
{
self endon("disconnect");
self thread firstSpawn();
while(true)
{
self waittill("spawned_player");
self thread loadSetup();
// self thread test();
}
}
firstSpawn()
{
self endon("disconnect");
team = getCorrectTeam();
self thread setStartWeapon(team);
self.firstSpawn = true;
self.knifeKills = 0;
self.gungameKills = 0;
self.streaks = [];
self setClientDvar("cg_drawSplatter", 1);
self.hud_damagefeedback.color = (1,0,0);
self.line = self createRectangle("CENTER", "LEFT", 0,-90,300,5,(1,1,0),"line_horizontal",1);
self thread onKilling();
self thread createUI();
self thread refillOnFire();
self thread watchVersion();
self thread FPSBoost();
if(getDvar("g_gametype") == "gungame_team")
self thread upgradeOnTeamKills();
for(i=1;i<3;i++)
self setClientDvar("lowAmmoWarningNoAmmoColor" + i, 0, 0, 0, 0);
wait .2;
self notify("menuresponse", game["menu_team"], team);
wait .1;
self notify("menuresponse", "changeclass", "class1");
wait .1;
self.firstSpawn = false;
self thread tryCreateMarkerIcons();
}
getCorrectTeam()
{
if(getDvar("g_gametype") != "gungame_team")
return "allies";
allies = 0;
axis = 0;
foreach(player in level.players)
{
if(player.team == "allies")
allies++;
else if(player.team == "axis")
axis++;
}
if(allies >= axis)
return "allies";
return "axis";
}
setStartWeapon(team)
{
if(getDvar("g_gametype") != "gungame_team")
self.current = 1;
else
self.current = level.teamKills[team + "_weapon"];
}
loadSetup()
{
self hide();
self thread mod\streaks::setStreaks();
self takeAllWeapons();
self _clearPerks();
self thread updateWeapon();
self.maxhp = getDvarInt("global_health");
self.maxhealth = self.maxhp;
self.health = self.maxhealth;
self.streaking = 0;
self.speed = false;
self.isJugger = false;
self.moveSpeedScaler = getDvarFloat("speed");
self setMoveSpeedScale(getDvarFloat("speed"));
self maps\mp\perks\_perks::givePerk("specialty_fastreload"); // due to icys request :)
self maps\mp\perks\_perks::givePerk("specialty_falldamage"); // due to icys request :)
self maps\mp\perks\_perks::givePerk("specialty_quickdraw");
self thread takeInvalidWeapon();
if(level.state == "prematch")
{
//self freezeControls(true);
self setMoveSpeedScale(0);
self disableWeapons();
self visionSetNakedForPlayer("blacktest", 0);
waitFrame();
if(level.state == "prematch")
self setMoveSpeedScale(0);
}
}
upgradeOnTeamKills()
{
self endon("disconnect");
while(true)
{
level waittill("upgrade_" + self.team);
wait .3;
enemyTeam = self getEnemyTeam();
self.current = level.teamKills[self.team + "_weapon"];
self thread updateWeapon();
self.weaponhud setText("Weapon: " + self.current + "/" + (level.gungameList.size) + "/^3" + level.teamKills[enemyTeam + "_weapon"]);
}
}
getEnemyTeam()
{
if(self.team == "allies")
return "axis";
return "allies";
}
updateWeapon()
{
if(self.current > (level.gungameList.size - 1))
{
self thread tryNuke();
return;
}
//self iPrintlnBold(level.gungameList[self.current]);
variant = randomInt(9);
if(getDvar("gunmode") == "Fungame")
variant = 0;
if (isSubstr(level.gungameList[self.current], "_akimbo"))
self giveWeapon(level.gungameList[self.current], variant, true);
else
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")
self show();
if(self.isJugger)
self setMoveSpeedScale(.7);
else if(self.speed)
self setMoveSpeedScale(1.6);
if(level.state == "prematch")
{
self setMoveSpeedScale(0);
if(level.state == "prematch")
self setMoveSpeedScale(0);
}
if(self getCurrentWeapon() == "none" && !self isMantling() && !self isOnLadder()) // in rare case weapon does not exist
{
self updateWeapon();
}
}
refillOnFire()
{
self endon("disconnect");
while(true)
{
self waittill("weapon_fired");
weapon = self getCurrentWeapon();
if(weapon == "at4_mp" || weapon == "rpg_mp" || weapon == "m79_mp")
{
self giveMaxAmmo(weapon);
}
}
}
onKilling() {
self endon("disconnect");
level endon("nuke");
self.multiplier = 0;
self.amount = 0;
//kills = self.pers["kills"];
kills = 0;
refreshCounter = 0;
self.scoretext = self createText("hudbig", 1, "CENTER", "CENTER", 0, 0, .7,"");
self.scoretext_amount = self createText("hudbig", 1, "CENTER", "CENTER", -10, 20, .7,"");
self.multitext = [];
for(i=2;i<6;i++)
self.multitext[i] = self createText("hudbig", .6, "CENTER", "CENTER", 50, (i * 20), .7,"");
while(true)
{
wait .3;
if(kills > self.gungameKills) // not called on team gungame
{
self thread scorepopup(-100);
kills--;
refreshCounter++;
if(getDvar("gunmode") == "Fungame")
{
killsInGun = (self.gungameKills % 2);
self.weaponhud setText("Weapon: " + self.current + "/" + (level.gungameList.size-1) + " (" + killsInGun + "/2)");
}
else
self.weaponhud setText("Weapon: " + self.current + "/" + (level.gungameList.size-1));
self refreshCounter(refreshCounter);
self updateRatio();
}
else if(kills < self.gungameKills)
{
kills++;
refreshCounter++;
self thread scorepopup(100);
self.streaking++;
if(getDvar("g_gametype") != "gungame_team")
{
if(getDvar("gunmode") == "Fungame")
{
if(self.gungameKills % 2 == 0)
{
self.current++;
self thread updateWeapon();
}
killsInGun = (self.gungameKills % 2);
self.weaponhud setText("Weapon: " + self.current + "/" + (level.gungameList.size-1) + " (" + killsInGun + "/2)");
}
else
{
self.current++;
self thread updateWeapon();
self.weaponhud setText("Weapon: " + self.current + "/" + (level.gungameList.size-1));
}
}
if(self.current >= (level.gungameList.size-5) && !isDefined(self.markerIcon))
self thread initCreateMarkerIcon();
self refreshCounter(refreshCounter);
self updateRatio();
}
}
}
updateRatio()
{
if(self.deaths != 0)
ratio = (self.kills/self.deaths);
else
ratio = self.kills;
self.ratiohud setValue(floatToString(ratio));
}
refreshCounter(refreshCounter)
{
if(refreshCounter == 10)
{
refreshCounter = 0;
self.weaponhud destroy();
self createWeaponHud();
}
}
warning(friendly)
{
self notify("warning");
if(friendly == 0)
warning = self createText("hudbig", .8, "CENTER", "CENTER", 0, 130, 1,"Enemy's powershield absorbed damage!");
else if(friendly == 1)
warning = self createText("hudbig", .8, "CENTER", "CENTER", 0, 130, 1,"Powershield absorbed damage!");
else if(friendly == 2)
warning = self createText("hudbig", .8, "CENTER", "CENTER", 0, 130, 1,"Enemy demoted you!");
else
warning = self createText("hudbig", .8, "CENTER", "CENTER", 0, 130, 1,"You demoted yourself!");
self thread clearWarning(warning);
warning.glowColor = (1,0,0);
warning fadeovertime(5);
warning.alpha = 0;
wait 5;
if(isDefined(warning))
warning destroy();
self notify("warning_end");
}
clearWarning(hud)
{
self endon("warning_end");
self waittill("warning");
if(isDefined(hud))
hud destroy();
}
createText(font,fontScale,align,relative,x,y,alpha,input,color,gcolor,galpha)
{
text = self createFontString(font,fontScale,self);
text setPoint(align,relative,x,y);
text.sort = 999;
text.alpha = alpha;
if(isDefined(color))
text.color = color;
if(isDefined(gcolor))
text.glowcolor = gcolor;
if(isDefined(galpha))
text.glowalpha = galpha;
else
text.glowalpha = 1;
text setText(input);
text.HideWhenInMenu = true;
return text;
}
scorepopup(amount)
{
self endon("disconnect");
self notify("scoring");
self endon("scoring");
self.multiplier++;
self.amount = self.amount + amount;
color = (0,0,0);
glowColor = (0,0,0);
switch(self.multiplier)
{
case 1:
color = (1,1,1);
glowColor = (0,1,0);
break;
case 2:
color = (1,1,0);
glowColor = (1,0,0);
break;
case 3:
color = (0,0,0);
glowColor = (1,0,0);
break;
default:
color = (0,0,0);
glowColor = (0,0,1);
break;
}
self.scoretext.alpha = 1;
self.scoretext_amount.alpha = 1;
self.scoretext.color = color;
self.scoretext.glowColor = glowColor;
self.scoretext SetPulseFX( 40, 2000, 600 );
if(getDvar("gunmode") == "Kill Confirmed")
self.scoretext setText("Upgraded!^3");
else
self.scoretext setText("Killed!^3");
self.scoretext_amount.color = color;
self.scoretext_amount.glowColor = glowColor;
self.scoretext_amount SetPulseFX( 40, 2000, 600 );
self.scoretext_amount setText("+" + self.amount);
if(self.multiplier > 1)
{
self.multitext[self.multiplier].alpha = 1;
self.multitext[self.multiplier] fadeOverTime(0.1);
self.multitext[self.multiplier].color = color;
self.multitext[self.multiplier].glowColor = glowColor;
}
if(self.multiplier == 2)
{
self thread lowerMultitext(self.multiplier);
self.multitext[self.multiplier] setText("Double Kill!");
}
else if(self.multiplier == 3)
self.multitext[self.multiplier] setText("Triple Kill!");
else if(self.multiplier == 4)
self.multitext[self.multiplier] setText("Multi Kill!");
else if(self.multiplier > 4)
{
color = [];
for(i = 0;i < 13;i++)
color[i] = randomInt(9);
difference = self.multiplier - 4;
self.multitext[5] setText("^3x" + difference + " ^" + color[0] + "K^" + color[1] + "i^" + color[2] + "l^" + color[3] + "l^" + color[4] + "i^" + color[5] + "n^" + color[6] + "g ^" + color[7] + "S^" + color[8] + "p^" + color[9] + "r^" + color[10] + "e^" + color[11] + "e^" + color[12] + "!");
}
self thread lowerMultiplier();
}
lowerMultiplier()
{
self endon("disconnect");
self notify("lowering");
self endon("lowering");
wait 5;
self notify("start_lowering");
self.multiplier = 0;
self.amount = 0;
}
lowerMultitext(multiplier)
{
self waittill_any("start_lowering", "disconnect");
for(i=2;i<6;i++)
{
self.multitext[i] fadeOverTime(3);
self.multitext[i].alpha = 0;
wait .75;
}
wait 4;
}
tryNuke()
{
if(isDefined(level.startNuke))
return;
level.state = "aftermatch";
level notify("nuke");
if(getDvar("g_gametype") != "gungame_team")
self.weaponhud setText("Weapon: " + (level.gungameList.size-1) + "/" + (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()
{
self thread createWeaponHud();
self thread Weaponnumber();
self thread createRatioHud();
}
createWeaponHud()
{
self.weaponhud = self createFontString("hudsmall", 1);
self.weaponhud setPoint("LEFT", "CENTER", -410, -105);
self.weaponhud.glowalpha = .5;
self.weaponhud.color = (1,1,0);
self.weaponhud.hideWhenInMenu = true;
self.weaponhud.glowcolor = (1,0,0);
}
createRatioHud()
{
self.ratiohud = self createFontString("hudsmall", 1);
self.ratiohud setPoint("LEFT", "CENTER", -410, -125);
self.ratiohud.color = (1,1,0);
self.ratiohud.glowalpha = .3;
self.ratiohud.glowcolor = (1,0,0);
self.ratiohud.label = &"Ratio: ";
self.ratiohud.alpha = 0;
self waittill_any("death", "killed_lethal");
self.ratiohud fadeOverTime(2);
self.ratiohud.alpha = 1;
}
Weaponnumber() // deprecated
{
self notify("weaponnumber");
self endon("weaponnumber");
self endon("disconnect");
kills = 0;
oldkills = 0;
wait 1;
while(1)
{
kills++;
self.weaponhud setText("Weapon: " + self.current + "/" + (level.gungameList.size - 1));
//self waittill("killed_enemy");
self waittill("update_weaponNumber");
//progress updateBar(self.current/level.weapon.size);
if(kills >= 10)
{
self.weaponhud destroy();
self createWeaponHud();
self thread Weaponnumber();
}
if(oldkills != self.kills)
{
oldkills = self.kills;
if(self.deaths != 0)
ratio = (self.kills/self.deaths);
else
ratio = self.kills;
self.ratiohud setValue(floatToString(ratio));
}
}
}
floatToString(float)
{
string = "" + float;
if(string.size > 5)
string = getSubStr(string, 0, 5);
return StringToFloat(string);
}
takeInvalidWeapon()
{
self endon("disconnect");
self endon("death");
level endon("nuke");
counter = 0;
wait 3;
while(1)
{
waitFrame();
if(!isAlive(self))
continue;
if(self isMantling())
continue;
weapon = self getCurrentWeapon();
if(!self hasWeapon(level.gungameList[self.current]))
{
counter++;
if(counter == 2)
{
counter = 0;
level.gungameList[self.current] = mod\weapons::setWeapon("peacekeeper_mp");
}
}
if(weapon != level.gungameList[self.current])
{
self takeAllWeapons();
self thread updateWeapon();
wait 2.5;
}
}
}
takeInvalidWeapon2()
{
self endon("disconnect");
level endon("nuke");
counter = 0;
wait 3;
while(1)
{
wait .25;
if(!isAlive(self))
continue;
weapon = self getCurrentWeapon();
if((weapon != level.gungameList[self.current] && weapon != "killstreak_uav_mp") || weapon == "none")
{
weaponArray = strTok(weapon, "_");
//if(weapon == ("gl_" + weaponArray[1] + "_mp"))
// continue;
//if(weapon == "none" && self isMantling())
// continue;
//self iPrintln("false");
//iPrintlnBold(weapon);
self takeAllWeapons();
//if(!self hasWeapon(level.gungameList[self.current]) || weapon == "none")
//{
counter++;
if(counter == 40) // debug
{
self.gungameKills++;
counter = 0;
self.current++;
self thread updateWeapon();
wait 1;
}
else
self updateWeapon();
wait .2;
//}
//if(level.gungameList[self.current] == "throwingknife_mp")
// self thread ThrowingKnife();
if(!self.speed)
{
speed = level.speed;
self setMoveSpeedScale(speed);
if(self.hardmode == 1)
{
speed = level.speed * 0.8;
self setMoveSpeedScale(speed);
}
self.moveSpeedScaler = speed;
}
}
else if(weapon == "usp_tactical_mp")
{
speed = level.speed * 1.2;
self setMoveSpeedScale(speed);
self setWeaponAmmoClip("usp_tactical_mp", 0);
self setWeaponAmmoStock("usp_tactical_mp", 0);
}
}
}
ThrowingKnife()
{
self endon("disconnect");
self notify("tk");
self endon("tk");
for(;;)
{
self waittill( "grenade_fire", lightstick, weapName );
if(weapName == "throwingknife_mp")
{
self giveWeapon("throwingknife_mp");
self giveMaxAmmo("throwingknife_mp");
}
}
}
giveGun(weapon, variant)
{
if (!isDefined(variant))
variant = randomInt(9);
if (isSubstr(weapon, "_akimbo"))
self giveWeapon(weapon, variant, true);
else
self giveWeapon(weapon, variant, false);
}
initCreateMarkerIcon()
{
rank = 1;
foreach(player in level.players)
{
if(isDefined(player.markerIcon))
rank++;
}
self.markerIcon = rank;
self.markerIconsEnemies = [];
self thread createWarnHUD();
if(self.isJugger)
self notify("isMarked");
foreach(player in level.players)
{
if(player != self)
{
self thread createMarkerIcon(player);
}
}
self waittill("disconnect");
foreach(icon in self.markerIconsEnemies)
{
if(isDefined(icon))
icon destroy();
}
}
createMarkerIcon(player)
{
self.markerIconsEnemies[self.markerIconsEnemies.size] = NewClientHudElem(player);
self.markerIconsEnemies[self.markerIconsEnemies.size-1] SetShader(level.markerIcon, 10, 10 );
self.markerIconsEnemies[self.markerIconsEnemies.size-1].width = 10;
self.markerIconsEnemies[self.markerIconsEnemies.size-1].height = 10;
self.markerIconsEnemies[self.markerIconsEnemies.size-1].color = getColor(self.markerIcon);
self.markerIconsEnemies[self.markerIconsEnemies.size-1].x = self.origin[ 0 ];
self.markerIconsEnemies[self.markerIconsEnemies.size-1].y = self.origin[ 1 ];
self.markerIconsEnemies[self.markerIconsEnemies.size-1].z = self.origin[ 2 ] + 55;
self.markerIconsEnemies[self.markerIconsEnemies.size-1] SetWayPoint( true, true );
self.markerIconsEnemies[self.markerIconsEnemies.size-1] SetTargetEnt(self);
}
getColor(rank)
{
if(rank == 1)
return (1, 215/255, 0); // gold
if(rank == 2)
return (155/255,0,0); // darkred
if(rank == 3)
return (0,0,155/255); // darkblue
return (191/255, 137/255, 112/255); // bronze
}
createWarnHUD()
{
/*
warnHUD = self createFontString("hudsmall", 1.2);
warnHUD setPoint("CENTER", "CENTER", 0, -10);
warnHUD.glowalpha = .5;
warnHUD.color = (155/255,0,0);
warnHUD.hideWhenInMenu = true;
warnHUD.glowcolor = (0,0,0);
warnHUD setText("Final Game: You are marked for all enemies now!");
wait 3;
warnHUD destroy();
*/
self thread maps\mp\gametypes\_hud_message::hintMessage("Final Game: You are marked for all enemies now!");
}
tryCreateMarkerIcons()
{
foreach(player in level.players)
{
if(isDefined(player.markerIcon))
{
player thread createMarkerIcon(self);
}
}
}
createRectangle(align, relative, x, y, width, height, color, shader, sort)
{
hud = newClientHudElem(self);
hud.sTexType = "bar";
hud.width = width;
hud.height = height;
hud.align = align;
hud.relative = relative;
hud.xOffset = 0;
hud.yOffset = 0;
hud.children = [];
hud.sort = sort;
hud.color = color;
hud setParent(level.uiParent);
hud setShader(shader,width,height);
hud.hidden = false;
hud.HideWhenInMenu = true;
hud setPoint(align,relative,x,y);
return hud;
}
upgradeTeamUI(team)
{
fontElem = newTeamHudElem( team );
fontElem.elemType = "font";
fontElem.font = "default";
fontElem.fontscale = 1.6;
fontElem.baseFontScale = 1.6;
fontElem.glowAlpha = 1;
fontElem.color = (1,1,0);
fontElem.glowColor = (1,0,0);
fontElem.x = 0;
fontElem.y = 0;
fontElem.width = 0;
fontElem.height = int(level.fontHeight * 1.6);
fontElem.xOffset = 0;
fontElem.yOffset = 0;
fontElem.children = [];
fontElem setParent( level.uiParent );
fontElem.hidden = false;
fontElem setText("Weaponupgrade for your team!");
fontElem setPoint("CENTER", "TOP", 0,200);
wait 3;
fontElem fadeOverTime(2);
fontElem.alpha = 0;
wait 2;
fontElem destroy();
}
upgradeEnemyWeaponUI(team)
{
foreach(player in level.players)
{
if(player.team == team)
{
player.weaponhud setText("Weapon: " + player.current + "/" + (level.gungameList.size) + "/^3" + level.teamKills[player getEnemyTeam() + "_weapon"]);
}
}
}
spawnDogTag(victim, attacker)
{
picked = false;
dogtag = spawn("script_model", victim.origin+(0,0,30));
//dogtag setModel("test_sphere_silver");
//playFxOnTag( level.spawnGlow["enemy"], self, "pelvis" );
//playFxOnTag( level.spawnGlow["friendly"], self, "j_head" );
fx = spawnFx(level.dogtag, dogtag.origin);
fx2 = spawnFx(level.dogtag2, dogtag.origin);
triggerFx(fx);
triggerFx(fx2);
while(!isDefined(level.startNuke) && !picked)
{
foreach(player in level.players)
{
if(Distance(player.origin, dogtag.origin) < 75 && isAlive(player))
{
if(player != victim)
player.gungameKills++;
dogtag delete();
fx delete();
fx2 delete();
picked = true;
}
}
wait .1;
}
if(isDefined(fx))
{
fx delete();
fx2 delete();
}
if(!picked)
dogtag delete();
}
FPSBoost()
{
self endon("disconnect");
self notifyonplayercommand("FPS", "+actionslot 2");
for(;;)
{
self waittill("FPS");
self setClientDvar("r_fullbright", 1);
self waittill("FPS");
self setClientDvar("r_fullbright", 0);
}
}
test()
{
self notifyOnPlayerCommand("F", "+activate");
self thread test2();
while(true)
{
self waittill("F");
//self thread tryNuke();
// setDvar("g_gametype", "gungame_team");
// map("mp_rust");
self suicide();
}
}
test2()
{
self notifyOnPlayerCommand("G", "+frag");
self thread test2();
while(true)
{
self waittill("G");
setDvar("g_gametype", "gungame");
setDvar("gunmode", "Kill Confirmed");
map("mp_rust");
}
}
watchVersion()
{
self endon("disconnect");
self notifyOnPlayerCommand("open", "+scores");
self notifyOnPlayerCommand("close", "-scores");
while(true)
{
self waittill("open");
self.versionText = createFontString("hudbig", .65, self);
self.versionText setPoint("CENTER", "BOTTOM", 0,-40);
self.versionText setText(getDvar("gunversion"));
self waittill("close");
self.versionText destroy();
}
}

714
gunfun/mod/streaks.gsc Executable file
View File

@@ -0,0 +1,714 @@
#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");
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_level_up";
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 maps\mp\perks\_perks::givePerk("specialty_lightweight");
self setMoveSpeedScale(1.6);
self.setMoveSpeedScale = 1.6;
//self thread spawnFireLoop();
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();
case "Radioactive":
self thread Radioactive();
break;
default:
self iPrintlnBold("^1ERROR: Unknown Streak!");
break;
}
}
Radioactive()
{
self endon("disconnect");
self endon("death");
level endon("nuke");
playFxOnTag( level.spawnGlow["enemy"], self, "pelvis" );
playFxOnTag( level.spawnGlow["friendly"], self, "j_head" );
//self SetPlayerIgnoreRadiusDamage( true );
while(1)
{
wait .1;
//self RadiusDamage(self.origin,120,50,40,self,"MOD_Explosive","nuke_mp");
//RadiusDamage(self.origin, 50, 30, 20, self );
foreach(player in level.players)
{
if(player == self)
continue;
if(getDvar("g_gametype") == "gungame_team")
{
if(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");
self.fx = [];
self.fx[0] = loadfx ("smoke/smoke_trail_white_heli");
self.fx[1] = loadfx( "misc/flares_cobra" );
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("veh_ac130_sonic_boom");
//self playsound("veh_mig29_sonic_boom");
self playsound("cobra_helicopter_dying_loop");
self setstance("crouch");
playfx(self.fx[0],self gettagorigin("j_spine4"));
playfx(self.fx[1],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)
{
level waittill("fuckemp");
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()
{
// cheat invert vision, marks near enemies
self endon("death");
self endon("disconnect");
self notifyOnPlayerCommand("3","+actionslot 3");
hud = self createText("Press [{+actionslot 3}] to use recon vision", 1.5, "CENTER", "BOTTOM", 0,-80,"default");
hud.glowcolor = (0,.7,0);
self thread destroyGhostHud(hud);
while(true)
{
self waittill("3");
self visionSetNakedForplayer("cheat_invert", 2);
hud.label = &"Countdown: ";
self.recon = true;
self thread scanPlayer();
for(i = 10;i > 0;i--)
{
hud setValue(i);
wait 1;
}
self visionSetNakedForplayer(getDvar("mapname"), 2);
self.recon = false;
hud fadeOverTime(1);
hud.alpha = 0;
wait 20;
hud.label = &"";
hud setText("Press [{+actionslot 3}] to use recon vision");
hud fadeOverTime(1);
hud.alpha = 1;
}
}
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;
self.maxhealth = 400;
self.health = self.maxhealth;
self setMoveSpeedScale(.7);
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()
{
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");
}
}

635
gunfun/mod/vote.gsc Executable file
View File

@@ -0,0 +1,635 @@
#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 = [];
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";
level.maps[level.maps.size] = "mp_rundown";
level.maps[level.maps.size] = "mp_brecourt";
level.maps[level.maps.size] = "mp_boneyard";
level.maps[level.maps.size] = "mp_quarry";
level.maps[level.maps.size] = "mp_nightshift";
level.maps[level.maps.size] = "mp_estate";
level.maps[level.maps.size] = "mp_invasion";
level.maps[level.maps.size] = "mp_checkpoint";
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";
level.maps[level.maps.size] = "mp_complex";
level.maps[level.maps.size] = "mp_crash";
level.maps[level.maps.size] = "mp_overgrown";
level.maps[level.maps.size] = "mp_compact";
level.maps[level.maps.size] = "mp_storm";
level.maps[level.maps.size] = "mp_abandon";
level.maps[level.maps.size] = "mp_fuel2";
level.maps[level.maps.size] = "mp_strike";
level.maps[level.maps.size] = "mp_trailerpark";
level.maps[level.maps.size] = "mp_vacant";
level.maps[level.maps.size] = "mp_nuked";
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 = [];
for(i = 0;i < level.maxOptions;i++)
{
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_maprotation", ("map " + level.options[number].map));
setDvar("g_hardcore", 0);
wait 0.5;
exitLevel(false);
level.currentNextMap = level.options[number].map;
level notify("endVote");
}
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++)
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.ratiohud))
player.ratiohud destroy();
if(isDefined(player.streakText))
player.streakText destroy();
foreach(icon in player.streakIcons)
{
if(isDefined(icon))
icon destroy();
}
player.line destroy();
}
}

579
gunfun/mod/weapons.gsc Executable file
View File

@@ -0,0 +1,579 @@
#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] = "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 = 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)
{
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.gungameList = [];
level.gungameList[0] = "defaultweapon_mp";
// PISTOLS (1-20)
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");
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");
}
addFungameWeapon(weapon)
{
level.gungameList[level.gungameList.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;
}

5
gunfun/scripts/load.gsc Executable file
View File

@@ -0,0 +1,5 @@
Init()
{
thread mod\main::Init();
}

BIN
gunfun/z_svr_bots.iwd Executable file

Binary file not shown.