This repository has been archived on 2024-05-14. You can view files and clone it, but cannot push or open issues or pull requests.
awesome-xlabs/dedicated-server-configs/S1xServerConfigs/s1x/scripts/__init__.lua

364 lines
14 KiB
Lua
Raw Normal View History

2023-08-13 18:31:19 -04:00
--[[
Mod: Custom GunGame
Version: V1.0.0
Client: s1x - COD Advanced Warfare
Author: DoktorSAS
Special Thanks to quaK
Socials:
Twitter : https://twitter.com/DoktorSAS
Discord : https://discord.gg/8HNGUTVvmd
Youtube : https://www.youtube.com/channel/UCfMGaICm89h7g-54iBTFA4w
Github : https://github.com/DoktorSAS
]]--
--[[ Gametype Config ]]--
local Config = {}
--[[
1 -> Enable
0 -> Disable
]]--
Config.HighJump = 1
Config.HighJumpDrop = 1
Config.Dodge = 1
Config.PowerSlide = 1
Config.BoostJump = 1
Config.KillstreaksPerks = 1
Config.HumiliatonsForKill = 1
--[[
dm -> Free For All
war -> Team Deathmatch
]]--
Config.Gametype = "war"
--[[ GunGame ]]--
include("utilities")
if game:getdvar("g_gametype") ~= Config.Gametype then
game:setdvar("g_gametype", Config.Gametype)
game:executecommand("map_restart")
end
game:setdvar("sct_game_high_jump", Config.HighJump)
if Config.Gametype == "dm" then
game:setdvar("scr_dm_score_kill", 1)
game:setdvar("scr_dm_score_assist", 0)
elseif Config.Gametype == "war" then
game:setdvar("scr_war_score_kill", 1)
game:setdvar("scr_war_score_assist", 0)
end
game:setdvar("g_maxDroppedWeapons", 2)
require("bots")
local colors = { red = "^1",
green = "^2",
yellow = "^3",
blue = "^4",
cyan = "^5",
pink = "^6",
white = "^7",
team_color = "^8",
grey = "^9",
black = "^0",
rainbow = "^:"
}
local teams = { spectator = "spectator",
axis = "axis",
allies = "allies"
}
local sessionstates = { spectator = "spectator",
dead = "dead",
playing = "playing"
}
local social = { author = "DoktorSAS",
twitter = "DoktorSAS",
instagram = "DoktorSAS",
website = "https://github.com/DoktorSAS",
discord = "https://discord.gg/8HNGUTVvmd"
}
print("=====================================================")
print("\t GunGame Developed by " .. social.author)
print("\t Special thanks to quaK")
print("=====================================================")
local players = {}
for i = 0, 18, 1 do
players[i] = {isBot = false, suicide = false, gun = 1, humiliator = "", lastgun = "", streak = 0, isConnected = false};
end
local guns = {
"iw5_pbw_mp", -- Pistol
"iw5_rw1_mp",
"iw5_titan45_mp",
"iw5_uts19_mp", -- Shotgun
"iw5_maul_mp",
"iw5_rhino_mp",
"iw5_kf5_mp", -- SMG
"iw5_sac3_mp_akimbosac3",
"iw5_asm1_mp",
"iw5_hmr9_mp",
"iw5_sn6_mp",
"iw5_mp11_mp",
"iw5_himar_mp",
"iw5_hbra3_mp", -- Rifle
"iw5_bal27_mp",
"iw5_ak12_mp",
"iw5_epm3_mp",
"iw5_arx160_mp",
"iw5_m182spr_mp",
"iw5_asaw_mp", -- MG
"iw5_exoxmg_mp",
"iw5_lsat_mp",
"iw5_mahem_mp", -- Launcher
"iw5_maaws_mp",
"iw5_mors_mp", -- Snipers
"iw5_thor_mp",
"iw5_m990_mp",
"iw5_gm6_mp",
"iw5_em1_mp", -- Beam
"iw5_exocrossbow_mp", -- Crossbow
"iw5_combatknife_mp" -- Knife
}
if Config.Gametype == "war" then
game:setdvar("scr_war_scorelimit", 0)
elseif Config.Gametype == "dm" then
game:setdvar("scr_dm_scorelimit", size(guns))
end
function entity:onPlayerSpawned( )
entity_number = self:getentitynumber()
if players[entity_number].sucide then
self:iclientprintlnbold("You got ".. colors.red .. "Humiliated")
players[entity_number].sucide = false
if players[entity_number].gun > 1 then
players[entity_number].gun = players[entity_number].gun - 1
end
self:setPoints( (indexof(guns, guns[players[entity_number].gun])-1+Config.HumiliatonsForKill) )
self:playlocalsound("mp_prestige_purchase")
elseif players[entity_number].humiliator ~= "" then
self:iclientprintlnbold("You got ".. colors.red .. "Humiliated")
self:iclientprintln(players[entity_number].humiliator .." humiliate " .. colors.white .. "you")
players[entity_number].humiliator = ""
if players[entity_number].gun > 1 then
players[entity_number].gun = players[entity_number].gun - 1
end
self:setPoints( (indexof(guns, guns[players[entity_number].gun])-1+Config.HumiliatonsForKill) )
self:playlocalsound("mp_prestige_purchase")
end
self:takeallweapons()
if players[entity_number].gun <= 0 then
players[entity_number].gun = 1
end
self:giveweapon(guns[players[entity_number].gun])
self:switchtoweapon(guns[players[entity_number].gun])
self:setspawnweapon(guns[players[entity_number].gun])
game:ontimeout(function()
self:clearperks()
end, 50)
end
function entity:onWeaponChange( )
entity_number = self:getentitynumber()
if self:getcurrentweapon() ~= "none" and self:getcurrentweapon() ~= nil and self:getcurrentweapon() ~= guns[players[entity_number].gun] then
self:takeweapon( self:getcurrentweapon() )
if players[entity_number].gun <= 0 then
players[entity_number].gun = 1
end
if self.score > 0 and self:hasweapon( guns[players[entity_number].gun] ) == 1 then
self:switchtoweapon(guns[players[entity_number].gun])
else
self:giveweapon(guns[players[entity_number].gun])
self:switchtoweapon(guns[players[entity_number].gun])
end
else
self:switchtoweapon(guns[players[entity_number].gun])
end
end
function forceend()
if game:getdvar("g_gametype") == "war" then
game:setdvar("scr_war_timelimit", 0.1)
game:executecommand("set scr_war_timelimit 0.01")
end
end
function entity:onWeaponReload( )
if( players[entity_number].humiliator ~= "") then
players[entity_number].humiliator = ""
end
self:givestartammo( self:getcurrentweapon() )
end
local bots_spawned = 8
local players_in_game = 0
local onPlayerConnected = function ( player )
local onMovements = game:oninterval(function ()
player:allowdodge(Config.Dodge)
player:allowpowerslide(Config.PowerSlide)
player:allowboostjump(Config.BoostJump)
player:allowhighjump(Config.HighJump)
player:allowhighjumpdrop(Config.HighJumpDrop)
end, 50)
if string.find(player:getguid(), "bot") then
players[player:getentitynumber()].isBot = true
else
players[player:getentitynumber()].isBot = false
end
local pID = player:getentitynumber();
players_in_game = players_in_game + 1
players[player:getentitynumber()].gun = 1
players[player:getentitynumber()].isConnected = true
local onPlayerSpawned = player:onnotify("spawned_player", function()
player:iclientprintln("Mod developed by @"..colors.cyan.. social.twitter);
player:iclientprintln( colors.red .. "kill".. colors.white .." players to progress with weapons");
player:iclientprintln("Welcome to".. colors.cyan .." GunGame " .. colors.white .. "Server");
player:onPlayerSpawned( )
end)
local onWeaponChange = player:onnotify("weapon_change", function()
player:onWeaponChange()
end)
local onPlayerReload = player:onnotify("reload", function( )
player:onWeaponReload()
end)
local onWeaponFired = player:onnotify("weapon_fired", function ( weapon )
if weapon == "iw5_maaws_mp" or weapon == "throwingknife_mp" then
player:givemaxammo( player:getcurrentweapon() )
end
end)
local onGivingLoadout = player:onnotify("givingLoadout", function ( )
player:onPlayerSpawned()
end)
player:onnotifyonce("disconnect", function ()
onPlayerSpawned:clear()
onWeaponChange:clear()
onPlayerReload:clear()
onWeaponFired:clear()
onGivingLoadout:clear()
onMovements:clear()
players[pID] = {isBot = false, suicide = false, gun = 1, humiliator = "", lastgun = "", streak = 0, isConnected = false};
players_in_game = players_in_game - 1
end);
end
function show_message(player, msg)
local elem = game:newclienthudelem(player)
elem.elemType = "font"
elem.font = "default"
elem.fontscale = 2
elem.x = 0
elem.y = -100
elem.alignx = "center"
elem.aligny = "middle"
elem.horzalign = "center"
elem.vertalign = "middle"
elem.color = vector:new(1.0, 1.0, 1.0)
elem.alpha = 1
elem:settext( msg )
elem:setpulsefx(40, 6000, 600)
game:ontimeout(function()
elem:destroy()
end, 8000)
end
function team_win( team )
local players = game:getentarray("player", "classname")
for i = 1, #players do
if players[i].team == team then
show_message(players[i], "Your team ^2Win ^7the Game")
else
show_message(players[i], "Your team ^1Lost ^7the Game")
end
end
end
level:onnotifyonce("connected", function ()
game:onplayerdamage(function(_self, _inflictor, _attacker, damage, dflags, _mod, _weapon, _vPoint, _vDir, _hitLoc)
return damage
end)
game:onplayerkilled(function(_self, _inflictor, _attacker, damage, _mod, _weapon, _vPoint, _vDir, _hitLoc)
if _attacker.name ~= nil and _attacker:getentitynumber() < 18 then
entity_number = _attacker:getentitynumber()
if players[entity_number].humiliator ~= "" then
players[entity_number].humiliator = ""
end
game_ended = false
if _mod == "MOD_MELEE_ALT" then
players[_self:getentitynumber()].humiliator = _attacker.name
_attacker:setPoints( (_attacker.score-1) )
elseif _self:getguid() == _attacker:getguid() then
players[entity_number].humiliator = ""
_self:setPoints( (_self.score-1+Config.HumiliatonsForKill) )
elseif players[entity_number].gun > 0 and _weapon == guns[players[entity_number].gun] and (players[entity_number].lastgun == "" or players[entity_number].lastgun ~= guns[players[entity_number].gun]) then
if Config.Gametype == "war" then
if players[entity_number].gun >= size(guns) then
forceend()
team_win( _attacker.team )
game_ended = true
end
end
if game_ended == false then
players[entity_number].lastgun = _weapon
_attacker:takeweapon(guns[players[entity_number].gun])
players[entity_number].lastgun = guns[players[entity_number].gun-1]
players[entity_number].gun = players[entity_number].gun + 1
_attacker:giveweapon(guns[players[entity_number].gun]);
_attacker:switchtoweapon(guns[players[entity_number].gun])
_attacker:playlocalsound("mp_level_up")
players[entity_number].streak = players[entity_number].streak + 1
if Config.KillstreaksPerks then
if players[entity_number].streak == 3 then
_attacker:iclientprintlnbold("Quick Reload ^6Unlocked")
_attacker:setperk("specialty_quickdraw", 1, 1)
elseif players[entity_number].streak == 5 then
_attacker:iclientprintlnbold("Sprint Reload ^6Unlocked")
_attacker:setperk("specialty_sprintreload", 1, 1)
elseif players[entity_number].streak == 8 then
_attacker:iclientprintlnbold("Longer Sprint ^6Unlocked")
_attacker:setperk("specialty_longersprint", 1, 1)
elseif players[entity_number].streak == 11 then
_attacker:iclientprintlnbold("Faster Melee ^6Unlocked")
_attacker:setperk("specialty_fastermelee", 1, 1)
elseif players[entity_number].streak == 14 then
_attacker:iclientprintlnbold("Faster Sprint Recovery ^6Unlocked")
_attacker:setperk("specialty_fastsprintrecovery", 1, 1)
elseif players[entity_number].streak == 17 then
_attacker:iclientprintlnbold("Steady Aim ^6Unlocked")
_attacker:setperk("specialty_steadyaimpro", 1, 1)
end
end
end
elseif players[entity_number].lastgun == "" then
players[entity_number].lastgun = _weapon
end
players[_self:getentitynumber()].streak = 0;
_attacker:setPoints( (indexof(guns, guns[players[entity_number].gun])-2) )
_attacker:setnormalhealth(_attacker.maxhealth )
end
if _weapon ~= nil and _weapon ~= "" and _mod == "MOD_TRIGGER_HURT" or _mod == "MOD_SUICIDE" or _mod == "MOD_PROJECTILE_SPLASH" or _mod == "MOD_TRIGGER_HURT" then
players[_self:getentitynumber()].humiliator = _self.name
elseif _mod == "MOD_TRIGGER_HURT" or _mod == "MOD_SUICIDE" or _mod == "MOD_PROJECTILE_SPLASH" or _mod == "MOD_TRIGGER_HURT" then
players[_self:getentitynumber()].sucide = true
_self:setPoints( (_self.score-1+Config.HumiliatonsForKill) )
end
end)
end);
level:onnotify("connected", onPlayerConnected)