xuwenqi 发表于 2010-1-1 14:27:44

修改的老友记中文ID2.1.兼容游戏中改名(有更新)

本帖最后由 xuwenqi 于 2011-1-8 23:11 编辑

注意事项
本插件经过修改
使用环境有所要求
需要服务器支持中文ID(swds.dll控制的,4554的可用ru发的中文补丁)
经过修改,免去了各种修改模块的支持.用AMXX自身的文件编译即可/*
   名称:CS中文ID插件
   作者:PooHoo@老友记
   来源:http://cs-friends.com.cn
   (AMXX1.76 以上测试通过)

   功能:
      实现 CS 中文ID功能
      简单的样例插件,从文本文件里读取中文ID设置
      如果数据量大,建议改用数据库比较理想,管理也比较方便

   插件安装说明:
      1,需要使用 ig 修改过的 fakemeta_amxx.dll 模块配合使用
         替换你原来的`fakemeta_amxx.dll 即可,不影响 fakemeta 里的任何功能
      2,chinese_id.ini 为中文ID设置文件,放到 \amxmodx\configs\ 目录下
         按里面的说明添加信息,记住要保存为 UTF8 无签名格式
      3,把本插件配置放到 plugin.ini 文件的最上面

   插件开发使用者说明:
      1,主要是使用 ig_setname 函数,实现中文ID的名字更换
         其他更好的方法?等待你来发掘。。。
      2,在你的 fakemeta.ini 里最下面增加下面的函数定义,否则无法编译
         // 设置玩家名字
         // name = 玩家新的名字(超过31个字节无效)
         native ig_setname(id, const newname[])

   中文ID使用的已知问题:
      1,按麦克风通话时,中文ID的玩家名字为乱码,无法正确显示。
      2,玩家在游戏里的改名功能被禁用,如果要改名,需要离线改好再进。
      3,是否有其他问题???

   鸣谢:
       的技术支持与帮助
      http://cs-friends.com.cn

        修改by Nicky.xu
   经过修改后,只需要swds.dll文件支持中文ID,Fakemeta这个模块可以用amxx自带的原版
       

*/


new const PLUGINNAME[] = "中文ID"
new const VERSION[]    = "2.1"
new const AUTHORS[]    = "poohoo @ 老友记"

#include <amxmodx>
#include <amxmisc>
#include <fakemeta>


new g_SetName
new g_SetAllow
new FILE

public plugin_init()
{
   register_plugin(PLUGINNAME, VERSION, AUTHORS)

   new configsdir
   get_configsdir(configsdir, sizeof(configsdir)-1)
   formatex(FILE, sizeof(FILE)-1, "%s/chinese_id.ini", configsdir)

   if (!file_exists(FILE))
      set_fail_state("File (configs/chinese_id.ini) open error.")
}



// 设置 id 需要的名字
public set_name(id, const newname[])
{
   if (strlen(newname)<1)
      return

   g_SetAllow = 1
   copy(g_SetName, 31, newname)
   //one_name(id, g_SetName, 31)
   set_user_info(id, "name", g_SetName)
}

public client_connect(id)
{
   remove_task(id)
   g_SetAllow = 0
}

public client_putinserver(id)
{
   // 延时足够的时间,等待 admin 权限认证插件完成权限设置后,再执行更换名字
   set_task(random_float(3.0,3.0), "get_name_from_file", id)
}

// 从文件里检查是否有对应的中文ID
public get_name_from_file(id)
{
   if (!is_user_connected(id))
      return
   
   new name
   get_user_name(id, name, 31)

   new set = 0
   new hFile = fopen(FILE, "r")
   if (hFile)
   {
      new line, tmpName, tmpNameCN

      while (fgets(hFile, line, sizeof(line)-1))
      {
         tmpName = ""
         tmpNameCN = ""
         trim(line)
         if (line==';' || line=='/') continue

         parse(line, tmpName,sizeof(tmpName)-1, tmpNameCN,sizeof(tmpNameCN)-1)
         trim(tmpName)
         trim(tmpNameCN)

         if (strcmp(name, tmpName)==0)
         {
            copy(name, 31, tmpNameCN)
            set = 1
            break
         }
      }
   }
   fclose(hFile)

   // 完成后,设置新的名字
   if (set)
      set_name(id, name)
}




xuwenqi 发表于 2010-1-1 14:28:30

忘了说,要加载多个memhack_amxx.dll
包里都有.

amyvox 发表于 2010-1-1 15:20:24

你好 提示load失败
AMXMODX v1.76b
OooH Team Flashed1.0      PooHoo@cs-friend3389_Team_Flashrunning
unknown            unknownunknown         chinese_id_2.ambad load

amyvox 发表于 2010-1-1 15:20:41

本帖最后由 amyvox 于 2010-1-1 15:28 编辑

已经搞定 少加载一个文件
谢谢楼主的 提供

travelwink 发表于 2010-1-1 16:09:27

修改版出来拉.

qiang_zhong 发表于 2010-1-1 17:45:15

本帖最后由 qiang_zhong 于 2010-1-1 17:49 编辑

通过一个文件管理英文名字,中文名字和其他的,全部实现SQL文件缓存,无需多次读取数据库。只需要在换图的时候读取1次数据库,就把英文名字和中文名字缓存到AMXX里面,当用英文名字进入服务器,优先检查是否有匹配的中文名字,有的话,更换,更换后,在验证权限。全部由admin_sql.amxx实现。数据库采用多级验证方式,使用了冗余模式,可配置多个数据库,当A数据故障时,插件自动判断,然后转向B数据库读取数据。现阶段,可设置3个数据库冗余。

xuwenqi 发表于 2010-1-1 17:53:50

没玩过数据库

457417918 发表于 2010-1-1 19:21:24

作个记号以后用

shaoyewei 发表于 2010-1-2 10:38:44

6# qiang_zhong


請問有詳細教程嗎?

xuwenqi 发表于 2010-1-2 11:03:11

9# 260009610


比分按 你所改的ID算,因为admin.amxx只是读权限,跟比分无关
admin.amxx所支持的会员数我暂时没试过有多少个,因为这个不是我改的
10个中文字,是CS内核问题,解决请找服务端某DLL文件
6楼的功能与我这些插件无关(一个读数据库权限,一个读ini的,有啥联系?)
页: [1] 2 3 4 5 6 7 8
查看完整版本: 修改的老友记中文ID2.1.兼容游戏中改名(有更新)