微信扫一扫 分享朋友圈

已有 1197 人浏览分享

[服務器教學] 修正暗黑龍王前置任務

[複製鏈接]

初窺門道

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 發表於  2023-1-30 10:00:03 | 顯示全部樓層 | 閱讀模式
    本帖最後由 chenhui540 於 2023-1-31 09:22 編輯

    1.png
    2.png
    3.png
    4.png


    源碼部分

    查找替换

        private void activateItemReactors(final MapleMapItem drop, final MapleClient c) {
            final Item item = drop.getItem();

            mapobjectlocks.get(MapleMapObjectType.REACTOR).readLock().lock();
            try {
                for (final MapleMapObject o : mapobjects.get(MapleMapObjectType.REACTOR).values()) {
                    final MapleReactor react = (MapleReactor) o;
                    boolean logical;
                    int cmapid = c.getPlayer().getMapId();

                    if (react.getReactorType() == 100) {
                        if (react.getReactorId() == 2408002) {//設置反應堆ID是2408002的時候
                            logical = item.getItemId() == GameConstants.getCustomReactItem(react.getReactorId(), react.getReactItem().getLeft(), cmapid) && react.getReactItem().getRight() == item.getQuantity();
                        } else {
                            logical = item.getItemId() == GameConstants.getCustomReactItem(react.getReactorId(), react.getReactItem().getLeft()) && react.getReactItem().getRight() == item.getQuantity();
                        }
                        
                        if (logical) {
                            if (react.getArea().contains(drop.getTruePosition())) {
                                if (!react.isTimerActive()) {
                                    TimerManager.getInstance().schedule(new ActivateItemReactor(drop, react, c), 5000);
                                    react.setTimerActive(true);
                                    break;
                                }
                            }
                        }
                    }
                }
            } finally {
                mapobjectlocks.get(MapleMapObjectType.REACTOR).readLock().unlock();
            }
        }



    查找:

        public static int getCustomReactItem(final int rid, final int original) {
            if (rid == 2008006) { //orbis pq LOL
                return (Calendar.getInstance().get(Calendar.DAY_OF_WEEK) + 4001055);
                //4001056 = sunday. 4001062 = saturday
            } else {
                return original;
            }
        }

    下面添加:

        public static int getCustomReactItem(final int rid, final int original, final int cmapid) {
            return cmapid == 240050101 ? 4001088 : cmapid == 240050102 ? 4001089 : cmapid == 240050103 ? 4001090 : 4001091;
       }



    脚本部分

    /*
            名字:        闇黑龍王的里程碑
            地圖:        洞穴入口
            描述:        240050000
    */

    function init() {//服務端讀取
            em.setProperty("state", "0");
    }

    function setup(level, leaderid) {//開始事件,時間
            em.setProperty("state", "1");
            var eim = em.newInstance("HontalePQ");

            eim.setInstanceMap(240050100).resetFully();
            eim.setInstanceMap(240050101).resetFully();
            eim.setInstanceMap(240050102).resetFully();
            eim.setInstanceMap(240050103).resetFully();
            eim.setInstanceMap(240050104).resetFully();
            eim.setInstanceMap(240050105).resetFully();
            eim.setInstanceMap(240050200).resetFully();
            eim.setInstanceMap(240050300).resetFully();
            eim.setInstanceMap(240050310).resetFully();

            eim.startEventTimer(30 * 60 * 1000);

            return eim;
    }

    function playerEntry(eim, player) {//傳送進事件地圖
            player.changeMap(240050100, 0);
    }

    function monsterValue(eim, mobId) {//殺怪後觸發
            return 1;
    }

    function scheduledTimeout(eim) {//規定時間結束
            eim.disposeIfPlayerBelow(100, 240050000);
    }

    function changedMap(eim, player, mapid) {//進入地圖觸發
            if (mapid < 240050100 || mapid > 240050310) {
                    playerExit(eim, player);
    }
    }

    function playerDisconnected(eim, player) {//活動中角色斷開連接觸發
            playerExit(eim, player);
    }

    function leftParty(eim, player) {//離開小組觸發
            player.changeMap(240050000, 0);
    }

    function disbandParty(eim) {//小組退出時觸發
            eim.disposeIfPlayerBelow(100, 240050000);
    }

    function playerExit(eim, player) {//角色退出時觸發
            eim.unregisterPlayer(player);
            if (eim.disposeIfPlayerBelow(0, 0)) {
                    em.setProperty("state", "0");
    }
    }

    function allMonstersDead(eim) {}//怪物死亡觸發和刪除這個怪在活動中的資訊

    function playerDead(eim, player) {}//玩家死亡時觸發

    function playerRevive(eim, player) {}//玩家角色复時觸發

    function cancelSchedule() {}//清除事件


    /*
            名字:        闇黑龍王的里程碑
            地圖:        洞穴入口
            描述:        240050000
    */

    var item = [4001087, 4001088, 4001089, 4001090, 4001091, 4001092, 4001093];

    function start() {
            if (cm.getPlayer().getMap().getId() == 240050000)
                    cm.sendSimple("#e<組隊任務:黑暗龍王的審判>#n \r\n\r\n就在幾百年前,暗黑龍王被楓之谷中的四名勇士用神秘武器封印在一個不為人知的地方。而如今,幾百年後被封印在黑暗地下的惡魔黑龍漸漸蘇醒了,沉睡了多年的它憤怒著,咆哮著。\r\n\r\nNumber of players: 2~6 \r\nLevel range: 100+ \r\nTime limit: 30minutes\r\n#L0##b進入任務地圖#l");
            else
                    cm.sendSimple("請在附近區域搜尋" + (cm.getPlayer().getMap().getId() == 240050100 ? "#v4001087:#,#v4001088:#,#v4001089:#,#v4001090:#,#v4001091:#5把鑰匙" : "集齊6把#v4001093:##z4001093#鑰匙") + "。\r\n#L1##b已經集齊所有的鑰匙#l");
    }

    function action(mode, type, selection) {
            switch (selection) {
            case 0:
                    if (cm.getPlayer().getParty() == null) {
                            cm.sendOk("很抱歉,裡面的怪物很危險,我不能讓你單獨去冒險。");
                            cm.dispose();
                            return;
                            }
                    if (!cm.isLeader()) {
                            cm.sendOk("很抱歉,進入此區域,需要由組長帶隊。");
                            cm.dispose();
                            return;
                            }
                            var chat = "很抱歉,因為你的小組規模不在入場要求範圍大小內,一些組員沒有資格嘗試此任務,或者他們不在此地圖中。\r\n\r\nNumber of players: 2~6 \r\nLevel range: 70+ \r\n\r\n";
                            var chenhui = 0;
                            var party = cm.getParty().getMembers();
                            for (var i = 0; i < party.size(); i++)
                    if (party.get(i).getLevel() < 70 || party.get(i).getMapid() != 240050000 || party.size() < 2) {
                            chat += "#bName: " + party.get(i).getName() + " / (Level: " + party.get(i).getLevel() + ") / Map: #m" + party.get(i).getMapid() + "#\r\n";
                            chenhui++;
                            }
                    if (chenhui != 0) {
                            cm.sendOk(chat);
                            cm.dispose();
                            return;
                            }
                            var em = cm.getEventManager("HontalePQ");
                            var prop = em.getProperty("state");
                    if (prop.equals("0") || prop == null) {
                            em.startInstance(cm.getPlayer().getParty(), cm.getPlayer().getMap(), 200);
                            cm.dispose();
                            return;
                            }
                            cm.sendOk("黑暗龍王的審判任務正在執行中,請嘗試其他頻道。");
                            break;
            case 1:
                    if ((cm.haveItem(4001087) && cm.haveItem(4001088) && cm.haveItem(4001089) && cm.haveItem(4001090) && cm.haveItem(4001091)) || cm.haveItem(4001093, 6)) {
                            for (var i = 0; i < item.length; i++)
                            cm.removeAll(item);
                            cm.warpMap(cm.getPlayer().getMap().getId() == 240050100 ? 240050200 : 240050400, 0);
                            cm.dispose();
                            return;
                            }
                            cm.sendOk("請確定一下,你所收集的鑰匙是否達到要求。");
                            }
                            cm.dispose();
    }


    /*
            名字:        樹根水晶
            地圖:        闇黑龍王洞穴入口
            描述:        240050400
    */

    function start() {
            cm.sendYesNo("確定要離開#b#m" + cm.getPlayer().getMap().getId() + "##k嗎?");
    }

    function action(mode, type, selection) {
            if (mode == 1)
                    cm.warp(cm.getPlayer().getMap().getId() > 240050400 ? 240050600 : 240050000, 0);
                    cm.dispose();
    }



    /*
            名字:        生命之穴
            地圖:        迷宮室
            描述:        240050100
    */

    function enter(pi) {
            if (pi.getMap().getCharacters().size() == 1) {
                    pi.playerMessage(6, "[Portal]該區域需要保留一名玩家,守候傳入的鑰匙。");
                    return false;
                    }
            if (pi.haveItem(4001087)) {
                    pi.playerMessage(6, "[Portal]由於攜帶第一個迷宮室的水晶鑰匙,無法通往下一個區域。");
                    return false;
                    }
                    pi.warp(240050101, 0);//第一個迷宮室
                    return true;
    }

    /*
            名字:        生命之穴
            地圖:        第一個迷宮室
            描述:        240050101
    */

    function enter(pi) {
            eim = pi.getPlayer().getEventInstance();
                    var stage = pi.getPlayer().getMap().getId() - 240050100;
            avail = eim.getProperty(stage + "stageclear");//反應堆2408002 給予條件
            if (pi.haveItem(4001092)) {
                    eim.setProperty("5stageclear", 1);
                    }
            if (avail == null) {
                    pi.playerMessage(6, "[Portal]通往下一區域的入口,尚未開啟。");
                    return false;
                    }
                    pi.getPlayer().changeMap(pi.getPlayer().getMap().getId() == 240050105 ? 240050100 : pi.getPlayer().getMap().getId() +1, 0);
                    return true;
    }


    /*
            名字:        生命之穴
            地圖:        抉擇洞穴
            描述:        240050200
    */

    function enter(pi) {
            if (!pi.isLeader()) {
                    pi.playerMessage(6, "[Portal]進入此區域,需要由組長帶隊。");
                    return false;
                    }
            if (pi.getMap().getReactorByName("light").getState() == 1) {
                    pi.warpParty(240050300, 0);//光明洞穴
                    return true;
                    }
            if (pi.getMap().getReactorByName("light").getState() == 3) {
                    pi.warpParty(240050310, 0);//暗黑洞穴
                    return true;
                    }
                    pi.playerMessage(6, "[Portal]進入此區域前,請擊中燈泡來決定小組的命運。");
                    return false;
    }


    /*
            名字:        生命之穴
            地圖:        洞穴小徑
            描述:        240050600
    */

    var item = [4001087, 4001088, 4001089, 4001090, 4001091, 4001092, 4001093];

    function enter(pi) {
            for (var i = 0; i < item.length; i++)
            pi.removeAll(item);
            pi.warp(240050000, 0);//洞穴入口
            return true;
    }


    /*
            名字:        生命之穴
            地圖:        第一個迷宮室
            描述:        240050101
    */

    importPackage(Packages.client.inventory);
    importPackage(Packages.tools.packet);

    function act() {
            var eim = rm.getPlayer().getEventInstance();
            var womanfred = eim.getMapFactory().getMap(240050100);
            var stage = rm.getPlayer().getMap().getId() - 240050100;

            rm.mapMessage(6, "鑰匙已被傳送到某處。");

            var Key = 4001087 + stage;
            eim.setProperty(stage + "stageclear", 1);

            var tehWomanfred = new Item(Key, 0, 1);
            var theWomanfred = womanfred.getReactorByName("keyDrop1");
            var dropper = eim.getPlayers().get(0);
            womanfred.spawnItemDrop(theWomanfred, dropper, tehWomanfred, theWomanfred.getPosition(), true, true);
            rm.getMap(240050100).broadcastMessage(CWvsContext.serverNotice(6, "一道亮光之後,一把鑰匙突然出現在該區域的某個地方。"));
    }



    注意:不知道是系统语言不支持还是什么问题    脚本里含有 [i] 的符號 的发到论坛上 会消失掉!



    修正暗黑龍王鑰匙傳送.rar (907 Bytes, 下載次數: 159)

    站長

    Rank: 12Rank: 12Rank: 12

    1752

    威望

    2922

    金錢

    106

    A幣
    主題
    1315
    帖子
    2439
    精華
    3
    綜合社群主題發文量
    262
    電玩社群主題發文量
    1
    娛樂社群主題發文量
    4
    技術社群主題發文量
    26
    閱讀權限
    200
    註冊時間
    2013-1-28

    我是傳奇贊助感謝勳章精華作者勳章

  • TA的每日心情

    2023-10-27 16:33
  • 簽到天數: 381 天

    連續簽到: 1 天

    [LV.9]以壇為家II

    TWAICL 發表於 2023-1-30 12:33:13 | 顯示全部樓層
    居然有龍王前置的分享!這一套前置我們近期有修復完,貼心提醒,反應物的編號有沒有正確,也是這些腳本能不能運作的關鍵。但也可能版主寫的腳本已經沒問題了

    集團新軍

    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]初來乍到

    幼幼 發表於 2023-1-31 08:10:06 | 顯示全部樓層
    感謝大大佛心的分享.應該花了些許時間完成他

    集團新軍

    Rank: 1

    169

    威望

    387

    金錢

    3

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

    2021-8-11 17:19
  • 簽到天數: 1 天

    連續簽到: 1 天

    [LV.1]初來乍到

    asz910858 發表於 2023-2-1 06:41:40 | 顯示全部樓層
    竟然是龍王的... 感謝大佬分享
    您需要登錄後才可以回帖 登錄 | 註冊會員

    本版積分規則

    64

    發文

    710

    金錢

    338

    A幣

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

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

    小黑屋|AICL社群娛樂集團

    GMT+8, 2024-4-18 17:59 , 網路刷新 0.123837 秒 .

    歡迎來到 AICL網路社群

    版權AICL社群所有 2011-2021.

    Total:123 Today:213 Online:322