冒险岛079实现按地图编号传送的功能

接上篇冒险岛小范围联机游戏搭建

本篇内容适用于按上面所给教程搭建的服务器,但不保证在通过其他方法搭建的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();

                }

至此修改完毕。最后确认一下括号之类的语法问题即可。

发布了6 篇原创文章 · 获赞 9 · 访问量 273

猜你喜欢

转载自blog.csdn.net/XenonL/article/details/104401280