搜索
查看: 2457|回复: 1

求一个回合结束后自动装好弹药的插件

[复制链接]
发表于 2008-8-31 17:42:12 | 显示全部楼层 |阅读模式 来自 中国–浙江–杭州
就是一回合打完后,大家都把枪里的子弹装满.
但是有个前提,备用子弹要足够.详细见例子

比如:
M4A1 打完一局后剩余12发,备用60发,则下回合变为剩余30发,备用42发.
M4A1 打完一局后剩余12发,备用10发,则下回合变为剩余22发,备用0发.

其他的枪也如此.
应该比较好实现.

想法来自CS:Source
发表于 2009-8-10 06:27:06 | 显示全部楼层 来自 中国–山东–济南
  1. #include <amxmodx>
  2. #include <cstrike>
  3. #include <fun>
  4. #include <engine>
  5. #include <fakemeta>

  6. new g_MaxBPAmmo[31] = {
  7.         0,
  8.         52,  //CSW_P228
  9.         0,
  10.         90,  //CSW_SCOUT
  11.         1,   //CSW_HEGRENADE
  12.         32,  //CSW_XM1014
  13.         1,   //CSW_C4
  14.         100, //CSW_MAC10
  15.         90,  //CSW_AUG
  16.         1,   //CSW_SMOKEGRENADE
  17.         120, //CSW_ELITE
  18.         100, //CSW_FIVESEVEN
  19.         100, //CSW_UMP45
  20.         90,  //CSW_SG550
  21.         90,  //CSW_GALIL
  22.         90,  //CSW_FAMAS
  23.         100, //CSW_USP
  24.         120, //CSW_GLOCK18
  25.         30,  //CSW_AWP
  26.         120, //CSW_MP5NAVY
  27.         200, //CSW_M249
  28.         32,  //CSW_M3
  29.         90,  //CSW_M4A1
  30.         120, //CSW_TMP
  31.         90,  //CSW_G3SG1
  32.         2,   //CSW_FLASHBANG
  33.         35,  //CSW_DEAGLE
  34.         90,  //CSW_SG552
  35.         90,  //CSW_AK47
  36.         0,   //CSW_KNIFE
  37.         100  //CSW_P90
  38. }

  39. new g_MaxClips[31] = {
  40.         0,
  41.         4, //CSW_P228
  42.         0,
  43.         3, //CSW_SCOUT
  44.         0, //CSW_HEGRENADE
  45.         4, //CSW_XM1014
  46.         0, //CSW_C4
  47.         9, //CSW_MAC10
  48.         3, //CSW_AUG
  49.         0, //CSW_SMOKEGRENADE
  50.         4, //CSW_ELITE
  51.         2, //CSW_FIVESEVEN
  52.         9, //CSW_UMP45
  53.         3, //CSW_SG550
  54.         3, //CSW_GALIL
  55.         3, //CSW_FAMAS
  56.         9, //CSW_USP
  57.         4, //CSW_GLOCK18
  58.         3, //CSW_AWP
  59.         4, //CSW_MP5NAVY
  60.         7, //CSW_M249
  61.         4, //CSW_M3
  62.         3, //CSW_M4A1
  63.         4, //CSW_TMP
  64.         3, //CSW_G3SG1
  65.         0, //CSW_FLASHBANG
  66.         5, //CSW_DEAGLE
  67.         3, //CSW_SG552
  68.         3, //CSW_AK47
  69.         0, //CSW_KNIFE
  70.         2  //CSW_P90
  71. }

  72. new g_ClipSize[31] = {
  73.         0,
  74.         13,  //CSW_P228
  75.         0,
  76.         10,  //CSW_SCOUT
  77.         0,   //CSW_HEGRENADE
  78.         7,   //CSW_XM1014
  79.         0,   //CSW_C4
  80.         30,  //CSW_MAC10
  81.         30,  //CSW_AUG
  82.         0,   //CSW_SMOKEGRENADE
  83.         30,  //CSW_ELITE
  84.         20,  //CSW_FIVESEVEN
  85.         25,  //CSW_UMP45
  86.         30,  //CSW_SG550
  87.         35,  //CSW_GALIL
  88.         25,  //CSW_FAMAS
  89.         12,  //CSW_USP
  90.         20,  //CSW_GLOCK18
  91.         10,  //CSW_AWP
  92.         30,  //CSW_MP5NAVY
  93.         100, //CSW_M249
  94.         8,   //CSW_M3
  95.         30,  //CSW_M4A1
  96.         30,  //CSW_TMP
  97.         20,  //CSW_G3SG1
  98.         0,   //CSW_FLASHBANG
  99.         7,   //CSW_DEAGLE
  100.         30,  //CSW_SG552
  101.         30,  //CSW_AK47
  102.         0,   //CSW_KNIFE
  103.         50   //CSW_P90
  104. }

  105. new g_AmmoType[31] = {
  106.         0,
  107.         9,  //CSW_P228
  108.         0,
  109.         2,  //CSW_SCOUT
  110.         12, //CSW_HEGRENADE
  111.         5,  //CSW_XM1014
  112.         14, //CSW_C4
  113.         6,  //CSW_MAC10
  114.         4,  //CSW_AUG
  115.         13, //CSW_SMOKEGRENADE
  116.         10, //CSW_ELITE
  117.         7,  //CSW_FIVESEVEN
  118.         6,  //CSW_UMP45
  119.         4,  //CSW_SG550
  120.         4,  //CSW_GALIL
  121.         4,  //CSW_FAMAS
  122.         6,  //CSW_USP
  123.         10, //CSW_GLOCK18
  124.         1,  //CSW_AWP
  125.         10, //CSW_MP5NAVY
  126.         3,  //CSW_M249
  127.         5,  //CSW_M3
  128.         4,  //CSW_M4A1
  129.         10, //CSW_TMP
  130.         2,  //CSW_G3SG1
  131.         11, //CSW_FLASHBANG
  132.         8,  //CSW_DEAGLE
  133.         4,  //CSW_SG552
  134.         2,  //CSW_AK47
  135.         0,  //CSW_KNIFE
  136.         7   //CSW_P90
  137. }

  138. new g_AmmoName[15][] = {
  139.         "",
  140.         "ammo_338magnum",
  141.         "ammo_762nato",
  142.         "ammo_556natobox",
  143.         "ammo_556nato",
  144.         "ammo_buckshot",
  145.         "ammo_45acp",
  146.         "ammo_57mm",
  147.         "ammo_50ae",
  148.         "ammo_357sig",
  149.         "ammo_9mm",
  150.         "",
  151.         "",
  152.         "",
  153.         ""
  154. }

  155. new bool:g_restart_attempt[33]
  156. new bool:g_HideGiveClips[33]
  157. new bool:g_FirstSpawn[33]
  158. new g_LastMessageID
  159. new g_LastMessageType
  160. new g_LastMessage[33]
  161. new g_LastWeapPickup[33]
  162. new bool:g_Spawned[33]
  163. new g_BoughtWeapon[33]

  164. new g_WeapPickupMsg
  165. new g_MoneyMsg

  166. new pv_fa_enable
  167. new pv_fa_altclips

  168. public plugin_init()
  169. {
  170.         register_plugin("Free ammo", "1.4", "asstolavista")
  171.         register_event("ResetHUD", "event_hud_reset", "be")
  172.         register_clcmd("fullupdate", "clcmd_fullupdate")
  173.         register_event("TextMsg", "event_restart_attempt", "a", "2=#Game_will_restart_in")
  174.         register_event("HLTV", "event_new_round", "a", "1=0", "2=0")
  175.         register_message(get_user_msgid("AmmoPickup"), "message_ammo_pickup")

  176.         g_WeapPickupMsg = get_user_msgid("WeapPickup")
  177.         g_MoneyMsg = get_user_msgid("Money")
  178.         register_forward(FM_MessageBegin, "forward_message_begin", 1)
  179.         register_forward(FM_WriteByte, "forward_write_byte", 1)

  180.         pv_fa_enable = register_cvar("fa_enable", "1")
  181.         pv_fa_altclips = register_cvar("fa_altclips", "0")
  182. }

  183. public client_connect(id)
  184. {
  185.         g_restart_attempt[id] = false
  186.         g_HideGiveClips[id] = false
  187.         g_FirstSpawn[id] = true
  188.         g_LastMessage[id] = 0
  189.         g_LastWeapPickup[id] = 0
  190.         g_Spawned[id] = false
  191.         g_BoughtWeapon[id] = 0
  192. }

  193. public client_disconnect(id)
  194. {
  195.         g_restart_attempt[id] = false
  196.         g_HideGiveClips[id] = false
  197.         g_FirstSpawn[id] = true
  198.         g_LastMessage[id] = 0
  199.         g_LastWeapPickup[id] = 0
  200.         g_Spawned[id] = false
  201.         g_BoughtWeapon[id] = 0
  202. }

  203. public clcmd_fullupdate()
  204. {
  205.         return PLUGIN_HANDLED
  206. }

  207. public event_restart_attempt()
  208. {
  209.         new players[32], num_players
  210.         get_players(players, num_players, "a")
  211.         for (new i; i < num_players; ++i)
  212.                 g_restart_attempt[players[i]] = true
  213. }

  214. public event_hud_reset(id)
  215. {
  216.         if (g_restart_attempt[id]) {
  217.                 g_restart_attempt[id] = false
  218.                 return
  219.         }
  220.         event_player_spawn(id)
  221. }

  222. public event_player_spawn(id)
  223. {
  224.         if (get_pcvar_num(pv_fa_enable) == 1) {
  225.                 g_HideGiveClips[id] = true
  226.                 g_Spawned[id] = true
  227.         }
  228. }

  229. public do_player_spawn(id)
  230. {
  231.         new weap_ids[32], num_weaps
  232.         get_user_weapons(id, weap_ids, num_weaps)
  233.         for (new i = 0; i < num_weaps; i++) {
  234.                 new weap_id = weap_ids[i]
  235.                 if (fill_weapon(id, weap_id)) {
  236.                         if (g_FirstSpawn[id]) {
  237.                                 if (get_pcvar_num(pv_fa_altclips) != 1)
  238.                                         cs_set_user_bpammo(id, weap_id, 0)
  239.                                 fill_bpammo_show(id, weap_id)
  240.                         }
  241.                         else
  242.                                 fill_bpammo(id, weap_id)
  243.                 }
  244.         }
  245.         g_FirstSpawn[id] = false
  246. }

  247. public event_new_round()
  248. {
  249.         if (get_pcvar_num(pv_fa_enable) == 1) {
  250.                 new players[32], num_players
  251.                 get_players(players, num_players, "a")
  252.                 for (new j = 0; j < num_players; j++) {
  253.                         new id = players[j]
  254.                         new weap_ids[32], num_weaps
  255.                         get_user_weapons(id, weap_ids, num_weaps)
  256.                         for (new i = 0; i < num_weaps; i++)
  257.                                 if (fill_weapon(id, weap_ids[i]))
  258.                                         fill_bpammo(id, weap_ids[i])
  259.                 }
  260.         }
  261. }

  262. public message_ammo_pickup(msg_id, id, ent)
  263. {
  264.         if (get_pcvar_num(pv_fa_enable) == 1) {
  265.                 if (g_HideGiveClips[id]) {
  266.                         g_HideGiveClips[id] = false
  267.                         return PLUGIN_HANDLED
  268.                 }
  269.         }
  270.         return PLUGIN_CONTINUE
  271. }

  272. public forward_message_begin(msg_dest, msg_type, const Float:ORIGIN[3], const ED)
  273. {
  274.         if (ED < 1 || ED > 32)
  275.                 return
  276.         new id = ED
  277.         if (msg_type == g_MoneyMsg && g_LastMessage[id] == g_WeapPickupMsg)
  278.                 event_weapon_buy(id, g_LastWeapPickup[id])
  279.         g_LastMessageID = id
  280.         g_LastMessageType = msg_type
  281.         g_LastMessage[id] = msg_type
  282. }

  283. public forward_write_byte(value)
  284. {
  285.         if (g_LastMessageType == g_WeapPickupMsg)
  286.                 g_LastWeapPickup[g_LastMessageID] = value
  287. }

  288. public event_weapon_buy(id, weap_id)
  289. {
  290.         g_BoughtWeapon[id] = weap_id
  291. }

  292. public do_weapon_buy(id, weap_id)
  293. {
  294.         if (fill_weapon(id, weap_id))
  295.                 fill_bpammo_show(id, weap_id)
  296. }

  297. public client_PreThink(id)
  298. {
  299.         if (get_pcvar_num(pv_fa_enable) == 1) {
  300.                 if (g_Spawned[id]) {
  301.                         g_Spawned[id] = false
  302.                         do_player_spawn(id)
  303.                 }
  304.                 if (g_BoughtWeapon[id] != 0) {
  305.                         new weap_id = g_BoughtWeapon[id]
  306.                         g_BoughtWeapon[id] = 0
  307.                         do_weapon_buy(id, weap_id)
  308.                 }
  309.         }
  310.         return PLUGIN_CONTINUE
  311. }

  312. public bool:weapon_has_ammo(weap_id)
  313. {
  314.         return g_AmmoName[g_AmmoType[weap_id]][0] != 0
  315. }

  316. public bool:fill_bpammo(id, weap_id)
  317. {
  318.         if (get_pcvar_num(pv_fa_altclips) == 1) {
  319.                 new ammo_clips = g_MaxClips[weap_id]
  320.                 if (weapon_has_ammo(weap_id)) {
  321.                         for (new i = 1; i <= ammo_clips; i++) {
  322.                                 g_HideGiveClips[id] = true
  323.                                 give_item(id, g_AmmoName[g_AmmoType[weap_id]])
  324.                         }
  325.                         g_HideGiveClips[id] = false
  326.                         return true
  327.                 }
  328.         }
  329.         else {
  330.                 new ammo = g_MaxBPAmmo[weap_id]
  331.                 if (weapon_has_ammo(weap_id)) {
  332.                         cs_set_user_bpammo(id, weap_id, ammo)
  333.                         g_HideGiveClips[id] = false
  334.                         return true
  335.                 }
  336.         }
  337.         return false
  338. }

  339. public bool:fill_weapon(id, weap_id)
  340. {
  341.         new clip_size = g_ClipSize[weap_id]
  342.         if (clip_size != 0) {
  343.                 new weap_name[41]
  344.                 get_weaponname(weap_id, weap_name, 40)
  345.                 new wpn = find_ent_by_owner(-1, weap_name, id)
  346.                 if (wpn != 0) {
  347.                         cs_set_weapon_ammo(wpn, clip_size)
  348.                         return true
  349.                 }
  350.         }
  351.         return false
  352. }

  353. public show_given_bpammo(id, weap_id, ammount)
  354. {
  355.         g_HideGiveClips[id] = false
  356.         if (ammount <= 0)
  357.                 return
  358.         message_begin(MSG_ONE, get_user_msgid("AmmoPickup"), {0,0,0}, id)
  359.         write_byte(g_AmmoType[weap_id])
  360.         write_byte(ammount)
  361.         message_end()
  362. }

  363. public bool:fill_bpammo_show(id, weap_id)
  364. {
  365.         new given_ammo = g_MaxBPAmmo[weap_id]
  366.         if (get_pcvar_num(pv_fa_altclips) != 1 && weapon_has_ammo(weap_id))
  367.                 given_ammo -= cs_get_user_bpammo(id, weap_id)
  368.         if (fill_bpammo(id, weap_id)) {
  369.                 show_given_bpammo(id, weap_id, given_ammo)
  370.                 return true
  371.         }
  372.         return false
  373. }

复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注个册吧

×
回复

使用道具 举报

游客
回复
您需要登录后才可以回帖 登录 | 注个册吧

快速回复 返回顶部 返回列表