传奇全新DB斗鸡大赛完整NPC脚本斗鸡下注判定结算全套代码

来源: 作者: 点击:
[@main]
#ACT
MESSAGE 斗鸡裁判,开启斗鸡大赛,可选择斗鸡、押注,比赛结束自动结算输赢
MESSAGE 1.报名参赛斗鸡 2.进行赛事押注 3.查看赛事规则 4.查看当前对战状态 5.关闭对话
BREAK
[@报名参赛斗鸡]
#IF
CHECKVAR GLOBAL DouJiOpen = 1
CHECKITEM 斗鸡凭证 1
#ACT
TAKE 斗鸡凭证 1
INPUTS 输入斗鸡名称 S1
CALCVAR GLOBAL DouJiPlayer = <$USERNAME>
CALCVAR GLOBAL DouJiName = <$STR(S1)>
SENDMSG 0 \(STR(S2)>
SENDMSG 0 玩家<\)<$USERNAME>\(USERNAME>携带<\)<$STR(S1)>报名斗鸡大赛
MESSAGE 报名成功,等待对手进场开启对战
BREAK
#ELSEACT
MESSAGE 报名失败,赛事未开启或缺少斗鸡凭证
BREAK
[@进行赛事押注]
#IF
CHECKVAR GLOBAL DouJiOpen = 1
CHECKVAR GLOBAL DouJiPlayer <> ""
#ACT
INPUTS 输入押注选择(1=支持斗鸡A 2=支持斗鸡B) S1
INPUTS 输入押注金币数量 S2
CHECKGOLD > <$\(STR(S2)>
#ACT
TAKE GOLD <\)$STR(S2)>
CALCVAR GLOBAL BetPlayer = <$USERNAME>
CALCVAR GLOBAL BetSelect = <$STR(S1)>
CALCVAR GLOBAL BetGold = <$STR(S2)>
SENDMSG 0 \(STR(S2)>
SENDMSG 0 玩家<\)<$USERNAME>押注<$STR(S2)>\(STR(S2)>金币,支持选择<\)<$STR(S1)>斗鸡
MESSAGE 押注提交成功,等待赛事结算
BREAK
#ELSEACT
MESSAGE 押注失败,金币不足或者赛事未准备好
BREAK
[@查看赛事规则]
#ACT
MESSAGE 斗鸡大赛开启后,\(STR(S2)>
SENDMSG 0 玩家<\)消耗斗鸡凭证报名两只斗鸡进行对战
MESSAGE 观众可消耗金币押注斗鸡胜负,猜对获得双倍金币,猜错金币没收
MESSAGE 比赛决出胜负后自动结算奖金,赛事结束可重新开启下一轮
MESSAGE 赛事由管理员手动开启关闭,无参赛对手则无法开赛
BREAK
[@查看当前对战状态]
#IF
CHECKVAR GLOBAL DouJiOpen = 1
#ACT
MESSAGE 当前参赛选手:<$GLOBALVAR(DouJiPlayer)>\(GLOBALVAR(DouJiPlayer)>,斗鸡名称:<\)<$GLOBALVAR(DouJiName)>
MESSAGE 当前押注\(STR(S2)>
SENDMSG 0 玩家<\):<$GLOBALVAR(BetPlayer)>\(GLOBALVAR(BetPlayer)>,押注金额:<\)<$GLOBALVAR(BetGold)>
BREAK
#ELSEACT
MESSAGE 当前没有正在进行的斗鸡赛事
BREAK
[@关闭对话]
#ACT
MESSAGE 静待斗鸡对决,静待胜负揭晓
BREAK

QFunction-0.txt斗鸡对战结算触发器
[@StartDouJi]
#IF
ISADMIN
#ACT
CALCVAR GLOBAL DouJiOpen = 1
SENDMSG 0 斗鸡大赛正式开启,\(STR(S2)>
SENDMSG 0 玩家<\)可报名参赛与押注
MESSAGE 管理员开启斗鸡赛事
BREAK
[@EndDouJiWinA]
#IF
ISADMIN
#ACT
CALCVAR GLOBAL DouJiOpen = 0
#IF
CHECKVAR GLOBAL BetSelect = 1
#ACT
GIVE GOLD <$GLOBALVAR(BetGold)> * 2
SENDMSG 0 斗鸡A获胜,押注A的\(STR(S2)>
SENDMSG 0 玩家<\)获得双倍金币奖励
BREAK
#ELSEACT
SENDMSG 0 斗鸡A获胜,押注B的\(STR(S2)>
SENDMSG 0 玩家<\)押注金币全部扣除
BREAK
CALCVAR GLOBAL DouJiPlayer = ""
CALCVAR GLOBAL DouJiName = ""
CALCVAR GLOBAL BetPlayer = ""
CALCVAR GLOBAL BetSelect = ""
CALCVAR GLOBAL BetGold = 0
MESSAGE 赛事结算完毕,本轮斗鸡大赛结束
BREAK
[@EndDouJiWinB]
#IF
ISADMIN
#ACT
CALCVAR GLOBAL DouJiOpen = 0
#IF
CHECKVAR GLOBAL BetSelect = 2
#ACT
GIVE GOLD <$GLOBALVAR(BetGold)> * 2
SENDMSG 0 斗鸡B获胜,押注B的\(STR(S2)>
SENDMSG 0 玩家<\)获得双倍金币奖励
BREAK
#ELSEACT
SENDMSG 0 斗鸡B获胜,押注A的\(STR(S2)>
SENDMSG 0 玩家<\)押注金币全部扣除
BREAK
CALCVAR GLOBAL DouJiPlayer = ""
CALCVAR GLOBAL DouJiName = ""
CALCVAR GLOBAL BetPlayer = ""
CALCVAR GLOBAL BetSelect = ""
CALCVAR GLOBAL BetGold = 0
MESSAGE 赛事结算完毕,本轮斗鸡大赛结束
BREAK

机器人脚本,管理员全局控制开关
[@Start]
#ACT
CALCVAR GLOBAL DouJiOpen = 0
BREAK

整套脚本基于传奇DB数据库机制编写,适配Hero引擎,由NPC对话模块、QFunction全局结算模块、机器人初始化模块组成。脚本存放路径为QuestDiary目录新建douji文件夹,全局变量存储赛事开关、参赛\(STR(S2)>
SENDMSG 0 玩家<\)、斗鸡名称、押注信息,全局变量保存到目录内文本,服务器重启可读取赛事状态。NPC面板普通\(STR(S2)>
SENDMSG 0 玩家<\)可打开,报名参赛需要斗鸡凭证,押注消耗金币,管理员拥有开启赛事、判定胜负结算权限。

报名分支校验全局赛事开关DouJiOpen状态,赛事开启状态下扣除斗鸡凭证,读取\(STR(S2)>
SENDMSG 0 玩家<\)输入的斗鸡名称存入全局变量,推送全服提示。押注分支读取\(STR(S2)>
SENDMSG 0 玩家<\)选择的斗鸡阵营和押注金币数量,校验金币是否充足,扣除金币并记录押注\(STR(S2)>
SENDMSG 0 玩家<\)、选择阵营与押注金额。查看对战状态读取全局变量,展示当前参赛选手与押注信息,方便所有人查看赛事进度。

管理员通过QFunction内自定义标签开启赛事,设置DouJiOpen为1,全服广播斗鸡大赛开启。比赛结束管理员调用胜负标签,根据押注选择判断奖金发放,猜对押注返还双倍金币,猜错不返还金币。结算完成清空全部全局赛事变量,结束本轮赛事,等待开启下一轮比赛。机器人脚本在服务器启动时自动关闭赛事,防止开机残留旧赛事数据。

测试阶段管理员先开启赛事,使用角色报名参赛,使用其他角色进行押注,之后手动判定胜负,核对金币扣除、奖金发放、变量清空逻辑。可以修改报名消耗道具,替换斗鸡凭证为金币或者其他材料,修改押注倍率,调整奖金倍数。也可以增加多\(STR(S2)>
SENDMSG 0 玩家<\)押注数组逻辑,支持多名\(STR(S2)>
SENDMSG 0 玩家<\)同时下注,当前基础版本为单\(STR(S2)>
SENDMSG 0 玩家<\)押注简化写法。

可扩展配套玩法,增加斗鸡AI对战逻辑,设置两只斗鸡自动攻击判定胜负,无需管理员手动判定。增加每日参赛次数限制,使用日期变量控制每人每日最多报名次数。增加押注上限,限制单次押注最大金币,防止单次大额押注影响经济。增加斗鸡成长系统,斗鸡多次获胜提升属性,对战伤害提升。增加赛事倒计时,开启赛事后设置定时器,超时自动结束赛事。

需要核对引擎指令兼容情况,部分旧版本引擎全局字符串变量读写存在异常,变量读取空白时核对M2版本。斗鸡凭证道具需要提前在物品数据库配置,未录入数据库无法完成CHECKITEM校验与TAKE扣除。全局变量属于服务器共享数据,同一时间仅支持一轮赛事,不支持多场斗鸡同时进行。

脚本仅完成报名、押注、结算逻辑,斗鸡怪物模型需要在DB怪物库配置,设置斗鸡外观、血量、攻击,MONGEN在指定斗鸡地图生成两只斗鸡进行对战。地图可单独新建斗鸡赛场地图,设置赛场内禁止随机、禁止传送,防止\(STR(S2)>
SENDMSG 0 玩家<\)干扰赛事。可以增加赛场观战传送,押注成功后自动传送进入斗鸡地图观看对战。也可以增加赛事排行榜,记录\(STR(S2)>
SENDMSG 0 玩家<\)斗鸡获胜次数与押注盈亏数据。

可以增加安全校验,押注时校验\(STR(S2)>
SENDMSG 0 玩家<\)背包金币,防止金币不足提交押注。增加赛事中途关闭功能,管理员可终止赛事,退回所有押注金币。增加消息颜色区分,赛事广播使用独立颜色,方便\(STR(S2)>
SENDMSG 0 玩家<\)快速识别斗鸡赛事信息。如果需要支持多人同时押注,需要改写为数组变量存储多条押注记录,循环遍历进行结算。