搜索
查看: 2078|回复: 5

求助,如何使用AMXX显示登陆玩家的IP,局域网就可以了

[复制链接]
发表于 2004-10-15 15:41:03 | 显示全部楼层 |阅读模式 来自 中国–广东–广州–越秀区
RTRTRTRT
发表于 2004-10-20 16:54:04 | 显示全部楼层 来自 中国–新疆–乌鲁木齐

我用Enter and Leave修改的,同时参照了一部分显示城市的插件代码

/*
* Enter and Leave Message
*  v 0.1
*
*  by [MUPPETS] 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[16]){
        new ipb1[12],ipb2[12],ipb3[12],ipb4[12]
        new nipb1,nipb2,nipb3,nipb4
        new uip[16]
        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[100], len,  comefrom[32]
        param[0] = id
        len = get_user_name(id,param[1],31)
        new ipaddr,userip[16]
        get_user_ip(id,userip,16,1)
        ipaddr=ip_to_number(userip)
        copy( param[len+1], 4 , " ip:")
        len += copy( param[len+5], 16 , userip)
        comefrom="其他部门"
        if (ipaddr==1) comefrom="公关部"
        if (ipaddr==2) comefrom="人力资源部"
        if (ipaddr==3) comefrom="xxxxxx"
        if (ipaddr==4) comefrom="xxxxxx"
        copy( param[len+5], 8 , " 来自 ")
        len += copy( param[len+12], 30 , comefrom)
        set_task(2.0, "enter_msg", 0, param,len + 24)
        return PLUGIN_CONTINUE
}

public client_disconnect(id){
        new param[100], len,  comefrom[32]
        param[0] = id
        len = get_user_name(id,param[1],31)
        new ipaddr,userip[16]
        get_user_ip(id,userip,16,1)
        ipaddr=ip_to_number(userip)
        copy( param[len+1], 4 , " ip:")
        len += copy( param[len+5], 16 , userip)
        comefrom="其他部门"
        if (ipaddr==1) comefrom="公关部"
        if (ipaddr==2) comefrom="人力资源部"
        if (ipaddr==3) comefrom="xxxxxx"
        if (ipaddr==4) comefrom="xxxxxx"
        copy( param[len+5], 8 , " 来自 ")
        len += copy( param[len+12], 30 , comefrom)
        set_task(2.0, "leave_msg", 0, param,len + 24)
        return PLUGIN_CONTINUE
}

public enter_msg(param[]) {
        new message[192],hostname[64]
        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[8], rankpos[8], pos
                pos = get_user_stats(param[0],data,data)
                numtostr(pos,rankpos,7)
                replace(message, 191, "%rankpos%", rankpos)
        }
        replace(message, 191, "%name%", param[1])
        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[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(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","[MUPPETS] 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 将前三个字符删吊就可以了!!
回复

使用道具 举报

发表于 2004-10-20 20:26:53 | 显示全部楼层 来自 中国–吉林–长春
支持!呵呵
其实局域网根本就不用mysql
回复

使用道具 举报

发表于 2004-10-21 08:52:37 | 显示全部楼层 来自 中国–新疆–乌鲁木齐
我现在主要是没有向导兄的votemenu插件的源代码,否则我就可以升级到0.20rc6了,提供的0.20cn的amx插件和 0.20rc6不兼容。希望大家以后发布插件把源代码附上,这样会加速amxx在国内的使用速度。谢谢!!
回复

使用道具 举报

发表于 2004-10-21 11:01:38 | 显示全部楼层 来自 中国–吉林–长春
votemenu吗?呵呵
如果你用amxx0.2的话,是不需要这个的
因为,最新版本的amxx支持自定义menu
快试试去吧
回复

使用道具 举报

发表于 2004-10-21 12:06:19 | 显示全部楼层 来自 中国–新疆–乌鲁木齐
我看了一下,主要是向导作的程序里面有一个命令
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)

编译没有问题,但是在游戏里无论选择哪个都不起作用,换乘英文的就好了,真奇怪。
回复

使用道具 举报

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

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