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

[游戏修改教程] 三国天堂2关于任务的编写提示

[复制链接]

1134

主题

1215

帖子

5089

积分

管理员

Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19

积分
5089
QQ
发表于 2022-6-7 22:21:24 | 显示全部楼层 |阅读模式


关于任务的编写提示
游乐论坛www.zhl5.com

一.创建任务目录
在...\data\jscript\quests上创建一个目录
二.把任务目录加入到目录列表
任务列表文件在...\data\jscript\quests下的__init__.py
用记事本打开可以看到

复制代码
1.'1_LettersOfLove1',
2.'2_WhatWomenWant1',
3.'3_ReleaseDarkelfElder1',
4.'4_LongLiveLordOfFlame',
5.'5_MinersFavor',
6.'6_StepIntoTheFuture',
7.'7_ATripBegins',
8.'8_AnAdventureBegins',
9.'9_IntoTheCityOfHumans',
10.'10_IntoTheWorld',
11.'19_GoToThePastureland',
12.'32_AnObviousLie',
13.'33_MakeAPairOfDressShoes',
14.'34_InSearchOfClothes',
15.'35_FindGlitteringJewelry',
16.'36_MakeASewingKit',
17.'37_PleaseMakeMeFormalWear',
18.'39_RedEyedInvaders',
19.'42_HelpTheUncle',
20.'43_HelpTheSister',
21.'44_HelpTheSon',
22.'45_ToTalkingIsland',
23.'46_OnceMoreInTheArmsOfTheMotherTree',
24.'47_IntoTheDarkForest',
25.'48_ToTheImmortalPlateau',
26.'49_TheRoadHome',
27.'101_SwordOfSolidarityQuest',
28.'102_FungusFever',
29.'103_SpiritOfCraftsman',
30.'104_SpiritOfMirror',
31.'105_SkirmishWithOrcs',
32.'106_ForgottenTruth',





格式:
复制代码
1.'目录名',
2.添加在__all__ = [
3.]
4.print ""
5.print "importing quests ..."
6.from data.jscript.quests import *
7.
8.print"... done"



之间
.
任务列表部分完成.
=三.任务__init__.py编写
__init__.py文件头数据
利用这些语句执行任务的JAVAclass

复制代码
1.print "importing quests: 607: Prove your courage!"
2.import sys
3.from net.sf.l2j.gameserver.model.quest import State
4.from net.sf.l2j.gameserver.model.quest import QuestState
5.from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest





'Class QuestJython'是任务信息
'Class State'任务中每一阶段的状态
'QuestState'相关玩家进行任务的状态/信息
基本上都要执行这些语句
==================================
任务相关NPC/道具等等

例如

复制代码
1.KELTIR_NPC_ID = 12082 // 任務NPC
2.FANGS_ITEM_ID = 1859 // 任務道具
3.DROP_RATE = 500000 // 任務道具掉落率
4.WORLD_MAP_ITEM_ID = 1665 // 任務獎勵 ,



复制代码
1.#Items
2.HEAD_OF_SHADITH_ID = 7235
3.TOTEM_OF_VALOR_ID = 7219



#NPCs
KADAN_ZU_K



修复任务脚本心得
帖子  由 hagcse ? 2018-03-10 15:15

首先,在python脚本中(扩展名为*.py),有属性,也可以说是实体。其中包括对象、变量和常量。如对象id,event等,是不可以自定义的,对象往往代表一系列物品及其具备的行为也就是方法(就是能做出什么动作来,如给任务道具等)的集合,一般由系统给出并不可自定义;
又如变量ANATOMY_DIAGRAM_ID,这个是今天325任务中的一个变量,它可以由我们自己定义,也就是起什么名字都行,如果我写成“JIEPOUTU”也可以,这个东西在任务中代表解剖图,后面的=1349就是给它赋值,这个值就是实际物品解剖图的 ID;
再如常量1、2、3、"7336-03.htm"等,这些常量就是具体的值,有数字,还有字符串,比如带引号的都是字符串,里面可以包含要说出来的话,这个引号里面也可以加入html标签,如350任务中,对话直接用的字符串而不是另外写了一个htm。
这些东西,是拿来操作的,或者说是一个个的部件,但实际上,它们装载的都是数据,因此会很抽象。

脚本中还有控制这些部件的东西,称为行为。
其中包括宏、运算符、控制关键字、方法和函数。
比如宏或函数前面一定会有def,在脚本中,总是会看到这个:def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr),它的意思就是,用__init__(self,id,name,descr) 来替换冒号“:”后面的JQuest.__init__(self,id,name,descr),这样可以使代码简洁并保持较高的兼容性,宏这个东西在这里其实和函数的作用一样,所以函数(也用def定义,def 函数名(参数表))就不介绍了,但是不管是宏或者是函数,都可以由我们自己定义;
接下来再说运算符和控制关键字,运算符有常见的+、- 、*、/即加减乘除,注意乘除的写法,这些叫做算术运算符,是计算数值时用的;还有>、<、==也就是大于小于和等于,注意等于的写法,是2个“=”这些叫做逻辑运算符,是比较大小时用的;
然后还有and、or、not运算符,就是逻辑运算符,这个东西代表“真假”之间的一系列关系,逻辑值有2个,一个真,一个假,说这两个值之间的关系,就是与(and)、或(or)和非(not),与是指两个值A和B,如果都为真,那么结果为真,其余情况为假,或是指两个值A和B,如果两个都为假,它们的结果才为假,其余为真,非就简单了,就是指这个值的相反;
最后有赋值运算符=、点运算符.和引号运算符"",=运算符就是把这个符号前面的变量的值,变成后边的值,如A =2,那么A就是2了,这里要注意判断2个数是否相等一定要用==,点运算符一般是用来取得一个对象里面某一个元素用的,如取得一个方法等,而引号的作用是把它里面的内容变成字符串,这样可以将其原封不动地发到客户端的对话中去;
接下来,有控制关键字,在脚本中,只出现了if、else、elif和return这些东西,是控制操作流向的,if关键字后面的表达式如果为真则执行if下面的东西,如果为假,则执行 else或者elif里面的东西,这个elif的作用就是执行了条件假规定的操作后进行下一步判断,在这里要说一句:每一行语句前面的空格数量,决定着这个if、elif是否结束,如:


01.a=1 #给一个变量赋值为1

02.if a==1 : #判断表达式a==1是否成立

03.print "a = 1" #在控制台显示a = 1这行字,注意这里缩进4个空格,不过显示的不是很准确

04.print "line 2" #这里我也缩进了4格,这表示在a=1的情况下这句也执行

05.else #这里没有缩进,意思是上面的2句结束,该处理条件为假了

06.print "a <> 1" #如果a不等于1,则会输出这句a <> 1

07.print "if,else ended" #这里面的语句无论a值为什么,都会被输出,,因为没有缩进,看成是与if平齐,也就是if语句结束后才执行的,并不属于那个if;



接下来是return,这个关键字是负责标示一个函数定义结束用的,同时也会把结果返回给调用者,如用得最多的return htmltext,就是把结果返回给服务器,服务器收到了这里面的内容后,发送给客户端;
最后还有方法,方法就是系统中对象所含的一些操作,比如 st.giveItems()就是一个方法,它的作用就是给玩家任务道具,方法、函数和宏往往带有参数,也就是其运行所依赖的条件,
比如我们可以定义一个函数def add(a, b): return a+b,那么宏add会返回a+b的值,则a和b就是宏add的参数,也是执行所依赖的条件。

好了,以上就是脚本中的各个组成部分,下面,看一看脚本如何与htm一起工作的:

首先在htm里面我们会发现


01.<a action="bypass -h Quest 325_GrimCollector 1">(任务选项的文字)</a>


这样的东西,这里面是类似标准htm的标签,bypass -h Quest 325_GrimCollector是一个命令,表示把后面的值“1”传送到引擎里面去,bypass为命令动词,意为传输,-h为方式参数,这个暂时不知道其意义,基本上都是用这个参数,Quest是类别参数,表明是任务 325_GrimCollector是任务名/ID参数,这个参数在quests目录下的__init__.py中定义,如果没有定义,系统就不会加载这个任务。
当玩家点了这个选项后,值1就会被传送到脚本中,而脚本中会指定def onEvent (self,event,st)接收相关的值,其中对象event就会接收该值,也就是说,将直传过来以后event=1,以便我们下一步根据这个事件的值判断该做什么。
这里要说一句,一般情况下,为了使程序易读,便于和步骤中的htm校对,我们将传送的值设为xxxx_x,前面的4个x代表npc编号,后面的代表步骤号,一般是与任务目录中的htm名相符,所以像这样传送1过来的情况不是很常见。
接下来,如果接受任务,那么传值就完成,这样会将下面的步骤激活,其中会有st.set("cond","1")这个是为了将数据库中的字段设为开始,也就是存储进度。下面st.setState (STARTED),这个是启动任务的标志,
接下来的,希望大家自己分析,一直到onTalk,也就是处理对话条件的宏,这个地方记载着点选npc时, npc会调用哪个htm回应,大家看这里有不少get和set打头的,get一般是查询资格,set一般是存储临时进度……

最后有onKill,这个是判断杀死任务怪物后掉落的物品,以前已经有人说过了,这里就不再重复了,我想看完了脚本中各元素以后,自己也能轻松的分析了……

这个任务在古鲁丁城镇南端的警卫克堤兹处,可以测试下


游乐论坛-免责声明

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

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

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

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

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

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

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

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

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

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

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