微信扫一扫 分享朋友圈

已有 1449 人浏览分享

[服務器教學] 透過腳本更換遊戲中的背景音樂

[複製鏈接]

站長

Rank: 12Rank: 12Rank: 12

1766

威望

2952

金錢

106

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

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

  • TA的每日心情

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

    連續簽到: 1 天

    [LV.9]以壇為家II

    TWAICL 發表於  2019-7-26 12:31:36 | 顯示全部樓層 | 閱讀模式



    【相關網址】
     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幣購買該腳本(底下)。

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





     進入購買連結:點此
    共收到 0 A幣
    打賞榜
    暫無
    暫無
    暫無
    暫無
    ----
    暫無
    ----
    暫無
    ----
    暫無
    ----
    您需要登錄後才可以回帖 登錄 | 註冊會員

    本版積分規則

    2441

    發文

    2952

    金錢

    106

    A幣

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

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

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

    小黑屋|AICL社群娛樂集團

    GMT+8, 2024-5-3 23:53 , 網路刷新 0.091978 秒 .

    歡迎來到 AICL網路社群

    版權AICL社群所有 2011-2021.

    Total:123 Today:213 Online:322