Custom Hold Types refuses to work [Read More]

Hello, and thank you for reading

Recently ive been trying to make a custom holdtype function from the weapon_base sh_anim file
The only problem seems to be that the function refuses to use the animation index i provided

When I test it in game, I get a mixed result for the size of the animation index, and it usually just defaults to normal

I even tried storing the index as a SWEP value, same shit

I cant think of anything else I can do!

Heres the Code Segments for my sh_anim.lua:

Top of the file def.



	local ActIndex = {}

	ActIndex[ "pistol" ] 		= ACT_HL2MP_IDLE_PISTOL -- NOT PURE PISTOL
	ActIndex[ "onehand" ] 		= ACT_HL2MP_IDLE_PISTOL -- PURE HL2/DOD PISTOL
	ActIndex[ "smg" ] 			= ACT_HL2MP_IDLE_SMG1
	ActIndex[ "grenade" ] 		= ACT_HL2MP_IDLE_GRENADE
	ActIndex[ "ar2" ] 			= ACT_HL2MP_IDLE_AR2
	ActIndex[ "shotgun" ] 		= ACT_HL2MP_IDLE_SHOTGUN
	ActIndex[ "rpg" ]	 		= ACT_HL2MP_IDLE_RPG
	ActIndex[ "physgun" ] 		= ACT_HL2MP_IDLE_PHYSGUN
	ActIndex[ "crossbow" ] 		= ACT_HL2MP_IDLE_CROSSBOW
	ActIndex[ "melee" ] 		= ACT_HL2MP_IDLE_MELEE
	ActIndex[ "slam" ] 			= ACT_HL2MP_IDLE_SLAM
	ActIndex[ "normal" ]		= ACT_HL2MP_IDLE
	ActIndex[ "fist" ]			= ACT_HL2MP_IDLE_FIST
	ActIndex[ "melee2" ]		= ACT_HL2MP_IDLE_MELEE2
	ActIndex[ "passive" ]		= ACT_HL2MP_IDLE_PASSIVE
	ActIndex[ "knife" ]			= ACT_HL2MP_IDLE_KNIFE
	ActIndex[ "duel" ]			= ACT_HL2MP_IDLE_DUEL
	ActIndex[ "dual" ]			= ACT_HL2MP_IDLE_DUEL
	ActIndex[ "camera" ]		= ACT_HL2MP_IDLE_CAMERA
	ActIndex[ "magic" ]			= ACT_HL2MP_IDLE_MAGIC
	ActIndex[ "revolver" ]		= ACT_HL2MP_IDLE_REVOLVER
	ActIndex[ "357" ]			= ACT_HL2MP_IDLE_REVOLVER

	-- Add alias

	ActIndex["rifle"] 						= ACT_HL2MP_IDLE_AR2
	ActIndex["grip"] 						= ACT_HL2MP_IDLE_SMG1
	ActIndex["mg"]	 						= ACT_HL2MP_IDLE_RPG
	ActIndex["hipfire1"] 					= ACT_HL2MP_IDLE_CROSSBOW
	ActIndex["hipfire2"] 					= ACT_HL2MP_IDLE_SHOTGUN
	ActIndex["magnum"] 						= ACT_HL2MP_IDLE_REVOLVER
	ActIndex["revolver"] 					= ACT_HL2MP_IDLE_REVOLVER
	
	-- Add Special Dynamic Holdtype
	ActIndex["pistol_police"]				= ACT_HL2MP_IDLE_REVOLVER
	ActIndex["csspistol"]					= ACT_HL2MP_IDLE_REVOLVER
	ActIndex["autopistol"] 					= ACT_HL2MP_IDLE_PISTOL
	
	-- Add Keys for Automation
	ActIndex["ducking_rifle_aim"] 			= ACT_HL2MP_IDLE_AR2
	ActIndex["ducking_rifle_hipfire"] 		= ACT_HL2MP_IDLE_CROSSBOW
	ActIndex["ducking_handgun_hipfire"] 	= ACT_HL2MP_IDLE_REVOLVER
	ActIndex[ "ducking_handgun_aim" ] 		= ACT_HL2MP_IDLE_PISTOL
	ActIndex[ "jumping_handgun_hipfire" ] 	= ACT_HL2MP_IDLE_PISTOL
	ActIndex[ "jumping_handgun_aim"] 		= ACT_HL2MP_IDLE_REVOLVER

	ActIndex[ "grenade_idle" ] 				= ACT_HL2MP_IDLE_SLAM

	SWEP.HoldIndex = ActIndex


CheckActIndex loops through either a provided table or self.HoldIndex, printing the Key and Value
Just some debuging stuff

function SetWeaponHoldType



function SWEP:SetWeaponHoldType(t)
	if ( (game.SinglePlayer() && SERVER) or ( !game.SinglePlayer() && SERVER ) ) then
		ErrorNoHalt("Testing who can see me!")
		ErrorNoHalt("Testing who can see me!")
		ErrorNoHalt("Testing who can see me!")
		ErrorNoHalt("Testing who can see me!")
	end

	if not t then 
		self:Talk("?Wheres the Key?  <<<<<<<<<<<<<")
		t = "357"
	end
	
	--local ActIndex = self.HoldIndex
	local size = table.Count(ActIndex)
	local str1 = "HoldType Index Size: " .. tostring(size)
	local str2 = ActIndex[3]
	local index = nil
	
	if not (SERVER) then self:Talk(str1) end
--[[
	for i = 0, size, 1 do
		if not (SERVER) then
				str2 = "#" .. i .. " = " .. tostring(ActIndex*)
		
			self:Talk(str2)
		end
	end
	--]]
	--self:CheckActIndex()
	
	
	t = string.lower( t )
	local keyt = table.GetKeys(ActIndex)
	self:CheckActIndex(keyt)
	index = ActIndex[ t ]
	
	if (index == nil) then
		Msg("SWEP:SetWeaponHoldType ~~ ActIndex[ \""..t.."\" ] isn't set! ActIndex has a dim of" .. tostring(#ActIndex) .."
")
		--PrintTable( table.GetKeys( ActIndex ) )
		--PrintTable( ActIndex )
		self:Beep("BAD INDEX @ SH_ANIM ~ " .. tostring(t))
		if ( t == "csspistol" ) then
			index = 1663
		else
			index = ActIndex[tostring(t)]
			self:Beep("Elsing this shit")
		end
	end

	index = ACT_HL2MP_IDLE_DUEL
	self.ActivityTranslate = {}
	self.ActivityTranslate [ACT_HL2MP_IDLE] 					= index
	self.ActivityTranslate [ACT_HL2MP_WALK] 					= index + 1
	self.ActivityTranslate [ACT_HL2MP_RUN] 						= index + 2
	self.ActivityTranslate [ACT_HL2MP_IDLE_CROUCH] 				= index + 3
	self.ActivityTranslate [ACT_HL2MP_WALK_CROUCH] 				= index + 4  -- ACT_HL2MP_WALK_CROUCH_PISTOL 
	self.ActivityTranslate [ACT_HL2MP_GESTURE_RANGE_ATTACK] 	= index + 5
	self.ActivityTranslate [ACT_HL2MP_GESTURE_RELOAD] 			= index + 6
	self.ActivityTranslate [ACT_HL2MP_JUMP] 					= index + 7
	self.ActivityTranslate [ACT_RANGE_ATTACK1] 					= index + 8
	
		-- "normal" jump animation doesn't exist
	if t == "normal" then
		self.ActivityTranslate [ ACT_MP_JUMP ] = ACT_HL2MP_JUMP_SLAM
	end
	
	-- create schemes
	if t == "pistol_police" or t == "csspistol" then
		self.ActivityTranslate [ACT_HL2MP_WALK_CROUCH] 			= ACT_HL2MP_WALK_CROUCH_PISTOL 
		self.ActivityTranslate [ACT_HL2MP_JUMP] 				= ACT_HL2MP_WALK_CROUCH_PISTOL 
	elseif t == "pistol" then
		self.ActivityTranslate [ACT_HL2MP_GESTURE_RELOAD] 		= ACT_HL2MP_GESTURE_RELOAD_PISTOL
	
	end
	
	-- NPC SHIT
	if self.Owner:IsNPC() then
		self:SetupWeaponHoldTypeForAI(t)
		MsgAll("Setting NPC Hold Type to:" .. t)
	end
end


Here is the output from console, for the Mac10, which has the holdtype “autopistol”



HoldType Index Size: 38
Key: 1 |V: physgun
Key: 2 |V: ducking_rifle_aim
Key: 3 |V: 357
Key: 4 |V: melee
Key: 5 |V: ducking_rifle_hipfire
Key: 6 |V: smg
Key: 7 |V: rifle
Key: 8 |V: revolver
Key: 9 |V: fist
Key: 10 |V: crossbow
Key: 11 |V: magnum
Key: 12 |V: magic
Key: 13 |V: hipfire1
Key: 14 |V: jumping_handgun_aim
Key: 15 |V: dual
Key: 16 |V: pistol
Key: 17 |V: csspistol
Key: 18 |V: hipfire2
Key: 19 |V: grenade_idle
Key: 20 |V: shotgun
Key: 21 |V: knife
Key: 22 |V: jumping_handgun_hipfire
Key: 23 |V: ducking_handgun_aim
Key: 24 |V: ducking_handgun_hipfire
Key: 25 |V: onehand
Key: 26 |V: autopistol
Key: 27 |V: normal
Key: 28 |V: grip
Key: 29 |V: grenade
Key: 30 |V: passive
Key: 31 |V: camera
Key: 32 |V: ar2
Key: 33 |V: duel
Key: 34 |V: mg
Key: 35 |V: melee2
Key: 36 |V: rpg
Key: 37 |V: slam
Key: 38 |V: pistol_police
SWEP:SetWeaponHoldType ~~ ActIndex[ "autopistol" ] isn't set! ActIndex has a dim of0
BAD INDEX @ SH_ANIM ~ autopistol
!BEEP! <-- Custom function, dont worry

Elsing this shit


For weapons like the AWP, which has a custom hold type “sniper”, there also is no error

Any help is greatly appreciated
*(also i think i accidently reported my own post x,x)[\i]



t = string.lower( t )
	local keyt = table.GetKeys(ActIndex)
	self:CheckActIndex(keyt)
	index = keyt[ t ]

should be



t = string.lower( t )
	local keyt = table.GetKeys(ActIndex)
	self:CheckActIndex(keyt)
	index = ActIndex[ t ]

Thanks, however I actually wrote that peice of the code today for debuging,

its been a persistent problem, for weeks now

Good Eye tho, The code has been updated and retested… same issues