chenhui540

第一次同行克魯特腳本解析

發表於 2023-1-27 21:22:41
chenhui540 發表於 2023-1-27 21:22:41 | 顯示全部樓層 |閱讀模式
0.png
1.png
2.png
3.png


/*
        名字:        克魯特
        地圖:        第一次同行<1號門&g
        描述:        910340100
*/

var stage1Questions = Array(
        "請聽題:戰士一轉需要的最低等級是多少,請搜集答案數量的通行證給我。",
        "請聽題:戰士一轉需要的最低力量是多少,請搜集答案數量的通行證給我。",
        "請聽題:法師一轉需要的最低智力是多少,請搜集答案數量的通行證給我。",
        "請聽題:弓箭手一轉需要的最低敏捷是多少,請搜集答案數量的通行證給我。",
        "請聽題:盜賊一轉需要的最低敏捷是多少,請搜集答案數量的通行證給我。",
        "請聽題:二轉需要的等級是多少,請搜集答案數量的通行證給我。",
        "請聽題:法師一轉需要的最低等級是多少,請搜集答案數量的通行證給我。");

var stage1Answers = Array(10, 35, 20, 25, 25, 30, 8);

function start() {
        var eim = cm.getPlayer().getEventInstance();
        switch(cm.getPlayer().getMap().getId()) {
        case 910340100:
                if (eim.getProperty("stage1") == null) {
                if (cm.isLeader()) {
                        var numpasses = eim.getPlayerCount() - 1;
                        var stage2 = cm.getParty().getMembers().size() -1 ;//需要繳納的通行證數量
                if (cm.haveItem(4001008, numpasses)) {
                        cm.sendNext("你收集了" + numpasses + "通行證,恭喜你們通過了這一關。通往下一區域的傳送門已經打開,到達那裡有時間限制,所以請快點。");
                        eim.setProperty("stage1", 1);
                        cm.showEffect(true, "quest/party/clear");
                        cm.playSound(true, "Party1/Clear");
                        cm.getMap().changeEnvironment("gate", 2);//開啟下傳送門特效
                        cm.removeAll(4001008);
                        cm.dispose();
                        return;
                        }
                        cm.sendNext("歡迎來到#m" + cm.getPlayer().getMap().getId() + "#,在這個階段,組長需要從組員那裡集齊#b" + numpasses + "#k張通行證交給我,才能進入下一區域,請讓每個組員都分別完成我交代的任務,才能獲得通行證。");
                        cm.dispose();
                        return;
                        }
                if (!cm.isLeader()) {
                        var data = eim.getProperty(cm.getName());//加入隊員名稱判斷

                if (data == 0) {
                        cm.sendNext("謝謝你給我帶來的通行證,請把這個#b#v4001008:##t4001008##k交給你的組長。");
                        cm.dispose();
                        return;
                        }
                if (data == null) {
                        data = Math.floor(Math.random() * stage1Questions.length) + 1;
                        eim.setProperty(cm.getName(), data);//給與隊員問題判斷
                        var question = stage1Questions[data - 1];
                        cm.sendNext("歡迎來到#m" + cm.getPlayer().getMap().getId() + "#,在這個階段,你必須狩獵附近怪物,獲取我所提問的正確答案相應數量的通行證交給我。\r\n\r\n" + question);
                        cm.dispose();
                        return;
                        }
                        var answer = stage1Answers[data - 1];

                if (cm.itemQuantity(4001007) == answer) {
                        cm.sendNext("答案是對的,囙此,你剛剛收到了一張#b#v4001008:##t4001008##k,請把這個通行證交給你的組長。");
                        cm.gainItem(4001007, -answer);
                        cm.gainItem(4001008, 1);
                        eim.setProperty(cm.getName(), 0);//給與隊員答題判斷
                        cm.dispose();
                        return;
                        }
                        var question = stage1Questions[eim.getProperty(cm.getName()) - 1];//問題識別判斷
                        cm.sendNext("很抱歉,你所帶來的通行證數量與問題正確答案不一致,目前持有:#b#c4001007##k張通行證\r\n" + question);
                        cm.dispose();
                        return;
                        }
                        }
                        cm.sendOk("通往下一區域的入口,已經開啟。");
                        cm.dispose();
                        break;
        case 910340200:
                if (eim.getProperty("stage2") == null) {
                if (!cm.isLeader()) {
                        cm.sendOk("歡迎來到#m" + cm.getPlayer().getMap().getId() + "#,請根據組長的指示進行這一關挑戰。");
                        cm.dispose();
                        return;
                        }
                if (eim.getProperty("stage2a") == null) {
                        cm.sendOk("歡迎來到#m" + cm.getPlayer().getMap().getId() + "#,你會發現一些#b繩索#k,其中有兩根連接著通往下一關的傳送門,你們需要做的是讓兩名組員#b爬#k上正確的繩子。當隊員爬好了位置,請隊長與我對話。\r\n\r\n注意,如果爬的太低,將得不到正確答案,如果你們組合正確了,傳送門就會打開。");
                        eim.setProperty("stage2a", 1);
                        cm.dispose();
                        return;
                        }
                if (eim.getProperty("stage2b") == null) {
                        eim.setProperty("stage2b", (Math.random() < 0.3) ? "0101" : (Math.random() < 0.5) ? "0011" : "1001");//給予隨機答案  可以改進寫法 設置更多
                        }
                        var chenhui = 0;//設置基礎數值0
                        for (var i = 0; i < 4; i++)//繩索的數量
                        if (cm.getMap().getNumPlayersItemsInArea(i) > 0) {//判斷繩索上是否有玩家
                        chenhui++;//以0為基礎 遞增繩索上玩家數量
                        }
                if (chenhui != 2) {//繩索玩家數量不是2名的時候提示
                        cm.sendOk("看起來你還沒有找到正確的方法,需要讓兩名組員#b爬#k到繩子上面,以形成不同的組合。");
                        cm.dispose();
                        return;
                        }
                        var x = "";//空值,如果不設置 下麵 x+= 會報錯
                        for (var i = 0; i < 4; i++)//繩索的數量
                        x += cm.getMap().getNumPlayersItemsInArea(i);//讀取4跟繩索上玩家的組合 數字顯示為 1100, 1010,0011,等。
                        y = x;//固定x的數值
                if (y == eim.getProperty("stage2b")) {//當讀取繩索上玩家的組合與之前隨機載入的答案一致的時候
                        eim.setProperty("stage2", 1);
                        cm.showEffect(true, "quest/party/clear");//動畫特效
                        cm.playSound(true, "Party1/Clear");//聲音特效
                        cm.getMap().changeEnvironment("gate", 2);
                        cm.sendOk("組合正確,通往下一區域的入口,已經開啟。");
                        cm.dispose();
                        return;
                        }
                        cm.showEffect(true, "quest/party/wrong_kor");//動畫特效
                        cm.playSound(true, "Party1/Failed");//聲音特效
                        cm.sendNext("組合是錯誤的,看來你還沒有找到正確的2個平臺,請再繼續調整一下位置。");
                        cm.dispose();
                        return;
                        }
                        cm.sendOk("通往下一區域的入口,已經開啟。");
                        cm.dispose();
                        break;
        case 910340300:
                if (eim.getProperty("stage3") == null) {
                if (!cm.isLeader()) {
                        cm.sendOk("歡迎來到#m" + cm.getPlayer().getMap().getId() + "#,請根據組長的指示進行這一關挑戰。");
                        cm.dispose();
                        return;
                        }
                if (eim.getProperty("stage3a") == null) {
                        cm.sendOk("歡迎來到#m" + cm.getPlayer().getMap().getId() + "#,你會發現一些#b平臺#k,其中有兩個連接著通往下一關的傳送門,你們需要做的是讓兩名組員#b站#k到正確的平臺上。當隊員站好了位置,請隊長與我對話。\r\n\r\n注意,如果站的太接近邊緣,將得不到正確答案,如果你們組合正確了,傳送門就會打開。");
                        eim.setProperty("stage3a", 1);
                        cm.dispose();
                        return;
                        }
                if (eim.getProperty("stage3b") == null) {
                        eim.setProperty("stage3b", (Math.random() < 0.3) ? "00101" : (Math.random() < 0.5) ? "00011" : "10001");//給予隨機答案
                        }
                        var chenhui = 0;
                        for (var i = 0; i < 5; i++)//平臺的數量
                        if (cm.getMap().getNumPlayersItemsInArea(i) > 0) {
                        chenhui++;
                        }
                if (chenhui != 2) {
                        cm.sendOk("看起來你還沒有找到正確的方法,需要讓兩名組員#b站#k到平臺上面,以形成不同的組合。");
                        cm.dispose();
                        return;
                        }
                        var x = "";
                        for (var i = 0; i < 5; i++)//平臺的數量
                        x += cm.getMap().getNumPlayersItemsInArea(i);
                        y = x;
                if (y == eim.getProperty("stage3b")) {
                        eim.setProperty("stage3", 1);
                        cm.showEffect(true, "quest/party/clear");
                        cm.playSound(true, "Party1/Clear");
                        cm.getMap().changeEnvironment("gate", 2);
                        cm.sendOk("組合正確,通往下一區域的入口,已經開啟。");
                        cm.dispose();
                        return;
                        }
                        cm.showEffect(true, "quest/party/wrong_kor");
                        cm.playSound(true, "Party1/Failed");
                        cm.sendNext("組合是錯誤的,看來你還沒有找到正確的2個平臺,請再繼續調整一下位置。");
                        cm.dispose();
                        return;
                        }
                        cm.sendOk("通往下一區域的入口,已經開啟。");
                        cm.dispose();
                        break;
        case 910340400:
                if (eim.getProperty("stage4") == null) {
                if (cm.isLeader()) {
                if (cm.haveItem(4001008, 19)) {
                        cm.sendOk("大家表現得非常好,通往下一區域的入口,已經開啟。");
                        cm.gainItem(4001008, -19);
                        eim.setProperty("stage4", 1);
                        cm.showEffect(true, "quest/party/clear");
                        cm.playSound(true, "Party1/Clear");
                        cm.getMap().changeEnvironment("gate", 2);
                        cm.dispose();
                        return;
                        }
                        cm.sendOk("你好,歡迎進入#m" + cm.getPlayer().getMap().getId() + "#,繞著地圖走一圈,你就能找到一些怪物,擊敗所有怪物,收集好全部的通行證後,再轉交給我。");
                        cm.dispose();
                        return;
                        }
                        cm.sendOk("你好,歡迎進入#m" + cm.getPlayer().getMap().getId() + "#,繞著地圖走一圈,你就能找到一些怪物,請擊敗所有怪物,收集好全部的通行證後,讓組長轉交給我。");
                        cm.dispose();
                        return;
                        }
                        cm.sendOk("通往下一區域的入口,已經開啟。");
                        cm.dispose();
                        break;
        case 910340500:
                if (eim.getProperty("stage5") == null) {
                if (cm.isLeader()) {
                if (cm.getMap(910340500).getAllMonstersThreadsafe().size() == 0) {
                        cm.sendNext("恭喜你們完成了所有挑戰,請等待傳送到最終的獎勵關卡,裡面的怪物比普通的更容易打敗,你會有一段時間盡可能多的狩獵,也可以與NPC對話提前結束。");
                        cm.mapMessage(6, "恭喜你們完成了所有挑戰,請等待傳送到最終的獎勵關卡,裡面的怪物比普通的更容易打敗,你會有一段時間盡可能多的狩獵,也可以與NPC對話提前結束。");
                        eim.setProperty("stage5", 1);
                        cm.showEffect(true, "quest/party/clear");
                        cm.playSound(true, "Party1/Clear");
                        cm.getEventInstance().startEventTimer(1 * 10000);
                        cm.dispose();
                        return;
                        }
                        }
                        cm.sendOk("你好。歡迎來到第五階段,也是最後一階段。 請消滅地圖中的綠水靈王,就可以進入獎勵階段了哦。");
                        cm.dispose();
                        return;
                        }
                        cm.sendOk("請耐心等待,倒數計時後將進入最終的獎勵關卡。");
                        cm.dispose();
}
}

遺棄之塔踩箱子脚本

/*
        名字:        藍氣球
        地圖:        遺棄之塔<第5階段>
        描述:        922010800
*/

function start() {
        var eim = cm.getPlayer().getEventInstance();
        if (eim.getProperty("stage8status") == null) {//判斷條件
                if (!cm.isLeader()) {//判斷組長
                        cm.sendOk("歡迎來到#m" + cm.getPlayer().getMap().getId() + "#,請根據組長的指示進行這一關挑戰。");
                        cm.dispose();
                        return;
                        }
                if (eim.getProperty("stage8a") == null) {
                        cm.sendOk("歡迎來到遺棄之塔<第5階段>,在這個階段中,需要2名組員分別站在這些標有數位的方塊上面,以形成正確的組合來解鎖下一階段。");
                        eim.setProperty("stage8a", 0);
                        cm.dispose();
                        return;
                        }
                if (eim.getProperty("stage8b") == null) {
                        hui = ["100000001", "010010000", "001010000", "000010100", "000001010", "000100001", "000000110", "010000010", "001000100"];
                        eim.setProperty("stage8b", hui[parseInt(Math.random() * hui.length)]);
                        }
                        var chenhui = 0;
                        for (var i = 0; i < 9; i++)
                        if (cm.getMap().getNumPlayersItemsInArea(i) > 0) {
                        chenhui++;
                        }
                if (chenhui != 2) {
                        cm.sendOk("看起来你还没有找到正确的方法,需要2名組員分別站在這些標有數位的方塊上面,以形成正確的組合。");
                        cm.dispose();
                        return;
                        }
                        var x = "";
                        for (var i = 0; i < 9; i++)
                        x += cm.getMap().getNumPlayersItemsInArea(i);
                        y = x;
                if (y == eim.getProperty("stage8b")) {
                        eim.setProperty("stage8status", 1);
                        cm.showEffect(true, "quest/party/clear");
                        cm.playSound(true, "Party1/Clear");
                        cm.getMap().changeEnvironment("gate", 2);
                        cm.sendOk("組合正確,通往下一區域的入口,已经開啟。");
                        cm.dispose();
                        return;
                        }
                        cm.showEffect(true, "quest/party/wrong_kor");
                        cm.playSound(true, "Party1/Failed");
                        cm.dispose();
                        return;
                        }
                        cm.sendOk("通往下一區域的入口,已经開啟。");
                        }
                        cm.dispose();
}



方法很簡單,基本上這樣的導入隨機設置與讀取 對很多腳本通用!只需要簡單的修改下對應讀取的函數

反應堆的讀取 雅典娜禁地 為例:


                        var chenhui = 0;
                        for (var i = 1; i < 4; i++)
                        if (cm.getMap().getReactorByName("" + i).getState() > 0) {
                        chenhui++;
                        }

                        var x = "";
                        for (var i = 1; i < 4; i++)
                        x += cm.getMap().getReactorByName("" + i).getState();
                        y = x;



关于随机答案,另一种写法:

hui = ["0101", "1010", "0110", "0011", "1001"];
eim.setProperty("stage2b", hui[parseInt(Math.random() * hui.length)]);



注意:此脚本只适用于改版之后的内容,但方法是一致的。不知道是系统语言不支持还是什么问题    脚本里含有 [i] 的发到论坛上 会消失掉!

9020001.rar (2.43 KB, 下載次數: 1987)




瀏覽 3741 回復 1

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

:已明白 謝謝分享 2023-01-30 08:02回復
返回頂部