Files
2026-03-15 14:54:49 +03:00

153 lines
4.9 KiB
Lua

local Anims = {}
-- Load animations after the languages for translation purposes
hook.Add("loadCustomDarkRPItems", "loadAnimations", function()
Anims[ACT_GMOD_GESTURE_BOW] = DarkRP.getPhrase("bow")
Anims[ACT_GMOD_TAUNT_MUSCLE] = DarkRP.getPhrase("sexy_dance")
Anims[ACT_GMOD_GESTURE_BECON] = DarkRP.getPhrase("follow_me")
Anims[ACT_GMOD_TAUNT_LAUGH] = DarkRP.getPhrase("laugh")
Anims[ACT_GMOD_TAUNT_PERSISTENCE] = DarkRP.getPhrase("lion_pose")
Anims[ACT_GMOD_GESTURE_DISAGREE] = DarkRP.getPhrase("nonverbal_no")
Anims[ACT_GMOD_GESTURE_AGREE] = DarkRP.getPhrase("thumbs_up")
Anims[ACT_GMOD_GESTURE_WAVE] = DarkRP.getPhrase("wave")
Anims[ACT_GMOD_TAUNT_DANCE] = DarkRP.getPhrase("dance")
end)
function DarkRP.addPlayerGesture(anim, text)
if not anim then DarkRP.error("Argument #1 of DarkRP.addPlayerGesture (animation/gesture) does not exist.", 2) end
if not text then DarkRP.error("Argument #2 of DarkRP.addPlayerGesture (text) does not exist.", 2) end
Anims[anim] = text
end
function DarkRP.removePlayerGesture(anim)
if not anim then DarkRP.error("Argument #1 of DarkRP.removePlayerGesture (animation/gesture) does not exist.", 2) end
Anims[anim] = nil
end
local function physGunCheck(ply)
local hookName = "darkrp_anim_physgun_" .. ply:EntIndex()
hook.Add("Think", hookName, function()
if IsValid(ply) and
ply:Alive() and
ply:GetActiveWeapon():IsValid() and
ply:GetActiveWeapon():GetClass() == "weapon_physgun" and
ply:KeyDown(IN_ATTACK) and
(ply:GetAllowWeaponsInVehicle() or not ply:InVehicle()) then
local ent = ply:GetEyeTrace().Entity
if IsValid(ent) and ent:IsPlayer() and not ply.SaidHi then
ply.SaidHi = true
ply:DoAnimationEvent(ACT_SIGNAL_GROUP)
end
else
if IsValid(ply) then
ply.SaidHi = nil
end
hook.Remove("Think", hookName)
end
end)
end
hook.Add("KeyPress", "darkrp_animations", function(ply, key)
if key == IN_ATTACK then
local weapon = ply:GetActiveWeapon()
if weapon:IsValid() then
local class = weapon:GetClass()
-- Saying hi/hello to a player
if class == "weapon_physgun" then
physGunCheck(ply)
-- Hobo throwing poop!
elseif class == "weapon_bugbait" then
local Team = ply:Team()
if RPExtraTeams[Team] and RPExtraTeams[Team].hobo then
ply:DoAnimationEvent(ACT_GMOD_GESTURE_ITEM_THROW)
end
end
end
end
end)
if SERVER then
local function CustomAnim(ply, cmd, args)
if ply:EntIndex() == 0 then return end
local Gesture = tonumber(args[1] or 0)
if not Anims[Gesture] then return end
local RP = RecipientFilter()
RP:AddAllPlayers()
umsg.Start("_DarkRP_CustomAnim", RP)
umsg.Entity(ply)
umsg.Short(Gesture)
umsg.End()
end
concommand.Add("_DarkRP_DoAnimation", CustomAnim)
return
end
local function KeysAnims(um)
local ply = um:ReadEntity()
local act = um:ReadString()
if not IsValid(ply) then return end
ply:AnimRestartGesture(GESTURE_SLOT_CUSTOM, act == "usekeys" and ACT_GMOD_GESTURE_ITEM_PLACE or ACT_HL2MP_GESTURE_RANGE_ATTACK_FIST, true)
end
usermessage.Hook("anim_keys", KeysAnims)
local function CustomAnimation(um)
local ply = um:ReadEntity()
local act = um:ReadShort()
if not IsValid(ply) then return end
ply:AnimRestartGesture(GESTURE_SLOT_CUSTOM, act, true)
end
usermessage.Hook("_DarkRP_CustomAnim", CustomAnimation)
local AnimFrame
local function AnimationMenu()
if AnimFrame then return end
local Panel = vgui.Create("Panel")
Panel:SetPos(0,0)
Panel:SetSize(ScrW(), ScrH())
function Panel:OnMousePressed()
AnimFrame:Close()
end
AnimFrame = AnimFrame or vgui.Create("DFrame", Panel)
local Height = table.Count(Anims) * 55 + 32
AnimFrame:SetSize(130, Height)
AnimFrame:SetPos(ScrW() / 2 + ScrW() * 0.1, ScrH() / 2 - (Height / 2))
AnimFrame:SetTitle(DarkRP.getPhrase("custom_animation"))
AnimFrame.btnMaxim:SetVisible(false)
AnimFrame.btnMinim:SetVisible(false)
AnimFrame:SetVisible(true)
AnimFrame:MakePopup()
AnimFrame:ParentToHUD()
function AnimFrame:Close()
Panel:Remove()
AnimFrame:Remove()
AnimFrame = nil
end
local i = 0
for k, v in SortedPairs(Anims) do
i = i + 1
local button = vgui.Create("DButton", AnimFrame)
button:SetPos(10, (i - 1) * 55 + 30)
button:SetSize(110, 50)
button:SetText(v)
button.DoClick = function()
RunConsoleCommand("_DarkRP_DoAnimation", k)
end
end
AnimFrame:SetSkin(GAMEMODE.Config.DarkRPSkin)
end
concommand.Add("_DarkRP_AnimationMenu", AnimationMenu)