HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. /****************************************/
  2. /* */
  3. /* This plugin allows you to set the */
  4. /* time after which the weapons on the */
  5. /* map will re-emerge. This is suitable */
  6. /* for deathmatch / surf servers. */
  7. /* */
  8. /****************************************/
  9. /* ~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~ */
  10. /****************************************/
  11. /* */
  12. /* CVARS: */
  13. /* wr_mode - 1/0 (Default 1) */
  14. /* Enable/Disable plugin */
  15. /* */
  16. /* wr_resp_time 30.0 (Default: 30.0) */
  17. /* time for weapon respawn */
  18. /* minimum 5.0 - maximum none */
  19. /* */
  20. /****************************************/
  21. /* ~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~ */
  22. /****************************************/
  23. /* */
  24. /* YOU CAN EDIT: */
  25. /* #define MAX_ENTITIES 64 */
  26. /* 64 - is number how many weapons */
  27. /* will be respawned */
  28. /* */
  29. /****************************************/
  30.  
  31. #include <amxmodx>
  32. #include <fakemeta>
  33. #include <engine>
  34. #include <hamsandwich>
  35.  
  36. #define PLUGIN "Weapon Respawner"
  37. #define VERSION "1.0"
  38. #define AUTHOR "HoLLyWooD"
  39.  
  40. #define m_Type 34
  41. #define m_Count 35
  42. #define count 1
  43. #define XTRA_OFS_ARMOURY 4
  44.  
  45. #define TASK_SPAWN 240
  46.  
  47. // Number of maximum weapons to respawn
  48. #define MAX_ENTITIES 64
  49.  
  50. new Float:g_fOrigin[MAX_ENTITIES][3]; // Origin finded weapons
  51. new g_szEntModel[MAX_ENTITIES][128]; // Temp model finded weapons
  52. new g_EntType[MAX_ENTITIES]; // Type of finded weapons
  53.  
  54. new total = 0;
  55. new pcvar_mode, pcvar_time, mode, Float:resp_time;
  56.  
  57. public plugin_init() {
  58. register_plugin(PLUGIN, VERSION, AUTHOR);
  59.  
  60. // For search servers with this plugin
  61. register_cvar( "wr_version", VERSION, FCVAR_SERVER | FCVAR_SPONLY );
  62.  
  63. // Cvars
  64. pcvar_mode = register_cvar("wr_mode", "1");
  65. pcvar_time = register_cvar("wr_resp_time", "30.0");
  66.  
  67. // Load cvars
  68. load_cvars();
  69.  
  70. // Events
  71. register_logevent("event_round_end",2,"1=Round_End");
  72. register_event("HLTV", "event_round_start", "a", "1=0", "2=0");
  73.  
  74. // Save information about weapon entities on map
  75. static ent;
  76. while((ent = engfunc(EngFunc_FindEntityByString, ent, "classname", "armoury_entity")) != 0){
  77. pev(ent, pev_model, g_szEntModel[total], 127);
  78. pev(ent, pev_origin, g_fOrigin[total]);
  79. g_EntType[total] = get_pdata_int(ent, m_Type, XTRA_OFS_ARMOURY);
  80. total++;
  81. }
  82.  
  83. // For first ( one ) player on map
  84. if(task_exists(TASK_SPAWN)) remove_task(TASK_SPAWN);
  85. if(mode) set_task(resp_time, "spawn", TASK_SPAWN, _, _, "b");
  86. }
  87.  
  88. public event_round_start(){
  89. // Update cvars
  90. load_cvars();
  91.  
  92. if(task_exists(TASK_SPAWN)) remove_task(TASK_SPAWN);
  93. if(mode) set_task(resp_time, "spawn", TASK_SPAWN, _, _, "b");
  94. }
  95.  
  96. public event_round_end()
  97. if(task_exists(TASK_SPAWN)) remove_task(TASK_SPAWN);
  98.  
  99. public load_cvars(){
  100. mode = get_pcvar_num(pcvar_mode);
  101. resp_time = ( get_pcvar_float(pcvar_time) > 5.0 ) ? get_pcvar_float(pcvar_time) : 5.0;
  102. }
  103.  
  104. public spawn(){
  105. static classname[32], ent;
  106. for(new i=0;i<=total;i++){
  107. // Find entities in radius of new weapon
  108. while((ent = find_ent_in_sphere(ent, g_fOrigin[i], 10.0)) != 0 ){
  109. entity_get_string(ent,EV_SZ_classname,classname,charsmax(classname));
  110.  
  111. // Remove weapons on this place
  112. if(equali(classname,"armoury_entity")) set_pev(ent, pev_flags, pev(ent, pev_flags) | FL_KILLME);
  113. }
  114.  
  115. // Create weapon
  116. create_armoury_entity(g_fOrigin[i], g_EntType[i], g_szEntModel[i]);
  117. }
  118. }
  119.  
  120. stock create_armoury_entity(Float:flOrigin[3], const item, const szWmodel[]){
  121. // Create weapon entity
  122. new iEnt = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "armoury_entity"));
  123.  
  124. // Set model & origin
  125. set_pev(iEnt, pev_origin, flOrigin);
  126. set_pev(iEnt, pev_model, szWmodel);
  127.  
  128. // Set type of entity and count
  129. set_pdata_int(iEnt, m_Type, item, XTRA_OFS_ARMOURY);
  130. set_pdata_int(iEnt, m_Count, count, XTRA_OFS_ARMOURY);
  131.  
  132. // Spawn entity
  133. DispatchSpawn(iEnt);
  134. }
  135.