搜索
查看: 13746|回复: 50

[插件发布]显示IP,城市插件For amxx0.16 发布。作者eXtrA_Csharp和nwb13,插件策划x86

[复制链接]
发表于 2004-10-10 21:22:48 | 显示全部楼层 |阅读模式 来自 中国–湖北–襄阳
插件功能:
配合Mysql的ip库,在玩家进入服务器的时候分析ip显示玩家所在的城市和所在网吧。观察模式也可以查看玩家所在城市。
声明:
1)代码绝对没有问题,就是我服务器正在使用的代码。
2)数据库只有靠大家共同来完善了。具体的数据库结构都有了。Mysql代码作者Csharp说,理论上最好用 QQ ip库,经过整理然后导出来。
3)插件是几个大侠共同劳动的结果,只可惜他们(Csharp和nwb13)都已经归隐,剩下的只有靠我们大家共同努力了。
4)关于此插件我只是代为发布,技术支持请大家互相帮助了。有什么不到的地方请谅解。相信我们点通应该是可以搞定的。
这个是amxx0.16的版本。


Mysql数据库结构
数据库结构:
CREATE TABLE IF NOT EXISTS `ipdatau` (
`StartIP` bigint(20) unsigned NOT NULL default '0',
`EndIP` bigint(20) unsigned NOT NULL default '0',
`Country` varchar(128) default '',
`Prov` varchar(128) default NULL,
`City` varchar(128) default NULL,
`Address` varchar(255) default NULL,
UNIQUE KEY `PK_ipdatau` (`StartIP`)
) TYPE=MyISAM;
/*
* 加入和离开服务器信息提示插件
* Enter and Leave Message
* 版本 0.3beta
*
*  原作者 [MUPPETS] Gonzo
*  由eXtrA_Csharp和nwb13修改
*  最后修改时间2004-10-10
*
* This AMX plugin requires MySQL module.(该插件需要MySql模块支持,请确认你开启了必要的模块)
* For this to work, you might create your MySQL admins table with this SQL query :(你需要按照下面的格式来创建sql的数据内容)

        CREATE TABLE IF NOT EXISTS `ipdatau` (
                `StartIP` bigint(20) unsigned NOT NULL default '0',
                `EndIP` bigint(20) unsigned NOT NULL default '0',
                `Country` varchar(128) default '',
                `Prov` varchar(128) default NULL,
                `City` varchar(128) default NULL,
                `Address` varchar(255) default NULL,
                UNIQUE KEY `PK_ipdatau` (`StartIP`)
        ) TYPE=MyISAM;

* 特别感谢:
*        X86 , Csharp , nwb13
*        在制作期间的技术支持和测试
*/

/*
* 命令:
* amx_enter_message "%name% has joined!\nEnjoy in this game!\n(Rank is %rankpos%)\n%IP%"
* amx_leave_message "%name% has left!\nI hope you will come back."
*
* If you are using csstats module then you may use
* %rankpos% expression in amx_enter_message cvar.
*
* 如果你需要显示中文,请在amx.cfg里添加
* amx_enter_message "%name% 进入了服务器!\n希望你玩得愉快!\n(排名第 %rankpos%)\n来自 %IP%"
* amx_leave_message "%name% 离开了服务器!\n欢迎你下次再来."
* 接着把amx.cfg以utf-8的格式保存
*
*/

#include <amxmod>
#include <csstats>
#include <mysql>

new bool:g_specMode[33]
new temp[256]

public setSpecMode(id) {
  new arg[12]
  read_data( 2 , arg , 11 )
  g_specMode[ id ] = ( arg[10] == '4' )  //- 设置为第一人称视角
}

public showipinfo(id){
        if ( g_specMode[id] ){
    new a = read_data(2)
    if ( is_user_connected( a ) ){
            new ipaddr,userip[16],buffer[512],name[32]
                        get_user_ip(a,userip,16,1)
                        ipaddr=ip_to_number(userip)
                         sql_code(ipaddr)
                         while(replace(temp, 255, "\n", "^n")){}
                         get_user_name( a ,name,31)
                         format(buffer,511,"%s^n%s",name,temp)
                         set_hudmessage(200, 100, 0, 0.85, 0.35, 0, 6.0, 6.0, 0.5, 0.15, 8)  //显示观察视角坐标 右上角
                         show_hudmessage(id,buffer)
                 }
         }
}

public client_putinserver(id){
   new param[34], len
   param[0] = id
   len = get_user_name(id,param[1],31)
   set_task(2.0, "enter_msg", 0, param,len + 2)
   return PLUGIN_CONTINUE
}

public client_disconnect(id){
   new param[34], len
   param[0] = id
   len = get_user_name(id, param[1], 31)
   set_task(2.0, "leave_msg", 0, param, len + 2)
   return PLUGIN_CONTINUE
}

public enter_msg(param[]) {
   new message[512],hostname[64],userip[16],ipaddr
         get_user_ip(param[0],userip,16,1)
         ipaddr=ip_to_number(userip)
         sql_code(ipaddr)
   get_cvar_string("amx_enter_message", message, 511)
   get_cvar_string("hostname", hostname, 63)
   replace(message,511, "%hostname%", hostname)
   if (cvar_exists("csstats_reset")){
      new data[8], rankpos[8], pos
      pos = get_user_stats(param[0],data,data)
      numtostr(pos,rankpos,7)
      replace(message, 511, "%rankpos%", rankpos)
   }
   replace(message, 511, "%name%", param[1])
   replace(message, 511, "%IP%", temp)
   while(replace(message, 511, "\n", "^n")){}
   set_hudmessage(0, 255, 0, 0.10, 0.55, 0, 6.0, 6.0, 0.5, 0.15, 3)
   show_hudmessage(0, message)
   return PLUGIN_CONTINUE
}

public leave_msg(param[]) {
   new message[192],hostname[64]
   get_cvar_string("amx_leave_message", message, 191)
   get_cvar_string("hostname", hostname, 63)
   replace(message, 191, "%hostname%", hostname)
   replace(message, 191, "%name%", param[1])
   while(replace(message, 191, "\n", "^n")){}
   set_hudmessage(255, 0, 255, 0.10, 0.55, 0, 6.0, 6.0, 0.5, 0.15, 3)
   show_hudmessage(0, message)
   return PLUGIN_CONTINUE
}

sql_code(ipaddr){
        new query[256]
        new host[64],user[32],pass[32],db[32],error[128]
        new country[32],address[64]//,prov[32],city[32]
        if (ipaddr >=0){
                format(query, 255, "SELECT * FROM ipdatau WHERE StartIP <=%d ORDER BY StartIP DESC  LIMIT 0 , 1", ipaddr)
        }
        else{
                format(query, 255, "SELECT * FROM ipdatau WHERE StartIP <=%d + 4294967296 ORDER BY StartIP DESC  LIMIT 0 , 1", ipaddr)
        }
       
  get_cvar_string("amx_mysql_host",host,63)
  get_cvar_string("amx_mysql_user",user,31)
  get_cvar_string("amx_mysql_pass",pass,31)
  get_cvar_string("amx_mysql_db",db,31)
        new dbc = mysql_connect(host,user,pass,db,error,32)
        //new dbc = mysql_connect("127.0.0.1","root","","amx",error,32)
        if (dbc < 1 ){
                server_print("[AMXX] SQL Connection Failed, CODE[Z1]")
                return PLUGIN_HANDLED
        }
        if (mysql_query(dbc,query) < 1){
                mysql_error(dbc,error,127)
                server_print("[AMXX] MySQL error(CODE[Z2]): can't load address: '%s'",error)
                return PLUGIN_HANDLED
        }
       
        while(mysql_nextrow(dbc) > 0 ){
                mysql_getfield(dbc, 3,  country, 31)
                //mysql_getfield(dbc, 4,  prov, 31)
                //mysql_getfield(dbc, 5,  city, 31)
                mysql_getfield(dbc, 6,  address, 63)
        }
        mysql_close(dbc)
        //new temp[256]
        format(temp,255,"%s \n%s",country,address)
        //return temp
}

ip_to_number(userip[16]){
        new ipb1[12],ipb2[12],ipb3[12],ipb4[12]
        new ip
        new nipb1,nipb2,nipb3,nipb4
        new uip[16]
        copy(uip, 16, userip)
        while(replace(uip, 16, ".", " ")){}
        parse(uip, ipb1, 12, ipb2, 12, ipb3, 12, ipb4, 12)
        nipb1 = str_to_num(ipb1)
        nipb2 = str_to_num(ipb2)
        nipb3 = str_to_num(ipb3)
        nipb4 = str_to_num(ipb4)
        ip=nipb1*16777216 + nipb2*65536 + nipb3*256 + nipb4
        return ip
}

public plugin_init() {
  register_plugin("Enter-Leave Message-ip","0.3 beta"eXtrA_Csharp/nwb13")
  register_event("TextMsg","setSpecMode","bd","2&ec_Mod")
  register_event("StatusValue","showipinfo","bd","1=2")
  register_cvar("amx_enter_message", "%name% has joined!\nEnjoy in this game!\n(Rank is %rankpos%)\n%IP%")
  register_cvar("amx_leave_message", "%name% has left!\nI hope you will come back.")
  return PLUGIN_CONTINUE
}


再来一个点通下载中心的下载地址
http://ex.2288.org/Soft/ShowSoft.asp?SoftID=43
导出了Csharp帮我导的Mysql ip库也不知道方法对不对,如何导入也不知道,大家互相想想办法吧。这一份是追捕的ip库。
ip库的生成方法,从纯真的QQ ip库导出,然后导入到Mysql。
http://down.ttdown.com/SoftView/SoftView_19219.html 转换到数据库的工具
目前未解决问题,国家,城市等字段没有办法整理,请高手出手吧

本帖子中包含更多资源

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

×
发表于 2004-10-10 21:37:23 | 显示全部楼层 来自 中国–黑龙江–齐齐哈尔
支持, 不过 不能在0.2下通过吗?

报告 我在我的 0.16的 SC下通不过, 在10.8日的 0.2 下也通不过.

版主发个完整点的版本吧
等待 FOR 0.20 的版本.........
回复

使用道具 举报

发表于 2004-10-10 22:26:13 | 显示全部楼层 来自 中国–吉林–长春
麻烦发一下你的数据库好吗?
回复

使用道具 举报

发表于 2004-10-10 22:34:44 | 显示全部楼层 来自 中国–云南–大理白族自治州
:1:
麻烦了,偶对Mysql一窍不通..............
Post by olol
麻烦发一下你的数据库好吗?

对啊,最好再有个祥细点的安装方法,偶太菜了,不好意思呐,麻烦x86了!
回复

使用道具 举报

发表于 2004-10-10 23:00:21 | 显示全部楼层 来自 中国–陕西–宝鸡
回复

使用道具 举报

发表于 2004-10-10 23:03:33 | 显示全部楼层 来自 中国–云南–大理白族自治州
谢谢!看来得从头补习了 :5:
回复

使用道具 举报

发表于 2004-10-10 23:47:05 | 显示全部楼层 来自 中国–吉林–长春
你忘记说ip的格式了
回复

使用道具 举报

 楼主| 发表于 2004-10-11 00:15:26 | 显示全部楼层 来自 中国–湖北–襄阳
Post by olol
你忘记说ip的格式了

3740803328 3740803839 广东省深圳市 广东省深圳市 广东省深圳市 福田区天威视讯
回复

使用道具 举报

发表于 2004-10-11 00:46:05 | 显示全部楼层 来自 中国–广东–深圳–南山区
深圳市联盟网吧大力支持!
回复

使用道具 举报

发表于 2004-10-11 12:17:15 | 显示全部楼层 来自 中国–广西–柳州
请问有没有AMX0.93版本!
回复

使用道具 举报

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

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