cs_get_user_backpackammo cs_set_user_backpackammo

This commit is contained in:
Johnny Bergström 2004-02-23 12:53:07 +00:00
parent 7471a45bf4
commit 6ffc9c7b49
2 changed files with 342 additions and 73 deletions

View File

@ -1,3 +1,5 @@
#include "cstrike.h"
/* AMX Mod X
* Counter-Strike Module
*
@ -31,15 +33,7 @@
* version.
*/
#include "cstrike.h"
/*
*/
/*
Utils first
*/
// Utils first
bool isplayer(AMX* amx, edict_t* pPlayer) {
bool player = false;
@ -54,6 +48,7 @@ bool isplayer(AMX* amx, edict_t* pPlayer) {
return player;
}
// Then natives
static cell AMX_NATIVE_CALL cs_set_user_money(AMX *amx, cell *params) // cs_set_user_money(index, money, flash = 1); = 3 arguments
{
@ -710,6 +705,190 @@ static cell AMX_NATIVE_CALL cs_set_user_defusekit(AMX *amx, cell *params) // cs_
return 1;
}
static cell AMX_NATIVE_CALL cs_get_user_backpackammo(AMX *amx, cell *params) // cs_get_user_backpackammo(index, weapon); = 2 params
{
// Get amount of ammo in a user's backpack for a specific weapon type.
// params[1] = user index
// params[2] = weapon, as in CSW_*
// Valid entity should be within range
if (params[1] < 1 || params[1] > gpGlobals->maxClients)
{
AMX_RAISEERROR(amx, AMX_ERR_NATIVE);
return 0;
}
// Make into edict pointer
edict_t *pPlayer = INDEXENT(params[1]);
// Check entity validity
if (FNullEnt(pPlayer)) {
AMX_RAISEERROR(amx, AMX_ERR_NATIVE);
return 0;
}
int offset;
switch (params[2]) {
case CSW_AWP:
offset = OFFSET_AWM_AMMO;
break;
case CSW_SCOUT:
case CSW_AK47:
case CSW_G3SG1:
offset = OFFSET_SCOUT_AMMO;
break;
case CSW_M249:
offset = OFFSET_PARA_AMMO;
break;
case CSW_FAMAS:
case CSW_M4A1:
case CSW_AUG:
case CSW_SG550:
case CSW_GALI:
case CSW_SG552:
offset = OFFSET_FAMAS_AMMO;
break;
case CSW_M3:
case CSW_XM1014:
offset = OFFSET_M3_AMMO;
break;
case CSW_USP:
case CSW_UMP45:
case CSW_MAC10:
offset = OFFSET_USP_AMMO;
break;
case CSW_FIVESEVEN:
case CSW_P90:
offset = OFFSET_FIVESEVEN_AMMO;
break;
case CSW_DEAGLE:
offset = OFFSET_DEAGLE_AMMO;
break;
case CSW_P228:
offset = OFFSET_P228_AMMO;
break;
case CSW_GLOCK18:
case CSW_MP5NAVY:
case CSW_TMP:
case CSW_ELITE:
offset = OFFSET_GLOCK_AMMO;
break;
case CSW_FLASHBANG:
offset = OFFSET_FLASH_AMMO;
break;
case CSW_HEGRENADE:
offset = OFFSET_HE_AMMO;
break;
case CSW_SMOKEGRENADE:
offset = OFFSET_SMOKE_AMMO;
break;
case CSW_C4:
offset = OFFSET_C4_AMMO;
break;
default:
AMX_RAISEERROR(amx, AMX_ERR_NATIVE);
return 0;
}
return (int)*((int *)pPlayer->pvPrivateData + offset);
return 0;
}
static cell AMX_NATIVE_CALL cs_set_user_backpackammo(AMX *amx, cell *params) // cs_set_user_backpackammo(index, weapon, amount); = 3 params
{
// Set amount of ammo in a user's backpack for a specific weapon type.
// params[1] = user index
// params[2] = weapon, as in CSW_*
// params[3] = new amount
// Valid entity should be within range
if (params[1] < 1 || params[1] > gpGlobals->maxClients)
{
AMX_RAISEERROR(amx, AMX_ERR_NATIVE);
return 0;
}
// Make into edict pointer
edict_t *pPlayer = INDEXENT(params[1]);
// Check entity validity
if (FNullEnt(pPlayer)) {
AMX_RAISEERROR(amx, AMX_ERR_NATIVE);
return 0;
}
int offset;
switch (params[2]) {
case CSW_AWP:
offset = OFFSET_AWM_AMMO;
break;
case CSW_SCOUT:
case CSW_AK47:
case CSW_G3SG1:
offset = OFFSET_SCOUT_AMMO;
break;
case CSW_M249:
offset = OFFSET_PARA_AMMO;
break;
case CSW_FAMAS:
case CSW_M4A1:
case CSW_AUG:
case CSW_SG550:
case CSW_GALI:
case CSW_SG552:
offset = OFFSET_FAMAS_AMMO;
break;
case CSW_M3:
case CSW_XM1014:
offset = OFFSET_M3_AMMO;
break;
case CSW_USP:
case CSW_UMP45:
case CSW_MAC10:
offset = OFFSET_USP_AMMO;
break;
case CSW_FIVESEVEN:
case CSW_P90:
offset = OFFSET_FIVESEVEN_AMMO;
break;
case CSW_DEAGLE:
offset = OFFSET_DEAGLE_AMMO;
break;
case CSW_P228:
offset = OFFSET_P228_AMMO;
break;
case CSW_GLOCK18:
case CSW_MP5NAVY:
case CSW_TMP:
case CSW_ELITE:
offset = OFFSET_GLOCK_AMMO;
break;
case CSW_FLASHBANG:
offset = OFFSET_FLASH_AMMO;
break;
case CSW_HEGRENADE:
offset = OFFSET_HE_AMMO;
break;
case CSW_SMOKEGRENADE:
offset = OFFSET_SMOKE_AMMO;
break;
case CSW_C4:
offset = OFFSET_C4_AMMO;
break;
default:
AMX_RAISEERROR(amx, AMX_ERR_NATIVE);
return 0;
}
(int)*((int *)pPlayer->pvPrivateData + offset) = params[3];
return 1;
}
AMX_NATIVE_INFO cstrike_Exports[] = {
{"cs_set_user_money", cs_set_user_money},
{"cs_get_user_money", cs_get_user_money},
@ -728,6 +907,8 @@ AMX_NATIVE_INFO cstrike_Exports[] = {
{"cs_set_user_plant", cs_set_user_plant},
{"cs_get_user_defusekit", cs_get_user_defusekit},
{"cs_set_user_defusekit", cs_set_user_defusekit},
{"cs_get_user_backpackammo", cs_get_user_backpackammo},
{"cs_set_user_backpackammo", cs_set_user_backpackammo},
{NULL, NULL}
};
@ -759,6 +940,11 @@ C_DLLEXPORT int Meta_Attach(PLUG_LOADTIME now, META_FUNCTIONS *pFunctionTable, m
memcpy(pFunctionTable, &gMetaFunctionTable, sizeof(META_FUNCTIONS));
gpGamedllFuncs = pGamedllFuncs;
// Init stuff here
//g_msgMoney = GET_USER_MSG_ID(PLID, "Money", NULL);
//g_msgTextMsg = GET_USER_MSG_ID(PLID, "TextMsg", NULL);
//g_msgStatusIcon = GET_USER_MSG_ID(PLID, "StatusIcon", NULL);
return(TRUE);
}

View File

@ -31,16 +31,17 @@
* version.
*/
// cstrike MODULE TO DO HERE: http://www.amxmodx.org/forums/viewtopic.php?t=45
#include <extdll.h>
#include <meta_api.h>
#include <modules.h>
// Check later if all of these really are needed!
meta_globals_t *gpMetaGlobals; // Variables provided to plugins.
gamedll_funcs_t *gpGamedllFuncs; // Pair of function tables provided by game DLL.
mutil_funcs_t *gpMetaUtilFuncs; // Meta Utility Function table type.
enginefuncs_t g_engfuncs; // Engine hands this to DLLs for functionality callbacks
globalvars_t *gpGlobals; // JGHG says: contains info on server, like maxclients, (time?) etc, stringbase is here :-) seems to be used with entity classnames...
globalvars_t *gpGlobals; // JGHG says: contains info on server, like maxcliens, (time?) etc, stringbase is here :-) seems to be used with entity classnames...
// Must provide at least one of these...
static META_FUNCTIONS gMetaFunctionTable; /* = {
@ -73,6 +74,22 @@ pfnmodule_engine_g* g_engModuleFunc;
#define OFFSET_DEFUSE_PLANT 193 + 5
#define OFFSET_VIP 215 + 5
#define OFFSET_BUYZONE 241 + 5
#define OFFSET_AWM_AMMO 382 + 5
#define OFFSET_SCOUT_AMMO 383 + 5
#define OFFSET_PARA_AMMO 384 + 5
#define OFFSET_FAMAS_AMMO 385 + 5
#define OFFSET_M3_AMMO 386 + 5
#define OFFSET_USP_AMMO 387 + 5
#define OFFSET_FIVESEVEN_AMMO 388 + 5
#define OFFSET_DEAGLE_AMMO 389 + 5
#define OFFSET_P228_AMMO 390 + 5
#define OFFSET_GLOCK_AMMO 391 + 5
#define OFFSET_FLASH_AMMO 392 + 5
#define OFFSET_HE_AMMO 393 + 5
#define OFFSET_SMOKE_AMMO 394 + 5
#define OFFSET_C4_AMMO 395 + 5
#define OFFSET_CSDEATHS 449 + 5
#define OFFSET_HOSTAGEID 487 + 5
#else
@ -83,14 +100,76 @@ pfnmodule_engine_g* g_engModuleFunc;
#define OFFSET_DEFUSE_PLANT 193
#define OFFSET_VIP 215
#define OFFSET_BUYZONE 241
#define OFFSET_AWM_AMMO 382
#define OFFSET_SCOUT_AMMO 383
#define OFFSET_PARA_AMMO 384
#define OFFSET_FAMAS_AMMO 385
#define OFFSET_M3_AMMO 386
#define OFFSET_USP_AMMO 387
#define OFFSET_FIVESEVEN_AMMO 388
#define OFFSET_DEAGLE_AMMO 389
#define OFFSET_P228_AMMO 390
#define OFFSET_GLOCK_AMMO 391
#define OFFSET_FLASH_AMMO 392
#define OFFSET_HE_AMMO 393
#define OFFSET_SMOKE_AMMO 394
#define OFFSET_C4_AMMO 395
#define OFFSET_CSDEATHS 449
#define OFFSET_HOSTAGEID 487
#endif // defined __linux__
// Offsets of ammo amount in player entities
/*
382 int awm
383 int scout, ak, g3
384 int para
385 int famas, m4a1, aug, sg550, galil, sg552
386 int m3, xm
387 int usp, ump, mac
388 int fiveseven, p90
389 int deagle
390 int p228
391 int glock, mp5, tmp, elites
392 int flash
393 int he
394 int smoke
395 int c4
*/
// Ids of weapons in CS
#define CSW_P228 1
//#define CSW_SHIELD 2
#define CSW_SCOUT 3
#define CSW_HEGRENADE 4
#define CSW_XM1014 5
#define CSW_C4 6
#define CSW_MAC10 7
#define CSW_AUG 8
#define CSW_SMOKEGRENADE 9
#define CSW_ELITE 10
#define CSW_FIVESEVEN 11
#define CSW_UMP45 12
#define CSW_SG550 13
#define CSW_GALI 14
#define CSW_FAMAS 15
#define CSW_USP 16
#define CSW_GLOCK18 17
#define CSW_AWP 18
#define CSW_MP5NAVY 19
#define CSW_M249 20
#define CSW_M3 21
#define CSW_M4A1 22
#define CSW_TMP 23
#define CSW_G3SG1 24
#define CSW_FLASHBANG 25
#define CSW_DEAGLE 26
#define CSW_SG552 27
#define CSW_AK47 28
//#define CSW_KNIFE 29
#define CSW_P90 30
#define M4A1_UNSILENCED 0
#define M4A1_SILENCED 4
@ -138,4 +217,8 @@ module_info_s module_info = {
AMX_INTERFACE_VERSION,
RELOAD_MODULE,
};
//int g_msgMoney;
//int g_msgTextMsg;
//int g_msgStatusIcon;
// Globals above