HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. #include <amxmisc>
  2. #include <amxmodx>
  3. #include <fakemeta>
  4. #include <hamsandwich>
  5. #include <zombieplague>
  6.  
  7. static const PLUGIN_NAME[] = "[ZP] Fulladt Zombie";
  8. static const PLUGIN_VERSION[] = "1.2";
  9. static const PLUGIN_AUTHOR[] = "tuty/CHyC";
  10.  
  11. enum
  12. {
  13. WATERLEVEL_NOT,
  14. };
  15.  
  16. #define DMG_DROWN (1<<14)
  17.  
  18. new cvar_enabled;
  19. new g_zclass_drowned;
  20. new drowned_speed;
  21. new Float:g_cvar_speed;
  22. new bool:g_alive[33];
  23. new bool:g_counter_strike;
  24.  
  25. new const zclass_name[] = { "Fulladt Zombie" } // name
  26. new const zclass_info[] = { "Vizben nem sebzodik" } // description
  27. new const zclass_model[] = { "zombie_fulladt" } // model
  28. new const zclass_clawmodel[] = { "v_knife_zombie_fulladt.mdl" } // claw model
  29. const zclass_health = 3500 // health
  30. const zclass_speed = 270 // speed
  31. const Float:zclass_gravity = 0.9 // gravity
  32. const Float:zclass_knockback = 1.2 // knockback
  33.  
  34. public plugin_init()
  35. {
  36. register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR);
  37. RegisterHam(Ham_TakeDamage, "player", "FwdTakeDamage");
  38. cvar_enabled = register_cvar("zp_drowned", "1");
  39. register_forward(FM_PlayerPreThink, "FwdPlayerPreThink");
  40. RegisterHam(Ham_Spawn, "player", "FwdPlayerSpawn", 1);
  41. drowned_speed = register_cvar("zp_drowned_speed", "50000.0");
  42. g_counter_strike = bool:is_running("cstrike");
  43. }
  44.  
  45. public plugin_precache()
  46. {
  47. g_zclass_drowned = zp_register_zombie_class(zclass_name, zclass_info, zclass_model, zclass_clawmodel, zclass_health, zclass_speed, zclass_gravity, zclass_knockback)
  48. }
  49.  
  50. public FwdTakeDamage(id, inflictor, attacker, Float:damage, damagebits)
  51. {
  52. if(get_pcvar_num(cvar_enabled) != 1)
  53. return HAM_IGNORED;
  54.  
  55. if(!is_user_alive(id) || !zp_get_user_zombie(id))
  56. return HAM_IGNORED;
  57.  
  58. if(zp_get_user_zombie_class(id) != g_zclass_drowned)
  59. return HAM_IGNORED;
  60.  
  61. if(damagebits & DMG_DROWN)
  62. {
  63. return HAM_SUPERCEDE;
  64. }
  65. return HAM_IGNORED;
  66. }
  67.  
  68. public FwdPlayerPreThink(client)
  69. {
  70. static old_waterlevel[33];
  71.  
  72. if( !g_alive[client] || !get_pcvar_float(drowned_speed) || !zp_get_user_zombie(client) || zp_get_user_zombie_class(client) != g_zclass_drowned || pev(client, pev_movetype) == MOVETYPE_NOCLIP )
  73. {
  74. old_waterlevel[client] = WATERLEVEL_NOT;
  75. return;
  76. }
  77.  
  78. new waterlevel = pev(client, pev_waterlevel);
  79. if( waterlevel != WATERLEVEL_NOT )
  80. {
  81. SetMaxspeed(client, g_cvar_speed);
  82. }
  83. else if( old_waterlevel[client] != WATERLEVEL_NOT )
  84. {
  85. ResetMaxspeed(client);
  86. }
  87.  
  88. old_waterlevel[client] = waterlevel;
  89. }
  90.  
  91. public FwdPlayerSpawn(client)
  92. {
  93. if( is_user_alive(client) )
  94. {
  95. g_alive[client] = true;
  96. }
  97. }
  98.  
  99. ResetMaxspeed(client)
  100. {
  101. if( g_counter_strike )
  102. {
  103. static Float:maxspeed;
  104. switch ( get_user_weapon(client) )
  105. {
  106. case CSW_SG550, CSW_AWP, CSW_G3SG1: maxspeed = 210.0;
  107. case CSW_M249: maxspeed = 220.0;
  108. case CSW_AK47: maxspeed = 221.0;
  109. case CSW_M3, CSW_M4A1: maxspeed = 230.0;
  110. case CSW_SG552: maxspeed = 235.0;
  111. case CSW_XM1014, CSW_AUG, CSW_GALIL, CSW_FAMAS: maxspeed = 240.0;
  112. case CSW_P90: maxspeed = 245.0;
  113. case CSW_SCOUT: maxspeed = 260.0;
  114. default: maxspeed = 250.0;
  115. }
  116.  
  117. SetMaxspeed(client, maxspeed);
  118. }
  119. else
  120. {
  121. SetMaxspeed(client, 250.0);
  122. }
  123. }
  124.  
  125. SetMaxspeed(client, Float:maxspeed)
  126. {
  127. engfunc(EngFunc_SetClientMaxspeed, client, maxspeed);
  128. set_pev(client, pev_maxspeed, maxspeed);
  129. }
  130.