【相關網址】
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幣購買該腳本(底下)。
很久沒寫這麼細的教學了...眼神死((白眼
進入購買連結:點此
沒有留言:
張貼留言