diff --git a/dlls/cstrike/cstrike.cpp b/dlls/cstrike/cstrike.cpp index 88d2a0f3..c0511816 100755 --- a/dlls/cstrike/cstrike.cpp +++ b/dlls/cstrike/cstrike.cpp @@ -1,45 +1,39 @@ -/* AMX Mod X -* Counter-Strike Module -* -* by the AMX Mod X Development Team -* -* This file is part of AMX Mod X. -* -* -* This program is free software; you can redistribute it and/or modify it -* under the terms of the GNU General Public License as published by the -* Free Software Foundation; either version 2 of the License, or (at -* your option) any later version. -* -* This program is distributed in the hope that it will be useful, but -* WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -* General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program; if not, write to the Free Software Foundation, -* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ - #include "cstrike.h" -/* +/* AMX Mod X + * Counter-Strike Module + * + * by the AMX Mod X Development Team + * + * This file is part of AMX Mod X. + * + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * In addition, as a special exception, the author gives permission to + * link the code of this program with the Half-Life Game Engine ("HL + * Engine") and Modified Game Libraries ("MODs") developed by Valve, + * L.L.C ("Valve"). You must obey the GNU General Public License in all + * respects for all of the code used other than the HL Engine and MODs + * from Valve. If you modify this file, you may extend this exception + * to your version of the file, but you are not obligated to do so. If + * you do not wish to do so, delete this exception statement from your + * version. + */ -*/ - -/* - 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); } diff --git a/dlls/cstrike/cstrike.h b/dlls/cstrike/cstrike.h index b35e4fb6..c5c8757f 100755 --- a/dlls/cstrike/cstrike.h +++ b/dlls/cstrike/cstrike.h @@ -1,46 +1,47 @@ -/* AMX Mod X -* Counter-Strike Module -* -* by the AMX Mod X Development Team -* -* This file is part of AMX Mod X. -* -* -* This program is free software; you can redistribute it and/or modify it -* under the terms of the GNU General Public License as published by the -* Free Software Foundation; either version 2 of the License, or (at -* your option) any later version. -* -* This program is distributed in the hope that it will be useful, but -* WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -* General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program; if not, write to the Free Software Foundation, -* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ + /* AMX Mod X + * Counter-Strike Module + * + * by the AMX Mod X Development Team + * + * This file is part of AMX Mod X. + * + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * In addition, as a special exception, the author gives permission to + * link the code of this program with the Half-Life Game Engine ("HL + * Engine") and Modified Game Libraries ("MODs") developed by Valve, + * L.L.C ("Valve"). You must obey the GNU General Public License in all + * respects for all of the code used other than the HL Engine and MODs + * from Valve. If you modify this file, you may extend this exception + * to your version of the file, but you are not obligated to do so. If + * you do not wish to do so, delete this exception statement from your + * version. + */ + +// cstrike MODULE TO DO HERE: http://www.amxmodx.org/forums/viewtopic.php?t=45 #include #include #include -// 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