举个例子 修复转职任务 转职成为精灵巡守 1、准备工作,一份L2J模拟器必不可少,另外请准备好一份解密的NPCNAME-CN.txt,questname-cn.txt和itemname-cn.txt。如果不会解密请l留言询问,这里不再作具体说明。 2、打开questname-cn.txt找到成为精灵巡守这一任务,它的任务代码是407,进入模拟器下data\jscript\quest\407-pathtoElfscout\,打开_init_.py文件,最开头的一段是标明导入的JAVA类和执行时的目标位置,可是不理。下面一段请注意: REORIA_LETTER2_ID = 1207 PRIGUNS_TEAR_LETTER1_ID = 1208 PRIGUNS_TEAR_LETTER2_ID = 1209 PRIGUNS_TEAR_LETTER3_ID = 1210 PRIGUNS_TEAR_LETTER4_ID = 1211 MORETTIS_HERB_ID = 1212 MORETTIS_LETTER_ID = 1214 PRIGUNS_LETTER_ID = 1215 HONORARY_GUARD_ID = 1216 REORIA_RECOMMENDATION_ID = 1217 RUSTED_KEY_ID = 1293 这里是任务物品的代码,等号右边数字是物品ID,具体请查itemname-cn.txt文件,我不一一作说明,其中1217是最后一步,大师Reisa的推荐信,GF中有了这件物品,然后找宗师Rains就可以完成转职,但是我们看到这里就差Rains的任务JS。 3、编写Rains的对话脚本,大家可以按照其它脚本的格式写,内容随便,只不过要注意存成utf-8的编码格式,文件名一定要以7228开头,因为查询npcname-cn.txt,Rains的ID是7228。这里我也给一个例子:7228-01.htm <格式html> <格式head> <格式body> Grand Master Rains:<格式br> Welcome,hero!Now i'll change your Class to <格式font color="LEVEL">Scout<格式/font>!<格式br>May you good luck! <格式/body> <格式/html> 为了让文件内容能显示,所以我在必须要的内容前面都加了“格式”二字,大家写的时候自己去掉。 4、修正_init_.py文件。找到下面内容 elif npcId == 7328 and int(st.get("cond")) and st.getQuestItemsCount(HONORARY_GUARD_ID)>0 : htmltext = "7328-07.htm" st.takeItems(HONORARY_GUARD_ID,1) st.giveItems(REORIA_RECOMMENDATION_ID,1) st.set("cond","0") st.setState(COMPLETED) st.playSound("ItemSound.quest_finish") return htmltext 我作一个大意解释,这里是说如果npc的id为7328也就是指你跟Reisa对话,此时你任务并没完成,同时又有物品HONORARY_GUARD_ID(名字记不太清楚了,反正是莫雷蒂给你的认证书),那么对话就显示7328-07.htm里的内容,同时把莫雷蒂的认证书收回,给你Reisa的认证书,响任务完成的音乐,任务就此结束。实际上并没有涉及到转职的内容。 将下面内容替换原文,请仔细一点不要弄错了。 elif npcId == 7328 and int(st.get("cond")) and st.getQuestItemsCount(HONORARY_GUARD_ID)>0 : htmltext = "7328-07.htm" st.takeItems(HONORARY_GUARD_ID,1) st.giveItems(REORIA_RECOMMENDATION_ID,1) st.set("cond","9") elif npcId ==7228 and int(st.get("cond")) and st.getQuestItemsCount(REORIA_RECOMMENDATION_ID)>0: htmltext = "7228-01.htm" st.takeItems(REORIA_RECOMMENDATION_ID,1) st.player.setClassId(22) st.set("cond","0") st.setState(COMPLETED) st.playSound("ItemSound.quest_finish") return htmltext 再向下拉,看到有STARTED.addTalkId()这里,加上一行STARTED.addTalkId(7228) 保存后,一切就OK了!现在你像GF一样做任务转职了! 最后偶再补充一点点任务相关的内容,有许多朋友抱怨,一些任务物品的掉率实在太低了,不管怎么调爆率都不会掉,实际上任务物品的掉落与爆率没有关系,是在_init_.py和mysql里控制的,首先mysql里要设计有这个物品的掉率,要不我也没办法,然后就是在任务js里调整。还是以精灵巡守为例,请看下面的内容: def onKill (self,npc,st): npcId = npc.getNpcId() if npcId == 53 : ------------------任务目标 st.set("id","0") ------------------数据库里标签,可以不管 if int(st.get("cond")) : ---------判断任务在进行 if st.getQuestItemsCount(PRIGUNS_TEAR_LETTER1_ID)+st.getQuestItemsCount(PRIGUNS_TEAR_LETTER2_ID)+st.getQuestItemsCount(PRIGUNS_TEAR_LETTER3_ID)+st.getQuestItemsCount(PRIGUNS_TEAR_LETTER4_ID) < 4 : ---如果任务物品总数不到4 if st.getQuestItemsCount(PRIGUNS_TEAR_LETTER1_ID)<1 : st.giveItems(PRIGUNS_TEAR_LETTER1_ID,1) ---------掉落1个 if st.getQuestItemsCount(PRIGUNS_TEAR_LETTER1_ID)+st.getQuestItemsCount(PRIGUNS_TEAR_LETTER2_ID)+st.getQuestItemsCount(PRIGUNS_TEAR_LETTER3_ID)+st.getQuestItemsCount(PRIGUNS_TEAR_LETTER4_ID) == 4 : -------------检查是否打够了任务物品 st.playSound("ItemSound.quest_middle") -----------如果够了就在游戏中响任务物品够的音乐 st.set("cond","3") -----------同时给任务阶段换一个标签 else: st.playSound("ItemSound.quest_itemget") -----------否则就响得到物品的音乐 以上是对物品的控制,另外还有 STARTED.addQuestDrop(7328,REORIA_LETTER2_ID,1) STARTED.addQuestDrop(53,PRIGUNS_TEAR_LETTER1_ID,1) STARTED.addQuestDrop(53,PRIGUNS_TEAR_LETTER2_ID,1) STARTED.addQuestDrop(53,PRIGUNS_TEAR_LETTER3_ID,1) STARTED.addQuestDrop(53,PRIGUNS_TEAR_LETTER4_ID,1) STARTED.addQuestDrop(5031,RUSTED_KEY_ID,1) STARTED.addQuestDrop(7337,MORETTIS_HERB_ID,1) STARTED.addQuestDrop(7337,MORETTIS_LETTER_ID,1) STARTED.addQuestDrop(7426,PRIGUNS_LETTER_ID,1) STARTED.addQuestDrop(7337,HONORARY_GUARD_ID,1) 这些是对爆率的控制,如果没有上述两段那你可以中断任务了,因为打不出来啊! 其它的转职任务与我所讲的修正方法完全一样,只不过是换个NPCID和itemID。大家有兴趣可以自己试着修正一下。 由于现在大家手中的模拟器各不相同,有许多都是别的作者自己加以编译了的,我手上的也一样,经过偶自己和几位朋友分别重新编译,增加了一些东西,具体是什么自己都记不清了. 所以也不知道大家手中的模拟器是否有setClassId这个方法,为了使人人都能完成任务,再提供一个修正方法,注意这两种方法偶都测试通过,绝无问题. 在_init_.py文件中找到 elif npcId == 7328 and int(st.get("cond")) and st.getQuestItemsCount(HONORARY_GUARD_ID)>0 : htmltext = "7328-07.htm" 直到 return htmltext 这一段,将其换为: elif npcId == 7328 and int(st.get("cond")) and st.getQuestItemsCount(HONORARY_GUARD_ID)>0 : htmltext = "7328-07.htm" st.takeItems(HONORARY_GUARD_ID,1) st.giveItems(REORIA_RECOMMENDATION_ID,1) st.set("cond","9") elif npcId == 7228 and int(st.get("cond"))>=0: if st.getQuestItemsCount(REORIA_RECOMMENDATION_ID)>0 : htmltext = "7228-01.htm" st.takeItems(REORIA_RECOMMENDATION_ID,1) st.set("cond","0") st.setState(COMPLETED) st.playSound("ItemSound.quest_finish") else: htmltext = "7228-02.htm" return htmltext 同样再在下面定义对话人物,加上STARTED.addTalkId(7228)表示任务中有跟7228号npc对话的内容. 然后编辑7228-01.htm为: <html> <head> <body> Grand Master Rains:<br> Welcome,hero!I'm now changing your Class to<br><a action="bypass -h npc_%objectId%_change_class 22"><font color="LEVEL"> Scout</font></a>!<br>May you good luck! </body> </html> 再编写一个7228-02.htm: <html> <head> <body> Grand Master Rains:<br> Greetings,hero!I wonder if you fit for <font color="LEVEL">Scout</font>?<br>Come back when you are ready! </body> </html> 请一定将格式存为utf-8,要不会出问题的! 这样即使你是最原始的l2j档都没有问题!
天堂2 修复各种任务系统的方法
- 天堂之手
- Mr.GL
- 帖子: 263
- 注册时间: 2018-02-24 21:37
- 联系:
天堂2 修复各种任务系统的方法
在线用户
正浏览此版面之用户: 没有注册用户 和 11 访客