mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 05:43:46 +03:00
Upload
This commit is contained in:
99
lua/entities/dodgefunc.lua
Normal file
99
lua/entities/dodgefunc.lua
Normal file
@@ -0,0 +1,99 @@
|
||||
--[[
|
||||
| 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
|
||||
}
|
||||
Reference in New Issue
Block a user