HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. /* Plugin generated by AMXX-Studio */
  2.  
  3. #include <amxmodx>
  4. #include <amxmisc>
  5. #include <fakemeta>
  6. #include <hamsandwich>
  7.  
  8. #define PLUGIN "Sprint"
  9. #define VERSION "1.2"
  10. #define AUTHOR "akcaliberg"
  11.  
  12. #define TASKID 58964
  13.  
  14. #define MAX_PLAYERS 32
  15.  
  16. new bool:IsUserSprinting[MAX_PLAYERS+1];
  17. new bool:UserCanSprint[MAX_PLAYERS+1];
  18. new gMsgScreenFade;
  19.  
  20. new Float:LastSprintUsed[MAX_PLAYERS+1];
  21. new Float:LastKeyPressed[MAX_PLAYERS+1];
  22. new Float:LastSprintReleased[MAX_PLAYERS+1];
  23. new Float:SprintTime[MAX_PLAYERS+1];
  24. new Float:gCooldown, Float:gSprinttime, Float:gSprintspeed,
  25. Float:gKeyPressInterval,gShowUsage,gBreathing, gBlockJump, gScreenFade[9];
  26.  
  27. new const EXHAUSTED_BREATH[] = "player/exhausted_breathing.wav";
  28.  
  29. public plugin_init() {
  30. register_plugin(PLUGIN, VERSION, AUTHOR);
  31.  
  32. register_cvar("sprint_cooldown","5");
  33. register_cvar("sprint_timemax","2.5");
  34. register_cvar("sprint_speed","400.0");
  35. register_cvar("sprint_keylisten_interval","0.2");
  36. register_cvar("sprint_blockjump","0");
  37. register_cvar("sprint_breathsound","2");
  38. register_cvar("sprint_screenfade_enabled","1");
  39. register_cvar("sprint_screenfade_rgba","0 20 200 50");
  40. register_cvar("sprint_screenfade_rgba2","255 0 0 50");
  41. register_cvar("sprint_showusage","1");
  42.  
  43. register_event("HLTV","eNewRound","a","1=0","2=0");
  44. register_event("TeamInfo", "eTeamInfo", "a");
  45.  
  46. register_forward(FM_PlayerPreThink, "fwd_PlayerPreThink");
  47.  
  48. RegisterHam(Ham_Spawn,"player","fwd_PlayerSpawnPost",1);
  49.  
  50. gMsgScreenFade = get_user_msgid("ScreenFade");
  51.  
  52. register_concmd("sprint_reloadcvars", "CacheCvars", ADMIN_CVAR);
  53.  
  54. if(gShowUsage) set_task(300.0,"ShowUsage",TASKID, .flags="b");
  55.  
  56. }
  57. public plugin_precache() {
  58. precache_sound(EXHAUSTED_BREATH)
  59. }
  60. public plugin_cfg() {
  61. CacheCvars(0,0,0) // function will ignore the level check if the id equals 0
  62. }
  63. public eNewRound() {
  64. CacheCvars(0,0,0)
  65. }
  66. public eTeamInfo() {
  67. new id = read_data(1);
  68.  
  69. new szTeam[12];
  70. read_data(2, szTeam, charsmax(szTeam));
  71.  
  72. UserCanSprint[id] = (szTeam[0] == 'S' || szTeam[0] == 'U') ? false : true;
  73. }
  74. public CacheCvars(id, level, cid) {
  75.  
  76. if(id != 0 && !cmd_access(id,level,cid,1)) return PLUGIN_HANDLED
  77.  
  78. gCooldown = get_cvar_float("sprint_cooldown");
  79. gSprinttime = get_cvar_float("sprint_timemax");
  80. gSprintspeed = get_cvar_float("sprint_speed");
  81. gKeyPressInterval = get_cvar_float("sprint_keylisten_interval");
  82. gShowUsage = get_cvar_num("sprint_showusage");
  83. gBreathing = get_cvar_num("sprint_breathsound");
  84. gBlockJump = get_cvar_num("sprint_blockjump");
  85. gScreenFade[0] = get_cvar_num("sprint_screenfade_enabled");
  86.  
  87. new szRGBA[16], szR[4], szG[4], szB[4], szA[4];
  88. get_cvar_string("sprint_screenfade_rgba",szRGBA,15);
  89. parse(szRGBA, szR, 3, szG, 3, szB, 3, szA, 3);
  90.  
  91. gScreenFade[1] = str_to_num(szR);
  92. gScreenFade[2] = str_to_num(szG);
  93. gScreenFade[3] = str_to_num(szB);
  94. gScreenFade[4] = str_to_num(szA);
  95.  
  96. get_cvar_string("sprint_screenfade_rgba2",szRGBA,15);
  97. parse(szRGBA, szR, 3, szG, 3, szB, 3, szA, 3);
  98.  
  99. gScreenFade[5] = str_to_num(szR);
  100. gScreenFade[6] = str_to_num(szG);
  101. gScreenFade[7] = str_to_num(szB);
  102. gScreenFade[8] = str_to_num(szA);
  103.  
  104. return PLUGIN_HANDLED
  105. }
  106. public client_putinserver(id) {
  107. if(gShowUsage) set_task(10.0,"ShowUsage",id+TASKID)
  108. }
  109. public fwd_PlayerSpawnPost(id) {
  110. SprintTime[id] = 0.0;
  111. }
  112. public fwd_PlayerPreThink(id) {
  113. if(!UserCanSprint[id]) return;
  114.  
  115. static button,oldbuttons,flags, Float:speed;
  116.  
  117. button = pev(id, pev_button);
  118. oldbuttons = pev(id, pev_oldbuttons);
  119. pev(id, pev_maxspeed, speed);
  120. flags = pev(id, pev_flags);
  121.  
  122.  
  123. if(!(flags & FL_DUCKING) && speed != 1.0) {
  124.  
  125. // Pressed
  126. if(button & IN_FORWARD && !(oldbuttons & IN_FORWARD)) {
  127. if( (get_gametime() - LastKeyPressed[id]) < gKeyPressInterval ) {
  128. if( (get_gametime() - LastSprintReleased[id]) >= gCooldown) {
  129. LastSprintUsed[id] = get_gametime();
  130. IsUserSprinting[id] = true;
  131. SprintTime[id] = 0.0
  132. if(gScreenFade[0]) SetScreenFadeEffect(id, 1)
  133. }
  134. else if( SprintTime[id] > 0.0 && SprintTime[id] < gSprinttime ) {
  135. LastSprintUsed[id] = get_gametime();
  136. IsUserSprinting[id] = true;
  137. if(gScreenFade[0]) SetScreenFadeEffect(id, 1)
  138. }
  139.  
  140. }
  141. LastKeyPressed[id] = get_gametime();
  142. }
  143. // Holding
  144. else if( oldbuttons & IN_FORWARD && button & IN_FORWARD ) {
  145. if(IsUserSprinting[id]) {
  146. if(speed != gSprintspeed) set_pev(id, pev_maxspeed, gSprintspeed );
  147. if( ( SprintTime[id] + get_gametime() - LastSprintUsed[id] ) > gSprinttime) {
  148. IsUserSprinting[id] = false;
  149. ExecuteHamB(Ham_Item_PreFrame, id);
  150. LastSprintReleased[id] = get_gametime();
  151. SprintTime[id] = 0.0;
  152. if(gScreenFade[0]) SetScreenFadeEffect(id, 2)
  153.  
  154. // Exhausted breath sound
  155. switch(gBreathing) {
  156. case 1: client_cmd(id, "spk %s",EXHAUSTED_BREATH);
  157. case 2: emit_sound(id, CHAN_AUTO, EXHAUSTED_BREATH, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
  158. }
  159.  
  160. }
  161. }
  162. }
  163. // Released
  164. else if( oldbuttons & IN_FORWARD && !(button & IN_FORWARD)) {
  165. if(IsUserSprinting[id]) {
  166. LastSprintReleased[id] = get_gametime();
  167. IsUserSprinting[id] = false;
  168. SprintTime[id] += ( get_gametime() - LastSprintUsed[id]);
  169. ExecuteHamB(Ham_Item_PreFrame, id);
  170. if(gScreenFade[0]) SetScreenFadeEffect(id, 0)
  171. }
  172. }
  173. // Ducking
  174. if(IsUserSprinting[id] && button & IN_DUCK) {
  175. LastSprintReleased[id] = get_gametime();
  176. IsUserSprinting[id] = false;
  177. SprintTime[id] += ( get_gametime() - LastSprintUsed[id]);
  178. ExecuteHamB(Ham_Item_PreFrame, id);
  179. if(gScreenFade[0]) SetScreenFadeEffect(id, 0)
  180. }
  181. // Jumping
  182. if(gBlockJump && IsUserSprinting[id] && button & IN_JUMP) {
  183. LastSprintReleased[id] = get_gametime();
  184. IsUserSprinting[id] = false;
  185. SprintTime[id] += ( get_gametime() - LastSprintUsed[id]);
  186. ExecuteHamB(Ham_Item_PreFrame, id);
  187. if(gScreenFade[0]) SetScreenFadeEffect(id, 0)
  188. }
  189. }
  190. }
  191. public SetScreenFadeEffect(id, flag) {
  192.  
  193. switch(flag) {
  194. case 0: {
  195. message_begin(MSG_ONE_UNRELIABLE, gMsgScreenFade, _, id)
  196. write_short(0)
  197. write_short(0)
  198. write_short(0)
  199. write_byte(0)
  200. write_byte(0)
  201. write_byte(0)
  202. write_byte(0)
  203. message_end()
  204. }
  205. case 1: {
  206. message_begin(MSG_ONE_UNRELIABLE, gMsgScreenFade, _, id)
  207. write_short(0) // duration (will be ignored because of the flag)
  208. write_short(0) // holdtime
  209. write_short(0x0004) // FFADE_STAYOUT
  210. write_byte(gScreenFade[1]) // r
  211. write_byte(gScreenFade[2]) // g
  212. write_byte(gScreenFade[3]) // b
  213. write_byte(gScreenFade[4]) // alpha
  214. message_end()
  215. }
  216. case 2: {
  217. message_begin(MSG_ONE_UNRELIABLE, gMsgScreenFade, _, id)
  218. write_short(4096) // duration
  219. write_short(2048) // holdtime
  220. write_short(0x0000) // FFADE_IN
  221. write_byte(gScreenFade[5]) // r
  222. write_byte(gScreenFade[6]) // g
  223. write_byte(gScreenFade[7]) // b
  224. write_byte(gScreenFade[8]) // alpha
  225. message_end()
  226. }
  227. }
  228. }
  229. public ShowUsage(id) {
  230. id -= TASKID
  231. client_print(id,print_chat,"[SPRINT] Sprintelni az elore gomb dupla lenyomasaval tudsz (W). ");
  232. }
  233.