[服务端教程] 天堂2 打造官方般的转职任务系统

18
回复
18388
查看
打印 上一主题 下一主题
[复制链接]

微信扫一扫 分享朋友圈

  • TA的每日心情
    开心
    2018-5-17 15:44
  • 签到天数: 1 天

    [LV.1]安纳金

     成长值: 85395

    303

    主题

    430

    帖子

    13万

    祝福币

    管理员

    L2CN创建者

    Rank: 9Rank: 9Rank: 9

    积分
    135893
    楼主
    发表于 2018-5-18 15:28:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    L2J的任务系统虽然有很大进展,但一直也是令人垢病的地方,很多任务无法圆满完成。尤其是转职任务,所以不得不加了一个小猫来实现转职。
    经过两天的调试,终于对任务系统有了很大的完善,转职任务终于能顺利完成,不用再找小猫了,现将任务脚本的修正方法公布出来,并以精灵巡守的转职任务为例具体说明。
    觉得好的请顶一下贴!
    1、准备工作,一份L2J模拟器必不可少,另外请准备好一份解密的NPCNAME-CN.txt,questname-cn.txt和itemname-cn.txt。如果不会解密请到群里询问,这里不再作具体说明。
    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 单机NPCl类型
    下一篇:天堂2 創立角色,加入自定技能方法
    收藏
    收藏2
    全新论坛.全新开始.感谢大家这10多年来一直默默支持者L2CN!祝各位游戏愉快!!
    回复

    使用道具 举报

  • TA的每日心情

    2018-6-3 00:58
  • 签到天数: 3 天

    [LV.2]莉莉丝

    4

    主题

    69

    帖子

    20

    祝福币

    L2CN新兵

    Rank: 1

    积分
    20
    沙发
    发表于 2018-6-3 01:49:44 | 只看该作者
    真个真的是用心了,基本都在注解,感谢有技术而且乐于分享的人
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2018-11-26 10:09
  • 签到天数: 41 天

    [LV.5]欧塔比斯

    1

    主题

    59

    帖子

    204

    祝福币

    L2CN战士

    Rank: 2

    积分
    204
    板凳
    发表于 2018-9-25 14:45:09 | 只看该作者
    看不懂,但不妨碍我把它从头看到尾,精神上理解了
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2018-10-8 04:27
  • 签到天数: 5 天

    [LV.2]莉莉丝

    2

    主题

    16

    帖子

    9

    祝福币

    L2CN新兵

    Rank: 1

    积分
    9
    地板
    发表于 2018-10-5 02:06:16 | 只看该作者
    看不太懂,慢慢学习下吧
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2021-11-12 13:28
  • 签到天数: 152 天

    [LV.7]塔武提

    6

    主题

    298

    帖子

    464

    祝福币

    L2CN斗士

    Rank: 3Rank: 3

    积分
    464
    5#
    发表于 2019-11-12 00:23:39 | 只看该作者

    真个真的是用心了,基本都在注解,感谢有技术而且乐于分享的人
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2023-9-29 14:05
  • 签到天数: 145 天

    [LV.7]塔武提

    0

    主题

    170

    帖子

    638

    祝福币

    L2CN斗士

    Rank: 3Rank: 3

    积分
    638
    6#
    发表于 2019-11-12 09:12:22 | 只看该作者
    干货,感谢分享~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2021-4-9 19:17
  • 签到天数: 10 天

    [LV.3]巴洛克

    0

    主题

    39

    帖子

    29

    祝福币

    L2CN新兵

    Rank: 1

    积分
    29
    7#
    发表于 2020-5-14 14:03:56 | 只看该作者
    小猫怎么弄
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-6-30 16:49
  • 签到天数: 32 天

    [LV.5]欧塔比斯

    0

    主题

    44

    帖子

    29

    祝福币

    L2CN新兵

    Rank: 1

    积分
    29
    8#
    发表于 2020-6-11 15:16:53 | 只看该作者
    来学习不习谢谢
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2023-3-12 20:44
  • 签到天数: 138 天

    [LV.7]塔武提

    5

    主题

    204

    帖子

    93

    祝福币

    L2CN新兵

    Rank: 1

    积分
    93
    QQ
    9#
    发表于 2020-6-20 00:43:13 | 只看该作者
    想问一下楼主,我按你的方法编了,可是游戏中总是提示脚本错误,怎么解决?
    既然是爱好,我觉得还是别收钱的好!!!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2021-3-25 22:11
  • 签到天数: 98 天

    [LV.6]斯佩西亚

    1

    主题

    111

    帖子

    254

    祝福币

    L2CN战士

    Rank: 2

    积分
    254
    10#
    发表于 2020-6-20 09:03:33 | 只看该作者
    感谢有技术而且乐于分享的人
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    赞助我们:L2CN与您快乐分享

    支付宝-月付

    微信-月付

    论坛唯一Q群:

    398-120-010

    地址:www.l2cn.com

    邮箱:850111905@qq.com

    Powered by L2CN单机论坛 © 2018-2019 Inc.   版权所有   

    L2CN单机论坛  沪ICP备15020893号-1