求助,如何使用AMXX显示登陆玩家的IP,局域网就可以了
RTRTRTRT我用Enter and Leave修改的,同时参照了一部分显示城市的插件代码
/** Enter and Leave Message
*v 0.1
*
*by Gonzo
* amx@deswahnsinns.de
*
* some code was taken from
* welcome_hudmsg by JustinHoMi
*
*/
/*
* Cvars:
* amx_enter_message "%name% just entered %hostname%."
* amx_leave_message "%name% just left %hostname%."
*
* If you are using csstats module then you may use
* %rankpos% expression in amx_enter_message cvar.
*
*/
#include <amxmod>
#include <csstats>
public ip_to_number(userip){
new ipb1,ipb2,ipb3,ipb4
new nipb1,nipb2,nipb3,nipb4
new uip
new ip
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 nipb3
}这里我返回了ip的第三部分,比如192.168.10.11 返回10因为我们单位的ip地址是固定的通过第三部分可以显示是哪个部门的,所以在后面我有判断部门信息,在登陆和离开时可以显示 (比如玩家 公关部的sss登陆) 显示
sss ip: xxx.xxx.xxx.xxx 来自 公关部 登陆了服务器
我们单位部门少,所以我没有用 mysql
public client_putinserver(id){
new param, len,comefrom
param = id
len = get_user_name(id,param,31)
new ipaddr,userip
get_user_ip(id,userip,16,1)
ipaddr=ip_to_number(userip)
copy( param, 4 , " ip:")
len += copy( param, 16 , userip)
comefrom="其他部门"
if (ipaddr==1) comefrom="公关部"
if (ipaddr==2) comefrom="人力资源部"
if (ipaddr==3) comefrom="xxxxxx"
if (ipaddr==4) comefrom="xxxxxx"
copy( param, 8 , " 来自 ")
len += copy( param, 30 , comefrom)
set_task(2.0, "enter_msg", 0, param,len + 24) return PLUGIN_CONTINUE
}
public client_disconnect(id){
new param, len,comefrom
param = id
len = get_user_name(id,param,31)
new ipaddr,userip
get_user_ip(id,userip,16,1)
ipaddr=ip_to_number(userip)
copy( param, 4 , " ip:")
len += copy( param, 16 , userip)
comefrom="其他部门"
if (ipaddr==1) comefrom="公关部"
if (ipaddr==2) comefrom="人力资源部"
if (ipaddr==3) comefrom="xxxxxx"
if (ipaddr==4) comefrom="xxxxxx"
copy( param, 8 , " 来自 ")
len += copy( param, 30 , comefrom)
set_task(2.0, "leave_msg", 0, param,len + 24)
return PLUGIN_CONTINUE
}
public enter_msg(param[]) {
new message,hostname
get_cvar_string("amx_enter_message", message, 191)
get_cvar_string("hostname", hostname, 63)
replace(message,191, "%hostname%", hostname)
if (cvar_exists("csstats_reset")){
new data, rankpos, pos
pos = get_user_stats(param,data,data)
numtostr(pos,rankpos,7)
replace(message, 191, "%rankpos%", rankpos)
}
replace(message, 191, "%name%", param)
while(replace(message, 191, "\n", "^n")){}
set_hudmessage(0, 225, 0, 0.05, 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(0, 225, 0, 0.05, 0.55, 0, 6.0, 6.0, 0.5, 0.15, 3)
show_hudmessage(0, message)
return PLUGIN_CONTINUE
}
public plugin_init() {
register_plugin("Enter-Leave Message","0.2"," Gonzo")
register_cvar("amx_enter_message", "%name% just entered %hostname%.")
register_cvar("amx_leave_message", "%name% just left %hostname%.")
return PLUGIN_CONTINUE
}
其他参数见Enter and Leave Message 插件 的提示,我在0.16下编译通过,注意要将文件保存为uft-8 的my.sma,同时使用edit /80 my.sma 将前三个字符删吊就可以了!! 支持!呵呵
其实局域网根本就不用mysql 我现在主要是没有向导兄的votemenu插件的源代码,否则我就可以升级到0.20rc6了,提供的0.20cn的amx插件和 0.20rc6不兼容。希望大家以后发布插件把源代码附上,这样会加速amxx在国内的使用速度。谢谢!! votemenu吗?呵呵
如果你用amxx0.2的话,是不需要这个的
因为,最新版本的amxx支持自定义menu
快试试去吧 我看了一下,主要是向导作的程序里面有一个命令
amx_votemenu,然后里面调用了类似投票换图的功能,可以将投票要踢得用户列表,而amxmod0.20rc6没有提供类似的功能,它里面有一条命令amx_votekick是需要更参数的,我对菜单程序的编写没有经验,资料比较少,所以没有编写。我先看一下他是如何写的。唉,编写amx插件比较麻烦,有时候为了一个函数调用,我甚至去看amxx的c源代码。另外有一个问题,为什么中文的选择菜单不起作用,如下
format(szmenu,255,"\yTK Revenge on %s^n^n\w1. Kill now!^n2. Slap with 50hp^n3. Forgive TK^n^n4. Punish on nextround",name)
这句话是让你四选一
我改成中文
format(szmenu,255,"\y谋杀队友 惩罚 %s 的方式 ^n^n\w1. 立刻死亡^n2. 减去50点血^n3. 饶恕他^n^n4. 下一轮自动死亡",name)
编译没有问题,但是在游戏里无论选择哪个都不起作用,换乘英文的就好了,真奇怪。
页:
[1]