脚本示例
佣兵示例脚本
佣兵(角色交易/压卡)完整脚本:密保验证、两步验证与免验证三种制作路径。
用途
佣兵交易向导:把账号下的角色按契约纸压成佣兵,提供密保验证、两步验证(TOTP)与免验证三种制作路径,并在成功后回调做改名等收尾处理。
参考脚本
(@@INPUTSTRING @@CREATEMERCENARY)
[@MAIN]
#SAY
佣兵交易向导:\
1、制作为佣兵的人物角色不小于5级。\
2、每次制作,背包需要放一张空白的【佣兵契约纸】。\
3、制作为契约的角色将损失当前等级经验值,但技能、物品、英雄等数据将会保留。\
4、已经签约的【佣兵契约纸】可以用于创建新角色。\
5、制作佣兵契约的角色,需要取消金币交易行的所有订单!\ \
<制作佣兵契约/@MAKEMERCENARY> <使用契约创建角色/@@CREATEMERCENARY>\
<制作佣兵契约(需两步验证)/@MAKEMERCENARYWITHTOTPAUTH>\
<制作佣兵契约(需密保验证)/@MAKEMERCENARYMIBAO>\
; 制作契约,需密保验证
[@MAKEMERCENARYMIBAO]
请输入以下正确信息进行验证\
输入连续错误3次将30分钟内禁止再次输入\
问题1:【<$STR(S1)>】--------------------<点击输入/@验证1>\
答案1:【<$STR(S2)>】--------------------<点击输入/@验证2>\
问题2:【<$STR(S3)>】--------------------<点击输入/@验证3>\
答案2:【<$STR(S4)>】--------------------<点击输入/@验证4>\
[@验证1]
#IF
!COMPVAL <$QUIZ> = <$STR(S1)>
#ACT
QUERYVALUE 1 0 20 ~MMBB1 请输入你的【密保问题1】:
#ELSEACT
MESSAGEBOX 错误提示:当前输入的密保是正确的无需再次输入
BREAK
[~MMBB1]
#IF
COMPVAL $INTS0 < 3300
COMPVAL $INTS0 > 1500
#ACT
MOV D1 <$UNIXTIME>
INC D1 <$INTS0>
INTS 0 = <$STR(D1)>
#IF
COMPVAL $INTS0 > 3300
COMPVAL $INTS0 > $UNIXTIME
#ACT
CALCVAL $INTS0 - $UNIXTIME
SENDMSG 7 将在<$CALCRESULT>秒后,才可以再次输入
CALCVAL $INTS0 ~ 0
SENDMSG 7 将在<$CALCRESULT>过期,才可以再次输入
MOV S1
BREAK
#IF
COMPVAL $INTS0 > 3300
COMPVAL $INTS0 < $UNIXTIME
#ACT
INTS 0 = 0
#IF
COMPVAL <$QUIZ> = <$STR(S1)>
#ACT
DELAYGOTO 1 @MAKEMERCENARYMIBAO
BREAK
#ELSEACT
MESSAGEBOX 错误提示:你输入的【密保问题1】错误.连续错误3次将30分钟内禁止再次输入
MOV S1
INTS 0 + 600
BREAK
[@验证2]
#IF
EQUAL S1
#ACT
MESSAGEBOX 错误提示:请先输入【密保问题1】
BREAK
#IF
!COMPVAL <$ANSWER> = <$STR(S2)>
#ACT
QUERYVALUE 2 0 20 ~MMBB2 请输入你的【密保答案1】:
#ELSEACT
MESSAGEBOX 错误提示:当前输入的密保是正确的无需再次输入
BREAK
[~MMBB2]
#IF
COMPVAL $INTS0 < 3300
COMPVAL $INTS0 > 1500
#ACT
MOV D1 <$UNIXTIME>
INC D1 <$INTS0>
INTS 0 = <$STR(D1)>
#IF
COMPVAL $INTS0 > 3300
COMPVAL $INTS0 > $UNIXTIME
#ACT
CALCVAL $INTS0 - $UNIXTIME
SENDMSG 7 将在<$CALCRESULT>秒后,才可以再次输入
CALCVAL $INTS0 ~ 0
SENDMSG 7 将在<$CALCRESULT>过期,才可以再次输入
MOV S2
BREAK
#IF
COMPVAL $INTS0 > 3300
COMPVAL $INTS0 < $UNIXTIME
#ACT
INTS 0 = 0
#IF
COMPVAL <$ANSWER> = <$STR(S2)>
#ACT
DELAYGOTO 1 @MAKEMERCENARYMIBAO
BREAK
#ELSEACT
MESSAGEBOX 错误提示:你输入的【密保答案1】错误.连续错误3次将30分钟内禁止再次输入
MOV S2
INTS 0 + 600
BREAK
[@验证3]
#IF
EQUAL S2
#ACT
MESSAGEBOX 错误提示:请先输入【密保答案1】
BREAK
#IF
!COMPVAL <$QUIZ2> = <$STR(S3)>
#ACT
QUERYVALUE 3 0 20 ~MMBB3 请输入你的【密保问题2】:
#ELSEACT
MESSAGEBOX 错误提示:当前输入的密保是正确的无需再次输入
BREAK
[~MMBB3]
#IF
COMPVAL $INTS0 < 3300
COMPVAL $INTS0 > 1500
#ACT
MOV D1 <$UNIXTIME>
INC D1 <$INTS0>
INTS 0 = <$STR(D1)>
#IF
COMPVAL $INTS0 > 3300
COMPVAL $INTS0 > $UNIXTIME
#ACT
CALCVAL $INTS0 - $UNIXTIME
SENDMSG 7 将在<$CALCRESULT>秒后,才可以再次输入
CALCVAL $INTS0 ~ 0
SENDMSG 7 将在<$CALCRESULT>过期,才可以再次输入
MOV S3
BREAK
#IF
COMPVAL $INTS0 > 3300
COMPVAL $INTS0 < $UNIXTIME
#ACT
INTS 0 = 0
#IF
COMPVAL <$QUIZ2> = <$STR(S3)>
#ACT
DELAYGOTO 1 @MAKEMERCENARYMIBAO
BREAK
#ELSEACT
MESSAGEBOX 错误提示:你输入的【密保问题2】错误.连续错误3次将30分钟内禁止再次输入
MOV S3
INTS 0 + 600
BREAK
[@验证4]
#IF
EQUAL S3
#ACT
MESSAGEBOX 错误提示:请先输入【密保问题2】
BREAK
#ELSEACT
QUERYVALUE 4 0 20 ~MMBB4 请输入你的【密保答案2】:
BREAK
[~MMBB4]
#IF
COMPVAL $INTS0 < 3300
COMPVAL $INTS0 > 1500
#ACT
MOV D1 <$UNIXTIME>
INC D1 <$INTS0>
INTS 0 = <$STR(D1)>
#IF
COMPVAL $INTS0 > 3300
COMPVAL $INTS0 > $UNIXTIME
#ACT
CALCVAL $INTS0 - $UNIXTIME
SENDMSG 7 将在<$CALCRESULT>秒后,才可以再次输入
CALCVAL $INTS0 ~ 0
SENDMSG 7 将在<$CALCRESULT>过期,才可以再次输入
MOV S4
BREAK
#IF
COMPVAL $INTS0 > 3300
COMPVAL $INTS0 < $UNIXTIME
#ACT
INTS 0 = 0
#IF
COMPVAL <$QUIZ> = <$STR(S1)>
COMPVAL <$ANSWER> = <$STR(S2)>
COMPVAL <$QUIZ2> = <$STR(S3)>
COMPVAL <$ANSWER2> = <$STR(S4)>
#ACT
DELAYGOTO 1 @MAKEMERCENARYMIBAO
;参数1表示不小于此等级的角色可以被压卡,
;参数2表示制作为佣兵将损失15%的经验值
;参数3为1时表示过滤掉隐藏角色
QUERYMERCENARIES 5 1 0
#ELSEACT
MESSAGEBOX 错误提示:你输入的【密保答案2】错误.连续错误3次将30分钟内禁止再次输入
MOV S4
INTS 0 + 600
BREAK
; 制作契约,需两步验证
[@MAKEMERCENARYWITHTOTPAUTH]
#IF
TRUE
#ACT
; 请求两步验证的KEY($TOTPKEY),成功后将回调@ONGETTOTPKEY标签
GETTOTPKEY
[@ONGETTOTPKEY]
#IF
COMPVAL <$TOTPKEY> = ""
#SAY
你的账号未绑定两步验证,暂不能制作佣兵契约!\ \
<绑定两步验证/@@TOTP> <返回/@MAIN>\ \
<关闭/@EXIT>
#ELSEACT
QUERYVALUE 5 1 6 ~VERIFYKEYCODE 请输入绑定当前账号的两步验证码:
[~VERIFYKEYCODE]
#IF
; 验证两步验证码是否正确
VERIFYKEYCODE <$TOTPKEY> <$STR(M5)>
#ACT
QUERYMERCENARIES 5 1 0
#ELSESAY
输入的两步验证码不正确,不能制作佣兵契约!\ \
<关闭/@EXIT>
; 制作契约,无需验证
[@MAKEMERCENARY]
#IF
TRUE
#ACT
;参数1表示不小于此等级的角色可以被压卡,
;参数2表示制作为佣兵将损失15%的经验值
;参数3为1时表示过滤掉隐藏角色
QUERYMERCENARIES 5 1 0
; 契约创建角色
[@@CREATEMERCENARY]
请放上已签约的佣兵契约纸。\ \
<返回/@MAIN> <关闭/@EXIT>
; 压卡成功后执行的字段
[@MAKEMERCENARYSUCCESS]
#IF
TRUE
#ACT
SENDMSG 7 压卡成功:正在制作契约的玩家:<$PARAMSTR(0)>,被制作为契约的原角色名:<$PARAMSTR(1)>,佣兵契约上的角色名:<$PARAMSTR(2)>
;STRINGSREPLACE 需要重命名的角色文本.TXT <$PARAMSTR(1)> <$PARAMSTR(2)> 0 HARDDISK
;使用契约纸成功创建角色后执行的字段
[@NEWCHARBYCONTRACTSUCCESS]
#IF
TRUE
#ACT
SENDMSG 7 创角成功:正在使用契约创角的玩家:<$PARAMSTR(0)>,佣兵契约上的角色名:<$PARAMSTR(1)>,创建的新角色名:<$PARAMSTR(2)>
;STRINGSREPLACE 需要重命名的角色文本.TXT <$PARAMSTR(1)> <$PARAMSTR(2)> 0 HARDDISK
关键点
- NPC 顶部声明
(@@INPUTSTRING @@CREATEMERCENARY),(@@CREATEMERCENARY)用于接收契约创建时的角色名输入。 - 三条路径:
[@MAKEMERCENARYMIBAO](密保验证,含[@验证1]~[@验证4]与[~MMBB1]~[~MMBB4])、[@MAKEMERCENARYWITHTOTPAUTH](两步验证,<$TOTPKEY>+ 回调[@ONGETTOTPKEY]+[~VERIFYKEYCODE])、[@MAKEMERCENARY](无需验证)。 - 脚本注释给出压卡参数含义:参数1 = 不小于此等级的角色可被压卡;参数2 = 制作为佣兵将损失 15% 经验值;参数3 = 1 时过滤掉隐藏角色。
- 成功回调:
[@MAKEMERCENARYSUCCESS]、[@NEWCHARBYCONTRACTSUCCESS],注释提示可用STRINGSREPLACE重命名相关角色文本。
