Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local mdl = "models/cyanblue/opm/tatsumaki/tatsumaki.mdl" -- нужна модель
- local key = KEY_L -- кнопка для активации/деактивации полёта
- local cd = 1 -- задержка между входом и выходом из режима полёта
- local flyspd = 2 -- множитель скорости(стандартная скорость ходьбы/бега * flyspd)
- local halocmd = "anime_model_halo" -- активировать/деактивировать показ обводки у игрока(клиент)
- local flycmd = "anime_model_fly" -- команда для активации/деактивации полёта
- local an="anime" -- просто для названия хуков, поменяй на своё
- if CLIENT then--------CLIENT---------------------------
- local lp,kd,ct=NULL,0,CurTime
- local function ToggleFlight()
- local a,t=false,CurTime()
- if kd>t then return end
- kd=t+cd
- RunConsoleCommand(flycmd)
- end
- hook.Add("InitPostEntity",an.."_Init",function()
- lp=LocalPlayer()
- hook.Add("PlayerButtonDown",an.."_BD",function(p,b)
- if p==lp and p:GetModel()==mdl and b==key then
- ToggleFlight()
- end
- end)
- end)
- local HashTab,HaloTab={},{}
- local function halodel(val)
- local id=HashTab[val]
- if not id then return end
- table.remove(HaloTab,id)
- HashTab[val]=nil
- for i=id+1,#HaloTab do
- HashTab[HaloTab[i]]=i
- end
- val:RemoveCallOnRemove(an)
- end
- local haloen=CreateClientConVar("halocmd","1",true,false)
- local function haloins(val)
- if not haloen:GetBool()then return end
- HashTab[val]=table.insert(HaloTab,val)
- val:CallOnRemove(an,function()halodel(val)end)
- end
- hook.Add("PreDrawHalos",an.."_Halo",function()
- halo.Add(HaloTab,color_white,2,2,2)
- end)
- hook.Add("EntityNetworkedVarChanged",an.."_NW",function(ply,nm,o,n)
- if nm=="aFlight" then
- if n then
- haloins(ply)
- else
- halodel(ply)
- end
- end
- end)
- hook.Add("NotifyShouldTransmit",an.."_NST",function(ply,b)
- if b then
- if ply:GetNW2Bool("aFlight")then
- haloins(ply)
- end
- else
- halodel(ply)
- end
- end)
- else------------------SERVER---------------------------
- if game.SinglePlayer()then--prediction
- hook.Add("PlayerButtonDown",an.."_BD",function(p,b)
- if p:GetModel()==mdl and b==key then
- RunConsoleCommand(flycmd)
- end
- end)
- end
- local ct=CurTime
- concommand.Add(flycmd,function(ply)
- if ply:GetModel()~=mdl then return end
- if not ply:Alive() or ply:InVehicle() or ply:GetMoveType()==MOVETYPE_NOCLIP then return end
- local t=CurTime()
- if ply._lastflight and ply._lastflight > t then
- ply._lastflight=t+cd
- end
- if ply:GetNW2Bool("aFlight")then
- ply:SetMoveType(MOVETYPE_WALK)
- ply:SetNW2Bool("aFlight",false)
- else
- ply:SetNW2Bool("aFlight",true)
- ply:SetMoveType(MOVETYPE_FLY)
- end
- end)
- hook.Add("PostPlayerDeath",an.."_PPD",function(ply)
- if ply:GetNW2Bool("aFlight")then
- if ply._flyanimactive then
- ply._flyanimactive = nil
- end
- ply:SetNW2Bool("aFlight",false)
- ply:SetMoveType(MOVETYPE_WALK)
- end
- end)
- hook.Add("PlayerEnteredVehicle",an.."_PEV",function(ply)
- if ply:GetNW2Bool("aFlight")then
- if ply._flyanimactive then
- ply._flyanimactive = nil
- end
- ply:SetNW2Bool("aFlight",false)
- end
- end)
- hook.Add("PlayerNoClip",an.."PN",function(ply)
- if ply:GetNW2Bool("aFlight")then
- if ply._flyanimactive then
- ply._flyanimactive = nil
- end
- ply:SetNW2Bool("aFlight",false)
- end
- end)
- end
- ----------------------SHARED---------------------------
- hook.Add("Move",an.."_Move",function(ply,mv)
- if ply._flyanimactive then
- local vel,spd=Vector(0,0,0),ply:GetWalkSpeed()*flyspd
- local pos=mv:GetOrigin()
- local ang=mv:GetMoveAngles()
- if mv:KeyDown(IN_SPEED)then
- spd=ply:GetRunSpeed()
- end
- if mv:KeyDown(IN_FORWARD)then
- vel=vel+ang:Forward()*spd
- end
- if mv:KeyDown(IN_MOVELEFT)then
- vel=vel+ang:Right()*-spd
- end
- if mv:KeyDown(IN_MOVERIGHT)then
- vel=vel+ang:Right()*spd
- end
- if mv:KeyDown(IN_BACK)then
- vel=vel+ang:Forward()*-spd
- end
- if mv:KeyDown(IN_JUMP)then
- if ply:IsOnGround()then
- ply:SetMoveType(MOVETYPE_WALK)
- elseif ply:GetMoveType()==MOVETYPE_WALK then
- ply:SetMoveType(MOVETYPE_FLY)
- end
- vel.z = vel.z+spd
- end
- if mv:KeyDown(IN_DUCK)then
- vel.z = vel.z-spd
- end
- mv:SetVelocity(vel)
- end
- end)
- hook.Add("UpdateAnimation",an.."_Anim",function(ply,vel,msgs)
- if ply:GetNW2Bool("aFlight")then
- if not ply._flyanimactive then
- ply._flyanimactive=true
- ply:AnimRestartGesture(GESTURE_SLOT_CUSTOM,ACT_FLY,false)
- end
- else
- if ply._flyanimactive then
- ply:AnimResetGestureSlot(GESTURE_SLOT_CUSTOM)
- ply._flyanimactive=nil
- end
- end
- end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement