设为首页收藏本站新闻投稿

MOD中国同盟社

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 13242|回复: 217

[原创] 源码开放. 100% 模拟CSOL记分牌和CF战术统计! Acfun Guard 单机版     [复制链接]

Rank: 7Rank: 7Rank: 7

帖子
157
精华
4
声望
1284 点
金币
454 Mold
被赞许
42 次
注册时间
2010-4-18

懒人勋章

发表于 2011-12-4 13:37:55 |显示全部楼层
本帖最后由 冈崎汐 于 2011-12-4 17:45 编辑

不知大家过的还好吗. 这里小汐给大家拜个早年. 近些由于个人原因, 许久没来同盟社这个温暖的家逛逛了.
在此期间, 收到许多网友来信, 说 ACG 单机版许久没有动静了, 是不是也应该更新更新?
由于信件过多, 无法一一回复. 小汐在这里对那些急切等待 ACG 单机版的玩家说声对不起
其中有一位越南网友 Pham Nguyen 还连夜帮忙测试将要发行的 ACG 单机版, 这里也对他表示由衷感谢, 小汐的英文让你费眼了!

相比上个版本的 ACG 单机版, 这次的单机版主要有以下改进:
  1.   - 增加了 acg_showteammate, acg_drawspr, acg_setscoreboardspr, acg_updatescoreboard,
  2.     acg_showstatstable, acg_setstatstabletext, acg_statstableaddupdamagepoint, acg_setstatstableweaponspr
  3.     等多个接口.
  4.     功能分别为: 透墙显示队友名字, 绘制任意 spr, 初始化计分板, 更新计分板信息
  5.   - 服务端支持 x64 环境和对战平台, 虽曰单机版但和浩方、QQ 对战平台等可以完美兼容
  6.   - 花钱买了正版 VMProtect, 如此一来报毒问题可以基本解决.
  7.   - 重绘语音标签, 彻底修复乱码问题
  8.   - 增加战术统计表功能
复制代码







附件上两个 sma 分别是记分牌示例和杀敌特效示例.
NST_Effects_Killer.sma
  1. #include <amxmodx>
  2. #include <fakemeta>
  3. #include <acg>

  4. #define LEVELS 8
  5. new kills[33], Float:timekill[33], revenge[33], oneshot[33]
  6. new g_firstkill, g_lastkill
  7. new g_FM_Running

  8. new const spr_combo[][] =
  9. {
  10.         "sprites/effectskill/1shot_2kill.spr",
  11.         "sprites/effectskill/1shot_3kill.spr",
  12.         "sprites/effectskill/c4_defuse.spr",
  13.         "sprites/effectskill/c4_set.spr",
  14.         //"sprites/effectskill/ghost_shot.spr",
  15.         "sprites/effectskill/kill_1.spr",
  16.         "sprites/effectskill/kill_2.spr",
  17.         "sprites/effectskill/kill_3.spr",
  18.         "sprites/effectskill/kill_4.spr",
  19.         "sprites/effectskill/kill_5.spr",
  20.         "sprites/effectskill/kill_6.spr",
  21.         "sprites/effectskill/kill_7.spr",
  22.         "sprites/effectskill/kill_8.spr",
  23.         "sprites/effectskill/kill_first.spr",
  24.         "sprites/effectskill/kill_he.spr",
  25.         "sprites/effectskill/kill_headshot.spr",
  26.         "sprites/effectskill/kill_knife.spr",
  27.         "sprites/effectskill/kill_last.spr",
  28.         "sprites/effectskill/kill_revenge.spr",
  29.         "sprites/effectskill/wall_shot.spr",
  30.         "sprites/effectskill/wall_shot_hs.spr"
  31. }

  32. new const spr_combo2[][] =
  33. {
  34.         "effectskill/kill_1",
  35.         "effectskill/kill_2",
  36.         "effectskill/kill_3",
  37.         "effectskill/kill_4",
  38.         "effectskill/kill_5",
  39.         "effectskill/kill_6",
  40.         "effectskill/kill_7",
  41.         "effectskill/kill_8",
  42.         "effectskill/kill_first",
  43.         "effectskill/c4_defuse",
  44.         "effectskill/c4_set",
  45.         "effectskill/kill_he",
  46.         "effectskill/kill_headshot",
  47.         "effectskill/kill_knife",
  48.         "effectskill/kill_last",
  49.         "effectskill/kill_revenge",
  50.         "effectskill/wall_shot",
  51.         "effectskill/wall_shot_hs",
  52.         "effectskill/1shot_2kill",
  53.         "effectskill/1shot_3kill"
  54. }

  55. enum
  56. {
  57.         KILL_1 = 0,
  58.         KILL_2,
  59.         KILL_3,
  60.         KILL_4,
  61.         KILL_5,
  62.         KILL_6,
  63.         KILL_7,
  64.         KILL_8,
  65.         KILL_FIRST,
  66.         C4_DEFUSE,
  67.         C4_SET,
  68.         KILL_HEGRENADE,
  69.         KILL_HEADSHOT,
  70.         KILL_KNIFE,
  71.         KILL_LAST,
  72.         KILL_REVENGE,
  73.         WALLSHOT,
  74.         WALLSHOT_HEADSHOT,
  75.         ONESHOT_2KILL,
  76.         ONESHOT_3KILL
  77. }

  78. public plugin_precache()
  79. {
  80.         for (new i = 0; i <= 17; i++)
  81.         {
  82.                 precache_model(spr_combo[i])
  83.         }
  84. }

  85. public plugin_init()
  86. {
  87.         register_plugin("Effects Kill", "0.2", "modified from CSO-NST")
  88.         
  89.         register_event("HLTV", "event_round_start", "a", "1=0", "2=0")
  90.         register_event("DeathMsg", "event_DeathMsg", "a")
  91. }

  92. public event_round_start()
  93. {
  94.         new reset_value[33]

  95.         g_firstkill = 1
  96.         kills = reset_value
  97.         revenge = reset_value
  98.         oneshot = reset_value
  99. }

  100. public event_DeathMsg()
  101. {
  102.         // get value data
  103.         static killer, headshot, weapon[32], wpnindex, victim
  104.         killer = read_data(1)
  105.         victim = read_data(2)

  106.         headshot = read_data(3)
  107.         read_data(4, weapon, charsmax(weapon))
  108.         if (equali(weapon, "grenade"))
  109.                 format(weapon, charsmax(weapon), "hegrenade")
  110.         format(weapon, charsmax(weapon), "weapon_%s", weapon)
  111.         wpnindex = get_weaponid(weapon)
  112.         
  113.         // none killer = victim
  114.         if (!is_user_connected(killer) || !is_user_connected(victim) || killer==victim) return;
  115.         if (!acg_userstatus(killer))
  116.         {
  117.                 if (g_firstkill)
  118.                         g_firstkill = 0
  119.                 return;
  120.         }
  121.         //if (get_user_team(killer)==get_user_team(victim) && !get_cvar_num("mp_friendlyfire")) return;
  122.         
  123.         // reset kills of victim
  124.         kills[victim] = 0

  125.         // set revenge of victim
  126.         revenge[victim] = killer

  127.         // get num kill & one shoot multikill
  128.         new Float:timeleft = get_gametime()-timekill[killer]
  129.         if (timeleft <= 3.0) kills[killer] += 1
  130.         else kills[killer] = 1
  131.         if (kills[killer]>LEVELS) kills[killer] = LEVELS
  132.         timekill[killer] = get_gametime()

  133.         if (!oneshot[killer]) oneshot[killer] = 1
  134.         if (!timeleft && wpnindex != CSW_HEGRENADE) oneshot[killer] += 1
  135.         else oneshot[killer] = 1
  136.         oneshot[killer] = min(3, oneshot[killer])
  137.         //client_print(killer, print_chat, "%i", oneshot[killer])
  138.         
  139.         // get last kill
  140.         new players_ct[32], players_t[32], ict, ite
  141.         get_players(players_ct,ict,"ae","CT")   
  142.         get_players(players_t,ite,"ae","TERRORIST")
  143.         if (ict == 0 || ite == 0) g_lastkill = 1
  144.         
  145.         // check revenge
  146.         new m_revenge
  147.         if (victim == revenge[killer])
  148.         {
  149.                 m_revenge = 1
  150.                 revenge[killer] = 0
  151.         }

  152.         if (oneshot[killer] > 1)
  153.         {
  154.                 if (oneshot[killer] == 2)
  155.                         acg_drawspr(killer, spr_combo2[ONESHOT_2KILL], 255, 255, 255, 0.7, 0.3, 1, FX_FADE, 0.0, 0.4, 0.0, 3.0, DRAW_ADDITIVE, 1)
  156.                 else if (oneshot[killer] == 3)
  157.                         acg_drawspr(killer, spr_combo2[ONESHOT_3KILL], 255, 255, 255, 0.7, 0.3, 1, FX_FADE, 0.0, 0.4, 0.0, 3.0, DRAW_ADDITIVE, 1)
  158.         }
  159.         
  160.         if (g_lastkill)
  161.         {
  162.                 g_lastkill = 0
  163.                 acg_drawspr(killer, spr_combo2[KILL_LAST], 255, 255, 255, 0.6, 0.3, 1, FX_FADE, 0.0, 0.4, 0.0, 3.0, DRAW_ADDITIVE, 2)
  164.         }        
  165.         
  166.         if (m_revenge)
  167.                 acg_drawspr(killer, spr_combo2[KILL_REVENGE], 255, 255, 255, 0.5, 0.65, 1, FX_FADE, 0.0, 0.4, 0.0, 3.0, DRAW_ADDITIVE, 3)
  168.         
  169.         if ((wpnindex != CSW_KNIFE) && (wpnindex != CSW_HEGRENADE) && !can_see_fm(killer, victim))
  170.         {
  171.                 if (headshot)
  172.                         acg_drawspr(killer, spr_combo2[WALLSHOT_HEADSHOT], 255, 255, 255, 0.5, 0.75, 1, FX_FADE, 0.0, 0.4, 0.0, 3.0, DRAW_ADDITIVE, 4)
  173.                 else
  174.                         acg_drawspr(killer, spr_combo2[WALLSHOT], 255, 255, 255, 0.5, 0.75, 1, FX_FADE, 0.0, 0.4, 0.0, 3.0, DRAW_ADDITIVE, 4)
  175.         }
  176.         
  177.         if (headshot && wpnindex)
  178.         {
  179.                 acg_drawspr(killer, spr_combo2[KILL_HEADSHOT], 255, 255, 255, 0.4, 0.3, 1, FX_FADE, 0.0, 0.4, 0.0, 3.0, DRAW_ADDITIVE, 5)
  180.         }
  181.         else if (wpnindex == CSW_KNIFE)
  182.         {
  183.                 acg_drawspr(killer, spr_combo2[KILL_KNIFE], 255, 255, 255, 0.4, 0.3, 1, FX_FADE, 0.0, 0.4, 0.0, 3.0, DRAW_ADDITIVE, 5)
  184.         }
  185.         else if (wpnindex == CSW_HEGRENADE)
  186.         {
  187.                 acg_drawspr(killer, spr_combo2[KILL_HEGRENADE], 255, 255, 255, 0.4, 0.3, 1, FX_FADE, 0.0, 0.4, 0.0, 3.0, DRAW_ADDITIVE, 5)
  188.         }
  189.         
  190.         
  191.         // hud 2
  192.         if (g_firstkill)
  193.         {
  194.                 g_firstkill = 0
  195.                 acg_drawspr(killer, spr_combo2[KILL_FIRST], 255, 255, 255, 0.6, 0.3, 1, FX_FADE, 0.0, 0.4, 0.0, 3.0, DRAW_ADDITIVE, 6)
  196.         }
  197.         else
  198.         {
  199.                 acg_drawspr(killer, spr_combo2[kills[killer] - 1], 255, 255, 255, 0.55, 0.3, 1, FX_FADE, 0.0, 0.4, 0.0, 3.0, DRAW_ADDITIVE, 6)
  200.         }
  201. }
  202. public bomb_defused(id)
  203. {
  204.         acg_drawspr(id, spr_combo2[C4_DEFUSE], 255, 255, 255, 0.5, 0.75, 1, FX_FADE, 0.0, 0.4, 0.0, 3.0, DRAW_ADDITIVE, 7)
  205. }

  206. public bomb_planted(id)
  207. {
  208.         acg_drawspr(id, spr_combo2[C4_SET], 255, 255, 255, 0.5, 0.75, 1, FX_FADE, 0.0, 0.4, 0.0, 3.0, DRAW_ADDITIVE, 7)
  209. }

  210. bool:can_see_fm(entindex1, entindex2)
  211. {
  212.         if (!entindex1 || !entindex2)
  213.                 return false
  214. //  new ent1, ent2

  215.         if (pev_valid(entindex1) && pev_valid(entindex1))
  216.         {
  217.                 new flags = pev(entindex1, pev_flags)
  218.                 if (flags & EF_NODRAW || flags & FL_NOTARGET)
  219.                 {
  220.                         return false
  221.                 }

  222.                 new Float:lookerOrig[3]
  223.                 new Float:targetBaseOrig[3]
  224.                 new Float:targetOrig[3]
  225.                 new Float:temp[3]

  226.                 pev(entindex1, pev_origin, lookerOrig)
  227.                 pev(entindex1, pev_view_ofs, temp)
  228.                 lookerOrig[0] += temp[0]
  229.                 lookerOrig[1] += temp[1]
  230.                 lookerOrig[2] += temp[2]

  231.                 pev(entindex2, pev_origin, targetBaseOrig)
  232.                 pev(entindex2, pev_view_ofs, temp)
  233.                 targetOrig[0] = targetBaseOrig [0] + temp[0]
  234.                 targetOrig[1] = targetBaseOrig [1] + temp[1]
  235.                 targetOrig[2] = targetBaseOrig [2] + temp[2]

  236.                 engfunc(EngFunc_TraceLine, lookerOrig, targetOrig, 0, entindex1, 0) //  checks the had of seen player
  237.                 if (get_tr2(0, TraceResult:TR_InOpen) && get_tr2(0, TraceResult:TR_InWater))
  238.                 {
  239.                         return false
  240.                 }
  241.                 else
  242.                 {
  243.                         new Float:flFraction
  244.                         get_tr2(0, TraceResult:TR_flFraction, flFraction)
  245.                         if (flFraction == 1.0 || (get_tr2(0, TraceResult:TR_pHit) == entindex2))
  246.                         {
  247.                                 return true
  248.                         }
  249.                         else
  250.                         {
  251.                                 targetOrig[0] = targetBaseOrig [0]
  252.                                 targetOrig[1] = targetBaseOrig [1]
  253.                                 targetOrig[2] = targetBaseOrig [2]
  254.                                 engfunc(EngFunc_TraceLine, lookerOrig, targetOrig, 0, entindex1, 0) //  checks the body of seen player
  255.                                 get_tr2(0, TraceResult:TR_flFraction, flFraction)
  256.                                 if (flFraction == 1.0 || (get_tr2(0, TraceResult:TR_pHit) == entindex2))
  257.                                 {
  258.                                         return true
  259.                                 }
  260.                                 else
  261.                                 {
  262.                                         targetOrig[0] = targetBaseOrig [0]
  263.                                         targetOrig[1] = targetBaseOrig [1]
  264.                                         targetOrig[2] = targetBaseOrig [2] - 17.0
  265.                                         engfunc(EngFunc_TraceLine, lookerOrig, targetOrig, 0, entindex1, 0) //  checks the legs of seen player
  266.                                         get_tr2(0, TraceResult:TR_flFraction, flFraction)
  267.                                         if (flFraction == 1.0 || (get_tr2(0, TraceResult:TR_pHit) == entindex2))
  268.                                         {
  269.                                                 return true
  270.                                         }
  271.                                 }
  272.                         }
  273.                 }
  274.         }
  275.         return false
  276. }
复制代码

scoreboard.sma
  1. #include <amxmodx>
  2. #include <amxmisc>
  3. #include <acg>

  4. new ctwin = 0, twin = 0

  5. public plugin_init() {
  6.         register_plugin("ScoreBoard", "0.1", "everyone live on earth")
  7.         register_event("TeamScore","calc_teamscore","a")
  8.         set_task (2.0, "updatescoreboard", _, _, _,"b")
  9. }

  10. public plugin_precache()
  11. {        
  12.         precache_model("sprites/scoreboard.spr")
  13.         precache_model("sprites/scoreboard_text.spr")
  14. }

  15. public calc_teamscore()
  16. {
  17.                 new parm[16]
  18.                 read_data(1,parm,charsmax(parm))
  19.                 if (parm[0] == 'T')
  20.                         twin = read_data(2)
  21.                 else
  22.                         ctwin = read_data(2)
  23. }

  24. public updatescoreboard()
  25. {
  26.         new Players[32]
  27.         new cts, ts, total, i, id
  28.         get_players(Players, cts, "ae", "CT")
  29.         get_players(Players, ts, "ae", "TERRORIST")
  30.         get_players(Players, total, "c")
  31.         for (i=0; i<total; i++)
  32.         {
  33.                 id = Players[i]
  34.                 acg_updatescoreboard(id, twin, ctwin + twin, ctwin, ts, cts, 2)
  35.         }
  36. }

  37. public client_putinserver(id)
  38. {
  39.         if (acg_userstatus(id))
  40.                 set_task(2.0,"showsb",id)
  41. }

  42. public client_disconnect(id)
  43. {
  44.         remove_task(id)
  45. }

  46. public showsb(id)
  47. {
  48.         acg_setscoreboardspr(id, SB_NORMAL, SB_T_CT, SB_ROUND)
  49. }
复制代码

由于小汐深受论坛阅读权限机制蹂[防过滤]躏, 所以附件不设任何权限.
从这个版本开始, 单机版将和普通版一起更新, 我们的更新地址是 http://lolifun.tk
安装方法和普通方法相同, 这里不再赘述.

还有最近听说大江要参军了, 小汐在这里默祝大江在军队里广识天下豪杰, 不接受D的洗[防过滤]脑, 干出一番大业!

附件回复可见
游客,如果您要查看本帖隐藏内容请回复


补充内容 (2012-1-2 18:33):
.tk 域名已被某岛国政府停用, 请注意改成 .net 访问

补充内容 (2012-1-2 18:34):
新的更新地址: http://lolifun.net

补充内容 (2012-7-15 18:15):

已更新水面反射补丁
附件: 你需要登录才可以下载或查看附件。没有帐号?注册
已有 7 人评分声望 金币 被赞许 收起 理由
shangguanyun + 1 很给力!
崩音流沙 + 1 很给力!
haha7328 + 1 很给力!
皮卡艹 + 1 神马都是浮云
programe + 1

总评分: 声望 + 25  金币 + 13  被赞许 + 7   查看全部评分

Acfun Guard 使用教程、更新地址:
http://lolifun.net

领导: 既然都满意, 为何移民? 他说, 因为那里允许不满意.

使用道具 举报

Modchina声望-崇拜

在逃模客

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

帖子
2536
精华
0
声望
8050 点
金币
1500 Mold
被赞许
120 次
注册时间
2010-2-7

懒人勋章

发表于 2011-12-4 14:25:24 |显示全部楼层
终于更新了,等得好苦啊=.=。
その一   いつもと违う髪形に気が付くこと
その二   ちゃんと靴まで见ること   いいね?
その三   わたしの一言には三つの言叶で返

使用道具 举报

Honorary Member

在人海出现,同时也在人海中沉没

Rank: 7Rank: 7Rank: 7

帖子
4193
精华
3
声望
7989 点
金币
696 Mold
被赞许
151 次
注册时间
2009-12-11

黑暗使者 Modchina灌水王

发表于 2011-12-4 14:36:55 |显示全部楼层
来抢个前排。。都转行去ACFUN或者B站了吗

使用道具 举报

Rank: 10Rank: 10Rank: 10

帖子
808
精华
0
声望
3963 点
金币
699 Mold
被赞许
54 次
注册时间
2011-6-1

懒人勋章

发表于 2011-12-4 15:44:00 |显示全部楼层
这个好,支持你!

使用道具 举报

Rank: 10Rank: 10Rank: 10

帖子
3735
精华
1
声望
5900 点
金币
2148 Mold
被赞许
47 次
注册时间
2009-12-20

优秀版主奖 Modchina灌水王 星界财团 可爱小猫

发表于 2011-12-4 15:47:10 |显示全部楼层
东西很好,可惜了论坛里太冷清
至于你信不信,我反正信了

使用道具 举报

Rank: 10Rank: 10Rank: 10

帖子
384
精华
0
声望
3873 点
金币
387 Mold
被赞许
17 次
注册时间
2010-3-27

可爱小猫 懒人勋章

发表于 2011-12-4 16:29:48 |显示全部楼层
真是非常好用的东西,感谢LZ的努力!
撤退转进其疾如风,迂回包抄其徐如林。烧杀劫夺侵略如火,友军有难不动如山

使用道具 举报

Rank: 7Rank: 7Rank: 7

帖子
565
精华
0
声望
2971 点
金币
52 Mold
被赞许
36 次
注册时间
2010-2-13
发表于 2011-12-4 16:38:00 |显示全部楼层
写得挺好啊,除了那个acg我没用过,不过还可以再简化简化
欢迎加入讨论群 164384320

使用道具 举报

Rank: 5Rank: 5

帖子
247
精华
0
声望
1053 点
金币
129 Mold
被赞许
2 次
注册时间
2008-9-15
发表于 2011-12-4 17:08:27 |显示全部楼层
虽然我没玩过Acg,但是看效果图就知道这是个传说...
系统错误,请联系管理员

使用道具 举报

Modchina声望-尊敬

我还活着。。空间内有联系信息

Rank: 7Rank: 7Rank: 7

帖子
638
精华
0
声望
2449 点
金币
320 Mold
被赞许
109 次
注册时间
2011-9-15

可爱小猫 懒人勋章

发表于 2011-12-4 17:33:13 |显示全部楼层
不错,这个加入到我的mod有用
ps现在都流行转到acfun或bilibili吗
20150424上传 [/
<strong>新新新
http://pan.baidu.com/s/1eQjciie
密码见原帖。

使用道具 举报

Rank: 7Rank: 7Rank: 7

帖子
157
精华
4
声望
1284 点
金币
454 Mold
被赞许
42 次
注册时间
2010-4-18

懒人勋章

发表于 2011-12-4 17:45:30 |显示全部楼层
仿 CF 战术统计示例
  1. #include <amxmodx>
  2. #include <amxmisc>
  3. #include <acg>

  4. public plugin_init()
  5. {
  6.                 register_plugin ("[ACG] Stats Table", "0.1", "clester993@gmail.com")
  7.                
  8.                 register_event("ResetHUD", "eventResetHud", "be")
  9.                 register_event("Damage", "eventDamage", "b", "2!0", "3=0", "4!0")
  10.                 register_event("DeathMsg","eventDeath","a")
  11.                 register_logevent("eventEndRound", 2, "1=Round_End")
  12. }

  13. public plugin_precache()
  14. {
  15.                 precache_model ("sprites/640hud_gamecuc_1.spr")
  16. }

  17. public client_putinserver(id)
  18. {
  19.                 set_task(2.0, "task_settabletext", id)
  20. }

  21. public eventResetHud(id)
  22. {
  23.         acg_showstatstable (id, 0, 1)
  24. }

  25. public eventDamage(victim)
  26. {
  27.         if (victim<1 || victim>32)
  28.                 return
  29.         new attacker = get_user_attacker(victim)
  30.         if (attacker<1 || attacker>32)
  31.                 return
  32.                
  33.         // Send the damage info to client-side ACG
  34.         // We don't need to make sure whether the attacker is using ACG or not
  35.         acg_statstableaddupdamagepoint(attacker, victim, read_data(2))
  36. }

  37. public eventDeath()
  38. {
  39.         new victim = read_data(2)
  40.         if (victim<1 || victim>32)
  41.                 return
  42.         
  43.         update_rankinfo(victim)
  44.         //acg_setstatstableweaponspr(victim, "wpn_m79")        // 测试一下, wpn_m79 已在 hud.txt 中定义了
  45.         acg_showstatstable (victim, 1, 0)
  46. }

  47. public eventEndRound()
  48. {
  49.         for(new i = 1;i <= 32;i ++)
  50.                 if (is_user_connected(i))
  51.                 if (acg_userstatus(i))
  52.                 {
  53.                         update_rankinfo(i)
  54.                         acg_showstatstable (i, 1, 0)
  55.                 }
  56. }

  57. stock update_rankinfo(id)
  58. {
  59.         new hudmessage[128];
  60.         new float:kdratio = 1.0 // KD 比
  61.         new float:headshotratio = 1.0 // 爆头率
  62.         new float:shotratio = 1.0        // 命中率
  63.         formatex(hudmessage, charsmax(hudmessage), "你的排行:%d   KD:%2.1f", 126/*排行*/, kdratio);
  64.         acg_setstatstabletext(id, 2, hudmessage)
  65.         formatex(hudmessage, charsmax(hudmessage), "爆头率:%2.1f%% 命中率:%2.1f%%", headshotratio, shotratio);
  66.         acg_setstatstabletext(id, 3, hudmessage)        
  67. }

  68. public task_settabletext(id)
  69. {
  70.         client_cmd (id, "bind BACKSPACE statswindow")
  71.         acg_setstatstabletext(id, 1, "退格键: 战术统计")
  72. }
复制代码


Acfun Guard 使用教程、更新地址:
http://lolifun.net

领导: 既然都满意, 为何移民? 他说, 因为那里允许不满意.

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

回顶部