微信扫一扫 分享朋友圈

已有 1607 人浏览分享

[服務器教學] 修正楓之谷鍛造任務

[複製鏈接]

初窺門道

Rank: 2

219

威望

710

金錢

338

A幣
主題
32
帖子
64
精華
1
綜合社群主題發文量
0
電玩社群主題發文量
0
娛樂社群主題發文量
0
技術社群主題發文量
32
閱讀權限
20
註冊時間
2021-11-15
  • TA的每日心情
    奮鬥
    2024-1-28 13:17
  • 簽到天數: 1 天

    連續簽到: 1 天

    [LV.1]初來乍到

    chenhui540 發表於  2022-10-3 00:02:56 | 顯示全部樓層 | 閱讀模式
    本帖最後由 chenhui540 於 2022-10-24 09:44 編輯

    楓之谷大爆炸之前的鍛造任務,很多端通過修改wz檔來達到完成任務的效果,只是因為這個任務的流程條件,比較繁瑣,現在我們只需要簡單的修改源碼與腳本,就可以完成這個任務的流程。

    任務 6029 史丹的新技術  

    起始任務條件

        <imgdir name="6029">
            <imgdir name="0">
                <int name="npc" value="2110004" /> 接任務的NPC
                <int name="lvmin" value="45" /> 角色等級


    完成任務條件
            <imgdir name="1">
                <int name="npc" value="2110004" />完成任務的NPC
                <imgdir name="infoex">
                    <imgdir name="0">
                        <string name="value" value="111" />每完成一個附屬任務給予一個1的條件。當完成附屬的3個任務時,就達成完成任務條件。
                    </imgdir>
                </imgdir>
                <imgdir name="quest">
                    <imgdir name="0">
                        <int name="id" value="6031" />任務6031達到完成狀態
                        <int name="state" value="2" />
                    </imgdir>
                    <imgdir name="1">
                        <int name="id" value="6032" />任務6032達到完成狀態
                        <int name="state" value="2" />
                    </imgdir>
                    <imgdir name="2">
                        <int name="id" value="6030" />任務6030達到完成狀態
                        <int name="state" value="2" />




    起始任務的條件
        <imgdir name="6030">
            <imgdir name="0">
                <int name="npc" value="2110004" />
                <int name="lvmin" value="45" />
                <int name="interval" value="0" />
                <int name="infoNumber" value="6029" />任務代碼
                <imgdir name="infoex">
                    <imgdir name="0">
                        <string name="value" value="000" /> 注意000,這個任務條件只有在修改源碼的情況下,在接取6029任務的時候才能給予的條件。
                    </imgdir>                                  第一個0,代表任務6030未完成狀態,第二個0,代表6031未完成狀態,第三個0,代表6032未完成狀態
                    <imgdir name="1">
                        <string name="value" value="010" />   第2個0現在變成了1,說明6031任務是完成狀態。
                    </imgdir>
                    <imgdir name="2">
                        <string name="value" value="011" />   第2個與第3個0,都變成了1,說明6031,6032的任務都是完成狀態。
                    </imgdir>
                    <imgdir name="3">
                        <string name="value" value="001" />   第2個0現在變成了1,說明6032任務是完成狀態。
                    </imgdir>


    針對這樣的複雜的情況,可以用服務端的通用語法來實現這樣的效果!

        public void start(MapleCharacter c, int npc) {
         final int[] ss = {6029, 6030, 6031, 6032};   //添加特殊任務的ID號
            for (int i : ss) {
                if (this.id == i){

                    forceStart(c, npc, null);
                if (this.id == 6029) c.getQuestNAdd(MapleQuest.getInstance(6029)).setCustomData("000");//當任務是 6029 的時候 給與 000 的條件
                c.getClient().getPlayer().updateQuest(c.getClient().getPlayer().getQuest(MapleQuest.getInstance(6029)), true);//刷新6029任務
                    return;
                }
            }


    腳本部分 已更新语法

    針對000條件

                    if (qm.getQuestRecord(6029).getCustomData()=="000")
                            qm.getQuestRecord(6029).setCustomData("001");//給予條件
                    if (qm.getQuestRecord(6029).getCustomData()=="100")
                            qm.getQuestRecord(6029).setCustomData("101");//給予條件
                    if (qm.getQuestRecord(6029).getCustomData()=="110")
                            qm.getQuestRecord(6029).setCustomData("111");//給予條件
                    if (qm.getQuestRecord(6029).getCustomData()=="010")
                            qm.getQuestRecord(6029).setCustomData("011");//給予條件
                            qm.getPlayer().updateQuest(qm.getQuestRecord(6029), true);//刷新任務



    QQ图片20221003000045.png


    修復鍛造任務具體說明與腳本(已更新语法).rar (5.71 KB, 下載次數: 292)

    點評

    很多任務改成用腳本控制真的會快很多,這個寫法大家可以參考,能用在很多任務上。  發表於 2022-10-3 19:42

    集團新軍

    Rank: 1

    111

    威望

    267

    金錢

    0

    A幣
    主題
    0
    帖子
    35
    精華
    0
    綜合社群主題發文量
    0
    電玩社群主題發文量
    0
    娛樂社群主題發文量
    0
    技術社群主題發文量
    0
    閱讀權限
    10
    註冊時間
    2021-8-6
  • TA的每日心情

    2021-8-18 09:47
  • 簽到天數: 2 天

    連續簽到: 1 天

    [LV.1]初來乍到

    幼幼 發表於 2022-10-12 09:57:03 | 顯示全部樓層
    嘗試了修復他 在接受任務回報的後會6029一直刷新任務燈泡導致不能完成    腳本部分這部分會出錯 資料庫好像也沒刷新
    擷取.PNG

    點評

    你可能要確認錯誤的行數是什麼出錯,然後確認函數是否跟自己端的匹配。  發表於 2022-10-12 11:28

    集團新軍

    Rank: 1

    111

    威望

    267

    金錢

    0

    A幣
    主題
    0
    帖子
    35
    精華
    0
    綜合社群主題發文量
    0
    電玩社群主題發文量
    0
    娛樂社群主題發文量
    0
    技術社群主題發文量
    0
    閱讀權限
    10
    註冊時間
    2021-8-6
  • TA的每日心情

    2021-8-18 09:47
  • 簽到天數: 2 天

    連續簽到: 1 天

    [LV.1]初來乍到

    幼幼 發表於 2022-10-12 13:42:33 | 顯示全部樓層
    幼幼 發表於 2022-10-12 09:57
    嘗試了修復他 在接受任務回報的後會6029一直刷新任務燈泡導致不能完成    腳本部分這部分會出錯 資料庫好像 ...

    importPackage(Packages.server.quest); 可能這個有問題 這行看不是很懂  會導致下面判斷條件錯誤

    點評

    這個是你的源碼路徑  發表於 2022-10-12 19:40

    初窺門道

    Rank: 2

    219

    威望

    710

    金錢

    338

    A幣
    主題
    32
    帖子
    64
    精華
    1
    綜合社群主題發文量
    0
    電玩社群主題發文量
    0
    娛樂社群主題發文量
    0
    技術社群主題發文量
    32
    閱讀權限
    20
    註冊時間
    2021-11-15
  • TA的每日心情
    奮鬥
    2024-1-28 13:17
  • 簽到天數: 1 天

    連續簽到: 1 天

    [LV.1]初來乍到

     樓主| chenhui540 發表於 2022-10-13 21:26:43 | 顯示全部樓層
    本帖最後由 chenhui540 於 2022-10-13 21:41 編輯

    我用這個方法 修復了GMS83(函数语法不一样) 還有 GMS90 版本的鍛造任務 不知道你用的端    語法是不是有區別 或者是所需的函數在源碼的同一個資料夾裡
    importPackage(Packages.server.quest);  這個是載入函數的支援包 比如說 導用的函數在 src\server\quest資料夾的java檔裡   
    如果你添加了源碼的內容 沒有報錯的話 基本上都是通用的

    我看了你這個情況,應該是腳本错误导致沒有給與條件          如果任務完成時 給與了條件,那麼就不會在彈出任務燈泡的情況
    看看有沒有給予條件最簡單的方法,就是完成其中一個附屬任務後,下線,打開資料庫queststatus  看看 任務 6029 的那行內容 000 有沒有發生變化

    能给予条件的语法有很多通用的
    给予条件:cm.setQuestRecord(6029).setCustomData("000");
    给予条件:cm.setQuestRecord(cm.getPlayer(), 6029, "000");
    给予条件:cm.getPlayer().getQuestNAdd(cm.getQuest(6029)).setCustomData("000");

    這樣給予條件有個缺點,就是必須要刷新任務,或者是重新上線才會讀取。
    所以在不改變源碼的情況下,我都是添加了一個刷新任務的函數


    集團新軍

    Rank: 1

    111

    威望

    267

    金錢

    0

    A幣
    主題
    0
    帖子
    35
    精華
    0
    綜合社群主題發文量
    0
    電玩社群主題發文量
    0
    娛樂社群主題發文量
    0
    技術社群主題發文量
    0
    閱讀權限
    10
    註冊時間
    2021-8-6
  • TA的每日心情

    2021-8-18 09:47
  • 簽到天數: 2 天

    連續簽到: 1 天

    [LV.1]初來乍到

    幼幼 發表於 2022-10-16 08:56:54 | 顯示全部樓層
    本帖最後由 幼幼 於 2022-10-16 08:58 編輯
    chenhui540 發表於 2022-10-13 21:26
    我用這個方法 修復了GMS83(函数语法不一样) 還有 GMS90 版本的鍛造任務 不知道你用的端    語法是不是有 ...

    用的是板上下載的C8MS端口 importPackage(Packages.server.quest);
    這段好像不支援 上下線他確實有刷新判斷   
    qm.getPlayer().updateQuest(qm.getPlayer().getQuest(MapleQuest.getInstance(6029)), true);//刷新任務  
    這段的MapleQuest報錯
    擷取.PNG

    初窺門道

    Rank: 2

    219

    威望

    710

    金錢

    338

    A幣
    主題
    32
    帖子
    64
    精華
    1
    綜合社群主題發文量
    0
    電玩社群主題發文量
    0
    娛樂社群主題發文量
    0
    技術社群主題發文量
    32
    閱讀權限
    20
    註冊時間
    2021-11-15
  • TA的每日心情
    奮鬥
    2024-1-28 13:17
  • 簽到天數: 1 天

    連續簽到: 1 天

    [LV.1]初來乍到

     樓主| chenhui540 發表於 2022-10-16 19:59:59 | 顯示全部樓層
    本帖最後由 chenhui540 於 2022-10-16 20:30 編輯

    不修改源码的情况下  
    你这样写看看有刷新效果吗

    cm.getPlayer().updateQuest(cm.getPlayer().getQuest(6030), true);
    或者
    cm.getPlayer().updateQuest(cm.getPlayer().getQuest(cm.getQuest(6030)), true);




    集團新軍

    Rank: 1

    111

    威望

    267

    金錢

    0

    A幣
    主題
    0
    帖子
    35
    精華
    0
    綜合社群主題發文量
    0
    電玩社群主題發文量
    0
    娛樂社群主題發文量
    0
    技術社群主題發文量
    0
    閱讀權限
    10
    註冊時間
    2021-8-6
  • TA的每日心情

    2021-8-18 09:47
  • 簽到天數: 2 天

    連續簽到: 1 天

    [LV.1]初來乍到

    幼幼 發表於 2022-10-17 14:51:58 | 顯示全部樓層
    chenhui540 發表於 2022-10-16 19:59
    不修改源码的情况下  
    你这样写看看有刷新效果吗

    數據包異常 包頭:NPC_TALK_MORE(0x35)  變這樣

    初窺門道

    Rank: 2

    219

    威望

    710

    金錢

    338

    A幣
    主題
    32
    帖子
    64
    精華
    1
    綜合社群主題發文量
    0
    電玩社群主題發文量
    0
    娛樂社群主題發文量
    0
    技術社群主題發文量
    32
    閱讀權限
    20
    註冊時間
    2021-11-15
  • TA的每日心情
    奮鬥
    2024-1-28 13:17
  • 簽到天數: 1 天

    連續簽到: 1 天

    [LV.1]初來乍到

     樓主| chenhui540 發表於 2022-10-17 23:14:48 | 顯示全部樓層
    本帖最後由 chenhui540 於 2022-10-17 23:18 編輯

    cm 是用于NPC脚本

    任务脚本要改成  qm

    qm.getPlayer().updateQuest(qm.getPlayer().getQuest(6030), true);
    或者
    qm.getPlayer().updateQuest(qm.getPlayer().getQuest(qm.getQuest(6030)), true);

    集團新軍

    Rank: 1

    111

    威望

    267

    金錢

    0

    A幣
    主題
    0
    帖子
    35
    精華
    0
    綜合社群主題發文量
    0
    電玩社群主題發文量
    0
    娛樂社群主題發文量
    0
    技術社群主題發文量
    0
    閱讀權限
    10
    註冊時間
    2021-8-6
  • TA的每日心情

    2021-8-18 09:47
  • 簽到天數: 2 天

    連續簽到: 1 天

    [LV.1]初來乍到

    幼幼 發表於 2022-10-18 17:09:30 | 顯示全部樓層
    chenhui540 發表於 2022-10-17 23:14
    cm 是用于NPC脚本

    任务脚本要改成  qm

    這個我知道 如果用CM的會報錯這是用NPC的 QM是任務用 就是打了qm.getPlayer().updateQuest(qm.getPlayer().getQuest(6030), true); 這段報出封包錯誤

    初窺門道

    Rank: 2

    219

    威望

    710

    金錢

    338

    A幣
    主題
    32
    帖子
    64
    精華
    1
    綜合社群主題發文量
    0
    電玩社群主題發文量
    0
    娛樂社群主題發文量
    0
    技術社群主題發文量
    32
    閱讀權限
    20
    註冊時間
    2021-11-15
  • TA的每日心情
    奮鬥
    2024-1-28 13:17
  • 簽到天數: 1 天

    連續簽到: 1 天

    [LV.1]初來乍到

     樓主| chenhui540 發表於 2022-10-18 19:20:03 | 顯示全部樓層
    本帖最後由 chenhui540 於 2022-10-18 23:04 編輯

    你看看 报什么样的错误,我有在站内 下这个源码   看过 确实有这个函数  你可以自己搜索一下


        public static final void UpdateQuest(final LittleEndianAccessor slea, final MapleClient c) {
            int questid = slea.readUShort();
            final MapleQuest quest = MapleQuest.getInstance(questid);
            if (quest != null) {
                c.getPlayer().updateQuest(c.getPlayer().getQuest(quest), true);
            }
        }

    这两段刷新的语法都报错?
    qm.getPlayer().updateQuest(qm.getPlayer().getQuest(6030), true);   
    或者
    qm.getPlayer().updateQuest(qm.getPlayer().getQuest(qm.getQuest(6030)), true);



    实在不行的话         下面的内容是我最早使用的任务语法 是其它 大大 教的  需要修改源码!
    你搜索
        public final void updateQuest(final MapleQuestStatus quest, final boolean update) {
            quests.put(quest.getQuest(), quest);
            if (!(quest.isCustom())) {
                client.sendPacket(MaplePacketCreator.updateQuest(quest));
                if (quest.getStatus() == 1 && !update) {
                    client.sendPacket(MaplePacketCreator.updateQuestInfo(this, quest.getQuest().getId(), quest.getNpc(), (byte) 8));
                }
            }
        }


    下面添加

        public void updateQuestCustomData(int questId, String data) {
            MapleQuest quest = MapleQuest.getInstance(questId);
            MapleQuestStatus questStatus = getQuestNoAdd(quest);
            if (questStatus != null) {
                questStatus.setCustomData(data);
                updateQuest(questStatus, true);
            }
        }



    脚本语法  自带刷新功能
    qm.getPlayer().updateQuestCustomData(6029, "010");



    脚本改成
                    if (qm.getQuestRecord(6029).getCustomData()=="000")
                   qm.getPlayer().updateQuestCustomData(6029, "100");

                    if (qm.getQuestRecord(6029).getCustomData()=="010")
                   qm.getPlayer().updateQuestCustomData(6029, "110");

                    if (qm.getQuestRecord(6029).getCustomData()=="011")
                   qm.getPlayer().updateQuestCustomData(6029, "111");

                    if (qm.getQuestRecord(6029).getCustomData()=="001")
                   qm.getPlayer().updateQuestCustomData(6029, "101");









    初窺門道

    Rank: 2

    219

    威望

    710

    金錢

    338

    A幣
    主題
    32
    帖子
    64
    精華
    1
    綜合社群主題發文量
    0
    電玩社群主題發文量
    0
    娛樂社群主題發文量
    0
    技術社群主題發文量
    32
    閱讀權限
    20
    註冊時間
    2021-11-15
  • TA的每日心情
    奮鬥
    2024-1-28 13:17
  • 簽到天數: 1 天

    連續簽到: 1 天

    [LV.1]初來乍到

     樓主| chenhui540 發表於 2022-10-23 18:19:48 | 顯示全部樓層
    本帖最後由 chenhui540 於 2022-10-23 18:21 編輯

    最近有找到一个函数
        public final MapleQuestStatus getQuestRecord(final int id) {
            return getClient().getPlayer().getQuestNAdd(MapleQuest.getInstance(id));
        }

    之前的函数需要 导入  MapleQuest.getInstance 的语法支持

    现在可以直接使用这个函数刷新任务
    cm.getPlayer().updateQuest(cm.getQuestRecord(6029), true);
    您需要登錄後才可以回帖 登錄 | 註冊會員

    本版積分規則

    64

    發文

    710

    金錢

    338

    A幣

    ----------榮譽勳章----------

    熱門推薦
    圖文推薦
    • 聯繫我們

    小黑屋|AICL社群娛樂集團

    GMT+8, 2024-4-26 16:07 , 網路刷新 0.117450 秒 .

    歡迎來到 AICL網路社群

    版權AICL社群所有 2011-2021.

    Total:123 Today:213 Online:322