HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. #include <amxmodx>
  2. #include <cstrike>
  3. #include <engine>
  4. #include <fakemeta>
  5. #include <hamsandwich>
  6.  
  7. #define PLUGIN "Land Reality"
  8. #define AUTHOR "OT"
  9. #define VERSION "1.3"
  10.  
  11. // You can modify
  12. #define MAX_PLAYERS 32
  13.  
  14. #define MIN_DAMAGE_VELOCITY 150.0
  15. #define UNIT_MAKE_MORE_DAMAGE 50
  16.  
  17. // Do not modify
  18. #define OFFSET_PL_FALLVEL 251
  19. #define EXTRA_PL_OFFSET 5
  20.  
  21. new Float:old_fall_vel[MAX_PLAYERS + 1]
  22. new Float:fall_vel[MAX_PLAYERS + 1]
  23. new bool:was_on_ladder[MAX_PLAYERS + 1]
  24. new g_maxplayers
  25.  
  26. new pcv_ff
  27. new pcv_da
  28.  
  29. public plugin_init()
  30. {
  31. register_plugin(PLUGIN, VERSION, AUTHOR)
  32. register_cvar("land_real_version", VERSION, FCVAR_SPONLY | FCVAR_SERVER)
  33.  
  34. pcv_ff = get_cvar_pointer("mp_friendlyfire")
  35. pcv_da = register_cvar("mp_lr_damage", "1") // 0 - do not damage teammates, 1 - follow FF
  36.  
  37. g_maxplayers = get_maxplayers()
  38. }
  39.  
  40. public client_PreThink(id)
  41. {
  42. if ( !is_user_alive(id) )
  43. return PLUGIN_CONTINUE
  44.  
  45. fall_vel[id] = get_pdata_float(id, OFFSET_PL_FALLVEL, EXTRA_PL_OFFSET)
  46. static ground_ent
  47. ground_ent = entity_get_edict(id, EV_ENT_groundentity)
  48.  
  49. if (fall_vel[id] == 0.0 && old_fall_vel[id] > MIN_DAMAGE_VELOCITY && !was_on_ladder[id])
  50. {
  51. if (is_breakable(ground_ent))
  52. {
  53. if ( 1 <= ground_ent <= g_maxplayers)
  54. {
  55. if (cs_get_user_team(id) != cs_get_user_team(ground_ent))
  56. {
  57. ExecuteHamB(Ham_TakeDamage, ground_ent, 0, id, (10.0 + (float( floatround(old_fall_vel[id] - MIN_DAMAGE_VELOCITY) / UNIT_MAKE_MORE_DAMAGE ) * 5.0)), DMG_FALL)
  58. }
  59. else
  60. {
  61. if (get_pcvar_num(pcv_ff) != 0 && get_pcvar_num(pcv_da) == 1)
  62. {
  63. ExecuteHamB(Ham_TakeDamage, ground_ent, 0, id, (5.0 + (float( floatround(old_fall_vel[id] - MIN_DAMAGE_VELOCITY) / UNIT_MAKE_MORE_DAMAGE ) * 2.5)), DMG_FALL)
  64. }
  65. }
  66. }
  67. else
  68. {
  69. ExecuteHamB(Ham_TakeDamage, ground_ent, 0, id, (10.0 + (float( floatround(old_fall_vel[id] - MIN_DAMAGE_VELOCITY) / UNIT_MAKE_MORE_DAMAGE ) * 5.0)), DMG_FALL)
  70. }
  71.  
  72. if ((!is_valid_ent(ground_ent)) || (( 1 <= ground_ent <= g_maxplayers) && !is_user_alive(ground_ent)))
  73. {
  74. // IF entity was destroyed fall velocity continues!
  75. fall_vel[id] = old_fall_vel[id] - MIN_DAMAGE_VELOCITY
  76. set_pdata_float(id, OFFSET_PL_FALLVEL, fall_vel[id], EXTRA_PL_OFFSET)
  77. return PLUGIN_CONTINUE
  78. }
  79.  
  80. }
  81. }
  82.  
  83. was_on_ladder[id] = (entity_get_int(id, EV_INT_movetype) == MOVETYPE_FLY)
  84. old_fall_vel[id] = fall_vel[id]
  85.  
  86. return PLUGIN_CONTINUE
  87. }
  88.  
  89.  
  90. stock is_breakable(ent)
  91. {
  92. if (ent == 0)
  93. return 0
  94.  
  95. if ((entity_get_float(ent, EV_FL_health) > 0.0) && (entity_get_float(ent, EV_FL_takedamage) > 0.0) && !(entity_get_int(ent, EV_INT_spawnflags) & SF_BREAK_TRIGGER_ONLY))
  96. return 1
  97.  
  98. return 0
  99. }