找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1587|回复: 19

斑竹请教个问题

[复制链接]

该用户从未签到

发表于 2008-5-30 19:29:49 | 显示全部楼层 |阅读模式
请问DOD里的TOP15排名  怎么强制显示中文  在DOD里stats.sma没有找到您说的那句
好象和CS的不一样
下面是stats.sma源码  请帮忙指教一下  谢谢
/* AMX Mod script.
*
* (c) 2004, SidLuke
* This file is provided as is (no warranties).
*
* Plugin works with Stats Settings Plugin. Just run both of them.
* By amx_statscfg command (from Stats Settings Plugin)
* you will be able to set all settings and save them to a file.
*
* Example of usage for some options:
* amx_statscfg on SayTop15
* amx_statscfg on SayRank
*
* Accept able are also parts of name:
* amx_statscfg off say
* amx_statscfg on End
*/
#include <amxmodx>
#include <amxmisc>
#include <dodx>
public EndPlayer          // displays player stats at the end of map
public EndTop15           // displays top15 at the end of map
public SayStatsAll        // displays players stats and rank
public SayTop15           // displays first 15. players ,cvar dodstats_topvalue really
public SayRank            // displays user position in rank
public SayStatsMe         // displays user stats
public ShowAttackers  // shows attackers
public ShowVictims    // shows victims
public ShowKiller     // shows killer
public KillerHp       // displays killer hp to victim console and screen
public SayHP          // displays information about user killer
public SayFF          // displays friendly fire status
public MultiKill
public MultiKillSound
public KnifeKill
public KnifeKillSound
public GrenadeKill
public GrenadeSuicide
public HeadShotKill
public HeadShotKillSound
public KillingStreak
public KillingStreakSound
public DoubleKill
public DoubleKillSound
public BulletDamage
public TAInfo
public RoundScore
public EndRoundStats
public GreCatch
public GreCatchSound
public EnemyGreKill
public EnemyGreKillSound
public LeadSounds
public MortarKill
new g_streakKills[33][2]
new g_multiKills[33][2]
new Float:g_prevKill
new g_prevKillerId
new g_KillCount;
new g_RoundScore[2]
new g_userPosition[33]
new g_userState[33]
new g_userPlayers[33][32]
new g_Buffer[2048]
new g_Killers[33][3]
new Float:g_DeathStats[33]
new g_damage_sync
new g_center1_sync
new g_center2_sync
new g_left_sync
new g_bodyParts[8][] = {
  "WHOLEBODY",
  "HEAD",
  "CHEST",
  "STOMACH",
  "LEFTARM",
  "RIGHTARM",
  "LEFTLEG",
  "RIGHTLEG"
}
new g_bodyParts_ansi[8][] = {
  "WHOLEBODY_ANSI",
  "HEAD_ANSI",
  "CHEST_ANSI",
  "STOMACH_ANSI",
  "LEFTARM_ANSI",
  "RIGHTARM_ANSI",
  "LEFTLEG_ANSI",
  "RIGHTLEG_ANSI"
}
new g_MultiKillMsg[7][] = {
  "MULTI_MSG",
  "ULTRA_MSG",
  "SPREE_MSG",  
  "RAMPAGE_MSG" ,
  "UNSTOPPABLE_MSG" ,
  "MONSTER_MSG",
  "GODLIKE_MSG"
}
new g_Sounds[7][] = {
  "multikill",
  "ultrakill",
  "killingspree",
  "rampage",   
  "unstoppable",   
  "monsterkill",
  "godlike"  
}
new g_KillingMsg[7][] = {
  "MULTI_SMALL",
  "ULTRA_SMALL",
  "SPREE_SMALL",
  "RAMPAGE_SMALL",  
  "UNSTOPPABLE_SMALL",  
  "MONSTER_SMALL",
  "GODLIKE_SMALL"
}
new g_KnifeMsg[4][] = {
  "KNIFE_MSG1",
  "KNIFE_MSG2",
  "KNIFE_MSG3",
  "KNIFE_MSG4"
}
new g_HeMessages[4][] = {
  "HE_MSG1",   
  "HE_MSG2",   
  "HE_MSG3",   
  "HE_MSG4"
}
new g_SHeMessages[4][] = {
  "SHE_MSG1",   
  "SHE_MSG2",   
  "SHE_MSG3",   
  "SHE_MSG4"
}
new g_HeadShots[7][] = {
  "HEAD_MSG1",   
  "HEAD_MSG2",   
  "HEAD_MSG3",   
  "HEAD_MSG4",
  "HEAD_MSG5",
  "HEAD_MSG6",
  "HEAD_MSG7"
}
new g_DoubleKillMsg[3][] = {
  "DOUBLE_MSG1",
  "DOUBLE_MSG2",
  "DOUBLE_MSG3"
}
new g_DoubleKillSound[3][] = {
  "doublekill",
  "multikill",
  "godlike"
}
new mortarmsg[2][]={
"MORTAR_MSG1",
"MORTAR_MSG2"
}
new g_addStast[] = "amx_statscfg add ^"%s^" %s"
new g_disabledMsg[] = "DISABLED_MSG"
public plugin_init() {
  register_plugin("DoD Stats",AMXX_VERSION_STR,"AMXX Dev Team")
  register_dictionary("common.txt")
  register_dictionary("stats_dod.txt")
  register_dictionary("stats_ansi.txt")
  register_event("30","eInterMission","a")
  register_event("ResetHUD","eResetHud","b")
  register_event("RoundState","round_end","a","1=3","1=4")
  register_event("RoundState","show_score","a","1=1")
  register_event("CurWeapon","NadeCatch","b","1=1","2=15","2=16")
  register_event("ObjScore","get_score","a")
  register_clcmd("say /hp","cmdKiller",0,"- displays info. about your killer")
  register_clcmd("say /stats","cmdStats",0,"- displays others stats")
  register_clcmd("say /statsme","cmdStatsMe",0,"- displays your stats")
  //register_clcmd("say /top15","cmdTop15",0,"- displays top 15 players")
  //register_clcmd("say /top10","cmdTop15",0,"- displays top 10 players") // for statsme users
  register_clcmd("say /topx","cmdTopX",0,"- displays top X players")
  register_clcmd("say /rank","cmdRank",0,"- displays your server stats")
  register_clcmd("say /ff","cmdFF",0,"- displays friendly fire status")
  register_cvar("dodstats_topvalue","15")
  register_cvar("dodstats_maxmenupos","7")
  register_cvar("dodstats_statstime","5.0")
  register_statsfwd(XMF_DAMAGE)
  register_statsfwd(XMF_DEATH)
  
  register_menucmd(register_menuid("Server Stats"),1023,"actionStatsMenu")
  g_damage_sync = CreateHudSyncObj()
  g_center1_sync = CreateHudSyncObj()
  g_center2_sync = CreateHudSyncObj()
  g_left_sync = CreateHudSyncObj()
}
public plugin_cfg(){
  server_cmd(g_addStast,"Stats at the end of map","EndPlayer")  
  server_cmd(g_addStast,"Top15 at the end of map","EndTop15")  
  server_cmd(g_addStast,"Say /stats","SayStatsAll")
  server_cmd(g_addStast,"Say /top15","SayTop15")
  server_cmd(g_addStast,"Say /rank","SayRank")
  server_cmd(g_addStast,"Say /statsme","SayStatsMe")
  server_cmd(g_addStast,"Show Attackers","ShowAttackers")
  server_cmd(g_addStast,"Show Victims","ShowVictims")
  server_cmd(g_addStast,"Show killer","ShowKiller")
  server_cmd(g_addStast,"Show killer hp","KillerHp")
  server_cmd(g_addStast,"Say /hp","SayHP")
  server_cmd(g_addStast,"Say /ff","SayFF")
  server_cmd(g_addStast,"MultiKill","MultiKill")
  server_cmd(g_addStast,"MultiKill Sound","MultiKillSound")
  server_cmd(g_addStast,"Knife Kill","KnifeKill")  
  server_cmd(g_addStast,"Knife Kill Sound","KnifeKillSound")   
  server_cmd(g_addStast,"Grenade Kill","GrenadeKill")
  server_cmd(g_addStast,"Grenade Suicide","GrenadeSuicide")
  server_cmd(g_addStast,"HeadShot Kill","HeadShotKill")  
  server_cmd(g_addStast,"HeadShot Kill Sound","HeadShotKillSound")
  server_cmd(g_addStast,"Killing Streak","KillingStreak")  
  server_cmd(g_addStast,"Killing Streak Sound","KillingStreakSound")  
  server_cmd(g_addStast,"Double Kill","DoubleKill")   
  server_cmd(g_addStast,"Double Kill Sound","DoubleKillSound")
  server_cmd(g_addStast,"Bullet Damage","BulletDamage")
  server_cmd(g_addStast,"TA/TK Info","TAInfo")
  server_cmd(g_addStast,"Round Score","RoundScore")
  server_cmd(g_addStast,"End Round Stats","EndRoundStats")
  server_cmd(g_addStast,"Grenade Catch","GreCatch")
  server_cmd(g_addStast,"Grenade Catch Sound","GreCatchSound")
  server_cmd(g_addStast,"Enemy Grenade Kill","EnemyGreKill")
  server_cmd(g_addStast,"Enemy Grenade Kill Sound","EnemyGreKillSound")
  server_cmd(g_addStast,"Lead Sounds","LeadSounds")
  server_cmd(g_addStast,"Mortar Kill","MortarKill")
}
public cmdFF(id){
  if ( !SayFF ){
    client_print(id,print_chat,"%L",id,g_disabledMsg )
    return PLUGIN_HANDLED
  }
  client_print( 0, print_chat,"%L^t%L",LANG_PLAYER,"FFIRE_IS",LANG_PLAYER, ( get_cvar_num( "mp_friendlyfire" ) ) ? "ON" : "OFF" )
  return PLUGIN_CONTINUE
}
public endGameStats(){
  new i
  if ( EndPlayer ){
    new players[32], inum
    get_players(players,inum)
    for(i = 0; i < inum; ++i){
        displayStats_steam(players,players)
    }
  }
  else if ( EndTop15 ){
    new players[32], inum
    get_players(players,inum)
    new g_Top[32], top = get_cvar_num("dodstats_topvalue")
    for(i = 0; i < inum; ++i){
      format(g_Top,31,"%L",i,"TOPX",top)
      getTopX_steam(i)
      show_motd(players,g_Buffer,g_Top)
    }
  }
}
public eInterMission()
  if ( isDSMActive() )
    set_task(1.0,"endGameStats")
public cmdStats(id){
  if ( !SayStatsAll || !isDSMActive() ){
    client_print(id,print_chat,"%L",id,g_disabledMsg )
    return PLUGIN_HANDLED
  }
  showStatsMenu(id,g_userPosition[id]=0)
  return PLUGIN_CONTINUE
}

/* build list of attackers */
getAttackers(id) {
  new name[32],wpn[32], stats[9],body[8],found=0
  new pos = format(g_Buffer,2047,"%L^n",id,"ATTACKERS")
  new amax = get_maxplayers()
  for(new a = 1; a <= amax; ++a){
    if(get_user_astats(id,a,stats,body,wpn,31))
    {
      found = 1
      if (stats[0])
        format(wpn,31," -- %s",wpn)
      else
        wpn[0] = 0
      get_user_name(a,name,31)
      pos += format(g_Buffer[pos],2047-pos,"%s -- %d %L / %d %L%s^n",name,stats[6],id,"DMG",stats[5],id,"HIT_S",wpn)
    }
  }
  return found
}
/* build list of victims */
getVictims(id) {
  new name[32],wpn[32], stats[9],body[8],found=0
  new pos = format(g_Buffer,2047,"%L^n",id,"VICTIMS")
  new amax = get_maxplayers()
  for(new a = 1; a <= amax; ++a){
    if(get_user_vstats(id,a,stats,body,wpn,31))
    {
      found = 1
      if (stats[1])
        format(wpn,31," -- %s",wpn)
      else
        wpn[0] = 0
      get_user_name(a,name,31)
      pos += format(g_Buffer[pos],2047-pos,"%s -- %d %L / %d %L%s^n",name,stats[6],id,"DMG",stats[5],id,"HITS",wpn)
    }
  }
  return found
}
/* build list of hita for AV List */
getHits(id,killer) {
  new stats[9], body[8], pos = 0
  g_Buffer[0] = 0
  get_user_astats(id,killer,stats,body)
  for(new a = 1; a < 8; ++a)
    if(body[a])
      pos += format(g_Buffer[pos],2047-pos,"%L: %d^n",id,g_bodyParts[a],body[a])
}
/* build list of hits for say hp */
getMyHits(id,killed) {
  new name[32], stats[9], body[8], found = 0
  get_user_name(killed,name,31)
  new pos = format(g_Buffer,2047,"%L",id,"YOU_HIT",name)
  get_user_vstats(id,killed,stats,body)
  for(new a = 1; a < 8; ++a){
    if(body[a]){
      found = 1
      pos += format(g_Buffer[pos],2047-pos," %L: %d ",id,g_bodyParts[a],body[a])
    }
  }
  return found
}
public eResetHud( id )
  g_Killers[ id ][0] = 0
public cmdKiller(id) {
  if ( !SayHP || !isDSMActive() ){
    client_print(id,print_chat,"%L",id,g_disabledMsg )
    return PLUGIN_HANDLED
  }
  if (g_Killers[id][0]) {
    new name[32], stats[9], body[8], wpn[33], mstats[9], mbody[8]
    get_user_name(g_Killers[id][0],name,31)
    get_user_astats(id,g_Killers[id][0],stats,body,wpn,31)
    get_user_vstats(id,g_Killers[id][0],mstats,mbody)
    client_print(id,print_chat,"%L",id,"KILL_INFO1", name,wpn,float(g_Killers[id][2]) * 0.0254 )
    client_print(id,print_chat,"%L",id,"KILL_INFO2", stats[6],stats[5], g_Killers[id][1] )
    client_print(id,print_chat,"%L",id,"KILL_INFO3", mstats[6], mstats[5] )
    if (getMyHits(id,g_Killers[id][0])) client_print(id,print_chat,"%L",id,"KILL_INFO4",g_Buffer)
  }
  else {
    client_print(id,print_chat,"%L",id,"NO_KILLER")
  }
  return PLUGIN_CONTINUE
}
public actionStatsMenu(id,key){
  switch(key){
  case 7: {
    g_userState[id] = 1 - g_userState[id]
    showStatsMenu(id,g_userPosition[id])
  }
  case 8: showStatsMenu(id,++g_userPosition[id])
  case 9: showStatsMenu(id,--g_userPosition[id])
  default:{
    new option = g_userPosition[id] * get_cvar_num("dodstats_maxmenupos") + key
    new index = g_userPlayers[id][option]
    if (is_user_connected(index)){
      if (g_userState[id]){
        displayRank_steam(index,id)
      }
      else{
        displayStats_steam(index,id)
      }
    }
    showStatsMenu(id,g_userPosition[id])
    }
  }
  return PLUGIN_HANDLED
}
showStatsMenu(id,pos){
  if (pos < 0) return PLUGIN_HANDLED
  new max_menupos = get_cvar_num("dodstats_maxmenupos")
  new menu_body[512], inum, k = 0, start = pos * max_menupos
  get_players(g_userPlayers[id],inum)
  if (start >= inum) start = pos = g_userPosition[id] = 0
  new len = format(menu_body,511,"\y%L\R%d/%d^n\w^n",id,"SERVER_STATS",pos + 1,((inum/max_menupos)+((inum%max_menupos)?1:0)))
  new name[32], end = start + max_menupos, keys = (1<<9)|(1<<7)
  if (end > inum) end = inum
  for(new a = start; a < end; ++a){
    get_user_name(g_userPlayers[id][a],name,31)
    keys |= (1<<k)
    len += format(menu_body[len],511-len,"%d. %s^n",++k,name)
  }
  len += format(menu_body[len],511-len,"^n8. %L^n",id,g_userState[id] ? "SHOW_RANK" : "SHOW_STATS" )
  if (end != inum){
    len += format(menu_body[len],511-len,"^n9. More...^n0. %s" , pos ? "Back" : "Exit" )
    keys |= (1<<8)
  }
  else len += format(menu_body[len],511-len,"^n0. %s" , pos ? "Back" : "Exit" )
  show_menu(id,keys,menu_body,-1,"Server Stats")
  return PLUGIN_HANDLED
}

public NadeCatch(id){
  if ( !isDSMActive() )
    return PLUGIN_CONTINUE
  if ( GreCatch || GreCatchSound ){
    new GreId = read_data(2)
    new catch = ( ( get_user_team(id) == 1 && GreId == 15 ) ||  ( get_user_team(id) == 2 && GreId == 16 ) ) ? 1:0
    if ( catch ) {
      if ( GreCatch ){
        new player_name[32]
        get_user_name(id,player_name,32)
        set_hudmessage(200, 100, 0, -1.0, 0.20, 0, 6.0, 6.0, 0.5, 0.15, -1)
        for (new i=1;i<=get_maxplayers();i++){
          if ( g_Killers[0] && g_DeathStats > get_gametime() )
            continue
          show_hudmessage(i,"%L",i,"NADE_CAUGHT",player_name)
        }
      }
      if ( GreCatchSound ) client_cmd(0,"spk misc/impressive")
    }
  }
  return PLUGIN_CONTINUE
}
public show_score(){
  if ( RoundScore && isDSMActive() ){
    set_hudmessage( 255, 100, 50, -1.0, 0.30, 0, 4.0, 5.0, 0.5, 0.15, -1 )
    show_hudmessage( 0 ,"Allies %d -- %d Axis^n(%d--%d)", g_RoundScore[0] , g_RoundScore[1] , dod_get_team_score(ALLIES) , dod_get_team_score(AXIS) )
  }
  return PLUGIN_CONTINUE
}
public round_end(){
  if ( !isDSMActive() )
    return PLUGIN_CONTINUE
  if ( RoundScore ){
    new result = read_data(1)
    g_RoundScore[result-3]++
  }
  if ( !EndRoundStats ) return PLUGIN_CONTINUE
  new g_Buffer2[1024], len, players[32], pnum, stats[9],bodyhits[8]
  get_players( players , pnum )

  new score = 0, kills = 0, hs =0 , damage = 0, hits = 0, who1 = 0, who2 = 0, who3 = 0
  new name1[32],name2[32],name3[32]
  for(new i = 0; i < pnum; ++i){
     get_user_rstats( players,stats, bodyhits )
     if ( stats[7] > score ){
        who1 = players
        score = stats[7]
     }  
  }
  for(new i = 0; i < pnum; ++i){
     get_user_rstats( players,stats, bodyhits )
     if ( stats[0] > kills ){
        who2 = players
        kills = stats[0]
        hs = stats[2]
     }  
  }
  for(new i = 0; i < pnum; ++i){
     get_user_rstats( players,stats, bodyhits )
     if ( stats[6] > damage ){
        who3 = players
        hits = stats[5]
        damage = stats[6]
     }  
  }
  if ( is_user_connected(who1) ) {
     get_user_name( who1, name1, 31 )
  }
  if ( is_user_connected(who2) ) {
     get_user_name( who2, name2, 31 )
  }
  if ( is_user_connected(who3) ) {
     get_user_name( who3, name3, 31 )
  }
  get_players(players,pnum,"c")
  for (new i=0;i<pnum;i++) {
     len = 0
     len += format(g_Buffer2[len] , 1023 - len ,
     "%L: %s^n%d %L^n",players,"BEST_SCORE", name1 , score,players,"OINTS" )
     len += format(g_Buffer2[len] , 1023 - len ,
     "%L: %s^n%d %L / %d %L^n",players,"MOST_KILLS",name2,kills,players,(kills == 1) ? "KILL":"KILLS",hs,players,(hs == 1) ? "HEADSHOT":"HEADSHOTS" )
     len += format(g_Buffer2[len] , 1023 - len ,
     "%L: %s^n%d %L / %d %L^n",players,"MOST_DAMAGE",name3 , damage,players,"DAMAGE",hits,players,(hits == 1) ? "HIT": "HITS" )
     set_hudmessage(100,200,0,0.02,0.40,2, 0.01, 5.0, 0.01, 0.01, -1 )
     show_hudmessage( players , "%s", g_Buffer2 )
  }
  return PLUGIN_CONTINUE
}
public client_putinserver(id)
{
  g_multiKills[id] = { 0 , 0 }
  g_streakKills[ id ] = { 0 , 0 }
}
public client_damage(attacker,victim,damage,wpnindex,hitplace,TA)
{
  if ( TA ){
    if ( TAInfo && is_user_alive(victim) ){
      new attacker_name[32]
      get_user_name(attacker,attacker_name,31)
      client_print(0,print_chat,"%L",LANG_PLAYER,"TA_MSG",attacker_name)
    }
    return PLUGIN_CONTINUE
  }
  if ( BulletDamage ) {
    if ( attacker==victim || xmod_is_melee_wpn(wpnindex) ) return PLUGIN_CONTINUE
    set_hudmessage(0, 100, 200, 0.45, 0.85, 2, 0.1, 4.0, 0.02, 0.02)
    ShowSyncHudMsg(attacker,g_damage_sync,"%i",damage)
    set_hudmessage(200, 0, 0, 0.55, 0.85, 2, 0.1, 4.0, 0.02, 0.02)
    ShowSyncHudMsg(victim,g_damage_sync,"%i",damage)
  }
  return PLUGIN_CONTINUE
}
/* save state at death */
public client_death(killer,victim,wpnindex,hitplace,TK)
{  
  if (!is_user_connected(killer) || !is_user_connected(victim))
    return PLUGIN_CONTINUE
  new killer_name[32]
  get_user_name(killer,killer_name,31)
  
  new enemygre = ( ( (wpnindex == DODW_HANDGRENADE || wpnindex == DODW_MILLS_BOMB) && get_user_team(killer) == 2 ) || ( wpnindex == DODW_STICKGRENADE && get_user_team(killer) == 1 ) ) ? 1:0
  if ( KillingStreak || KillingStreakSound ){
    g_streakKills[ victim ][ 1 ]++
    g_streakKills[ victim ][ 0 ] = 0
  }
  if ( TK && TAInfo ){
    client_print(0,print_chat,"%L",LANG_PLAYER,"TK_MSG",killer_name)
    if ( enemygre ){
      set_hudmessage(255, 100, 100, -1.0, 0.15, 1, 6.0, 6.0, 0.5, 0.15, -1)
      ShowSyncHudMsg(victim, g_center1_sync, "%L",victim,"NADE_FAILEDTK",killer_name)
    }
  }
  new grenade = ( wpnindex == DODW_HANDGRENADE || wpnindex == DODW_STICKGRENADE || wpnindex == DODW_MILLS_BOMB ) ? 1:0
  new headshot = ( hitplace == HIT_HEAD ) ? 1:0
  new selfKill = ( killer == victim ) ? 1:0
  new victim_name[32]
  get_user_name(victim,victim_name,31)
  new Float:statstime = get_cvar_float("dodstats_statstime")
  if ( ShowVictims && getVictims(victim) ){
    set_hudmessage(0,80,220,0.55,0.60,0, statstime, 12.0, 1.0, 2.0, -1)
    show_hudmessage(victim, "%s", g_Buffer)
  }
  if ( ShowAttackers  && getAttackers(victim)){
    set_hudmessage(220,80,0,0.55,0.35,0, statstime, 12.0, 1.0, 2.0, -1)
    show_hudmessage(victim,"%s", g_Buffer)
  }
  if ( selfKill && grenade && GrenadeSuicide ){
    set_hudmessage(255, 100, 100, -1.0, 0.15, 1, 6.0, 6.0, 0.5, 0.15, -1)
    if ( !enemygre ) ShowSyncHudMsg(0, g_center1_sync,"%L",LANG_PLAYER,g_SHeMessages[ random_num(0,3) ],victim_name)
    else
      for (new i=1;i<=get_maxplayers();i++){
        if ( g_Killers[0] && g_DeathStats > get_gametime() )
          continue
        ShowSyncHudMsg(i, g_center1_sync, "%L",i,"NADE_FAILED",victim_name)
      }
  }
  if ( selfKill || TK )
    return PLUGIN_CONTINUE
  new vorigin[3], korigin[3]
  get_user_origin(victim,vorigin)
  get_user_origin(killer,korigin)
  g_Killers[victim][0] = killer
  g_Killers[victim][1] = get_user_health(killer)
  g_Killers[victim][2] = get_distance(vorigin,korigin)
  g_DeathStats[victim] = get_gametime() + statstime

  if ( ShowKiller && !(!get_cvar_num("dodstats_rankbots") &&  (is_user_bot(killer) || is_user_bot(killer)))  ){
    new stats[9], body[8], wpn[33], mstats[9], mbody[8]
  
    get_user_astats(victim,killer,stats,body,wpn,31)
    get_user_vstats(victim,killer,mstats,mbody)
    set_hudmessage(220,80,0,0.05,0.15,0, statstime, 12.0, 1.0, 2.0, -1)
    getHits(victim,killer)
    show_hudmessage(victim,"%L%L%L%L",victim,"KILL_INFO1",killer_name,wpn,float(g_Killers[victim][2]) * 0.0254,
   /*2*/ victim,"KILL_INFO2",stats[6],stats[5],g_Killers[victim][1],
   /*3*/ victim,"KILL_INFO3",mstats[6],mstats[5],
   /*4*/ victim,"KILL_INFO4",g_Buffer )
  }
  if ( KillerHp ){
    new kmsg[128]
    format(kmsg,127,"%L",victim,"STILL_HAS",killer_name,g_Killers[victim][1])
    client_print(victim,print_console,"%s^n",kmsg)
    set_hudmessage(255,255,255,0.02,0.9,2, 1.5, 3.0, 0.02, 5.0, -1)
    show_hudmessage(victim, "%s", kmsg)
  }
  if ( KillingStreak || KillingStreakSound ){   
    g_streakKills[ killer ][ 0 ]++
    g_streakKills[ killer ][ 1 ] = 0
    new a = g_streakKills[ killer ][ 0 ] - 3
    if ( (a > -1) && !( a % 2 ) ) {
      if ( (a >>= 1) > 6 ) a = 6
      if ( KillingStreak ){
        set_hudmessage(0, 100, 255, 0.05, 0.55, 2, 0.02, 6.0, 0.01, 0.1, -1)
        for (new i=1;i<=get_maxplayers();i++){
          if ( g_Killers[0] && g_DeathStats > get_gametime() )
            continue
          ShowSyncHudMsg(i, g_left_sync, "%L",i,g_KillingMsg[ a ], killer_name)
        }
      }
      if (  KillingStreakSound )  client_cmd( 0 ,  "spk misc/%s" , g_Sounds[ a ] )

    }
  }
  if ( MultiKill || MultiKillSound ) {
      g_multiKills[killer][0]++
      g_multiKills[killer][1] += headshot
      new param[2]
      param[0] = killer
      param[1] = g_multiKills[killer][0]
      set_task( 4.0 + float( param[1] ) ,"checkKills",0,param,2)
  }
  if ( xmod_is_melee_wpn(wpnindex) && ( KnifeKill || KnifeKillSound )  ){
    if ( KnifeKill ){

      set_hudmessage(255, 100, 100, -1.0, 0.15, 1, 6.0, 6.0, 0.5, 0.15, -1)
      for (new i=1;i<=get_maxplayers();i++){
        if ( g_Killers[0] && g_DeathStats > get_gametime() )
          continue
        ShowSyncHudMsg(i, g_center1_sync, "%L",i,g_KnifeMsg[ random_num(0,3) ],killer_name,victim_name)
      }
    }
    if ( KnifeKillSound ) client_cmd(0,"spk misc/humiliation")
  }
  else if ( grenade ){
    if ( enemygre ){
      if ( EnemyGreKill ){
        set_hudmessage(255, 100, 100, -1.0, 0.15, 1, 6.0, 6.0, 0.5, 0.15, -1)
        for (new i=1;i<=get_maxplayers();i++){
          if ( g_Killers[0] && g_DeathStats > get_gametime() )
            continue
          ShowSyncHudMsg(i, g_center1_sync, "%L",LANG_PLAYER,"NADE_MASTER",killer_name)
        }
      }
      if ( EnemyGreKillSound ) client_cmd(0,"spk misc/godlike")
    }
    else if ( GrenadeKill ){
      set_hudmessage(255, 100, 100, -1.0, 0.15, 1, 6.0, 6.0, 0.5, 0.15, -1)
      for (new i=1;i<=get_maxplayers();i++){
        if ( g_Killers[0] && g_DeathStats > get_gametime() )
          continue
        ShowSyncHudMsg(i, g_center1_sync, "%L",i,g_HeMessages[ random_num(0,3)],killer_name,victim_name)
      }   
    }
  }
  if ( headshot && (HeadShotKill || HeadShotKillSound) && !xmod_is_melee_wpn(wpnindex) ){
    if ( HeadShotKill ){
      new weapon[32], message[128], players[32], pnum
      xmod_get_wpnname(wpnindex,weapon,31)
      get_players(players,pnum,"c")
      for (new i=0;i<pnum;i++) {
        if ( g_Killers[0] && g_DeathStats > get_gametime() )
          continue
        format( message, 127, "%L",players,g_HeadShots[ random_num(0,6) ] )
        replace( message, 127 , "$vn", victim_name )
        replace( message, 127 , "$wn", weapon )   
        replace( message, 127 , "$kn", killer_name )
        set_hudmessage(100, 100, 255, -1.0, 0.19, 0, 6.0, 6.0, 0.5, 0.15, -1)  
        ShowSyncHudMsg(players, g_center2_sync, "%s", message)
      }
    }
    if ( HeadShotKillSound ) client_cmd(0,"spk misc/headshot")
  }
  if ( wpnindex == DODW_MORTAR && MortarKill ){
    set_hudmessage(100, 100, 255, -1.0, 0.19, 0, 6.0, 6.0, 0.5, 0.15, -1)
    for (new i=1;i<=get_maxplayers();i++){
      if ( g_Killers[0] && g_DeathStats > get_gametime() )
        continue
      ShowSyncHudMsg(i, g_center2_sync, "%L",i,mortarmsg[random_num(0,1)],killer_name,victim_name)
    }
  }
  if ( DoubleKill || DoubleKillSound ){
    new Float:nowtime = get_gametime()
    if ( g_prevKill == nowtime && g_prevKillerId == killer ){
      g_KillCount++
      if ( DoubleKill || DoubleKillSound){
        set_task(0.01,"showDoubleKill")
      }
    }
    else g_KillCount = 1
    g_prevKill = nowtime
    g_prevKillerId = killer
  }
  return PLUGIN_CONTINUE
}
public showDoubleKill(){
  new pos = g_KillCount - 2
  if ( pos > 2 ) pos = 2
  if ( DoubleKill ) {
    new name[32]
    get_user_name(g_prevKillerId,name,31)
    if ( pos == 2 ){
      new kills[3]
      num_to_str(g_KillCount,kills,2)
    }
    set_hudmessage(65, 102, 158, -1.0, 0.25, 0, 6.0, 6.0, 0.5, 0.15, -1)
    for (new i=1;i<=get_maxplayers();i++){
      if ( g_Killers[0] && g_DeathStats > get_gametime() )
        continue
      show_hudmessage(i,"%L",i,g_DoubleKillMsg[pos],name,g_KillCount)
    }
  }
  if ( DoubleKillSound ) {
    client_cmd(0,"spk misc/%s",g_DoubleKillSound[pos])
  }
}
public checkKills(param[]){
  new id = param[0]
  new a = param[1]
  if (a == g_multiKills[id][0]){
    a -= 3
    if ( a > -1 ){
      if ( MultiKill ) {
        new name[32]
        get_user_name(id,name,31)
        set_hudmessage(255, 0, 100, 0.05, 0.65, 2, 0.02, 6.0, 0.01, 0.1, -1)
        if ( a > 6 ) a = 6
        for (new i=1;i<=get_maxplayers();i++){
          if ( g_Killers[0] && g_DeathStats > get_gametime() )
            continue
          ShowSyncHudMsg(i, g_left_sync, "%L",i,g_MultiKillMsg[a],name,g_multiKills[id][0],g_multiKills[id][1])
        }
      }
      if ( MultiKillSound ) client_cmd(0,"spk misc/%s",g_Sounds[a])
    }
    g_multiKills[id] = { 0,0 }
  }
}
/***************
  LeadSounds
****************/
new LeaderScore
new NumOfLeaders
new LeaderID
new PScore[33]
public client_disconnect(id) {
  if ( !LeadSounds || isDSMActive() ) return PLUGIN_CONTINUE
  if ( PScore[id] == LeaderScore && LeaderScore > 0 ){
    NumOfLeaders --
    PScore[id] = 0
    if ( NumOfLeaders == 0 ){
      LeaderScore = 0
      for ( new i=1; i<33; i++ )
        if ( PScore > LeaderScore ){

          LeaderScore = PScore
          NumOfLeaders = 1
          LeaderID = i
        }
        else if ( PScore == LeaderScore )
          NumOfLeaders ++
      if ( LeaderScore == 0 )
        NumOfLeaders = 0
      else if ( NumOfLeaders == 1 )
        client_cmd( LeaderID,"spk misc/takenlead" )
      else if ( NumOfLeaders > 1 )
        for ( new i=1; i<33; i++ )
          if ( PScore == LeaderScore )
            client_cmd( i,"spk misc/tiedlead")
      //else no players on server or have 0 score
    }
    else if ( NumOfLeaders == 1 )
      if ( LeaderID != id ){
        client_cmd( LeaderID,"spk misc/takenlead" )
      }
      else {
        for ( new i=1; i<33; i++ )
        if ( PScore == LeaderScore ) client_cmd( i,"spk misc/takenlead" )
      }
  }
  else PScore[id] = 0
  return PLUGIN_CONTINUE
}

public get_score(){
  if ( !LeadSounds || !isDSMActive() ) return PLUGIN_CONTINUE
  new PlayerID = read_data(1)
  new PlayerScore = read_data(2)
  if ( PlayerScore > PScore[PlayerID] ){
    PScore[PlayerID] = PlayerScore
    if ( PlayerScore > LeaderScore  ){
      if ( NumOfLeaders == 1 ){
        if ( LeaderID != PlayerID ){  
          client_cmd( LeaderID,"spk misc/lostlead" )
          client_cmd( PlayerID,"spk misc/takenlead" )
        }
      }
      else if ( NumOfLeaders > 1 ){
        for ( new i=1; i<33; i++ )
          if ( PScore == LeaderScore  && i != PlayerID )
            client_cmd( i,"spk misc/lostlead" )
        client_cmd( PlayerID,"spk misc/takenlead" )
      }
      else if ( NumOfLeaders == 0 ){ // start
        for ( new i=1; i<33; i++ )
          if ( i != PlayerID && is_user_connected(i) ) client_cmd( i,"spk misc/lostlead" )
        client_cmd( PlayerID,"spk misc/takenlead" )
      }
      LeaderScore = PlayerScore
      LeaderID = PlayerID   
      NumOfLeaders = 1
    }
    else if ( PlayerScore == LeaderScore ){
      if ( NumOfLeaders == 1 )
  client_cmd( LeaderID,"spk misc/tiedlead" )
      client_cmd( PlayerID,"spk misc/tiedlead" )
      NumOfLeaders++
    }
  }
  return PLUGIN_CONTINUE
}
isDSMActive(){
  if ( get_cvar_num("dodstats_pause") )
    return 0
  return 1
}
public cmdStatsMe(id){
  if ( !SayStatsMe || !isDSMActive() ){
    client_print(id,print_chat,"%L",id,g_disabledMsg )
    return PLUGIN_HANDLED
  }
  displayStats_steam(id,id)
  return PLUGIN_CONTINUE
}
displayStats_steam(id,dest) {
new name[32], stats[9], body[8]
get_user_wstats(id,0,stats,body)
new pos = copy(g_Buffer,2047,"<html><head><style type=^"text/css^">pre{color:#FFB000;}body{background:Black;margin-left:8px;margin-top:0px; color:#FFB000;}td{text-align:right;font-size:12px;}</style></head><body><pre>")
pos += format(g_Buffer[pos],2047-pos,"<table><tr><td>%L </td><td>%L </td><td>%L </td><td>%L </td><td>%L </td><td>%L </td><td>%L </td></tr>",
               dest,"KILLS_ANSI",dest,"DEATHS_ANSI",dest,"SCORE_ANSI",dest,"TKS_ANSI",dest,"HITS_ANSI",dest,"SHOTS_ANSI",dest,"HS_ANSI")
pos += format(g_Buffer[pos],2047-pos,"<tr><td>%d </td><td>%d </td><td>%d </td><td>%d </td><td>%d </td><td>%d </td><td>%d </td></tr></table><br><br><br>",
  stats[0],stats[1],stats[7],stats[3],stats[5],stats[4],stats[2])
pos += format(g_Buffer[pos],2047-pos,"<table><tr><td style='text-align:left'>%L </td><td>%L </td><td>%L </td><td>%L </td><td>%L </td><td>%L <td></tr>",
               dest,"WEAPON_ANSI",dest,"SHOTS_ANSI",dest,"HITS_ANSI",dest,"DAMAGE_ANSI",dest,"KILLS_ANSI",dest,"DEATHS_ANSI")
for(new a = 1; a < DODMAX_WEAPONS; ++a) {
   if (get_user_wstats(id,a,stats,body)){
     if ( xmod_is_melee_wpn(a) )
       stats[4] = -1;
     xmod_get_wpnname(a,name,31)
     pos += format(g_Buffer[pos],2047-pos,"<tr><td style='text-align:left'>%s </td><td>%d </td><td>%d </td><td>%d </td><td>%d </td><td>%d </td></tr>^n",
  name,stats[4],stats[5],stats[6],stats[0],stats[1])
   }
}
copy(g_Buffer[pos],2047-pos,"</table></pre></body></html>")
get_user_name(id,name,31)
show_motd(dest,g_Buffer,name)
}
public cmdRank(id){
  if ( !SayRank || !isDSMActive() ){
    client_print(id,print_chat,"%L",id,g_disabledMsg )
    return PLUGIN_HANDLED
  }
  displayRank_steam(id,id)
  return PLUGIN_CONTINUE
}
displayRank_steam(id,dest) {
new name[32], stats[9], body[8]
new rank_pos = get_user_stats(id,stats,body)
new pos = copy(g_Buffer,2047,"<html><head><style type=^"text/css^">pre{color:#FFB000;}body{background:Black;margin-left:8px;margin-top:0px;color:#FFB000;font-size:12px;}</style></head><body><pre>")
pos += format(g_Buffer[pos],2047-pos,
               "<table style='font-size:12px;'><tr><td>%L </td><td>%L </td><td>%L </td><td>%L </td><td>%L </td><td>%L </td><td>%L </td></tr>",dest,"KILLS_ANSI",dest,"DEATHS_ANSI",dest,"SCORE_ANSI",dest,"TKS_ANSI",dest,"HITS_ANSI",dest,"SHOTS_ANSI",dest,"HS_ANSI")
pos += format(g_Buffer[pos],2047-pos,
               "<tr><td>%d</td><td>%d</td><td>%d</td><td>%d</td><td>%d</td><td>%d</td><td>%d</td></tr></table><br><br>",
               stats[0],stats[1],stats[7],stats[3],stats[5],stats[4],stats[2])
pos += format(g_Buffer[pos],2047-pos,"%L^n%L: %d^n%L: %d^n%L: %d^n%L: %d^n%L: %d^n%L: %d^n%L: %d^n",
dest,"HITS_ANSI",dest,g_bodyParts_ansi[1],body[1],dest,g_bodyParts_ansi[2],body[2],dest,g_bodyParts_ansi[3],body[3],dest,g_bodyParts_ansi[4],body[4],
dest,g_bodyParts_ansi[5],body[5],dest,g_bodyParts_ansi[6],body[6],dest,g_bodyParts_ansi[7],body[7])
pos += format(g_Buffer[pos],2047-pos,"%L <b>%d</b> %L <b>%d</b>",dest,(id==dest)?"YOUR_RANK_IS_ANSI":"THEIR_RANK_IS_ANSI",
           rank_pos,dest,"OF_ANSI",get_statsnum())
pos += format(g_Buffer[pos],2047-pos,"</pre></body></html>")
get_user_name(id,name,31)
show_motd(dest,g_Buffer,name)
}
public cmdTopX(id) {
  if ( !SayTop15 || !isDSMActive() ){
    client_print(id,print_chat,"%L",id,g_disabledMsg )
    return PLUGIN_HANDLED
  }
  getTopX_steam(id)
  new g_Top[32]
  format(g_Top,31,"%L",id,"TOPX",get_cvar_num("dodstats_topvalue"))
  show_motd(id,g_Buffer,g_Top)
  return PLUGIN_CONTINUE
}
/* get top 15 */
getTopX_steam(id){
  new stats[9], body[8], name[256]
  new pos = copy(g_Buffer,2047,"<html><head><style type=^"text/css^">pre{color:#FFB000;}body{background:Black;margin-left:8px;margin-top:0px;color:#FFB000;}td{text-align:right;}table{font-size:12px}</style></head><body><pre>")
  pos += format(g_Buffer[pos],2047-pos,"<table><tr><td>#  </td><td style='text-align:left'>%L</td><td> %L</td><td> %L</td><td> %L</td><td> %L</td><td> %L</td><td> %L</td><td> %L</td></tr>",
  id,"NICK_ANSI",id,"KILLS_ANSI",id,"DEATHS_ANSI",id,"SCORE_ANSI",id,"TKS_ANSI",id,"HITS_ANSI",id,"SHOTS_ANSI",id,"HS_ANSI")
  new imax = get_statsnum()
  new itmax =  get_cvar_num("dodstats_topvalue")
  if (imax > itmax )
    imax = itmax
  for(new a = 0; a < imax; ++a){
    get_stats(a,stats,body,name,31);
    replace_all(name, 255, "&", "&amp;")
    replace_all(name, 255, "<", "<")
    replace_all(name, 255, ">", ">")
    pos += format(g_Buffer[pos],2047-pos,"<tr><td>%d. </td><td style='text-align:left;'>%s</td><td>%d</td><td>%d</td><td>%d</td><td>%d</td><td>%d</td><td>%d</td><td>%d</td></tr>^n",
  a+1,name,stats[0],stats[1],stats[7],stats[3],stats[5],stats[4],stats[2])
  }
  pos += format(g_Buffer[pos],2047-pos,"</table></pre></body></html>")
}

该用户从未签到

发表于 2008-5-30 20:36:16 | 显示全部楼层
copy(g_Buffer,2047,"<html><head><style type=^"text/css^">pre{color:#FFB000;}body{background:Black;margin-left:8px;margin-top:0px; color:#FFB000;}td{text-align:right;font-size:12px;}</style></head><body><pre>")

改成这样
copy(g_Buffer,2047,"<html><head><META http-equiv=Content-Type content='text/html ;charset=UTF-8'><style type=^"text/css^">pre{color:#FFB000;}body{background:Black;margin-left:8px;margin-top:0px; color:#FFB000;}td{text-align:right;font-size:12px;}</style></head><body><pre>")

据说是这样,就是在<head>与</head>之间插入<META http-equiv=Content-Type content='text/html ;charset=UTF-8'>

该用户从未签到

 楼主| 发表于 2008-5-30 20:59:29 | 显示全部楼层
谢谢了斑竹
我去试试
..........

该用户从未签到

发表于 2008-5-30 21:15:45 | 显示全部楼层
吓到了。。。看不下去

该用户从未签到

发表于 2008-5-30 21:46:55 | 显示全部楼层
好复杂的东西 看不懂

该用户从未签到

发表于 2008-5-30 22:26:34 | 显示全部楼层
我也被吓了一跳        

该用户从未签到

 楼主| 发表于 2008-5-30 22:39:36 | 显示全部楼层
可以显示中文排名了
可是问题又出现了 总排名可以显示中文 可是单独查看自己的排名却都是乱码

以前没有强制时单独查看自己的排名显示中文 总排名是乱码
现在知识颠倒了一下   晕
请斑竹赐教
谢谢

该用户从未签到

 楼主| 发表于 2008-5-30 22:41:53 | 显示全部楼层
请问怎么强制  玩家自己的排名信息
再那段代码上添加

该用户从未签到

发表于 2008-5-30 22:59:45 | 显示全部楼层
有<head></head>字样的就3段吧 改完以后再运行dod看看就知道是哪段

该用户从未签到

 楼主| 发表于 2008-5-30 23:37:03 | 显示全部楼层
那段都不能完全显示
里面好象是  ANSI  和UTF-8   两种显示的  要中文就有一些需要ANSI显示的
另外则反之
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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