mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 21:53:46 +03:00
145 lines
3.9 KiB
Lua
145 lines
3.9 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/
|
||
|
|
--]]
|
||
|
|
|
||
|
|
|
||
|
|
local PLUGIN = PLUGIN
|
||
|
|
|
||
|
|
game.AddParticles("particles/fire_01.pcf")
|
||
|
|
PrecacheParticleSystem("fire_jet_01_flame")
|
||
|
|
|
||
|
|
util.PrecacheSound("ambient/explosions/explode_8.wav")
|
||
|
|
|
||
|
|
function PLUGIN:PostPlayerLoadout(client)
|
||
|
|
if (client:Team() == FACTION_CREMATOR and client:GetCharacter()) then
|
||
|
|
client:SetWalkSpeed(50)
|
||
|
|
client:SetRunSpeed(70)
|
||
|
|
client:SetHealth(300)
|
||
|
|
client:SetMaxHealth(300)
|
||
|
|
|
||
|
|
client:StripWeapon("ix_keys")
|
||
|
|
|
||
|
|
client:Give("immolator")
|
||
|
|
client:SelectWeapon("immolator")
|
||
|
|
|
||
|
|
client:SetNetVar("fuelTankHealth", 1)
|
||
|
|
client:SetNetVar("fuelTankWasExploded", nil)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function PLUGIN:GetPlayerPainSound(client)
|
||
|
|
if (client:Team() == FACTION_CREMATOR) then
|
||
|
|
return "npc/cremator/alert_object.wav"
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function PLUGIN:GetPlayerDeathSound(client)
|
||
|
|
if (client:Team() == FACTION_CREMATOR) then
|
||
|
|
return "npc/cremator/crem_die.wav"
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
local walkSounds = {"npc/cremator/foot1.wav", "npc/cremator/foot2.wav", "npc/cremator/foot3.wav"}
|
||
|
|
|
||
|
|
function PLUGIN:PlayerFootstep(client, position, foot, soundName, volume)
|
||
|
|
if (client:Team() == FACTION_CREMATOR) then
|
||
|
|
client:EmitSound(walkSounds[math.random(1, #walkSounds)])
|
||
|
|
|
||
|
|
return true
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
local fuelTankBone = "Bip01 Spine2"
|
||
|
|
|
||
|
|
local radius = 200
|
||
|
|
local magnitude = 10
|
||
|
|
|
||
|
|
local fireTrailSeconds = 5
|
||
|
|
|
||
|
|
function PLUGIN:PlayerTraceAttack(client, damageInfo, vector, trace)
|
||
|
|
if (client:Team() == FACTION_CREMATOR) then
|
||
|
|
local fuelTankHealth = client:GetNetVar("fuelTankHealth", 0)
|
||
|
|
|
||
|
|
local bone = trace.HitBoxBone
|
||
|
|
|
||
|
|
if (client:GetBoneName(bone) == fuelTankBone) then
|
||
|
|
if (client:GetNetVar("fuelTankWasExploded")) then return end
|
||
|
|
|
||
|
|
if (fuelTankHealth > 0) then
|
||
|
|
client:SetNetVar("fuelTankHealth", fuelTankHealth - damageInfo:GetDamage())
|
||
|
|
|
||
|
|
return
|
||
|
|
end
|
||
|
|
|
||
|
|
local timerId = "ixCrematorTankExplodeTimer_" .. client:EntIndex()
|
||
|
|
|
||
|
|
if (timer.Exists(timerId)) then return end
|
||
|
|
|
||
|
|
local matrix = client:GetBoneMatrix(bone)
|
||
|
|
local position = matrix:GetTranslation()
|
||
|
|
local angles = matrix:GetAngles()
|
||
|
|
|
||
|
|
local fireTrail = ents.Create( "info_particle_system" )
|
||
|
|
fireTrail:SetKeyValue("effect_name", "fire_jet_01_flame")
|
||
|
|
fireTrail:SetKeyValue("start_active", "1")
|
||
|
|
fireTrail:SetPos(position)
|
||
|
|
fireTrail:SetAngles(angles)
|
||
|
|
fireTrail:SetParent(client)
|
||
|
|
fireTrail:Spawn()
|
||
|
|
fireTrail:Activate()
|
||
|
|
fireTrail:Fire("Kill", nil, fireTrailSeconds)
|
||
|
|
|
||
|
|
client:SetNetVar("fuelTankWasExploded", true)
|
||
|
|
|
||
|
|
timer.Create(timerId, fireTrailSeconds, 1, function()
|
||
|
|
if (!IsValid(client)) then return end
|
||
|
|
|
||
|
|
local playerPosition = client:GetPos()
|
||
|
|
|
||
|
|
local effect = EffectData()
|
||
|
|
effect:SetStart(playerPosition)
|
||
|
|
effect:SetOrigin(playerPosition)
|
||
|
|
effect:SetScale(2)
|
||
|
|
effect:SetRadius(radius)
|
||
|
|
effect:SetMagnitude(magnitude)
|
||
|
|
|
||
|
|
util.Effect("Explosion", effect, true, true)
|
||
|
|
util.Effect("HelicopterMegaBomb", effect, true, true)
|
||
|
|
|
||
|
|
local explode = ents.Create("info_particle_system")
|
||
|
|
explode:SetKeyValue("effect_name", "hl2r_explosion_rpg")
|
||
|
|
explode:SetOwner(client)
|
||
|
|
explode:SetPos(playerPosition)
|
||
|
|
explode:Spawn()
|
||
|
|
explode:Activate()
|
||
|
|
explode:Fire("start", "", 0)
|
||
|
|
explode:Fire("kill", "", 30)
|
||
|
|
|
||
|
|
local blastDamage = DamageInfo()
|
||
|
|
blastDamage:SetInflictor(client)
|
||
|
|
blastDamage:SetAttacker(client)
|
||
|
|
blastDamage:SetDamage(80)
|
||
|
|
blastDamage:SetDamageType(bit.bor(DMG_BLAST, DMG_AIRBOAT))
|
||
|
|
|
||
|
|
util.BlastDamageInfo(blastDamage, playerPosition, radius)
|
||
|
|
|
||
|
|
local explosion = ents.Create("env_physexplosion")
|
||
|
|
explosion:SetPos(playerPosition)
|
||
|
|
explosion:SetKeyValue("magnitude", magnitude)
|
||
|
|
explosion:SetKeyValue("radius", radius)
|
||
|
|
explosion:SetKeyValue("spawnflags", "19")
|
||
|
|
explosion:Spawn()
|
||
|
|
explosion:Fire("Explode", "", 0)
|
||
|
|
|
||
|
|
client:ForceSequence("Flich01")
|
||
|
|
end)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|