为传奇装备附加灵魂属性的NPC脚本完整编写指南

来源: 作者: 点击:
脚本功能解析 该NPC提供八种装备灵魂属性附加服务:物理伤害吸收、魔法伤害吸收、致命一击、伤害反弹、体质增加、附加经验、忽视目标防御、加强攻击伤害。每次服务收取2000元宝。脚本结构为主NPC菜单调用八个独立功能脚本文件,每个文件处理一种属性附加逻辑。

主NPC脚本完善 根据提供的片段,主NPC脚本完整编写如下:

[@main]
#SAY
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\
年轻人啊,老夫在此数十载,您可只老夫在此地都忙于什么吗?\
呵呵...告诉你吧,老夫在此是为了研究玛法大陆失传已久的锻造技术\
果然,皇天不负有心人,终于叫我研究出来了。\
现在老夫要将此技术为广大的玛法大陆勇士们施展出来。\
但是我要收取2000的元宝作为我的辛苦费,这个不算过分吧 嗯?\
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\
<物理伤害吸收/@物理伤害> <魔法伤害吸收/@魔法伤害> <增加致命一击/@致命一击> <增加伤害反弹/@伤害反弹>\
<增加体质/@体质增加> <增加经验/@附加经验> <忽视目标防御/@忽视防御> <加强攻击伤害/@攻击伤害>\
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\

[@物理伤害]
#CALL [\\后台管理\\物理伤害.txt] @物理伤害吸收

[@魔法伤害]
#CALL [\\后台管理\\魔法伤害.txt] @魔法伤害吸收

[@致命一击]
#CALL [\\后台管理\\致命一击.txt] @致命一击伤害

[@伤害反弹]
#CALL [\\后台管理\\伤害反弹.txt] @增加伤害反弹

[@体质增加]
#CALL [\\后台管理\\体质增加.txt] @强化体质增加

[@附加经验]
#CALL [\\后台管理\\附加经验.txt] @增加附加经验

[@忽视防御]
#CALL [\\后台管理\\忽视防御.txt] @忽视目标防御

[@攻击伤害]
#CALL [\\后台管理\\攻击伤害.txt] @加强攻击伤害

主脚本完成,接下来需创建八个后台脚本文件。

物理伤害吸收脚本 创建Mir200\Envir\后台管理\物理伤害.txt文件:

[@物理伤害吸收]
#IF
CHECKGAMEGOLD > 1999
#ACT
TAKEGAMEGOLD 2000
UPGRADEUSERITEM 1 0 + 1
SENDMSG 0 玩家[<$USERNAME>]成功为装备附加物理伤害吸收属性!
#SAY
锻造成功!你的装备获得了物理伤害吸收属性。\
<返回/@main>
#ELSEACT
#SAY
元宝不足2000,无法进行锻造。\
<返回/@main>

CHECKGAMEGOLD检测元宝是否大于1999,TAKEGAMEGOLD扣除2000元宝。UPGRADEUSERITEM 1 0 + 1为装备添加物理伤害吸收属性,参数1表示属性位置,0表示属性类型,+1表示增加值。属性位置1通常对应物理伤害吸收。

魔法伤害吸收脚本 创建Mir200\Envir\后台管理\魔法伤害.txt文件:

[@魔法伤害吸收]
#IF
CHECKGAMEGOLD > 1999
CHECKITEMTYPE 1
#ACT
TAKEGAMEGOLD 2000
UPGRADEUSERITEM 1 1 + 1
SENDMSG 0 玩家[<$USERNAME>]成功为装备附加魔法伤害吸收属性!
#SAY
锻造成功!你的装备获得了魔法伤害吸收属性。\
<返回/@main>
#ELSEACT
#IF
CHECKGAMEGOLD < 2000
#ACT
#SAY
元宝不足2000,无法进行锻造。\
<返回/@main>
#ELSEACT
#SAY
请佩戴需要附加属性的装备。\
<返回/@main>

CHECKITEMTYPE 1检测物品栏第一格是否佩戴装备。UPGRADEUSERITEM 1 1 + 1为装备添加魔法伤害吸收属性,参数1为属性位置,1为属性类型。

致命一击脚本 创建Mir200\Envir\后台管理\致命一击.txt文件:

[@致命一击伤害]
#IF
CHECKGAMEGOLD > 1999
CHECKITEMTYPE 1
#ACT
TAKEGAMEGOLD 2000
UPGRADEUSERITEM 1 2 + 1
SENDMSG 0 玩家[<$USERNAME>]成功为装备附加致命一击属性!
#SAY
锻造成功!你的装备获得了致命一击属性。\
<返回/@main>
#ELSEACT
#IF
CHECKGAMEGOLD < 2000
#ACT
#SAY
元宝不足2000,无法进行锻造。\
<返回/@main>
#ELSEACT
#SAY
请佩戴需要附加属性的装备。\
<返回/@main>

UPGRADEUSERITEM 1 2 + 1添加致命一击属性。属性类型2通常对应致命一击概率。

伤害反弹脚本 创建Mir200\Envir\后台管理\伤害反弹.txt文件:

[@增加伤害反弹]
#IF
CHECKGAMEGOLD > 1999
CHECKITEMTYPE 1
#ACT
TAKEGAMEGOLD 2000
UPGRADEUSERITEM 1 3 + 1
SENDMSG 0 玩家[<$USERNAME>]成功为装备附加伤害反弹属性!
#SAY
锻造成功!你的装备获得了伤害反弹属性。\
<返回/@main>
#ELSEACT
#SAY
条件不符:需佩戴装备且拥有2000元宝。\
<返回/@main>

UPGRADEUSERITEM 1 3 + 1添加伤害反弹属性。属性类型3对应伤害反弹比例。

体质增加脚本 创建Mir200\Envir\后台管理\体质增加.txt文件:

[@强化体质增加]
#IF
CHECKGAMEGOLD > 1999
CHECKITEMTYPE 1
#ACT
TAKEGAMEGOLD 2000
UPGRADEUSERITEM 1 4 + 1
SENDMSG 0 玩家[<$USERNAME>]成功为装备附加体质增加属性!
#SAY
锻造成功!你的装备获得了体质增加属性。\
<返回/@main>
#ELSEACT
#SAY
条件不符:需佩戴装备且拥有2000元宝。\
<返回/@main>

UPGRADEUSERITEM 1 4 + 1添加体质增加属性。属性类型4对应体质或生命值增加。

附加经验脚本 创建Mir200\Envir\后台管理\附加经验.txt文件:

[@增加附加经验]
#IF
CHECKGAMEGOLD > 1999
CHECKITEMTYPE 1
#ACT
TAKEGAMEGOLD 2000
UPGRADEUSERITEM 1 5 + 1
SENDMSG 0 玩家[<$USERNAME>]成功为装备附加经验加成属性!
#SAY
锻造成功!你的装备获得了经验加成属性。\
<返回/@main>
#ELSEACT
#SAY
条件不符:需佩戴装备且拥有2000元宝。\
<返回/@main>

UPGRADEUSERITEM 1 5 + 1添加经验加成属性。属性类型5对应打怪经验增加比例。

忽视防御脚本 创建Mir200\Envir\后台管理\忽视防御.txt文件:

[@忽视目标防御]
#IF
CHECKGAMEGOLD > 1999
CHECKITEMTYPE 1
#ACT
TAKEGAMEGOLD 2000
UPGRADEUSERITEM 1 6 + 1
SENDMSG 0 玩家[<$USERNAME>]成功为装备附加忽视防御属性!
#SAY
锻造成功!你的装备获得了忽视目标防御属性。\
<返回/@main>
#ELSEACT
#SAY
条件不符:需佩戴装备且拥有2000元宝。\
<返回/@main>

UPGRADEUSERITEM 1 6 + 1添加忽视防御属性。属性类型6对应攻击时忽视目标防御比例。

攻击伤害脚本 创建Mir200\Envir\后台管理\攻击伤害.txt文件:

[@加强攻击伤害]
#IF
CHECKGAMEGOLD > 1999
CHECKITEMTYPE 1
#ACT
TAKEGAMEGOLD 2000
UPGRADEUSERITEM 1 7 + 1
SENDMSG 0 玩家[<$USERNAME>]成功为装备附加攻击伤害属性!
#SAY
锻造成功!你的装备获得了攻击伤害加成属性。\
<返回/@main>
#ELSEACT
#SAY
条件不符:需佩戴装备且拥有2000元宝。\
<返回/@main>

UPGRADEUSERITEM 1 7 + 1添加攻击伤害属性。属性类型7对应攻击力增加。

装备位置检测优化 原脚本只检测物品栏第一格,优化为允许选择多个装备位置。修改检测逻辑:

[@main]
#SAY
请选择要附加属性的装备位置:\
<武器/@weapon> <衣服/@clothes> <头盔/@helmet> <项链/@necklace>\
<左手镯/@lbracelet> <右手镯/@rbracelet> <左戒指/@lring> <右戒指/@rring>\
<腰带/@belt> <鞋子/@shoes> <宝石/@gem>\
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\
<物理伤害吸收/@物理伤害> <魔法伤害吸收/@魔法伤害> <增加致命一击/@致命一击>\

[@weapon]
#ACT
MOV P0 1
#SAY
已选择武器位置。\
<返回属性菜单/@main>

[@物理伤害]
#IF
CHECKGAMEGOLD > 1999
EQUAL P0 1
#ACT
TAKEGAMEGOLD 2000
UPGRADEUSERITEM <$STR(P0)> 0 + 1

添加装备位置选择菜单,使用P0变量记录选择的装备位置。UPGRADEUSERITEM <STR(P0)> 0 + 1中<STR(P0)>引用变量值作为装备位置参数。

属性值随机化 添加属性值随机范围,使锻造结果更具变化性。修改属性添加命令:

[@物理伤害吸收]
#IF
CHECKGAMEGOLD > 1999
CHECKITEMTYPE 1
#ACT
TAKEGAMEGOLD 2000
RANDOM 5
MOV P1 <$STR(N0)>
INC P1 1
UPGRADEUSERITEM 1 0 + <$STR(P1)>
SENDMSG 0 玩家[<$USERNAME>]成功为装备附加<$STR(P1)>点物理伤害吸收!

RANDOM 5生成0-4随机数,MOV P1 <STR(N0)>存入P1,INC P1 1加1得到1-5范围值。UPGRADEUSERITEM 1 0 + <STR(P1)>添加随机值属性。

属性上限控制 防止属性值无限叠加,添加上限检测。扩展脚本逻辑:

[@物理伤害吸收]
#IF
CHECKGAMEGOLD > 1999
CHECKITEMTYPE 1
#ACT
GetUserItemValue 1 0 P2
#IF
LARGE P2 9
#ACT
#SAY
该装备物理伤害吸收已满10点,无法继续附加。\
<返回/@main>
#ELSEACT
TAKEGAMEGOLD 2000
RANDOM 5
MOV P3 <$STR(N0)>
INC P3 1
UPGRADEUSERITEM 1 0 + <$STR(P3)>
GetUserItemValue 1 0 P4
SENDMSG 0 玩家[<$USERNAME>]装备物理伤害吸收增至<$STR(P4)>点!

GetUserItemValue 1 0 P2读取装备当前物理伤害吸收值存入P2。LARGE P2 9检测是否大于9,大于9则提示已满。添加后再次读取值P4用于公告显示。

多属性共存检测 检测装备是否已存在冲突属性。例如致命一击与伤害反弹可能冲突,添加检测逻辑:

[@致命一击伤害]
#IF
CHECKGAMEGOLD > 1999
CHECKITEMTYPE 1
#ACT
GetUserItemValue 1 3 P5
#IF
LARGE P5 0
#ACT
#SAY
该装备已存在伤害反弹属性,与致命一击冲突。\
<返回/@main>
#ELSEACT
TAKEGAMEGOLD 2000
UPGRADEUSERITEM 1 2 + 1

GetUserItemValue 1 3 P5读取伤害反弹属性值,LARGE P5 0检测是否大于0,存在则提示冲突无法添加致命一击。

失败概率与降级 添加锻造失败概率,失败时扣除元宝但属性不增加甚至降低。增加随机失败逻辑:

[@物理伤害吸收]
#IF
CHECKGAMEGOLD > 1999
CHECKITEMTYPE 1
#ACT
TAKEGAMEGOLD 2000
RANDOM 10
#IF
SMALL <$STR(N0)> 2
#ACT
GetUserItemValue 1 0 P6
DEC P6 1
UPGRADEUSERITEM 1 0 = <$STR(P6)>
SENDMSG 0 玩家[<$USERNAME>]锻造失败,物理伤害吸收降低至<$STR(P6)>点!
#SAY
锻造失败!属性不增反降。\
<返回/@main>
#ELSEACT
UPGRADEUSERITEM 1 0 + 1
SENDMSG 0 锻造成功!

RANDOM 10生成0-9随机数,SMALL <STR(N0)> 2检测是否小于2,即20%失败概率。失败时DEC P6 1属性值减1,UPGRADEUSERITEM 1 0 = <STR(P6)>设置新值。

材料需求扩展 除元宝外添加其他材料需求,如矿石、宝石等。修改检测条件:

[@物理伤害吸收]
#IF
CHECKGAMEGOLD > 1999
CHECKITEM 黑铁矿 5
CHECKITEM 灵魂宝石 1
CHECKITEMTYPE 1
#ACT
TAKEGAMEGOLD 2000
TAKE 黑铁矿 5
TAKE 灵魂宝石 1
UPGRADEUSERITEM 1 0 + 1

CHECKITEM检测所需材料,TAKE扣除材料。增加材料需求提高游戏经济系统深度。

属性可视化显示 锻造后显示装备当前所有灵魂属性。添加属性查询功能:

[@查看属性]
#ACT
GetUserItemName 1 S10
GetUserItemValue 1 0 P10
GetUserItemValue 1 1 P11
GetUserItemValue 1 2 P12
GetUserItemValue 1 3 P13
GetUserItemValue 1 4 P14
#SAY
装备<$STR(S10)>当前属性:\
物理伤害吸收:<$STR(P10)>点\
魔法伤害吸收:<$STR(P11)>点\
致命一击:<$STR(P12)>点\
伤害反弹:<$STR(P13)>点\
体质增加:<$STR(P14)>点\
<返回/@main>

GetUserItemName 1 S10读取装备名称,多个GetUserItemValue读取各属性值。S10、P10等变量显示属性信息。

职业限制添加 不同职业只能附加特定属性。例如法师不能附加物理伤害吸收,战士不能附加魔法伤害吸收。添加职业检测:

[@物理伤害吸收]
#IF
CHECKJOB Warrior
#ACT
#IF
CHECKGAMEGOLD > 1999
CHECKITEMTYPE 1
#ACT
TAKEGAMEGOLD 2000
UPGRADEUSERITEM 1 0 + 1
#ELSEACT
#SAY
仅战士职业可附加物理伤害吸收属性。\
<返回/@main>

CHECKJOB Warrior检测是否为战士职业。其他职业进入此选项显示限制提示。

套装属性激活 多件装备附加同种属性达到一定数值激活套装效果。添加计数与激活检测:

[@物理伤害吸收]
#IF
CHECKGAMEGOLD > 1999
CHECKITEMTYPE 1
#ACT
TAKEGAMEGOLD 2000
UPGRADEUSERITEM 1 0 + 1
#CALL [\\后台管理\\套装检测.txt] @检测物理套装

独立套装检测脚本统计角色所有装备物理伤害吸收总值,达到阈值激活额外属性加成。

最终脚本部署 将主NPC脚本保存至Mir200\Envir\Market_Def\装备锻造-3.txt。在Merchant.txt添加NPC配置:装备锻造 3 335 320 装备锻造-3 0 15 0 0 0。创建后台管理目录及八个功能脚本文件。重启M2Server或使用@ReloadNpc重载脚本。测试每个功能,确认元宝扣除、属性添加、提示信息均正常。