接上篇冒险岛小范围联机游戏搭建
本篇内容适用于按上面所给教程搭建的服务器,但不保证在通过其他方法搭建的079服务器上生效。
先上效果:
改了个传送脚本
首先。整个修改的目的,是在“拍卖-活动传送”的对话选项中添加一个“自由传送”的选项,接着出现输入框,然后按照用户的输入进行传送。
首先在服务器目录下找到Server\mSer\scripts\npc目录,这里是npc对话脚本的存放目录。通过字符串搜索(这里用的是VS Code,搜“练级传送”)可以找到,点击进入“拍卖-活动传送”时,显示的npc对话的脚本编号为9900004_1。
虽然脚本用的是js,但即使并不会js,只要模仿也能达到修改的目的。
修改1
打开9900004_1.js,先找到下面这一段代码,这段代码对应的是点击活动传送之后的对话框,我们需要给他再添加一个“自由传送”的选项,于是照葫芦画瓢给add变量加一行代码(190行)。
对应效果:
修改2
在这之后的一段代码是这样的:
//------------------------------------------------------------------------
} else if (status == 1) {
if (selection == 0){
var selStr = "#d 选择你的目的地吧.#k#b";
for (var i = 0; i < townmaps.length; i++) {
selStr += "\r\n#L" + i + "#" + townmaps[i][2] + "";
}
cm.sendSimple(selStr);
towns = 1;
}
if (selection == 1) {
var selStr = "#d 选择你的目的地吧.#k#b";
for (var i = 0; i < monstermaps.length; i++) {
selStr += "\r\n#L" + i + "#" + monstermaps[i][2] + "";
}
cm.sendSimple(selStr);
monsters = 1;
}
if (selection == 2) {
cm.warp(701000210, 0);
}
if (selection == 3) {
var selStr = "#k\r\n#d 选择你的目的地吧.#k#b";
for (var i = 0; i < bossmaps.length; i++) {
selStr += "\r\n#L" + i + "#" + bossmaps[i][2] + "";
}
cm.sendSimple(selStr);
bosses = 1;
}
if (selection == 4) {
var selStr = "#d 选择你的目的地吧.#k#b";
for (var i = 0; i < fubenmaps.length; i++) {
selStr += "\r\n#L" + i + "#" + fubenmaps[i][2] + "";
}
cm.sendSimple(selStr);
fuben = 1;
}
这是选择城镇传送/练级传送等选项后出现的下一级对话框,因此我们也模仿着写一段选择“自由传送”之后的代码放在这段代码下面。但因为我们需要实现根据用户的输入来跳转地图,需要一个输入框,稍微有些不同,具体代码如下:
if (selection == 5) {
var prompt = "#d 选择你的目的地吧.#k#b";
cm.sendGetNumber(prompt, 1, 1, 999990000)
free = 1;
}
另外因为我们使用了一个新的变量,文件开头需要声明一个叫free的布尔变量,如下面22行:
对应效果:
修改3
还有一个确定是和不是的对话框。
看一下代码,抄一段,改下参数:
//------------------------------------------------------------------------
} else if (status == 2) {
if (towns == 1) {
cm.sendYesNo("你确定要去 " + townmaps[selection][2] + "?");
chosenMap = selection;
towns = 2;
} else if (monsters == 1) {
cm.sendYesNo("你确定要去 " + monstermaps[selection][2] + "?");
chosenMap = selection;
monsters = 2;
} else if (bosses == 1) {
cm.sendYesNo("你确定要去 " + bossmaps[selection][2] + "?");
chosenMap = selection;
bosses = 2;
} else if (fuben == 1) {
cm.sendYesNo("你确定要去 " + fubenmaps[selection][2] + "?");
chosenMap = selection;
fuben = 2;
} else if (free == 1) {
cm.sendYesNo("你确定要去编号为" + selection + "的地图?");
chosenMap = selection;
free = 2;
}
对应效果:
修改4
//----------------------------------------------------------------------
} else if (status == 3) {
if (towns == 2) {
if(cm.getMeso()>=townmaps[chosenMap][1]){
cm.warp(townmaps[chosenMap][0], 0);
cm.gainMeso(-townmaps[chosenMap][1]);
}else{
cm.sendOk("你没有足够的金币哦!");
}
cm.dispose();
} else if (monsters == 2) {
if(cm.getMeso()>=monstermaps[chosenMap][1]){
cm.warp(monstermaps[chosenMap][0], 0);
cm.gainMeso(-monstermaps[chosenMap][1]);
}else{
cm.sendOk("你没有足够的金币哦!");
}
cm.dispose();
} else if (bosses == 2) {
if(cm.getMeso()>=bossmaps[chosenMap][1]){
cm.warp(bossmaps[chosenMap][0], 0);
cm.gainMeso(-bossmaps[chosenMap][1]);
}else{
cm.sendOk("你没有足够的金币哦!");
}
cm.dispose();
} else if (fuben == 2) {
if(cm.getMeso()>=fubenmaps[chosenMap][1]){
cm.warp(fubenmaps[chosenMap][0], 0);
cm.gainMeso(-fubenmaps[chosenMap][1]);
}else{
cm.sendOk("你没有足够的金币哦!");
}
cm.dispose();
分析一下,warp()函数应该是实现传送的函数了,除此之外原代码中似乎还实现了扣金币的功能,这个就不要了。
在上面那段代码后面添加如下代码:
else if (free == 2) {
cm.warp(chosenMap);
cm.dispose();
}
至此修改完毕。最后确认一下括号之类的语法问题即可。