Files
wnsrc/lua/autorun/server/suits_ai.lua
lifestorm 6a58f406b1 Upload
2024-08-04 23:54:45 +03:00

418 lines
13 KiB
Lua

--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]
hook.Add("SetupMove", "CombineSuitsPlayerModelDetection", function()
for k, v in pairs(player.GetAll()) do
if v then
if GetConVarNumber("suits_detect_models") == 1 then
model = v:GetModel()
if model=="models/player/breen.mdl" || model == "models/player/soldier_stripped.mdl" || model == "models/taggart/gallahan.mdl" || model == "models/player/female_02_suit.mdl"|| model == "models/humans/suitfem/female_02.mdl" then
v.HasValidModel = true
else
v.HasValidModel = false
end
else
v.HasValidModel = nil
end
end
end
end)
local function CombineSuitsOS()
for k, v in pairs(player.GetAll()) do
if v then
if v.CombineSuitUser == true or v.HasValidModel == true then -- SUIT TRUE
v.onlyonce = false
local NPCStrue = ents.FindByClass("npc_*")
local Match = math.random(1,2)
for _, NPCt in pairs( NPCStrue ) do
if NPCt then
local TARGIT = ents.FindByClass("npc_*")
for _, TAR in pairs( TARGIT ) do
if NPCt:GetClass() == "npc_alyx" then
if Match == 1 then
if NPCt:Disposition(TAR) == 1 then
NPCt:AddEntityRelationship( TAR, D_HT, 99 )
end
elseif Match == 2 then
NPCt:AddEntityRelationship( v, D_HT, 99 )
end
end
if NPCt:GetClass() == "npc_barney" then
if Match == 1 then
if NPCt:Disposition(TAR) == 1 then
NPCt:AddEntityRelationship( TAR, D_HT, 99 )
end
elseif Match == 2 then
NPCt:AddEntityRelationship( v, D_HT, 99 )
end
end
if NPCt:GetClass() == "npc_citizen" then
if Match == 1 then
if NPCt:Disposition(TAR) == 1 then
NPCt:AddEntityRelationship( TAR, D_HT, 99 )
end
elseif Match == 2 then
NPCt:AddEntityRelationship( v, D_HT, 99 )
end
end
if NPCt:GetClass() == "npc_dog" then
if Match == 1 then
if NPCt:Disposition(TAR) == 1 then
NPCt:AddEntityRelationship( TAR, D_HT, 99 )
end
elseif Match == 2 then
NPCt:AddEntityRelationship( v, D_HT, 99 )
end
end
if NPCt:GetClass() == "npc_eli" then
if Match == 1 then
if NPCt:Disposition(TAR) == 1 then
NPCt:AddEntityRelationship( TAR, D_HT, 99 )
end
elseif Match == 2 then
NPCt:AddEntityRelationship( v, D_HT, 99 )
end
end
if NPCt:GetClass() == "npc_kleiner" then
if Match == 1 then
if NPCt:Disposition(TAR) == 1 then
NPCt:AddEntityRelationship( TAR, D_HT, 99 )
end
elseif Match == 2 then
NPCt:AddEntityRelationship( v, D_HT, 99 )
end
end
if NPCt:GetClass() == "npc_magnusson" then
if Match == 1 then
if NPCt:Disposition(TAR) == 1 then
NPCt:AddEntityRelationship( TAR, D_HT, 99 )
end
elseif Match == 2 then
NPCt:AddEntityRelationship( v, D_HT, 99 )
end
end
if NPCt:GetClass() == "npc_mossman" then
if Match == 1 then
if NPCt:Disposition(TAR) == 1 then
NPCt:AddEntityRelationship( TAR, D_HT, 99 )
end
elseif Match == 2 then
NPCt:AddEntityRelationship( v, D_HT, 99 )
end
end
if NPCt:GetClass() == "npc_vortigaunt" then
if Match == 1 then
if NPCt:Disposition(TAR) == 1 then
NPCt:AddEntityRelationship( TAR, D_HT, 99 )
end
elseif Match == 2 then
NPCt:AddEntityRelationship( v, D_HT, 99 )
end
end
if NPCt:GetClass() == "npc_monk" then
if Match == 1 then
if NPCt:Disposition(TAR) == 1 then
NPCt:AddEntityRelationship( TAR, D_HT, 99 )
end
elseif Match == 2 then
NPCt:AddEntityRelationship( v, D_HT, 99 )
end
end
end
if NPCt:GetClass() == "npc_combine_s" then
NPCt:AddEntityRelationship( v, D_LI, 99 )
end
if NPCt:GetClass() == "npc_combinedropship" then
NPCt:AddEntityRelationship( v, D_LI, 99 )
end
if NPCt:GetClass() == "npc_combinegunship" then
NPCt:AddEntityRelationship( v, D_LI, 99 )
end
if NPCt:GetClass() == "npc_cscanner" then
NPCt:AddEntityRelationship( v, D_LI, 99 )
end
if NPCt:GetClass() == "npc_helicopter" then
NPCt:AddEntityRelationship( v, D_LI, 99 )
end
if NPCt:GetClass() == "npc_hunter" then
NPCt:AddEntityRelationship( v, D_LI, 99 )
end
if NPCt:GetClass() == "npc_manhack" then
NPCt:AddEntityRelationship( v, D_LI, 99 )
end
if NPCt:GetClass() == "npc_metropolice" then
NPCt:AddEntityRelationship( v, D_LI, 99 )
end
if NPCt:GetClass() == "npc_sniper" then
NPCt:AddEntityRelationship( v, D_LI, 99 )
end
if NPCt:GetClass() == "npc_stalker" then
NPCt:AddEntityRelationship( v, D_LI, 99 )
end
if NPCt:GetClass() == "npc_strider" then
NPCt:AddEntityRelationship( v, D_LI, 99 )
end
if NPCt:GetClass() == "npc_turret_ceiling" then
NPCt:AddEntityRelationship( v, D_LI, 99 )
end
if NPCt:GetClass() == "npc_turret_floor" then
NPCt:AddEntityRelationship( v, D_LI, 99 )
end
if NPCt:GetClass() == "npc_turret_ground" then
NPCt:AddEntityRelationship( v, D_LI, 99 )
end
if NPCt:GetClass() == "npc_combine_camera" then
NPCt:AddEntityRelationship( v, D_LI, 99 )
end
if NPCt:GetClass() == "npc_rollermine" then
NPCt:AddEntityRelationship( v, D_LI, 99 )
end
if NPCt:GetClass() == "npc_clawscanner" then
NPCt:AddEntityRelationship( v, D_LI, 99 )
end
if NPCt:GetClass() == "npc_apcdriver" then
NPCt:AddEntityRelationship( v, D_LI, 99 )
end
if NPCt:GetClass() == "npc_turret_ground" then
NPCt:AddEntityRelationship( v, D_LI, 99 )
end
if NPCt:GetName() == "goodcitizen" then
NPCt:AddEntityRelationship( v, D_LI, 99 )
end
if NPCt:GetName() == "policeofficer" then
NPCt:AddEntityRelationship( v, D_LI, 99 )
end
if NPCt:GetName() == "rebel" then
NPCt:AddEntityRelationship( v, D_HT, 99 )
end
end
end
end -- SUIT TRUE
if (v.CombineSuitUser == false or v.CombineSuitUser == nil) and v.onlyonce == false and (v.HasValidModel == false or v.HasValidModel == nil) then -- SUIT FALSE
if v.onlyonce == false then
v.onlyonce = true
end
local NPCSfalse = ents.FindByClass("npc_*")
for _, NPCf in pairs( NPCSfalse ) do
if NPCf then
if NPCf:GetClass() == "npc_alyx" then
NPCf:AddEntityRelationship( v, D_LI, 99 )
end
if NPCf:GetClass() == "npc_barney" then
NPCf:AddEntityRelationship( v, D_LI, 99 )
end
if NPCf:GetClass() == "npc_citizen" then
NPCf:AddEntityRelationship( v, D_LI, 99 )
end
if NPCf:GetClass() == "npc_dog" then
NPCf:AddEntityRelationship( v, D_LI, 99 )
end
if NPCf:GetClass() == "npc_eli" then
NPCf:AddEntityRelationship( v, D_LI, 99 )
end
if NPCf:GetClass() == "npc_kleiner" then
NPCf:AddEntityRelationship( v, D_LI, 99 )
end
if NPCf:GetClass() == "npc_magnusson" then
NPCf:AddEntityRelationship( v, D_LI, 99 )
end
if NPCf:GetClass() == "npc_mossman" then
NPCf:AddEntityRelationship( v, D_LI, 99 )
end
if NPCf:GetClass() == "npc_vortigaunt" then
NPCf:AddEntityRelationship( v, D_LI, 99 )
end
if NPCf:GetClass() == "npc_monk" then
NPCf:AddEntityRelationship( v, D_LI, 99 )
end
if NPCf:GetClass() == "npc_combine_s" then
NPCf:AddEntityRelationship( v, D_HT, 99 )
end
if NPCf:GetClass() == "npc_combinedropship" then
NPCf:AddEntityRelationship( v, D_HT, 99 )
end
if NPCf:GetClass() == "npc_combinegunship" then
NPCf:AddEntityRelationship( v, D_HT, 99 )
end
if NPCf:GetClass() == "npc_cscanner" then
NPCf:AddEntityRelationship( v, D_HT, 99 )
end
if NPCf:GetClass() == "npc_helicopter" then
NPCf:AddEntityRelationship( v, D_HT, 99 )
end
if NPCf:GetClass() == "npc_hunter" then
NPCf:AddEntityRelationship( v, D_HT, 99 )
end
if NPCf:GetClass() == "npc_manhack" then
NPCf:AddEntityRelationship( v, D_HT, 99 )
end
if NPCf:GetClass() == "npc_metropolice" then
NPCf:AddEntityRelationship( v, D_HT, 99 )
end
if NPCf:GetClass() == "npc_sniper" then
NPCf:AddEntityRelationship( v, D_HT, 99 )
end
if NPCf:GetClass() == "npc_stalker" then
NPCf:AddEntityRelationship( v, D_HT, 99 )
end
if NPCf:GetClass() == "npc_strider" then
NPCf:AddEntityRelationship( v, D_HT, 99 )
end
if NPCf:GetClass() == "npc_turret_ceiling" then
NPCf:AddEntityRelationship( v, D_HT, 99 )
end
if NPCf:GetClass() == "npc_turret_floor" then
NPCf:AddEntityRelationship( v, D_HT, 99 )
end
if NPCf:GetClass() == "npc_turret_ground" then
NPCf:AddEntityRelationship( v, D_HT, 99 )
end
if NPCf:GetClass() == "npc_combine_camera" then
NPCf:AddEntityRelationship( v, D_HT, 99 )
end
if NPCf:GetClass() == "npc_rollermine" then
NPCf:AddEntityRelationship( v, D_HT, 99 )
end
if NPCf:GetClass() == "npc_clawscanner" then
NPCf:AddEntityRelationship( v, D_HT, 99 )
end
if NPCf:GetClass() == "npc_turret_ground" then
NPCt:AddEntityRelationship( v, D_HT, 99 )
end
if NPCf:GetName() == "goodcitizen" then
NPCf:AddEntityRelationship( v, D_NU, 99 )
end
if NPCf:GetName() == "policeofficer" then
NPCf:AddEntityRelationship( v, D_NU, 99 )
end
if NPCf:GetName() == "rebel" then
NPCf:AddEntityRelationship( v, D_NU, 99 )
end
end
end
end
end
end
end
hook.Add("PlayerButtonDown", "CSdete1", CombineSuitsOS)
hook.Add("PlayerButtonUp", "CSdete2", CombineSuitsOS)
hook.Add("PlayerFootstep", "CSdete3", CombineSuitsOS)
hook.Add("PlayerSpawn", "CSdete4", CombineSuitsOS)
hook.Add("PlayerNoClip", "CSdete5", CombineSuitsOS)
hook.Add("OnViewModelChanged", "CSdete6", CombineSuitsOS)
hook.Add( "PlayerSay", "SoldierMessage", function( ply, text, team )
for _,v in pairs (player.GetAll()) do
if v:IsPlayer() and v.CombineSuitUser == true then
if ( string.sub( text, 1, 3 ) == "/SM" ) then
v:EmitSound( "PlayerInSuitSoldier.RadioOn" )
if v.CombineSuitUser == true then
v:PrintMessage( HUD_PRINTTALK, ply:GetName() .. ": " .. string.sub( text, 4 ) )
v:EmitSound( "PlayerInSuitSoldier.RadioOff" )
return ""
end
end
end
end
end )
--FootSteps-- :D
local function Steppy(ply,pos,foot,snd,vol,filter)
if GetConVarNumber("suits_foot_steps") == 1 then
if(ply.CombineSuitUser == true and (ply.CombineSuitUsercop == nil or ply.CombineSuitUsercop == false))then
ply:EmitSound( "PlayerInSuitSoldier.WalkSold" )
elseif(ply.CombineSuitUser == true and ply.CombineSuitUsercop == true)then
ply:EmitSound( "PlayerInSuitSoldier.WalkMetr" )
end
end
end
hook.Add("PlayerFootstep","CombineSuitsFoot", Steppy)
--Juger--
hook.Add("EntityTakeDamage", "CombineSuitsJuger", function(target, dmginfo)
local attacker = dmginfo:GetAttacker()
if ( target:IsPlayer() and target.CombineSuitUserheavy == true ) then
dmginfo:ScaleDamage( 0.50 )
end
if (( target:IsPlayer() and target.CombineSuitUser == true or target.HasValidModel == true ) and ( attacker:IsPlayer() and attacker.CombineSuitUser == true or attacker.HasValidModel == true ) ) and GetConVarNumber("suits_no_friendly_fire") == 1 then
dmginfo:ScaleDamage( 0 )
end
if (( target:IsPlayer() and target.CombineSuitUser == true and target.Assassin == true ) and dmginfo:IsDamageType(DMG_FALL) ) then
dmginfo:ScaleDamage( 0 )
end
if ( target:IsNPC() and target.SuitAI == true ) then
dmginfo:ScaleDamage( 0 )
end
if (( target:IsPlayer() and target.CombineSuitUser == true or target.HasValidModel == true ) and (attacker:GetClass()=="cup_fuel_tank" or attacker:GetClass()=="npc_stalker" or attacker:GetClass()=="npc_combine_s" or attacker:GetClass()=="npc_metropolice" or attacker:GetClass()=="npc_cscanner" or attacker:GetClass()=="npc_manhack" or attacker:GetClass()=="npc_strider" or attacker:GetClass()=="npc_hunter" or attacker:GetClass()=="npc_rollermine" or attacker:GetClass()=="npc_clawscanner" or attacker:GetClass()=="npc_turret_floor" or attacker:GetClass()=="npc_turret_ceiling" or attacker:GetClass()=="npc_combine_camera" or attacker:GetClass()=="npc_combinedropship" or attacker:GetClass()=="npc_combinegunship" or attacker:GetClass()=="npc_helicopter" or attacker:GetClass()=="npc_turret_ground" or attacker:GetClass()=="npc_apcdriver") ) and GetConVarNumber("suits_no_friendly_fire") == 1 then
dmginfo:ScaleDamage( 0 )
end
if (( target:IsPlayer() and target.CombineSuitUser == true and target.Sterilizer == true ) and dmginfo:IsDamageType(DMG_BURN) ) then
dmginfo:ScaleDamage( 0.50 )
end
if (( target:GetClass()=="cup_fuel_tank" or target:GetClass()=="npc_stalker" or target:GetClass()=="npc_combine_s" or target:GetClass()=="npc_metropolice" or target:GetClass()=="npc_cscanner" or target:GetClass()=="npc_manhack" or target:GetClass()=="npc_strider" or target:GetClass()=="npc_hunter" or target:GetClass()=="npc_rollermine" or target:GetClass()=="npc_clawscanner" or target:GetClass()=="npc_turret_floor" or target:GetClass()=="npc_turret_ceiling" or target:GetClass()=="npc_combine_camera" or target:GetClass()=="npc_combinedropship" or target:GetClass()=="npc_combinegunship" or target:GetClass()=="npc_helicopter" or target:GetClass()=="npc_turret_ground" or target:GetClass()=="npc_apcdriver" ) and ( attacker:IsPlayer() and attacker.CombineSuitUser == true or attacker.HasValidModel == true ) ) and GetConVarNumber("suits_no_friendly_fire") == 1 then
dmginfo:ScaleDamage( 0 )
end
if (( target:IsPlayer() and target.CombineSuitUser == true ) and target.CombineSuitUsercop == nil or target.CombineSuitUsercop == false) then
target:ViewPunch(Angle( math.random(-4,4), math.random(-4,4), math.random(-4,4) ))
target:EmitSound("PlayerInSuitSoldier.PainSold")
end
if (( target:IsPlayer() and target.CombineSuitUser == true ) and target.CombineSuitUsercop == true) then
target:ViewPunch(Angle( math.random(-4,4), math.random(-4,4), math.random(-4,4) ))
target:EmitSound("PlayerInSuitSoldier.PainMetr")
end
end)
--Commander--
hook.Add("EntityTakeDamage", "CombineSuitsEliteBonus", function(ent, dmginfo)
local attacker = dmginfo:GetAttacker()
if attacker.Elite == true then
dmginfo:ScaleDamage(2.5)
end
end)
--Script Loop