HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. /* Plugin generated by AMXX-Studio */
  2. /* Based on: https://wiki.alliedmods.net/CS_WeaponList_Message_Dump */
  3.  
  4. #include <amxmodx>
  5. #include <amxmisc>
  6. #include <msg_weap_sprites_api_const>
  7.  
  8. #define PLUGIN "MSG Weapon Sprite API"
  9. #define VERSION "1.0"
  10. #define AUTHOR "Vieni"
  11.  
  12. new const gWeaponNameList[][] =
  13. {
  14. "", "weapon_p228", "", "weapon_scout", "weapon_hegrenade", "weapon_xm1014", "weapon_c4", "weapon_mac10",
  15. "weapon_aug", "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_ump45", "weapon_sg550",
  16. "weapon_galil", "weapon_famas", "weapon_usp", "weapon_glock18", "weapon_awp", "weapon_mp5navy", "weapon_m249",
  17. "weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_flashbang", "weapon_deagle", "weapon_sg552",
  18. "weapon_ak47", "weapon_knife", "weapon_p90"
  19. }
  20.  
  21. new const gWeaponAmmoIdList[] =
  22. {
  23. 0, 9, 0, 2, 12, 5, 14, 6,
  24. 4, 13, 10, 7, 6, 4,
  25. 4, 4, 6, 10, 1, 10, 3,
  26. 5, 4, 10, 2, 11, 8, 4,
  27. 2, -1, 7
  28. }
  29.  
  30. new const gWeaponMaxAmmoList[] =
  31. {
  32. 0, 52, 0, 90, 1, 32, 1, 100,
  33. 90, 1, 120, 100, 100, 90,
  34. 90, 90, 100, 120, 30, 120, 200,
  35. 32, 90, 120, 90, 2, 35, 90,
  36. 90, -1, 100
  37. }
  38.  
  39. new const gWeaponSlotId[] =
  40. {
  41. -1, 1, -1, 0, 3, 0, 4, 0,
  42. 0, 3, 1, 1, 0, 0,
  43. 0, 0, 1, 1, 0, 0, 0,
  44. 0, 0, 0, 0, 3, 1, 0,
  45. 0, 2, 0
  46. }
  47.  
  48. new const gWeaponNumberInSlot[] =
  49. {
  50. 0, 3, 0, 9, 1, 12, 3, 13,
  51. 14, 3, 5, 6, 15, 16,
  52. 17, 18, 4, 2, 2, 7, 4,
  53. 5, 6, 11, 3, 2, 1, 10,
  54. 1, 1, 8
  55. }
  56.  
  57. new const gWeaponFlags[] =
  58. {
  59. 0, 0, 0, 0, (WEAP_FL_EXHAUSTIBLE|WEAP_FL_LIMITINWORLD), 0, (WEAP_FL_EXHAUSTIBLE|WEAP_FL_LIMITINWORLD), 0,
  60. 0, (WEAP_FL_EXHAUSTIBLE|WEAP_FL_LIMITINWORLD), 0, 0, 0, 0,
  61. 0, 0, 0, 0, 0, 0, 0,
  62. 0, 0, 0, 0, (WEAP_FL_EXHAUSTIBLE|WEAP_FL_LIMITINWORLD), 0, 0,
  63. 0, 0, 0
  64. }
  65.  
  66. // Bytes with secondary ammo type are usually -1
  67.  
  68. new Array:arrayUserWeaponList[33]
  69. new Array:arrayUserWeaponId[33]
  70.  
  71. new gMsgWeaponList
  72.  
  73. public plugin_init()
  74. {
  75. register_plugin(PLUGIN, VERSION, AUTHOR)
  76.  
  77. gMsgWeaponList = get_user_msgid("WeaponList")
  78. }
  79.  
  80. public plugin_natives()
  81. {
  82. register_native("msg_set_player_weapon_sprite", "native_set_player_weapon_sprite")
  83. register_native("msg_reset_player_weapon_sprite", "native_reset_player_weapon_sprite")
  84. }
  85.  
  86. public client_putinserver(id)
  87. {
  88. ArrayDestroy(arrayUserWeaponList[id])
  89. ArrayDestroy(arrayUserWeaponId[id])
  90.  
  91. arrayUserWeaponList[id] = ArrayCreate(30)
  92. arrayUserWeaponId[id] = ArrayCreate(1)
  93. }
  94.  
  95. public client_disconnected(id)
  96. {
  97. ArrayDestroy(arrayUserWeaponList[id])
  98. ArrayDestroy(arrayUserWeaponId[id])
  99. }
  100.  
  101. public client_command(id)
  102. {
  103. if(!is_user_alive(id))
  104. return PLUGIN_CONTINUE
  105.  
  106. static lCommand[34], lArrayId
  107. read_argv(0, lCommand, charsmax(lCommand))
  108. remove_quotes(lCommand)
  109.  
  110. lArrayId = ArrayFindString(arrayUserWeaponList[id], lCommand)
  111.  
  112. if(lArrayId == -1)
  113. return PLUGIN_CONTINUE
  114.  
  115. engclient_cmd(id, gWeaponNameList[ArrayGetCell(arrayUserWeaponId[id], lArrayId)])
  116. return PLUGIN_HANDLED
  117. }
  118.  
  119. public native_set_player_weapon_sprite(plugin_id, param_num)
  120. {
  121. new id = get_param(1)
  122. new lWeaponId = get_param(2)
  123. new lNewWeaponName[30]
  124. new lFlags = get_param(4)
  125.  
  126. if(!is_user_connected(id))
  127. {
  128. log_error(AMX_ERR_NATIVE, "[MSG] Player is not in game (%d)", id)
  129. return false
  130. }
  131.  
  132. get_string(3, lNewWeaponName, charsmax(lNewWeaponName))
  133.  
  134. setPlayerWeaponSprite(id, lWeaponId, lNewWeaponName, lFlags)
  135.  
  136. return true
  137. }
  138.  
  139. public native_reset_player_weapon_sprite(plugin_id, param_num)
  140. {
  141. new id = get_param(1)
  142. new lWeaponId = get_param(2)
  143. new lFlags = get_param(3)
  144.  
  145. if(!is_user_connected(id))
  146. {
  147. log_error(AMX_ERR_NATIVE, "[MSG] Player is not in game (%d)", id)
  148. return false
  149. }
  150.  
  151. resetPlayerWeaponSprite(id, lWeaponId, lFlags)
  152.  
  153. return true
  154. }
  155.  
  156. setPlayerWeaponSprite(id, weaponId, newWeaponName[], flags)
  157. {
  158. if(ArrayFindString(arrayUserWeaponList[id], newWeaponName) == -1)
  159. {
  160. ArrayPushString(arrayUserWeaponList[id], newWeaponName)
  161. ArrayPushCell(arrayUserWeaponId[id], weaponId)
  162. }
  163.  
  164. message_begin(MSG_ONE, gMsgWeaponList, {0, 0, 0}, id)
  165. {
  166. write_string(newWeaponName) // WeaponName
  167. write_byte(gWeaponAmmoIdList[weaponId]) // PrimaryAmmoID
  168. write_byte(gWeaponMaxAmmoList[weaponId]) // PrimaryAmmoMaxAmount
  169. write_byte(-1) // SecondaryAmmoID
  170. write_byte(-1) // SecondaryAmmoMaxAmount
  171. write_byte(gWeaponSlotId[weaponId]) // SlotID (0...N)
  172. write_byte(gWeaponNumberInSlot[weaponId]) // NumberInSlot (1...N)
  173. write_byte(weaponId) // WeaponID
  174. if(flags == -1)
  175. write_byte(gWeaponFlags[weaponId]) // Flags
  176. else
  177. write_byte(flags) // Flags
  178. }
  179. message_end()
  180. }
  181.  
  182. resetPlayerWeaponSprite(id, weaponId, flags)
  183. {
  184. new lArrayId = ArrayFindValue(arrayUserWeaponId[id], weaponId)
  185.  
  186. while(lArrayId != -1)
  187. {
  188. ArrayDeleteItem(arrayUserWeaponList[id], lArrayId)
  189. ArrayDeleteItem(arrayUserWeaponId[id], lArrayId)
  190.  
  191. lArrayId = ArrayFindValue(arrayUserWeaponId[id], weaponId)
  192. }
  193.  
  194. message_begin(MSG_ONE, gMsgWeaponList, {0, 0, 0}, id)
  195. {
  196. write_string(gWeaponNameList[weaponId]) // WeaponName
  197. write_byte(gWeaponAmmoIdList[weaponId]) // PrimaryAmmoID
  198. write_byte(gWeaponMaxAmmoList[weaponId]) // PrimaryAmmoMaxAmount
  199. write_byte(-1) // SecondaryAmmoID
  200. write_byte(-1) // SecondaryAmmoMaxAmount
  201. write_byte(gWeaponSlotId[weaponId]) // SlotID (0...N)
  202. write_byte(gWeaponNumberInSlot[weaponId]) // NumberInSlot (1...N)
  203. write_byte(weaponId) // WeaponID
  204. if(flags == -1)
  205. write_byte(gWeaponFlags[weaponId]) // Flags
  206. else
  207. write_byte(flags) // Flags
  208. }
  209. message_end()
  210. }
  211. /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
  212. *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang3076\\ f0\\ fs16 \n\\ par }
  213. */
  214.