脚本示例

装备鉴定属性转移获取脚本

GetEquipProps 读装备六类属性(普通、普通鉴定、神秘鉴定、特殊、神技、鉴定次数),用位标记处理神技并做展示与转移。

用途

用 GetEquipProps 一次读出装备的普通属性、普通鉴定属性、神秘鉴定属性、特殊属性、鉴定神技与鉴定次数,再 Goto 到各展示段把位标记翻成中文属性名,最后用 GiveEx 造一件带全部属性的新装备,或用 UPGRADEITEMEX 把这些鉴定属性转移到别的装备上。

参考脚本

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




[@GetEquipProps]
; 检测衣服的属性
#if
CheckUseItem 0
#act
;设置装备类型。方便读取普通属性的属性值都是什么属性
Mov S装备类型 DRESS
;重置所有属性表变量
Mov S普通属性表 ""
Mov S普通鉴定表 ""
Mov S神秘鉴定表 ""
Mov M特殊属性表 0
Mov M神技属性表 0
Mov M鉴定次数 0
GetEquipProps 0
[@OnGetEquipProps]
#iF
True
#Act
;获取普通属性到 变量 S普通属性表  "0=<$STR(M_EQUIP[0]_NORM_PROPS{0})>," <$STR(M_EQUIP[0]_NORM_PROPS{0})>  [0]为装备位置 即衣服 {0}为基础属性0位置的极品点数。
Inc S普通属性表 0=<$STR(M_EQUIP[0]_NORM_PROPS{0})>,
Inc S普通属性表 1=<$STR(M_EQUIP[0]_NORM_PROPS{1})>,
Inc S普通属性表 2=<$STR(M_EQUIP[0]_NORM_PROPS{2})>,
Inc S普通属性表 3=<$STR(M_EQUIP[0]_NORM_PROPS{3})>,
Inc S普通属性表 4=<$STR(M_EQUIP[0]_NORM_PROPS{4})>,
Inc S普通属性表 5=<$STR(M_EQUIP[0]_NORM_PROPS{5})>,
Inc S普通属性表 6=<$STR(M_EQUIP[0]_NORM_PROPS{6})>,
Inc S普通属性表 7=<$STR(M_EQUIP[0]_NORM_PROPS{7})>,
Inc S普通属性表 8=<$STR(M_EQUIP[0]_NORM_PROPS{8})>,
Inc S普通属性表 9=<$STR(M_EQUIP[0]_NORM_PROPS{9})>,
Inc S普通属性表 10=<$STR(M_EQUIP[0]_NORM_PROPS{10})>,
Inc S普通属性表 11=<$STR(M_EQUIP[0]_NORM_PROPS{11})>,
Inc S普通属性表 12=<$STR(M_EQUIP[0]_NORM_PROPS{12})>,
Inc S普通属性表 13=<$STR(M_EQUIP[0]_NORM_PROPS{13})>,
Inc S普通属性表 14=<$STR(M_EQUIP[0]_NORM_PROPS{14})>,
Inc S普通属性表 15=<$STR(M_EQUIP[0]_NORM_PROPS{15})>,
Inc S普通属性表 16=<$STR(M_EQUIP[0]_NORM_PROPS{16})>,
Inc S普通属性表 17=<$STR(M_EQUIP[0]_NORM_PROPS{17})>,
Inc S普通属性表 18=<$STR(M_EQUIP[0]_NORM_PROPS{18})>,
Inc S普通属性表 19=<$STR(M_EQUIP[0]_NORM_PROPS{19})>,
Inc S普通属性表 20=<$STR(M_EQUIP[0]_NORM_PROPS{20})>,
Inc S普通属性表 21=<$STR(M_EQUIP[0]_NORM_PROPS{21})>,
Inc S普通属性表 22=<$STR(M_EQUIP[0]_NORM_PROPS{22})>,
Inc S普通属性表 23=<$STR(M_EQUIP[0]_NORM_PROPS{23})>

;或直接批量获取所有有效普通属性.(持久除外)
Mov S普通属性表 <$Str(S_EQUIP[0]_NORM_PROPS)>

;获取普通鉴定属性到 变量 S普通鉴定表  "<$STR(S_EQUIP[0]_EVAL_BASE_PROPS)>"   [0]为装备位置 即衣服
;以下4个变量一样
Mov S普通鉴定表 <$STR(S_EQUIP[0]_EVAL_BASE_PROPS)>
Mov S神秘鉴定表 <$STR(S_EQUIP[0]_EVAL_MYST_PROPS)>
Mov M特殊属性表 <$STR(M_EQUIP[0]_EVAL_SPEC_PROPS)>
Mov M神技属性表 <$STR(M_EQUIP[0]_EVAL_SKILL_PROPS)>
Mov M鉴定次数 <$STR(M_EQUIP[0]_EVAL_TIMES_PROPS)>
Sendmsg 7 普通属性:<$STR(S普通属性表)>|鉴定基础属性:<$STR(S普通鉴定表)>|鉴定神秘属性:<$STR(S神秘鉴定表)>|特殊属性:<$STR(M特殊属性表)>|鉴定神技:<$STR(M神技属性表)>|鉴定次数:<$STR(M鉴定次数)>
ResetLoopCounter
;以下为汉字展示各个部分属性
Mov S12 <$STR(S普通属性表)>
Mov S普通属性
Goto @Norm_Prop_Show
Mov S12 <$STR(S普通鉴定表)>
Mov S普通鉴定属性
Goto @EVAL_Base_Show
Mov S12 <$STR(S神秘鉴定表)>
Mov S神秘鉴定属性
Goto @Eval_Myst_Show
Mov S神技能属性
Goto @EVAL_SPEC_Show
Mov S固定神技属性
Goto @EVAL_SKILL_Show
Sendmsg 7 普通属性:<$STR(S普通属性)>|普通鉴定属性:<$STR(S普通鉴定属性)>|神秘鉴定属性:<$STR(S神秘鉴定属性)>|神技能属性:<$STR(S神技能属性)>|固定神技属性:<$STR(S固定神技属性)>|鉴定次数:<$STR(M鉴定次数)>
;给一个新的装备且有以上所有属性
GiveEx 布衣(男) 1 <$STR(S普通属性表)>  <$STR(S普通鉴定表)>|<$STR(S神秘鉴定表)>|<$STR(M特殊属性表)>|<$STR(M神技属性表)>|<$STR(M鉴定次数)>
;把除普通属性外的所有鉴定属性转移到勋章上
UPGRADEITEMEX 2 0 0 0 99 "" 1 <$STR(S普通鉴定表)>|<$STR(S神秘鉴定表)>|<$STR(M特殊属性表)>|<$STR(M神技属性表)>|<$STR(M鉴定次数)>



[@EVAL_SKILL_Show]
#if
IsBitSet M神技属性表 0
#act
Inc S固定神技属性 五岳独尊特技\


#if
IsBitSet M神技属性表 1
#act
Inc S固定神技属性 召唤巨魔特技\


#if
IsBitSet M神技属性表 2
#act
Inc S固定神技属性 神龙附体特技\


#if
IsBitSet M神技属性表 3
#act
Inc S固定神技属性 倚天劈地特技\



;删除技能为 "UnSetBit M神技属性表 n" n代表以上检测的编号例如
;即删除倚天辟地特技
#If
IsBitSet M神技属性表 3
#Act
UnSetBit M神技属性表 3


;赋予技能为 "SetBit M神技属性表 n" n代表以上检测的编号
;即检查没有倚天辟地。然后添加倚天辟地特技
#If
!IsBitSet M神技属性表 3
#Act
SetBit M神技属性表 3


[@EVAL_SPEC_Show]
#if
IsBitSet M特殊属性表 0
#Act
Inc S神技能属性 八卦护身神技\

#if
IsBitSet M特殊属性表 1
#Act
Inc S神技能属性 战意麻痹神技\

#if
IsBitSet M特殊属性表 2
#Act
Inc S神技能属性 重生神技\

#if
IsBitSet M特殊属性表 3
#Act
Inc S神技能属性 探测神技\

#if
IsBitSet M特殊属性表 4
#Act
Inc S神技能属性 传送神技\


#if
IsBitSet M特殊属性表 5
#Act
Inc S神技能属性 麻痹神技\

#if
IsBitSet M特殊属性表 6
#Act
Inc S神技能属性 魔道麻痹神技\



;删除神技为 "UnSetBit M特殊属性表 n" n代表以上检测的编号
;即删除魔道麻痹神技

#If
IsBitSet M特殊属性表 6
#Act
UnSetBit M神技属性表 6



;赋予神技为 "SetBit M特殊属性表 n" n代表以上检测的编号
;即检查没有魔道麻痹神技。然后添加魔道麻痹神技
#If
!IsBitSet M特殊属性表 6
#Act
SetBit M特殊属性表 6

[@EVAL_Myst_Show]
#if
Equal S12
#Act
Break



#If
True
#Act
Mov S21
Mov S22
Mov S23
Mov S20 <$STR(S12)>


#If
CheckContainsText <$STR(S20)> ,
#Act
STRTok S20 S21 ,
Mov S12 <$STR(S20)>
STRTok S21 S23 =
#ElseAct
Mov S21 <$STR(S20)>
Mov S12
STRTok S21 S23 =



#if
Compval <$STR(S21)> > 0
#Act
Ini_Read_STRing ..\QuestDiary\全局数据文件\装备属性对照.ini EVAL_PROPS <$STR(S23)> S22
Inc S神秘鉴定属性 <$STR(S22)>+<$STR(S21)>\
Goto @EVAL_Myst_Show
#ElseAct
Goto @EVAL_Myst_Show



[@EVAL_Base_Show]
#if
Equal S12
#Act
Break



#If
True
#Act
Mov S21
Mov S22
Mov S23
Mov S20 <$STR(S12)>


#If
CheckContainsText <$STR(S20)> ,
#Act
STRTok S20 S21 ,
Mov S12 <$STR(S20)>
STRTok S21 S23 =
#ElseAct
Mov S21 <$STR(S20)>
Mov S12
STRTok S21 S23 =



#if
Compval <$STR(S21)> > 0
#Act
Ini_Read_STRing ..\QuestDiary\全局数据文件\装备属性对照.ini EVAL_PROPS <$STR(S23)> S22
Inc S普通鉴定属性 <$STR(S22)>+<$STR(S21)>\
Goto @EVAL_Base_Show
#ElseAct
Goto @EVAL_Base_Show


[@Norm_Prop_Show]
#if
Equal S12
#Act
Break



#If
True
#Act
Mov S21
Mov S22
Mov S23
Mov S20 <$STR(S12)>


#If
CheckContainsText <$STR(S20)> ,
#Act
STRTok S20 S21 ,
Mov S12 <$STR(S20)>
STRTok S21 S23 =
#ElseAct
Mov S21 <$STR(S20)>
Mov S12
STRTok S21 S23 =



#if
Compval <$STR(S21)> > 0
#Act
Ini_Read_STRing ..\QuestDiary\全局数据文件\装备属性对照.ini <$STR(S装备类型)> <$STR(S23)> S22
Inc S普通属性 <$STR(S22)>+<$STR(S21)>\
Goto @Norm_Prop_Show
#ElseAct
Goto @Norm_Prop_Show

关键点

  • [@GetEquipProps] 先用 CheckUseItem 0 判断衣服位,再调用 GetEquipProps 0;结果在回调 [@OnGetEquipProps] 里取。
  • 六类属性的取法:普通属性 S普通属性表(M_EQUIP[位置]_NORM_PROPS{序号})、普通鉴定 S普通鉴定表(S_EQUIP[位置]_EVAL_BASE_PROPS)、神秘鉴定 S神秘鉴定表(S_EQUIP[位置]_EVAL_MYST_PROPS)、特殊属性 M特殊属性表(M_EQUIP[位置]_EVAL_SPEC_PROPS)、鉴定神技 M神技属性表(M_EQUIP[位置]_EVAL_SKILL_PROPS)、鉴定次数 M鉴定次数(M_EQUIP[位置]_EVAL_TIMES_PROPS)。
  • 特殊属性与神技是位标记:IsBitSet <表> <位号> 判断、SetBit 赋予、UnSetBit 删除;脚本注释按「没有某个神技就先 SetBit 一个」的写法给出示例。
  • 五个展示段:[@Norm_Prop_Show] 普通属性、[@EVAL_Base_Show] 普通鉴定、[@Eval_Myst_Show] 神秘鉴定、[@EVAL_SPEC_Show] 特殊属性表对应的神技、[@EVAL_SKILL_Show] 神技属性表对应的固定神技;都用 Inc Sxx 属性名\ 追加文本。
  • 造新装备用 GiveEx 布衣(男) 1 <$STR(S普通属性表)> <$STR(S普通鉴定表)>|<$STR(S神秘鉴定表)>|<$STR(M特殊属性表)>|<$STR(M神技属性表)>|<$STR(M鉴定次数)>。
  • 转移鉴定属性用 UPGRADEITEMEX <装备位> 0 0 0 99 "" 1 <鉴定属性串>,第 5 参数 99 表示忽略普通属性、只写鉴定/神秘属性。
  • 与 装备属性转移脚本 是同主题的两份写法:本脚本用中文变量名、带 5 个属性展示段;那一份用 S_EVAL_* 英文变量名,聚焦属性转移与 UpgradeItemEX 升级。

相关阅读