搜索
查看: 9036|回复: 14

基本的数据统计

[复制链接]
发表于 2010-8-20 01:22:50 | 显示全部楼层 |阅读模式 来自 中国–广西–南宁
  1. #include <amxmodx>
  2. #include <cstrike>
  3. #include <amxmisc>
  4. #include <csx>
  5. #include <dbi>
  6. #include <acfun> // 如果你要用就删掉这个

  7. #define Lp_MAX 33
  8. new Set_Money[4] = {0,5500,3300,1100}; // 前三杀敌奖励
  9. new Lp_Kill[Lp_MAX],Lp_Death[Lp_MAX],Lp_Tk[Lp_MAX],Lp_Shot[Lp_MAX],Lp_Hit[Lp_MAX],Lp_Damage[Lp_MAX]; // 杀敌,死亡,Tk,开枪,命中,伤害
  10. new Lp_Head[Lp_MAX],Lp_vHead[Lp_MAX],Lp_OneK[Lp_MAX],Lp_OneD[Lp_MAX],Lp_FK[Lp_MAX],Lp_FD[Lp_MAX]; // 爆头,被爆头,最先杀敌,最先死亡,最后杀敌,最后死亡
  11. new Lp_Time[Lp_MAX],Lp_Round[Lp_MAX],Lp_TE[Lp_MAX],Lp_CT[Lp_MAX],Lp_SP[Lp_MAX]; // 在线时间,游戏回合,匪徒回合,警察回合,观战回合
  12. new Lp_Planted[Lp_MAX],Lp_Explode[Lp_MAX],Lp_Defusing[Lp_MAX],Lp_Defused[Lp_MAX],Lp_DefusBad[Lp_MAX]; // 安装C4,爆破C4,拆除C4,拆除成功,拆除失败
  13. new Kill_Count,Death_Count,Kill_ID,Death_ID;  // 杀敌计数,死亡计数,杀敌ID,死亡ID
  14. new g_host[Lp_MAX], g_user[Lp_MAX], g_pass[Lp_MAX], g_dbname[Lp_MAX], g_error[Lp_MAX],amx_sql_stats[Lp_MAX],Sql:g_dbc,Result:g_result
  15. new User_Mid[Lp_MAX]; // 玩家Mid[UserId]

  16. public plugin_init()
  17. {
  18.         register_plugin("MySql数据统计", "1.3.7", "小坏/root@lovehuai.cn");
  19.         register_event("SendAudio", "Event_Round_End", "a", "2&%!MRAD_terwin", "2&%!MRAD_ctwin", "2&%!MRAD_rounddraw"); // 回合结束
  20.         register_event("TextMsg", "Event_Round_Restart", "a", "2&#Game_C", "2&#Game_w") // 服务器刷新事件
  21.         register_logevent("Event_Round_Start", 2, "1=Round_Start"); // 回合开始 ggystudio说不要用HLTV事件 于是乎咱的插件就都换这个了 - -!
  22.         register_event("ResetHUD", "Event_User_ResetHUD", "be", "1=0", "2=0"); // 玩家HUD刷新
  23.         // register_logevent("Event_Round_End", 2, "1=Round_End"); // 回合结束
  24.         // register_logevent("Event_Round_Restart", 2, "1&Restart_Round_"); // 服务器刷新事件
  25.        
  26.         register_cvar("stats_sql_host", "127.0.0.1");
  27.         register_cvar("stats_sql_user", "root");
  28.         register_cvar("stats_sql_pass", "love");
  29.         register_cvar("stats_sql_db", "amx");
  30.         register_cvar("stats_sql_table", "dwstats");
  31.        
  32.         new configsDir[64];
  33.         get_configsdir(configsDir, 63);
  34.         server_cmd("exec %s/stats_sql.cfg", configsDir);
  35.         server_exec();
  36.         return PLUGIN_CONTINUE;
  37. }

  38. public plugin_cfg()
  39. {
  40.         get_cvar_string("stats_sql_host",g_host,Lp_MAX);
  41.         get_cvar_string("stats_sql_user",g_user,Lp_MAX);
  42.         get_cvar_string("stats_sql_pass",g_pass,Lp_MAX);
  43.         get_cvar_string("stats_sql_db",g_dbname,Lp_MAX);
  44.         get_cvar_string("stats_sql_table", amx_sql_stats, Lp_MAX);
  45.         return PLUGIN_CONTINUE
  46. }

  47. public Event_User_ResetHUD(id) // 玩家HUD刷新
  48. {
  49.         Lp_Round[id]++; // 玩家回合数
  50.         switch(cs_get_user_team(id)) // 团队数
  51.         {
  52.                 case CS_TEAM_T:{Lp_TE[id]++;}
  53.                 case CS_TEAM_CT:{Lp_CT[id]++;}
  54.                 case CS_TEAM_SPECTATOR:{Lp_SP[id]++;}
  55.         }
  56.         return PLUGIN_CONTINUE;
  57. }

  58. public Event_Round_Start() // 回合开始
  59. {
  60.         Lp_FK[Kill_ID]++;   // 最后杀敌 这里感觉有点不妥 可能会引起数据乱X
  61.         Lp_FD[Death_ID]++;  // 最后死亡
  62.         ResetID(); // 复位杀敌/死亡计数等
  63.         return PLUGIN_CONTINUE;
  64. }

  65. public Event_Round_End() // 回合结束 因为没有找到好用的攻击次数统计所以暂用 get_user_rstats 来获取攻击次数
  66. {
  67.         new Temp_Stats[8];
  68.         for(new i=1; i<=get_playersnum(0);i++)
  69.         {
  70.                 if(get_user_rstats(i,Temp_Stats,"") && (User_Mid[i] > 0)){
  71.                         Lp_Shot[i] += Temp_Stats[4];
  72.                         Save_User_Stats(i);
  73.                 }
  74.         }
  75.         return PLUGIN_CONTINUE;
  76. }

  77. public Event_Round_Restart() // 服务器刷新事件
  78. {
  79.         ResetID(); // 服务器刷新强制复位
  80.         return PLUGIN_CONTINUE;
  81. }

  82. public client_connect(id) // 玩家接入
  83. {
  84.         User_Mid[id] = 0;
  85.         Reset_User_Stats(id);
  86.         return PLUGIN_CONTINUE;
  87. }

  88. public client_putinserver(id) // 玩家进入到游戏
  89. {
  90.         Get_User_StatS3(id)
  91.         return PLUGIN_CONTINUE;
  92. }

  93. public client_disconnect(id) // 玩家断开连接
  94. {
  95.         new Temp_Stats[8];
  96.         if(get_user_rstats(id,Temp_Stats,"") && (User_Mid[id] > 0)){
  97.                 Lp_Shot[id] += Temp_Stats[4];
  98.                 Save_User_Stats(id);
  99.         }
  100.         reset_user_wstats(id); // 删掉
  101.         return PLUGIN_CONTINUE;
  102. }

  103. public client_damage(attacker,victim,damage,wpnindex,hitplace,TK)  // 玩家受到伤害
  104. {
  105.         if(!TK && attacker != victim){
  106.                 Lp_Hit[attacker]++; // 命中
  107.                 Lp_Damage[attacker] += damage; // 伤害
  108.         }
  109.         return PLUGIN_CONTINUE;
  110. }

  111. public client_death(Killer,Victim,wpnindex,hitplace,TK) // 玩家死亡事件
  112. {
  113.         Lp_Death[Victim]++; // 死亡
  114.         Lp_Kill[Killer]++;  // 杀敌
  115.         if(TK) {
  116.                 Lp_Tk[Killer]++;
  117.         } else if(Killer != Victim){
  118.                 Kill_Count++;
  119.                 Death_Count++
  120.                 Kill_ID  = Killer;
  121.                 Death_ID = Victim;
  122.                 if(Kill_Count == 1){ Lp_OneK[Killer]++; Lp_OneD[Victim]++;} // 更新玩家 最先杀敌 最先第一死亡
  123.                 if(hitplace==1){ // 如果死亡时是被击中头部 更新玩家爆头/被爆头
  124.                         Lp_Head[Killer]++;
  125.                         Lp_vHead[Victim]++;
  126.                 }
  127.                 if (Kill_Count < 4) { // 前三杀敌奖励
  128.                         cs_set_user_money(Killer,cs_get_user_money(Killer)+Set_Money[Kill_Count]);
  129.                         new Name[32];
  130.                         get_user_name(Killer,Name,32);
  131.                         client_print(0,print_chat,"%s 第%i杀敌! 获得$:%i 奖励",Name,Kill_Count,Set_Money[Kill_Count]);
  132.                 }
  133.         }
  134.         return PLUGIN_CONTINUE;
  135. }

  136. public bomb_planted(id) // 安放C4
  137. {
  138.         Lp_Planted[id]++;
  139.         return PLUGIN_CONTINUE;
  140. }

  141. public bomb_explode(id,defuser) // C4爆炸
  142. {
  143.         Lp_Explode[id]++;
  144.         return PLUGIN_CONTINUE;
  145. }

  146. public bomb_defusing(id) // 尝试C4中
  147. {
  148.         Lp_Defusing[id]++;
  149.         return PLUGIN_CONTINUE;
  150. }

  151. public bomb_defused(id) // C4拆除成功
  152. {
  153.         Lp_Defused[id]++;
  154.         return PLUGIN_CONTINUE;
  155. }

  156. public ResetID() // 最新杀敌/死亡 杀敌/死亡ID复位[冲0]
  157. {
  158.         Kill_Count        = 0;
  159.         Death_Count        = 0;
  160.         Kill_ID                = 0;
  161.         Death_ID        = 0;
  162. }

  163. public Get_User_StatS3(id)
  164. {
  165.         User_Mid[id] = acfun_get_user_mid(id);
  166.         /*
  167.                 我整合了DeDe Cms的网站管理系统 这里是我在admin_sql 里register_native
  168.                 这个返回的是 玩家在网站管理系统里的注册序号 如果你要用 可以把它改为get_user_name 或者ip 或者info之类的
  169.                 切记要把数据库mid字段改为varchar 长度32 我这里用的是int 长度10 如果你不改
  170.                 直接往里写会杯具的
  171.         */
  172.         new name[33];
  173.         get_user_name(id,name,32);
  174.         if(User_Mid[id] != 0)
  175.         {
  176.                 g_dbc = dbi_connect(g_host,g_user,g_pass,g_dbname,g_error,Lp_MAX);
  177.                 if (g_dbc == SQL_FAILED)
  178.                 {
  179.                         log_amx("数据库连接失败");
  180.                 } else {
  181.                         g_result = dbi_query(g_dbc,"SELECT * FROM `%s` WHERE mid = '%i'",amx_sql_stats,User_Mid[id]);
  182.                         while (dbi_nextrow(g_result) > 0 )
  183.                         {       
  184.                                 Lp_Kill[id]                = dbi_result(g_result,"Kill");
  185.                                 Lp_Death[id]                = dbi_result(g_result,"Death");
  186.                                 Lp_Tk[id]                = dbi_result(g_result,"Tk");
  187.                                 Lp_Shot[id]                = dbi_result(g_result,"Shot");
  188.                                 Lp_Hit[id]                = dbi_result(g_result,"Hit");
  189.                                 Lp_Damage[id]        = dbi_result(g_result,"Damage");
  190.                                 Lp_Head[id]                = dbi_result(g_result,"Head");
  191.                                 Lp_vHead[id]                = dbi_result(g_result,"vHead");
  192.                                 Lp_OneK[id]                = dbi_result(g_result,"OneK");
  193.                                 Lp_OneD[id]                = dbi_result(g_result,"OneD");
  194.                                 Lp_FK[id]                = dbi_result(g_result,"FK");
  195.                                 Lp_FD[id]                = dbi_result(g_result,"FD");
  196.                                 Lp_Time[id]                = dbi_result(g_result,"Time");
  197.                                 Lp_Round[id]                = dbi_result(g_result,"Round");
  198.                                 Lp_TE[id]                = dbi_result(g_result,"TE");
  199.                                 Lp_CT[id]                = dbi_result(g_result,"CT");
  200.                                 Lp_SP[id]                = dbi_result(g_result,"SP");
  201.                                 Lp_Planted[id]        = dbi_result(g_result,"Planted");
  202.                                 Lp_Explode[id]        = dbi_result(g_result,"Explode");
  203.                                 Lp_Defusing[id]        = dbi_result(g_result,"Defusing");
  204.                                 Lp_Defused[id]        = dbi_result(g_result,"Defused");
  205.                                 Lp_DefusBad[id]        = dbi_result(g_result,"DefusBad");
  206.                         }
  207.                         dbi_free_result(g_result);
  208.                         dbi_close(g_dbc);
  209.                 }
  210.         }
  211. }

  212. public Save_User_Stats(id)
  213. {
  214.         g_dbc = dbi_connect(g_host,g_user,g_pass,g_dbname,g_error,Lp_MAX);
  215.         if (g_dbc == SQL_FAILED)
  216.         {
  217.                 log_amx("数据库连接失败");
  218.         } else {
  219.                 dbi_query(g_dbc,"INSERT INTO `%s` (`mid`) VALUES ('%i');",amx_sql_stats,User_Mid[id]);
  220.                 dbi_query(g_dbc,"set names 'utf8'");
  221.                 new Sql_Text[641];
  222.                 new name[33];
  223.                 get_user_name(id,name,32);
  224.                 Lp_Time[id] += get_user_time(id);
  225.                 new len = format(Sql_Text,640,"UPDATE `%s` SET  `name` = '%s',`date` = '%i',`Kill` = '%i',`Death` = '%i',`Tk` = '%i',`Shot` = '%i',`Hit` = '%i',`Damage` = '%i',`Head` = '%i',`vHead` = '%i',`OneK` = '%i',`OneD` = '%i',`FK` = '%i',",
  226.                 amx_sql_stats,name,get_systime(),Lp_Kill[id],Lp_Death[id],Lp_Tk[id],Lp_Shot[id],Lp_Hit[id],Lp_Damage[id],Lp_Head[id],Lp_vHead[id],Lp_OneK[id],Lp_OneD[id],Lp_FK[id]);
  227.                 len += format(Sql_Text[len],640-len,"`FD` = '%i',`Time` = '%i',`Round` = '%i',`TE` = '%i',`CT` = '%i',`SP` = '%i',`Planted` = '%i',`Explode` = '%i',`Defusing` = '%i',`Defused` = '%i',`DefusBad` = '%i' WHERE `mid` ='%i';",
  228.                 Lp_FD[id],Lp_Time[id],Lp_Round[id],Lp_TE[id],Lp_CT[id],Lp_SP[id],Lp_Planted[id],Lp_Explode[id],Lp_Defusing[id],Lp_Defused[id],Lp_DefusBad[id],User_Mid[id]);
  229.                 dbi_query(g_dbc,"%s",Sql_Text);
  230.                 dbi_close(g_dbc);
  231.         }
  232. }

  233. public Reset_User_Stats(id)
  234. {
  235.         Lp_Kill[id]                = 0;
  236.         Lp_Death[id]                = 0;
  237.         Lp_Tk[id]                = 0;
  238.         Lp_Shot[id]                = 0;
  239.         Lp_Hit[id]                = 0;
  240.         Lp_Damage[id]        = 0;
  241.         Lp_Head[id]                = 0;
  242.         Lp_vHead[id]                = 0;
  243.         Lp_OneK[id]                = 0;
  244.         Lp_OneD[id]                = 0;
  245.         Lp_FK[id]                = 0;
  246.         Lp_FD[id]                = 0;
  247.         Lp_Time[id]                = 0;
  248.         Lp_Round[id]                = 0;
  249.         Lp_TE[id]                = 0;
  250.         Lp_CT[id]                = 0;
  251.         Lp_SP[id]                = 0;
  252.         Lp_Planted[id]        = 0;
  253.         Lp_Explode[id]        = 0;
  254.         Lp_Defusing[id]        = 0;
  255.         Lp_Defused[id]        = 0;
  256.         Lp_DefusBad[id]        = 0;
  257. }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注个册吧

×
发表于 2010-8-21 21:13:31 | 显示全部楼层 来自 中国–天津–天津
沙发:victory:
回复

使用道具 举报

发表于 2010-8-21 22:07:40 | 显示全部楼层 来自 中国–香港
LZ 教我架 中文ID注册
回复

使用道具 举报

发表于 2010-8-22 16:26:54 | 显示全部楼层 来自 中国–广东–东莞
这东西不错啊
回复

使用道具 举报

发表于 2010-8-23 00:26:56 | 显示全部楼层 来自 中国–海南–文昌
嘻嘻,收下,拿回去研究
回复

使用道具 举报

发表于 2010-10-11 16:42:35 | 显示全部楼层 来自 中国–云南–临沧
看都晕人
回复

使用道具 举报

发表于 2010-10-17 22:24:52 | 显示全部楼层 来自 中国–广东–中山
编辑不成功,唉
回复

使用道具 举报

发表于 2010-10-20 00:17:17 | 显示全部楼层 来自 中国–浙江–金华–永康市
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2010-11-5 12:18:19 | 显示全部楼层 来自 中国–四川–成都
楼主的东西很有内涵 !!
回复

使用道具 举报

发表于 2011-5-20 14:52:40 | 显示全部楼层 来自 中国–云南–临沧
错误代码。。。。
回复

使用道具 举报

游客
回复
您需要登录后才可以回帖 登录 | 注个册吧

快速回复 返回顶部 返回列表