chenhui540

修正暗黑龍王前置任務

發表於 2023-1-30 10:00:03
chenhui540 發表於 2023-1-30 10:00:03 | 顯示全部樓層 |閱讀模式
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, 下載次數: 1623)


黑暗龍王的審判脚本.rar (4.75 KB, 下載次數: 1651)





瀏覽 4039 回復 4

您需要登錄後才可以回帖 登錄 | 註冊會員

:竟然是龍王的... 感謝大佬分享 2023-02-01 06:41回復
:感謝大大佛心的分享.應該花了些許時間完成他 2023-01-31 08:10回復
:支持。。。 2023-01-30 16:23回復
返回頂部