Map buff protection & Expirable quest patch + Storage notice
Fixed items such as Red Bean Porridge and Air Bubble from acting outside of their scopes (now Air Bubble acts only under water, for instance). Fixed an exploit with expirable quests when accessing the cash shop, that would make them "unexpirable". Tweaked storages, now showing up popup warnings to players under level 15 instead of using the chat text area. Removed "One-of-a-kind" tag from Lilin's Ring (caused conflicts with the Agent E custom script). Added a few more scrolls to Spindle's shop. Implemented several minor drop data adjustments.
This commit is contained in:
@@ -86,7 +86,14 @@ function timeOut(eim) {
|
||||
eim.dispose();
|
||||
}
|
||||
|
||||
function monsterKilled(mob, eim) {}
|
||||
function monsterKilled(mob, eim) {
|
||||
// Happens when an opposing mob dies
|
||||
}
|
||||
|
||||
function monsterValue(eim, mobid) {
|
||||
// Invoked when a monster that's registered has been killed
|
||||
// return x amount for this player - "Saved Points"
|
||||
}
|
||||
|
||||
function friendlyKilled(mob, eim) {
|
||||
// Happens when a friendly mob dies
|
||||
@@ -112,11 +119,6 @@ function playerDisconnected(eim, player) {
|
||||
// return x that is < 0 - Deregister player normally + Dispose instance if there x player or below, if it's leader = boot all
|
||||
}
|
||||
|
||||
function monsterValue(eim, mobid) {
|
||||
// Invoked when a monster that's registered has been killed
|
||||
// return x amount for this player - "Saved Points"
|
||||
}
|
||||
|
||||
function end(eim) {
|
||||
// Happens when the party fails to complete the event instance.
|
||||
}
|
||||
|
||||
@@ -84,6 +84,10 @@ function changedMap(eim, chr, mapid) {
|
||||
|
||||
function monsterKilled(mob, eim) {}
|
||||
|
||||
function monsterValue(eim, mobId) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
function allMonstersDead(eim) {}
|
||||
|
||||
function cancelSchedule() {}
|
||||
|
||||
@@ -84,6 +84,10 @@ function changedMap(eim, chr, mapid) {
|
||||
|
||||
function monsterKilled(mob, eim) {}
|
||||
|
||||
function monsterValue(eim, mobId) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
function allMonstersDead(eim) {}
|
||||
|
||||
function cancelSchedule() {}
|
||||
|
||||
@@ -84,6 +84,10 @@ function changedMap(eim, chr, mapid) {
|
||||
|
||||
function monsterKilled(mob, eim) {}
|
||||
|
||||
function monsterValue(eim, mobId) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
function allMonstersDead(eim) {}
|
||||
|
||||
function cancelSchedule() {}
|
||||
|
||||
@@ -84,6 +84,10 @@ function changedMap(eim, chr, mapid) {
|
||||
|
||||
function monsterKilled(mob, eim) {}
|
||||
|
||||
function monsterValue(eim, mobId) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
function allMonstersDead(eim) {}
|
||||
|
||||
function cancelSchedule() {}
|
||||
|
||||
@@ -84,6 +84,10 @@ function changedMap(eim, chr, mapid) {
|
||||
|
||||
function monsterKilled(mob, eim) {}
|
||||
|
||||
function monsterValue(eim, mobId) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
function allMonstersDead(eim) {}
|
||||
|
||||
function cancelSchedule() {}
|
||||
|
||||
@@ -174,7 +174,7 @@ function start() {
|
||||
}
|
||||
|
||||
function action(mode, type, selection) {
|
||||
if (mode == 0) {
|
||||
if (mode <= 0) {
|
||||
cm.sendOk("Hmmm...it shouldn't be a bad deal for you. Come see me at the right time and you may get a much better item to be offered. Anyway, let me know when you have a change of heart.");
|
||||
cm.dispose();
|
||||
return;
|
||||
|
||||
59
scripts/npc/2041026.js
Normal file
59
scripts/npc/2041026.js
Normal file
@@ -0,0 +1,59 @@
|
||||
/*
|
||||
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/>.
|
||||
*/
|
||||
/* Ghosthunter Bob
|
||||
*/
|
||||
|
||||
var status;
|
||||
|
||||
function start() {
|
||||
status = -1;
|
||||
action(1, 0, 0);
|
||||
}
|
||||
|
||||
function action(mode, type, selection) {
|
||||
if (mode == -1) {
|
||||
cm.dispose();
|
||||
} else {
|
||||
if (mode == 0 && type > 0) {
|
||||
cm.dispose();
|
||||
return;
|
||||
}
|
||||
if (mode == 1)
|
||||
status++;
|
||||
else
|
||||
status--;
|
||||
|
||||
if(status == 0) {
|
||||
if(cm.haveItem(4220046, 1)) {
|
||||
if(cm.isQuestStarted(3250)) {
|
||||
cm.completeQuest(3250);
|
||||
cm.gainFame(11);
|
||||
}
|
||||
|
||||
cm.gainItem(4220046, -1);
|
||||
cm.sendOk("You want to hand the #r#t4220046##k to me, right? Alright, I'll take it for you.");
|
||||
} else {
|
||||
cm.sendOk("Hello there! I'm #b#p2041026##k, in charge of watching and reporting any paranormal activities in this area.");
|
||||
}
|
||||
|
||||
cm.dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -76,7 +76,7 @@ function action(mode, type, selection) {
|
||||
selStr = "What kind of medicine are you interested in making?#b";
|
||||
|
||||
for (var i = 0; i < itemSet.length; i++){
|
||||
selStr += "\r\n#L" + i + "# #i" + itemSet[i] + "# #t" + itemSet[i] + "##l";
|
||||
selStr += "\r\n#L" + i + "# #v" + itemSet[i] + "# #t" + itemSet[i] + "##l";
|
||||
}
|
||||
selStr += "#k";
|
||||
}
|
||||
@@ -98,11 +98,10 @@ function action(mode, type, selection) {
|
||||
status++;
|
||||
|
||||
selStr = "So you wish to donate some medicine ingredients? This is great news! Donations will be accepted in the unit of #b100#k. The donator will receive a marble that enables one to make a scroll. Which of these would you like to donate? #b";
|
||||
itemSet = new Array("Acorn","Thimble","Needle Pouch","Necki Flower","Necki Swimming Cap","Broken Piece of Pot","Ginseng-Boiled Water","Straw Doll","Wooden Doll","Bellflower Root","100-Year-Old Bellflower",
|
||||
"Old Paper","Yellow Belt","Broken Deer Horn","Red Belt","Peach Seed","Mr. Alli's Leather","Cat Doll","Mark of the Pirate","Captain Hat#k");
|
||||
itemSet = new Array(4000276,4000277,4000278,4000279,4000280,4000291,4000292,4000286,4000287,4000293,4000294,4000298,4000284,4000288,4000285,4000282,4000295,4000289,4000296,4000297);
|
||||
|
||||
for (var i = 0; i < itemSet.length; i++){
|
||||
selStr += "\r\n#L" + i + "# " + itemSet[i] + "#l";
|
||||
selStr += "\r\n#L" + i + "# #v" + itemSet[i] + "# #t" + itemSet[i] + "##l";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -165,7 +164,7 @@ function action(mode, type, selection) {
|
||||
else if(selectedType == 2){
|
||||
selectedItem = selection;
|
||||
|
||||
itemSet = new Array(4000276,4000277,4000278,4000279,4000280,4000291,4000292,4000286,4000287,4000293,4000294,4000298,4000284,4000288,4000285,4000282,4000295,4000289,4000296,4031435);
|
||||
itemSet = new Array(4000276,4000277,4000278,4000279,4000280,4000291,4000292,4000286,4000287,4000293,4000294,4000298,4000284,4000288,4000285,4000282,4000295,4000289,4000296,4000297);
|
||||
rewdSet = new Array(7,7,new Array(7,8),10,11,8,new Array(7,8),new Array(7,9),new Array(7,8),9,10,new Array(10,11),11,new Array(11,12),13,13,14,15,new Array(15,16),17);
|
||||
|
||||
item = itemSet[selectedItem];
|
||||
|
||||
@@ -46,7 +46,7 @@ function action(mode, type, selection) {
|
||||
|
||||
var itemSet = new Array(2049100, 7777777);
|
||||
var matSet = new Array(new Array(4031203,4001356,4000136,4000082,4001126,4080100,4000021,4003005));
|
||||
var matQtySet = new Array(new Array(100,60,40,80,80,8,200,120));
|
||||
var matQtySet = new Array(new Array(100,60,40,80,10,8,200,120));
|
||||
var costSet = new Array(1200000, 7777777);
|
||||
item = itemSet[selectedItem];
|
||||
mats = matSet[selectedItem];
|
||||
|
||||
@@ -1,18 +1,21 @@
|
||||
function enter(pi) {
|
||||
if (pi.hasItem(4032120) || pi.hasItem(4032121) || pi.hasItem(4032122) || pi.hasItem(4032123) || pi.hasItem(4032124)) {
|
||||
pi.playerMessage(5, "You already have the proof of qualification.");
|
||||
return false;
|
||||
}
|
||||
if (pi.hasItem(4032120) || pi.hasItem(4032121) || pi.hasItem(4032122) || pi.hasItem(4032123) || pi.hasItem(4032124)) {
|
||||
pi.playerMessage(5, "You already have the proof of qualification.");
|
||||
return false;
|
||||
}
|
||||
if (pi.isQuestStarted(20601) || pi.isQuestStarted(20602) || pi.isQuestStarted(20603) || pi.isQuestStarted(20604) || pi.isQuestStarted(20605)) {
|
||||
if (pi.getPlayerCount(913010200) == 0) {
|
||||
var map = pi.getMap(913010200);
|
||||
map.killAllMonsters();
|
||||
pi.warp(913010200, 0);
|
||||
pi.spawnMonster(9300289, 0, 0);
|
||||
} else {
|
||||
pi.playerMessage(5, "Someone is already attempting to defeat the boss. Better come back later.");
|
||||
}
|
||||
if (pi.getPlayerCount(913010200) == 0) {
|
||||
var map = pi.getMap(913010200);
|
||||
map.killAllMonsters();
|
||||
pi.warp(913010200, 0);
|
||||
pi.spawnMonster(9300289, 0, 0);
|
||||
return true;
|
||||
} else {
|
||||
pi.playerMessage(5, "Someone is already attempting to defeat the boss. Better come back later.");
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
pi.playerMessage(5, "The only way to enter the hall #3 is if you're training for the Level 100 skills.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -32,7 +32,7 @@ function enter(pi) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!pi.getPlayer().getEventInstance().giveEventReward(pi.getPlayer(), evLevel)) {
|
||||
if(pi.getPlayer().getEventInstance().giveEventReward(pi.getPlayer(), evLevel)) {
|
||||
pi.warp(970030000);
|
||||
return true;
|
||||
}
|
||||
|
||||
50
scripts/quest/20527.js
Normal file
50
scripts/quest/20527.js
Normal file
@@ -0,0 +1,50 @@
|
||||
/*
|
||||
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) {
|
||||
var mount = qm.getPlayer().getMount();
|
||||
|
||||
if(mount != null && mount.getLevel() >= 3) {
|
||||
qm.sendNext("Alright, I'll get you started in how to train Mimio, the next step for Mimianas. When you're ready, talk to me again.");
|
||||
qm.forceCompleteQuest();
|
||||
} else {
|
||||
qm.sendNext("It looks like your Mimiana haven't reached #rlevel 3#k yet. Please train it a bit more before trying to advance it.");
|
||||
}
|
||||
|
||||
qm.dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user