New natives: cs_set_user_armor(), cs_get_user_armor()

cs_set_user_armor() should be used instead of fun's set_user_armor().
This commit is contained in:
Johnny Bergström 2005-01-16 16:30:18 +00:00
parent 5f7dabf9b6
commit 53188ab941
3 changed files with 67 additions and 0 deletions

View File

@ -346,6 +346,51 @@ static cell AMX_NATIVE_CALL cs_set_weapon_burstmode(AMX *amx, cell *params) // c
return 1;
}
static cell AMX_NATIVE_CALL cs_get_user_armor(AMX *amx, cell *params) // cs_get_user_armor(index, CsArmorType:&armortype); = 2 params
{
// Return how much armor and set reference of what type...
// params[1] = user index
// params[2] = byref, set armor type here (no armor/vest/vest+helmet)
CHECK_PLAYER(params[1]);
// Make into edict pointer
edict_t *pPlayer = MF_GetPlayerEdict(params[1]);
cell *armorTypeByRef = MF_GetAmxAddr(amx, params[2]);
*armorTypeByRef = *((int *)pPlayer->pvPrivateData + OFFSET_ARMORTYPE);
return pPlayer->v.armorvalue;
}
static cell AMX_NATIVE_CALL cs_set_user_armor(AMX *amx, cell *params) // cs_set_user_armor(index, armorvalue, CsArmorType:armortype); = 3 params
{
// Set armor and set what type and send a message to client...
// params[1] = user index
// params[2] = armor value
// params[3] = armor type (no armor/vest/vest+helmet)
CHECK_PLAYER(params[1]);
// Make into edict pointer
edict_t *pPlayer = MF_GetPlayerEdict(params[1]);
// Set armor value
pPlayer->v.armorvalue = params[2];
// Set armor type
*((int *)pPlayer->pvPrivateData + OFFSET_ARMORTYPE) = params[3];
if (params[3] == CS_ARMOR_KEVLAR || params[3] == CS_ARMOR_ASSAULTSUIT) {
// And send appropriate message
MESSAGE_BEGIN(params[1], GET_USER_MSG_ID(PLID, "ItemPickup", NULL), NULL, pPlayer);
WRITE_STRING(params[3] == CS_ARMOR_KEVLAR ? "item_kevlar" : "item_assaultsuit");
MESSAGE_END();
}
return 1;
}
static cell AMX_NATIVE_CALL cs_get_user_vip(AMX *amx, cell *params) // cs_get_user_vip(index); = 1 param
{
// Is user vip?
@ -1193,6 +1238,8 @@ AMX_NATIVE_INFO cstrike_Exports[] = {
{"cs_set_user_tked", cs_set_user_tked},
{"cs_get_user_driving", cs_get_user_driving},
{"cs_get_user_stationary", cs_get_user_stationary},
{"cs_get_user_armor", cs_get_user_armor},
{"cs_set_user_armor", cs_set_user_armor},
//------------------- <-- max 19 characters!
{NULL, NULL}
};

View File

@ -63,6 +63,7 @@
// "player" entities
#if !defined __amd64__
// 32 bit offsets here
#define OFFSET_ARMORTYPE 112 + EXTRAOFFSET
#define OFFSET_TEAM 114 + EXTRAOFFSET
#define OFFSET_CSMONEY 115 + EXTRAOFFSET
#define OFFSET_PRIMARYWEAPON 116 + EXTRAOFFSET
@ -100,6 +101,7 @@
#define OFFSET_HOSTAGEID 487 + EXTRAOFFSET
#else
// Amd64 offsets here
//#define OFFSET_ARMORTYPE ??? + EXTRAOFFSET // need to find this one out! :-)
#define OFFSET_TEAM 139 + EXTRAOFFSET // +25
#define OFFSET_CSMONEY 140 + EXTRAOFFSET // +25
#define OFFSET_PRIMARYWEAPON 141 + EXTRAOFFSET // +25
@ -205,6 +207,10 @@
#define AMD64_STATIONARY_NO 2
#define AMD64_STATIONARY_YES 3
#define CS_ARMOR_NONE 0
#define CS_ARMOR_KEVLAR 1
#define CS_ARMOR_ASSAULTSUIT 2
enum CS_Internal_Models {
CS_DONTCHANGE = 0,
CS_CT_URBAN = 1,

View File

@ -176,6 +176,20 @@ native cs_get_user_driving(index);
*/
native cs_get_user_stationary(index);
/* Returns armor value and sets armor type in second parameter.
*/
enum CsArmorType {
CS_ARMOR_NONE = 0, // no armor
CS_ARMOR_KEVLAR = 1, // armor
CS_ARMOR_VESTHELM = 2 // armor and helmet
};
native cs_get_user_armor(index, CsArmorType:armortype);
/* Use this instead of fun's set_user_armor.
* Appropriate message to update client's HUD will be sent if armortype is kevlar or vesthelm.
*/
native cs_set_user_armor(index, armorvalue, CsArmorType:armortype);
/* Returns 1 if specified weapon is in burst mode.
*/
native cs_get_weapon_burst(index);