3GO模拟飞行网|3GO Cyber Air Force

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1404|回复: 26

[提问] 触发规则之反作弊问题

[复制链接]
发表于 2011-4-20 20:22:52 | 显示全部楼层 |阅读模式
问:处罚规则之反作弊问题

比如打友机几次被服务器自动T出,这个在触发规则里怎么设置啊,麻烦各位飞飞做个地图示范一下


谢谢
发表于 2011-4-20 20:39:28 | 显示全部楼层
本帖最后由 mrollien 于 2011-4-20 20:57 编辑

这个设置如果灰机多的话比较麻烦,我个人对触发不是研究很深,但也算能间接解决LZ的问题,尝试性回答哈,呵呵。。。
在机场设置两架飞机,A\B,假设A是玩家进入的驾驶飞机,则确认规则为:在一定空域内(比如起飞机场)击落友机则任务失败或空爆。因为我没有看到触发器里有“谁被谁杀死”的触发条件,所以只能间接判断。我的设计思路如下:
1)设定机场一定区域(S)为触发区。
2)判断条件:当B在区域(S)内死亡或受伤时,判断A是否也在区域(S)中,如果是,则A空爆或任务失败
3)设置对方飞机只要进入区域(S)则马上空爆。
这样,基本上就能间接判断为,只要B在(S)内死掉或受伤,则肯定是A干的,呵呵。。。当然,再严格点的话,可以加上B死(或受伤)的时候具备一定的高度,以防B撞地自杀的时候,拉A垫背。。呵呵
发表于 2011-4-20 20:50:18 | 显示全部楼层
这个是用服务器端插件解决的
发表于 2011-4-20 21:16:27 | 显示全部楼层
servman
发表于 2011-4-21 05:51:27 | 显示全部楼层
本帖最后由 L0op8ack 于 2011-4-21 15:53 编辑

触发器里没办法,可以用服务器端脚本来做
联网服务器中,如果只考虑踢出击落友方玩家或者友方AI单位的玩家,可以按照下面这个办法做
如果需要ban这个玩家,把被踢出玩家的信息放到ban表中就可以,可以是名字、IP、UCID
(未经测试,只是按照说明书写的,哈哈哈哈)

修改安装目录下的 \Scripts\net\events.lua 中的on_kill函数

on_kill函数中添加下面标注红色部分的代码:
function on_kill(id, weapon, victim)
        if weapon ~= "" then
                report(_("%s killed %s with %s."),player_info(id), bot_info(victim), weapon_info(weapon))
        else
                report(_("%s killed %s."), player_info(id), bot_info(victim))
        end

        if net.is_server() then
        -- 本机为服务器,只有服务器才可以踢人,net.kick是server only的
                local off = players[id]
                local def = players[victim]
                if off then
                -- 攻击者为玩家
                        if def then
                        -- 杀友方玩家
                                if off.side == def.size then
                                        report(_("%s(%s) TEAM KILL!"), player_info(id), id)
                                        net.kick(id, _("NO TEAM KILL !"))
                                end
                        else
                        -- 杀友方AI单位       
                                local offside = select_by_side(players[id].side,"red","blue","spec")
                                local defside = unit_property(victim,11)
                                if offside == defside then
                                        report(_("%s(%s) TEAM KILL!"), player_info(id), id)
                                        net.kick(id, _("NO TEAM KILL !"))
                                end
                        end
                end
        end

end

评分

1

查看全部评分

发表于 2011-4-21 08:19:42 | 显示全部楼层
5L强大。。。。。。
443所谓的插件是不是也是通过修改这个lua实现的?
发表于 2011-4-21 10:11:42 | 显示全部楼层
5L的确强大啊。。呵呵。。。LUA的扩展空间好大啊,希望有系统的针对LOCKON的指导教学(语言部分正在自学。。嘿嘿)
发表于 2011-4-21 11:41:19 | 显示全部楼层

回复: 触发规则之反作弊问题

固主上是通过Serverman实现的 本质也是lua

发送自我的 HTC Desire 大板凳
发表于 2011-4-21 19:38:42 | 显示全部楼层
本帖最后由 L0op8ack 于 2011-4-21 20:09 编辑
5L强大。。。。。。
443所谓的插件是不是也是通过修改这个lua实现的?
cohead 发表于 2011-4-21 08:19


servman重写了一整套代码,包含:
玩家级别区分(admin/subadmin/player),admin的id永远等于1,其实就是只从服务器本地进去玩的玩家;
自定义命令login/logout/vote/resume/load mission等处理,这些命令都是特殊的chat内容,如/vote kick 4,大家投票kick id=4的玩家;
ban表处理;

实现team killer kick的也是在events.lua,不过他的判断复杂得多,连向友军开火(击伤)都检测,在on_damage中
本质上,还是熟悉 \Scripts\net\readme.txt里面介绍的接口 + lua编程
\Scripts\net\readme.txt里面介绍的接口,用于获取服务器状态、各种单元状态
注意哪些是server only的就可以

反外挂、飞机参数作弊,还是依靠\Config\network.cfg里面设置一致性检测,servman没有这部分内容
 楼主| 发表于 2011-4-21 19:42:00 | 显示全部楼层
灰常感谢
 楼主| 发表于 2011-4-21 19:48:45 | 显示全部楼层
回复 5# L0op8ack


    代码里面的中文汉子也要加么?
发表于 2011-4-21 19:50:44 | 显示全部楼层
本帖最后由 L0op8ack 于 2011-4-21 19:55 编辑
回复  L0op8ack


    代码里面的中文汉子也要加么?
Nokia5230 发表于 2011-4-21 19:48


那是注释,可加可不加
顺便提醒:从服务器本地进服务器玩,如果出现team-kill,是不会被kick的,因为,服主本人不是通过网络连接的......
你需要从另一台机器上用客户端连进服务器来测试
发表于 2011-4-21 19:58:12 | 显示全部楼层
L0op8ack强淫。。。。。
另外现在才注意到你的ID是什么意思。。。莫非也是搞网络的?
 楼主| 发表于 2011-4-21 20:01:36 | 显示全部楼层
回复 12# L0op8ack


   请问如何查看BAN的人的IP、UCID
 楼主| 发表于 2011-4-21 20:03:51 | 显示全部楼层
Ban表又在哪里呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|手机版|3GO模拟飞行网|3GO Cyber Air Force ( 沪ICP备08002287号|沪ICP备14050587号 )

GMT+8, 2024-11-16 14:48

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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