HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. /* AMX Mod X
  2. * No Weapon Drop on Death
  3. *
  4. * (c) Copyright 2006 by VEN
  5. *
  6. * This file is provided as is (no warranties)
  7. *
  8. *
  9. * Requested by [CHEEZ-T] - http://www.amxmodx.org/forums/viewtopic.php?t=24639
  10. *
  11. * Plugin disables weapon drop on death (shiled also supported, bomb excluded).
  12. *
  13. * Engine and fakemeta module required.
  14. *
  15. * CVAR amx_noweapdrop_ondeath (0: OFF, 1: ON, default: 1) disables/enables the plugin
  16. *
  17. * Versions:
  18. * 0.2 - solved possible server crash issues
  19. * maxents num uses global int now
  20. * 0.1.2 - added entity validity extra check
  21. * 0.1.1 - added shield support
  22. * 0.1 - initial release
  23. */
  24.  
  25. #include <amxmodx>
  26. #include <engine>
  27. #include <fakemeta>
  28.  
  29. #define CVAR "amx_noweapdrop_ondeath"
  30.  
  31. #define WBOX "models/w_weaponbox.mdl"
  32. #define BOMB "models/w_backpack.mdl"
  33. #define SHLD "models/w_shield.mdl"
  34.  
  35. #define MAX_PLAYERS 32
  36. new g_entid[MAX_PLAYERS + 1]
  37. new g_maxents
  38.  
  39. public plugin_init() {
  40. register_plugin("No Weapon Drop on Death", "0.2", "VEN")
  41. register_forward(FM_SetModel, "forward_set_model")
  42. register_cvar(CVAR, "1")
  43. g_maxents = get_global_int(GL_maxEntities)
  44. }
  45.  
  46. public forward_set_model(entid, model[]) {
  47. if (!is_valid_ent(entid) || !equal(model, WBOX, 9) || !get_cvar_num(CVAR))
  48. return FMRES_IGNORED
  49.  
  50. new id = entity_get_edict(entid, EV_ENT_owner)
  51. if (!id || !is_user_connected(id) || is_user_alive(id))
  52. return FMRES_IGNORED
  53.  
  54. if (equal(model, SHLD)) {
  55. kill_entity(entid)
  56. return FMRES_IGNORED
  57. }
  58.  
  59. if (equal(model, WBOX)) {
  60. g_entid[id] = entid
  61. return FMRES_IGNORED
  62. }
  63.  
  64. if (entid != g_entid[id])
  65. return FMRES_IGNORED
  66.  
  67. g_entid[id] = 0
  68.  
  69. if (equal(model, BOMB))
  70. return FMRES_IGNORED
  71.  
  72. for (new i = 1; i <= g_maxents; ++i) {
  73. if (is_valid_ent(i) && entid == entity_get_edict(i, EV_ENT_owner)) {
  74. kill_entity(entid)
  75. kill_entity(i)
  76. }
  77. }
  78.  
  79. return FMRES_IGNORED
  80. }
  81.  
  82. stock kill_entity(id) {
  83. entity_set_int(id, EV_INT_flags, entity_get_int(id, EV_INT_flags)|FL_KILLME)
  84. }
  85.