Files
VnUtest/garrysmod/addons/talkinganims_ft/lua/autorun/sv_script.lua
2026-03-31 10:27:04 +03:00

234 lines
6.9 KiB
Lua

AddCSLuaFile()
local enableAnims = CreateConVar("enable_talking_animation", "1", FCVAR_ARCHIVE, "Enable or disable talking animation.")
local animCooldown = CreateConVar("talking_animation_cooldown", "2.5", FCVAR_ARCHIVE, "Change cooldown of animation(starts with the animation)")
local gender = "M"
local lastAnim = ""
local talkingAnimationM = {
"Gesture01",
"Gesture05",
"Gesture05NP",
"Gesture06",
"Gesture06NP",
"Gesture07",
"Gesture13",
"E_g_shrug",
"G_medurgent_mid",
"G_righthandroll",
"G_righthandheavy",
"g_palm_out_l",
"g_palm_out_high_l"
}
local talkingAnimationWeaponsM = {
"g_Rifle_Lhand",
"g_Rifle_Lhand_low",
"bg_accentUp",
"bg_up_l",
"bg_up_r",
"g_palm_out_high_l",
"g_palm_up_high_l"
}
local talkingAnimationW = {
"A_gesture16",
"M_g_sweepout",
"A_g_midhigh_arcout",
"A_g_midhigh_arcout_left",
"A_g_midhigh_arcout_right",
"A_g_rtl_dwnshp",
"A_g_low2side_palmsout",
"A_g_hflipout",
"A_g_armscrossed",
"A_g_rthdflipout",
"A_g_mid_rtfingflareout",
"A_g_mid_2hdcutdwn",
"A_g_mid_2hdcutdwn_rt",
"A_g_midrtarcdwnout",
"A_g_rtsweepoutbig",
"A_g_leftsweepoutbig",
"A_g_mid_rtcutdwn"
}
local talkingAnimationWeaponsW = {
"A_g_midhigh_arcout_left",
"g_Rifle_Lhand",
"g_Rifle_Lhand_low",
"bg_accentUp",
"bg_up_l",
"bg_up_r"
}
local nonweapon = {
"camera",
"duel",
"knife",
"melee",
"melee2",
"physgun",
"slam",
"normal",
"grenade",
"fist"
}
local doingAnim = false
local lastAnim = ""
function fixtables()
print("Fixed tables!")
talkingAnimationWeaponsM = {
"g_Rifle_Lhand",
"g_Rifle_Lhand_low",
"bg_accentUp",
"bg_up_l",
"bg_up_r",
"g_palm_out_high_l",
"g_palm_up_high_l"
}
talkingAnimationM = {
"Gesture01",
"Gesture05",
"Gesture05NP",
"Gesture06",
"Gesture06NP",
"Gesture07",
"Gesture13",
"E_g_shrug",
"G_medurgent_mid",
"G_righthandroll",
"G_righthandheavy",
"g_palm_out_l",
"g_palm_out_high_l"
}
talkingAnimationW = {
"A_gesture16",
"M_g_sweepout",
"A_g_midhigh_arcout",
"A_g_midhigh_arcout_left",
"A_g_midhigh_arcout_right",
"A_g_rtl_dwnshp",
"A_g_low2side_palmsout",
"A_g_hflipout",
"A_g_armscrossed",
"A_g_rthdflipout",
"A_g_mid_rtfingflareout",
"A_g_mid_2hdcutdwn",
"A_g_mid_2hdcutdwn_rt",
"A_g_midrtarcdwnout",
"A_g_rtsweepoutbig",
"A_g_leftsweepoutbig",
"A_g_mid_rtcutdwn"
}
talkingAnimationWeaponsW = {
"A_g_midhigh_arcout_left",
"g_Rifle_Lhand",
"g_Rifle_Lhand_low",
"bg_accentUp",
"bg_up_l",
"bg_up_r"
}
end
if SERVER then
util.AddNetworkString("TalkingAnimNet")
function GetWeaponHoldAnim( ent)
if( !IsValid( ent ) ) then return nil end
local physObj = ent:GetPhysicsObject()
if (!IsValid(physObj)) then return false end
local activeweapon = ent:GetActiveWeapon()
print(activeweapon)
if activeweapon == not nil then
local wephold = activeweapon:GetHoldType()
elseif activeweapon == nil then
local wephold = "normal"
end
for i=0,#nonweapon do
if wephold == nonweapon[i] then
return true
end
end
end
net.Receive("TalkingStart", function(len,ply)
local IsDeveloper = GetConVar("developer"):GetInt()
local isTalking = net.ReadBool()
local gender = net.ReadString()
local enableWeaponAnims = net.ReadBool()
local isDealingWithTables = false
if(!IsValid(ply)) then return nil end
if (!ply:Alive()) then return nil end
if(!isTalking) then return nil end
if isTalking and isDealingWithTables == false and enableAnims:GetBool() then
local wephold = GetWeaponHoldAnim(ply)
local animationToLookup = ""
isDealingWithTables = true
if wephold and gender == "M" then
animationToLookup = talkingAnimationM[math.random(#talkingAnimationM)]
if lastAnim == animationToLookup then
table.RemoveByValue(talkingAnimationM, lastAnim)
animationToLookup = talkingAnimationM[math.random(#talkingAnimationM)]
table.insert(talkingAnimationM, lastAnim)
end
elseif wephold and gender == "W" then
animationToLookup = talkingAnimationW[math.random(#talkingAnimationW)]
if lastAnim == animationToLookup then
table.RemoveByValue(talkingAnimationW, lastAnim)
animationToLookup = talkingAnimationW[math.random(#talkingAnimationW)]
table.insert(talkingAnimationW, lastAnim)
end
elseif gender == "M" and enableWeaponAnims then
animationToLookup = talkingAnimationWeaponsM[math.random(#talkingAnimationWeaponsM)]
if lastAnim == animationToLookup then
table.RemoveByValue(talkingAnimationWeaponsM, lastAnim)
animationToLookup = talkingAnimationWeaponsM[math.random(#talkingAnimationWeaponsM)]
table.insert(talkingAnimationWeaponsM, lastAnim)
end
elseif gender == "W" and enableWeaponAnims then
animationToLookup = talkingAnimationWeaponsW[math.random(#talkingAnimationWeaponsW)]
if lastAnim == animationToLookup then
table.RemoveByValue(talkingAnimationWeaponsW, lastAnim)
animationToLookup = talkingAnimationWeaponsW[math.random(#talkingAnimationWeaponsW)]
table.insert(talkingAnimationWeaponsW, lastAnim)
end
end
if animationToLookup == nil then
fixtables()
return
end
lookup = ply:LookupSequence(animationToLookup)
isDealingWithTables = false
if lookup == -1 then
if IsDeveloper > 0 then
print("Sequence not found!")
ply:ChatPrint(animationToLookup)
print(lookup)
end
else
if IsDeveloper > 0 then
ply:ChatPrint(animationToLookup)
print(lookup)
end
net.Start("TalkingAnimNet")
net.WritePlayer(ply)
net.WriteUInt(lookup, 16)
net.Broadcast()
lastAnim = animationToLookup
end
end
end)
end