samyyc.dev

点击登入

.. (UTC+8)

-- BPM

Sat May 27 2023

Sourcemod CSGO获取玩家手中的武器属性

#82

/

samyyc

/

807

/

1102日 前更新

有了这个我们就可以获取玩家手中的武器了,

从文件中可以找到一个

- m_hActiveWeapon (Offset 2388) (Save)(4 Bytes)

这就是我们要找的属性名

最开始我是直接用的 GetEntProp 方法读取的这个属性,但是读取出来一串很怪的地址,随后就试着用了 GetEntPropEnt 这个方法读取,成功读取到武器,代码如下

int entity = GetEntPropEnt(client, Prop_Send, "m_hActiveWeapon", 0);

具体的原因查了一下, GetEntProp 读取的是int值,而 GetEntPropEnt 读取的是一个Entity Index,武器在csgo里属于entity

拿到武器的entity index就等于拿到武器本身这个entity了,接下来要做的就是读取这个entity的属性

int defIndex = GetEntProp(entity, Prop_Send, "m_iItemDefinitionIndex");

这一段代码相当于读取了武器entity的 m_iItemDefinitionIndex 属性,查了一下这个属性是在 Table: m_Item 里的,他还有一些其他属性,比如 m_iEntityQuality m_szCustomName 等,这些都是可以读取的

有了defIndex就可以知道是什么武器了,以下是读取的代码(抄自CSGO皮肤插件的源码):

char g_WeaponClasses[][] = {
}

然后调用里面的 ClassByDefIndex 方法就可以读取出类型了

char weaponClass[32];