Portal sound effects + Improved skillbook drops

Added portal crossing sound effect on several scripted portals which were missing it.
Added a few more scrolls on Spindle.
Added several skill/mastery book drops, making "4th job skill questing" somewhat more viable.
This commit is contained in:
ronancpl
2018-02-14 18:25:49 -02:00
parent 10dc1f03e7
commit 278b5e8140
43 changed files with 1876 additions and 1284 deletions

View File

@@ -38,22 +38,19 @@ var totalcost;
var item = new Array(2050003,2050004,4006000,4006001);
var cost = new Array(300,400,5000,5000);
var msg = new Array("that cures the state of being sealed and cursed","that cures all",", possessing magical power, that is used for high-quality skills",", possessing the power of summoning that is used for high-quality skills");
var status;
function start() {
if (cm.isQuestCompleted(3035)) {
var selStr;
for (var i = 0; i < item.length; i++){
selStr += "\r\n#L" + i + "# #b#t" + item[i] + "# (Price: "+cost[i]+" mesos)#k#l";
}
cm.sendSimple("Thanks to you #b#t4031056##k is safely sealed. Of course, also as a result, I used up about half of the power I have accumulated over the last 800 years or so...but now I can die in peace. Oh, by the way... are you looking for rare items by any chance? As a sign of appreciation for your hard work, I'll sell some items I have to you, and ONLY you. Pick out the one you want!"+selStr);
}
else {
cm.sendNext("If you decide to help me out, then in return, I'll make the item available for sale.");
cm.dispose();
}
status = -1;
action(1, 0, 0);
}
function action(mode, type, selection) {
if (!cm.isQuestCompleted(3035)) {
cm.sendNext("If you decide to help me out, then in return, I'll make the item available for sale.");
cm.dispose();
return;
}
if(mode == 0 && status == 2) {
cm.sendNext("I see. Understand that I have many different items here. Take a look around. I'm only selling these items to you, so I won't be ripping you off in any way shape or form.");
cm.dispose();
@@ -63,8 +60,16 @@ function action(mode, type, selection) {
cm.dispose();
return;
}
status++;
if (status == 1) {
if (status == 0) {
var selStr = "";
for (var i = 0; i < item.length; i++){
selStr += "\r\n#L" + i + "# #b#t" + item[i] + "# (Price: "+cost[i]+" mesos)#k#l";
}
cm.sendSimple("Thanks to you #b#t4031056##k is safely sealed. Of course, also as a result, I used up about half of the power I have accumulated over the last 800 years or so...but now I can die in peace. Oh, by the way... are you looking for rare items by any chance? As a sign of appreciation for your hard work, I'll sell some items I have to you, and ONLY you. Pick out the one you want!"+selStr);
}
else if (status == 1) {
selected = selection;
cm.sendGetNumber("Is #b#t"+item[selected]+"##k really the item that you need? It's the item "+msg[selected]+". It may not be the easiest item to acquire, but I'll give you a good deal on it. It'll cost you #b"+cost[selected]+" mesos#k per item. How many would you like to purchase?", 0, 1, 100);
}

View File

@@ -1,7 +1,7 @@
/**
* @author: Ronan
* @npc: Abdula
* @map: Multiple cities on Maplestory
* @map: Multiple towns on Maplestory
* @func: Job Skill / Mastery Book Drop Announcer
*/
@@ -19,7 +19,7 @@ function action(mode, type, selection) {
if (mode == -1) {
cm.dispose();
} else {
if (mode == 0 && status == 0) {
if (mode == 0 && type > 0) {
cm.dispose();
return;
}

View File

@@ -31,6 +31,7 @@ function enter(pi) {
if (pi.isLeader()) {
for (var i = 0; i < dungeons; i++) {
if(pi.startDungeonInstance(dungeonid + i)) {
pi.playPortalSound();
pi.warpParty(dungeonid + i);
return true;
}
@@ -42,6 +43,7 @@ function enter(pi) {
} else {
for (var i = 0; i < dungeons; i++) {
if(pi.startDungeonInstance(dungeonid + i)) {
pi.playPortalSound();
pi.warp(dungeonid + i);
return true;
}

View File

@@ -33,6 +33,7 @@ function enter(pi) {
if (pi.isLeader()) {
for (var i = 0; i < dungeons; i++) {
if(pi.startDungeonInstance(dungeonid + i)) {
pi.playPortalSound();
pi.warpParty(dungeonid + i);
return true;
}
@@ -44,6 +45,7 @@ function enter(pi) {
} else {
for (var i = 0; i < dungeons; i++) {
if(pi.startDungeonInstance(dungeonid + i)) {
pi.playPortalSound();
pi.warp(dungeonid + i);
return true;
}

View File

@@ -33,6 +33,7 @@ function enter(pi) {
if (pi.isLeader()) {
for (var i = 0; i < dungeons; i++) {
if(pi.startDungeonInstance(dungeonid + i)) {
pi.playPortalSound();
pi.warpParty(dungeonid + i);
return true;
}
@@ -44,6 +45,7 @@ function enter(pi) {
} else {
for (var i = 0; i < dungeons; i++) {
if(pi.startDungeonInstance(dungeonid + i)) {
pi.playPortalSound();
pi.warp(dungeonid + i);
return true;
}

View File

@@ -33,6 +33,7 @@ function enter(pi) {
if (pi.isLeader()) {
for (var i = 0; i < dungeons; i++) {
if(pi.startDungeonInstance(dungeonid + i)) {
pi.playPortalSound();
pi.warpParty(dungeonid + i);
return true;
}
@@ -44,6 +45,7 @@ function enter(pi) {
} else {
for (var i = 0; i < dungeons; i++) {
if(pi.startDungeonInstance(dungeonid + i)) {
pi.playPortalSound();
pi.warp(dungeonid + i);
return true;
}

View File

@@ -33,6 +33,7 @@ function enter(pi) {
if (pi.isLeader()) {
for (var i = 0; i < dungeons; i++) {
if(pi.startDungeonInstance(dungeonid + i)) {
pi.playPortalSound();
pi.warpParty(dungeonid + i);
return true;
}
@@ -44,6 +45,7 @@ function enter(pi) {
} else {
for (var i = 0; i < dungeons; i++) {
if(pi.startDungeonInstance(dungeonid + i)) {
pi.playPortalSound();
pi.warp(dungeonid + i);
return true;
}

View File

@@ -33,6 +33,7 @@ function enter(pi) {
if (pi.isLeader()) {
for (var i = 0; i < dungeons; i++) {
if(pi.startDungeonInstance(dungeonid + i)) {
pi.playPortalSound();
pi.warpParty(dungeonid + i);
return true;
}
@@ -44,6 +45,7 @@ function enter(pi) {
} else {
for (var i = 0; i < dungeons; i++) {
if(pi.startDungeonInstance(dungeonid + i)) {
pi.playPortalSound();
pi.warp(dungeonid + i);
return true;
}

View File

@@ -31,6 +31,7 @@ function enter(pi) {
if (pi.isLeader()) {
for (var i = 0; i < dungeons; i++) {
if(pi.startDungeonInstance(dungeonid + i)) {
pi.playPortalSound();
pi.warpParty(dungeonid + i);
return true;
}
@@ -42,6 +43,7 @@ function enter(pi) {
} else {
for (var i = 0; i < dungeons; i++) {
if(pi.startDungeonInstance(dungeonid + i)) {
pi.playPortalSound();
pi.warp(dungeonid + i);
return true;
}

View File

@@ -31,6 +31,7 @@ function enter(pi) {
if (pi.isLeader()) {
for (var i = 0; i < dungeons; i++) {
if(pi.startDungeonInstance(dungeonid + i)) {
pi.playPortalSound();
pi.warpParty(dungeonid + i);
return true;
}
@@ -42,6 +43,7 @@ function enter(pi) {
} else {
for (var i = 0; i < dungeons; i++) {
if(pi.startDungeonInstance(dungeonid + i)) {
pi.playPortalSound();
pi.warp(dungeonid + i);
return true;
}

View File

@@ -31,6 +31,7 @@ function enter(pi) {
if (pi.isLeader()) {
for (var i = 0; i < dungeons; i++) {
if(pi.startDungeonInstance(dungeonid + i)) {
pi.playPortalSound();
pi.warpParty(dungeonid + i);
return true;
}
@@ -42,6 +43,7 @@ function enter(pi) {
} else {
for (var i = 0; i < dungeons; i++) {
if(pi.startDungeonInstance(dungeonid + i)) {
pi.playPortalSound();
pi.warp(dungeonid + i);
return true;
}

View File

@@ -31,6 +31,7 @@ function enter(pi) {
if (pi.isLeader()) {
for (var i = 0; i < dungeons; i++) {
if(pi.startDungeonInstance(dungeonid + i)) {
pi.playPortalSound();
pi.warpParty(dungeonid + i);
return true;
}
@@ -42,6 +43,7 @@ function enter(pi) {
} else {
for (var i = 0; i < dungeons; i++) {
if(pi.startDungeonInstance(dungeonid + i)) {
pi.playPortalSound();
pi.warp(dungeonid + i);
return true;
}

View File

@@ -31,6 +31,7 @@ function enter(pi) {
if (pi.isLeader()) {
for (var i = 0; i < dungeons; i++) {
if(pi.startDungeonInstance(dungeonid + i)) {
pi.playPortalSound();
pi.warpParty(dungeonid + i);
return true;
}
@@ -42,6 +43,7 @@ function enter(pi) {
} else {
for (var i = 0; i < dungeons; i++) {
if(pi.startDungeonInstance(dungeonid + i)) {
pi.playPortalSound();
pi.warp(dungeonid + i);
return true;
}

View File

@@ -31,6 +31,7 @@ function enter(pi) {
if (pi.isLeader()) {
for (var i = 0; i < dungeons; i++) {
if(pi.startDungeonInstance(dungeonid + i)) {
pi.playPortalSound();
pi.warpParty(dungeonid + i);
return true;
}
@@ -42,6 +43,7 @@ function enter(pi) {
} else {
for (var i = 0; i < dungeons; i++) {
if(pi.startDungeonInstance(dungeonid + i)) {
pi.playPortalSound();
pi.warp(dungeonid + i);
return true;
}

View File

@@ -2,7 +2,7 @@
function enter(pi) {
if (pi.getPlayer().getEvents().getGagaRescue().fallAndGet() > 3) {
pi.warp(922240200, 0);
pi.playPortalSound(); pi.warp(922240200, 0);
pi.getPlayer().cancelEffect(2360002);
} else
pi.playPortalSound(); pi.warp(pi.getPlayer().getMapId(), 0);

View File

@@ -2,7 +2,7 @@
function enter(pi) {
if (pi.getPlayer().getEvents().getGagaRescue().fallAndGet() > 3) {
pi.warp(922240200, 0);
pi.playPortalSound(); pi.warp(922240200, 0);
pi.getPlayer().cancelEffect(2360002);
} else
pi.playPortalSound(); pi.warp(pi.getPlayer().getMapId(), 0);

View File

@@ -2,7 +2,7 @@
function enter(pi) {
if (pi.getPlayer().getEvents().getGagaRescue().fallAndGet() > 3) {
pi.warp(922240200, 0);
pi.playPortalSound(); pi.warp(922240200, 0);
pi.getPlayer().cancelEffect(2360002);
} else
pi.playPortalSound(); pi.warp(pi.getPlayer().getMapId(), 0);

View File

@@ -2,7 +2,7 @@
function enter(pi) {
if (pi.getPlayer().getEvents().getGagaRescue().fallAndGet() > 3) {
pi.warp(922240200, 0);
pi.playPortalSound(); pi.warp(922240200, 0);
pi.getPlayer().cancelEffect(2360002);
} else
pi.playPortalSound(); pi.warp(pi.getPlayer().getMapId(), 0);

View File

@@ -24,5 +24,6 @@ function enter(pi) {
}
}
pi.message("A mysterious force won't let you in.");
return false;
}

View File

@@ -53,11 +53,11 @@ function enter(pi) {
}
} else {
pi.getPlayer().message("You received " + pi.getPlayer().addDojoPointsByMap(pi.getMapId()) + " training points. Your total training points score is now " + pi.getPlayer().getDojoPoints() + ".");
pi.warp(pi.getPlayer().getMap().getId() + 100, 0);
pi.playPortalSound(); pi.warp(pi.getPlayer().getMap().getId() + 100, 0);
}
} else {
pi.getPlayer().message("You received " + pi.getPlayer().addDojoPointsByMap(pi.getMapId()) + " training points. Your total training points score is now " + pi.getPlayer().getDojoPoints() + ".");
pi.warp(pi.getPlayer().getMap().getId() + 100, 0);
pi.playPortalSound(); pi.warp(pi.getPlayer().getMap().getId() + 100, 0);
}
} else {
pi.playPortalSound(); pi.warp(925020003, 0);

View File

@@ -1,6 +1,6 @@
function enter(pi) {
if(pi.isQuestCompleted(20730) || pi.isQuestCompleted(21734)) { // puppeteer defeated, newfound secret path
pi.warp(105070300,3);
pi.playPortalSound(); pi.warp(105070300,3);
return true;
} else if(pi.isQuestStarted(21734)) {
pi.playPortalSound(); pi.warp(910510100,0);

View File

@@ -9,7 +9,7 @@ function enter(pi) {
mapobj2.spawnMonsterOnGroundBelow(Packages.server.life.MapleLifeFactory.getMonster(9300348), new Packages.java.awt.Point(591, -34));
pi.warp(920030000,2);
pi.playPortalSound(); pi.warp(920030000,2);
return true;
} else {
pi.message("Someone is already challenging the area.");

View File

@@ -1,5 +1,5 @@
function enter(pi) {
pi.playPortalSound();
pi.playPortalSound();
pi.warp(100030200, "east00");
return true;
}

View File

@@ -1,5 +1,5 @@
function enter(pi) {
pi.playPortalSound();
pi.playPortalSound();
pi.warp(100030102, "in00");
return true;
}

View File

@@ -2,7 +2,7 @@ function enter(pi) {
var map = pi.getPlayer().getMap();
if(pi.getPortal().getName() == "female00") {
if (pi.getPlayer().getGender() == 1) {
pi.warp(map.getId(), "female01");
pi.playPortalSound(); pi.warp(map.getId(), "female01");
return true;
} else {
pi.message("This portal leads to the girls' area, try the portal at the other side.");

View File

@@ -22,7 +22,7 @@
function enter(pi) {
if (pi.getPlayer().getMapId() == 240060000) {
if(pi.getEventInstance().getIntProperty("defeatedHead") >= 1) {
pi.warp(240060100, 0);
pi.playPortalSound(); pi.warp(240060100, 0);
return true;
} else {
pi.getPlayer().dropMessage(6, "Horntail\'s Seal is Blocking this Door.");

View File

@@ -20,7 +20,7 @@
function enter(pi) {
if(!pi.isQuestStarted(3309) || pi.haveItem(4031708, 1)) {
pi.warp(261020700, "down00");
pi.playPortalSound(); pi.warp(261020700, "down00");
} else {
pi.playPortalSound(); pi.warp(926120000, "out00");
}

View File

@@ -22,7 +22,7 @@
function enter(pi) {
try {
var toMap = pi.getPlayer().getSavedLocation("FREE_MARKET");
pi.warp(toMap, pi.getMarketPortalId(toMap));
pi.playPortalSound(); pi.warp(toMap, pi.getMarketPortalId(toMap));
} catch(err) {
pi.playPortalSound(); pi.warp(100000000, 0);
}

View File

@@ -25,11 +25,11 @@ function enter(pi) {
return false;
}
if (pi.getPlayer().getMapId() == 240010100) {
pi.gainItem(4031346, -1);
pi.warp(101010000, "minar00");
pi.gainItem(4031346, -1);
pi.playPortalSound(); pi.warp(101010000, "minar00");
return true;
} else if (pi.getPlayer().getMapId() == 101010000) {
pi.gainItem(4031346, -1);
pi.gainItem(4031346, -1);
pi.playPortalSound(); pi.warp(240010100, "elli00");
return true;
}

View File

@@ -9,21 +9,21 @@ function enter(pi) {
pi.warp(130000100, 4); //or 130000101
break;
case 140010100:
pi.warp(140010110, 0); //or 140010111
break;
pi.warp(140010110, 0); //or 140010111
break;
case 120000101:
pi.warp(120000105, 0);
break;
pi.warp(120000105, 0);
break;
case 103000003:
pi.warp(103000008, 0); //or 103000009
break;
pi.warp(103000008, 0); //or 103000009
break;
case 100000201:
pi.warp(100000204, 0); //or 100000205
break;
pi.warp(100000204, 0); //or 100000205
break;
default:
pi.warp(pi.getMapId() + 1, 0); //or + 2
break;
pi.warp(pi.getMapId() + 1, 0); //or + 2
break;
}
return true;
return true;
}

View File

@@ -27,7 +27,7 @@ function enter(pi) {
if(pi.isQuestStarted(6134)) {
if(pi.canHold(4031448)) {
pi.gainItem(4031448, 1);
pi.warp(220070400, 3);
pi.playPortalSound(); pi.warp(220070400, 3);
return true;
} else {

44
scripts/quest/3108.js Normal file
View File

@@ -0,0 +1,44 @@
/*
This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server
Copyleft (L) 2017 RonanLana
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation version 3 as published by
the Free Software Foundation. You may not use, modify or distribute
this program under any other version of the GNU Affero General Public
License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
var status = -1;
function start(mode, type, selection) {
if (mode == -1) {
qm.dispose();
} else {
if(mode == 0 && type > 0) {
qm.dispose();
return;
}
if (mode == 1)
status++;
else
status--;
if (status == 0) {
qm.sendNext("(As you peek into the shattered statue, you might have found a clue about what happened. Better talk with #rScadur#k about this.)");
qm.forceCompleteQuest();
qm.dispose();
}
}
}