Neo City + Revamped EllinPQ + New Release
Fixed Neo City area, now playable. Overhauled the EllinPQ mechanics, such as the "CLEAR" effect when passing maps, and some bug fixes along the way. Refactored a lot of out-of-place classes and properly renamed a few others through the project. Updated readme and licenses through the source, preparing the stage for the new release.
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
This file is part of the MapleSolaxiaV2 Maple Story Server
|
||||
This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server
|
||||
Copyleft (L) 2017 RonanLana
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
@@ -51,7 +52,7 @@ function action(mode, type, selection) {
|
||||
function generateSelectionMenu(array) { // nice tool for generating a string for the sendSimple functionality
|
||||
var menu = "";
|
||||
for (var i = 0; i < array.length; i++) {
|
||||
menu += "#L" + i + "#" + array[i] + "l\r\n";
|
||||
menu += "#L" + i + "#" + array[i] + "#l\r\n";
|
||||
}
|
||||
return menu;
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
This file is part of the MapleSolaxiaV2 Maple Story Server
|
||||
This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server
|
||||
Copyleft (L) 2017 RonanLana
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
|
||||
@@ -74,6 +74,8 @@ function setup(level, lobbyid) {
|
||||
var eim = em.newInstance("Ellin" + lobbyid);
|
||||
eim.setProperty("level", level);
|
||||
|
||||
eim.setProperty("statusStg4", 0);
|
||||
|
||||
eim.getInstanceMap(930000000).resetPQ(level);
|
||||
eim.getInstanceMap(930000100).resetPQ(level);
|
||||
eim.getInstanceMap(930000200).resetPQ(level);
|
||||
@@ -179,11 +181,27 @@ function end(eim) {
|
||||
function clearPQ(eim) {
|
||||
eim.stopEventTimer();
|
||||
eim.setEventCleared();
|
||||
|
||||
eim.warpEventTeam(930000800);
|
||||
}
|
||||
|
||||
function monsterKilled(mob, eim) {}
|
||||
function isPoisonGolem(mob) {
|
||||
var mobid = mob.getId();
|
||||
return (mobid == 9300182);
|
||||
}
|
||||
|
||||
function monsterKilled(mob, eim, hasKiller) {
|
||||
var map = mob.getMap();
|
||||
|
||||
if(isPoisonGolem(mob)) {
|
||||
eim.showClearEffect(map.getId());
|
||||
eim.clearPQ();
|
||||
} else if(map.countMonsters() == 0) {
|
||||
var stage = ((map.getId() % 1000) / 100);
|
||||
|
||||
if(stage == 1 || (stage == 4 && !hasKiller)) {
|
||||
eim.showClearEffect(map.getId());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function allMonstersDead(eim) {}
|
||||
|
||||
|
||||
98
scripts/event/GuardianNex.js
Normal file
98
scripts/event/GuardianNex.js
Normal file
@@ -0,0 +1,98 @@
|
||||
var minPlayers = 1;
|
||||
var timeLimit = 15; //15 minutes
|
||||
var eventTimer = 1000 * 60 * timeLimit;
|
||||
var exitMap = 240070000;
|
||||
var eventMap = 240070010;
|
||||
|
||||
function init(){}
|
||||
|
||||
function setup(difficulty, lobbyId){
|
||||
var eim = em.newInstance("Nex_" + lobbyId);
|
||||
eim.setIntProperty("nex", lobbyId);
|
||||
|
||||
eim.getInstanceMap(eventMap + 10 * lobbyId).resetFully();
|
||||
eim.getInstanceMap(eventMap + 10 * lobbyId).allowSummonState(false);
|
||||
respawn(eim);
|
||||
eim.startEventTimer(eventTimer);
|
||||
return eim;
|
||||
}
|
||||
|
||||
function afterSetup(eim){}
|
||||
|
||||
function respawn(eim){}
|
||||
|
||||
function playerEntry(eim, player){
|
||||
var cave = eim.getMapInstance(eventMap + 10 * eim.getIntProperty("nex"));
|
||||
player.changeMap(cave);
|
||||
}
|
||||
|
||||
function scheduledTimeout(eim){
|
||||
var party = eim.getPlayers();
|
||||
|
||||
for(var i = 0; i < party.size(); i++)
|
||||
playerExit(eim, party.get(i));
|
||||
|
||||
eim.dispose();
|
||||
}
|
||||
|
||||
function playerRevive(eim, player){
|
||||
player.setHp(50);
|
||||
player.setStance(0);
|
||||
eim.unregisterPlayer(player);
|
||||
player.changeMap(exitMap);
|
||||
return false;
|
||||
}
|
||||
|
||||
function playerDead(eim, player){}
|
||||
|
||||
function playerDisconnected(eim, player){
|
||||
var party = eim.getPlayers();
|
||||
|
||||
for(var i = 0; i < party.size(); i++){
|
||||
if(party.get(i).equals(player))
|
||||
removePlayer(eim, player);
|
||||
else
|
||||
playerExit(eim, party.get(i));
|
||||
}
|
||||
eim.dispose();
|
||||
}
|
||||
|
||||
function monsterValue(eim, mobId){
|
||||
return -1;
|
||||
}
|
||||
|
||||
function leftParty(eim, player){}
|
||||
|
||||
function disbandParty(eim){}
|
||||
|
||||
function playerUnregistered(eim, player){}
|
||||
|
||||
function playerExit(eim, player){
|
||||
eim.unregisterPlayer(player);
|
||||
player.changeMap(exitMap);
|
||||
}
|
||||
|
||||
function changedMap(eim, player, mapId){
|
||||
if(mapId != (eventMap + 10 * eim.getIntProperty("nex"))){
|
||||
removePlayer(eim, player);
|
||||
eim.stopEventTimer();
|
||||
eim.setEventCleared();
|
||||
eim.dispose();
|
||||
}
|
||||
}
|
||||
|
||||
function removePlayer(eim, player){
|
||||
eim.unregisterPlayer(player);
|
||||
player.getMap().removePlayer(player);
|
||||
player.setMap(exitMap);
|
||||
}
|
||||
|
||||
function cancelSchedule(){}
|
||||
|
||||
function dispose(){}
|
||||
|
||||
function clearPQ(eim){}
|
||||
|
||||
function monsterKilled(mob, eim){}
|
||||
|
||||
function allMonstersDead(eim){}
|
||||
210
scripts/event/TD_Battle1.js
Normal file
210
scripts/event/TD_Battle1.js
Normal file
@@ -0,0 +1,210 @@
|
||||
/**
|
||||
* @author: Ronan
|
||||
* @event: Vs Bergamot
|
||||
*/
|
||||
|
||||
var isPq = true;
|
||||
var minPlayers = 2, maxPlayers = 6;
|
||||
var minLevel = 70, maxLevel = 255;
|
||||
var entryMap = 240070203;
|
||||
var exitMap = 240070202;
|
||||
var recruitMap = 240070202;
|
||||
var clearMap = 240070202;
|
||||
|
||||
var minMapId = 240070203;
|
||||
var maxMapId = 240070203;
|
||||
|
||||
var tdBossId = 7220005;
|
||||
|
||||
var eventTime = 10; // 10 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 = [];
|
||||
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("TDBoss" + lobbyid);
|
||||
eim.setProperty("level", level);
|
||||
eim.setProperty("boss", "0");
|
||||
|
||||
eim.getInstanceMap(240070203).resetPQ(level);
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
function isTDBoss(mob) {
|
||||
var mobid = mob.getId();
|
||||
return mobid == tdBossId;
|
||||
}
|
||||
|
||||
function monsterKilled(mob, eim) {
|
||||
if(isTDBoss(mob)) {
|
||||
eim.showClearEffect();
|
||||
eim.clearPQ();
|
||||
}
|
||||
}
|
||||
|
||||
function allMonstersDead(eim) {}
|
||||
|
||||
function cancelSchedule() {}
|
||||
|
||||
function dispose(eim) {}
|
||||
|
||||
210
scripts/event/TD_Battle2.js
Normal file
210
scripts/event/TD_Battle2.js
Normal file
@@ -0,0 +1,210 @@
|
||||
/**
|
||||
* @author: Ronan
|
||||
* @event: Vs Dunas
|
||||
*/
|
||||
|
||||
var isPq = true;
|
||||
var minPlayers = 2, maxPlayers = 6;
|
||||
var minLevel = 70, maxLevel = 255;
|
||||
var entryMap = 240070303;
|
||||
var exitMap = 240070302;
|
||||
var recruitMap = 240070302;
|
||||
var clearMap = 240070302;
|
||||
|
||||
var minMapId = 240070303;
|
||||
var maxMapId = 240070303;
|
||||
|
||||
var tdBossId = 8220010;
|
||||
|
||||
var eventTime = 10; // 10 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 = [];
|
||||
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("TDBoss" + lobbyid);
|
||||
eim.setProperty("level", level);
|
||||
eim.setProperty("boss", "0");
|
||||
|
||||
eim.getInstanceMap(240070203).resetPQ(level);
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
function isTDBoss(mob) {
|
||||
var mobid = mob.getId();
|
||||
return mobid == tdBossId;
|
||||
}
|
||||
|
||||
function monsterKilled(mob, eim) {
|
||||
if(isTDBoss(mob)) {
|
||||
eim.showClearEffect();
|
||||
eim.clearPQ();
|
||||
}
|
||||
}
|
||||
|
||||
function allMonstersDead(eim) {}
|
||||
|
||||
function cancelSchedule() {}
|
||||
|
||||
function dispose(eim) {}
|
||||
|
||||
210
scripts/event/TD_Battle3.js
Normal file
210
scripts/event/TD_Battle3.js
Normal file
@@ -0,0 +1,210 @@
|
||||
/**
|
||||
* @author: Ronan
|
||||
* @event: Vs Aufheben
|
||||
*/
|
||||
|
||||
var isPq = true;
|
||||
var minPlayers = 2, maxPlayers = 6;
|
||||
var minLevel = 70, maxLevel = 255;
|
||||
var entryMap = 240070403;
|
||||
var exitMap = 240070402;
|
||||
var recruitMap = 240070402;
|
||||
var clearMap = 240070402;
|
||||
|
||||
var minMapId = 240070403;
|
||||
var maxMapId = 240070403;
|
||||
|
||||
var tdBossId = 8220011;
|
||||
|
||||
var eventTime = 15; // 15 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 = [];
|
||||
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("TDBoss" + lobbyid);
|
||||
eim.setProperty("level", level);
|
||||
eim.setProperty("boss", "0");
|
||||
|
||||
eim.getInstanceMap(240070203).resetPQ(level);
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
function isTDBoss(mob) {
|
||||
var mobid = mob.getId();
|
||||
return mobid == tdBossId;
|
||||
}
|
||||
|
||||
function monsterKilled(mob, eim) {
|
||||
if(isTDBoss(mob)) {
|
||||
eim.showClearEffect();
|
||||
eim.clearPQ();
|
||||
}
|
||||
}
|
||||
|
||||
function allMonstersDead(eim) {}
|
||||
|
||||
function cancelSchedule() {}
|
||||
|
||||
function dispose(eim) {}
|
||||
|
||||
210
scripts/event/TD_Battle4.js
Normal file
210
scripts/event/TD_Battle4.js
Normal file
@@ -0,0 +1,210 @@
|
||||
/**
|
||||
* @author: Ronan
|
||||
* @event: Vs Oberon
|
||||
*/
|
||||
|
||||
var isPq = true;
|
||||
var minPlayers = 2, maxPlayers = 6;
|
||||
var minLevel = 70, maxLevel = 255;
|
||||
var entryMap = 240070503;
|
||||
var exitMap = 240070502;
|
||||
var recruitMap = 240070502;
|
||||
var clearMap = 240070502;
|
||||
|
||||
var minMapId = 240070503;
|
||||
var maxMapId = 240070503;
|
||||
|
||||
var tdBossId = 8220012;
|
||||
|
||||
var eventTime = 15; // 15 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 = [];
|
||||
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("TDBoss" + lobbyid);
|
||||
eim.setProperty("level", level);
|
||||
eim.setProperty("boss", "0");
|
||||
|
||||
eim.getInstanceMap(240070203).resetPQ(level);
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
function isTDBoss(mob) {
|
||||
var mobid = mob.getId();
|
||||
return mobid == tdBossId;
|
||||
}
|
||||
|
||||
function monsterKilled(mob, eim) {
|
||||
if(isTDBoss(mob)) {
|
||||
eim.showClearEffect();
|
||||
eim.clearPQ();
|
||||
}
|
||||
}
|
||||
|
||||
function allMonstersDead(eim) {}
|
||||
|
||||
function cancelSchedule() {}
|
||||
|
||||
function dispose(eim) {}
|
||||
|
||||
210
scripts/event/TD_Battle5.js
Normal file
210
scripts/event/TD_Battle5.js
Normal file
@@ -0,0 +1,210 @@
|
||||
/**
|
||||
* @author: Ronan
|
||||
* @event: Vs Nibelung
|
||||
*/
|
||||
|
||||
var isPq = true;
|
||||
var minPlayers = 2, maxPlayers = 6;
|
||||
var minLevel = 70, maxLevel = 255;
|
||||
var entryMap = 240070603;
|
||||
var exitMap = 240070602;
|
||||
var recruitMap = 240070602;
|
||||
var clearMap = 240070602;
|
||||
|
||||
var minMapId = 240070603;
|
||||
var maxMapId = 240070603;
|
||||
|
||||
var tdBossId = 8220015;
|
||||
|
||||
var eventTime = 20; // 20 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 = [];
|
||||
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("TDBoss" + lobbyid);
|
||||
eim.setProperty("level", level);
|
||||
eim.setProperty("boss", "0");
|
||||
|
||||
eim.getInstanceMap(240070203).resetPQ(level);
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
function isTDBoss(mob) {
|
||||
var mobid = mob.getId();
|
||||
return mobid == tdBossId;
|
||||
}
|
||||
|
||||
function monsterKilled(mob, eim) {
|
||||
if(isTDBoss(mob)) {
|
||||
eim.showClearEffect();
|
||||
eim.clearPQ();
|
||||
}
|
||||
}
|
||||
|
||||
function allMonstersDead(eim) {}
|
||||
|
||||
function cancelSchedule() {}
|
||||
|
||||
function dispose(eim) {}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
This file is part of the MapleSolaxiaV2 Maple Story Server
|
||||
This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server
|
||||
Copyleft (L) 2017 RonanLana
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
|
||||
49
scripts/npc/2082004.js
Normal file
49
scripts/npc/2082004.js
Normal file
@@ -0,0 +1,49 @@
|
||||
/*
|
||||
This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server
|
||||
Copyleft (L) 2017 RonanLana
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
published by the Free Software Foundation version 3 as published by
|
||||
the Free Software Foundation. You may not use, modify or distribute
|
||||
this program under any other version of the GNU Affero General Public
|
||||
License.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/* Andy
|
||||
Tera Forest Time Gate
|
||||
*/
|
||||
|
||||
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("Hi, I am Andy, the time traveler from a not so distant future. I have come to avert the creation of machines by the greedy people of this time. They went berserk on my time and consumed everything to dust. I must stop it at any cost!");
|
||||
cm.dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
95
scripts/npc/2083006.js
Normal file
95
scripts/npc/2083006.js
Normal file
@@ -0,0 +1,95 @@
|
||||
/*
|
||||
@Author Ronan
|
||||
(Neo Tokyo Teleporter)
|
||||
*/
|
||||
|
||||
var quests = [3719, 3724, 3730, 3736, 3742, 3748];
|
||||
var array = ["Year 2021 - Average Town Entrance", "Year 2099 - Midnight Harbor Entrance", "Year 2215 - Bombed City Center Retail District", "Year 2216 - Ruined City Intersection", "Year 2230 - Dangerous Tower Lobby", "Year 2503 - Air Battleship Bow"/*, "Year 2227 - Dangerous City Intersection"*/];
|
||||
var limit;
|
||||
|
||||
function start() {
|
||||
if(!cm.isQuestCompleted(3718)) {
|
||||
cm.sendOk("The time machine has not been activated yet.");
|
||||
cm.dispose();
|
||||
return;
|
||||
}
|
||||
|
||||
for(limit = 0; limit < quests.length; limit++) {
|
||||
if(!cm.isQuestCompleted(quests[limit])) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(limit == 0) {
|
||||
cm.sendOk("Prove your valor against the #bGuardian Nex#k before unlocking next Neo City maps.");
|
||||
cm.dispose();
|
||||
return;
|
||||
}
|
||||
|
||||
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) {
|
||||
var menuSel = generateSelectionMenu(array, limit);
|
||||
cm.sendSimple(menuSel);
|
||||
} else if(status == 1) {
|
||||
var mapid = 0;
|
||||
|
||||
switch (selection) {
|
||||
case 0:
|
||||
mapid = 240070100;
|
||||
break;
|
||||
case 1:
|
||||
mapid = 240070200;
|
||||
break;
|
||||
case 2:
|
||||
mapid = 240070300;
|
||||
break;
|
||||
case 3:
|
||||
mapid = 240070400;
|
||||
break;
|
||||
case 4:
|
||||
mapid = 240070500;
|
||||
break;
|
||||
case 5:
|
||||
mapid = 240070600;
|
||||
break;
|
||||
/*case 6:
|
||||
mapid = 683070400;
|
||||
break;*/
|
||||
}
|
||||
|
||||
if (mapid > 0) {
|
||||
cm.warp(mapid, 1);
|
||||
} else {
|
||||
cm.sendOk("Complete your mission first.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function generateSelectionMenu(array, limit) { // nice tool for generating a string for the sendSimple functionality
|
||||
var menu = "";
|
||||
|
||||
var len = Math.min(limit, array.length);
|
||||
for (var i = 0; i < len; i++) {
|
||||
menu += "#L" + i + "#" + array[i] + "#l\r\n";
|
||||
}
|
||||
return menu;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,50 +1,130 @@
|
||||
var status = -1;
|
||||
/**
|
||||
* @author: Ronan
|
||||
* @npc: Ellin
|
||||
* @map: Ellin PQ
|
||||
* @func: Ellin PQ Coordinator
|
||||
*/
|
||||
|
||||
var status = 0;
|
||||
var mapid;
|
||||
|
||||
function start() {
|
||||
action(1,0,0);
|
||||
mapid = cm.getPlayer().getMapId();
|
||||
|
||||
status = -1;
|
||||
action(1, 0, 0);
|
||||
}
|
||||
|
||||
function action(mode, type, selection) {
|
||||
if (mode == 1) {
|
||||
status++;
|
||||
} else {
|
||||
status--;
|
||||
}
|
||||
switch(cm.getPlayer().getMapId()) {
|
||||
if (mode == -1) {
|
||||
cm.dispose();
|
||||
} else {
|
||||
if (mode == 0 && status == 0) {
|
||||
cm.dispose();
|
||||
return;
|
||||
}
|
||||
if (mode == 1)
|
||||
status++;
|
||||
else
|
||||
status--;
|
||||
|
||||
if(status == 0) {
|
||||
var ellinStr = ellinMapMessage(mapid);
|
||||
|
||||
if(mapid == 930000000) {
|
||||
cm.sendNext(ellinStr);
|
||||
} else if(mapid == 930000300) {
|
||||
var eim = cm.getEventInstance();
|
||||
|
||||
if(eim.getIntProperty("statusStg4") == 0) {
|
||||
eim.showClearEffect(cm.getMap().getId());
|
||||
eim.setIntProperty("statusStg4", 1);
|
||||
}
|
||||
|
||||
cm.sendNext(ellinStr);
|
||||
} else if(mapid == 930000400) {
|
||||
if (cm.haveItem(4001169, 20)) {
|
||||
if(cm.isEventLeader()) {
|
||||
cm.sendNext("Oh you have brought them! We can now continue, shall we proceed?");
|
||||
} else {
|
||||
cm.sendOk("You have brought them, but you're not the leader! Please let the leader hand me the marbles...");
|
||||
cm.dispose();
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
if(cm.getEventInstance().gridCheck(cm.getPlayer()) != 1) {
|
||||
cm.sendNext(ellinStr);
|
||||
|
||||
cm.getEventInstance().gridInsert(cm.getPlayer(), 1);
|
||||
status = -1;
|
||||
} else {
|
||||
var mobs = cm.getMap().countMonsters();
|
||||
|
||||
if(mobs > 0) {
|
||||
if (!cm.haveItem(2270004)) {
|
||||
if(cm.canHold(2270004, 10)) {
|
||||
cm.gainItem(2270004, 10);
|
||||
cm.sendOk("Take 10 #t2270004#. First, #rweaken the #o9300174##k and, once it gets low health, use the item I gave you to capture them.");
|
||||
cm.dispose();
|
||||
return;
|
||||
} else {
|
||||
cm.sendOk("Please make space on your USE inventory before receiving the purifiers!");
|
||||
cm.dispose();
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
cm.sendYesNo(ellinStr + "\r\n\r\nIt may be you are #rwilling to quit#k? Please double-think it, maybe your partners are still trying this instance.");
|
||||
}
|
||||
} else {
|
||||
cm.sendYesNo("You guys caught all the #o9300174#. Let the party leader hand all #b20 #t4001169##k to me to proceed." + "\r\n\r\nIt may be you are #rwilling to quit#k? Please double-think it, maybe your partners are still trying this instance.");
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
cm.sendYesNo(ellinStr + "\r\n\r\nIt may be you are #rwilling to quit#k? Please double-think it, maybe your partners are still trying this instance.");
|
||||
}
|
||||
} else if(status == 1) {
|
||||
if(mapid == 930000000) {
|
||||
} else if(mapid == 930000300) {
|
||||
cm.getEventInstance().warpEventTeam(930000400);
|
||||
} else if(mapid == 930000400) {
|
||||
if(cm.haveItem(4001169, 20) && cm.isEventLeader()) {
|
||||
cm.gainItem(4001169, -20);
|
||||
cm.getEventInstance().warpEventTeam(930000500);
|
||||
} else {
|
||||
cm.warp(930000800);
|
||||
}
|
||||
} else {
|
||||
cm.warp(930000800);
|
||||
}
|
||||
|
||||
cm.dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function ellinMapMessage(mapid) {
|
||||
switch(mapid) {
|
||||
case 930000000:
|
||||
cm.sendNext("Welcome. Please enter the portal.");
|
||||
break;
|
||||
return "Welcome to the Forest of Poison Haze. Proceed by entering the portal.";
|
||||
|
||||
case 930000100:
|
||||
cm.sendNext("We have to eliminate all these contaminated monsters!");
|
||||
break;
|
||||
return "The #b#o9300172##k have taken the area. We have to eliminate all these contaminated monsters to proceed further.";
|
||||
|
||||
case 930000200:
|
||||
cm.sendNext("We have to eliminate all these contaminated reactors!");
|
||||
break;
|
||||
return "A great spine has blocked the way ahead. To remove this barrier we must retrieve the poison the #b#o9300173##k carries to deter the overgrown spine. However, the poison in natural state can't be handled, as it is way too concentrated. Use the #bfountain#k over there to dilute it.";
|
||||
|
||||
case 930000300:
|
||||
cm.getEventInstance().warpEventTeam(930000400);
|
||||
break;
|
||||
return "Oh great, you have reached me. We can now proceed further inside the forest.";
|
||||
|
||||
case 930000400:
|
||||
if (cm.haveItem(4001169,20)) {
|
||||
cm.getEventInstance().warpEventTeam(930000500);
|
||||
cm.gainItem(4001169,-20);
|
||||
} else if (!cm.haveItem(2270004)) {
|
||||
if(cm.canHold(2270004,10)) {
|
||||
cm.gainItem(2270004,10);
|
||||
cm.sendOk("Good luck in purifying these monsters!");
|
||||
}
|
||||
else {
|
||||
cm.sendOk("Make space on your USE inventory before receiving the purifiers!");
|
||||
}
|
||||
} else {
|
||||
cm.sendOk("We have to purify all these contaminated monsters! Get me 20 Monster Marbles from them!");
|
||||
}
|
||||
break;
|
||||
return "The #b#o9300175##k took over this area. However they are not ordinary monsters, then regrow pretty fast, #rnormal weapon and magic does no harm to it#k at all. We have to purify all these contaminated monsters, using #b#t2270004##k! Let your group leader get me 20 Monster Marbles from them.";
|
||||
|
||||
case 930000600:
|
||||
cm.sendNext("This is it! Place the Magic Stone on the Altar!");
|
||||
break;
|
||||
return "The root of all problems of the forest! Place the obtained Magic Stone on the Altar and prepare yourselves!";
|
||||
|
||||
case 930000700:
|
||||
cm.warp(930000800,0);
|
||||
break;
|
||||
return "This is it, you guys did it! Thank you so much for purifying the forest!!";
|
||||
|
||||
}
|
||||
cm.dispose();
|
||||
}
|
||||
@@ -14,12 +14,12 @@ function action(mode, type, selection) {
|
||||
status--;
|
||||
}
|
||||
if (status == 0) {
|
||||
cm.sendYesNo("Would you like to get out?");
|
||||
cm.sendYesNo("Would you like to exit this instance? Your party members may have to abandon it as well, so take that in mind.");
|
||||
} else if (status == 1) {
|
||||
cm.removeAll(4001163);
|
||||
cm.removeAll(4001169);
|
||||
cm.removeAll(2270004);
|
||||
cm.warp(930000800,0);
|
||||
cm.warp(930000800);
|
||||
cm.dispose();
|
||||
}
|
||||
}
|
||||
@@ -5,19 +5,32 @@ function start() {
|
||||
}
|
||||
|
||||
function action(mode, type, selection) {
|
||||
if (mode == 1) {
|
||||
status++;
|
||||
} else {
|
||||
status--;
|
||||
}
|
||||
switch(cm.getPlayer().getMapId()) {
|
||||
case 930000500:
|
||||
if (!cm.haveItem(4001163)) {
|
||||
cm.sendNext("Get me the Purple Stone of Magic from here.");
|
||||
} else {
|
||||
cm.getEventInstance().warpEventTeam(930000600);
|
||||
}
|
||||
break;
|
||||
}
|
||||
cm.dispose();
|
||||
if (mode == -1) {
|
||||
cm.dispose();
|
||||
} else {
|
||||
if (mode == 0 && type > 0) {
|
||||
cm.dispose();
|
||||
return;
|
||||
}
|
||||
if (mode == 1)
|
||||
status++;
|
||||
else
|
||||
status--;
|
||||
|
||||
if(status == 0) {
|
||||
if(!cm.haveItem(4001163) || !cm.isEventLeader()) {
|
||||
cm.sendYesNo("Let your party leader show me the Purple Stone of Magic from here.\r\n\r\nOr maybe you want to #rleave this forest#k? Leaving now means to abandon your partners here, take that in mind.");
|
||||
} else {
|
||||
cm.sendNext("Great, you have the Purple Stone of Magic. I shall show you guys #bthe path leading to the Stone Altar#k. Come this way.");
|
||||
}
|
||||
} else if(status == 1) {
|
||||
if (!cm.haveItem(4001163)) {
|
||||
cm.warp(930000800);
|
||||
} else {
|
||||
cm.getEventInstance().warpEventTeam(930000600);
|
||||
}
|
||||
|
||||
cm.dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
32
scripts/portal/TD_Boss_enter.js
Normal file
32
scripts/portal/TD_Boss_enter.js
Normal file
@@ -0,0 +1,32 @@
|
||||
/* @author RonanLana */
|
||||
|
||||
function enter(pi) {
|
||||
var stage = ((Math.floor(pi.getMapId() / 100)) % 10) - 1;
|
||||
var em = pi.getEventManager("TD_Battle" + stage);
|
||||
if(em == null) {
|
||||
pi.playerMessage(5, "TD Battle " + stage + " encountered an unexpected error and is currently unavailable.");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (pi.getParty() == null) {
|
||||
pi.playerMessage(5, "You are currently not in a party, create one to attempt the boss.");
|
||||
return false;
|
||||
} else if(!pi.isLeader()) {
|
||||
pi.playerMessage(5, "Your party leader must enter the portal to start the battle.");
|
||||
return false;
|
||||
} else {
|
||||
var eli = em.getEligibleParty(pi.getParty());
|
||||
if(eli.size() > 0) {
|
||||
if(!em.startInstance(pi.getParty(), pi.getPlayer().getMap(), 1)) {
|
||||
pi.playerMessage(5, "The battle against the boss has already begun, so you may not enter this place.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else {
|
||||
pi.playerMessage(5, "Your party must consist of at least 2 players to attempt the boss.");
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
4
scripts/portal/TD_chat_enter.js
Normal file
4
scripts/portal/TD_chat_enter.js
Normal file
@@ -0,0 +1,4 @@
|
||||
function enter(pi) {
|
||||
pi.openNpc(2083006);
|
||||
return false;
|
||||
}
|
||||
28
scripts/portal/TD_neo_inTree.js
Normal file
28
scripts/portal/TD_neo_inTree.js
Normal file
@@ -0,0 +1,28 @@
|
||||
function enter(pi) {
|
||||
var nex = pi.getEventManager("GuardianNex");
|
||||
if(nex == null) {
|
||||
pi.message("Guardian Nex event encontered an error and is unavailable.");
|
||||
return false;
|
||||
}
|
||||
|
||||
var quests = [3719, 3724, 3730, 3736, 3742, 3748];
|
||||
var mobs = [7120100, 7120101, 7120102, 8120100, 8120101, 8140510];
|
||||
|
||||
for(var i = 0; i < quests.length; i++) {
|
||||
if (pi.isQuestActive(quests[i])) {
|
||||
if(pi.getQuestProgress(quests[i], mobs[i]) != 0) {
|
||||
pi.message("You already faced Nex. Complete your mission.");
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!nex.startInstance(i, pi.getPlayer())) {
|
||||
pi.message("Someone is already challenging Nex. Wait for them to finish before you enter.");
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
@@ -1,15 +1,14 @@
|
||||
function enter(pi) {
|
||||
if ((pi.getMap().getMonsters().size() == 0 || pi.getMap().getMonsterById(9300183) != null) && (pi.getMap().getReactorByName("") == null || pi.getMap().getReactorByName("").getState() == 1)) {
|
||||
var eim = pi.getEventInstance();
|
||||
|
||||
if (eim.isEventCleared()) {
|
||||
if(pi.isEventLeader()) {
|
||||
pi.getEventInstance().clearPQ();
|
||||
eim.warpEventTeam(930000800);
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
pi.playerMessage(5, "Wait for the leader to pass through the portal.");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
} else {
|
||||
pi.playerMessage(5, "Please eliminate the Poison Golem.");
|
||||
return false;
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
This file is part of the MapleSolaxiaV2 Maple Story Server
|
||||
This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server
|
||||
Copyleft (L) 2017 RonanLana
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
This file is part of the MapleSolaxiaV2 Maple Story Server
|
||||
This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server
|
||||
Copyleft (L) 2017 RonanLana
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
This file is part of the MapleSolaxiaV2 Maple Story Server
|
||||
This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server
|
||||
Copyleft (L) 2017 RonanLana
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
This file is part of the MapleSolaxiaV2 Maple Story Server
|
||||
This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server
|
||||
Copyleft (L) 2017 RonanLana
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
This file is part of the MapleSolaxiaV2 Maple Story Server
|
||||
This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server
|
||||
Copyleft (L) 2017 RonanLana
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
This file is part of the MapleSolaxiaV2 Maple Story Server
|
||||
This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server
|
||||
Copyleft (L) 2017 RonanLana
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
This file is part of the MapleSolaxiaV2 Maple Story Server
|
||||
This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server
|
||||
Copyleft (L) 2017 RonanLana
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
This file is part of the MapleSolaxiaV2 Maple Story Server
|
||||
This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server
|
||||
Copyleft (L) 2017 RonanLana
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
This file is part of the MapleSolaxiaV2 Maple Story Server
|
||||
This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server
|
||||
Copyleft (L) 2017 RonanLana
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
This file is part of the MapleSolaxiaV2 Maple Story Server
|
||||
This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server
|
||||
Copyleft (L) 2017 RonanLana
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
This file is part of the MapleSolaxiaV2 Maple Story Server
|
||||
This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server
|
||||
Copyleft (L) 2017 RonanLana
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
This file is part of the MapleSolaxiaV2 Maple Story Server
|
||||
This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server
|
||||
Copyleft (L) 2017 RonanLana
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
This file is part of the MapleSolaxiaV2 Maple Story Server
|
||||
This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server
|
||||
Copyleft (L) 2017 RonanLana
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
This file is part of the MapleSolaxiaV2 Maple Story Server
|
||||
This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server
|
||||
Copyleft (L) 2017 RonanLana
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
This file is part of the MapleSolaxiaV2 Maple Story Server
|
||||
This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server
|
||||
Copyleft (L) 2017 RonanLana
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
This file is part of the MapleSolaxiaV2 Maple Story Server
|
||||
This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server
|
||||
Copyleft (L) 2017 RonanLana
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
This file is part of the MapleSolaxiaV2 Maple Story Server
|
||||
This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server
|
||||
Copyleft (L) 2017 RonanLana
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
This file is part of the MapleSolaxiaV2 Maple Story Server
|
||||
This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server
|
||||
Copyleft (L) 2017 RonanLana
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
This file is part of the MapleSolaxiaV2 Maple Story Server
|
||||
This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server
|
||||
Copyleft (L) 2017 RonanLana
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
This file is part of the MapleSolaxiaV2 Maple Story Server
|
||||
This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server
|
||||
Copyleft (L) 2017 RonanLana
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
|
||||
30
scripts/reactor/2402007.js
Normal file
30
scripts/reactor/2402007.js
Normal file
@@ -0,0 +1,30 @@
|
||||
/*
|
||||
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/>.
|
||||
*/
|
||||
|
||||
/* @Author Ronan
|
||||
*
|
||||
* Neo City Trash Can
|
||||
*/
|
||||
|
||||
function hit(){
|
||||
rm.dropItems(true, 2, 5, 10, 1);
|
||||
}
|
||||
30
scripts/reactor/2402008.js
Normal file
30
scripts/reactor/2402008.js
Normal file
@@ -0,0 +1,30 @@
|
||||
/*
|
||||
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/>.
|
||||
*/
|
||||
|
||||
/* @Author Ronan
|
||||
*
|
||||
* Neo City Trash Can
|
||||
*/
|
||||
|
||||
function hit(){
|
||||
rm.dropItems(true, 2, 5, 10, 1);
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
function act() {
|
||||
rm.getEventInstance().showClearEffect(rm.getMap().getId());
|
||||
rm.dropItems();
|
||||
}
|
||||
|
||||
12
scripts/reactor/3009000.js
Normal file
12
scripts/reactor/3009000.js
Normal file
@@ -0,0 +1,12 @@
|
||||
/**
|
||||
* @author: Ronan
|
||||
* @reactor: Spine
|
||||
* @map: 930000200 - Forest of Poison Haze - Deteriorated Forest
|
||||
* @func: Water Fountain
|
||||
*/
|
||||
|
||||
function act() {
|
||||
if(rm.getReactor().getState() == 4) {
|
||||
rm.getEventInstance().showClearEffect(rm.getMap().getId());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user