CLASS.Name = "Crow" CLASS.TranslationName = "class_crow" CLASS.Description = "description_crow" CLASS.Health = 5 CLASS.Wave = 0 CLASS.Threshold = 0 CLASS.SWEP = "weapon_zs_crow" CLASS.Model = Model("models/crow.mdl") CLASS.Speed = 90 CLASS.JumpPower = 230 CLASS.PainSounds = {"NPC_Crow.Pain"} CLASS.DeathSounds = {"NPC_Crow.Die"} CLASS.Unlocked = true CLASS.Hidden = true CLASS.Hull = {Vector(-4, -4, 0), Vector(4, 4, 9)} CLASS.HullDuck = {Vector(-4, -4, 0), Vector(4, 4, 9)} CLASS.ViewOffset = Vector(0,0,8) CLASS.ViewOffsetDucked = Vector(0,0,8) CLASS.CrouchedWalkSpeed = 1 CLASS.StepSize = 8 CLASS.Mass = 2 CLASS.NoUse = true CLASS.NoGibs = true CLASS.NoCollideAll = true CLASS.NoFallDamage = true CLASS.NoFallSlowdown = true CLASS.NeverAlive = true CLASS.AllowTeamDamage = true CLASS.NoDeaths = true CLASS.Points = 0 function CLASS:NoDeathMessage(pl, attacker, dmginfo) return true end function CLASS:DoesntGiveFear() return true end function CLASS:ScalePlayerDamage(pl, hitgroup, dmginfo) return true end function CLASS:PlayerFootstep(pl, vFootPos, iFoot, strSoundName, fVolume, pFilter) return true end function CLASS:CalcMainActivity(pl, velocity) if pl:OnGround() then local wep = pl:GetActiveWeapon() if wep:IsValid() and wep.IsPecking and wep:IsPecking() then pl.CalcSeqOverride = 5 elseif velocity:Length2D() > 0.5 then pl.CalcIdeal = ACT_RUN else pl.CalcIdeal = ACT_IDLE end elseif velocity:Length() > 350 then pl.CalcIdeal = ACT_FLY else pl.CalcSeqOverride = 7 end return true end function CLASS:UpdateAnimation(pl, velocity, maxseqgroundspeed) pl:FixModelAngles(velocity) pl:SetPlaybackRate(1) return true end function CLASS:DoAnimationEvent(pl, event, data) if event == PLAYERANIMEVENT_ATTACK_PRIMARY then pl:AnimRestartGesture(GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_MELEE_ATTACK1, true) return ACT_INVALID end end function CLASS:Move(pl, mv) if not pl:GetActiveWeapon().IsCrow then return end if not pl:IsOnGround() and pl:KeyDown(IN_JUMP) then local dir = pl:EyeAngles() if pl:KeyDown(IN_MOVELEFT) then dir:RotateAroundAxis(dir:Up(), 20) elseif pl:KeyDown(IN_MOVERIGHT) then dir:RotateAroundAxis(dir:Up(), -20) end if pl:KeyDown(IN_FORWARD) then mv:SetVelocity(dir:Forward() * 450) else mv:SetVelocity(dir:Forward() * 300) end return true end end if SERVER then function CLASS:SwitchedAway(pl) pl:SetAllowFullRotation(false) end function CLASS:OnKilled(pl, attacker, inflictor, suicide, headshot, dmginfo) pl:SetAllowFullRotation(false) if attacker:IsPlayer() and attacker ~= pl then if attacker:Team() == TEAM_HUMAN then attacker.CrowKills = attacker.CrowKills + 1 elseif attacker:GetZombieClassTable().Name == "Crow" then attacker.CrowVsCrowKills = attacker.CrowVsCrowKills + 1 net.Start("zs_crow_kill_crow") net.WriteString(pl:Name()) net.WriteString(attacker:Name()) net.Broadcast() end end if pl:Health() < -45 then local amount = pl:OBBMaxs():Length() local vel = pl:GetVelocity() util.Blood(pl:LocalToWorld(pl:OBBCenter()), math.Rand(amount * 0.25, amount * 0.5), vel:GetNormalized(), vel:Length() * 0.75) return true elseif not pl.KnockedDown then pl:CreateRagdoll() end pl:SetHealth(pl:GetMaxHealth()) pl:StripWeapons() pl:Spectate(OBS_MODE_ROAMING) end end if not CLIENT then return end function CLASS:ShouldDrawLocalPlayer(pl) return true end CLASS.Icon = "zombiesurvival/killicons/crow"