当前位置 : 145z游戏站 | 热血传奇 | 技术教程 | 

为传奇装备附加灵魂属性的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
TAKEGAMEGOLD2000
UPGRADEUSERITEM10+1
SENDMSG0玩家[<$USERNAME>]成功为装备附加物理伤害吸收属性!
#SAY
锻造成功!你的装备获得了物理伤害吸收属性。\
<返回/@main>
#ELSEACT
#SAY
元宝不足2000,无法进行锻造。\
<返回/@main>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

[@物理伤害吸收]
#IF
CHECKGAMEGOLD>1999
CHECKITEMTYPE1
#ACT
TAKEGAMEGOLD2000
RANDOM5
MOVP1<$STR(N0)>
INCP11
UPGRADEUSERITEM10+<$STR(P1)>
SENDMSG0玩家[<$USERNAME>]成功为装备附加<$STR(P1)>点物理伤害吸收!

RANDOM5生成0-4随机数,MOVP1<STR(N0)>存入P1,INCP11加1得到1-5范围值。UPGRADEUSERITEM10+<STR(P1)>添加随机值属性。

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

[@物理伤害吸收]
#IF
CHECKGAMEGOLD>1999
CHECKITEMTYPE1
#ACT
GetUserItemValue10P2
#IF
LARGEP29
#ACT
#SAY
该装备物理伤害吸收已满10点,无法继续附加。\
<返回/@main>
#ELSEACT
TAKEGAMEGOLD2000
RANDOM5
MOVP3<$STR(N0)>
INCP31
UPGRADEUSERITEM10+<$STR(P3)>
GetUserItemValue10P4
SENDMSG0玩家[<$USERNAME>]装备物理伤害吸收增至<$STR(P4)>点!

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

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

[@致命一击伤害]
#IF
CHECKGAMEGOLD>1999
CHECKITEMTYPE1
#ACT
GetUserItemValue13P5
#IF
LARGEP50
#ACT
#SAY
该装备已存在伤害反弹属性,与致命一击冲突。\
<返回/@main>
#ELSEACT
TAKEGAMEGOLD2000
UPGRADEUSERITEM12+1

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

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

[@物理伤害吸收]
#IF
CHECKGAMEGOLD>1999
CHECKITEMTYPE1
#ACT
TAKEGAMEGOLD2000
RANDOM10
#IF
SMALL<$STR(N0)>2
#ACT
GetUserItemValue10P6
DECP61
UPGRADEUSERITEM10=<$STR(P6)>
SENDMSG0玩家[<$USERNAME>]锻造失败,物理伤害吸收降低至<$STR(P6)>点!
#SAY
锻造失败!属性不增反降。\
<返回/@main>
#ELSEACT
UPGRADEUSERITEM10+1
SENDMSG0锻造成功!

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

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

[@物理伤害吸收]
#IF
CHECKGAMEGOLD>1999
CHECKITEM黑铁矿5
CHECKITEM灵魂宝石1
CHECKITEMTYPE1
#ACT
TAKEGAMEGOLD2000
TAKE黑铁矿5
TAKE灵魂宝石1
UPGRADEUSERITEM10+1

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

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

[@查看属性]
#ACT
GetUserItemName1S10
GetUserItemValue10P10
GetUserItemValue11P11
GetUserItemValue12P12
GetUserItemValue13P13
GetUserItemValue14P14
#SAY
装备<$STR(S10)>当前属性:\
物理伤害吸收:<$STR(P10)>点\
魔法伤害吸收:<$STR(P11)>点\
致命一击:<$STR(P12)>点\
伤害反弹:<$STR(P13)>点\
体质增加:<$STR(P14)>点\
<返回/@main>

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

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

[@物理伤害吸收]
#IF
CHECKJOBWarrior
#ACT
#IF
CHECKGAMEGOLD>1999
CHECKITEMTYPE1
#ACT
TAKEGAMEGOLD2000
UPGRADEUSERITEM10+1
#ELSEACT
#SAY
仅战士职业可附加物理伤害吸收属性。\
<返回/@main>

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

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

[@物理伤害吸收]
#IF
CHECKGAMEGOLD>1999
CHECKITEMTYPE1
#ACT
TAKEGAMEGOLD2000
UPGRADEUSERITEM10+1
#CALL[\\后台管理\\套装检测.txt]@检测物理套装

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

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