Guest User

Untitled

a guest
Sep 20th, 2018
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.65 KB | None | 0 0
  1. #include <amxmodx>
  2. #include <fakemeta>
  3. #include <cs_player_models_api>
  4.  
  5. #define PLUGIN "[ZP50] Addon: Parachute"
  6. #define VERSION "1.0"
  7. #define AUTHOR "H.RED.ZONE"
  8.  
  9. #define _MarkPlayerParachute(%0) _bitPlayerParachute |= (1 << (%0 & 31))
  10. #define _ClearPlayerParachute(%0) _bitPlayerParachute &= ~(1 << (%0 & 31))
  11. #define _IsPlayerParachute(%0) _bitPlayerParachute & (1 << (%0 & 31))
  12.  
  13. new const MODEL_PARACHUTE[] = "models/RZ/parachute.mdl"
  14.  
  15. new _bitPlayerParachute
  16.  
  17. new _ParachuteEntity[33]
  18.  
  19. new _pCvarEnableParachute
  20. ,_pCvarFallSpeed
  21.  
  22. public plugin_init() {
  23. register_plugin(PLUGIN, VERSION, AUTHOR)
  24.  
  25. _pCvarEnableParachute = register_cvar("zp_parachute_enabled", "1")
  26. _pCvarFallSpeed = register_cvar("zp_parachute_fallspeed", "50")
  27.  
  28. register_event("ResetHUD", "newSpawn", "be")
  29. register_event("DeathMsg", "death_event", "a")
  30.  
  31. register_forward(FM_CmdStart, "fw_Start")
  32. }
  33.  
  34. public plugin_precache() {
  35. precache_model(MODEL_PARACHUTE)
  36. }
  37.  
  38. public client_disconnect(id) {
  39. _ClearPlayerParachute(id)
  40. parachute_reset(id)
  41. }
  42.  
  43. public fw_PlayerKilled(plr, attacker, shouldgib) {
  44. if(is_user_connected(plr)) {
  45. parachute_reset(plr)
  46. }
  47. }
  48.  
  49. public newSpawn(id) {
  50. parachute_reset(id)
  51. _MarkPlayerParachute(id)
  52. }
  53.  
  54. public death_event() {
  55. new id = read_data(2)
  56. parachute_reset(id)
  57. }
  58.  
  59. parachute_reset(id) {
  60. if(_ParachuteEntity[id] > 0) {
  61. if (pev_valid(_ParachuteEntity[id])) {
  62. engfunc(EngFunc_RemoveEntity, _ParachuteEntity[id])
  63. }
  64. }
  65. }
  66.  
  67. public fw_Start(id) {
  68. if (get_pcvar_num(_pCvarEnableParachute) == 1 ) {
  69. if(is_user_alive(id) && _IsPlayerParachute(id)) {
  70. new Float:fallspeed = get_pcvar_float(_pCvarFallSpeed) * -1.0
  71. new Float:frame
  72.  
  73. new button = pev(id, pev_button)
  74. new oldbutton = pev(id, pev_oldbuttons)
  75. new flags = pev(id, pev_flags)
  76.  
  77. if (_ParachuteEntity[id] > 0 && (flags & FL_ONGROUND)) {
  78.  
  79. if (pev(_ParachuteEntity[id],pev_sequence) != 2) {
  80. set_pev(_ParachuteEntity[id], pev_sequence, 2)
  81. set_pev(_ParachuteEntity[id], pev_gaitsequence, 1)
  82.  
  83. set_pev(_ParachuteEntity[id], pev_frame, 0.0)
  84. set_pev(_ParachuteEntity[id], pev_fuser1, 0.0)
  85. set_pev(_ParachuteEntity[id], pev_animtime, 0.0)
  86. set_pev(_ParachuteEntity[id], pev_framerate, 0.0)
  87. return
  88. }
  89.  
  90. frame = pev(_ParachuteEntity[id],pev_fuser1) + 2.0
  91. set_pev(_ParachuteEntity[id],pev_fuser1,frame)
  92. set_pev(_ParachuteEntity[id],pev_frame,frame)
  93.  
  94. if (frame > 254.0) {
  95. engfunc(EngFunc_RemoveEntity, _ParachuteEntity[id])
  96. _ParachuteEntity[id] = 0
  97. }
  98. }
  99.  
  100. if (button & IN_USE) {
  101. new Float:velocity[3]
  102. pev(id, pev_velocity, velocity)
  103.  
  104. if (velocity[2] < 0.0) {
  105. if(_ParachuteEntity[id] <= 0) {
  106. _ParachuteEntity[id] = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"info_target"))
  107.  
  108. if(_ParachuteEntity[id] > 0) {
  109. set_pev(_ParachuteEntity[id], pev_classname,"parachute")
  110. set_pev(_ParachuteEntity[id], pev_aiment, id)
  111. set_pev(_ParachuteEntity[id], pev_owner, id)
  112. set_pev(_ParachuteEntity[id], pev_movetype, MOVETYPE_FOLLOW)
  113. set_pev(_ParachuteEntity[id], pev_sequence, 0)
  114. set_pev(_ParachuteEntity[id], pev_gaitsequence, 1)
  115. set_pev(_ParachuteEntity[id], pev_frame, 0.0)
  116. set_pev(_ParachuteEntity[id], pev_fuser1, 0.0)
  117. cs_set_player_model(_ParachuteEntity[id], MODEL_PARACHUTE)
  118. }
  119. }
  120. else if (_ParachuteEntity[id] > 0) {
  121. set_pev(id, pev_sequence, 3)
  122. set_pev(id, pev_gaitsequence, 1)
  123. set_pev(id, pev_frame, 1.0)
  124. set_pev(id, pev_framerate, 1.0)
  125.  
  126. velocity[2] = (velocity[2] + 40.0 < fallspeed) ? velocity[2] + 40.0 : fallspeed
  127. set_pev(id, pev_velocity, velocity)
  128.  
  129. if (set_pev(_ParachuteEntity[id],pev_sequence) == 0) {
  130.  
  131. frame = set_pev(_ParachuteEntity[id],pev_fuser1) + 1.0
  132. set_pev(_ParachuteEntity[id],pev_fuser1,frame)
  133. set_pev(_ParachuteEntity[id],pev_frame,frame)
  134. }
  135.  
  136. if (frame > 100.0) {
  137. set_pev(_ParachuteEntity[id], pev_animtime, 0.0)
  138. set_pev(_ParachuteEntity[id], pev_framerate, 0.4)
  139. set_pev(_ParachuteEntity[id], pev_sequence, 1)
  140. set_pev(_ParachuteEntity[id], pev_gaitsequence, 1)
  141. set_pev(_ParachuteEntity[id], pev_frame, 0.0)
  142. set_pev(_ParachuteEntity[id], pev_fuser1, 0.0)
  143. }
  144. }
  145.  
  146. }
  147. else if (_ParachuteEntity[id] > 0) {
  148. engfunc(EngFunc_RemoveEntity, _ParachuteEntity[id])
  149. _ParachuteEntity[id] = 0
  150. }
  151. } else if ((oldbutton & IN_USE) && _ParachuteEntity[id] > 0 ) {
  152. engfunc(EngFunc_RemoveEntity, _ParachuteEntity[id])
  153. _ParachuteEntity[id] = 0
  154. }
  155. }
  156. }
  157. }
Add Comment
Please, Sign In to add comment