查看: 1897|回复: 1

正确的鉴定获取命令范例脚本

[复制链接]

32

主题

8

回帖

122

积分

版主

积分
122
威望
0
金币
26
贡献
36
发表于 2022-3-16 19:02:29 | 显示全部楼层 |阅读模式

Blue引擎+登录器+程序全部免费开放,QQ快捷登陆,加入BLUE引擎论坛!

您需要 登录 才可以下载或查看,没有账号?立即注册

×
  增加NPC命令:StrCap S1 S2 ( )                // 捕获字符串S1中“()”内的内容到S2,S1返回剩余部分
  扩展NPC命令:UpgradeItem                        // 第5参数设置为99时,忽略普通属性的升级,只升级神秘属性;第4参数为鉴定属性,格式:普通鉴定属性|神秘鉴定属性|特殊属性|神技|几鉴,类似Give命令的格式,留空则不起作用
  扩展NPC命令:UpgradeItemEx                // 第5参数设置为99时,忽略普通属性的升级,只升级神秘属性;第8参数为鉴定属性,同UpgradeItem的第4参数

  扩展NPC命令:UpgradeItemEx                // 第4参数如果是1=5,3=5,28=7,28=8这样的“位置=数值”批量格式,则直接按第4参数修改装备普通属性,不会失败
  扩展NPC命令:UpgradeDlgItem                // 第4参数设置为99时,忽略普通属性的升级,只升级神秘属性;第6参数为鉴定属性,同上
  增加NPC命令:GetEqUIpProps                 // 身上装备位置(0~16或10000),装备位置为10000时,获取的是自定装备框的装备属性,即DlgItem

  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  作用:获取装备属性值到一组变量中,n=身上装备位置0~16或10000,p=普通属性0~30,i=鉴定属性1~30,注意下面的n、p、i都是变量
                  普通属性:M_EQUIP[n]_NORM_PROPS{p}
                  有效的普通属性总字符串:S_EQUIP[n]_NORM_PROPS                                // 数值格式:1=5,3=5,28=7,28=8,等于号左边是属性位置0~30,右边是数值
                  一组鉴定基础属性:S_EQUIP[n]_EVAL_BASE_PROPS                                // 数值格式:1=5,3=5,28=7,28=8,等于号左边是鉴定属性1~30,右边是数值,结合StrTok命令使用,鉴定属性1~30可参考以前的更新说明
                  一组鉴定神秘属性:S_EQUIP[n]_EVAL_MYST_PROPS                                // 数值格式:1=5,3=5,28=7,28=8,等于号左边是鉴定属性1~30,右边是数值
                  单条鉴定基础属性:S_EQUIP[n]_EVAL_BASE_PROP_SLOT{1~4}                // 数值格式:1=5,SLOT范围1~4,表示第几条属性,属性值非0才有效
                  单条鉴定神秘属性:S_EQUIP[n]_EVAL_MYST_PROP_SLOT{1~4}                // 数值格式:1=5,SLOT范围1~4,表示第几条属性,属性值非0才有效
                  单条鉴定基础属性:M_EQUIP[n]_EVAL_BASE_PROPS{i}                                // 按鉴定属性1~30得到基础属性数值,如果有重复的属性,不能使用此变量
                  单条鉴定神秘属性:M_EQUIP[n]_EVAL_MYST_PROPS{i}                                // 按鉴定属性1~30得到神秘属性数值,如果有重复的属性,不能使用此变量
                  鉴定特殊属性:M_EQUIP[n]_EVAL_SPEC_PROPS                                        // 可以使用IsBitSet,SetBit,UnsetBit命令比较计算
                  鉴定神技:M_EQUIP[n]_EVAL_SKILL_PROPS                                                // 可以使用IsBitSet,SetBit,UnsetBit命令比较计算
                  鉴定次数:M_EQUIP[n]_EVAL_TIMES_PROPS
                  
                  是否有鉴定基础属性:M_EQUIP[n]_HAS_EVAL_BASE_PROPS                        // =0没有,>0有
                  是否有鉴定神秘属性:M_EQUIP[n]_HAS_EVAL_MYST_PROPS                        // =0没有,>0有
                  
  获取到属性会触发本NPC的[@OnGetEquipProps]字段,附带返回变量如下,其他请查看附带示例:GetEquipProps.txt
                $PARAM(0)        // 物品ID
                $PARAM(1)        // stdmode
                $PARAM(2)        // looks
                $PARAM(3)        // 装备位置
                $PARAM(4)        // 鉴定基础属性有效条数
                $PARAM(5)        // 鉴定神秘属性有效条数

[@main]
<获取并修改武器属性示例/@GetEquipProps> \ \
<关闭/@exit>

[@GetEquipProps]
; 检测并修改武器的属性
#if
CheckUseItem 1
#act
Mov S_Eval_Base_Prop ""
Mov S_Eval_Myst_Prop ""
Mov M_Eval_Spec_Prop 0
Mov M_Eval_Skill_Prop 0
Mov M_Eval_Times_Prop 0
GetEquipProps 1

[@OnGetEquipProps]
; ------------------------------------------------------------------
; StrTok 可以分解这样的字符:
#act
SendMsg 5 分解字符串例子...
Mov S_Eval_Props 1=11,2=12,3=13,9=15|6=11,10=12,11=13,12=15|67|127|2
StrTok S_Eval_Props S_LeftStr1 |
StrTok S_Eval_Props S_LeftStr2 |
StrTok S_Eval_Props S_LeftStr3 |
StrTok S_Eval_Props S_LeftStr4 |
StrTok S_Eval_Props S_LeftStr5 |
SendMsg 5 "先按“|”分解出:<$STR(S_LeftStr1)>,  <$STR(S_LeftStr2)>,  <$STR(S_LeftStr3)>,  <$STR(S_LeftStr4)>,  <$STR(S_LeftStr5)>"

; 分解S_LeftStr1,其他S_LeftStrXX方法一致
StrTok S_LeftStr1 S_PropVal1 ,
StrTok S_LeftStr1 S_PropVal2 ,
StrTok S_LeftStr1 S_PropVal3 ,
StrTok S_LeftStr1 S_PropVal4 ,
SendMsg 5 "再按“,”分解出:<$STR(S_PropVal1)>,  <$STR(S_PropVal2)>,  <$STR(S_PropVal3)>,  <$STR(S_PropVal4)>"

StrTok S_PropVal1 S_Prop1 =
StrTok S_PropVal2 S_Prop2 =
StrTok S_PropVal3 S_Prop3 =
StrTok S_PropVal4 S_Prop4 =
SendMsg 5 "得到属性<$STR(S_Prop1)>=<$STR(S_PropVal1)>,<$STR(S_Prop2)>=<$STR(S_PropVal2)>,<$STR(S_Prop3)>=<$STR(S_PropVal3)>,<$STR(S_Prop4)>=<$STR(S_PropVal4)>"

; ------------------------------------------------------------------
#if
true
#act
; 获取鉴定特殊属性到M_Eval_Spec_Prop
FormatStr <$STR(M_EQUIP[%s]_EVAL_SPEC_PROPS{0})%s <$PARAM(3)> >
Mov M_Eval_Spec_Prop <$CALCRESULT>

; 更改鉴定特殊属性,可以使用#Call简化脚本
#if
IsBitSet M_Eval_Spec_Prop 0
#act
SendMsg 5 "拥有特殊属性:八卦护身神技"
; 删除掉该技能
UnSetBit M_Eval_Spec_Prop 0

#if
IsBitSet M_Eval_Spec_Prop 1
#act
SendMsg 5 "拥有特殊属性:战意麻痹神技"
; 删除掉该技能
UnSetBit M_Eval_Spec_Prop 1

#if
IsBitSet M_Eval_Spec_Prop 2
#act
SendMsg 5 "拥有特殊属性:重生神技"
; 删除掉该技能
UnSetBit M_Eval_Spec_Prop 2

#if
IsBitSet M_Eval_Spec_Prop 3
#act
SendMsg 5 "拥有特殊属性:探测神技"
; 删除掉该技能
UnSetBit M_Eval_Spec_Prop 3

#if
IsBitSet M_Eval_Spec_Prop 4
#act
SendMsg 5 "拥有特殊属性:传送神技"
; 删除掉该技能
UnSetBit M_Eval_Spec_Prop 4

#if
IsBitSet M_Eval_Spec_Prop 5
#act
SendMsg 5 "拥有特殊属性:麻痹神技"
#elseact
; 没有“麻痹神技”?那就设置一个“麻痹神技”,然后可以将M_Eval_Spec_Prop的值回设给装备,即拥有“麻痹神技”
SetBit M_Eval_Spec_Prop 5

#if
!IsBitSet M_Eval_Spec_Prop 6
#act
SendMsg 5 "赋予特殊属性:魔道麻痹神技"
SetBit M_Eval_Spec_Prop 6


; ------------------------------------------------------------------
; 获取鉴定神技属性到M_Eval_Skill_Prop
FormatStr <$STR(M_EQUIP[%s]_EVAL_SKILL_PROPS)%s <$PARAM(3)> >
Mov M_Eval_Skill_Prop <$CALCRESULT>

; 如果是武器,是拥有技能,其他非武器类装备是技能等级+1
#if
IsBitSet M_Eval_Skill_Prop 0
#act
SendMsg 5 "拥有神技:五岳独尊特技"
; 删除掉该技能
UnSetBit M_Eval_Skill_Prop 0

#if
IsBitSet M_Eval_Skill_Prop 1
#act
SendMsg 5 "拥有神技:召唤巨魔特技"
; 删除掉该技能
UnSetBit M_Eval_Skill_Prop 1

#if
IsBitSet M_Eval_Skill_Prop 2
#act
SendMsg 5 "拥有神技:神龙附体特技"
; 删除掉该技能
UnSetBit M_Eval_Skill_Prop 2

#if
IsBitSet M_Eval_Skill_Prop 3
#act
SendMsg 5 "拥有神技:倚天劈地特技"


; ------------------------------------------------------------------
FormatStr <$STR(M_EQUIP[%s]_EVAL_TIMES_PROPS)%s <$PARAM(3)> >
Mov M_Eval_Times_Prop <$CALCRESULT>



; ------------------------------------------------------------------
#if
; 升级身上装备,只是特殊技能
!CompVal <$PARAM(3)> = 10000
#act
; 故意留了空格,防止分解字符串是出现问题
FormatStr "%s |%s |%s |%s | %s" $STR(S_Eval_Base_Prop) $STR(S_Eval_Myst_Prop) $STR(M_Eval_Spec_Prop) $STR(M_Eval_Skill_Prop) $STR(M_Eval_Times_Prop)
SendMsg 5 "即将设置的鉴定属性:<$CALCRESULT>"
; 第5参数本来处理失败的结果,现在扩展为可以设置99,即忽略普通属性的升级,这里只升级神秘属性
UpgradeItemEx <$PARAM(3)> 11 1 1 99 "" 1 <$CALCRESULT>
; 升级自定义装备框的装备,略...
;#elseact
;UpgradeDlgItem

评分

参与人数 1金币 +4 收起 理由
完美 + 4 我很赞同!BLUE引擎有你更精彩!.

查看全部评分

您的回帖是对楼主莫大的鼓励和支持。禁止讨论违规敏感话题、禁止攻击辱骂他人!懒人可选回复语句:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

帮助

客服

QQ群

回复

列表