搜索
楼主: baili1258

重新修正slots_reservation插件 通道转服的增加 转NO-SXE 附上源码

[复制链接]
发表于 2008-1-30 21:11:24 | 显示全部楼层 来自 中国–北京–北京

回复: 重新修正slots_reservation插件 通道转服的增加 转NO-SXE 附上源码

测试一下....:dribble:
回复

使用道具 举报

发表于 2008-1-30 21:20:51 | 显示全部楼层 来自 中国–广东–东莞

回复: 重新修正slots_reservation插件 通道转服的增加 转NO-SXE 附上源码

:cool::super:
回复

使用道具 举报

发表于 2008-1-30 21:22:15 | 显示全部楼层 来自 中国–广西–柳州

回复: 重新修正slots_reservation插件 通道转服的增加 转NO-SXE 附上源码

不错不错,网站关了这么久又见到新插件,谢谢
回复

使用道具 举报

发表于 2008-1-30 22:27:52 | 显示全部楼层 来自 中国–湖南–怀化–鹤城区

回复: 重新修正slots_reservation插件 通道转服的增加 转NO-SXE 附上源码

正是我需要的 谢谢``
回复

使用道具 举报

发表于 2008-1-30 22:58:14 | 显示全部楼层 来自 中国–四川–宜宾

回复: 重新修正slots_reservation插件 通道转服的增加 转NO-SXE 附上源码

有什么新的改变吗?好象这个已经挺多的了!
回复

使用道具 举报

发表于 2008-1-31 00:08:34 | 显示全部楼层 来自 中国–湖南–怀化–鹤城区

回复: 重新修正slots_reservation插件 通道转服的增加 转NO-SXE 附上源码

经过测试出现以下问题 希望楼主 从新优化下 我不懂代码  所以我只能用说的了

我设置了 内网或会员进入 KICK 3   也就是 KICK NO SXE玩家

1.当全部玩家都开启SXE反作弊器时  服务器显示进不去
2.我没设置转F amx_rd_server 为空 ,只剩下预留通道时 玩家进入显示连接中断
3.内网没开SXE玩家 则自动KICK 不掉  ,当服务器只有一个没开SXE内网的玩家在里面,会员或其他内网进入时 KICK不了

建议改进下
1.没设置转F IP  的情况下 ,内网进入和会员进入 没开SXE玩家自动正常KICK 并出现KICK提示筐
2.内网玩家没开SXE照样会被KICK
3.在没有NO SXE的情况下 内网或会员进入时 KICK 高P玩家


我这段时间一只想要这样的插件 今天看到楼主发了 很是高兴 于是测试了下 发现了以上此类问题
在根据自己想要的合理的插件 提出了这类的问题 希望楼主帮忙改进下
由于自己对源代码的一无所知,表示遗憾,目前正在努力学习中`````
回复

使用道具 举报

玩火的男孩儿 该用户已被删除
发表于 2008-1-31 00:12:08 | 显示全部楼层 来自 中国–广东–佛山
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2008-1-31 00:41:31 | 显示全部楼层 来自 中国–广西–南宁

回复: 重新修正slots_reservation插件 通道转服的增加 转NO-SXE 附上源码

Post by baili1258
[隐藏内容]
感谢楼主,测试一下~~!
回复

使用道具 举报

 楼主| 发表于 2008-1-31 10:04:24 | 显示全部楼层 来自 中国–广东–深圳–福田区

回复: 重新修正slots_reservation插件 通道转服的增加 转NO-SXE 附上源码

Post by y543685085
经过测试出现以下问题 希望楼主 从新优化下 我不懂代码 所以我只能用说的了

我设置了 内网或会员进入 KICK 3 也就是 KICK NO SXE玩家

1.当全部玩家都开启SXE反作弊器时 服务器显示进不去
2.我没设置转F amx_rd_server 为空 ,只剩下预留通道时 玩家进入显示连接中断
3.内网没开SXE玩家 则自动KICK 不掉 ,当服务器只有一个没开SXE内网的玩家在里面,会员或其他内网进入时 KICK不了

建议改进下
1.没设置转F IP 的情况下 ,内网进入和会员进入 没开SXE玩家自动正常KICK 并出现KICK提示筐
2.内网玩家没开SXE照...

你要是不用转服的话,需要重新修改插件的几个地方就行了
你如果设置转F为空,但又没有修改插件,当然就进不去了
关于第三条的话,我暂时能力有限无法实现.
内网没有开sxe的照样kick,也需要修改几个地方
也可以不要定义内网的地址

稍等下我帮你修改下,但第三条我能力不够,不好意思帮不到你
没有编译过,自己测试下
[php]/* AMX Mod X script.
* 如果OP通道插件未启用,本插件奖自动设置amx_reservation为 1 ,即保留一个通道。
* 使用方法:
* 在amxx.cfg里加入
* amx_kickmode <参数>
* 参数为 <1> 或者 <2> 。
* 1 表示 - 当服务器人满时,有OP或者VIP登陆时则踢掉一个在线时间最短的玩家。
* 2 表示 - 当服务器人满时,有OP或者VIP登陆时则踢掉一个ping值最高的玩家。
新增加
* 3 表示 - 当服务器人满时,有OP或者VIP登陆时则踢掉一个没有开sxe的玩家。
* 内网IP地址设置方法:
* amx_netbarip "IP地址的前面7位"
* 例: amx_netbarip "192.168"
*/
#include <amxmodx>
#include <amxmisc>
// Comment if you don't want to hide true max_players
//#define HIDE_RESERVEDSLOTS
public plugin_init()
{
register_plugin("Slots Reservation","1.0","Lu0007")
register_cvar("amx_kickmode","3") //踢nosxe
register_cvar("amx_reservation","1") //预留的通道数,没有权限的玩家进入此通道时会被kick
register_cvar("amx_netbarip","10.0") //默认内网IP段
register_cvar("amx_rd_server","") //要转向的目的服务器.
register_cvar("amx_rd_serverport","") //端口
register_cvar("amx_rd_serverpw","") //密码,留空为无密码
#if defined HIDE_RESERVEDSLOTS
set_cvar_num( "sv_visiblemaxplayers" , get_maxplayers() - 1 )
#endif
}
//玩家进入初始化
public client_authorized(id) {
new userip[17]
new ips[8]
new ips2[16]
new name[33]
new g_amx_netbarip[8]
get_user_ip(id,userip,16,1)
copy(ips,7,userip) //前2段IP地址
copy(ips2,16,userip) //全IP地址
get_cvar_string("amx_netbarip",g_amx_netbarip,7)
get_user_name(id,name,32) //返回玩家名
/*new rd_serverport = get_cvar_num("amx_rd_serverport")
new rd_server[64], rd_serverpw[32]
get_cvar_string("amx_rd_server",rd_server,63)
get_cvar_string("amx_rd_serverpw",rd_serverpw,31)*/

new maxplayers = get_maxplayers() //返回游戏最大人数
new players = get_playersnum( 1 ) //统计人数 ,连正在连接的也算
new limit = maxplayers - get_cvar_num("amx_reservation") //服最大人数 减去预留人数
new resType = get_cvar_num( "amx_kickmode" ) //踢人模式 是高Ping 还是时间最短的
new who

//当超过限制人数时
if ( players > limit )
{
//进入的VIP&&OP 或是内网地址如192.168 或是有内网IP段的如 10.0
if ( get_user_flags(id) & ADMIN_RESERVATION || (equali(ips,g_amx_netbarip)) || (contain(ips,g_amx_netbarip)==0))
{
set_user_flags(id, get_user_flags(id)|ADMIN_IMMUNITY)
//set_user_flags(id,read_flags("b"))
//设置玩家标记,b 为可通过预留通道加入服务器
switch(resType) {
case 1:
who = kickFresh() //踢时间短
case 2:
who = kickLag() //踢高Ping
case 3:
who = kicknosxe() //踢高nosxe
}
if(who) {
get_user_name( who, name , 31 )
client_cmd(id,"echo ^"* %s 已被KICK或是转移!^"" ,name )
}
return PLUGIN_CONTINUE

}
//如是外网普通用户进入
if ( is_user_bot(id) ) //如是机器人,直接踢机器人
server_cmd("kick #%d 服务器人满! 请稍后再进入。", get_user_userid(id) )
else { //是人的,提示并踢除
server_cmd("kick #%d 服务器人满! 请稍后再进入。", get_user_userid(id) )
/*if ( !equal(rd_serverpw,"") )
client_cmd(id,"echo ^"Redirection - Set Password to %s^";password %s",rd_serverpw,rd_serverpw)
client_cmd(id,"echo ^"Redirection - Redirecting to %s:%d^";connect %s:%d",rd_server,rd_serverport,rd_server,rd_serverport)*/
}
//return PLUGIN_HANDLED
}
return PLUGIN_CONTINUE
}
//踢Ping高的
kickLag() {
/*new rd_serverport = get_cvar_num("amx_rd_serverport")
new rd_server[64], rd_serverpw[32]
get_cvar_string("amx_rd_server",rd_server,63)
get_cvar_string("amx_rd_serverpw",rd_serverpw,31)*/
new who = 0, ping, loss, worst = -1
new maxplayers = get_maxplayers()
for(new i = 1; i <= maxplayers; ++i) {
if ( !is_user_connected(i) && !is_user_connecting(i) )
continue // not used slot
if (get_user_flags(i)&ADMIN_RESERVATION)
continue // has reservation, skip him
get_user_ping(i,ping,loss) // get ping
if ( ping > worst ) { //找出Ping最大的
worst = ping
who = i
}
}
if(who)
if ( is_user_bot(who) ) //如是机器人的
server_cmd("kick #%d [OP通道] 服务器踢高ping! 请稍后再进入。" , get_user_userid(who) )
else { //如是人的
server_cmd("kick #%d [OP通道] 服务器踢高ping! 请稍后再进入。" , get_user_userid(who) )
/*if ( !equal(rd_serverpw,"") )
client_cmd(who,"echo ^"Redirection - Set Password to %s^";password %s",rd_serverpw,rd_serverpw)
client_cmd(who,"echo ^"Redirection - Redirecting to %s:%d^";connect %s:%d",rd_server,rd_serverport,rd_server,rd_serverport)*/
}
return who
}
//踢时间短的
kickFresh() {
/*new rd_serverport = get_cvar_num("amx_rd_serverport")
new rd_server[64], rd_serverpw[32]
get_cvar_string("amx_rd_server",rd_server,63)
get_cvar_string("amx_rd_serverpw",rd_serverpw,31)*/
new who = 0, itime, shortest = 0x7fffffff
new maxplayers = get_maxplayers()
for(new i = 1; i <= maxplayers; ++i){
if ( !is_user_connected(i) && !is_user_connecting(i) )//不是连接和不是正连接
continue // not used slot
if (get_user_flags(i)&ADMIN_RESERVATION) //是管理员的
continue // has reservation, skip him
itime = get_user_time(i) // get user playing time with connection duration
if ( shortest > itime ) {
shortest = itime
who = i
}
}
if(who) //如找到最短时间的
if ( is_user_bot(who) ) //如是个机器人
server_cmd("kick #%d [OP通道] 服务器预留OP通道! 请稍后再进入。", get_user_userid(who) )
else { //如是个人的
server_cmd("kick #%d [OP通道] 服务器预留OP通道! 请稍后再进入。", get_user_userid(who) )
/*if ( !equal(rd_serverpw,"") )
client_cmd(who,"echo ^"Redirection - Set Password to %s^";password %s",rd_serverpw,rd_serverpw)
client_cmd(who,"echo ^"Redirection - Redirecting to %s:%d^";connect %s:%d",rd_server,rd_serverport,rd_server,rd_serverport)*/
}
return who
}
kicknosxe() {
/*new rd_serverport = get_cvar_num("amx_rd_serverport")
new rd_server[64], rd_serverpw[32]
get_cvar_string("amx_rd_server",rd_server,63)
get_cvar_string("amx_rd_serverpw",rd_serverpw,31)*/
new who = 0
new maxplayers = get_maxplayers()
new szName[32]
for(new i = 1; i <= maxplayers; ++i){
if ( !is_user_connected(i) && !is_user_connecting(i) )//不是连接和不是正连接
continue // not used slot
if (get_user_flags(i)&ADMIN_RESERVATION) //是管理员的
continue // has reservation, skip him
get_user_name(i, szName, 31)
if (contain(szName, "[NO-sXe-I]") != -1){
who = i
}
}
if(who) //如找到没有开sxe的
if ( is_user_bot(who) ) //如是个机器人
server_cmd("kick #%d [OP通道] 服务器预留OP通道! 请稍后再进入。", get_user_userid(who) )
else { //如是个人的
server_cmd("kick #%d [OP通道] 服务器预留OP通道! 请稍后再进入。", get_user_userid(who) )
/*if ( !equal(rd_serverpw,"") )
client_cmd(who,"echo ^"Redirection - Set Password to %s^";password %s",rd_serverpw,rd_serverpw)
client_cmd(who,"echo ^"Redirection - Redirecting to %s:%d^";connect %s:%d",rd_server,rd_serverport,rd_server,rd_serverport)*/
}
return who
}[/php]
回复

使用道具 举报

无止境的流年 该用户已被删除
发表于 2008-1-31 11:14:42 | 显示全部楼层 来自 中国–重庆–重庆–荣昌区
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

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

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