背景知识:
盗图贴吧老哥 @跑路
关于此参数的编程知识
csgo中每一个武器都有对应的DefinitionIndex,这个参数可以通过如下函数中的m_iItemDefinitionIndex参数获取到id,然后根据这个id和weaponClass来获取到这个武器对应的class名称(比如weapon_ak47这样的名字)。
bool GetWeaponClass(int entity, char[] weaponClass, int size)
{
int id = GetEntProp(entity, Prop_Send, "m_iItemDefinitionIndex");
return ClassByDefIndex(id, weaponClass, size);
}
所有武器的defindex可以用一个enum来表示,如下:
enum ItemDefinitionIndex
{
WEAPON_INVALID = -1,
WEAPON_DEAGLE = 1,
WEAPON_ELITE,
WEAPON_FIVESEVEN,
WEAPON_GLOCK,
WEAPON_AK47 = 7,
WEAPON_AUG,
WEAPON_AWP,
WEAPON_FAMAS,
WEAPON_G3SG1,
WEAPON_GALILAR = 13,
WEAPON_M249,
WEAPON_M4A1 = 16,
WEAPON_MAC10,
WEAPON_P90 = 19,
WEAPON_MP5 = 23,
WEAPON_UMP45,
WEAPON_XM1014,
WEAPON_BIZON,
WEAPON_MAG7,
WEAPON_NEGEV,
WEAPON_SAWEDOFF,
WEAPON_TEC9,
WEAPON_TASER,
WEAPON_HKP2000,
WEAPON_MP7,
WEAPON_MP9,
WEAPON_NOVA,
WEAPON_P250,
WEAPON_SHIELD,
WEAPON_SCAR20,
WEAPON_SG556,
WEAPON_SSG08,
WEAPON_KNIFEGG,
WEAPON_KNIFE,
WEAPON_FLASHBANG,
WEAPON_HEGRENADE,
WEAPON_SMOKEGRENADE,
WEAPON_MOLOTOV,
WEAPON_DECOY,
WEAPON_INCGRENADE,
WEAPON_C4,
WEAPON_HEALTHSHOT = 57,
WEAPON_KNIFE_T = 59,
WEAPON_M4A1_SILENCER,
WEAPON_USP_SILENCER,
WEAPON_CZ75A = 63,
WEAPON_REVOLVER,
WEAPON_TAGRENADE = 68,
WEAPON_FISTS,
WEAPON_BREACHCHARGE,
WEAPON_TABLET = 72,
WEAPON_MELEE = 74,
WEAPON_AXE,
WEAPON_HAMMER,
WEAPON_SPANNER = 78,
WEAPON_KNIFE_GHOST = 80,
WEAPON_FIREBOMB,
WEAPON_DIVERSION,
WEAPON_FRAG_GRENADE,
WEAPON_SNOWBALL,
WEAPON_BUMPMINE,
WEAPON_BAYONET = 500,
WEAPON_KNIFE_FLIP = 505,
WEAPON_KNIFE_GUT,
WEAPON_KNIFE_KARAMBIT,
WEAPON_KNIFE_M9_BAYONET,
WEAPON_KNIFE_TACTICAL,
WEAPON_KNIFE_FALCHION = 512,
WEAPON_KNIFE_SURVIVAL_BOWIE = 514,
WEAPON_KNIFE_BUTTERFLY,
WEAPON_KNIFE_PUSH,
WEAPON_KNIFE_URSUS = 519,
WEAPON_KNIFE_GYPSY_JACKKNIFE,
WEAPON_KNIFE_STILETTO = 522,
WEAPON_KNIFE_WIDOWMAKER,
GLOVE_STUDDED_BLOODHOUND = 5027,
GLOVE_T_SIDE = 5028,
GLOVE_CT_SIDE = 5029,
GLOVE_SPORTY = 5030,
GLOVE_SLICK = 5031,
GLOVE_LEATHER_WRAP = 5032,
GLOVE_MOTORCYCLE = 5033,
GLOVE_SPECIALIST = 5034,
GLOVE_HYDRA = 5035
};
得到了这个DefinitionIndex,我们可以来做很多事情,比如我们可以利用SetEntPropEnt函数,来给玩家装备对应的武器。
// 来自 https://bbs.csgocn.net/thread-585.htm
int weapon_ent = GivePlayerItem(client, all_weapons[Random]); //这里的GivePlayerItem的第二个参数,就是类似weapon_ak47这样的字符串
// PrintToServer("weapon_ent: %d", weapon_ent);
SetEntPropEnt(client, Prop_Send, "m_hActiveWeapon", weapon_ent);
结语:
- 这个参数很重要,可以跟皮肤wear/float产生关系,有兴趣可以研究一下weapons.sp的源码,就是参考链接中的第3个链接
参考: