Код:
/* CREDITS */
/* ConnorMcLeod - thx code "Reloaded Weapons On New Round" and "Client Buy" */
#include <amxmodx>
#include <cstrike>
#include <fakemeta>
#include <hamsandwich>
#pragma semicolon 1
#define PLUGIN_NAME "[ALL] Bpammo"
#define PLUGIN_VERS "1.0"
#define PLUGIN_AUTH "ConnorMcLeod | NIXON"
#define linux_offset_weapon 4
#define linux_offset_player 5
#define m_iID 43
#define m_pNext 42
#define m_iMenu 205
#define m_iTeams 114
#define m_fInReload 54
#define m_flNextAttack 83
#define m_rgpPlayerItems_Slot1 368
#define m_rgpPlayerItems_Slot2 369
#define cs_get_user_menu(%0) get_pdata_int(%0, m_iMenu, linux_offset_player)
enum {
CSW_DEFUSER = 33,
CSW_NVGS,
CSW_SHIELD,
CSW_PRIMAMMO,
CSW_SECAMMO
};
enum _:iMenus {
Menu_Buy = 4,
Menu_BuyPistol = 5,
Menu_BuyRifle = 6,
Menu_BuyMachineGun = 7,
Menu_BuyShotgun = 8,
Menu_BuySubMachineGun = 9
};
new const g_iMenuItemsTe[][] = {
{0, 0, 0, 0, 0, 0, CSW_PRIMAMMO, CSW_SECAMMO, 0},
{0, CSW_GLOCK18, CSW_USP, CSW_P228, CSW_DEAGLE, CSW_ELITE, 0, 0, 0},
{0, CSW_GALIL, CSW_AK47, CSW_SCOUT, CSW_SG552, CSW_AWP, CSW_G3SG1, 0, 0},
{0, CSW_M249, 0, 0, 0, 0, 0, 0, 0},
{0, CSW_M3, CSW_XM1014, 0, 0, 0, 0, 0, 0},
{0, CSW_MAC10, CSW_MP5NAVY, CSW_UMP45, CSW_P90, 0, 0, 0, 0},
{0, CSW_VEST, CSW_VESTHELM, CSW_FLASHBANG, CSW_HEGRENADE, CSW_SMOKEGRENADE, CSW_NVGS, 0, 0} /* Menu_BuyItem */
};
new const g_iMenuItemsCt[][] = {
{0, 0, 0, 0, 0, 0, CSW_PRIMAMMO, CSW_SECAMMO, 0},
{0, CSW_GLOCK18, CSW_USP, CSW_P228, CSW_DEAGLE, CSW_FIVESEVEN, 0, 0, 0},
{0, CSW_FAMAS, CSW_SCOUT, CSW_M4A1, CSW_AUG, CSW_SG550, CSW_AWP, 0, 0},
{0, CSW_M249, 0, 0, 0, 0, 0, 0, 0},
{0, CSW_M3, CSW_XM1014, 0, 0, 0, 0, 0, 0},
{0, CSW_TMP, CSW_MP5NAVY, CSW_UMP45, CSW_P90, 0, 0, 0, 0},
{0, CSW_VEST, CSW_VESTHELM, CSW_FLASHBANG, CSW_HEGRENADE, CSW_SMOKEGRENADE, CSW_NVGS, CSW_DEFUSER, CSW_SHIELD} /* Menu_BuyItem */
};
enum _:WEAPON_TYPE {
NAME[64],
CSW,
BPAMMO
};
new const g_iWeaponBpammo[][WEAPON_TYPE] = {
{"", 0, 0}, // none
{"p228", CSW_P228, 52}, // p228 1
{"228compact", CSW_P228, 52}, // p228 2
{"scout", CSW_SCOUT, 90}, // scout 3
{"hegren", CSW_HEGRENADE, 0}, // hegren 4
{"xm1014", CSW_XM1014, 32}, // xm1014 5
{"autoshotgun", CSW_XM1014, 32}, // xm1014 6
{"mac", CSW_MAC10, 100}, // mac10 7
{"aug", CSW_AUG, 90}, // aug 8
{"bullpup", CSW_AUG, 90}, // aug 9
{"elites", CSW_ELITE, 120}, // elites 10
{"fn57", CSW_FIVESEVEN, 100}, // 5seven 11
{"ump45", CSW_UMP45, 100}, // ump45 12
{"sg550", CSW_SG550, 90}, // gs550 13
{"galil", CSW_GALIL, 90}, // galil 14
{"famas", CSW_FAMAS, 90}, // famas 15
{"km45", CSW_USP, 100}, // usp 16
{"glock", CSW_GLOCK18, 120}, // glock 17
{"awp", CSW_AWP, 30}, // awp 18
{"mp5", CSW_MP5NAVY, 120}, // navy 19
{"m249", CSW_M249, 200}, // m249 20
{"m3", CSW_M3, 32}, // m3 21
{"m4a1", CSW_M4A1, 90}, // m4a1 22
{"12gauge", CSW_M3, 32}, // m3 23
{"g3sg1", CSW_G3SG1, 90}, // g3sg1 24
{"deagle", CSW_DEAGLE, 35},//deagle 25
{"nighthawk", CSW_DEAGLE, 35},//deagle 26
{"krieg550", CSW_SG550, 90}, // gs550 27
{"cv47", CSW_AK47, 90}, //ak47 28
{"smg", CSW_MP5NAVY, 120}, // navy 29
{"p90", CSW_P90, 100}, // p90 30
{"c90", CSW_P90, 100}, // p90 31
{"tmp", CSW_TMP, 120}, // tmp 32
{"fiveseven", CSW_FIVESEVEN, 100}, // 5seven 33
{"mp", CSW_TMP, 120}, // tmp 34
{"defender", CSW_GALIL, 90}, // galil 35
{"d3au1", CSW_G3SG1, 90}, // g3sg1 36
{"flash", CSW_FLASHBANG, 0}, // flashbang 37
{"9x19mm", CSW_GLOCK18, 120}, // glock 38
{"magnum", CSW_AWP, 30}, // awp 39
{"sg552", CSW_DEAGLE, 35},//sg552 40
{"krieg552", CSW_DEAGLE, 35},//sg552 41
{"usp", CSW_USP, 100}, // usp 42
{"clarion", CSW_FAMAS, 90}, // famas 43
{"sgren", CSW_SMOKEGRENADE, 0}, // smokegrenade 45
{"ak47", CSW_AK47, 90} //ak47 45
};
public plugin_init() {
register_plugin(PLUGIN_NAME, PLUGIN_VERS, PLUGIN_AUTH);
RegisterHam(Ham_Spawn, "player", "HamPlayerSpawnPost", true);
register_clcmd("menuselect", "ClCmd_MenuSelect");
}
public client_command(id) {
if(is_user_alive(id)) {
new szCommand[13];
if(read_argv(0, szCommand, charsmax(szCommand)) < 12)
return fnCheckBuyCmd(id, szCommand);
}
return PLUGIN_CONTINUE;
}
public CS_InternalCommand(id, const szCommand[]) {
if(is_user_alive(id)) {
new szCmd[13];
if(copy(szCmd, charsmax(szCmd), szCommand) < 12)
return fnCheckBuyCmd(id, szCmd);
}
return PLUGIN_CONTINUE;
}
public HamPlayerSpawnPost(id) {
if(is_user_alive(id)) {
new Float: flNextAttack = get_pdata_float(id, m_flNextAttack, linux_offset_player);
set_pdata_float(id, m_flNextAttack, -0.001, linux_offset_player);
for(new iPlayerItems = m_rgpPlayerItems_Slot1, iWeapon, iWeaponID; iPlayerItems <= m_rgpPlayerItems_Slot2; iPlayerItems++) {
iWeapon = get_pdata_cbase(id, iPlayerItems, linux_offset_player);
while(pev_valid(iWeapon)) {
iWeaponID = get_pdata_int(iWeapon, m_iID, linux_offset_weapon);
cs_set_user_bpammo(id, g_iWeaponBpammo[iWeaponID][CSW], g_iWeaponBpammo[iWeaponID][BPAMMO]);
set_pdata_int(iWeapon, m_fInReload, 1, linux_offset_weapon);
ExecuteHamB(Ham_Item_PostFrame, iWeapon);
cs_set_user_bpammo(id, g_iWeaponBpammo[iWeaponID][CSW], g_iWeaponBpammo[iWeaponID][BPAMMO]);
iWeapon = get_pdata_cbase(iWeapon, m_pNext, linux_offset_weapon);
break;
}
}
set_pdata_float(id, m_flNextAttack, flNextAttack, linux_offset_player);
}
}
public ClCmd_MenuSelect(id) {
if(!is_user_alive(id))
return PLUGIN_CONTINUE;
new szSlot[3];
if(read_argv(1, szSlot, charsmax(szSlot)) == 1) {
new iSlot = szSlot[0] - '0';
if(iSlot && iSlot <= 8) {
new iMenu = cs_get_user_menu(id);
if(Menu_Buy <= iMenu <= Menu_BuySubMachineGun) {
new iItem;
switch(cs_get_user_team(id)) {
case CS_TEAM_T: iItem = g_iMenuItemsTe[iMenu - 4][iSlot];
case CS_TEAM_CT: iItem = g_iMenuItemsCt[iMenu - 4][iSlot];
}
if(iItem) return fnCanBuyItem(id, iItem);
}
}
}
return PLUGIN_CONTINUE;
}
stock fnCheckBuyCmd(id, szCmd[]) {
new iItem = fnGetAliasID(szCmd);
if(iItem) return fnCanBuyItem(id, iItem);
return PLUGIN_CONTINUE;
}
stock fnGetAliasID(szAlias[]) {
static Trie:tAliasID = Invalid_Trie;
if(tAliasID == Invalid_Trie) {
tAliasID = TrieCreate();
for(new i = 1; i < sizeof(g_iWeaponBpammo); i++) {
TrieSetCell(tAliasID, g_iWeaponBpammo[i][NAME], g_iWeaponBpammo[i][CSW]);
}
}
strtolower(szAlias);
new iID;
if(TrieGetCell(tAliasID, szAlias, iID)) return iID;
return 0;
}
stock fnCanBuyItem(id, iItem) {
switch(iItem) {
default: cs_set_user_bpammo(id, g_iWeaponBpammo[iItem][CSW], g_iWeaponBpammo[iItem][BPAMMO]);
}
return PLUGIN_CONTINUE;
}