HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. #include <amxmodx>
  2. #include <amxmisc>
  3. #include <fun>
  4. #include <csx>
  5.  
  6. //checking my messy code if it unreadable
  7. //#pragma semicolon 1
  8. #pragma tabsize 0
  9.  
  10. // User stats parms id
  11. #define STATS_KILLS 0
  12. #define STATS_DEATHS 1
  13. #define STATS_HS 2
  14. #define STATS_TKS 3
  15. #define STATS_SHOTS 4
  16. #define STATS_HITS 5
  17. #define STATS_DAMAGE 6
  18.  
  19. //Basic
  20. new hudsync,hudsync_radar;
  21.  
  22. //get_player function
  23. //"a" - Don't return dead players
  24. //"b" - Don't return alive players
  25. //"c" - Skip bots
  26. //"d" - Skip real players
  27. //"e" - Match with passed team
  28. //"f" - Match with part of name
  29. //"g" - Ignore case sensitivity
  30. new players[32],playercount,i,player;
  31.  
  32. //KillStreak
  33. new kills[32],hskill[32],killstreakrecord[32];
  34.  
  35. //StatsX
  36. new score,izStats[8],izBody[8],iRankPos, iRankMax,Float:fAcc;
  37.  
  38. //ScreenFade
  39. new msgScreenFade;
  40.  
  41. //Time
  42. new timestring[31];
  43.  
  44. //Nextmap
  45. new nextmap[32],amx_nextmap;
  46.  
  47. //Frags Per Minute
  48. new alivetime[33],Float:fpm;
  49.  
  50. //Leader
  51. new leader_frags = 0,leader_deaths = 0,player_frags,player_deaths,leadername[32],leader = -1;
  52.  
  53. //Cvar list
  54. new enable,leadminplayer,killaddhp,max_frags;
  55.  
  56. public plugin_init()
  57. {
  58. register_plugin("Deathmatch Info","0.1a","wangbochiang");
  59.  
  60. //register cvar
  61. enable = register_cvar("diaio_enable","1");
  62. leadminplayer = register_cvar( "diaio_minlead", "4");
  63. killaddhp = register_cvar("diaio_addhealth", "20");
  64. max_frags = register_cvar("diaio_maxfrags", "100");
  65.  
  66. //start all the important thing
  67. set_task(0.2,"all_in_one_stats", 0, "", 0, "b");
  68. set_task(0.3,"radar_info", 0, "", 0, "b");
  69.  
  70. //normal kills
  71. register_event("DeathMsg","DeathMsg_event", "a");
  72. //headshot kills
  73. register_event("DeathMsg" , "DeathHS" , "a" , "1>0" , "3=1" );
  74. //I use this for player Spawn event.
  75. register_event("ResetHUD", "ResetHUD", "b");
  76.  
  77. amx_nextmap = get_cvar_pointer("amx_nextmap");
  78.  
  79. //Very Important.
  80. msgScreenFade = get_user_msgid("ScreenFade");
  81. hudsync = CreateHudSyncObj();
  82. hudsync_radar = CreateHudSyncObj();
  83. }
  84.  
  85. public client_putinserver(id)
  86. {
  87. if(get_pcvar_num(enable) != 1)
  88. {
  89. kills[id] = 0;
  90. hskill[id] = 0;
  91. killstreakrecord[id] = 0;
  92. }
  93. return PLUGIN_CONTINUE;
  94. }
  95.  
  96. public client_disconnect(id)
  97. {
  98. kills[id] = 0;
  99. hskill[id] = 0;
  100. killstreakrecord[id] = 0;
  101. return PLUGIN_CONTINUE;
  102. }
  103.  
  104. public ResetHUD(id)
  105. {
  106. kills[id] = 0;
  107. return PLUGIN_CONTINUE;
  108. }
  109.  
  110. public DeathHS()
  111. {
  112. new hsklr; hsklr = read_data( 1 );
  113. new hsvic; hsvic = read_data( 2 );
  114.  
  115. if ( !is_user_bot(hsklr) && hsklr != hsvic /* kill via world */ )
  116. {
  117. hskill[hsklr] += 1;
  118. }
  119. return PLUGIN_CONTINUE;
  120. }
  121.  
  122. public DeathMsg_event()
  123. {
  124.  
  125. new minleadplayers = get_playersnum(0);
  126. if (minleadplayers < get_pcvar_num(leadminplayer)) donothing();
  127. minleadplayers = get_playersnum(1);
  128. leader = -1;
  129.  
  130. //check killstreak part.
  131. new killer = read_data(1);
  132. new victim = read_data(2);
  133. if(killer != victim && !is_user_bot(killer))
  134. {
  135. kills[killer] += 1;
  136. kills[victim] = 0;
  137.  
  138. if (kills[killer] > killstreakrecord[killer])
  139. {
  140. screenfade(killer,255,0,0,25);
  141. killstreakrecord[killer] = kills[killer];
  142. }
  143. else
  144. {
  145. screenfade(killer,0,255,0,25);
  146. set_user_health(killer, get_user_health(killer) + get_pcvar_num(killaddhp));
  147. //Just is case if player have hp over 100.
  148. if(get_user_health(killer) >= 100) set_user_health(killer, 100);
  149. }
  150. }
  151. //after someone dead, I decide to check who is the leader now.
  152. checklead(killer);
  153.  
  154. //max frags reached will change nextmap
  155. if((leader_frags + 1)>= get_pcvar_num(max_frags)) server_cmd("amx_map %s",nextmap);
  156.  
  157. return PLUGIN_CONTINUE;
  158. }
  159.  
  160. //Leader Checking
  161. public checklead(id)
  162. {
  163. //Leader Checking Section
  164. player_frags = get_user_frags(id);
  165. player_deaths = get_user_deaths(id);
  166.  
  167. //most painful checking part.
  168. if ((get_user_frags(id) > leader_frags) || ((player_frags == leader_frags) && (player_deaths < leader_deaths) && !is_user_bot(id)))
  169. {
  170. leader_frags = player_frags + 1;
  171. leader_deaths = player_deaths + 1;
  172. leader = id;
  173. }
  174.  
  175. //Finally decide whe is the leader.
  176. if (leader != -1) get_user_name(leader, leadername, charsmax(leadername));
  177. }
  178.  
  179.  
  180. //Radar Place
  181. public radar_info()
  182. {
  183. //preset hud message
  184. set_hudmessage( 0, 255, 0, 0.01, 0.01, 0, 6.0, 1.0, 0.1, 1.2, -1 );
  185.  
  186. //detect nextmap
  187. get_pcvar_string(amx_nextmap,nextmap,31);
  188.  
  189. //Statsx.
  190. fAcc = accuracy(izStats);
  191.  
  192. //get thetime.
  193. get_time("%H:%M:%S",timestring,8);
  194.  
  195. get_players(players, playercount, "c");
  196. for (i=0; i<playercount; i++)
  197. {
  198. player = players[i]
  199.  
  200. //Timeleft
  201. new timeleft = get_timeleft();
  202.  
  203. //Frags per minute callOut
  204. find_fpm();
  205.  
  206. //do this NO LEADER HUD
  207. ShowSyncHudMsg(player,hudsync_radar,"Ido: %s | %d:%02d ^nKovetkezo Palya: %s ^nFrag vezeto: %s (%d/%d) ^nAcc: %0.2f%% ^nFPM: %0.2f",timestring,timeleft / 60, timeleft % 60,nextmap,leadername,leader_frags,get_pcvar_num(max_frags),fAcc,fpm);
  208. }
  209. }
  210.  
  211.  
  212. //Health bar
  213. public all_in_one_stats()
  214. {
  215. get_players(players,playercount,"bc");
  216. for (i =0; i<=playercount; i++)
  217. {
  218. //Rank
  219. iRankPos = get_user_stats(players[i], izStats, izBody);
  220. iRankMax = get_statsnum();
  221.  
  222. //Basic infomation
  223. new hp = get_user_health(players[i]),kill = izStats[STATS_KILLS],deaths = izStats[STATS_DEATHS],headshot = izStats[STATS_HS];
  224.  
  225. //Basic SkillPoint Calc Output
  226. score = calcscore(izStats);
  227.  
  228. //Fix HP Bug
  229. if(get_user_health(players[i]) < 0) hp = 0;
  230.  
  231. set_hudmessage( 0, 255, 0, 0.01, 0.95, 0, 6.0, 1.0, 0.1, 1.2, -1 );
  232. ShowSyncHudMsg(players[i],hudsync,"Elet: %d KillStreak: %d KS Rekord: %d Fejloves: %d^nRank %d / %d Oles pontok: %d (K:%d D:%d H:%d)",hp,kills[players[i]],killstreakrecord[players[i]],hskill[players[i]],iRankPos,iRankMax,score,kill,deaths,headshot);
  233. }
  234. }
  235.  
  236.  
  237. //Frags Per Minute, rewritten via: http://aladoine.free.fr/addons/amxmodx/scripting/beta/fpm.sma
  238. public find_fpm()
  239. {
  240. get_players(players,playercount,"ac");
  241. for(new i = 0; i < playercount; ++i)
  242. {
  243. ++alivetime[players[i]];
  244. fpm = get_user_frags(players[i]) * 60 / float(alivetime[players[i]]);
  245. }
  246. return PLUGIN_CONTINUE;
  247. }
  248.  
  249. //Statsx Accuracy
  250. Float:accuracy(izStats[8])
  251. {
  252. if (!izStats[STATS_SHOTS])
  253. return (0.0);
  254.  
  255. return (100.0 * float(izStats[STATS_HITS]) / float(izStats[STATS_SHOTS]));
  256. }
  257.  
  258. //Very Basic SkillPoint Calc via StatsX
  259. calcscore(izStats[8])
  260. {
  261. new kill = izStats[STATS_KILLS],hs = izStats[STATS_HS],death = izStats[STATS_DEATHS];
  262. return (hs * 2 + kill - death);
  263. }
  264.  
  265. //Just in case I have to return PLUGIN_CONTINUE twise.
  266. donothing() return PLUGIN_CONTINUE;
  267.  
  268. //When Player break KillStreak Record
  269. stock screenfade(id,red,green,blue,ammount)
  270. {
  271. if(ammount>255)ammount=255;
  272. if(red>255)red=255;
  273. if(green>255)green=255;
  274. if(blue>255)blue=255;
  275. //FADE OUT
  276. message_begin(MSG_ONE_UNRELIABLE, msgScreenFade, {0,0,0}, id);
  277. write_short(ammount * 100); //Durration
  278. write_short(0); //Hold
  279. write_short(0); //Type
  280. write_byte(red); //R
  281. write_byte(green); //G
  282. write_byte(blue); //B
  283. write_byte(ammount); //B
  284. message_end();
  285. }