点击投放广告点击投放广告点击投放广告点击投放广告
点击投放广告点击投放广告点击投放广告点击投放广告
广告
广告
广告
广告
广告
搜索
Hi~登录注册
查看: 728|回复: 0

[游戏修改教程] 三国天堂2NPC 基本概念 自己添加商店及传送

[复制链接]

27

主题

28

帖子

49

积分

偶尔光临

Rank: 1

积分
49

最佳新人

发表于 2022-6-7 21:59:49 | 显示全部楼层 |阅读模式
三国天堂2NPC 基本概念 自己添加商店及传送

1 [教学] NPC 基本概念 种类与对话
前言:
可能有很多新手对於 L2J 的任务的触发流程不是很清楚,所以大概介绍一下,介绍如果有错,还请老手不吝指教,谢谢。
概述:
基本上来说,L2J 的NPC不像是部份私服,一个 Script (或称脚本)控制 NPC 的出现位置、种类、对话与任务内容。
L2J 的 NPC 大多是使用NC Lineage2 原始设定好的固定 NPC 种类、名称。如果需要製作出新的 NPC (意指不同编号、不同名称),可能需要同时修编伺服器端设定资料外,另外需要修改用户端程式档案。
注意:修改用户端程式档案,除了修改麻烦之外,并且有明显违约使用之虞 (违反使用契约中的 对软体破解、擅改),因此是不建议。
知道环境因素之后,我先解释一下一般游戏概念中的 NPC 与 mob 有何不同,一般这两种很容易混淆,这边先废话一下:
NPC:就是指一般的商人、警卫之类的「非玩家操控角色」。
mob:是指一般野外会主动攻击,并且玩家可攻击的怪兽。
在 L2J 裡面简单来说就是:
滑鼠到 NPC 身上,游标会变成对话型态,如果要攻击他必须使用强制攻击 (按下Ctrl)。
滑鼠移动到 mob 身上,滑鼠指标会变成攻击型态 (一把剑的图示),可直接攻击。
如何决定他是 NPC 或是 mob?
其实这边解释会与上一段有点矛盾,因為在 L2J 中,所有非玩家角色通通都是NPC (或说通通是 mob)。
属性的变更、决定,是依据资料库 npc 资料表的栏位 type 当中的设定,type 栏位目前有以下几种:
L2Artefact
L2CabaleBuffer
L2CastleChamberlain
L2CastleTeleporter
L2ClassMaster
L2ControlTower
L2Deco
L2Doormen
L2FestivalGuide
L2FestivalMonster
L2Fisherman
L2Guard
L2Merchant
L2MercManager
L2Minion
L2Monster
L2Npc
L2Observation
L2Pet
L2RaidBoss
L2SiegeGuard
L2SiegeNpc
L2SignsPriest
L2SymbolMaker
L2Teleporter
L2Trainer
L2VillageMaster
L2Warehouse
对话:
当NPC 它的 type 不是L2Monster时,滑鼠点选会跳出对话,不过对话种类可分為:
种类一:空白,但是并不会真的是空白,会是一个内容為「没有任务可接受」之类的对话。
种类二:设定好的预设对话。
如何找到预设对话?
这时候就请两边看一下 NPC type (种类列表) 与 datapack 中的 ./data/html 目录,会发现到 datapack/data/html 目录下有很多与 npc type 名称相同的目录 (type 去掉 L2)。
在那裡面找到那位 NPC编号.htm 的档案,就是那位 NPC的预设对话内容。
主程式的开啟对话流程:
type 為 L2Doorman 的 npc,点选他的话...
1. 预设
  开啟 datapack/data/html/doorman/NPC编号.htm 的档案
2. 如果 找不到 NPC编号.htm
  改开啟 datapack/data/html/default/NPC编号.htm
3. 如果 还找不到
  显示对话框,内容為 「找不到 data/html/default/NPC编号.htm」或是「没有任务可接受」
对话部分先到这,其他后续的下次再补上。

2 [教学] NPC 基本概念 - 对话内容与选项
在了解 NPC 种类与对话开啟的 html 规则之后
之后就是对话的 htm 内容与选项。
简单的区分,npc 对话有包含「文字」与「选项」部分,文字的部分為依照基本的 htm 概念,这部分可能可以参考网路上相关文章。
文字部分比较不难理解,小弟举几种常见的选项功能来為大家说明,希望能够有所帮助。
先说明待会每次都出现的 %objectId% 这个字串,它是一个变数,在它送回伺服器时,会是物件的编号,物件编号格式為 268469859,这个物件编号在由系统控制,可以不用管他,某些功能会自动将物件编号与NPC编号对应。
选项有分以下几类:
1. 导向另一个 htm 档
代码:
<a action="bypass -h npc_%objectId%_Chat 1">更多讯息</a>
<a action="bypass -h npc_%objectId%_Chat 3">其他讯息</a>
"npc_物件编号_Chat x "字串,x 代表数字假定為12,这样代表点下这个连结选项之后,会导向、开啟 NPC编号-12.htm ,通常用在解释流程、功能、任务。
2. 商人交易
代码:
<a action="bypass -h npc_%objectId%_Buy 67">购买</a>
"npc_物件编号_Buy xx"字串,xx 代表数字假定為 5、物件编号 编号為 1267984<-随程式规则给予的值,这样代表点下这个连结选项,送出的值為 "npc_1267984_Buy 5",代表透过商人NPC 7088,开啟 5 号商店。
不过,在资料表 merchant_shopids 中必须加入一笔资料对应,那笔资料的 shop_id = 5 、npc_id = 7088,有这样的资料才会能够开啟商店视窗。
而商店贩卖物的部分则必须於资料表 merchant_buylists 中设定,资料表有以下几个栏位:
item_id - 贩卖物品的编号,例如「硬皮衬衫」编号為 710,就在这边输入710
price - 价格,这边输入多少就是卖多少。
shop_id - 商店编号,刚刚的例子中,5 号商店就必须在这裡填5。
order - 物品於商店视窗中的显示顺序,由1开始。

代码:
<a action="bypass -h npc_%objectId%_Sell">出售</a>
"npc_物件编号_Sell "字串,这样代表点下这个连结选项,会开啟贩卖物品视窗,这个选项不用带任何的额外编号。
3. 啟动任务
代码:
<a action="bypass -h npc_%objectId%_Quest">任务</a>
<a action="bypass -h npc_%objectId%_Quest 5001_armor">购买装备</a>
<a action="bypass -h npc_%objectId%_Quest 1234.htm">我要继续任务</a>
<a action="bypass -h npc_%objectId%_Quest 1">我要继续任务</a>

各位会发现 _Quest 之后所带的值并不相同,例如 5001_armor、1234.htm、1,有名称、档名、数字?
先解释没有其他值的部分,没有其他值通常代表该 NPC 只有一个任务,只要与他说话就会触发预设任务(或是显示没有任务可接受),通常这类的任务都是放至於 data/jscript/quest 之下。
如果於 _Quest 后面有附加值的,我们可以把他看作是送给伺服器的一种判别值,判别值的用法是用来
1. 判定执行何种任务
2. 判定本次对话為任务的哪个阶段
第一种:通常多用於「商店NPC」、「拥有多任务的NPC」,之前 multisell 功能还没有齐全之前,商店功能只能让玩家用「金币」向商人购买物品,如果像是双刀合成、材料合成、古代金币买卖、解除封印(也是交换物品)之类的物品交换功能就不支援了。所以之前的做法就是利用任务来解决像是「精品店」、「双刀合成」的功能。但是一个NPC可能会卖很多东西,例如铁匠可能会 解除封印、重新封印、製作双刀... 等,所以需要一个值来判定,点这的选项须要触发什麼样的功能 (任务),因此必须於 _Quest 之后加上判别值 (任务名称)。
第二种:也很常见,不过大多这种种类的 htm 档案是放在 data/jscript/quest/编号_任务 的裡面,用於任务内的流程串接。由於任务的撰写中,会有需要较有互动性的对话,例如
代码:
NPC说:
你做的很好,不愿意再帮我一个忙?
<a action="bypass -h npc_xxx_Quest Y">愿意(Y)</a>
<a action="bypass -h npc_xxx_Quest N">不愿意(N)</a>

撰写任务时,任务流程到了这个步骤,流程就会有分岔点,会变成:
代码:
如果 玩家愿意
 判别值 = Y 则 跳出另一个画面
 继续下个阶段
  呼叫 任务阶段1-1
  结束任务
如果 玩家不愿意
 判别值 = N 则  给一般奖赏
 结束任务.

所以就式任务的另外用法。

4. 守门人传送
代码:
<a action="bypass -h npc_%objectId%_goto 47" msg="811;奇岩城镇">奇岩城镇 - 11000 金币</a>

npc_NPC编号_goto 47 代表会传送玩家到资料表 teleport 裡面的 id =47设定的座标位置,等等会解释资料部分。
msg="811;奇岩城镇" 代表点取这个选项会跳出提示对话方块,对话方块内容种类為811,811对话方块的格式為「您确定要传送到(XXXX)吗?」,而 ; 之后的奇岩城镇将会被放入811对话方块xxxx 的位置。
语法解释完了,在来看资料库设定的部分,在资料表 teleport 中找到 id 栏位编号為 47 的资料,可以看到:
Description(註解), id(编号), loc_x(目的地X座标), loc_y(目的地Y座标), loc_z(目的地Z座标), price (传送价格)
Oren Town -> Giran Town, 47, 83400, 147943, -3404, 11000
所以综合起来就是,点了这个NPC的「奇岩城镇」这个项目,会把玩家传送到83400,147943,-3404这个位置,并且收取 11000 的金币。

1.如何撰写multisell下的xml档案
我们以001.xml来看
<?xml version='1.0' encoding='utf-8'?>
<!-- 说明这个档案的内容 --> <<一般来说他是程式的註解
<list>
<!-- 物品交换明细 什麼东西换什麼东西--> ] <<建议这边要写清楚
<item id="1"> <<第一项物品编码
<ingredient id="57" count="2100" enchant="0"/> <<需要物品编号57数量2100
<ingredient id="21" count="1" enchant="0"/> <<需要物品编号21数量1
<production id="22" count="1" enchant="0"/> <<换取物品编号22数量1
</item>
以此累推
<!-- [wooden_breastplate] for [leather_shirt]+[adena];5400 -->
<item id="2"> <<记得编号要按照顺序改下来不能有重复的
<ingredient id="57" count="5400" enchant="0"/>
<ingredient id="22" count="1" enchant="0"/>
<production id="23" count="1" enchant="0"/>
</item>
....
</list>
2.档案名称要求有2种方法
一.依照NPC编号 如果这个NPC只有卖这些不会跟其他NPC重复的话
二.依照原本编号 由於E版DP有001 002 009了 所以我们以003 004 005 下去做编排
3.给予相关NPC对应贩售连结
例如:
<a action="bypass -h npc_%objectId%_multisell 001">购买东西</a>
只要给予001做对应即可 不要用到副档名 不然会连结失败
完成后找NPC做测试如果达到你想要的成果



介绍一下L2JCN的传送师写法


L2JCN的传送师使用起来非常简单,之前似乎发过类似贴子,现在重新整理说明
L2JCN传送师功能可以使用在任何一种NPC身上,比如L2Npc L2Teleporter L2Merchant 等等等等..当然怪物是不行的..
L2JCN传送师的方法可以直接使用,内核中已经定义好,但是其他服务端是完全不能用的,需要你自己再定义
html中action部分的写法
范例:
action="bypass -h CCTP 12981 -248446 -9578 1 0 0 1"
其中CCTP表示要执行传送功能,紧接着后面的3个数字12981,-248446,-9578,是传送目的地的xyz坐标,要获取坐标在游戏里输入
/位置即可获取
紧接着后面的4个数字分别表示:传送需要的金币数量,是否是vip玩家专用,是否是组队专用,传送后是否有无敌保护
启用某种功能填写1,不启用填写0
如果设置传送金额为5000,并且是vip专用而且有无敌保护那么就可以这样写
5000 1 0 1
如果这是为传送金额为1000,并且是组队传送,而且有无敌保护
1000 0 1 1
单纯的传送:
1000 0 0 0
灵活运用后3位数字可以组合出多种传送模式

游客,如果您要查看本帖隐藏内容请回复


游乐论坛-免责声明

1、游乐论坛-游乐网单-游乐单机游戏所有网单资源来源于网络,仅供学习交流之用,切勿用于商业用途.

2、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意.

3、游乐论坛游戏提供的所有资源仅供参考学习使用,版权归原著所有,禁止下载本站资源参与商业和非法行为,请在24小时之内自行删除!

4、用户使用本网站必须遵守适用的法律法规,对于用户违法使用本站非法运营而引起的一切责任,由用户自行承担.

5、游乐论坛游戏所有资源来自互联网转载,版权归原著所有,用户访问和使用本站的条件是必须接受本站“免责声明”,如果不遵守,请勿访问或使用本网站.

6、游乐论坛游戏使用者因为违反本声明的规定而触犯中华人民共和国法律的,一切后果自己负责,游乐论坛游戏不承担任何责任,本站已经进行告知义务.

7、凡以任何方式登陆本网站或直接、间接使用本网站资料者,视为自愿接受本网站声明的约束.

8、游乐论坛游戏以《2013 中华人民共和国计算机软件保护条例》第二章 “软件著作权” 第十七条为原则:为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。若有学员需要商用本站资源,请务必联系版权方购买正版授权!

9、游乐论坛游戏如无意中侵犯了某个企业或个人的知识产权,请联系站长邮箱:zhl5@zhl5.com告之,本站将立即删除并致以最深的歉意.

游客
回复
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

广告
广告
广告
广告
广告
快速回复 返回顶部 返回列表