|
发表于 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 转换到数据库的工具
目前未解决问题,国家,城市等字段没有办法整理,请高手出手吧 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注个册吧
×
|