传奇元宝竞价地图NPC脚本竞价排行结算与地图进入判定完整代码

来源: 作者: 点击:
[@main]
#ACT
MESSAGE 竞价使者,开启地图竞价,消耗元宝参与竞价,竞价最高者获得地图当日进入权限
MESSAGE 1.参与地图竞价 2.查看当前最高竞价 3.查看竞价规则 4.领取竞价奖励 5.关闭对话
BREAK
[@参与地图竞价]
#IF
CHECKVAR GLOBAL JingJiaEndDay <> GLOBALVAR DAY
#ACT
INPUTS 输入本次竞价元宝数量 S1
CHECKGOLDPOINT > <$\(STR(S1)>
#ACT
#IF
CHECKVAR GLOBAL MaxPrice < <\)$STR(S1)>
#ACT
CALCVAR GLOBAL MaxPrice = <$STR(S1)>
CALCVAR GLOBAL MaxPlayer = <$USERNAME>
TAKE GOLDPOINT <$STR(S1)>
SENDMSG 0 \(STR(S1)>
SENDMSG 0 玩家<\)<$USERNAME>出价<$STR(S1)>元宝,刷新竞价地图最高价格
MESSAGE 竞价提交成功,你当前为竞价第一名
BREAK
#ELSEACT
MESSAGE 出价失败,当前最高竞价高于你输入的元宝数量,请提高出价
BREAK
BREAK
#ELSEACT
MESSAGE 今日竞价已结束,请等待次日竞价周期重置
BREAK
[@查看当前最高竞价]
#ACT
#IF
CHECKVAR GLOBAL MaxPlayer <> ""
MESSAGE 当前竞价最高\(STR(S1)>
SENDMSG 0 玩家<\):<$GLOBALVAR(MaxPlayer)>,出价元宝:<$GLOBALVAR(MaxPrice)>
BREAK
#ELSEACT
MESSAGE 当前暂无任何人参与竞价,可直接出价抢占第一名
BREAK
[@查看竞价规则]
#ACT
MESSAGE 竞价地图每日一轮竞价,当日竞价结束后,出价最高\(STR(S1)>
SENDMSG 0 玩家<\)获得地图准入资格
MESSAGE 竞价提交后元宝直接扣除,其他参与竞价\(STR(S1)>
SENDMSG 0 玩家<\)无法返还元宝
MESSAGE 竞价成功者可通过NPC传送进入专属竞价地图,地图内BOSS产出高阶装备材料
MESSAGE 每日零点重置竞价数据,开启新一轮竞价,竞价资格仅限当日有效
BREAK
[@领取竞价奖励]
#IF
CHECKVAR GLOBAL JingJiaEndDay == GLOBALVAR DAY
CHECKVAR GLOBAL MaxPlayer == <$USERNAME>
#ACT
MAPMOVE jingjiamap 50 50
MESSAGE 竞价胜出,传送进入竞价专属地图,限时120分钟
CALCVAR HUMAN JingJiaMapTimer = 1
SAVEVAR HUMAN JingJiaMapTimer ..\QuestDiary\jingjia\playerdata.txt
TIMERADD JingJiaPlayerTimer 7200
BREAK
#ELSEACT
MESSAGE 领取失败,你不是本轮竞价第一名或者本轮竞价尚未结束
BREAK
[@关闭对话]
#ACT
MESSAGE 合理出价,争夺专属秘境的探索资格
BREAK

QFunction-0.txt 地图计时、死亡、下线触发器
[@OnTimer]
#IF
ISMAP jingjiamap
TIMEREXIST JingJiaPlayerTimer
#ACT
TIMERDEL JingJiaPlayerTimer
MAPMOVE 3 330 330
CALCVAR HUMAN JingJiaMapTimer = 0
SAVEVAR HUMAN JingJiaMapTimer ..\QuestDiary\jingjia\playerdata.txt
MESSAGE 竞价地图时间耗尽,传送返回盟重安全区
SENDMSG 5 竞价地图访问时间结束
BREAK
[@OnPlayerDeath]
#IF
ISMAP jingjiamap
#ACT
TIMERDEL JingJiaPlayerTimer
MAPMOVE 3 330 330
CALCVAR HUMAN JingJiaMapTimer = 0
SAVEVAR HUMAN JingJiaMapTimer ..\QuestDiary\jingjia\playerdata.txt
MESSAGE 你在竞价地图陨落,本次地图权限失效,传送返回土城
BREAK
[@OnPlayerLogout]
#IF
ISMAP jingjiamap
#ACT
TIMERDEL JingJiaPlayerTimer
CALCVAR HUMAN JingJiaMapTimer = 0
SAVEVAR HUMAN JingJiaMapTimer ..\QuestDiary\jingjia\playerdata.txt
BREAK

机器人脚本,每日零点重置竞价数据
[@Start]
#ACT
TIMERADD JingJiaResetTimer 60
BREAK
[@OnTimer JingJiaResetTimer]
#IF
HOUR == 0
MINUTE == 0
#ACT
CALCVAR GLOBAL MaxPrice = 0
CALCVAR GLOBAL MaxPlayer = ""
CALCVAR GLOBAL JingJiaEndDay = GLOBALVAR DAY
SENDMSG 0 新一轮地图竞价已经开启,各位\(STR(S1)>
SENDMSG 0 玩家<\)可前往竞价使者参与出价
BREAK

整套脚本适配Hero、3K、3KM2主流引擎,分为NPC竞价交互模块、QFunction全局事件触发器、机器人每日重置模块。脚本存放路径为QuestDiary目录新建jingjia文件夹,playerdata.txt存储\(STR(S1)>
SENDMSG 0 玩家<\)地图状态标记,全局变量记录每日最高出价、胜出\(STR(S1)>
SENDMSG 0 玩家<\)、竞价周期日期,全局变量持久保存,服务器重启不会丢失竞价记录。普通\(STR(S1)>
SENDMSG 0 玩家<\)可以直接打开NPC面板,无需管理员权限。

参与竞价分支先判断当日竞价周期是否开放,读取\(STR(S1)>
SENDMSG 0 玩家<\)输入的元宝数量,校验\(STR(S1)>
SENDMSG 0 玩家<\)元宝余额。当输入金额高于当前全局最高出价,更新全局最高价格与胜出\(STR(S1)>
SENDMSG 0 玩家<\)名称,扣除对应元宝,全服广播竞价刷新。出价低于当前最高价则直接驳回,提示\(STR(S1)>
SENDMSG 0 玩家<\)提高出价。竞价元宝提交后直接扣除,脚本设定竞价失败元宝不予返还,可根据需求修改逻辑增加返还分支。

竞价胜出\(STR(S1)>
SENDMSG 0 玩家<\)使用领取竞价奖励入口传送进入jingjiamap专属地图,开启7200秒\(STR(S1)>
SENDMSG 0 玩家<\)独立定时器,地图限时120分钟。[@OnTimer]监控地图倒计时,时间到期删除定时器,传送\(STR(S1)>
SENDMSG 0 玩家<\)返回盟重安全区,清空\(STR(S1)>
SENDMSG 0 玩家<\)地图标记。\(STR(S1)>
SENDMSG 0 玩家<\)在竞价地图死亡、下线都会终止地图权限,清除定时器重置变量,防止定时器残留占用服务器资源。

机器人脚本定时检测系统时间,零点自动重置全部竞价全局变量,清空最高出价与胜出\(STR(S1)>
SENDMSG 0 玩家<\)名称,更新竞价周期日期,推送全服公告开启新一轮竞价。每日只产生一名竞价优胜者,胜出资格仅限当日使用,零点重置后资格失效。

测试阶段,多个角色参与竞价,测试出价刷新最高价格、低价出价拦截、零点自动重置、地图限时踢出、死亡下线收回地图权限。可修改地图时长、竞价重置时间,修改最低起拍元宝,增加竞价最低出价限制。可以新增竞价保底机制,未中标\(STR(S1)>
SENDMSG 0 玩家<\)返还部分元宝,降低参与门槛。

可拓展多种配套玩法,增加多人同时进入地图,竞价第一名可携带指定数量队友进入秘境。增加竞价记录日志,保存历史竞价\(STR(S1)>
SENDMSG 0 玩家<\)与出价数据。增加竞价排行榜,展示历史竞价最高记录。增加地图内怪物定时刷新逻辑,地图检测到\(STR(S1)>
SENDMSG 0 玩家<\)在场自动刷怪。增加竞价保护,设置单次竞价上限,防止单次出价过高。增加竞价倒计时,设置每日竞价截止时间,截止后不再接收新出价。

需要核对引擎指令兼容情况,部分老旧引擎全局字符串变量、元宝指令存在差异,元宝扣除失效核对M2版本。jingjiamap地图文件需要提前配置,地图内怪物、BOSS在怪物数据库录入,缺失会导致地图传送、怪物刷新异常。

全局变量为服务器共享数据,同一时间只存在一组竞价数据,只支持单场竞价活动。\(STR(S1)>
SENDMSG 0 玩家<\)变量JingJiaMapTimer独立存储,多人进入地图各自计时互不干扰。地图txt文件可配置禁止随机、禁止传送等限制,防止\(STR(S1)>
SENDMSG 0 玩家<\)利用漏洞长时间滞留地图。可以增加地图内专属爆率加成,竞价地图BOSS拥有更高掉落概率。也可以增加竞价记录查询,查看本轮所有参与竞价\(STR(S1)>
SENDMSG 0 玩家<\)与出价金额。