【楓之谷私服教學】透過腳本更換遊戲中的背景音樂



【相關網址】
 AICL楓之谷私服論壇技術討論區:點此

【前言】
 千呼萬喚始出來,眾所期待的腳本更換音樂教學熱騰騰的出爐了,本篇教學學會
 後,除了技術增進外,其中的音樂系統,更能讓伺服器增添不少特色,強烈推薦
 服主們學習該系統用法,本教程會教導設計原理,因此會簡化不少腳本內容,但
 不影響教學完整性,如有想獲得完整卡納谷音樂腳本,可在文底後記查看獲取方
 式。

【教學前準備】
 1.WzRepacker:點此
 2.HaRepacker 4.2:點此
 3.端口源碼
 4.任意一首MP3檔歌曲

【教學開始】
 開啟端口源碼,找到"AbstractPlayerInteraction.java",
 搜尋「changeMusic」如無結果,請新增以下方法:


public void changeMusic(String songName) {
                getPlayer().getMap().broadcastMessage(MaplePacketCreator.musicChange(songName));
        }


 透過WzRepacker打開Sound.wz",並新增新節點,節點名稱自取。
 請注意紅線處,WZ設計是階層式的,大的包小的,勿隨意點選新增。
 


 在新增好的節點中,再新增節點,節點數量依據您歌曲數量增加。

  • 綠線:確認您要的歌曲位置
  • 青線:選擇節點類型
  • 紫線:確認
  • 紅線:請確實反白點選,這是細節!!!




 完成後請儲存WZ。



 使用HaRepacker4.2打開新編輯好的 Sound.wz 檔,並且找到節點位置。



 請重複按照節點,新增對應的歌曲,此時才會被正確新增入WZ檔中。



 新增好後請儲存WZ。



 最後,透過WzRepacker導出,這部分就不截圖教學了,如果還不會,那就
 是你還太菜了,菜雞請回頭將網站、論壇中的WZ導出教學再看一次。

 
 完成前置準備作業後,就是寫腳本了,這邊會將簡化後的腳本,按照行列
 教導服主設計原理,請仔細觀看教程。

 首先,請先找到任意NPC,並新增腳本:



/*
  卡納音樂播放 v62 版本 卡納團隊編譯
*/

var status = 0;
var price = 500000;
var map = 50;
var worldmap = 1000;

//中文歌曲
var Cmusic = Array("Cmusic/01", "Cmusic/02", "Cmusic/03", "Cmusic/04", "Cmusic/05", "Cmusic/06", "Cmusic/07", "Cmusic/08");
var CmusicB = Array("狂風裡擁抱", "手掌心", "平凡之路", "剛好遇見你", "", "微加幸福", "暖心", "醜八怪");

function start() {
        status = -1;
        action(1, 0, 0);
}

function action(mode, type, selection) {
        if (mode < 1) {
                cm.dispose();
                return;
        } else if (mode == 1) {
                status++;
        } else {
                status--;
        }
        if (status == 0) {
                cm.sendSimple("嘿!玩遊戲玩膩了吧?聽點不同的歌曲如何?我們提供了各類最有名的歌曲供各位欣賞,只需付些少少的楓幣即可與所有人同樂\r\n#b"+
                                          "#L0#選取歌曲#l\r\n#b"+
                                          "#L1#聽聽歌曲系統說明#l");   
        }if (status == 1){
                if (selection == 0){
                cm.sendSimple("你要查找哪種音樂資訊呢??\r\n\r\n#b"+
                                          "#L2#中文歌曲#l#k\r\n#b");
                }else if (selection == 1){
                cm.sendSimple("音樂系統蒐集了全球最火紅的知名歌曲,您沒聽過也一定會覺得合您口味。\r\n"+
                                          "本地圖播放 楓幣 "+map+" \r\n");
                        cm.dispose();
                }
        }if (status == 2){
        mySelection = selection;
        if (mySelection == 2){
                switch (mySelection){
                        case 2 : if(cm.getMeso() > 10){
                        store = true;   
            var 天使之音 = "#b#e天使之音#k#n";
            天使之音 += "\r\n來聽點歌曲吧.\r\n";
            for (var i = 0; i < CmusicB.length; i++) {
                天使之音 += "\r\n#L" + i + "# " +CmusicB[i]+ "#l";
               }cm.sendSimple(天使之音);                      
                    }break;                      
                        }
                }
        }else if (status == 3){
            if (mySelection == 2) {
                cm.sendYesNo("請問要聆聽#r "+CmusicB[selection]+" #k?");
                mc = selection;
            }else {
                cm.sendOk("音源出現問題");
                cm.dispose();
            }
        }else if (status == 4) {
            if (cm.getMeso() < price) {
                cm.sendOk("您沒有足夠的楓幣喔");
                cm.dispose();
            } else if(mySelection == 2){
                cm.gainMeso(-price);
                                cm.changeMusic(Cmusic[mc]);
                                cm.mapMessage("玩家"+ cm.getChar().getName() +"為各位點播了【"+CmusicB[mc]+" 敬請欣賞");
                cm.dispose();
            } else{
                                cm.sendOk("不明錯誤");
                cm.dispose();                          
                               
                        }
        }
}



紅框:設定變量參數。
綠框:設定變量陣列參數,這邊會對照您在 Sound.wz 中的設定,有需要的寫入
   陣列。


紅框:最開始介紹,選擇項目可自行增減。
綠框:會依據選擇的號碼,判斷相對應的位置,請對照"selection"號碼。



紅框:給予mySelection一個值,值的參數為selection。((這邊沒看懂請回去看JS教程
綠框:寫一個 switch 條件判斷,做為將來如有多種類型歌曲分類時,可用於選擇判斷。
   內容則是透過 i++ 將陣列的選項印出,這會方便閱讀腳本。



紅框:賦予一個值,值的內容為selection,selection的參數是上一個選擇項目排序
   號碼得來。
綠框:確認是否要聆聽選擇的歌曲,此結果是依據上一個條件判斷得來。



紅框:透過 changeMusic 方法,更改遊戲內音樂。




【後記】
 更進階的還有全頻道更換音樂,但這部分就擇日在談,該腳本難度並不高,
 唯一不同的僅有cm.changeMusic,其於都是很基本的判斷式跟對話,目前該腳本
 只提供一個種類的歌曲選擇,卡納的腳本內容則提供3種以上,如要獲得腳本,
 請至AICL論壇,使用A幣購買該腳本(底下)。

 很久沒寫這麼細的教學了...眼神死((白眼





 進入購買連結:點此

沒有留言:

張貼留言