HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. #include <amxmodx>
  2. #include <fakemeta>
  3. #include <hamsandwich>
  4. #include <amx_settings_api>
  5. #include <cs_teams_api>
  6. #include <cs_ham_bots_api>
  7. #include <zp50_gamemodes>
  8. #include <zp50_deathmatch>
  9.  
  10. new const ZP_SETTINGS_FILE[] = "zombieplague.ini"
  11.  
  12. new const sound_gravity[][] = { "zombie_plague/zpdam_round_gravity.wav" }
  13.  
  14. #define SOUND_MAX_LENGTH 64
  15.  
  16. new Array:g_sound_gravity
  17.  
  18. #define HUD_EVENT_X -1.0
  19. #define HUD_EVENT_Y 0.17
  20. #define HUD_EVENT_R 200
  21. #define HUD_EVENT_G 50
  22. #define HUD_EVENT_B 0
  23.  
  24. new g_MaxPlayers
  25. new g_HudSync
  26.  
  27. new cvar_gravity_chance, cvar_gravity_min_players, cvar_gravity_min_zombies
  28. new cvar_gravity_ratio, cvar_gravity_show_hud, cvar_gravity_sounds
  29. new cvar_gravity_allow_respawn, cvar_respawn_after_last_human
  30. new cvar_gravity_server, cvar_gravity_normal, cvar_gravity_round
  31.  
  32. public plugin_precache()
  33. {
  34. register_plugin("[ZP] Game Mode: Gravity", "1.0", "Daminou")
  35. zp_gamemodes_register("Gravity Mode")
  36.  
  37. g_HudSync = CreateHudSyncObj()
  38.  
  39. g_MaxPlayers = get_maxplayers()
  40.  
  41. cvar_gravity_chance = register_cvar("zpdam_gravity_chance", "35")
  42. cvar_gravity_min_players = register_cvar("zpdam_gravity_min_players", "2")
  43. cvar_gravity_min_zombies = register_cvar("zpdam_gravity_min_zombies", "2")
  44. cvar_gravity_ratio = register_cvar("zpdam_gravity_ratio", "0.5")
  45. cvar_gravity_show_hud = register_cvar("zpdam_gravity_show_hud", "1")
  46. cvar_gravity_sounds = register_cvar("zpdam_gravity_sounds", "1")
  47. cvar_gravity_allow_respawn = register_cvar("zpdam_gravity_allow_respawn", "1")
  48. cvar_respawn_after_last_human = register_cvar("zpdam_gra_respawn_after_last_human", "1")
  49. cvar_gravity_server = get_cvar_pointer("sv_gravity")
  50. cvar_gravity_normal = register_cvar("zpdam_gravity_normal", "800")
  51. cvar_gravity_round = register_cvar("zpdam_gravity_round", "250")
  52.  
  53. g_sound_gravity = ArrayCreate(SOUND_MAX_LENGTH, 1)
  54.  
  55. amx_load_setting_string_arr(ZP_SETTINGS_FILE, "Sounds", "ROUND GRAVITY", g_sound_gravity)
  56.  
  57. new index
  58. if (ArraySize(g_sound_gravity) == 0)
  59. {
  60. for (index = 0; index < sizeof sound_gravity; index++)
  61. ArrayPushString(g_sound_gravity, sound_gravity[index])
  62.  
  63. amx_save_setting_string_arr(ZP_SETTINGS_FILE, "Sounds", "ROUND GRAVITY", g_sound_gravity)
  64. }
  65.  
  66. new sound[SOUND_MAX_LENGTH]
  67. for (index = 0; index < ArraySize(g_sound_gravity); index++)
  68. {
  69. ArrayGetString(g_sound_gravity, index, sound, charsmax(sound))
  70. if (equal(sound[strlen(sound)-4], ".mp3"))
  71. {
  72. format(sound, charsmax(sound), "sound/%s", sound)
  73. precache_generic(sound)
  74. }
  75. else
  76. precache_sound(sound)
  77. }
  78. }
  79.  
  80. public zp_fw_deathmatch_respawn_pre(id)
  81. {
  82. if (!get_pcvar_num(cvar_gravity_allow_respawn))
  83. return PLUGIN_HANDLED;
  84.  
  85. if (!get_pcvar_num(cvar_respawn_after_last_human) && zp_core_get_human_count() == 1)
  86. return PLUGIN_HANDLED;
  87.  
  88. return PLUGIN_CONTINUE;
  89. }
  90.  
  91. public zp_fw_gamemodes_choose_pre(game_mode_id, skipchecks)
  92. {
  93. new alive_count = GetAliveCount()
  94.  
  95. new zombie_count = floatround(alive_count * get_pcvar_float(cvar_gravity_ratio), floatround_ceil)
  96.  
  97. if (!skipchecks)
  98. {
  99. if (random_num(1, get_pcvar_num(cvar_gravity_chance)) != 1)
  100. return PLUGIN_HANDLED;
  101.  
  102. if (alive_count < get_pcvar_num(cvar_gravity_min_players))
  103. return PLUGIN_HANDLED;
  104.  
  105. if (zombie_count < get_pcvar_num(cvar_gravity_min_zombies))
  106. return PLUGIN_HANDLED;
  107. }
  108.  
  109. if (zombie_count >= alive_count)
  110. return PLUGIN_HANDLED;
  111.  
  112. return PLUGIN_CONTINUE;
  113. }
  114.  
  115. public zp_fw_gamemodes_start()
  116. {
  117. new gravity_round = get_pcvar_num(cvar_gravity_round)
  118. set_pcvar_num(cvar_gravity_server, gravity_round)
  119. zp_gamemodes_set_allow_infect()
  120.  
  121. new iZombies, id, alive_count = GetAliveCount()
  122. new iMaxZombies = floatround(alive_count * get_pcvar_float(cvar_gravity_ratio), floatround_ceil)
  123.  
  124. while (iZombies < iMaxZombies)
  125. {
  126. id = GetRandomAlive(random_num(1, alive_count))
  127.  
  128. if (!is_user_alive(id) || zp_core_is_zombie(id))
  129. continue;
  130.  
  131. zp_core_infect(id, 0)
  132. iZombies++
  133. }
  134.  
  135. for (id = 1; id <= g_MaxPlayers; id++)
  136. {
  137. if (!is_user_alive(id) || zp_core_is_zombie(id))
  138. continue;
  139.  
  140. cs_set_player_team(id, CS_TEAM_CT)
  141. }
  142.  
  143. if (get_pcvar_num(cvar_gravity_sounds))
  144. {
  145. new sound[SOUND_MAX_LENGTH]
  146. ArrayGetString(g_sound_gravity, random_num(0, ArraySize(g_sound_gravity) - 1), sound, charsmax(sound))
  147. PlaySoundToClients(sound)
  148. }
  149.  
  150. if (get_pcvar_num(cvar_gravity_show_hud))
  151. {
  152. set_hudmessage(HUD_EVENT_R, HUD_EVENT_G, HUD_EVENT_B, HUD_EVENT_X, HUD_EVENT_Y, 1, 0.0, 5.0, 1.0, 1.0, -1)
  153. ShowSyncHudMsg(0, g_HudSync, "%L", LANG_PLAYER, "NOTICE_GRAVITY")
  154. }
  155. }
  156.  
  157. public zp_fw_gamemodes_end()
  158. {
  159. new gravity_normal = get_pcvar_num(cvar_gravity_normal)
  160. set_pcvar_num(cvar_gravity_server, gravity_normal)
  161. }
  162.  
  163. PlaySoundToClients(const sound[])
  164. {
  165. if (equal(sound[strlen(sound)-4], ".mp3"))
  166. client_cmd(0, "mp3 play ^"sound/%s^"", sound)
  167. else
  168. client_cmd(0, "spk ^"%s^"", sound)
  169. }
  170.  
  171. GetAliveCount()
  172. {
  173. new iAlive, id
  174.  
  175. for (id = 1; id <= g_MaxPlayers; id++)
  176. {
  177. if (is_user_alive(id))
  178. iAlive++
  179. }
  180.  
  181. return iAlive;
  182. }
  183.  
  184. GetRandomAlive(target_index)
  185. {
  186. new iAlive, id
  187.  
  188. for (id = 1; id <= g_MaxPlayers; id++)
  189. {
  190. if (is_user_alive(id))
  191. iAlive++
  192.  
  193. if (iAlive == target_index)
  194. return id;
  195. }
  196.  
  197. return -1;
  198. }
  199. /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
  200. *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1036\\ f0\\ fs16 \n\\ par }
  201. */
  202.