Horntail PQ & Exped + Equip levelup fix

Added Horntail PQ and boss fight. Fixed short integer overflow of
equipment stats on client messing up player stats.
This commit is contained in:
ronancpl
2017-07-20 12:02:59 -03:00
parent 8fab2a6e3e
commit c09bc02c85
137 changed files with 1154 additions and 583 deletions

View File

@@ -1,4 +1,4 @@
#Fri, 14 Jul 2017 20:30:46 -0300
#Mon, 17 Jul 2017 14:21:39 -0300
C\:\\Nexon\\MapleSolaxia\\MapleSolaxiaV2=

BIN
dist/MapleSolaxia.jar vendored

Binary file not shown.

View File

@@ -8,9 +8,9 @@ Feature list:
---------------------------
PQs:
* HPQ/KPQ/LPQ/LMPQ/OPQ/EllinPQ/PiratePQ 100%.
* HPQ/KPQ/LPQ/LMPQ/OPQ/EllinPQ/PiratePQ/HorntailPQ 100%.
* CWKPQ as Expedition-based event 100%.
* Expeditions: Scarga 100%.
* Expeditions: Scarga/Horntail 100%.
* GuildPQ 100% + Guild queue with multi-lobby systems available.
* Brand-new PQ: Boss Rush PQ 100%.
* BalrogPQ semi-functional.

View File

@@ -373,4 +373,12 @@ Corrigido mapas em CBD/Singapore fazendo jogador "cair" do mapa.
Adicionado no sql lojas de NPCs de Malaysia.
Adicionado minidungeon "ByeBye station" (Malaysia).
Codificada expedição Scarlion/Targa.
Corrigido exploit com mini-dungeons (toda party, independente de localização atual, movida para dentro da MD).
Corrigido exploit com mini-dungeons (toda party, independente de localização atual, movida para dentro da MD).
15 Julho 2017,
Adicionado area boss Snack Bar.
Corrigido bugs com "buffmap" desconectando players em certos casos.
16 - 17 Julho 2017,
Adicionados HTPQ e expedição Horntail.
Corrigido bugs com levelup de equipamentos provocando Integer overflow (stats negativos) nos clientes.

View File

@@ -3,43 +3,10 @@
<editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/2" lastBookmarkId="1"/>
<open-files xmlns="http://www.netbeans.org/ns/projectui-open-files/2">
<group>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/scripts/npc/2091005.js</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/server/expeditions/MapleExpeditionType.java</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/server/MapleStatEffect.java</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/scripts/event/ScargaBattle.js</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/scripting/AbstractPlayerInteraction.java</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/scripts/event/KerningPQ.js</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/scripts/portal/captinsg00.js</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/scripts/event/GuildQuest.js</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/scripts/event/CWKPQ.js</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/scripts/npc/9270033.js</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/scripting/event/EventInstanceManager.java</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/scripts/npc/9201113.js</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/scripts/npc/2091005_old.js</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/server/maps/MapleMap.java</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/client/MapleCharacter.java</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/scripts/reactor/5511001.js</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/scripts/event/PiratePQ.js</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/scripting/event/EventManager.java</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/scripting/reactor/ReactorActionManager.java</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/net/server/channel/Channel.java</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/scripts/npc/9270047.js</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/server/expeditions/MapleExpedition.java</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/scripts/reactor/5511000.js</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/server/maps/MapleReactor.java</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/scripts/npc/2133004.js</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/scripts/portal/MD_high.js</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/tools/MaplePacketCreator.java</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/server/life/MapleMonster.java</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/server/TimerManager.java</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/scripting/reactor/ReactorScriptManager.java</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/scripts/event/HenesysPQ.js</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/scripts/portal/MD_drakeroom.js</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/scripts/event/BossRushPQ.js</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/scripting/npc/NPCConversationManager.java</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/scripts/npc/9020001.js</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/scripts/event/LatanicaBattle.js</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/client/MapleClient.java</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/client/inventory/Equip.java</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/client/inventory/ItemFactory.java</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/client/command/Commands.java</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/constants/ServerConstants.java</file>
</group>
</open-files>
</project-private>

View File

@@ -0,0 +1,57 @@
/*
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/>.
*/
/**
-- Odin JavaScript --------------------------------------------------------------------------------
Snack Bar Spawner
-- Edited by --------------------------------------------------------------------------------------
Ronan (based on xQuasar's King Clang spawner)
**/
function init() {
scheduleNew();
}
function scheduleNew() {
setupTask = em.schedule("start", 0); //spawns upon server start. Each 3 hours an server event checks if boss exists, if not spawns it instantly.
}
function cancelSchedule() {
if (setupTask != null)
setupTask.cancel(true);
}
function start() {
var snackBarMap = em.getChannelServer().getMapFactory().getMap(105090310);
var snackBar = Packages.server.life.MapleLifeFactory.getMonster(8220008);
if(snackBarMap.getMonsterById(8220008) != null || snackBarMap.getMonsterById(8220009) != null) {
em.schedule("start", 3 * 60 * 60 * 1000);
return;
}
var setPos = [[-626, -604], [735, -600]];
var rndPos = setPos[Math.floor(Math.random() * setPos.length)];
snackBarMap.spawnMonsterOnGroundBelow(snackBar, new Packages.java.awt.Point(rndPos[0], rndPos[1]));
snackBarMap.broadcastMessage(Packages.tools.MaplePacketCreator.serverNotice(6, "Slowly, a suspicious food stand opens up on a strangely remote place."));
em.schedule("start", 3 * 60 *60 * 1000);
}

View File

@@ -1,155 +1,209 @@
/*
* 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>
/**
* @author: Ronan
* @event: Horntail Battle
*/
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.
importPackage(Packages.server.life);
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.
var isPq = true;
var minPlayers = 1, maxPlayers = 30;
var minLevel = 100, maxLevel = 255;
var entryMap = 240060000;
var exitMap = 240050600;
var recruitMap = 240050400;
var clearMap = 240050600;
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 minMapId = 240060000;
var maxMapId = 240060200;
/*
* @Author SharpAceX(Alan)
* Horntail fight
*/
var eventTime = 15; // 15 minutes
importPackage(Packages.server.expeditions);
var lobbyRange = [0, 0];
var exitMap;
var minPlayers = 1;
var fightTime = 60;
var trial1; //Cave of Life - The Cave of Trial I
var trial2; // Cave of Life - The Cave of Trial II
var fightMap; // Cave of Life - Horntail's Cave
var exitMap;
function init() {
em.setProperty("shuffleReactors","false");
trial1 = em.getChannelServer().getMapFactory().getMap(240060000); //Cave of Life - The Cave of Trial I
trial2 = em.getChannelServer().getMapFactory().getMap(240060100); // Cave of Life - The Cave of Trial II
fightMap = em.getChannelServer().getMapFactory().getMap(240060200); // Cave of Life - Horntail's Cave
exitMap = em.getChannelServer().getMapFactory().getMap(211042300);
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 = [];
eim.setExclusiveItems(itemSet);
}
function setup() {
var eim = em.newInstance("HorntailFight_" + em.getProperty("channel"));
var timer = 1000 * 60 * fightTime;
em.schedule("timeOut", eim, timer);
eim.startEventTimer(timer);
return eim;
function setEventRewards(eim) {
var itemSet, itemQty, evLevel, expStages, mesoStages;
evLevel = 1; //Rewards at clear PQ
itemSet = [];
itemQty = [];
eim.setEventRewards(evLevel, itemSet, itemQty);
expStages = []; //bonus exp given on CLEAR stage signal
eim.setEventClearStageExp(expStages);
mesoStages = []; //bonus meso given on CLEAR stage signal
eim.setEventClearStageMeso(mesoStages);
}
function afterSetup(eim) {}
function playerEntry(eim,player) {
var map = eim.getMapInstance(trial1.getId());
player.changeMap(map,map.getPortal(0));
if (exitMap == null)
debug(eim,"The exit map was not properly linked.");
function setup(channel) {
var eim = em.newInstance("Scarga" + channel);
eim.setProperty("canJoin", 1);
eim.setProperty("defeatedBoss", 0);
eim.setProperty("defeatedHead", 0);
var level = 1;
eim.getInstanceMap(240060000).resetPQ(level);
eim.getInstanceMap(240060100).resetPQ(level);
eim.getInstanceMap(240060200).resetPQ(level);
var map, mob;
map = eim.getInstanceMap(240060000);
mob = MapleLifeFactory.getMonster(8810000);
map.spawnMonsterOnGroundBelow(mob, new java.awt.Point(960, 120));
map = eim.getInstanceMap(240060100);
mob = MapleLifeFactory.getMonster(8810001);
map.spawnMonsterOnGroundBelow(mob, new java.awt.Point(-420, 120));
eim.startEventTimer(eventTime * 60000);
setEventRewards(eim);
setEventExclusives(eim);
return eim;
}
function playerRevive(eim,player) {
player.setHp(500);
player.setStance(0);
eim.unregisterPlayer(player);
player.changeMap(exitMap, exitMap.getPortal(0));
var party = eim.getPlayers();
if (party.size() < minPlayers)
end(eim,"There are not enough players remaining, the Battle is over.");
return false;
function playerEntry(eim, player) {
eim.dropMessage(5, "[Expedition] " + player.getName() + " has entered the map.");
var map = eim.getMapInstance(entryMap);
player.changeMap(map, map.getPortal(0));
}
function playerDead(eim,player) {
function scheduledTimeout(eim) {
end(eim);
}
function playerDisconnected(eim,player) {
var party = eim.getPlayers();
if (player.getName().equals(eim.getProperty("leader"))) {
// tell members
var iter = party.iterator();
while (iter.hasNext())
iter.next().getPlayer().dropMessage(6,"The leader of the instance has disconnected.");
}
// and, if the party is too small
if (party.size() < minPlayers) {
end(eim,"There are not enough players remaining. The Battle is over.");
function changedMap(eim, player, mapid) {
if (mapid < minMapId || mapid > maxMapId) {
if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
eim.dropMessage(5, "[Expedition] Either the leader has quitted the event or there is no longer the minimum number of members required to continue this event.");
eim.unregisterPlayer(player);
end(eim);
}
else {
eim.dropMessage(5, "[Expedition] " + player.getName() + " has left the event.");
eim.unregisterPlayer(player);
}
}
}
function changedLeader(eim, leader) {}
function playerDead(eim, player) {}
function playerRevive(eim, player) {
if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
eim.unregisterPlayer(player);
eim.dropMessage(5, "[Expedition] Either the leader has quitted the event or there is no longer the minimum number of members required to continue this event.");
end(eim);
}
else {
eim.dropMessage(5, "[Expedition] " + player.getName() + " has left the event.");
eim.unregisterPlayer(player);
}
}
function playerDisconnected(eim, player) {
if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
eim.dropMessage(5, "[Expedition] Either the leader has quitted the event or there is no longer the minimum number of members required to continue this event.");
eim.unregisterPlayer(player);
end(eim);
}
else {
eim.dropMessage(5, "[Expedition] " + player.getName() + " has left the event.");
eim.unregisterPlayer(player);
}
}
function leftParty (eim, player) {}
function disbandParty (eim) {}
function monsterValue(eim, mobId) {
return 1;
}
function leftParty(eim,player) {}
function disbandParty(eim) {}
function playerUnregistered(eim, player) {}
function playerExit(eim,player) {
function playerExit(eim, player) {
eim.unregisterPlayer(player);
player.changeMap(exitMap,exitMap.getPortal(0));
if (eim.getPlayers().size() < minPlayers)//not enough after someone left
end(eim,"There are no longer enough players to continue, and those remaining shall be warped out.");
player.changeMap(exitMap, 0);
}
function end(eim,msg) {
var iter = eim.getPlayers().iterator();
while (iter.hasNext()) {
var player = iter.next();
player.getPlayer().dropMessage(6,msg);
eim.unregisterPlayer(player);
if (player != null)
player.changeMap(exitMap, exitMap.getPortal(0));
function end(eim) {
var party = eim.getPlayers();
for (var i = 0; i < party.size(); i++) {
playerExit(eim, party.get(i));
}
eim.dispose();
}
// for offline folk
function removePlayer(eim,player) {
eim.unregisterPlayer(player);
player.getMap().removePlayer(player);
player.setMap(exitMap);
function giveRandomEventReward(eim, player) {
eim.giveEventReward(player);
}
function clearPQ(eim) {}
function clearPQ(eim) {
eim.stopEventTimer();
eim.setEventCleared();
}
function finish(eim) {
var iter = eim.getPlayers().iterator();
while (iter.hasNext()) {
var player = iter.next();
eim.unregisterPlayer(player);
player.changeMap(exitMap, exitMap.getPortal(0));
function isHorntailHead(mob) {
var mobid = mob.getId();
return (mobid == 8810000 || mobid == 8810001);
}
function isHorntail(mob) {
var mobid = mob.getId();
return (mobid == 8810018);
}
function monsterKilled(mob, eim) {
if(isHorntail(mob)) {
eim.setIntProperty("defeatedBoss", 1);
eim.showClearEffect(mob.getMap().getId());
eim.clearPQ();
mob.getMap().broadcastHorntailVictory();
} else if(isHorntailHead(mob)) {
var killed = eim.getIntProperty("defeatedHead");
eim.setIntProperty("defeatedHead", killed + 1);
eim.showClearEffect(mob.getMap().getId());
}
eim.dispose();
}
function monsterKilled(mob, eim) {}
function allMonstersDead(eim) {}
function cancelSchedule() {}
function timeOut() {}
function debug(eim,msg) {
var iter = eim.getPlayers().iterator();
while (iter.hasNext()) {
iter.next().getClient().getSession().write(Packages.tools.MaplePacketCreator.serverNotice(6,msg));
}
}
function dispose(eim) {}

213
scripts/event/HorntailPQ.js Normal file
View File

@@ -0,0 +1,213 @@
/**
* @author: Ronan
* @event: Horntail PQ
*/
var isPq = true;
var minPlayers = 1, maxPlayers = 6;
var minLevel = 120, maxLevel = 255;
var entryMap = 240050100;
var exitMap = 240050500;
var recruitMap = 240050000;
var clearMap = 240050400;
var minMapId = 240050100;
var maxMapId = 240050310;
var eventTime = 25; // 25 minutes
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 = [4001087, 4001088, 4001089, 4001090, 4001091, 4001092, 4001093];
eim.setExclusiveItems(itemSet);
}
function setEventRewards(eim) {
var itemSet, itemQty, evLevel, expStages;
evLevel = 1; //Rewards at clear PQ
itemSet = [];
itemQty = [];
eim.setEventRewards(evLevel, itemSet, itemQty);
expStages = []; //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("PreHorntail" + lobbyid);
eim.setProperty("level", level);
eim.getInstanceMap(240050000).resetPQ(level);
eim.getInstanceMap(240050100).resetPQ(level);
eim.getInstanceMap(240050101).resetPQ(level);
eim.getInstanceMap(240050102).resetPQ(level);
eim.getInstanceMap(240050103).resetPQ(level);
eim.getInstanceMap(240050104).resetPQ(level);
eim.getInstanceMap(240050105).resetPQ(level);
eim.getInstanceMap(240050200).resetPQ(level);
eim.getInstanceMap(240050300).resetPQ(level);
eim.getInstanceMap(240050310).resetPQ(level);
eim.getInstanceMap(240050101).getReactorByName("passKey1").setEventState(0);
eim.getInstanceMap(240050102).getReactorByName("passKey2").setEventState(1);
eim.getInstanceMap(240050103).getReactorByName("passKey3").setEventState(2);
eim.getInstanceMap(240050104).getReactorByName("passKey4").setEventState(3);
respawnStages(eim);
eim.startEventTimer(eventTime * 60000);
setEventRewards(eim);
setEventExclusives(eim);
return eim;
}
function afterSetup(eim) {}
function respawnStages(eim) {}
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.warpEventTeam(clearMap);
}
function monsterKilled(mob, eim) {}
function allMonstersDead(eim) {}
function cancelSchedule() {}
function dispose(eim) {}

View File

@@ -68,7 +68,7 @@ function afterSetup(eim) {}
function setup(channel) {
var eim = em.newInstance("Scarga" + channel);
eim.setProperty("canJoin", 1);
eim.setProperty("defeatedBoss", 1);
eim.setProperty("defeatedBoss", 0);
var level = 1;
eim.getInstanceMap(551030200).resetPQ(level);

View File

@@ -20,7 +20,8 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* @author BubblesDev, Ronan
* @author BubblesDev
* @author Ronan
* @NPC Tory
*/

View File

@@ -20,7 +20,8 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* @author BubblesDev, Ronan
* @author BubblesDev
* @author Ronan
* @npc Tommy (HPQ)
*/
var status = 0;

View File

@@ -2,7 +2,7 @@
Growlie (that fatass uhh.. hungry lion or whatever)
FightDesign @RageZONE
Ronan
@author Ronan
*/
var status = 0;

View File

@@ -1,5 +1,6 @@
/**
* @author: Eric, Ronan
* @author: Eric
* @author: Ronan
* @npc: Red Sign
* @map: 101st Floor Eos Tower (221024500)
* @func: Ludi PQ

View File

@@ -20,7 +20,8 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*
@ Author : Raz, Ronan
@ Author : Raz
@ Author : Ronan
@
@ NPC = Red Balloon
@ Map = Hidden-Street <Stage 1>

View File

@@ -20,7 +20,8 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*
@ Author : Raz, Ronan
@ Author : Raz
@ Author : Ronan
@
@ NPC = Orange Balloon
@ Map = Hidden-Street <Stage 2>

View File

@@ -20,7 +20,8 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*
@ Author : Raz, Ronan
@ Author : Raz
@ Author : Ronan
@
@ NPC = Yellow Balloon
@ Map = Hidden-Street <Stage 3>

View File

@@ -20,7 +20,8 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*
@ Author : Raz, Ronan
@ Author : Raz
@ Author : Ronan
@
@ NPC = Lime Balloon
@ Map = Hidden-Street <Stage 4>

View File

@@ -20,7 +20,8 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*
@ Author : Raz, Ronan
@ Author : Raz
@ Author : Ronan
@
@ NPC = Green Balloon
@ Map = Hidden-Street <Stage 5>

View File

@@ -20,7 +20,8 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*
@ Author : Raz, Ronan
@ Author : Raz
@ Author : Ronan
@
@ NPC = Sky-Blue Balloon
@ Map = Hidden-Street <Stage 7>

View File

@@ -20,7 +20,8 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*
@ Author : Twdtwd, Ronan
@ Author : Twdtwd
@ Author : Ronan
@
@ NPC = Blue Balloon
@ Map = Hidden-Street <Stage 8>

View File

@@ -20,7 +20,8 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*
@ Author : Twdtwd, Ronan
@ Author : Twdtwd
@ Author : Ronan
@
@ NPC = Violet Balloon
@ Map = Hidden-Street <Crack on the Wall>

View File

@@ -21,7 +21,8 @@
*/
/*
@ Author : Raz, Ronan
@ Author : Raz
@ Author : Ronan
@
@ NPC = Pink Balloon
@ Map = Hidden-Street <Stage B>

View File

@@ -20,7 +20,8 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*
@ Author : Raz, Ronan
@ Author : Raz
@ Author : Ronan
@
@ NPC = Sgt.Anderson
@ Map = Abandoned Tower <Stage 1>

View File

@@ -19,12 +19,25 @@
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/>.
*/
//Fixed by Moogra
//Fixed by Moogra, Ronan
//Fixed grammar, javascript syntax
importPackage(Packages.client);
var status = 0;
var price = 100000;
function isTransformed(ch) {
return ch.getBuffSource(MapleBuffStat.MORPH) == 2210003;
}
function start() {
if(!(isTransformed(cm.getPlayer()) || cm.haveItem(4001086))) {
cm.sendOk("This is the cave of the mighty Horntail, supreme ruler of the Leafre Canyons, outsiders are not welcome. Get lost!");
cm.dispose();
return;
}
cm.sendSimple("Welcome to Cave of Life - Entrance ! Would you like to go inside and fight #rHorntail#k ? If you want to fight him, you may might need some #b#v2000005##k, so you can recover some HP if you have been hit by #rHorntail#k.\r\n#L1#I would like to buy 10 for 100,000 Mesos!#l\r\n\#L2#No thanks, let me in now!#l");
}
@@ -32,12 +45,17 @@ function action(mode, type, selection) {
if (mode < 1)
cm.dispose();
else if (selection == 1) {
if(cm.getMeso() >= price && cm.canHold(2000005)) {
cm.gainMeso(-price);
cm.gainItem(2000005, 10);
cm.sendOk("Thank you for buying the potion. Use it as well!");
} else
if(cm.getMeso() >= price) {
if(!cm.canHold(2000005)) {
cm.sendOk("Sorry, you don't have a slot on your inventory for the item!");
} else {
cm.gainMeso(-price);
cm.gainItem(2000005, 10);
cm.sendOk("Thank you for buying the potion. Use it as well!");
}
} else {
cm.sendOk("Sorry, you don't have enough mesos to buy them!");
}
cm.dispose();
} else if (selection == 2) {
if (cm.getLevel() > 99)

View File

@@ -47,68 +47,15 @@ function action(mode, type, selection) {
else
status--;
if (status == 0) {
// Slate has no preamble, directly checks if you're in a party
if (cm.getParty() == null) { // no party
cm.sendOk("If you want to attempt the quest, try making a party and getting 6 People...");
if(cm.haveItem(4001086)) {
cm.sendYesNo("Do you want to access #b#m240050400##k right now?");
} else {
cm.sendOk("Those who don't have the #r#t4001086##k must prove their valor before challenging #bHorntail#k.");
cm.dispose();
return;
}
if (!cm.isLeader()) { // not party leader
cm.sendSimple("You are not the party leader.");
cm.dispose();
}
else {
// Check teh partyy
var party = cm.getParty().getMembers();
var mapId = cm.getPlayer().getMapId();
var next = true;
var levelValid = 0;
var inMap = 0;
// Temp removal for testing
if (party.size() < minPlayers || party.size() > maxPlayers)
next = false;
else {
for (var i = 0; i < party.size() && next; i++) {
if ((party.get(i).getLevel() >= minLevel) && (party.get(i).getLevel() <= maxLevel))
levelValid += 1;
if (party.get(i).getMapId() == mapId)
inMap += 1;
}
if (levelValid < party.size() || inMap < party.size())
next = false;
}
if (next) {
// Kick it into action. Slate says nothing here, just warps you in.
var em = cm.getEventManager("HontalePQ");
if (em == null) {
cm.dispose();
}
else {
// Begin the PQ.
if(!em.startInstance(cm.getParty(),cm.getPlayer().getMap())) {
cm.sendOk("A party in your name is already registered in this event.");
cm.dispose();
return;
}
//force the two scripts on portals in the map
//eim = cm.getPlayer().getEventInstance();
var map = eim.getMapInstance(240050100);
var bulbMap = eim.getMapInstance(240050200);
//map.getPortal(7).setScriptName("hontale_BtoB1");
//map.getPortal(2).setScriptName("hontale_C");
// Remove pass/coupons
party = cm.getPlayer().getEventInstance().getPlayers();
}
cm.dispose();
}
else {
cm.sendOk("Your party is not a party of six. Make sure all your members are present and qualified to participate in this quest. I see #b" + levelValid.toString() + " #kmembers are in the right level range, and #b" + inMap.toString() + "#k are in my map. If this seems wrong, #blog out and log back in,#k or reform the party.");
cm.dispose();
}
}
}
else {
cm.sendOk("RAWR!?!?!?");
cm.warp(240050400);
cm.dispose();
}
}

View File

@@ -1,25 +1,107 @@
/*
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/>.
/**
* @author: Ronan
* @npc: Mark of the Squad
* @map: Cave of Life - Cave Entrance (240050000)
* @func: Horntail PQ
*/
var status = 0;
var price = 100000;
var em = null;
var hasPass;
function isRecruitingMap(mapid) {
return mapid == 240050000;
}
function start() {
cm.warp(240050400);
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(isRecruitingMap(cm.getMapId())) {
if (status == 0) {
em = cm.getEventManager("HorntailPQ");
if(em == null) {
cm.sendOk("The Horntail PQ has encountered an error.");
cm.dispose();
return;
}
cm.sendSimple("#e#b<Party Quest: Horntail Trial Grounds>\r\n#k#n" + em.getProperty("party") + "\r\n\r\nThis is the path to Horntail's lair. If you want to face him, you and your team shall be tested on the trial grounds ahead.#b\r\n#L0#Let us pass to the trial grounds.\r\n#L1#I would like to hear more details.");
} else if (status == 1) {
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("Either I cannot accept some members of your party inside the cave or you team is lacking. Solve this problem then talk to me!");
}
cm.dispose();
}
} else {
cm.sendOk("#e#b<Party Quest: Horntail Trial Grounds>#k#n\r\nAs the gatekeeper of Horntail's lair, I will grant access #bjust to those worthy#k of his presence. Even for those people, the path inside is that of a maze, full of branches and trials. However, those #radept at fighting squad bosses#k have a better chance to stand to our leader, although those #rof our kind#k have a shabby chance as well.");
cm.dispose();
}
}
} else {
if(!cm.isEventLeader()) {
cm.sendOk("Only your event leader is allowed to interact with the Schedule.");
} else if(cm.getMapId() == 240050100) {
if(cm.haveItem(4001087) && cm.haveItem(4001088) && cm.haveItem(4001089) && cm.haveItem(4001090) && cm.haveItem(4001091)) {
cm.gainItem(4001087, -1);
cm.gainItem(4001088, -1);
cm.gainItem(4001089, -1);
cm.gainItem(4001090, -1);
cm.gainItem(4001091, -1);
cm.getEventInstance().warpEventTeam(240050200);
} else {
cm.sendOk("You don't have all the keys needed to proceed.");
}
} else if(cm.getMapId() == 240050300) {
if(cm.haveItem(4001092, 1) && cm.haveItem(4001093, 6)) {
cm.gainItem(4001092, -1);
cm.gainItem(4001093, -6);
cm.getEventInstance().clearPQ();
} else {
cm.sendOk("Check if you have got all 6 Red keys and 1 Blue key with you.");
}
} else if(cm.getMapId() == 240050310) {
if(cm.haveItem(4001092, 1) && cm.haveItem(4001093, 6)) {
cm.gainItem(4001092, -1);
cm.gainItem(4001093, -6);
cm.getEventInstance().clearPQ();
} else {
cm.sendOk("Check if you have got all 6 Red keys and 1 Blue key with you.");
}
}
cm.dispose();
}
}
}

View File

@@ -22,7 +22,7 @@
/**
*Crystal of Roots
*@Author: Moogra
*@Author: Ronan
*@NPC: Crystal of Roots
*/
function start() {
@@ -33,11 +33,9 @@ function action(mode, type, selection) {
if (mode < 1)
cm.dispose();
else {
cm.warp(240040700);
if (cm.getPlayer().getMap().getCharacters().size() < 2){
cm.getPlayer().getMap().killAllMonsters();
cm.getPlayer().getMap().resetReactors();
}
if(cm.getMapId() > 240050400) cm.warp(240050600);
else cm.warp(240040700);
cm.dispose();
}
}

View File

@@ -19,11 +19,9 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*Mark of the Squad
*@author Even
*
*@author SharpAceX (Alan)
*/
/*TODO
* ADD A CHECK TO SEE IF PLAYERS HAVE BADGE
*@author Ronan
*/
importPackage(Packages.server.expeditions);
importPackage(Packages.tools);
@@ -33,7 +31,10 @@ var status = 0;
var expedition;
var player;
var em;
var horntail = MapleExpeditionType.HORNTAIL;
var exped = MapleExpeditionType.HORNTAIL;
var expedName = "Horntail";
var expedBoss = "mighty Horntail";
var list = "What would you like to do?#b\r\n\r\n#L1#View current Expedition members#l\r\n#L2#Start the fight!#l\r\n#L3#Stop the expedition.#l";
function start() {
@@ -43,113 +44,134 @@ function start() {
function action(mode, type, selection) {
player = cm.getPlayer();
expedition = cm.getExpedition(horntail);
expedition = cm.getExpedition(exped);
em = cm.getEventManager("HorntailFight");
if (mode < 1) {
if (mode == -1) {
cm.dispose();
return;
}
if (status == 0) {
//cm.removeExpedition(expedition);
if (player.getClient().getChannel() != 1) { //Only channel 1
cm.sendOk("Sorry, Horntail may only be challenged on #bChannel 1#k.");
cm.dispose();
} else if (player.getLevel() < horntail.getMinLevel() && player.getLevel() > horntail.getMaxLevel()) { //Don't fit requirement
cm.sendOk("You do not meet the criteria to take on Horntail!");
cm.dispose();
} else if (expedition == null) { //Start an expedition
cm.sendSimple("Would you like to assemble a team to take on the mighty #rHorntail#k?\r\n#b#L1#Lets get this going!#l\r\n\#L2#No, I think I'll wait a bit...#l");
status = 1;
} else if (expedition.isLeader(player)) { //If you're the leader, manage the exped
cm.sendSimple(list);
status = 2;
} else if (expedition.isRegistering()) { //If the expedition is registering
if (expedition.contains(player)) { //If you're in it but it hasn't started, be patient
cm.sendOk("You have already registered for the expedition. Please wait for " + expedition.getLeader().getName() + " to begin the expedition.");
cm.dispose();
} else { //If you aren't in it, you're going to get added
cm.sendOk(expedition.addMember(cm.getPlayer()));
cm.dispose();
}
} else if (expedition.isInProgress()) { //Only if the expedition is in progress
if (expedition.contains(player)) { //If you're registered, warp you in
em.getInstance("HorntailFight_" + player.getClient().getChannel()).registerPlayer(player);
cm.dispose();
} else { //If you're not in by now, tough luck
cm.sendOk("Another expedition has taken the initiative to fight Horntail, lets pray for those brave souls.");
cm.dispose();
}
}
} else if (status == 1) {
if (selection == 1) {
cm.createExpedition(horntail);
cm.sendOk("The #rHorntail Expedition#k has been created.\r\n\r\nTalk to me again to view the current team, or start the fight!");
cm.dispose();
return;
} else if (selection == 2) {
cm.sendOk("Sure, not everyone's up to challenging the might of Horntail.");
} else {
if (mode == 0) {
cm.dispose();
return;
}
} else if (status == 2) {
if (selection == 1) {
if (expedition == null) {
cm.sendOk("The expedition could not be loaded.");
if (status == 0) {
if (player.getLevel() < exped.getMinLevel() && player.getLevel() > exped.getMaxLevel()) { //Don't fit requirement
cm.sendOk("You do not meet the criteria to battle " + expedBoss + "!");
cm.dispose();
} else if (expedition == null) { //Start an expedition
cm.sendSimple("#e#b<Expedition: " + expedName + ">\r\n#k#n" + em.getProperty("party") + "\r\n\r\nWould you like to assemble a team to take on #r" + expedBoss + "#k?\r\n#b#L1#Lets get this going!#l\r\n\#L2#No, I think I'll wait a bit...#l");
status = 1;
} else if (expedition.isLeader(player)) { //If you're the leader, manage the exped
cm.sendSimple(list);
status = 2;
} else if (expedition.isRegistering()) { //If the expedition is registering
if (expedition.contains(player)) { //If you're in it but it hasn't started, be patient
cm.sendOk("You have already registered for the expedition. Please wait for #r" + expedition.getLeader().getName() + "#k to begin the expedition.");
cm.dispose();
} else { //If you aren't in it, you're going to get added
cm.sendOk(expedition.addMember(cm.getPlayer()));
cm.dispose();
}
} else if (expedition.isInProgress()) { //Only if the expedition is in progress
if (expedition.contains(player)) { //If you're registered, warp you in
var eim = em.getInstance(expedName + player.getClient().getChannel());
if(eim.getIntProperty("canJoin") == 1) {
eim.registerPlayer(player);
} else {
cm.sendOk("Your expedition already started the battle against " + expedBoss + ". Lets pray for those brave souls.");
}
cm.dispose();
} else { //If you're not in by now, tough luck
cm.sendOk("Another expedition has taken the initiative to challenge " + expedBoss + ", lets pray for those brave souls.");
cm.dispose();
}
}
} else if (status == 1) {
if (selection == 1) {
expedition = cm.getExpedition(exped);
if(expedition != null) {
cm.sendOk("Someone already taken the initiative to be the leader of the expedition. Try joining them!");
cm.dispose();
return;
}
cm.createExpedition(exped);
cm.sendOk("The #r" + expedBoss + " Expedition#k has been created.\r\n\r\nTalk to me again to view the current team, or start the fight!");
cm.dispose();
return;
} else if (selection == 2) {
cm.sendOk("Sure, not everyone's up to challenging " + expedBoss + ".");
cm.dispose();
return;
}
var size = expedition.getMembers().size();
if (size == 1) {
cm.sendOk("You are the only member of the expedition.");
} else if (status == 2) {
if (selection == 1) {
if (expedition == null) {
cm.sendOk("The expedition could not be loaded.");
cm.dispose();
return;
}
var size = expedition.getMembers().size();
if (size == 1) {
cm.sendOk("You are the only member of the expedition.");
cm.dispose();
return;
}
var text = "The following members make up your expedition (Click on them to expel them):\r\n";
text += "\r\n\t\t1." + expedition.getLeader().getName();
for (var i = 1; i < size; i++) {
text += "\r\n#b#L" + (i + 1) + "#" + (i + 1) + ". " + expedition.getMembers().get(i).getName() + "#l\n";
}
cm.sendSimple(text);
status = 6;
} else if (selection == 2) {
//var min = exped.getMinSize();
var min = 1;
var size = expedition.getMembers().size();
if (size < min) {
cm.sendOk("You need at least " + min + " players registered in your expedition.");
cm.dispose();
return;
}
cm.sendOk("Good luck! All of Leafre is counting on you.");
status = 4;
} else if (selection == 3) {
player.getMap().broadcastMessage(MaplePacketCreator.serverNotice(6, expedition.getLeader().getName() + " has ended the expedition."));
cm.endExpedition(expedition);
cm.sendOk("The expedition has now ended. Sometimes the best strategy is to run away.");
cm.dispose();
return;
}
var text = "The following members make up your expedition (Click on them to expel them):\r\n";
text += "\r\n\t\t1." + expedition.getLeader().getName();
for (var i = 1; i < size; i++) {
text += "\r\n#b#L" + (i + 1) + "#" + (i + 1) + ". " + expedition.getMembers().get(i).getName() + "#l\n";
} else if (status == 4) {
if (em == null) {
cm.sendOk("The event could not be initialized, please report this on the forum.");
cm.dispose();
return;
}
cm.sendSimple(text);
status = 6;
} else if (selection == 2) {
cm.sendOk("The expedition will begin and you will be escorted to the #bCave of Trial I#k.");
status = 4;
} else if (selection == 3) {
cm.sendOk("The expedition has now ended. Sometimes the best strategy is to run away.");
player.getMap().broadcastMessage(MaplePacketCreator.removeClock());
player.getMap().broadcastMessage(MaplePacketCreator.serverNotice(6, expedition.getLeader().getName() + " has ended the expedition."));
cm.endExpedition(expedition);
cm.dispose();
return;
}
} else if (status == 4) {
var min = 1; //horntail.getMinSize();
var size = expedition.getMembers().size();
if (size < min) {
cm.sendOk("You need at least " + min + " players registered in your expedition.");
em.setProperty("leader", player.getName());
em.setProperty("channel", player.getClient().getChannel());
if(!em.startInstance(expedition)) {
cm.sendOk("Another expedition has taken the initiative to challenge " + expedBoss + ", lets pray for those brave souls.");
cm.dispose();
return;
}
cm.dispose();
return;
}
if (em == null) {
cm.sendOk("The event could not be found, please report this on the forum.");
cm.dispose();
return;
}
cm.sendOk("Good luck! All of Leafre is counting on you.");
em.setProperty("channel", player.getClient().getChannel());
em.startInstance(expedition);
cm.dispose();
return;
} else if (status == 6) {
if (selection > 0) {
var banned = expedition.getMembers().get(selection);
expedition.ban(banned);
cm.sendOk("You have banned " + banned.getName() + " from the expedition.");
cm.dispose();
} else {
cm.sendSimple(list);
status = 2;
} else if (status == 6) {
if (selection > 0) {
var banned = expedition.getMembers().get(selection - 1);
expedition.ban(banned);
cm.sendOk("You have banned " + banned.getName() + " from the expedition.");
cm.dispose();
} else {
cm.sendSimple(list);
status = 2;
}
}
}
}

View File

@@ -1,4 +1,5 @@
/* Author: aaroncsn(MapleSea Like), Ronan Lana
/* @author aaroncsn(MapleSea Like)
* @author Ronan
NPC Name: Mr. Do
Map(s): Mu Lung: Mu Lung(2500000000)
Description: Potion Creator

View File

@@ -24,9 +24,9 @@ function action(mode, type, selection) {
else
status--;
if(status == 0){
cm.sendAcceptDecline("I don't know how you found out about this, but you came to the right place! For those that wandered around Nihal Desert and are getting homesick, I am offering a flight straight to Victorial Island, non-stop! Don't worry about the flying ship--it's only fallen once or twice! Don't you feel claustrophobic being in a long flight on that small ship? What do you think? Are you willing to take the offer on this direct flight?");
cm.sendNext("I don't know how you found out about this, but you came to the right place! For those that wandered around Nihal Desert and are getting homesick, I am offering a flight straight to Victorial Island, non-stop! Don't worry about the flying ship--it's only fallen once or twice! Don't you feel claustrophobic being in a long flight on that small ship?");
} else if(status == 1){
cm.sendAcceptDecline("Please remember two things. One, this line is actually for overseas shipping, so #rI cannot gurantee exactly which town you'll land#k. Two, since I am putting you in this special flight, it'll be a bit expensive. The service charge is #e#b10,000 mesos#n#k. There's a flight thats about to take off. Are you interested?");
cm.sendAcceptDecline("Please remember two things. One, this line is actually for overseas shipping, so #rI cannot gurantee exactly which town you'll land#k. Two, since I am putting you in this special flight, it'll be a bit expensive. The service charge is #e#b10,000 mesos#n#k. There's a flight thats about to take off. Are you interested in this direct flight?");
} else if(status == 2){
cm.sendNext("Okay, ready to takeoff~");
} else if(status == 3){

View File

@@ -2,7 +2,7 @@
Refining NPC:
* Chaos scroll SYNTHETIZER (rofl)
*
* By RonanLana
* @author RonanLana
*/
var status = 0;

View File

@@ -25,7 +25,7 @@
Refining NPC:
* Accessories refiner
*
* By Ronan Lana
* @author Ronan Lana
*/
var status = -1;

View File

@@ -23,7 +23,7 @@
Victoria Road : Henesys
NPC Bazaar:
* By Ronan Lana
* @author Ronan Lana
*/
var options = ["EQUIP","USE","SET-UP","ETC"];

View File

@@ -20,7 +20,8 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*
* @Author TheRamon, Ronan
* @Author TheRamon
* @Author Ronan
*
* Sharen III's Soul, Sharenian: Sharen III's Grave (990000700)
*

View File

@@ -1,4 +1,5 @@
/* @Author Lerk, Ronan
/* @Author Lerk
* @Author Ronan
*
* Guardian Statue - Sharenian: Fountain of the Wiseman (990000500)
*

View File

@@ -20,7 +20,8 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*
* Author : Raz, Ronan
* Author : Raz
* Author : Ronan
*
* NPC = 9103000 - Pierre
* Map = Ludibrium - Ludibrium Maze 16

View File

@@ -20,7 +20,8 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*
* Author : Raz, Ronan
* Author : Raz
* Author : Ronan
*
* NPC = 9103001 - Rolly
* Map = Ludibrium - <Ludibrium>

View File

@@ -20,7 +20,8 @@
*/
/*Jack
*
*@author SharpAceX (Alan), Ronan
*@author SharpAceX (Alan)
*@author Ronan
*/
importPackage(Packages.server.expeditions);
importPackage(Packages.tools);

View File

@@ -20,7 +20,8 @@
*/
/*Aldol
*
*@author SharpAceX (Alan), Ronan
*@author SharpAceX (Alan)
*@author Ronan
*/
importPackage(Packages.server.expeditions);
importPackage(Packages.tools);
@@ -31,6 +32,7 @@ var expedition;
var player;
var em;
var exped = MapleExpeditionType.SCARGA;
var expedName = "Scarga";
var expedBoss = "Scarlion and Targa";
var expedMap = "Spooky World";
var expedItem = 4032246;
@@ -60,7 +62,7 @@ function action(mode, type, selection) {
cm.sendOk("You do not meet the criteria to battle " + expedBoss + "!");
cm.dispose();
} else if (expedition == null) { //Start an expedition
cm.sendSimple("#e#b<Expedition: Scarlion & Targa>\r\n#k#n" + em.getProperty("party") + "\r\n\r\nWould you like to assemble a team to take on #r" + expedBoss + "#k?\r\n#b#L1#Lets get this going!#l\r\n\#L2#No, I think I'll wait a bit...#l");
cm.sendSimple("#e#b<Expedition: " + expedName + ">\r\n#k#n" + em.getProperty("party") + "\r\n\r\nWould you like to assemble a team to take on #r" + expedBoss + "#k?\r\n#b#L1#Lets get this going!#l\r\n\#L2#No, I think I'll wait a bit...#l");
status = 1;
} else if (expedition.isLeader(player)) { //If you're the leader, manage the exped
cm.sendSimple(list);
@@ -75,7 +77,7 @@ function action(mode, type, selection) {
}
} else if (expedition.isInProgress()) { //Only if the expedition is in progress
if (expedition.contains(player)) { //If you're registered, warp you in
var eim = em.getInstance("Scarga" + player.getClient().getChannel());
var eim = em.getInstance(expedName + player.getClient().getChannel());
if(eim.getIntProperty("canJoin") == 1) {
eim.registerPlayer(player);
} else {

View File

@@ -0,0 +1,3 @@
//some quest where you must use hidden portals
function enter(pi) {
}

View File

@@ -1,4 +1,4 @@
/* By RonanLana */
/* @author RonanLana */
function enter(pi) {
if (!pi.haveItem(4000381)) {

Some files were not shown because too many files have changed in this diff Show More