引用 | 編輯
牙京
2009-04-22 12:04 |
3樓
▲ ▼ |
複製程式
#include <amxmodx> #include <amxmisc> #include <cstrike> #define BUY_BPAMMO "items/9mmclip1.wav" new cvar_bpcost, cvar_admin new g_msgAmmoPickup new const PLUGIN_NAME[] = "BP Ammo" new const PLUGIN_VERSION[] = "v0.4" new const AUTHOR[] = "YKH =]" // Admin const ACCESS_FLAG = ADMIN_LEVEL_A // Admin Amount of ammo to give when buying additional clips for weapons new const MAXBPAMMO[] = { -1, 104, -1, 180, -1, 64, 1, 200, 180, -1, 240, 200, 200, 180, 180, 180, 200, 240, 60, 240, 600, 64, 180, 240, 180, -1, 70, 180, 180, -1, 200 } // Max BP ammo for weapons(player) new const MAXBPAMMO2[] = { -1, 52, -1, 90, -1, 32, 1, 100, 90, -1, 120, 100, 100, 90, 90, 90, 100, 120, 30, 120, 200, 32, 90, 120, 90, -1, 35, 90, 90, -1, 100 } // Admin Amount of ammo to give when buying additional clips for weapons new const BUYAMMO[] = { -1, 52, -1, 90, -1, 32, 1, 100, 90, -1, 120, 100, 100, 90, 90, 90, 100, 120, 30, 120, 200, 32, 90, 120, 90, -1, 36, 90, 90, -1, 100 } // Amount of ammo to give when buying additional clips for weapons new const BUYAMMO2[] = { -1, 13, -1, 30, -1, 8, -1, 12, 30, -1, 30, 50, 12, 30, 30, 30, 12, 30, 10, 30, 30, 8, 30, 30, 30, -1, 7, 30, 30, -1, 50 } // Ammo IDs for weapons new const AMMOID[] = { -1, 9, -1, 2, 12, 5, 14, 6, 4, 13, 10, 7, 6, 4, 4, 4, 6, 10, 1, 10, 3, 5, 4, 10, 2, 11, 8, 4, 2, -1, 7 } const PRIMARY_WEAPONS_BIT_SUM = (1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_AUG)|(1<<CSW_UMP45)|(1<<CSW_SG550)|(1<<CSW_GALIL)|(1<<CSW_FAMAS)|(1<<CSW_AWP)|(1<<CSW_MP5NAVY)|(1<<CSW_M249)|(1<<CSW_M3)|(1<<CSW_M4A1)|(1<<CSW_TMP)|(1<<CSW_G3SG1)|(1<<CSW_SG552)|(1<<CSW_AK47)|(1<<CSW_P90) const SECONDARY_WEAPONS_BIT_SUM = (1<<CSW_P228)|(1<<CSW_ELITE)|(1<<CSW_FIVESEVEN)|(1<<CSW_USP)|(1<<CSW_GLOCK18)|(1<<CSW_DEAGLE) public plugin_init() { register_plugin(PLUGIN_NAME, PLUGIN_VERSION, AUTHOR) register_event("HLTV", "event_round_start", "a", "1=0", "2=0") cvar_bpcost = register_cvar("bpammo_cost", "30") cvar_admin = register_cvar("bp_admin", "0") register_clcmd("buyammo1", "clcmd_buyammo1") register_clcmd("buyammo2", "clcmd_buyammo2") g_msgAmmoPickup = get_user_msgid("AmmoPickup") // Round Start display message set_task(1.0, "event_round_start") } public plugin_precache() { precache_sound(BUY_BPAMMO); } public clcmd_buyammo1(id) { // Not alive or infinite ammo setting enabled if (!is_user_alive(id) || !cs_get_user_buyzone(id)) return PLUGIN_HANDLED; new money = cs_get_user_money(id) new cost = get_pcvar_num(cvar_bpcost) // Get user weapons static weapons[32], num, i, currentammo, weaponid num = 0 // reset passed weapons count (bugfix) get_user_weapons(id, weapons, num) // Not enoungh Money ? if (money < cost) return PLUGIN_HANDLED; // Loop through them and give the right ammo type for (i = 0; i < num; i++) { // Prevents re-indexing the array weaponid = weapons[i] if ((1<<weaponid) & PRIMARY_WEAPONS_BIT_SUM) // primary { // Get current ammo of the weapon currentammo = cs_get_user_bpammo(id, weaponid) if (get_pcvar_num(cvar_admin) == 1) { if (get_user_flags(id) & ACCESS_FLAG) { // Check if we are close to the BP ammo limit if (currentammo <= MAXBPAMMO[weaponid]-BUYAMMO[weaponid]) { // Flash ammo in hud message_begin(MSG_ONE_UNRELIABLE, g_msgAmmoPickup, _, id) write_byte(AMMOID[weaponid]) // ammo id write_byte(BUYAMMO[weaponid]) // ammo amount message_end() // Increase BP ammo emit_sound(id, CHAN_VOICE, BUY_BPAMMO, 0.9, ATTN_STATIC, 0, PITCH_NORM)// Play sounds cs_set_user_bpammo(id, weaponid, currentammo + BUYAMMO[weaponid]) cs_set_user_money(id, money - cost) } else { // Flash ammo in hud message_begin(MSG_ONE_UNRELIABLE, g_msgAmmoPickup, _, id) write_byte(AMMOID[weaponid]) // ammo id write_byte(MAXBPAMMO[weaponid]-currentammo) // ammo amount message_end() // Reached the limit cs_set_user_bpammo(id, weaponid, MAXBPAMMO[weaponid]) } } else { // Check if we are close to the BP ammo limit if (currentammo <= MAXBPAMMO2[weaponid]-BUYAMMO2[weaponid]) { // Flash ammo in hud message_begin(MSG_ONE_UNRELIABLE, g_msgAmmoPickup, _, id) write_byte(AMMOID[weaponid]) // ammo id write_byte(BUYAMMO2[weaponid]) // ammo amount message_end() // Increase BP ammo emit_sound(id, CHAN_VOICE, BUY_BPAMMO, 0.9, ATTN_STATIC, 0, PITCH_NORM)// Play sounds cs_set_user_bpammo(id, weaponid, currentammo + BUYAMMO[weaponid]) cs_set_user_money(id, money - cost) } else { // Flash ammo in hud message_begin(MSG_ONE_UNRELIABLE, g_msgAmmoPickup, _, id) write_byte(AMMOID[weaponid]) // ammo id write_byte(MAXBPAMMO2[weaponid]-currentammo) // ammo amount message_end() // Reached the limit cs_set_user_bpammo(id, weaponid, MAXBPAMMO2[weaponid]) } } } else { // Check if we are close to the BP ammo limit if (currentammo <= MAXBPAMMO[weaponid]-BUYAMMO[weaponid]) { // Flash ammo in hud message_begin(MSG_ONE_UNRELIABLE, g_msgAmmoPickup, _, id) write_byte(AMMOID[weaponid]) // ammo id write_byte(BUYAMMO[weaponid]) // ammo amount message_end() // Increase BP ammo emit_sound(id, CHAN_VOICE, BUY_BPAMMO, 0.9, ATTN_STATIC, 0, PITCH_NORM)// Play sounds cs_set_user_bpammo(id, weaponid, currentammo + BUYAMMO[weaponid]) cs_set_user_money(id, money - cost) } else { // Flash ammo in hud message_begin(MSG_ONE_UNRELIABLE, g_msgAmmoPickup, _, id) write_byte(AMMOID[weaponid]) // ammo id write_byte(MAXBPAMMO[weaponid]-currentammo) // ammo amount message_end() // Reached the limit cs_set_user_bpammo(id, weaponid, MAXBPAMMO[weaponid]) } } } } return PLUGIN_HANDLED; } public clcmd_buyammo2(id) { // Not alive or infinite ammo setting enabled if (!is_user_alive(id) || !cs_get_user_buyzone(id)) return PLUGIN_HANDLED; new money = cs_get_user_money(id) new cost = get_pcvar_num(cvar_bpcost) // Get user weapons static weapons[32], num, i, currentammo, weaponid num = 0 // reset passed weapons count (bugfix) get_user_weapons(id, weapons, num) // Not enoungh Money ? if (money < cost) return PLUGIN_HANDLED; // Loop through them and give the right ammo type for (i = 0; i < num; i++) { // Prevents re-indexing the array weaponid = weapons[i] if ((1<<weaponid) & SECONDARY_WEAPONS_BIT_SUM) // secondary { // Get current ammo of the weapon currentammo = cs_get_user_bpammo(id, weaponid) if (get_pcvar_num(cvar_admin) == 1) { if (get_user_flags(id) & ACCESS_FLAG) { // Check if we are close to the BP ammo limit if (currentammo <= MAXBPAMMO[weaponid]-BUYAMMO[weaponid]) { // Flash ammo in hud message_begin(MSG_ONE_UNRELIABLE, g_msgAmmoPickup, _, id) write_byte(AMMOID[weaponid]) // ammo id write_byte(BUYAMMO[weaponid]) // ammo amount message_end() // Increase BP ammo emit_sound(id, CHAN_VOICE, BUY_BPAMMO, 0.9, ATTN_STATIC, 0, PITCH_NORM)// Play sounds cs_set_user_bpammo(id, weaponid, currentammo + BUYAMMO[weaponid]) cs_set_user_money(id, money - cost) } else { // Flash ammo in hud message_begin(MSG_ONE_UNRELIABLE, g_msgAmmoPickup, _, id) write_byte(AMMOID[weaponid]) // ammo id write_byte(MAXBPAMMO[weaponid]-currentammo) // ammo amount message_end() // Reached the limit cs_set_user_bpammo(id, weaponid, MAXBPAMMO[weaponid]) } } else { // Check if we are close to the BP ammo limit if (currentammo <= MAXBPAMMO2[weaponid]-BUYAMMO2[weaponid]) { // Flash ammo in hud message_begin(MSG_ONE_UNRELIABLE, g_msgAmmoPickup, _, id) write_byte(AMMOID[weaponid]) // ammo id write_byte(BUYAMMO2[weaponid]) // ammo amount message_end() // Increase BP ammo emit_sound(id, CHAN_VOICE, BUY_BPAMMO, 0.9, ATTN_STATIC, 0, PITCH_NORM)// Play sounds cs_set_user_bpammo(id, weaponid, currentammo + BUYAMMO[weaponid]) cs_set_user_money(id, money - cost) } else { // Flash ammo in hud message_begin(MSG_ONE_UNRELIABLE, g_msgAmmoPickup, _, id) write_byte(AMMOID[weaponid]) // ammo id write_byte(MAXBPAMMO2[weaponid]-currentammo) // ammo amount message_end() // Reached the limit cs_set_user_bpammo(id, weaponid, MAXBPAMMO2[weaponid]) } } } else { // Check if we are close to the BP ammo limit if (currentammo <= MAXBPAMMO[weaponid]-BUYAMMO[weaponid]) { // Flash ammo in hud message_begin(MSG_ONE_UNRELIABLE, g_msgAmmoPickup, _, id) write_byte(AMMOID[weaponid]) // ammo id write_byte(BUYAMMO[weaponid]) // ammo amount message_end() // Increase BP ammo emit_sound(id, CHAN_VOICE, BUY_BPAMMO, 0.9, ATTN_STATIC, 0, PITCH_NORM)// Play sounds cs_set_user_bpammo(id, weaponid, currentammo + BUYAMMO[weaponid]) cs_set_user_money(id, money - cost) } else { // Flash ammo in hud message_begin(MSG_ONE_UNRELIABLE, g_msgAmmoPickup, _, id) write_byte(AMMOID[weaponid]) // ammo id write_byte(MAXBPAMMO[weaponid]-currentammo) // ammo amount message_end() // Reached the limit cs_set_user_bpammo(id, weaponid, MAXBPAMMO[weaponid]) } } } } return PLUGIN_HANDLED; } public event_round_start() { set_task(5.0, "welcome_msg") } public welcome_msg() { // Show mod info client_print(0, print_chat, "[BP] **** %s %s by %s ****", PLUGIN_NAME, PLUGIN_VERSION, AUTHOR) } x0 |