Vegas's spell + pet/mounts schedule revamp + CafePQ

Added Vega's Spell feature. Refactored mounts and pets schedules (now
one thread runs globally updating stats). Fixed Pet Ignore now saving to
DB. Fixed Flash Jump animation not appearing for other players just
after changing jobs. Fixed 3rd job, now as a proper event with timeout.
Introducing Brand-new PQ: CafePQ.
This commit is contained in:
ronancpl
2017-09-08 14:36:58 -03:00
parent 74b4ca4132
commit e064d5cbfa
210 changed files with 35387 additions and 46797 deletions

View File

@@ -0,0 +1,92 @@
/*
This file is part of the OdinMS Maple Story Server
Copyright (C) 2008 Patrick Huy <patrick.huy@frz.cc>
Matthias Butz <matze@odinms.de>
Jan Christian Meyer <vimes@odinms.de>
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/>.
*/
/**
*3rd Job Event - Bowman
**/
importPackage(Packages.tools);
var entryMap = 108010100;
var exitMap = 105040305;
var minMapId = 108010100;
var maxMapId = 108010101;
var eventTime = 20; //20 minutes
var lobbyRange = [0, 0];
function setLobbyRange() {
return lobbyRange;
}
function init() {
em.setProperty("noEntry","false");
}
function playerEntry(eim, player) {
eim.getInstanceMap(maxMapId).resetPQ(1);
player.changeMap(entryMap, 0);
em.setProperty("noEntry","true");
player.getClient().getSession().write(MaplePacketCreator.getClock(eventTime * 60));
eim.startEventTimer(eventTime * 60000);
}
function playerUnregistered(eim, player) {}
function playerExit(eim, player) {
eim.unregisterPlayer(player);
eim.dispose();
em.setProperty("noEntry","false");
}
function scheduledTimeout(eim) {
var player = eim.getPlayers().get(0);
playerExit(eim, eim.getPlayers().get(0));
player.changeMap(exitMap);
}
function playerDisconnected(eim, player) {
playerExit(eim, player);
}
function clear(eim) {
var player = eim.getPlayers().get(0);
eim.unregisterPlayer(player);
player.changeMap(exitMap);
eim.dispose();
em.setProperty("noEntry","false");
}
function changedMap(eim, chr, mapid) {
if(mapid < minMapId || mapid > maxMapId) playerExit(eim, chr);
}
function monsterKilled(mob, eim) {}
function allMonstersDead(eim) {}
function cancelSchedule() {}
function dispose() {}

View File

@@ -0,0 +1,92 @@
/*
This file is part of the OdinMS Maple Story Server
Copyright (C) 2008 Patrick Huy <patrick.huy@frz.cc>
Matthias Butz <matze@odinms.de>
Jan Christian Meyer <vimes@odinms.de>
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/>.
*/
/**
*3rd Job Event - Magician
**/
importPackage(Packages.tools);
var entryMap = 108010200;
var exitMap = 100040106;
var minMapId = 108010200;
var maxMapId = 108010201;
var eventTime = 20; //20 minutes
var lobbyRange = [0, 0];
function setLobbyRange() {
return lobbyRange;
}
function init() {
em.setProperty("noEntry","false");
}
function playerEntry(eim, player) {
eim.getInstanceMap(maxMapId).resetPQ(1);
player.changeMap(entryMap, 0);
em.setProperty("noEntry","true");
player.getClient().getSession().write(MaplePacketCreator.getClock(eventTime * 60));
eim.startEventTimer(eventTime * 60000);
}
function playerUnregistered(eim, player) {}
function playerExit(eim, player) {
eim.unregisterPlayer(player);
eim.dispose();
em.setProperty("noEntry","false");
}
function scheduledTimeout(eim) {
var player = eim.getPlayers().get(0);
playerExit(eim, eim.getPlayers().get(0));
player.changeMap(exitMap);
}
function playerDisconnected(eim, player) {
playerExit(eim, player);
}
function clear(eim) {
var player = eim.getPlayers().get(0);
eim.unregisterPlayer(player);
player.changeMap(exitMap);
eim.dispose();
em.setProperty("noEntry","false");
}
function changedMap(eim, chr, mapid) {
if(mapid < minMapId || mapid > maxMapId) playerExit(eim, chr);
}
function monsterKilled(mob, eim) {}
function allMonstersDead(eim) {}
function cancelSchedule() {}
function dispose() {}

View File

@@ -0,0 +1,92 @@
/*
This file is part of the OdinMS Maple Story Server
Copyright (C) 2008 Patrick Huy <patrick.huy@frz.cc>
Matthias Butz <matze@odinms.de>
Jan Christian Meyer <vimes@odinms.de>
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/>.
*/
/**
*3rd Job Event - Pirate
**/
importPackage(Packages.tools);
var entryMap = 108010500;
var exitMap = 105070200;
var minMapId = 108010500;
var maxMapId = 108010501;
var eventTime = 20; //20 minutes
var lobbyRange = [0, 0];
function setLobbyRange() {
return lobbyRange;
}
function init() {
em.setProperty("noEntry","false");
}
function playerEntry(eim, player) {
eim.getInstanceMap(maxMapId).resetPQ(1);
player.changeMap(entryMap, 0);
em.setProperty("noEntry","true");
player.getClient().getSession().write(MaplePacketCreator.getClock(eventTime * 60));
eim.startEventTimer(eventTime * 60000);
}
function playerUnregistered(eim, player) {}
function playerExit(eim, player) {
eim.unregisterPlayer(player);
eim.dispose();
em.setProperty("noEntry","false");
}
function scheduledTimeout(eim) {
var player = eim.getPlayers().get(0);
playerExit(eim, eim.getPlayers().get(0));
player.changeMap(exitMap);
}
function playerDisconnected(eim, player) {
playerExit(eim, player);
}
function clear(eim) {
var player = eim.getPlayers().get(0);
eim.unregisterPlayer(player);
player.changeMap(exitMap);
eim.dispose();
em.setProperty("noEntry","false");
}
function changedMap(eim, chr, mapid) {
if(mapid < minMapId || mapid > maxMapId) playerExit(eim, chr);
}
function monsterKilled(mob, eim) {}
function allMonstersDead(eim) {}
function cancelSchedule() {}
function dispose() {}

View File

@@ -0,0 +1,92 @@
/*
This file is part of the OdinMS Maple Story Server
Copyright (C) 2008 Patrick Huy <patrick.huy@frz.cc>
Matthias Butz <matze@odinms.de>
Jan Christian Meyer <vimes@odinms.de>
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/>.
*/
/**
*3rd Job Event - Thief
**/
importPackage(Packages.tools);
var entryMap = 108010400;
var exitMap = 107000402;
var minMapId = 108010400;
var maxMapId = 108010401;
var eventTime = 20; //20 minutes
var lobbyRange = [0, 0];
function setLobbyRange() {
return lobbyRange;
}
function init() {
em.setProperty("noEntry","false");
}
function playerEntry(eim, player) {
eim.getInstanceMap(maxMapId).resetPQ(1);
player.changeMap(entryMap, 0);
em.setProperty("noEntry","true");
player.getClient().getSession().write(MaplePacketCreator.getClock(eventTime * 60));
eim.startEventTimer(eventTime * 60000);
}
function playerUnregistered(eim, player) {}
function playerExit(eim, player) {
eim.unregisterPlayer(player);
eim.dispose();
em.setProperty("noEntry","false");
}
function scheduledTimeout(eim) {
var player = eim.getPlayers().get(0);
playerExit(eim, eim.getPlayers().get(0));
player.changeMap(exitMap);
}
function playerDisconnected(eim, player) {
playerExit(eim, player);
}
function clear(eim) {
var player = eim.getPlayers().get(0);
eim.unregisterPlayer(player);
player.changeMap(exitMap);
eim.dispose();
em.setProperty("noEntry","false");
}
function changedMap(eim, chr, mapid) {
if(mapid < minMapId || mapid > maxMapId) playerExit(eim, chr);
}
function monsterKilled(mob, eim) {}
function allMonstersDead(eim) {}
function cancelSchedule() {}
function dispose() {}

View File

@@ -0,0 +1,92 @@
/*
This file is part of the OdinMS Maple Story Server
Copyright (C) 2008 Patrick Huy <patrick.huy@frz.cc>
Matthias Butz <matze@odinms.de>
Jan Christian Meyer <vimes@odinms.de>
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/>.
*/
/**
*3rd Job Event - Warrior
**/
importPackage(Packages.tools);
var entryMap = 108010300;
var exitMap = 105070001;
var minMapId = 108010300;
var maxMapId = 108010301;
var eventTime = 20; //20 minutes
var lobbyRange = [0, 0];
function setLobbyRange() {
return lobbyRange;
}
function init() {
em.setProperty("noEntry","false");
}
function playerEntry(eim, player) {
eim.getInstanceMap(maxMapId).resetPQ(1);
player.changeMap(entryMap, 0);
em.setProperty("noEntry","true");
player.getClient().getSession().write(MaplePacketCreator.getClock(eventTime * 60));
eim.startEventTimer(eventTime * 60000);
}
function playerUnregistered(eim, player) {}
function playerExit(eim, player) {
eim.unregisterPlayer(player);
eim.dispose();
em.setProperty("noEntry","false");
}
function scheduledTimeout(eim) {
var player = eim.getPlayers().get(0);
playerExit(eim, eim.getPlayers().get(0));
player.changeMap(exitMap);
}
function playerDisconnected(eim, player) {
playerExit(eim, player);
}
function clear(eim) {
var player = eim.getPlayers().get(0);
eim.unregisterPlayer(player);
player.changeMap(exitMap);
eim.dispose();
em.setProperty("noEntry","false");
}
function changedMap(eim, chr, mapid) {
if(mapid < minMapId || mapid > maxMapId) playerExit(eim, chr);
}
function monsterKilled(mob, eim) {}
function allMonstersDead(eim) {}
function cancelSchedule() {}
function dispose() {}

View File

@@ -1,144 +0,0 @@
importPackage(Packages.client);
importPackage(Packages.server.life);
importPackage(Packages.tools);
importPackage(Packages.client.inventory);
function init() {
}
function monsterValue(eim, mobId) {
return 1;
}
function setClassVars(player) {
var returnMapId;
var monsterId;
var mapId;
if (player.getJob().equals(MapleJob.FP_WIZARD) ||
player.getJob().equals(MapleJob.IL_WIZARD) ||
player.getJob().equals(MapleJob.CLERIC)) {
mapId = 108010201;
returnMapId = 100040106;
monsterId = 9001001;
} else if (player.getJob().equals(MapleJob.FIGHTER) ||
player.getJob().equals(MapleJob.PAGE) ||
player.getJob().equals(MapleJob.SPEARMAN)) {
mapId = 108010301;
returnMapId = 105070001;
monsterId = 9001000;
} else if (player.getJob().equals(MapleJob.ASSASSIN) ||
player.getJob().equals(MapleJob.BANDIT)) {
mapId = 108010401;
returnMapId = 107000402;
monsterId = 9001003;
} else if (player.getJob().equals(MapleJob.HUNTER) ||
player.getJob().equals(MapleJob.CROSSBOWMAN)) {
mapId = 108010101;
returnMapId = 105040305;
monsterId = 9001002;
} else if (player.getJob().equals(MapleJob.BRAWLER) ||
player.getJob().equals(MapleJob.GUNSLINGER)) {
mapId = 108010501;
returnMapId = 105040305;
monsterId = 9001008;
}
return new Array(mapId, returnMapId, monsterId);
}
function playerEntry(eim, player) {
var info = setClassVars(player);
var mapId = info[0];
var returnMapId = info[1];
var monsterId = info[2];
var map = eim.getMapInstance(mapId);
map.toggleDrops();
player.changeMap(map, map.getPortal(0));
var mob = map.getMonsterById(monsterId);
eim.registerMonster(mob);
eim.schedule("warpOut", 20 * 60 * 1000);
map.addMapTimer(20 * 60);
}
function playerDead(eim, player) {
var info = setClassVars(player);
var mapId = info[0];
var returnMapId = info[1];
var monsterId = info[2];
player.setHp(1);
var returnMap = em.getChannelServer().getMapFactory().getMap(returnMapId);
player.changeMap(returnMap, returnMap.getPortal(0));
eim.unregisterPlayer(player);
eim.dispose();
}
function playerDisconnected(eim, player) {
var info = setClassVars(player);
var mapId = info[0];
var returnMapId = info[1];
var monsterId = info[2];
eim.unregisterPlayer(player);
player.getMap().removePlayer(player);
var returnMap = em.getChannelServer().getMapFactory().getMap(returnMapId);
player.setMap(returnMap);
eim.dispose();
}
function monsterKilled(mob, eim) {}
function allMonstersDead(eim) {
var winner = eim.getPlayers().get(0);
var info = setClassVars(winner);
var mapId = info[0];
var returnMapId = info[1];
var monsterId = info[2];
var map = eim.getMapFactory().getMap(mapId);
map.spawnItemDrop(winner, winner, new Item(4031059, 0, 1), winner.getPosition(), true, false);
eim.schedule("warpOut", 12 * 60 * 1000);
map.addMapTimer(12 * 60);
}
function cancelSchedule(eim) {
}
function warpOut(eim) {
var iter = eim.getPlayers().iterator();
while (iter.hasNext()) {
var player = iter.next();
var info = setClassVars(player);
var mapId = info[0];
var returnMapId = info[1];
var monsterId = info[2];
var returnMap = em.getChannelServer().getMapFactory().getMap(returnMapId);
player.changeMap(returnMap, returnMap.getPortal(0));
eim.unregisterPlayer(player);
}
eim.dispose();
}
function leftParty(eim, player) {
}
function disbandParty(eim, player) {
}
function dispose() {
}
function cancelSchedule(eim) {
}

View File

@@ -49,13 +49,13 @@ function setEventRewards(eim) {
var itemSet, itemQty, evLevel;
evLevel = 6; //Rewards at event completion
itemSet = [1122018, 1122005, 1022088, 1402013, 1032030, 1032070, 1102046, 2330004, 2041013, 2041016, 2041019, 2041022, 2049100, 2049003, 2020012, 2020013, 2020014, 2020015, 2022029, 2022045, 2022068, 2022069, 2022180, 2022179, 4004000, 4004001, 4004002, 4004003, 4004004, 4003000];
itemQty = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 25, 25, 25, 25, 25, 25, 25, 25, 4, 4, 12, 12, 12, 12, 12, 25];
itemSet = [3010061, 1122018, 1122005, 1022088, 1402013, 1032030, 1032070, 1102046, 2330004, 2041013, 2041016, 2041019, 2041022, 2049100, 2049003, 2020012, 2020013, 2020014, 2020015, 2022029, 2022045, 2022068, 2022069, 2022180, 2022179, 4004000, 4004001, 4004002, 4004003, 4004004, 4003000];
itemQty = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 25, 25, 25, 25, 25, 25, 25, 25, 4, 4, 12, 12, 12, 12, 12, 25];
eim.setEventRewards(evLevel, itemSet, itemQty);
evLevel = 5; //Rewards at Rest Spot V
itemSet = [1122018, 1122005, 1022088, 1402013, 1032030, 1032070, 1102046, 2330004, 2041013, 2041016, 2041019, 2041022, 2049100, 2049003, 2020012, 2020013, 2020014, 2020015, 2022029, 2022045, 2022068, 2022069, 2022180, 2022179, 4004000, 4004001, 4004002, 4004003, 4004004, 4003000];
itemQty = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 15, 15, 15, 15, 15, 15, 15, 15, 2, 2, 8, 8, 8, 8, 8, 12];
itemSet = [3010063, 1122018, 1122005, 1022088, 1402013, 1032030, 1032070, 1102046, 2330004, 2041013, 2041016, 2041019, 2041022, 2049100, 2049003, 2020012, 2020013, 2020014, 2020015, 2022029, 2022045, 2022068, 2022069, 2022180, 2022179, 4004000, 4004001, 4004002, 4004003, 4004004, 4003000];
itemQty = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 15, 15, 15, 15, 15, 15, 15, 15, 2, 2, 8, 8, 8, 8, 8, 12];
eim.setEventRewards(evLevel, itemSet, itemQty);
evLevel = 4; //Rewards at Rest Spot IV

243
scripts/event/CafePQ_1.js Normal file
View File

@@ -0,0 +1,243 @@
/**
* @author: Ronan
* @event: Cafe PQ 1
*/
importPackage(Packages.client.inventory);
var isPq = true;
var minPlayers = 3, maxPlayers = 6;
var minLevel = 21, maxLevel = 120;
var entryMap = 190000000;
var exitMap = 193000000;
var recruitMap = 193000000;
var minMapId = 190000000;
var maxMapId = 190000002;
var eventMaps = [190000000, 190000001, 190000002];
var eventTime = 45; // 45 minutes
var couponsNeeded = 400; // total of coupons to complete the event
var lobbyRange = [0, 0];
function init() {
setEventRequirements();
}
function setLobbyRange() {
return lobbyRange;
}
function setEventRequirements() {
var reqStr = "";
reqStr += "\r\n Number of players: ";
if(maxPlayers - minPlayers >= 1) reqStr += minPlayers + " ~ " + maxPlayers;
else reqStr += minPlayers;
reqStr += "\r\n Level range: ";
if(maxLevel - minLevel >= 1) reqStr += minLevel + " ~ " + maxLevel;
else reqStr += minLevel;
reqStr += "\r\n Time limit: ";
reqStr += eventTime + " minutes";
em.setProperty("party", reqStr);
}
function setEventExclusives(eim) {
var itemSet = [4001007];
eim.setExclusiveItems(itemSet);
}
function setEventRewards(eim) {
var itemSet, itemQty, evLevel, expStages;
evLevel = 1; //Rewards at clear PQ
itemSet = [4001014];
itemQty = [1];
eim.setEventRewards(evLevel, itemSet, itemQty);
expStages = [20000]; //bonus exp given on CLEAR stage signal
eim.setEventClearStageExp(expStages);
}
function getEligibleParty(party) { //selects, from the given party, the team that is allowed to attempt this event
var eligible = [];
var hasLeader = false;
if(party.size() > 0) {
var partyList = party.toArray();
for(var i = 0; i < party.size(); i++) {
var ch = partyList[i];
if(ch.getMapId() == recruitMap && ch.getLevel() >= minLevel && ch.getLevel() <= maxLevel) {
if(ch.isLeader()) hasLeader = true;
eligible.push(ch);
}
}
}
if(!(hasLeader && eligible.length >= minPlayers && eligible.length <= maxPlayers)) eligible = [];
return eligible;
}
function setup(level, lobbyid) {
var eim = em.newInstance("Lan1_" + lobbyid);
eim.setProperty("level", level);
eim.setProperty("stage", "0");
eim.setIntProperty("couponsNeeded", couponsNeeded);
var i;
for (i = 0; i < eventMaps.length; i++) {
var mapObj = eim.getInstanceMap(eventMaps[i]);
mapObj.resetPQ(level);
mapObj.toggleDrops();
mapObj.instanceMapForceRespawn();
}
respawnStages(eim);
eim.startEventTimer(eventTime * 60000);
setEventRewards(eim);
setEventExclusives(eim);
return eim;
}
function afterSetup(eim) {}
function respawnStages(eim) {
var i;
for (i = 0; i < eventMaps.length; i++) {
eim.getInstanceMap(eventMaps[i]).instanceMapRespawn();
}
eim.schedule("respawnStages", 15 * 1000);
}
function playerEntry(eim, player) {
var map = eim.getMapInstance(entryMap);
player.changeMap(map, map.getPortal(0));
}
function scheduledTimeout(eim) {
end(eim);
}
function playerUnregistered(eim, player) {}
function playerExit(eim, player) {
eim.unregisterPlayer(player);
player.changeMap(exitMap, 0);
}
function changedMap(eim, player, mapid) {
if (mapid < minMapId || mapid > maxMapId) {
if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
eim.unregisterPlayer(player);
end(eim);
}
else
eim.unregisterPlayer(player);
}
}
function changedLeader(eim, leader) {
var mapid = leader.getMapId();
if (!eim.isEventCleared() && (mapid < minMapId || mapid > maxMapId)) {
end(eim);
}
}
function playerDead(eim, player) {}
function playerRevive(eim, player) { // player presses ok on the death pop up.
if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
eim.unregisterPlayer(player);
end(eim);
}
else
eim.unregisterPlayer(player);
}
function playerDisconnected(eim, player) {
if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
eim.unregisterPlayer(player);
end(eim);
}
else
eim.unregisterPlayer(player);
}
function leftParty(eim, player) {
if (eim.isEventTeamLackingNow(false, minPlayers, player)) {
eim.unregisterPlayer(player);
end(eim);
}
else
eim.unregisterPlayer(player);
}
function disbandParty(eim) {
end(eim);
}
function monsterValue(eim, mobId) {
return 1;
}
function end(eim) {
var party = eim.getPlayers();
for (var i = 0; i < party.size(); i++) {
playerExit(eim, party.get(i));
}
eim.dispose();
}
function giveRandomEventReward(eim, player) {
eim.giveEventReward(player);
}
function clearPQ(eim) {
eim.stopEventTimer();
eim.setEventCleared();
eim.giveEventPlayersStageReward(1);
var i;
for (i = 0; i < eventMaps.length; i++) {
eim.getInstanceMap(eventMaps[i]).killAllMonstersNotFriendly();
eim.showClearEffect(eventMaps[i]);
}
}
function getDroppedQuantity(mob) {
if(mob.getLevel() > 65) {
return 5;
} else if(mob.getLevel() > 40) {
return 2;
} else {
return 1;
}
}
function monsterKilled(mob, eim) {
try {
if(eim.isEventCleared()) return;
var mapObj = mob.getMap();
var itemObj = new Item(4001007, 0, getDroppedQuantity(mob));
var dropper = eim.getPlayers().get(0);
mapObj.spawnItemDrop(mob, dropper, itemObj, mob.getPosition(), true, false);
} catch(err) {} // PQ not started yet
}
function allMonstersDead(eim) {}
function cancelSchedule() {}
function dispose(eim) {}

243
scripts/event/CafePQ_2.js Normal file
View File

@@ -0,0 +1,243 @@
/**
* @author: Ronan
* @event: Cafe PQ 2
*/
importPackage(Packages.client.inventory);
var isPq = true;
var minPlayers = 3, maxPlayers = 6;
var minLevel = 21, maxLevel = 120;
var entryMap = 191000000;
var exitMap = 193000000;
var recruitMap = 193000000;
var minMapId = 191000000;
var maxMapId = 191000001;
var eventMaps = [191000000, 191000001];
var eventTime = 45; // 45 minutes
var couponsNeeded = 350; // total of coupons to complete the event
var lobbyRange = [0, 0];
function init() {
setEventRequirements();
}
function setLobbyRange() {
return lobbyRange;
}
function setEventRequirements() {
var reqStr = "";
reqStr += "\r\n Number of players: ";
if(maxPlayers - minPlayers >= 1) reqStr += minPlayers + " ~ " + maxPlayers;
else reqStr += minPlayers;
reqStr += "\r\n Level range: ";
if(maxLevel - minLevel >= 1) reqStr += minLevel + " ~ " + maxLevel;
else reqStr += minLevel;
reqStr += "\r\n Time limit: ";
reqStr += eventTime + " minutes";
em.setProperty("party", reqStr);
}
function setEventExclusives(eim) {
var itemSet = [4001007];
eim.setExclusiveItems(itemSet);
}
function setEventRewards(eim) {
var itemSet, itemQty, evLevel, expStages;
evLevel = 1; //Rewards at clear PQ
itemSet = [4001009];
itemQty = [1];
eim.setEventRewards(evLevel, itemSet, itemQty);
expStages = [15000]; //bonus exp given on CLEAR stage signal
eim.setEventClearStageExp(expStages);
}
function getEligibleParty(party) { //selects, from the given party, the team that is allowed to attempt this event
var eligible = [];
var hasLeader = false;
if(party.size() > 0) {
var partyList = party.toArray();
for(var i = 0; i < party.size(); i++) {
var ch = partyList[i];
if(ch.getMapId() == recruitMap && ch.getLevel() >= minLevel && ch.getLevel() <= maxLevel) {
if(ch.isLeader()) hasLeader = true;
eligible.push(ch);
}
}
}
if(!(hasLeader && eligible.length >= minPlayers && eligible.length <= maxPlayers)) eligible = [];
return eligible;
}
function setup(level, lobbyid) {
var eim = em.newInstance("Lan2_" + lobbyid);
eim.setProperty("level", level);
eim.setProperty("stage", "0");
eim.setIntProperty("couponsNeeded", couponsNeeded);
var i;
for (i = 0; i < eventMaps.length; i++) {
var mapObj = eim.getInstanceMap(eventMaps[i]);
mapObj.resetPQ(level);
mapObj.toggleDrops();
mapObj.instanceMapForceRespawn();
}
respawnStages(eim);
eim.startEventTimer(eventTime * 60000);
setEventRewards(eim);
setEventExclusives(eim);
return eim;
}
function afterSetup(eim) {}
function respawnStages(eim) {
var i;
for (i = 0; i < eventMaps.length; i++) {
eim.getInstanceMap(eventMaps[i]).instanceMapRespawn();
}
eim.schedule("respawnStages", 15 * 1000);
}
function playerEntry(eim, player) {
var map = eim.getMapInstance(entryMap);
player.changeMap(map, map.getPortal(0));
}
function scheduledTimeout(eim) {
end(eim);
}
function playerUnregistered(eim, player) {}
function playerExit(eim, player) {
eim.unregisterPlayer(player);
player.changeMap(exitMap, 0);
}
function changedMap(eim, player, mapid) {
if (mapid < minMapId || mapid > maxMapId) {
if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
eim.unregisterPlayer(player);
end(eim);
}
else
eim.unregisterPlayer(player);
}
}
function changedLeader(eim, leader) {
var mapid = leader.getMapId();
if (!eim.isEventCleared() && (mapid < minMapId || mapid > maxMapId)) {
end(eim);
}
}
function playerDead(eim, player) {}
function playerRevive(eim, player) { // player presses ok on the death pop up.
if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
eim.unregisterPlayer(player);
end(eim);
}
else
eim.unregisterPlayer(player);
}
function playerDisconnected(eim, player) {
if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
eim.unregisterPlayer(player);
end(eim);
}
else
eim.unregisterPlayer(player);
}
function leftParty(eim, player) {
if (eim.isEventTeamLackingNow(false, minPlayers, player)) {
eim.unregisterPlayer(player);
end(eim);
}
else
eim.unregisterPlayer(player);
}
function disbandParty(eim) {
end(eim);
}
function monsterValue(eim, mobId) {
return 1;
}
function end(eim) {
var party = eim.getPlayers();
for (var i = 0; i < party.size(); i++) {
playerExit(eim, party.get(i));
}
eim.dispose();
}
function giveRandomEventReward(eim, player) {
eim.giveEventReward(player);
}
function clearPQ(eim) {
eim.stopEventTimer();
eim.setEventCleared();
eim.giveEventPlayersStageReward(1);
var i;
for (i = 0; i < eventMaps.length; i++) {
eim.getInstanceMap(eventMaps[i]).killAllMonstersNotFriendly();
eim.showClearEffect(eventMaps[i]);
}
}
function getDroppedQuantity(mob) {
if(mob.getLevel() > 65) {
return 5;
} else if(mob.getLevel() > 40) {
return 2;
} else {
return 1;
}
}
function monsterKilled(mob, eim) {
try {
if(eim.isEventCleared()) return;
var mapObj = mob.getMap();
var itemObj = new Item(4001007, 0, getDroppedQuantity(mob));
var dropper = eim.getPlayers().get(0);
mapObj.spawnItemDrop(mob, dropper, itemObj, mob.getPosition(), true, false);
} catch(err) {} // PQ not started yet
}
function allMonstersDead(eim) {}
function cancelSchedule() {}
function dispose(eim) {}

243
scripts/event/CafePQ_3.js Normal file
View File

@@ -0,0 +1,243 @@
/**
* @author: Ronan
* @event: Cafe PQ 3
*/
importPackage(Packages.client.inventory);
var isPq = true;
var minPlayers = 3, maxPlayers = 6;
var minLevel = 21, maxLevel = 120;
var entryMap = 192000000;
var exitMap = 193000000;
var recruitMap = 193000000;
var minMapId = 192000000;
var maxMapId = 192000001;
var eventMaps = [192000000, 192000001];
var eventTime = 45; // 45 minutes
var couponsNeeded = 350; // total of coupons to complete the event
var lobbyRange = [0, 0];
function init() {
setEventRequirements();
}
function setLobbyRange() {
return lobbyRange;
}
function setEventRequirements() {
var reqStr = "";
reqStr += "\r\n Number of players: ";
if(maxPlayers - minPlayers >= 1) reqStr += minPlayers + " ~ " + maxPlayers;
else reqStr += minPlayers;
reqStr += "\r\n Level range: ";
if(maxLevel - minLevel >= 1) reqStr += minLevel + " ~ " + maxLevel;
else reqStr += minLevel;
reqStr += "\r\n Time limit: ";
reqStr += eventTime + " minutes";
em.setProperty("party", reqStr);
}
function setEventExclusives(eim) {
var itemSet = [4001007];
eim.setExclusiveItems(itemSet);
}
function setEventRewards(eim) {
var itemSet, itemQty, evLevel, expStages;
evLevel = 1; //Rewards at clear PQ
itemSet = [4001013];
itemQty = [1];
eim.setEventRewards(evLevel, itemSet, itemQty);
expStages = [12000]; //bonus exp given on CLEAR stage signal
eim.setEventClearStageExp(expStages);
}
function getEligibleParty(party) { //selects, from the given party, the team that is allowed to attempt this event
var eligible = [];
var hasLeader = false;
if(party.size() > 0) {
var partyList = party.toArray();
for(var i = 0; i < party.size(); i++) {
var ch = partyList[i];
if(ch.getMapId() == recruitMap && ch.getLevel() >= minLevel && ch.getLevel() <= maxLevel) {
if(ch.isLeader()) hasLeader = true;
eligible.push(ch);
}
}
}
if(!(hasLeader && eligible.length >= minPlayers && eligible.length <= maxPlayers)) eligible = [];
return eligible;
}
function setup(level, lobbyid) {
var eim = em.newInstance("Lan3_" + lobbyid);
eim.setProperty("level", level);
eim.setProperty("stage", "0");
eim.setIntProperty("couponsNeeded", couponsNeeded);
var i;
for (i = 0; i < eventMaps.length; i++) {
var mapObj = eim.getInstanceMap(eventMaps[i]);
mapObj.resetPQ(level);
mapObj.toggleDrops();
mapObj.instanceMapForceRespawn();
}
respawnStages(eim);
eim.startEventTimer(eventTime * 60000);
setEventRewards(eim);
setEventExclusives(eim);
return eim;
}
function afterSetup(eim) {}
function respawnStages(eim) {
var i;
for (i = 0; i < eventMaps.length; i++) {
eim.getInstanceMap(eventMaps[i]).instanceMapRespawn();
}
eim.schedule("respawnStages", 15 * 1000);
}
function playerEntry(eim, player) {
var map = eim.getMapInstance(entryMap);
player.changeMap(map, map.getPortal(0));
}
function scheduledTimeout(eim) {
end(eim);
}
function playerUnregistered(eim, player) {}
function playerExit(eim, player) {
eim.unregisterPlayer(player);
player.changeMap(exitMap, 0);
}
function changedMap(eim, player, mapid) {
if (mapid < minMapId || mapid > maxMapId) {
if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
eim.unregisterPlayer(player);
end(eim);
}
else
eim.unregisterPlayer(player);
}
}
function changedLeader(eim, leader) {
var mapid = leader.getMapId();
if (!eim.isEventCleared() && (mapid < minMapId || mapid > maxMapId)) {
end(eim);
}
}
function playerDead(eim, player) {}
function playerRevive(eim, player) { // player presses ok on the death pop up.
if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
eim.unregisterPlayer(player);
end(eim);
}
else
eim.unregisterPlayer(player);
}
function playerDisconnected(eim, player) {
if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
eim.unregisterPlayer(player);
end(eim);
}
else
eim.unregisterPlayer(player);
}
function leftParty(eim, player) {
if (eim.isEventTeamLackingNow(false, minPlayers, player)) {
eim.unregisterPlayer(player);
end(eim);
}
else
eim.unregisterPlayer(player);
}
function disbandParty(eim) {
end(eim);
}
function monsterValue(eim, mobId) {
return 1;
}
function end(eim) {
var party = eim.getPlayers();
for (var i = 0; i < party.size(); i++) {
playerExit(eim, party.get(i));
}
eim.dispose();
}
function giveRandomEventReward(eim, player) {
eim.giveEventReward(player);
}
function clearPQ(eim) {
eim.stopEventTimer();
eim.setEventCleared();
eim.giveEventPlayersStageReward(1);
var i;
for (i = 0; i < eventMaps.length; i++) {
eim.getInstanceMap(eventMaps[i]).killAllMonstersNotFriendly();
eim.showClearEffect(eventMaps[i]);
}
}
function getDroppedQuantity(mob) {
if(mob.getLevel() > 65) {
return 3;
} else if(mob.getLevel() > 40) {
return 2;
} else {
return 1;
}
}
function monsterKilled(mob, eim) {
try {
if(eim.isEventCleared()) return;
var mapObj = mob.getMap();
var itemObj = new Item(4001007, 0, getDroppedQuantity(mob));
var dropper = eim.getPlayers().get(0);
mapObj.spawnItemDrop(mob, dropper, itemObj, mob.getPosition(), true, false);
} catch(err) {} // PQ not started yet
}
function allMonstersDead(eim) {}
function cancelSchedule() {}
function dispose(eim) {}

243
scripts/event/CafePQ_4.js Normal file
View File

@@ -0,0 +1,243 @@
/**
* @author: Ronan
* @event: Cafe PQ 4
*/
importPackage(Packages.client.inventory);
var isPq = true;
var minPlayers = 3, maxPlayers = 6;
var minLevel = 21, maxLevel = 120;
var entryMap = 195000000;
var exitMap = 193000000;
var recruitMap = 193000000;
var minMapId = 195000000;
var maxMapId = 195030000;
var eventMaps = [195000000, 195010000, 195020000, 195030000];
var eventTime = 45; // 45 minutes
var couponsNeeded = 450; // total of coupons to complete the event
var lobbyRange = [0, 0];
function init() {
setEventRequirements();
}
function setLobbyRange() {
return lobbyRange;
}
function setEventRequirements() {
var reqStr = "";
reqStr += "\r\n Number of players: ";
if(maxPlayers - minPlayers >= 1) reqStr += minPlayers + " ~ " + maxPlayers;
else reqStr += minPlayers;
reqStr += "\r\n Level range: ";
if(maxLevel - minLevel >= 1) reqStr += minLevel + " ~ " + maxLevel;
else reqStr += minLevel;
reqStr += "\r\n Time limit: ";
reqStr += eventTime + " minutes";
em.setProperty("party", reqStr);
}
function setEventExclusives(eim) {
var itemSet = [4001007];
eim.setExclusiveItems(itemSet);
}
function setEventRewards(eim) {
var itemSet, itemQty, evLevel, expStages;
evLevel = 1; //Rewards at clear PQ
itemSet = [4001011];
itemQty = [1];
eim.setEventRewards(evLevel, itemSet, itemQty);
expStages = [21000]; //bonus exp given on CLEAR stage signal
eim.setEventClearStageExp(expStages);
}
function getEligibleParty(party) { //selects, from the given party, the team that is allowed to attempt this event
var eligible = [];
var hasLeader = false;
if(party.size() > 0) {
var partyList = party.toArray();
for(var i = 0; i < party.size(); i++) {
var ch = partyList[i];
if(ch.getMapId() == recruitMap && ch.getLevel() >= minLevel && ch.getLevel() <= maxLevel) {
if(ch.isLeader()) hasLeader = true;
eligible.push(ch);
}
}
}
if(!(hasLeader && eligible.length >= minPlayers && eligible.length <= maxPlayers)) eligible = [];
return eligible;
}
function setup(level, lobbyid) {
var eim = em.newInstance("Lan4_" + lobbyid);
eim.setProperty("level", level);
eim.setProperty("stage", "0");
eim.setIntProperty("couponsNeeded", couponsNeeded);
var i;
for (i = 0; i < eventMaps.length; i++) {
var mapObj = eim.getInstanceMap(eventMaps[i]);
mapObj.resetPQ(level);
mapObj.toggleDrops();
mapObj.instanceMapForceRespawn();
}
respawnStages(eim);
eim.startEventTimer(eventTime * 60000);
setEventRewards(eim);
setEventExclusives(eim);
return eim;
}
function afterSetup(eim) {}
function respawnStages(eim) {
var i;
for (i = 0; i < eventMaps.length; i++) {
eim.getInstanceMap(eventMaps[i]).instanceMapRespawn();
}
eim.schedule("respawnStages", 15 * 1000);
}
function playerEntry(eim, player) {
var map = eim.getMapInstance(entryMap);
player.changeMap(map, map.getPortal(0));
}
function scheduledTimeout(eim) {
end(eim);
}
function playerUnregistered(eim, player) {}
function playerExit(eim, player) {
eim.unregisterPlayer(player);
player.changeMap(exitMap, 0);
}
function changedMap(eim, player, mapid) {
if (mapid < minMapId || mapid > maxMapId) {
if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
eim.unregisterPlayer(player);
end(eim);
}
else
eim.unregisterPlayer(player);
}
}
function changedLeader(eim, leader) {
var mapid = leader.getMapId();
if (!eim.isEventCleared() && (mapid < minMapId || mapid > maxMapId)) {
end(eim);
}
}
function playerDead(eim, player) {}
function playerRevive(eim, player) { // player presses ok on the death pop up.
if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
eim.unregisterPlayer(player);
end(eim);
}
else
eim.unregisterPlayer(player);
}
function playerDisconnected(eim, player) {
if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
eim.unregisterPlayer(player);
end(eim);
}
else
eim.unregisterPlayer(player);
}
function leftParty(eim, player) {
if (eim.isEventTeamLackingNow(false, minPlayers, player)) {
eim.unregisterPlayer(player);
end(eim);
}
else
eim.unregisterPlayer(player);
}
function disbandParty(eim) {
end(eim);
}
function monsterValue(eim, mobId) {
return 1;
}
function end(eim) {
var party = eim.getPlayers();
for (var i = 0; i < party.size(); i++) {
playerExit(eim, party.get(i));
}
eim.dispose();
}
function giveRandomEventReward(eim, player) {
eim.giveEventReward(player);
}
function clearPQ(eim) {
eim.stopEventTimer();
eim.setEventCleared();
eim.giveEventPlayersStageReward(1);
var i;
for (i = 0; i < eventMaps.length; i++) {
eim.getInstanceMap(eventMaps[i]).killAllMonstersNotFriendly();
eim.showClearEffect(eventMaps[i]);
}
}
function getDroppedQuantity(mob) {
if(mob.getLevel() > 65) {
return 5;
} else if(mob.getLevel() > 40) {
return 2;
} else {
return 1;
}
}
function monsterKilled(mob, eim) {
try {
if(eim.isEventCleared()) return;
var mapObj = mob.getMap();
var itemObj = new Item(4001007, 0, getDroppedQuantity(mob));
var dropper = eim.getPlayers().get(0);
mapObj.spawnItemDrop(mob, dropper, itemObj, mob.getPosition(), true, false);
} catch(err) {} // PQ not started yet
}
function allMonstersDead(eim) {}
function cancelSchedule() {}
function dispose(eim) {}

243
scripts/event/CafePQ_5.js Normal file
View File

@@ -0,0 +1,243 @@
/**
* @author: Ronan
* @event: Cafe PQ 5
*/
importPackage(Packages.client.inventory);
var isPq = true;
var minPlayers = 3, maxPlayers = 6;
var minLevel = 21, maxLevel = 120;
var entryMap = 196000000;
var exitMap = 193000000;
var recruitMap = 193000000;
var minMapId = 196000000;
var maxMapId = 196010000;
var eventMaps = [196000000, 196010000];
var eventTime = 45; // 45 minutes
var couponsNeeded = 500; // total of coupons to complete the event
var lobbyRange = [0, 0];
function init() {
setEventRequirements();
}
function setLobbyRange() {
return lobbyRange;
}
function setEventRequirements() {
var reqStr = "";
reqStr += "\r\n Number of players: ";
if(maxPlayers - minPlayers >= 1) reqStr += minPlayers + " ~ " + maxPlayers;
else reqStr += minPlayers;
reqStr += "\r\n Level range: ";
if(maxLevel - minLevel >= 1) reqStr += minLevel + " ~ " + maxLevel;
else reqStr += minLevel;
reqStr += "\r\n Time limit: ";
reqStr += eventTime + " minutes";
em.setProperty("party", reqStr);
}
function setEventExclusives(eim) {
var itemSet = [4001007];
eim.setExclusiveItems(itemSet);
}
function setEventRewards(eim) {
var itemSet, itemQty, evLevel, expStages;
evLevel = 1; //Rewards at clear PQ
itemSet = [4001012];
itemQty = [1];
eim.setEventRewards(evLevel, itemSet, itemQty);
expStages = [25000]; //bonus exp given on CLEAR stage signal
eim.setEventClearStageExp(expStages);
}
function getEligibleParty(party) { //selects, from the given party, the team that is allowed to attempt this event
var eligible = [];
var hasLeader = false;
if(party.size() > 0) {
var partyList = party.toArray();
for(var i = 0; i < party.size(); i++) {
var ch = partyList[i];
if(ch.getMapId() == recruitMap && ch.getLevel() >= minLevel && ch.getLevel() <= maxLevel) {
if(ch.isLeader()) hasLeader = true;
eligible.push(ch);
}
}
}
if(!(hasLeader && eligible.length >= minPlayers && eligible.length <= maxPlayers)) eligible = [];
return eligible;
}
function setup(level, lobbyid) {
var eim = em.newInstance("Lan5_" + lobbyid);
eim.setProperty("level", level);
eim.setProperty("stage", "0");
eim.setIntProperty("couponsNeeded", couponsNeeded);
var i;
for (i = 0; i < eventMaps.length; i++) {
var mapObj = eim.getInstanceMap(eventMaps[i]);
mapObj.resetPQ(level);
mapObj.toggleDrops();
mapObj.instanceMapForceRespawn();
}
respawnStages(eim);
eim.startEventTimer(eventTime * 60000);
setEventRewards(eim);
setEventExclusives(eim);
return eim;
}
function afterSetup(eim) {}
function respawnStages(eim) {
var i;
for (i = 0; i < eventMaps.length; i++) {
eim.getInstanceMap(eventMaps[i]).instanceMapRespawn();
}
eim.schedule("respawnStages", 15 * 1000);
}
function playerEntry(eim, player) {
var map = eim.getMapInstance(entryMap);
player.changeMap(map, map.getPortal(0));
}
function scheduledTimeout(eim) {
end(eim);
}
function playerUnregistered(eim, player) {}
function playerExit(eim, player) {
eim.unregisterPlayer(player);
player.changeMap(exitMap, 0);
}
function changedMap(eim, player, mapid) {
if (mapid < minMapId || mapid > maxMapId) {
if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
eim.unregisterPlayer(player);
end(eim);
}
else
eim.unregisterPlayer(player);
}
}
function changedLeader(eim, leader) {
var mapid = leader.getMapId();
if (!eim.isEventCleared() && (mapid < minMapId || mapid > maxMapId)) {
end(eim);
}
}
function playerDead(eim, player) {}
function playerRevive(eim, player) { // player presses ok on the death pop up.
if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
eim.unregisterPlayer(player);
end(eim);
}
else
eim.unregisterPlayer(player);
}
function playerDisconnected(eim, player) {
if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
eim.unregisterPlayer(player);
end(eim);
}
else
eim.unregisterPlayer(player);
}
function leftParty(eim, player) {
if (eim.isEventTeamLackingNow(false, minPlayers, player)) {
eim.unregisterPlayer(player);
end(eim);
}
else
eim.unregisterPlayer(player);
}
function disbandParty(eim) {
end(eim);
}
function monsterValue(eim, mobId) {
return 1;
}
function end(eim) {
var party = eim.getPlayers();
for (var i = 0; i < party.size(); i++) {
playerExit(eim, party.get(i));
}
eim.dispose();
}
function giveRandomEventReward(eim, player) {
eim.giveEventReward(player);
}
function clearPQ(eim) {
eim.stopEventTimer();
eim.setEventCleared();
eim.giveEventPlayersStageReward(1);
var i;
for (i = 0; i < eventMaps.length; i++) {
eim.getInstanceMap(eventMaps[i]).killAllMonstersNotFriendly();
eim.showClearEffect(eventMaps[i]);
}
}
function getDroppedQuantity(mob) {
if(mob.getLevel() > 65) {
return 5;
} else if(mob.getLevel() > 40) {
return 2;
} else {
return 1;
}
}
function monsterKilled(mob, eim) {
try {
if(eim.isEventCleared()) return;
var mapObj = mob.getMap();
var itemObj = new Item(4001007, 0, getDroppedQuantity(mob));
var dropper = eim.getPlayers().get(0);
mapObj.spawnItemDrop(mob, dropper, itemObj, mob.getPosition(), true, false);
} catch(err) {} // PQ not started yet
}
function allMonstersDead(eim) {}
function cancelSchedule() {}
function dispose(eim) {}

244
scripts/event/CafePQ_6.js Normal file
View File

@@ -0,0 +1,244 @@
/**
* @author: Ronan
* @event: Cafe PQ 6
*/
importPackage(Packages.client.inventory);
var isPq = true;
var minPlayers = 3, maxPlayers = 6;
var minLevel = 21, maxLevel = 120;
var entryMap = 197000000;
var exitMap = 193000000;
var recruitMap = 193000000;
var minMapId = 197000000;
var maxMapId = 197010000;
var eventMaps = [197000000, 197010000];
var eventTime = 45; // 45 minutes
var couponsNeeded = 300; // total of coupons to complete the event
var lobbyRange = [0, 0];
function init() {
setEventRequirements();
}
function setLobbyRange() {
return lobbyRange;
}
function setEventRequirements() {
var reqStr = "";
reqStr += "\r\n Number of players: ";
if(maxPlayers - minPlayers >= 1) reqStr += minPlayers + " ~ " + maxPlayers;
else reqStr += minPlayers;
reqStr += "\r\n Level range: ";
if(maxLevel - minLevel >= 1) reqStr += minLevel + " ~ " + maxLevel;
else reqStr += minLevel;
reqStr += "\r\n Time limit: ";
reqStr += eventTime + " minutes";
em.setProperty("party", reqStr);
}
function setEventExclusives(eim) {
var itemSet = [4001007];
eim.setExclusiveItems(itemSet);
}
function setEventRewards(eim) {
var itemSet, itemQty, evLevel, expStages;
evLevel = 1; //Rewards at clear PQ
itemSet = [4001010];
itemQty = [1];
eim.setEventRewards(evLevel, itemSet, itemQty);
expStages = [10000]; //bonus exp given on CLEAR stage signal
eim.setEventClearStageExp(expStages);
}
function getEligibleParty(party) { //selects, from the given party, the team that is allowed to attempt this event
var eligible = [];
var hasLeader = false;
if(party.size() > 0) {
var partyList = party.toArray();
for(var i = 0; i < party.size(); i++) {
var ch = partyList[i];
if(ch.getMapId() == recruitMap && ch.getLevel() >= minLevel && ch.getLevel() <= maxLevel) {
if(ch.isLeader()) hasLeader = true;
eligible.push(ch);
}
}
}
if(!(hasLeader && eligible.length >= minPlayers && eligible.length <= maxPlayers)) eligible = [];
return eligible;
}
function setup(level, lobbyid) {
var eim = em.newInstance("Lan6_" + lobbyid);
eim.setProperty("level", level);
eim.setProperty("stage", "0");
eim.setIntProperty("couponsNeeded", couponsNeeded);
var i;
for (i = 0; i < eventMaps.length; i++) {
var mapObj = eim.getInstanceMap(eventMaps[i]);
mapObj.resetPQ(level);
mapObj.toggleDrops();
mapObj.instanceMapForceRespawn();
}
respawnStages(eim);
eim.startEventTimer(eventTime * 60000);
setEventRewards(eim);
setEventExclusives(eim);
return eim;
}
function afterSetup(eim) {}
function respawnStages(eim) {
var i;
for (i = 0; i < eventMaps.length; i++) {
eim.getInstanceMap(eventMaps[i]).instanceMapRespawn();
}
eim.schedule("respawnStages", 15 * 1000);
}
function playerEntry(eim, player) {
var map = eim.getMapInstance(entryMap);
player.changeMap(map, map.getPortal(0));
}
function scheduledTimeout(eim) {
end(eim);
}
function playerUnregistered(eim, player) {}
function playerExit(eim, player) {
eim.unregisterPlayer(player);
player.changeMap(exitMap, 0);
}
function changedMap(eim, player, mapid) {
if (mapid < minMapId || mapid > maxMapId) {
if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
eim.unregisterPlayer(player);
end(eim);
}
else
eim.unregisterPlayer(player);
}
}
function changedLeader(eim, leader) {
var mapid = leader.getMapId();
if (!eim.isEventCleared() && (mapid < minMapId || mapid > maxMapId)) {
end(eim);
}
}
function playerDead(eim, player) {}
function playerRevive(eim, player) { // player presses ok on the death pop up.
if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
eim.unregisterPlayer(player);
end(eim);
}
else
eim.unregisterPlayer(player);
}
function playerDisconnected(eim, player) {
if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
eim.unregisterPlayer(player);
end(eim);
}
else
eim.unregisterPlayer(player);
}
function leftParty(eim, player) {
if (eim.isEventTeamLackingNow(false, minPlayers, player)) {
eim.unregisterPlayer(player);
end(eim);
}
else
eim.unregisterPlayer(player);
}
function disbandParty(eim) {
end(eim);
}
function monsterValue(eim, mobId) {
return 1;
}
function end(eim) {
var party = eim.getPlayers();
for (var i = 0; i < party.size(); i++) {
playerExit(eim, party.get(i));
}
eim.dispose();
}
function giveRandomEventReward(eim, player) {
eim.giveEventReward(player);
}
function clearPQ(eim) {
eim.stopEventTimer();
eim.setEventCleared();
eim.giveEventPlayersStageReward(1);
var i;
for (i = 0; i < eventMaps.length; i++) {
eim.getInstanceMap(eventMaps[i]).killAllMonstersNotFriendly();
eim.showClearEffect(eventMaps[i]);
}
}
function getDroppedQuantity(mob) {
if(mob.getLevel() > 65) {
return 5;
} else if(mob.getLevel() > 40) {
return 2;
} else {
return 1;
}
}
function monsterKilled(mob, eim) {
try {
if(eim.isEventCleared()) return;
var mapObj = mob.getMap();
var itemObj = new Item(4001007, 0, 1);
var dropper = eim.getPlayers().get(0);
itemObj.setQuantity(getDroppedQuantity(mob));
mapObj.spawnItemDrop(mob, dropper, itemObj, mob.getPosition(), true, false);
} catch(err) {} // PQ not started yet
}
function allMonstersDead(eim) {}
function cancelSchedule() {}
function dispose(eim) {}

View File

@@ -60,7 +60,7 @@ function action(mode, type, selection) {
if(selection == 0)
cm.gainMeso(-1500);
cm.getPlayer().saveLocation("FLORINA");
cm.warp(110000000);
cm.warp(110000000, "st00");
}
cm.dispose();
}

View File

@@ -23,10 +23,113 @@
/*
NPC ID: 1052013
NPC NAME: Computer
@author Vcoc
@author Ronan
*/
var status;
var pqArea;
function start() {
cm.sendOk("MapleStory.exe stopped working... Please, restart the game.");
cm.dispose();
}
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(cm.getMapId() != 193000000) {
var eim = cm.getEventInstance();
if(status == 0) {
if(!eim.isEventCleared()) {
var couponsNeeded = eim.getIntProperty("couponsNeeded");
if(cm.isEventLeader()) {
if(cm.haveItem(4001007, couponsNeeded)) {
cm.sendNext("Your team collected all the needed coupons, good work!");
cm.gainItem(4001007, couponsNeeded);
eim.clearPQ();
cm.dispose();
return;
} else {
cm.sendYesNo("Your team must collect #r" + couponsNeeded + "#k coupons to complete this event. Talk to me when you have the right amount in hands... Or you want to #bquit now#k? Note that if you quit now #ryour team will be forced to quit#k as well.");
}
} else {
cm.sendYesNo("Your team must collect #r" + couponsNeeded + "#k coupons to complete this event. Let your leader talk to me with the right amount in hands... Or you want to #bquit now#k? Note that if you quit now your team #rmay become undermanned#k to complete this event.");
}
} else {
if(!eim.giveEventReward(cm.getPlayer())) {
cm.sendOk("Please make a room on your ETC inventory to receive the prize.");
cm.dispose();
} else {
cm.warp(193000000);
cm.dispose();
}
}
} else if(status == 1) {
cm.warp(193000000);
cm.dispose();
}
} else {
var levels = ["#m190000000#", "#m191000000#", "#m192000000#", "#m195000000#", "#m196000000#", "#m197000000#"];
if (status == 0) {
var sendStr = "Premium Road is a place of multiple areas with monsters of most various types gathered together, an ideal place for grinding EXP and erasers for the #p1052014#. Select the area you are willing to face:\r\n\r\n#b";
for(var i = 0; i < 6; i++) {
sendStr += "#L" + i + "#" + levels[i] + "#l\r\n";
}
cm.sendSimple(sendStr);
} else if (status == 1) {
pqArea = selection + 1;
em = cm.getEventManager("CafePQ_" + pqArea);
if(em == null) {
cm.sendOk("The CafePQ_" + pqArea + "has encountered an error.");
cm.dispose();
return;
}
cm.sendSimple("#e#b<Party Quest: Premium Road - " + levels[selection] + ">\r\n#k#n" + em.getProperty("party") + "\r\n\r\nThe #p1052014# operates differently than the common ones. They do not use mesos or gachapon tickets, rather #rERASERS#k, that can be obtained by completing the missions held on the Premium Road. To go there, you must find partners and attend to a Party Quest. When teamed up and ready, have your #bparty leader#k talk to me.#b\r\n#L0#I want to participate in the party quest.\r\n#L1#I want to find party members.\r\n#L2#I would like to hear more details.");
} else if (status == 2) {
if (selection == 0) {
if (cm.getParty() == null) {
cm.sendOk("You can participate in the party quest only if you are in a party.");
cm.dispose();
} else if(!cm.isLeader()) {
cm.sendOk("Your party leader must talk to me to start this party quest.");
cm.dispose();
} else {
var eli = em.getEligibleParty(cm.getParty());
if(eli.size() > 0) {
if(!em.startInstance(cm.getParty(), cm.getPlayer().getMap(), 1)) {
cm.sendOk("Another party has already entered the #rParty Quest#k in this channel. Please try another channel, or wait for the current party to finish.");
}
}
else {
cm.sendOk("You cannot start this party quest yet, because either your party is not in the range size, some of your party members are not eligible to attempt it or they are not in this map. If you're having trouble finding party members, try Party Search.");
}
cm.dispose();
}
} else if (selection == 1) {
cm.sendOk("Try using a Super Megaphone or asking your buddies or guild to join!");
cm.dispose();
} else {
cm.sendOk("#e#b<Party Quest: Premium Road>#k#n\r\nOn the maps ahead, you will face many common-leveled mobs to face on. Grind all the required coupons from them and give it to me. All members will then receive a eraser, corresponding with the level faced. Insert on the machine #bmany of the same eraser or multiple different ones#k to have a better chance on greater prizes.");
cm.dispose();
}
}
}
}
}

View File

@@ -20,13 +20,198 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*
NPC ID: 1052014
NPC NAME: Vending Machine
@author Vcoc
/**
* @author: Ronan
* @npc: Vending Machine
* @map: 193000000 - Premium Road - Kerning City Internet Cafe
* @func: Cafe PQ Rewarder
*/
var status;
var itemSet_lv6 = [1442046, 1432018, 1102146, 1102145, 2022094, 2022544, 2022123, 2022310, 2040727, 2041058, 2040817, 4000030, 4003005, 4003000, 4011007, 4021009, 4011008, 3010098];
var itemQty_lv6 = [1, 1, 1, 1, 50, 20, 30, 30, 1, 1, 1, 50, 50, 50, 1, 1, 4, 1];
var itemSet_lv5 = [1382015, 1382016, 1442044, 1382035, 2022310, 2022068, 2022069, 2022190, 2022047, 2040727, 2040924, 2040501, 4000030, 4003005, 4003000, 4011003, 4011006, 4021004, 3010099];
var itemQty_lv5 = [1, 1, 1, 1, 30, 70, 70, 50, 50, 1, 1, 1, 30, 30, 40, 3, 2, 3, 1];
var itemSet_lv4 = [1332029, 1472027, 1462032, 1492019, 2022045, 2022048, 2022094, 2022123, 2022058, 2041304, 2041019, 2040826, 2040758, 4000030, 4003005, 4003000, 4010007, 4011003, 4021003, 3010016, 3010017];
var itemQty_lv4 = [1, 1, 1, 1, 70, 60, 40, 30, 100, 1, 1, 1, 1, 15, 15, 30, 8, 1, 1, 1, 1];
var itemSet_lv3 = [1302058, 1372008, 1422030, 1422031, 1022082, 2022279, 2022120, 2001001, 2001002, 2022071, 2022189, 2040914, 2041001, 2041041, 2041308, 4031203, 4000030, 4003005, 4003000, 4010004, 4010006, 4020000, 4020006, 3010002, 3010003];
var itemQty_lv3 = [1, 1, 1, 1, 1, 100, 70, 70, 70, 40, 40, 1, 1, 1, 1, 15, 10, 15, 12, 5, 5, 5, 5, 1, 1];
var itemSet_lv2 = [1022073, 1012098, 1012101, 1012102, 1012103, 2022055, 2022056, 2022103, 2020029, 2020032, 2020031, 2022191, 2022016, 2043300, 2043110, 2043800, 2041001, 2040903, 4031203, 4000021, 4003005, 4003000, 4003001, 4010000, 4010001, 4010003, 4010004, 4020004, 3010004, 3010005];
var itemQty_lv2 = [1, 1, 1, 1, 1, 70, 70, 70, 70, 100, 100, 100, 100, 1, 1, 1, 1, 1, 7, 10, 12, 10, 3, 8, 8, 5, 5, 7, 1, 1];
var itemSet_lv1 = [1302021, 1302024, 1302033, 1082150, 1002419, 2022053, 2022054, 2020032, 2022057, 2022096, 2022097, 2022192, 2020030, 2010005, 2022041, 2030000, 2040100, 2040004, 2040207, 2048004, 4031203, 4000021, 4003005, 4003000, 4003001, 4010000, 4010001, 4010002, 4010005, 4020004];
var itemQty_lv1 = [1, 1, 1, 1, 1, 30, 30, 30, 30, 30, 40, 40, 40, 80, 80, 20, 1, 1, 1, 1, 3, 5, 2, 2, 1, 3, 3, 3, 3, 3];
var levels = ["Tier 1", "Tier 2", "Tier 3", "Tier 4", "Tier 5", "Tier 6"];
var tickets = [0, 0, 0, 0, 0, 0];
var currentTier;
var curItemQty;
var curItemSel;
var advance = true;
function start() {
cm.sendOk("At the moment, the machine is empty...");
cm.dispose();
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 && advance)
status++;
else
status--;
advance = true;
if(status == 0) {
cm.sendNext("This is the vending machine of the Internet Cafe. Place your erasers earned throughout the quests to redeem a prize. You can place #bany amount of erasers#k, however take note that bigger shots improves the reward possibilities!");
} else if(status == 1) {
var sendStr;
currentTier = getRewardTier();
if(currentTier >= 0) sendStr = "With the erasers you have currently placed, you can retrieve a #r" + levels[currentTier] + "#k prize. Place erasers:";
else sendStr = "You have placed no erasers yet. Place erasers:";
var listStr = "";
for(var i = 0; i < tickets.length; i++) {
listStr += "#b#L" + i + "##t" + (4001009 + i) + "##k";
if(tickets[i] > 0) listStr += " - " + tickets[i] + " erasers";
listStr += "#l\r\n";
}
cm.sendSimple(sendStr + "\r\n\r\n" + listStr + "#r#L6#Retrieve a prize!#l#k\r\n");
} else if(status == 2) {
if(selection == 6) {
if(currentTier < 0) {
cm.sendPrev("You have set no erasers. Insert at least one to claim a prize.");
advance = false;
} else {
givePrize();
cm.dispose();
}
} else {
var tickSel = 4001009 + selection;
curItemQty = cm.getItemQuantity(tickSel);
curItemSel = selection;
if(curItemQty > 0) {
cm.sendGetText("How many of #b#t" + tickSel + "##k do you want to insert on the machine? (#r" + curItemQty + "#k available)#k");
} else {
cm.sendPrev("You have got #rnone#k of #b#t" + tickSel + "##k to insert on the machine. Click '#rBack#k' to return to the main interface.");
advance = false;
}
}
} else if(status == 3) {
var text = cm.getText();
try {
var placedQty = parseInt(text);
if(isNaN(placedQty) || placedQty < 0) throw true;
if(placedQty > curItemQty) {
cm.sendPrev("You cannot insert the given amount of erasers (#r" + curItemQty + "#k available). Click '#rBack#k' to return to the main interface.");
advance = false;
} else {
tickets[curItemSel] = placedQty;
cm.sendPrev("Operation succeeded. Click '#rBack#k' to return to the main interface.");
advance = false;
}
} catch(err) {
cm.sendPrev("You must enter a positive number of erasers to insert. Click '#rBack#k' to return to the main interface.");
advance = false;
}
status = 2;
} else {
cm.dispose();
}
}
}
function getRewardTier() {
var points = getPoints();
if(points <= 6) {
if(points <= 0) return -1;
else return 0;
}
if(points >= 46) return 5;
return Math.floor((points - 6) / 8);
}
function getPoints() {
var points = 0;
for(var i = 0; i < tickets.length; i++) {
if(tickets[i] <= 0) continue;
points += (6 + ((tickets[i] - 1) * getTicketMultiplier(i))); //6 from uniques + rest from each ticket difficulty
}
return points;
}
function getTicketMultiplier(ticket) {
if(ticket == 1 || ticket == 3) return 3;
else return 1;
}
function givePrize() {
var lvTarget, lvQty;
if(currentTier == 0) {
lvTarget = itemSet_lv1;
lvQty = itemQty_lv1;
} else if(currentTier == 1) {
lvTarget = itemSet_lv2;
lvQty = itemQty_lv2;
} else if(currentTier == 2) {
lvTarget = itemSet_lv3;
lvQty = itemQty_lv3;
} else if(currentTier == 3) {
lvTarget = itemSet_lv4;
lvQty = itemQty_lv4;
} else if(currentTier == 4) {
lvTarget = itemSet_lv5;
lvQty = itemQty_lv5;
} else {
lvTarget = itemSet_lv6;
lvQty = itemQty_lv6;
}
if(!hasRewardSlot(lvTarget, lvQty)) {
cm.sendOk("Check for an available space on your inventory before retrieving a prize.");
} else {
var rnd = Math.floor(Math.random() * lvTarget.length);
for(var i = 0; i < tickets.length; i++) {
cm.gainItem(4001009 + i, -1 * tickets[i]);
}
cm.gainItem(lvTarget[rnd], lvQty[rnd]);
}
}
function hasRewardSlot(lvTarget, lvQty) {
for(var i = 0; i < lvTarget.length; i++) {
if(!cm.canHold(lvTarget[i], lvQty[i])) {
return false;
}
}
return true;
}

View File

@@ -20,13 +20,93 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*
NPC ID: 1052015
NPC NAME: Billy
@author Vcoc
/**
* @author: Ronan
* @npc: Billy
* @map: 193000000 - Premium Road - Kerning City Internet Cafe
* @func: Cafe PQ Reward Announcer
*/
var status;
var itemSet_lv6 = [1442046, 1432018, 1102146, 1102145, 2022094, 2022544, 2022123, 2022310, 2040727, 2041058, 2040817, 4000030, 4003005, 4003000, 4011007, 4021009, 4011008, 3010098];
var itemQty_lv6 = [1, 1, 1, 1, 50, 20, 30, 30, 1, 1, 1, 50, 50, 50, 1, 1, 4, 1];
var itemSet_lv5 = [1382015, 1382016, 1442044, 1382035, 2022310, 2022068, 2022069, 2022190, 2022047, 2040727, 2040924, 2040501, 4000030, 4003005, 4003000, 4011003, 4011006, 4021004, 3010099];
var itemQty_lv5 = [1, 1, 1, 1, 30, 70, 70, 50, 50, 1, 1, 1, 30, 30, 40, 3, 2, 3, 1];
var itemSet_lv4 = [1332029, 1472027, 1462032, 1492019, 2022045, 2022048, 2022094, 2022123, 2022058, 2041304, 2041019, 2040826, 2040758, 4000030, 4003005, 4003000, 4010007, 4011003, 4021003, 3010016, 3010017];
var itemQty_lv4 = [1, 1, 1, 1, 70, 60, 40, 30, 100, 1, 1, 1, 1, 15, 15, 30, 8, 1, 1, 1, 1];
var itemSet_lv3 = [1302058, 1372008, 1422030, 1422031, 1022082, 2022279, 2022120, 2001001, 2001002, 2022071, 2022189, 2040914, 2041001, 2041041, 2041308, 4031203, 4000030, 4003005, 4003000, 4010004, 4010006, 4020000, 4020006, 3010002, 3010003];
var itemQty_lv3 = [1, 1, 1, 1, 1, 100, 70, 70, 70, 40, 40, 1, 1, 1, 1, 15, 10, 15, 12, 5, 5, 5, 5, 1, 1];
var itemSet_lv2 = [1022073, 1012098, 1012101, 1012102, 1012103, 2022055, 2022056, 2022103, 2020029, 2020032, 2020031, 2022191, 2022016, 2043300, 2043110, 2043800, 2041001, 2040903, 4031203, 4000021, 4003005, 4003000, 4003001, 4010000, 4010001, 4010003, 4010004, 4020004, 3010004, 3010005];
var itemQty_lv2 = [1, 1, 1, 1, 1, 70, 70, 70, 70, 100, 100, 100, 100, 1, 1, 1, 1, 1, 7, 10, 12, 10, 3, 8, 8, 5, 5, 7, 1, 1];
var itemSet_lv1 = [1302021, 1302024, 1302033, 1082150, 1002419, 2022053, 2022054, 2020032, 2022057, 2022096, 2022097, 2022192, 2020030, 2010005, 2022041, 2030000, 2040100, 2040004, 2040207, 2048004, 4031203, 4000021, 4003005, 4003000, 4003001, 4010000, 4010001, 4010002, 4010005, 4020004];
var itemQty_lv1 = [1, 1, 1, 1, 1, 30, 30, 30, 30, 30, 40, 40, 40, 80, 80, 20, 1, 1, 1, 1, 3, 5, 2, 2, 1, 3, 3, 3, 3, 3];
var levels = ["Tier 1", "Tier 2", "Tier 3", "Tier 4", "Tier 5", "Tier 6"];
function start() {
cm.sendOk("Do you keep seeing blue screen? Ahhh... then restart the computer.");
cm.dispose();
}
status = -1;
action(1, 0, 0);
}
function action(mode, type, selection) {
if (mode == -1) {
cm.dispose();
} else {
if (mode == 0 && status == 0) {
cm.dispose();
return;
}
if (mode == 1)
status++;
else
status--;
if (status == 0) {
var sendStr = "The #bInternet Cafe Party Quest#k rewards players with ticket-like #bfigure erasers#k, that can be used on the vending machine to retrieve prizes. By further increasing the stakes, one can get better prizes, separated by #rtiers#k.\r\n\r\nThe possible rewards for each tier are depicted here:\r\n\r\n#b";
for(var i = 0; i < 6; i++) {
sendStr += "#L" + i + "#" + levels[i] + "#l\r\n";
}
cm.sendSimple(sendStr);
} else if(status == 1) {
var lvTarget, lvQty;
if(selection == 0) {
lvTarget = itemSet_lv1;
lvQty = itemQty_lv1;
} else if(selection == 1) {
lvTarget = itemSet_lv2;
lvQty = itemQty_lv2;
} else if(selection == 2) {
lvTarget = itemSet_lv3;
lvQty = itemQty_lv3;
} else if(selection == 3) {
lvTarget = itemSet_lv4;
lvQty = itemQty_lv4;
} else if(selection == 4) {
lvTarget = itemSet_lv5;
lvQty = itemQty_lv5;
} else {
lvTarget = itemSet_lv6;
lvQty = itemQty_lv6;
}
var sendStr = "The following items are being awarded at #b" + levels[selection] + "#k:\r\n\r\n";
for(var i = 0; i < lvTarget.length; i++) {
sendStr += " #L" + i + "# #i" + lvTarget[i] + "# #t" + lvTarget[i] + "#";
if(lvQty[i] > 1) sendStr += " (" + lvQty[i] + ")";
sendStr += "#l\r\n";
}
cm.sendPrev(sendStr);
} else if(status == 2) {
cm.dispose();
}
}
}

View File

@@ -19,34 +19,52 @@
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/>.
*/
/* Door of Dimension
/* 1061009 - Door of Dimension
Enter 3rd job event
*/
function start() {
if (cm.getPlayer().gotPartyQuestItem("JBP") && !cm.haveItem(4031059)) {
if (cm.getPlayer().getMapId() == 105070001 && (cm.getJobId() >= 110 && cm.getJobId() <= 130))
cm.warp(108010300);
else if (cm.getPlayer().getMapId() == 105040305 && (cm.getJobId() >= 310 && cm.getJobId() <= 320))
cm.warp(108010100);
else if (cm.getPlayer().getMapId() == 100040106 && (cm.getJobId() >= 210 && cm.getJobId() <= 230))
cm.warp(108010200);
else if (cm.getPlayer().getMapId() == 107000402 && (cm.getJobId() >= 410 && cm.getJobId() <= 420))
cm.warp(108010400);
else if (cm.getPlayer().getMapId() == 105070200 && (cm.getJobId() >= 510 && cm.getJobId() <= 520))
cm.warp(108010500);
}
cm.dispose();
/*20 minutes*/
function jobString(niche) {
if(niche == 1) return "warrior";
else if(niche == 2) return "magician";
else if(niche == 3) return "bowman";
else if(niche == 4) return "thief";
else if(niche == 5) return "pirate";
return "beginner";
}
/*
function canEnterDimensionMap(mapid, jobid) {
if (mapid == 105070001 && (jobid >= 110 && jobid <= 130))
return true;
else if (mapid == 105040305 && (jobid >= 310 && jobid <= 320))
return true;
else if (mapid == 100040106 && (jobid >= 210 && jobid <= 230))
return true;
else if (mapid == 107000402 && (jobid >= 410 && jobid <= 420))
return true;
else if (mapid == 105070200 && (jobid >= 510 && jobid <= 520))
return true;
return false;
}
1061010 - Crystal NPC
*/
/*var em = cm.getEventManager("3rdjob");
function start() {
if (canEnterDimensionMap(cm.getMapId(), cm.getJob().getId()) && cm.getPlayer().gotPartyQuestItem("JBP") && !cm.haveItem(4031059)) {
var js = jobString(cm.getPlayer().getJob().getJobNiche());
var em = cm.getEventManager("3rdJob_" + js);
if (em == null)
cm.sendOk("Sorry, but 3rd job advancement is closed.");
else
em.newInstance(cm.getPlayer().getName()).registerPlayer(cm.getPlayer());
*/
cm.sendOk("Sorry, but 3rd job advancement (" + js + ") is closed.");
else {
if (em.getProperty("noEntry") == "false") {
var eim = em.newInstance("3rdjob_" + js);
eim.registerPlayer(cm.getPlayer());
}
else {
cm.sendOk("Someone else is already challenging the clone. Please wait until the area is cleared.");
}
}
}
cm.dispose();
}

View File

@@ -80,9 +80,10 @@ function action(mode, type, selection) {
cm.dispose();
} else
access = true;
} if (access) {
}
if (access) {
cm.getPlayer().saveLocation("FLORINA");
cm.warp(110000000);
cm.warp(110000000, "st00");
cm.dispose();
}
} else if (status == 3)

View File

@@ -22,7 +22,7 @@ function action(mode, type, selection) {
sel = selection;
cm.sendNext("Ok #h #, I will send you to the platform for #m" + (200000110 + (sel * 10)) + "#");
}else if (status == 1) {
cm.warp(200000110 + (sel * 10));
cm.warp(200000110 + (sel * 10), "west00");
cm.dispose();
}
}

47
scripts/npc/2012012.js Normal file
View File

@@ -0,0 +1,47 @@
/*
This file is part of the OdinMS Maple Story Server
Copyright (C) 2008 Patrick Huy <patrick.huy@frz.cc>
Matthias Butz <matze@odinms.de>
Jan Christian Meyer <vimes@odinms.de>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License 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;
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) {
cm.sendOk("Can you help me find the Ancient Book? I lost it somewhere in El Nath...");
cm.dispose();
}
}
}

View File

@@ -95,7 +95,7 @@ function action(mode, type, selection){
if (sel == 0){
if (cm.getPlayer().getLevel() >= 70 && cm.getJobId() % 10 == 0){
if (status == 0)
cm.sendYesNo("Welcome. I'm #b#p2020011##k, the chief of all thieves, ready to share my street knowledge and hard knock life to those willing to listen. You seem ready to make the leap forward, the one ready to take on the challenges of the 3rd job advancement. Too many thieves have come and gone, unable to meet the standards of achieving the 3rd job advancement. What about you? Are you ready to be tested and make the 3th job advancemente?");
cm.sendYesNo("Welcome. I'm #b#p2020011##k, the chief of all thieves, ready to share my street knowledge and hard knock life to those willing to listen. You seem ready to make the leap forward, the one ready to take on the challenges of the 3rd job advancement. Too many thieves have come and gone, unable to meet the standards of achieving the 3rd job advancement. What about you? Are you ready to be tested and make the 3th job advancement?");
else if (status == 1){
cm.getPlayer().setPartyQuestItemObtained("JB3");
cm.sendNext("Good. You will be tested on two important aspects of the thief: strength and wisdom. I'll now explain to you the physical half of the test. Remember #b#p1052001##k from Kerning City? Go see him, and he'll give you the details on the first half of the test. Please complete the mission, and get #b#t4031057##k from #p1052001#.");

View File

@@ -259,25 +259,26 @@ function action(mode, type, selection) {
else {
if (!cm.haveItem(mats, matQty * qty)) complete=false;
}
}
if (!complete)
cm.sendOk("Hold it, I can't finish that without all of the proper materials. Bring them first, then we'll talk.");
else {
if (mats instanceof Array) {
for (var i = 0; i < mats.length; i++){
cm.gainItem(mats[i], -matQty[i] * qty);
if (!complete)
cm.sendOk("Hold it, I can't finish that without all of the proper materials. Bring them first, then we'll talk.");
else {
if (mats instanceof Array) {
for (var i = 0; i < mats.length; i++){
cm.gainItem(mats[i], -matQty[i] * qty);
}
}
else
cm.gainItem(mats, -matQty * qty);
if (cost > 0)
cm.gainMeso(-cost * qty);
cm.gainItem(recvItem, recvQty);
cm.sendOk("All done. If you need anything else, you know where to find me.");
}
else
cm.gainItem(mats, -matQty * qty);
if (cost > 0)
cm.gainMeso(-cost * qty);
cm.gainItem(recvItem, recvQty);
cm.sendOk("All done. If you need anything else, you know where to find me.");
}
cm.dispose();
}
}

View File

@@ -200,10 +200,14 @@ function action(mode, type, selection) {
if(!cm.canHold(item, 1)) {
cm.sendOk("Verify for a slot in your inventory first.");
cm.dispose();
return;
}
else if (cm.getMeso() < cost)
{
cm.sendOk("I'm afraid my fees are non-negotiable.");
cm.dispose();
return;
}
else
{

View File

@@ -75,9 +75,9 @@ function action(mode, type, selection) {
} else
access = true;
}
if (access == true) {
if (access == true) {
cm.getPlayer().saveLocation("FLORINA");
cm.warp(110000000);
cm.warp(110000000, "st00");
cm.dispose();
}
} else if (status == 3)

View File

@@ -183,27 +183,27 @@ function action(mode, type, selection) {
}
else {
if (!cm.haveItem(mats, matQty * qty))complete=false;
}
}
if (!complete)
cm.sendOk("Please check and see if you have all the necessary items with you. If so, then please check your etc. inventory and see if you have an empty space.");
else {
if (mats instanceof Array) {
for (var i = 0; i < mats.length; i++){
cm.gainItem(mats[i], -matQty[i] * qty);
if (!complete)
cm.sendOk("Please check and see if you have all the necessary items with you. If so, then please check your etc. inventory and see if you have an empty space.");
else {
if (mats instanceof Array) {
for (var i = 0; i < mats.length; i++){
cm.gainItem(mats[i], -matQty[i] * qty);
}
}
else
cm.gainItem(mats, -matQty * qty);
if (cost > 0)
cm.gainMeso(-cost * qty);
cm.gainItem(recvItem, recvQty);
cm.sendOk("There, finished. What do you think, a piece of art, isn't it? Well, if you need anything else, you know where to find me.");
}
else
cm.gainItem(mats, -matQty * qty);
if (cost > 0)
cm.gainMeso(-cost * qty);
cm.gainItem(recvItem, recvQty);
cm.sendOk("There, finished. What do you think, a piece of art, isn't it? Well, if you need anything else, you know where to find me.");
}
cm.dispose();
}
}

View File

@@ -1,8 +1,8 @@
/*
This file is part of the OdinMS Maple Story Server
This file is part of the OdinMS Maple Story Server
Copyright (C) 2008 Patrick Huy <patrick.huy@frz.cc>
Matthias Butz <matze@odinms.de>
Jan Christian Meyer <vimes@odinms.de>
Matthias Butz <matze@odinms.de>
Jan Christian Meyer <vimes@odinms.de>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
@@ -13,13 +13,20 @@
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.
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/>.
*/
/*
NPC NAME: Cesar (2)
NPC ID: 2101014
Author: Vcoc
Function: AriantPQ
*/
status = -1;
var sel;
empty = [false, false, false];
@@ -36,7 +43,7 @@ function start() {
if(cm.getPlayerCount(980010101 + (i * 100)) > 0)
continue;
else
text += "\r\n#L" + i + "# Battle Arena " + (i + 1) + "([" + cm.getPlayerCount(980010100 + (i * 100)) + "/" + cm.getPlayer().getAriantSlotsRoom(i) + "] users" + cm.getPlayer().getAriantRoomLeaderName(i) + "/Lv 20~29 )#l";
text += "\r\n#L" + i + "# Battle Arena " + (i + 1) + "([" + cm.getPlayerCount(980010100 + (i * 100)) + "/" + cm.getPlayer().getAriantSlotsRoom(i) + "] users: " + cm.getPlayer().getAriantRoomLeaderName(i) + ")#l";
else{
empty[i] = true;
text += "\r\n#L" + i + "# Battle Arena " + (i + 1) + "( Empty )#l";
@@ -95,7 +102,7 @@ function action(mode, type, selection){
}else if (status == 2)
cm.sendNextPrev("It's simple. If you absorb the power of the monster #b#t2270002##k, then you'll make #b#t4031868##k, which is something Queen Areda loves. The combatant with the most jewels wins the match. It's actually a smart idea to prevent others from absorbing in order to win.");
else if (status == 3)
cm.sendNextPrev("One thing. #rYou may not use pets for this.#k Understood?~!");
cm.sendNextPrev("One thing. Using #b#t2100067##k, you can steal #b#t4031868##k from your enemies. Warning: #rYou may not use pets for this.#k Understood?!");
else if (status == 4)
cm.dispose();
}

View File

@@ -1,8 +1,8 @@
/*
This file is part of the OdinMS Maple Story Server
This file is part of the OdinMS Maple Story Server
Copyright (C) 2008 Patrick Huy <patrick.huy@frz.cc>
Matthias Butz <matze@odinms.de>
Jan Christian Meyer <vimes@odinms.de>
Matthias Butz <matze@odinms.de>
Jan Christian Meyer <vimes@odinms.de>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
@@ -13,13 +13,20 @@
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.
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/>.
*/
/*
NPC NAME: Cesar (3)
NPC ID: 2101017
Author: Vcoc
Function: AriantPQ
*/
importPackage(Packages.tools);
importPackage(Packages.client);
@@ -55,10 +62,10 @@ function action(mode, type, selection){
if(sel == 0){
if(cm.haveItem(2270002))
cm.sendNext("You already have #b#t2270002##k.");
else if(cm.canHold(2270002) && cm.canHold(2100067)){
if(cm.haveItem(2100067))
cm.removeAll(2100067);
cm.gainItem(2270002, 32);
else if(cm.canHold(2270002) && cm.canHold(2100067)){
if(cm.haveItem(2100067))
cm.removeAll(2100067);
cm.gainItem(2270002, 50);
cm.gainItem(2100067, 5);
cm.sendNext("Now lower the HP of the monsters, and use #b#t2270002##k to absorb their power!");
}else
@@ -70,6 +77,9 @@ function action(mode, type, selection){
cm.sendYesNo("Are you sure you want to leave?"); //No GMS like.
} else if (status == 1){
if(type == 1){
cm.removeAll(4031868);
cm.removeAll(2270002);
cm.removeAll(2100067);
cm.warp(980010020);
cm.dispose();
return;
@@ -78,7 +88,7 @@ function action(mode, type, selection){
} else if (status == 2)
cm.sendNextPrev("It's simple. If you absorb the power of the monster #b#t2270002##k, then you'll make #b#t4031868##k, which is something Queen Areda loves. The combatant with the most jewels wins the match. It's actually a smart idea to prevent others from absorbing in order to win.");
else if (status == 3)
cm.sendNextPrev("One thing. #rYou may not use pets for this.#k Understood?~!");
cm.sendNextPrev("One thing. Using #b#t2100067##k, you can steal #b#t4031868##k from your enemies. Warning: #rYou may not use pets for this.#k Understood?!");
else if (status == 4)
cm.dispose();
}else{

View File

@@ -1,8 +1,8 @@
/*
This file is part of the OdinMS Maple Story Server
This file is part of the OdinMS Maple Story Server
Copyright (C) 2008 Patrick Huy <patrick.huy@frz.cc>
Matthias Butz <matze@odinms.de>
Jan Christian Meyer <vimes@odinms.de>
Matthias Butz <matze@odinms.de>
Jan Christian Meyer <vimes@odinms.de>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
@@ -13,13 +13,20 @@
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.
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/>.
*/
/*
NPC NAME: Cesar (1)
NPC ID: 2101018
Author: Vcoc
Function: AriantPQ
*/
status = -1;
function start() {
if((cm.getPlayer().getLevel() < 19 || cm.getPlayer().getLevel() > 30) && !cm.getPlayer().isGM()){
@@ -33,7 +40,7 @@ function start() {
function action(mode, type, selection){
status++;
if (status == 4){
cm.getPlayer().saveLocation("ARIANT");
cm.getPlayer().saveLocation("MIRROR");
cm.warp(980010000, 3);
cm.dispose();
}

View File

@@ -96,7 +96,8 @@ function action(mode, type, selection) {
var mapobj = eim.getMapInstance(926100401);
var bossobj = MapleLifeFactory.getMonster(9300139);
mapobj.spawnMonsterOnGroundBelow(bossobj, new Packages.java.awt.Point(250, 100));
mapobj.spawnMonsterWithEffect(bossobj, 13, new Packages.java.awt.Point(250, 100));
eim.setIntProperty("statusStg7", 1);
eim.setIntProperty("yuletePassed", -1);
@@ -106,7 +107,8 @@ function action(mode, type, selection) {
var mapobj = eim.getMapInstance(926100401);
var bossobj = MapleLifeFactory.getMonster(9300140);
mapobj.spawnMonsterOnGroundBelow(bossobj, new Packages.java.awt.Point(250, 100));
mapobj.spawnMonsterWithEffect(bossobj, 14, new Packages.java.awt.Point(250, 100));
eim.setIntProperty("statusStg7", 2);
eim.setIntProperty("yuletePassed", -1);

View File

@@ -7,11 +7,11 @@
var status;
var itemSet_lv6 = [1122018, 1122005, 1022088, 1402013, 1032030, 1032070, 1102046, 2330004, 2041013, 2041016, 2041019, 2041022, 2049100, 2049003, 2020012, 2020013, 2020014, 2020015, 2022029, 2022045, 2022068, 2022069, 2022179, 2022180, 4004000, 4004001, 4004002, 4004003, 4004004, 4003000];
var itemQty_lv6 = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 25, 25, 25, 25, 25, 25, 25, 25, 4, 4, 12, 12, 12, 12, 12, 25];
var itemSet_lv6 = [3010061, 1122018, 1122005, 1022088, 1402013, 1032030, 1032070, 1102046, 2330004, 2041013, 2041016, 2041019, 2041022, 2049100, 2049003, 2020012, 2020013, 2020014, 2020015, 2022029, 2022045, 2022068, 2022069, 2022179, 2022180, 4004000, 4004001, 4004002, 4004003, 4004004, 4003000];
var itemQty_lv6 = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 25, 25, 25, 25, 25, 25, 25, 25, 4, 4, 12, 12, 12, 12, 12, 25];
var itemSet_lv5 = [1122018, 1122005, 1022088, 1402013, 1032030, 1032070, 1102046, 2330004, 2041013, 2041016, 2041019, 2041022, 2049100, 2049003, 2020012, 2020013, 2020014, 2020015, 2022029, 2022045, 2022068, 2022069, 2022179, 2022180, 4004000, 4004001, 4004002, 4004003, 4004004, 4003000];
var itemQty_lv5 = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 15, 15, 15, 15, 15, 15, 15, 15, 2, 2, 8, 8, 8, 8, 8, 12];
var itemSet_lv5 = [3010063, 1122018, 1122005, 1022088, 1402013, 1032030, 1032070, 1102046, 2330004, 2041013, 2041016, 2041019, 2041022, 2049100, 2049003, 2020012, 2020013, 2020014, 2020015, 2022029, 2022045, 2022068, 2022069, 2022179, 2022180, 4004000, 4004001, 4004002, 4004003, 4004004, 4003000];
var itemQty_lv5 = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 15, 15, 15, 15, 15, 15, 15, 15, 2, 2, 8, 8, 8, 8, 8, 12];
var itemSet_lv4 = [1122001, 1122006, 1022103, 1442065, 1032042, 1032021, 1102168, 2070005, 2040025, 2040029, 2040301, 2040413, 2040701, 2040817, 2002028, 2020009, 2020010, 2020011, 2022004, 2022005, 2022025, 2022027, 2022048, 2022049, 4020000, 4020001, 4020002, 4020003, 4020004, 4020005, 4020006, 4020007, 4020008, 4003000];
var itemQty_lv4 = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 45, 45, 45, 45, 45, 45, 45, 45, 45, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8];

View File

@@ -27,29 +27,31 @@ function action(mode, type, selection) {
cm.dispose();
} else {
var selStr = "";
if (cm.getLevel() >= 20 && cm.getLevel() <= 30) {
/*if (cm.getLevel() >= 20 && cm.getLevel() <= 30) { NOT IMPLEMENTED
selStr += "#0# Ariant Coliseum";
}
} */
if (cm.getLevel() >= 25) {
selStr += "#1# Mu Lung Dojo";
}
if (cm.getLevel() >= 30 && cm.getLevel() <= 50) {
/*if (cm.getLevel() >= 30 && cm.getLevel() <= 50) { NOT IMPLEMENTED
selStr += "#2# Monster Carnival 1";
}
if (cm.getLevel() >= 51 && cm.getLevel() <= 70) {
if (cm.getLevel() >= 51 && cm.getLevel() <= 70) { NOT IMPLEMENTED
selStr += "#3# Monster Carnival 2";
}
if (cm.getLevel() >= 40) {
if (cm.getLevel() >= 40) { NOT IMPLEMENTED
selStr += "#5# Nett's Pyramid";
}
if (cm.getLevel() >= 25 && cm.getLevel() <= 30) {
if (cm.getLevel() >= 25 && cm.getLevel() <= 30) { NOT IMPLEMENTED
selStr += "#6# Construction Site";
}
*/
cm.sendDimensionalMirror(selStr);
}
} else if (status == 1) {

View File

@@ -0,0 +1,80 @@
importPackage(Packages.client);
importPackage(Packages.server.maps);
var status;
var sel;
function start() {
status = -1;
action(1, 0, 0);
}
function action(mode, type, selection) {
if (mode == -1) {
cm.dispose();
} else {
if (mode == 0) {
cm.dispose();
return;
}
if (mode == 1)
status++;
else
status--;
if (status == 0) {
if (cm.getLevel() < 20) {
cm.sendDimensionalMirror("#-1# There is no place for you to transport to from here.");
cm.dispose();
} else {
var selStr = "";
if (cm.getLevel() >= 20 && cm.getLevel() <= 30) {
selStr += "#0# Ariant Coliseum";
}
if (cm.getLevel() >= 25) {
selStr += "#1# Mu Lung Dojo";
}
if (cm.getLevel() >= 30 && cm.getLevel() <= 50) {
selStr += "#2# Monster Carnival 1";
}
if (cm.getLevel() >= 51 && cm.getLevel() <= 70) {
selStr += "#3# Monster Carnival 2";
}
if (cm.getLevel() >= 40) {
selStr += "#5# Nett's Pyramid";
}
if (cm.getLevel() >= 25 && cm.getLevel() <= 30) {
selStr += "#6# Construction Site";
}
cm.sendDimensionalMirror(selStr);
}
} else if (status == 1) {
cm.getPlayer().saveLocation("MIRROR");
switch (selection) {
case 0:
cm.warp(980010000, 3);
break;
case 1:
cm.warp(925020000, 0);
break;
case 2:
cm.warp(980000000, 3);
break;
case 3:
cm.warp(980030000, 3);
break;
case 5:
cm.warp(926010000);
break;
case 6:
cm.warp(910320000);
break;
}
cm.dispose();
}
}
}

View File

@@ -34,7 +34,7 @@ function action(mode, type, selection) {
masterybook = cm.getAvailableMasteryBooks();
if(skillbook.length == 0 && masterybook.length == 0) {
cm.sendOk(greeting + "There are no more books available to further improve your job skills for now. Either you maxed out everything or you didn't reach the minimum requisites for some skill books yet.");
cm.sendOk(greeting + "There are no more books available to further improve your job skills for now. Either you #bmaxed out everything#k or #byou didn't reach the minimum requisites to use some skill books#k yet.");
cm.dispose();
} else if(skillbook.length > 0 && masterybook.length > 0) {

View File

@@ -62,10 +62,12 @@ function action(mode, type, selection) {
cm.sendYesNo("The plane is taking off soon, are you sure you want to leave now? The ticket is not refundable.");
airport = 1;
} else if (cm.getMapId() == 540010002) {
cm.sendYesNo("We're reaching Kerning City in a minute, are you sure you want to leave now? The ticket is not refundable.");
cm.sendOk("We're reaching Kerning City in a minute, please sit down and wait.");
cm.dispose();
s2k = 1;
} else if (cm.getMapId() == 540010101) {
cm.sendYesNo("We're reaching Singapore in a minute, are you sure you want to leave now? The ticket is not refundable.");
cm.sendOk("We're reaching Singapore in a minute, please sit down and wait.");
cm.dispose();
k2s = 1;
}
} else if(status == 1) {

View File

@@ -60,8 +60,8 @@ function writeSolaxiaCommandsLv5() { //Developer
addCommand("debugmonster", "");
addCommand("debugpacket", "");
addCommand("debugnearestportal", "");
addCommand("debugnearestspawnpoint", "");
addCommand("debugportal", "");
addCommand("debugspawnpoint", "");
addCommand("debugpos", "");
addCommand("debugmap", "");
addCommand("debugmobsp", "");
@@ -204,6 +204,7 @@ function writeSolaxiaCommandsLv0() { //Common
addCommand("whodrops", "");
addCommand("dispose", "");
addCommand("equiplv", "");
addCommand("showrates", "");
addCommand("rates", "");
addCommand("online", "");
addCommand("gm", "");

View File

@@ -0,0 +1,4 @@
function enter(pi) {
pi.warp(925000000, 2);
return true;
}