x86 发表于 2004-10-10 21:22:48

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

插件功能:
配合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
*
*原作者 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
new temp

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

public showipinfo(id){
        if ( g_specMode ){
    new a = read_data(2)
    if ( is_user_connected( a ) ){
            new ipaddr,userip,buffer,name
                        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, len
   param = id
   len = get_user_name(id,param,31)
   set_task(2.0, "enter_msg", 0, param,len + 2)
   return PLUGIN_CONTINUE
}

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

public enter_msg(param[]) {
   new message,hostname,userip,ipaddr
       get_user_ip(param,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, rankpos, pos
      pos = get_user_stats(param,data,data)
      numtostr(pos,rankpos,7)
      replace(message, 511, "%rankpos%", rankpos)
   }
   replace(message, 511, "%name%", param)
   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,hostname
   get_cvar_string("amx_leave_message", message, 191)
   get_cvar_string("hostname", hostname, 63)
   replace(message, 191, "%hostname%", hostname)
   replace(message, 191, "%name%", param)
   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
        new host,user,pass,db,error
        new country,address//,prov,city
        if (ipaddr >=0){
                format(query, 255, "SELECT * FROM ipdatau WHERE StartIP <=%d ORDER BY StartIP DESCLIMIT 0 , 1", ipaddr)
        }
        else{
                format(query, 255, "SELECT * FROM ipdatau WHERE StartIP <=%d + 4294967296 ORDER BY StartIP DESCLIMIT 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(" SQL Connection Failed, CODE")
                return PLUGIN_HANDLED
        }
        if (mysql_query(dbc,query) < 1){
                mysql_error(dbc,error,127)
                server_print(" MySQL error(CODE): 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
        format(temp,255,"%s \n%s",country,address)
        //return temp
}

ip_to_number(userip){
        new ipb1,ipb2,ipb3,ipb4
        new ip
        new nipb1,nipb2,nipb3,nipb4
        new uip
        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 转换到数据库的工具
目前未解决问题,国家,城市等字段没有办法整理,请高手出手吧

daikatana 发表于 2004-10-10 21:37:23

支持, 不过 不能在0.2下通过吗?

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

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

olol 发表于 2004-10-10 22:26:13

麻烦发一下你的数据库好吗?

dgh386 发表于 2004-10-10 22:34:44

:1:
麻烦了,偶对Mysql一窍不通..............

Post by olol
麻烦发一下你的数据库好吗?
对啊,最好再有个祥细点的安装方法,偶太菜了,不好意思呐,麻烦x86了!

nwb13 发表于 2004-10-10 23:00:21

看这里
http://www.dt-club.net/showthread.php?p=82123#post82123

dgh386 发表于 2004-10-10 23:03:33

谢谢!看来得从头补习了 :5:

olol 发表于 2004-10-10 23:47:05

你忘记说ip的格式了

x86 发表于 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版本!
页: [1] 2 3 4 5 6
查看完整版本: [插件发布]显示IP,城市插件For amxx0.16 发布。作者eXtrA_Csharp和nwb13,插件策划x86