mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-16 21:33:46 +03:00
99 lines
5.0 KiB
Lua
99 lines
5.0 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/
|
|
--]]
|
|
|
|
ENT.IsDodging = false
|
|
ENT.NextDodgeTime = 0
|
|
|
|
function ENT:DoDodge(dist, chance, dodgeleft, dodgeright, dodgeback, dodgeforward)
|
|
if !self.Dead && !self.MeleeAttacking && !self.ComboAttacking then
|
|
if self.VJ_IsBeingControlled then
|
|
self:StopAttacks(true)
|
|
if self.VJ_TheController:KeyDown(IN_MOVELEFT) && self.VJ_TheController:KeyDown(IN_JUMP) && CurTime() > self.NextDodgeTime then
|
|
self.IsDodging = true
|
|
self:VJ_ACT_PLAYACTIVITY(dodgeleft,true,false,true) -- Left dodge anim
|
|
self.NextDodgeTime = CurTime() + VJ_GetSequenceDuration(self,self:GetSequenceName(self:GetSequence()))+0.2
|
|
timer.Simple(VJ_GetSequenceDuration(self,self:GetSequenceName(self:GetSequence())), function() self.IsDodging = false end)
|
|
|
|
elseif self.VJ_TheController:KeyDown(IN_MOVERIGHT) && self.VJ_TheController:KeyDown(IN_JUMP) && CurTime() > self.NextDodgeTime then
|
|
self.IsDodging = true
|
|
self:VJ_ACT_PLAYACTIVITY(dodgeright,true,false,true) -- Left dodge anim
|
|
self.NextDodgeTime = CurTime() + VJ_GetSequenceDuration(self,self:GetSequenceName(self:GetSequence()))+0.2
|
|
timer.Simple(VJ_GetSequenceDuration(self,self:GetSequenceName(self:GetSequence())), function() self.IsDodging = false end)
|
|
|
|
elseif self.VJ_TheController:KeyDown(IN_BACK) && self.VJ_TheController:KeyDown(IN_JUMP) && CurTime() > self.NextDodgeTime then
|
|
self.IsDodging = true
|
|
self:VJ_ACT_PLAYACTIVITY(dodgeback,true,false,true) -- Left dodge anim
|
|
self.NextDodgeTime = CurTime() + VJ_GetSequenceDuration(self,self:GetSequenceName(self:GetSequence()))+0.2
|
|
timer.Simple(VJ_GetSequenceDuration(self,self:GetSequenceName(self:GetSequence())), function() self.IsDodging = false end)
|
|
|
|
elseif self.VJ_TheController:KeyDown(IN_FORWARD) && self.VJ_TheController:KeyDown(IN_JUMP) && CurTime() > self.NextDodgeTime then
|
|
self.IsDodging = true
|
|
self:VJ_ACT_PLAYACTIVITY(dodgeforward,true,false,true) -- Left dodge anim
|
|
self.NextDodgeTime = CurTime() + VJ_GetSequenceDuration(self,self:GetSequenceName(self:GetSequence()))+0.2
|
|
timer.Simple(VJ_GetSequenceDuration(self,self:GetSequenceName(self:GetSequence())), function() self.IsDodging = false end)
|
|
end
|
|
end
|
|
|
|
if self:GetEnemy() != nil && !self.VJ_IsBeingControlled && CurTime() > self.NextDodgeTime then
|
|
local EnemyDistance = self:VJ_GetNearestPointToEntityDistance(self:GetEnemy(),self:GetPos():Distance(self:GetEnemy():GetPos()))
|
|
if EnemyDistance <= dist && math.random(1,chance) == 1 && (self:CanDodge("normal") or self:CanDodge("player")) then -- Random movement
|
|
self:StopAttacks(true)
|
|
self.IsDodging = true
|
|
local dodge_close = math.random(1, 3)
|
|
if dodge_close == 1 then
|
|
self:VJ_ACT_PLAYACTIVITY(dodgeleft,true,false,true) -- Left dodge anim
|
|
|
|
elseif dodge_close == 2 then
|
|
self:VJ_ACT_PLAYACTIVITY(dodgeright,true,false,true) -- Right dodge anim
|
|
|
|
elseif dodge_close == 3 then
|
|
self:VJ_ACT_PLAYACTIVITY(dodgeback,true,false,true) -- Right dodge anim
|
|
|
|
end
|
|
self.NextDodgeTime = CurTime() + VJ_GetSequenceDuration(self,self:GetSequenceName(self:GetSequence()))+0.2
|
|
timer.Simple(VJ_GetSequenceDuration(self,self:GetSequenceName(self:GetSequence())), function() self.IsDodging = false end)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
---------------------------------------------------------------------------------------------------------------------------------------------
|
|
function ENT:CanDodge(dodgetype)
|
|
if dodgetype == "normal" then
|
|
if !self.RangeAttacking && !self.MeleeAttacking && self:GetEnemy():IsNPC()
|
|
&& ((self:GetEnemy().MeleeAttacking && self:GetEnemy().MeleeAttacking)
|
|
or (self:GetEnemy().IsAttacking && self:GetEnemy().IsAttacking)) then
|
|
return true
|
|
else
|
|
return false
|
|
end
|
|
elseif dodgetype == "player" then
|
|
if !self.RangeAttacking && !self.MeleeAttacking && self:GetEnemy():IsPlayer()
|
|
&& self:GetEnemy():GetEyeTrace().Entity == self && self:GetEnemy():IsPlayer() && self:GetEnemy():GetActiveWeapon() != nil
|
|
&& self.AcceptableWeaponsTbl[self:GetEnemy():GetActiveWeapon():GetClass()]
|
|
&& (self:GetEnemy():KeyPressed(IN_ATTACK) or self:GetEnemy():KeyPressed(IN_ATTACK2)
|
|
or self:GetEnemy():KeyReleased(IN_ATTACK) or self:GetEnemy():KeyReleased(IN_ATTACK2)
|
|
or self:GetEnemy():KeyDown(IN_ATTACK) or self:GetEnemy():KeyDown(IN_ATTACK2)) then
|
|
return true
|
|
else
|
|
return false
|
|
end
|
|
end
|
|
end
|
|
---------------------------------------------------------------------------------------------------------------------------------------------
|
|
function ENT:FindSeq(seq)
|
|
return self:GetSequenceActivity(self:LookupSequence(seq))
|
|
end
|
|
---------------------------------------------------------------------------------------------------------------------------------------------
|
|
ENT.AcceptableWeaponsTbl = {
|
|
["gmod_camera"]=true,
|
|
["gmod_tool"]=true,
|
|
["weapon_physgun"]=true,
|
|
["weapon_physcannon"]=true
|
|
} |