Advertisement
Guest User

Untitled

a guest
Nov 8th, 2018
205
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.07 KB | None | 0 0
  1. #include <amxmodx>
  2. #include <fun>
  3. #include <fakemeta>
  4. #include <Vexd_Utilities>
  5. #include <dhudmessage>
  6.  
  7. #define VERSION "2.0"
  8. #define TAG "HDS"
  9.  
  10. new afk_protection, afk_protection_nr, afk_protection_auto,
  11. afk_camptime, afk_movedist,
  12. afk_glow, afk_glow_color, afk_glow_amount,
  13. afk_transparent, afk_transparent_amount,
  14. afk_icon, afk_blind, afk_announce
  15.  
  16. new isAfk[33]
  17. new g_SayText, Sprite
  18.  
  19. new gPlayerPosition[32][3] // keeps track of last known origin
  20. new gMoveTimer[32] // incremented if player didn't move far enough
  21.  
  22. public plugin_init() {
  23. register_plugin("AFK Protection", VERSION, "rapara13")
  24. register_cvar("afk_protection", VERSION, FCVAR_SERVER|FCVAR_SPONLY)
  25.  
  26. register_clcmd("say /afk","afk")
  27. register_clcmd("say_team /afk","afk")
  28. register_clcmd("say /back","back")
  29. register_clcmd("say_team /back","back")
  30.  
  31. register_logevent("RoundStart",2,"1=Round_Start")
  32.  
  33. afk_protection = register_cvar("afk_protection","1")
  34. afk_protection_nr = register_cvar("afk_protection_new_round","1")
  35. afk_protection_auto = register_cvar("afk_protection_auto","1")
  36.  
  37. afk_camptime = register_cvar("afk_camptime", "120")
  38. afk_movedist = register_cvar("afk_movedist", "1")
  39.  
  40. afk_glow = register_cvar("afk_glow","1")
  41. afk_glow_color = register_cvar("afk_glow_color","255 0 0")
  42. afk_glow_amount = register_cvar("afk_glow_amount","0")
  43.  
  44. afk_transparent = register_cvar("afk_transparent","0")
  45. afk_transparent_amount = register_cvar("afk_transparent_amount","120")
  46.  
  47. afk_icon = register_cvar("afk_icon","1")
  48. afk_blind = register_cvar("afk_blind","1")
  49. afk_announce = register_cvar("afk_annouce","20")
  50.  
  51. g_SayText = get_user_msgid("SayText")
  52.  
  53. if(get_pcvar_num(afk_protection_auto))
  54. set_task(1.0,"campcheck",0,"",0,"b" )
  55. }
  56.  
  57. public plugin_precache() {
  58. Sprite = precache_model("sprites/afk.spr")
  59. }
  60.  
  61. public client_putinserver(id) {
  62. set_task(get_pcvar_float(afk_announce), "announce", id)
  63. }
  64.  
  65. public announce(id)
  66. {
  67. colormsg(id, "\g[%s] \tWrite /afk for \gAFK Protection.", TAG, VERSION)
  68. }
  69.  
  70. public client_connect(id) {
  71. isAfk[id] = false
  72. }
  73.  
  74. public client_disconnect(id) {
  75. isAfk[id] = false
  76. }
  77.  
  78. public RoundStart() {
  79. new players[32], num
  80. get_players(players,num,"h")
  81. for(new i=0;i<num;i++)
  82. {
  83. if(!get_pcvar_num(afk_protection) && !get_pcvar_num(afk_protection_nr))
  84. return
  85.  
  86. if(isAfk[players[i]] && is_user_alive(players[i])) {
  87. new color[17], red[5],green[7],blue[5]
  88. new amount = get_pcvar_num(afk_glow_amount)
  89. new tamount = get_pcvar_num(afk_transparent_amount)
  90. get_pcvar_string(afk_glow_color,color,16)
  91. parse(color,red,4,green,6,blue,4)
  92.  
  93. set_pev(players[i],pev_flags,pev(players[i],pev_flags) | FL_FROZEN)
  94. set_user_godmode(players[i], 1)
  95.  
  96. if(get_pcvar_num(afk_glow) == 1) {
  97. set_user_rendering(players[i], kRenderFxGlowShell, str_to_num(red), str_to_num(green), str_to_num(blue), kRenderNormal, amount)
  98. }
  99. else if(get_pcvar_num(afk_glow) == 2) {
  100. if(get_user_team(players[i]) == 1) {
  101. set_user_rendering(players[i], kRenderFxGlowShell, 255, 0, 0, kRenderNormal, amount)
  102. }
  103. else if(get_user_team(players[i]) == 2) {
  104. set_user_rendering(players[i], kRenderFxGlowShell, 0, 0, 255, kRenderNormal, amount)
  105. }
  106. }
  107.  
  108. if(get_pcvar_num(afk_transparent)) {
  109. set_user_rendering(players[i], kRenderFxNone,255,255,255,kRenderTransAlpha,tamount)
  110. }
  111.  
  112. if(get_pcvar_num(afk_blind)) {
  113. message_begin(MSG_ONE, get_user_msgid("ScreenFade"), {0,0,0}, players[i])
  114. write_short(~0)
  115. write_short(~0)
  116. write_short(0x0004) // stay faded
  117. write_byte(0)
  118. write_byte(0)
  119. write_byte(0)
  120. write_byte(255)
  121. message_end()
  122. }
  123.  
  124. if(get_pcvar_num(afk_icon)) {
  125. add_icon(players[i], 999999);
  126. }
  127. }
  128. if(is_user_alive(players[i])) {
  129. get_user_origin(players[i], gPlayerPosition[players[i]])
  130. }
  131. }
  132. }
  133.  
  134. public afk(id) {
  135. if(!get_pcvar_num(afk_protection))
  136. return
  137.  
  138. if(isAfk[id])
  139. return
  140.  
  141. if(is_user_alive(id)) {
  142. new color[17], red[5],green[7],blue[5]
  143. get_pcvar_string(afk_glow_color,color,16)
  144. parse(color,red,4,green,6,blue,4)
  145. new amount = get_pcvar_num(afk_glow_amount)
  146. new tamount = get_pcvar_num(afk_transparent_amount)
  147.  
  148. set_pev(id,pev_flags,pev(id,pev_flags) | FL_FROZEN)
  149. set_user_godmode(id, 1)
  150.  
  151. if(get_pcvar_num(afk_glow) == 1) {
  152. set_user_rendering(id, kRenderFxGlowShell, str_to_num(red), str_to_num(green), str_to_num(blue), kRenderNormal, amount)
  153. }
  154. else if(get_pcvar_num(afk_glow) == 2) {
  155. if(get_user_team(id) == 1) {
  156. set_user_rendering(id, kRenderFxGlowShell, 255, 0, 0, kRenderNormal, amount)
  157. }
  158. else if(get_user_team(id) == 2) {
  159. set_user_rendering(id, kRenderFxGlowShell, 0, 0, 255, kRenderNormal, amount)
  160. }
  161. }
  162.  
  163. if(get_pcvar_num(afk_transparent)) {
  164. set_user_rendering(id, kRenderFxNone,255,255,255,kRenderTransAlpha,tamount)
  165. }
  166.  
  167. if(get_pcvar_num(afk_blind)) {
  168. message_begin(MSG_ONE, get_user_msgid("ScreenFade"), {0,0,0}, id)
  169. write_short(~0)
  170. write_short(~0)
  171. write_short(0x0004) // stay faded
  172. write_byte(0)
  173. write_byte(0)
  174. write_byte(0)
  175. write_byte(255)
  176. message_end()
  177. }
  178.  
  179. if(get_pcvar_num(afk_icon)) {
  180. add_icon(id, 999999);
  181. }
  182.  
  183. set_dhudmessage(0, 255, 0, -1.0, 0.43, 0, 6.0, 1.0, _, _, -1)
  184. show_dhudmessage(id, "[%s]^nNow You are AFK Protected. To remove AFK Protection, write /back in chat.", TAG)
  185. isAfk[id] = true
  186. } else {
  187. colormsg(id, "\g[%s] \tYou can't use AFK Protection, when you're DEAD!", TAG)
  188. }
  189. }
  190.  
  191. public back(id) {
  192. if(!get_pcvar_num(afk_protection))
  193. return
  194.  
  195. if(!isAfk[id])
  196. return
  197.  
  198. if(is_user_alive(id)) {
  199. set_pev(id,pev_flags,pev(id,pev_flags) & ~FL_FROZEN)
  200. set_user_godmode(id, 0)
  201.  
  202. if(get_pcvar_num(afk_glow)) {
  203. set_user_rendering(id, kRenderFxGlowShell, 0, 0, 0, kRenderNormal, 0)
  204. }
  205.  
  206. if(get_pcvar_num(afk_transparent)) {
  207. set_user_rendering(id,0,0,0,kRenderTransAlpha,0)
  208. }
  209.  
  210. if(get_pcvar_num(afk_blind)) {
  211. message_begin(MSG_ONE, get_user_msgid("ScreenFade"), {0,0,0}, id)
  212. write_short(1<<10)
  213. write_short(1<<10)
  214. write_short(0x0000) // stay faded
  215. write_byte(0)
  216. write_byte(0)
  217. write_byte(0)
  218. write_byte(100)
  219. message_end()
  220. }
  221.  
  222. if(get_pcvar_num(afk_icon)) {
  223. remove_icon(id);
  224. }
  225.  
  226. colormsg(id, "\g[%s] \tYou remove \gAFK Protection.", TAG)
  227. isAfk[id] = false
  228. } else {
  229. colormsg(id, "\g[%s] \tYou can't remove \gAFK Protection, when you're DEAD!", TAG)
  230. }
  231. }
  232.  
  233. public campcheck()
  234. {
  235. if(!get_pcvar_num(afk_protection_auto))
  236. return
  237.  
  238. // Check all players to see if they've moved...
  239. new origin[3]
  240. new dx,dy,dz
  241.  
  242. for(new i = 1; i <= 32; i++) {
  243. if (!is_user_alive(i)) continue
  244. if (Entvars_Get_Int(i, EV_INT_flags)&FL_NOTARGET) continue
  245.  
  246. get_user_origin(i,origin)
  247. dx = gPlayerPosition[i][0] - origin[0]
  248. dy = gPlayerPosition[i][1] - origin[1]
  249. dz = gPlayerPosition[i][2] - origin[2]
  250. new d = sqrt( dx*dx + dy*dy + dz*dz )
  251. if (d <= get_pcvar_num(afk_movedist)) {
  252. gMoveTimer[i]++
  253. if(gMoveTimer[i] > get_pcvar_num(afk_camptime)) {
  254. gMoveTimer[i]=0
  255. afk(i)
  256. }
  257. } else {
  258. gMoveTimer[i] = 0
  259. }
  260. gPlayerPosition[i][0] = origin[0]
  261. gPlayerPosition[i][1] = origin[1]
  262. gPlayerPosition[i][2] = origin[2]
  263. }
  264. }
  265.  
  266. stock colormsg(const id, const string[], {Float, Sql, Resul,_}:...) {
  267.  
  268. new msg[191], players[32], count = 1;
  269. vformat(msg, sizeof msg - 1, string, 3);
  270.  
  271. replace_all(msg,190,"\g","^4");
  272. replace_all(msg,190,"\y","^1");
  273. replace_all(msg,190,"\t","^3");
  274.  
  275. if(id)
  276. players[0] = id;
  277. else
  278. get_players(players,count,"ch");
  279.  
  280. for (new i = 0 ; i < count ; i++)
  281. {
  282. if (is_user_connected(players[i]))
  283. {
  284. message_begin(MSG_ONE_UNRELIABLE, g_SayText,_, players[i]);
  285. write_byte(players[i]);
  286. write_string(msg);
  287. message_end();
  288. }
  289. }
  290. }
  291.  
  292. stock add_icon(index, HoldTime)
  293. {
  294. if(!is_user_connected(index))
  295. return;
  296.  
  297. message_begin(MSG_ALL, SVC_TEMPENTITY);
  298. write_byte(TE_PLAYERATTACHMENT);
  299. write_byte(index);
  300. write_coord(60);
  301. write_short(Sprite);
  302. write_short(HoldTime);
  303. message_end();
  304. }
  305.  
  306. stock remove_icon(index)
  307. {
  308. if(!is_user_connected(index))
  309. return;
  310.  
  311. message_begin(MSG_ALL, SVC_TEMPENTITY)
  312. write_byte(TE_KILLPLAYERATTACHMENTS);
  313. write_byte(index);
  314. message_end();
  315. }
  316.  
  317. stock sqrt(num)
  318. {
  319. if (num > 0) return sqroot(num)
  320. return 0
  321. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement