Implemented CWKPQ

Made CWKPQ fully-functional, using the Expedition system (won't work
with the lobby system).
This commit is contained in:
ronancpl
2017-06-30 01:26:47 -03:00
parent a7beff1bb4
commit ca3838050d
126 changed files with 50072 additions and 49743 deletions

View File

@@ -6,7 +6,7 @@ Credits are to be given too to Nexon(Duh!), the original MapleSolaxia staff and
Regarding distributability and usage of the code presented here: like it was before, this MapleStory server is open-source. By that, it is meant that anyone is free to install, use, modify and redistribute the contents, as long as there is no kind of commercial trading involved and the credits to the original creators are maintained within the codes.
This is a NetBeans 8.0.2 Project. This means that it's easier to install the project via opening the server project folder inside NetBeans' IDE. Once installed, build this project on your machine and run the server using the "launch.bat" application.
This is a NetBeans 8.0.2 Project, that must be built and run under JDK/JRE 7 in order to run properly. This means that it's easier to install the project via opening the server project folder inside NetBeans' IDE. Once installed, build this project on your machine and run the server using the "launch.bat" application.
In this project, many gameplay-wise issues generated from either the original WZ files and the server sources have been partially or completely solved. Considering the use of the provided edited WZ's and server-side wz.xml files should be of the greatest importance when dealing with this instance of private server, in order to perceive it at it's full potential. My opinion, though! Refer to "README_wzchanges.txt" for more information on what have been changed from Nexon's v83 WZ files.

View File

@@ -1,4 +1,4 @@
#Mon, 26 Jun 2017 01:21:39 -0300
#Fri, 30 Jun 2017 01:05:52 -0300
C\:\\Nexon\\MapleSolaxia\\MapleSolaxiaV2=

BIN
dist/MapleSolaxia.jar vendored

Binary file not shown.

View File

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

View File

@@ -340,4 +340,11 @@ Corrigido "player logged in" aparecendo sempre que jogador troca de canal.
MGC do jogador agora está sincronizado com o MGC da guild, não o contrário.
23 - 26 Junho 2017,
Diversas reimplementações de mecânicas da CWKPQ, ainda trabalho em progresso.
Diversas reimplementações de mecânicas da CWKPQ, ainda trabalho em progresso.
27 Junho 2017,
Reestruturação parcial do esquema de footholds do stage 4 da CWKPQ.
28 - 29 Junho 2017,
Acabamento final da CWKPQ.
Corrigido bug no esquema de recuperação de diretórios dos mapas, referenciados em String.wz.

View File

@@ -3,31 +3,19 @@
<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/1092014.js</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/scripts/reactor/6109000.js</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/scripts/portal/glpqPortal6.js</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/scripts/npc/9201112.js</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/server/PortalFactory.java</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/scripting/AbstractPlayerInteraction.java</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/net/server/channel/handlers/PlayerInteractionHandler.java</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/scripting/portal/PortalPlayerInteraction.java</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/scripts/reactor/6102001.js</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/server/maps/MapleGenericPortal.java</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/scripts/npc/9201107.js</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/server/maps/MapleMapFactory.java</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/server/expeditions/MapleExpeditionType.java</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/scripts/event/CWKPQ.js</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/net/server/channel/handlers/ChangeMapHandler.java</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/scripts/portal/glpqPortal7.js</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/server/expeditions/MapleExpedition.java</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/client/command/Commands.java</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/scripts/npc/9201112.js</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/scripting/event/EventInstanceManager.java</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/scripting/AbstractPlayerInteraction.java</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/scripts/npc/9201110.js</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/scripts/portal/glpqPortal3.js</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/client/MapleJob.java</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/scripting/portal/PortalScriptManager.java</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/net/server/channel/handlers/InnerPortalHandler.java</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/scripts/npc/9201115.js</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/server/MaplePortal.java</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/scripts/npc/9201108.js</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/scripts/npc/9201109.js</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/scripts/portal/party3_r6pt.js</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/scripts/npc/9201113.js</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/provider/MapleDataTool.java</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/client/MapleCharacter.java</file>
<file>file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/scripting/event/EventManager.java</file>
</group>
</open-files>
</project-private>

View File

@@ -1,26 +1,66 @@
var minPlayers = 1;
var mapz = Array(100, 200, 300, 400, 500, 510, 520, 521, 522, 530, 540, 550, 600, 700, 800);
var a = Array("a", "b", "c", "d", "e", "f", "g", "h", "i");
/*
a1,3,6
b1-7
c1,3,6
d1-7
e1-7
f1,3,6
g1-7
h1,3,6
i1-7
/**
* @author: Ronan
* @event: Crimsonwood Keep PQ
*/
var pos_x = Array(944,401,28,-332,-855);
var pos_y = Array(-204,-384,-504,-384,-204);
var pos_y2 = Array(-144, -444, -744, -1044, -1344, -1644);
var isPq = true;
var minPlayers = 6, maxPlayers = 30;
var minLevel = 100, maxLevel = 255;
var entryMap = 610030100;
var exitMap = 610030020;
var recruitMap = 610030020;
var clearMap = 610030020;
var minMapId = 610030100;
var maxMapId = 610030800;
var eventTime = 2; // 2 minutes for first stg
var lobbyRange = [0, 0];
function init() {
em.setProperty("state", "0");
em.setProperty("leader", "true");
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 = [4001256, 4001257, 4001258, 4001259, 4001260];
eim.setExclusiveItems(itemSet);
}
function setEventRewards(eim) {
var itemSet, itemQty, evLevel, expStages, mesoStages;
evLevel = 1; //Rewards at clear PQ
itemSet = [];
itemQty = [];
eim.setEventRewards(evLevel, itemSet, itemQty);
expStages = [2500, 8000, 18000, 25000, 30000, 40000]; //bonus exp given on CLEAR stage signal
eim.setEventClearStageExp(expStages);
mesoStages = [500, 1000, 2000, 5000, 8000, 20000]; //bonus meso given on CLEAR stage signal
eim.setEventClearStageMeso(mesoStages);
}
function afterSetup(eim) {}
@@ -84,8 +124,6 @@ function generateMapReactors(map) {
function setup(channel) {
var eim = em.newInstance("CWKPQ" + channel);
eim.setProperty("state", "1");
eim.setProperty("leader", "true");
eim.setProperty("current_instance", "0");
eim.setProperty("glpq1", "0");
eim.setProperty("glpq2", "0");
@@ -95,45 +133,65 @@ function setup(channel) {
eim.setProperty("glpq5", "0");
eim.setProperty("glpq5_room", "0");
eim.setProperty("glpq6", "0");
eim.setProperty("glpq_f0", "0");
eim.setProperty("glpq_f1", "0");
eim.setProperty("glpq_f2", "0");
eim.setProperty("glpq_f3", "0");
eim.setProperty("glpq_f4", "0");
eim.setProperty("glpq_f5", "0");
eim.setProperty("glpq_f6", "0");
eim.setProperty("glpq_f7", "0");
eim.setProperty("glpq_s", "0");
for (var i = 0; i < mapz.length; i++) {
var map = eim.getInstanceMap(610030000 + mapz[i]);
if (map != null) {
map.resetFully();
if (map.getId() == 610030400) {
generateMapReactors(map);
//add environments
for (var x = 0; x < a.length; x++) {
for (var y = 1; y <= 7; y++) {
if (x == 1 || x == 3 || x == 4 || x == 6 || x == 8) {
if (y != 2 && y != 4 && y != 5 && y != 7) {
map.moveEnvironment(a[x] + "" + y, 1);
}
} else {
map.moveEnvironment(a[x] + "" + y, 1);
}
}
var level = 1;
eim.getInstanceMap(610030100).resetPQ(level);
eim.getInstanceMap(610030200).resetPQ(level);
eim.getInstanceMap(610030300).resetPQ(level);
eim.getInstanceMap(610030400).resetPQ(level);
eim.getInstanceMap(610030500).resetPQ(level);
eim.getInstanceMap(610030510).resetPQ(level);
eim.getInstanceMap(610030520).resetPQ(level);
eim.getInstanceMap(610030521).resetPQ(level);
eim.getInstanceMap(610030522).resetPQ(level);
eim.getInstanceMap(610030530).resetPQ(level);
eim.getInstanceMap(610030540).resetPQ(level);
eim.getInstanceMap(610030550).resetPQ(level);
eim.getInstanceMap(610030600).resetPQ(level);
eim.getInstanceMap(610030700).resetPQ(level);
eim.getInstanceMap(610030800).resetPQ(level);
generateMapReactors(eim.getInstanceMap(610030400));
eim.getInstanceMap(610030550).shuffleReactors();
//add environments
var a = Array("a", "b", "c", "d", "e", "f", "g", "h", "i");
var map = eim.getInstanceMap(610030400);
for (var x = 0; x < a.length; x++) {
for (var y = 1; y <= 7; y++) {
if (x == 1 || x == 3 || x == 4 || x == 6 || x == 8) {
if (y != 2 && y != 4 && y != 5 && y != 7) {
map.moveEnvironment(a[x] + "" + y, 1);
}
} else if (map.getId() == 610030510) { //warrior room, crimson guardians
for (var z = 0; z < pos_y2.length; z++) {
var mob = em.getMonster(9400582);
eim.registerMonster(mob);
map.spawnMonsterOnGroundBelow(mob, new java.awt.Point(0, pos_y2[z]));
}
//skipping mage room, ehh
} else if (map.getId() == 610030540) { //bowman room, spawn master guardians
for (var z = 0; z < pos_x.length; z++) {
var mob = em.getMonster(9400594);
eim.registerMonster(mob);
map.spawnMonsterOnGroundBelow(mob, new java.awt.Point(pos_x[z], pos_y[z]));
}
} else if (map.getId() == 610030550) {
map.shuffleReactors(); //pirate room
} else {
map.moveEnvironment(a[x] + "" + y, 1);
}
}
}
eim.startEventTimer(120000); //2 MIN for first stg
var pos_x = Array(944,401,28,-332,-855);
var pos_y = Array(-204,-384,-504,-384,-204);
var map = eim.getInstanceMap(610030540);
for (var z = 0; z < pos_x.length; z++) {
var mob = em.getMonster(9400594);
eim.registerMonster(mob);
map.spawnMonsterOnGroundBelow(mob, new java.awt.Point(pos_x[z], pos_y[z]));
}
eim.startEventTimer(eventTime * 60000);
setEventRewards(eim);
setEventExclusives(eim);
eim.schedule("spawnGuardians", 60000);
return eim;
}
@@ -157,15 +215,21 @@ function spawnGuardians(eim) {
}
}
function playerRevive(eim, player) {}
function scheduledTimeout(eim) {
end(eim);
}
function changedMap(eim, player, mapid) {
if (mapid < 610030100 || mapid > 610030800) {
playerExit(eim,player);
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);
}
} else {
switch(mapid) {
case 610030200:
@@ -208,10 +272,38 @@ function changedMap(eim, player, mapid) {
}
}
function playerDisconnected(eim, player) {
return 0;
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;
}
@@ -219,30 +311,31 @@ function monsterValue(eim, mobId) {
function playerUnregistered(eim, player) {}
function playerExit(eim, player) {
eim.dropMessage(5, "[Expedition] " + player.getName() + " has left the event.");
eim.unregisterPlayer(player);
if (eim.disposeIfPlayerBelow(minPlayers, 610030010)) {
em.setProperty("state", "0");
em.setProperty("leader", "true");
}
player.changeMap(exitMap, 0);
}
function end(eim) {
eim.disposeIfPlayerBelow(100, 610030010);
em.setProperty("state", "0");
em.setProperty("leader", "true");
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 monsterKilled(mob, eim) {}
function allMonstersDead(eim) {}
function leftParty (eim, player) {}
function disbandParty (eim) {}
function playerDead(eim, player) {}
function cancelSchedule() {}
function dispose(eim) {}

View File

@@ -269,9 +269,7 @@ function playerDisconnected(eim, player) {
function leftParty(eim, player) {}
function disbandParty(eim) {
end(eim);
}
function disbandParty(eim) {}
function monsterValue(eim, mobId) {
return 1;

View File

@@ -6,16 +6,16 @@
var status = -1;
function start() {
if (cm.getPlayer().getLevel() < 120) {
cm.sendOk("There is a level requirement of 120 to attempt Pink Bean.");
cm.dispose();
return;
}
if (cm.getPlayer().getClient().getChannel() != 5) {
cm.sendOk("Pink Bean may only be attempted on channel 5.");
cm.dispose();
return;
}
if (cm.getPlayer().getLevel() < 120) {
cm.sendOk("There is a level requirement of 120 to attempt Pink Bean.");
cm.dispose();
return;
}
if (cm.getPlayer().getClient().getChannel() != 5) {
cm.sendOk("Pink Bean may only be attempted on channel 5.");
cm.dispose();
return;
}
var em = cm.getEventManager("PinkBeanBattle");
if (em == null) {

View File

@@ -24,6 +24,8 @@ function start() {
} else {
cm.sendOk("Make room on your ETC inventory first.");
}
} else {
cm.sendOk("The weapon inside this room has already been retrieved.");
}
} else {
cm.sendOk("Eliminate all Crimson Guardians.");

View File

@@ -24,6 +24,8 @@ function start() {
} else {
cm.sendOk("Make room on your ETC inventory first.");
}
} else {
cm.sendOk("The weapon inside this room has already been retrieved.");
}
} else {
cm.sendOk("Eliminate all Master Guardians.");

View File

@@ -9,13 +9,6 @@ function start() {
cm.sendOk("A name forever remembered, Rafael was an exceptionally skilled sorcerer, and the foremost master of mental magic powers, telekinesis and telepathy. In addition to that, he was one of the 'Elite Mages' who mastered all the elements. He was last seen looking for the 'Temple of the Elementals' to turn the tide against the invading Krakian Army...");
cm.dispose();
} else if (cm.getPlayer().getMapId() == 610030521) {
if (cm.getPlayer().getMap().countMonsters() == 0) {
cm.warp(610030522,0);
} else {
cm.sendOk("Eliminate all monsters.");
}
cm.dispose();
} else if (cm.getPlayer().getMapId() == 610030522) {
if (cm.getPlayer().getMap().countMonsters() == 0) {
var eim = cm.getEventInstance();
var stgStatus = eim.getIntProperty("glpq5_room");
@@ -31,10 +24,20 @@ function start() {
} else {
cm.sendOk("Make room on your ETC inventory first.");
}
} else {
cm.sendOk("The weapon inside this room has already been retrieved.");
}
} else {
cm.sendOk("Eliminate all monsters.");
}
cm.dispose();
} /* else if (cm.getPlayer().getMapId() == 610030522) {
if (cm.getPlayer().getMap().countMonsters() == 0) {
cm.warp(610030522,0);
} else {
cm.sendOk("Eliminate all monsters.");
}
cm.dispose();
}
*/
}

View File

@@ -7,10 +7,10 @@ function start() {
cm.sendOk("As every Thief knows, the best attack is the one you never see coming. So, to best illustrate this, you'll be in a chamber with platforms and ledges that you can only get to with Haste, as well as All-Seeing Eyes that your dagger or claw must close--permanently. After all the All-Seeing Eyes have been eliminated, get ti the Thief Statue and lay claim to the Primal Claw! Good luck!");
break;
case 610030000:
cm.sendOk("Once known as the 'Prince of Shadows', Grandmaster Ryo possessed supreme speed and power with short-ranged daggers and longer chain-like Claw. A part-time memeber of the Bosshunters, he was reowned for unparalleled ability to blend into the very nigth itself. His legend grew during a battle with Crimson Balrog, where he moved so swiftly that Balrog's attacks only caught air. Ryo also performed occasional 'retrievals' for those less fortunate than himself.");
cm.sendOk("Once known as the 'Prince of Shadows', Grandmaster Ryo possessed supreme speed and power with short-ranged daggers and longer chain-like Claw. A part-time member of the Bosshunters, he was reowned for unparalleled ability to blend into the very nigth itself. His legend grew during a battle with Crimson Balrog, where he moved so swiftly that Balrog's attacks only caught air. Ryo also performed occasional 'retrievals' for those less fortunate than himself.");
break;
case 610030530:
if (cm.isAllReactorState(6108004, 1) && !cm.haveItem(4001256, 1)) {
if (cm.isAllReactorState(6108004, 1)) {
var eim = cm.getEventInstance();
var stgStatus = eim.getIntProperty("glpq5_room");
var jobNiche = cm.getPlayer().getJob().getJobNiche();
@@ -25,6 +25,8 @@ function start() {
} else {
cm.sendOk("Make room on your ETC inventory first.");
}
} else {
cm.sendOk("The weapon inside this room has already been retrieved.");
}
} else {
cm.sendOk("Go now, destroy all of the watchful eyes with your mobility skills, fellow Thief. Report back to me when you are done.");

View File

@@ -24,11 +24,6 @@ function action(mode, type, selection) {
cm.dispose();
return;
}
if (!cm.isEventLeader()) {
cm.sendNext("I wish for your leader to talk to me.");
cm.dispose();
return;
}
switch(cm.getPlayer().getMapId()) {
case 610030100:
if (status == 0) {
@@ -38,7 +33,6 @@ function action(mode, type, selection) {
} else if (status == 2) {
cm.sendNext("You can find the portal somewhere around here... you'd better find it, quick. I'll catch up.");
cm.dispose();
eim.setProperty("glpq1", "1");
}
break;
case 610030200:
@@ -51,9 +45,9 @@ function action(mode, type, selection) {
break;
case 610030300:
if (status == 0) {
cm.sendNext("Now what we have here are more Sigils. All five Adventurers have to climb to the very top and go through the portal.");
cm.sendNext("Now what we have here are more Sigils. At least five Adventurers have to climb to the very top and go through the portal. Stay aware though: not every wall or ground on this map is what it seems to be, so tread lightly!");
} else if (status == 1) {
cm.sendNext("Beware of these death traps: Menhirs. They really pack a punch.");
cm.sendNext("Oh, and beware of these death traps: Menhirs. They really pack a punch. Good luck.");
cm.dispose();
}
break;
@@ -61,7 +55,7 @@ function action(mode, type, selection) {
if (status == 0) {
cm.sendNext("Now what we have here are more Sigils. However, some of them don't work. Here all jobs must fill their roles, as at least one of these Sigils are activated by their job skills, however there can be more than one per job, so be sure to test them all.");
} else if (status == 1) {
cm.sendNext("These Stirges will get in your way, but they're merely a distraction. Try every one of these Sigils until they work.");
cm.sendNext("These Stirges will get in your way, but they're merely a distraction. To get rid of them, get five adventurers to stand on the middle-left platform simultaneously. To pass, try every one of these Sigils until they work.");
cm.dispose();
}
break;

View File

@@ -18,7 +18,7 @@
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/>.
*/
/*Adobis
/*Jack
*
*@author SharpAceX (Alan)
*/
@@ -43,107 +43,124 @@ function action(mode, type, selection) {
expedition = cm.getExpedition(cwkpq);
em = cm.getEventManager("CWKPQ");
if (mode < 1) {
if (mode == -1) {
cm.dispose();
return;
}
if (status == 0) {
if (player.getLevel() < cwkpq.getMinLevel() && player.getLevel() > cwkpq.getMaxLevel()) { //Don't fit requirement
cm.sendOk("You do not meet the criteria to take attempt Crimsonwood Keep Party Quest!");
} else {
if (mode == 0) {
cm.dispose();
} else if (expedition == null) { //Start an expedition
cm.sendSimple("Would you like to assemble a team to attempt a #rCrimsonwood Keep Party Quest#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()));
return;
}
if (status == 0) {
if (player.getLevel() < cwkpq.getMinLevel() && player.getLevel() > cwkpq.getMaxLevel()) { //Don't fit requirement
cm.sendOk("You do not meet the criteria to take attempt Crimsonwood Keep Party Quest!");
cm.dispose();
} else if (expedition == null) { //Start an expedition
cm.sendSimple("#e#b<Party Quest: Crimsonwood Keep>\r\n#k#n" + em.getProperty("party") + "\r\n\r\nWould you like to assemble a team to attempt a #rCrimsonwood Keep Party Quest#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
em.getInstance("CWKPQ" + 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 complete the Crimsonwood Keep Party Quest, lets pray for those brave souls.");
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("CWKPQ_" + player.getClient().getChannel()).registerPlayer(player);
} else if (status == 1) {
if (selection == 1) {
expedition = cm.getExpedition(cwkpq);
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(cwkpq);
cm.sendOk("The #rCrimsonwood Keep Party Quest Expedition#k has been created.\r\n\r\nTalk to me again to view the current team, or start the fight!");
cm.dispose();
} else { //If you're not in by now, tough luck
return;
} else if (selection == 2) {
cm.sendOk("Sure, not everyone's up to attempting Crimsonwood Keep Party Quest.");
cm.dispose();
return;
}
} 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 = cwkpq.getMinSize();
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("The expedition will begin and you will now be escorted to the #bEntrance to CWKPQ Altar#k.");
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;
}
} else if (status == 4) {
if (em == null) {
cm.sendOk("The event could not be initialized, please report this on the forum.");
cm.dispose();
return;
}
em.setProperty("leader", player.getName());
em.setProperty("channel", player.getClient().getChannel());
if(!em.startInstance(expedition)) {
cm.sendOk("Another expedition has taken the initiative to complete the Crimsonwood Keep Party Quest, lets pray for those brave souls.");
cm.dispose();
}
}
} else if (status == 1) {
if (selection == 1) {
cm.createExpedition(cwkpq);
cm.sendOk("The #rCrimsonwood Keep Party Quest 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 attempting Crimsonwood Keep Party Quest.");
cm.dispose();
return;
}
} 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;
} 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();
return;
} else {
cm.sendSimple(list);
status = 2;
}
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) {
cm.sendOk("The expedition will begin and you will now be escorted to the #bEntrance to CWKPQ Altar#k.");
status = 4;
} else if (selection == 3) {
player.getMap().broadcastMessage(MaplePacketCreator.removeClock());
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;
}
} else if (status == 4) {
var min = 1; //cwkpq.getMinSize();
var size = expedition.getMembers().size();
if (size < min) {
cm.sendOk("You need at least " + min + " players registered in your expedition.");
cm.dispose();
return;
}
if (em == null) {
cm.sendOk("The event could not be found, please report this on the forum.");
cm.dispose();
return;
}
em.setProperty("leader", player.getName());
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 - 1);
expedition.ban(banned);
cm.sendOk("You have banned " + banned.getName() + " from the expedition.");
cm.dispose();
} else {
cm.sendSimple(list);
status = 2;
}
}
}

View File

@@ -5,18 +5,25 @@ function start() {
}
function action(mode, type, selection) {
if (mode == 1) {
status++;
} else {
status--;
var eim = cm.getEventInstance();
if (eim != null && eim.getIntProperty("glpq6") == 3) {
cm.sendOk("... Well played. You overtook the Twisted Masters. Pass through that gate to receive your prizes.");
cm.dispose();
return;
}
if (!cm.isEventLeader()) {
cm.sendNext("I wish for your leader to talk to me.");
cm.dispose();
return;
}
if (mode == 1) {
status++;
} else {
status--;
}
var eim = cm.getEventInstance();
if (eim != null) {
if (eim.getIntProperty("glpq6") == 0) {
if (status == 0) {
@@ -45,10 +52,6 @@ function action(mode, type, selection) {
cm.sendNext("Well, no matter! The Twisted Masters will be glad to welcome you.");
cm.mapMessage(6, "Twisted Masters approach!");
//MV or Heron
var mob = eim.getMonster(9400589);
cm.getMap().spawnMonsterOnGroundBelow(mob, new java.awt.Point(-1000, 276));
//Margana
var mob = eim.getMonster(9400590);
cm.getMap().spawnMonsterOnGroundBelow(mob, new java.awt.Point(-22, 1));
@@ -79,6 +82,8 @@ function action(mode, type, selection) {
eim.setIntProperty("glpq6", 3);
eim.showClearEffect(true);
eim.giveEventPlayersStageReward(6);
eim.clearPQ();
cm.dispose();
} else {
@@ -86,6 +91,7 @@ function action(mode, type, selection) {
cm.dispose();
}
} else {
cm.sendOk("... Well played. You overtook the Twisted Masters. Pass through that gate to receive your prizes.");
cm.dispose();
}
} else {

View File

@@ -9,9 +9,11 @@ function enter(pi) {
} else {
eim.setIntProperty("glpq3_p", eim.getIntProperty("glpq3_p") + 1);
if(eim.getIntProperty("glpq3_p") == 5) {
if(eim.getIntProperty("glpq3") == 5 && eim.getIntProperty("glpq3_p") == 5) {
pi.mapMessage(6, "The Antellion grants you access to the next portal! Proceed!");
eim.showClearEffect(610030300, "3pt", 2);
eim.giveEventPlayersStageReward(3);
} else {
pi.mapMessage(6, "An adventurer has passed through! " + (5 - eim.getIntProperty("glpq3_p")) + " to go.");
}

View File

@@ -1,7 +1,7 @@
function enter(pi) {
var eim = pi.getEventInstance();
if (eim != null) {
if (eim.getIntProperty("glpq3") != 5 || eim.getIntProperty("glpq3_p") != 5) {
if (eim.getIntProperty("glpq3") < 5 || eim.getIntProperty("glpq3_p") < 5) {
pi.playerMessage(5, "The portal is not opened yet.");
return false;
} else {

View File

@@ -5,12 +5,7 @@ function enter(pi) {
pi.playerMessage(5, "The portal is not opened yet.");
return false;
} else {
pi.removeAll(4001256);
pi.removeAll(4001257);
pi.removeAll(4001258);
pi.removeAll(4001259);
pi.removeAll(4001260);
pi.warp(610030600, 0);
pi.warp(610030600, 0);
return true;
}
}

View File

@@ -3,11 +3,15 @@ function enter(pi) {
if (react.getState() < 1) {
react.forceHitReactor(1);
pi.getEventInstance().setIntProperty("glpq1", 1);
var eim = pi.getEventInstance();
eim.setIntProperty("glpq1", 1);
pi.getEventInstance().dropMessage(5, "A strange force starts being emitted from the portal apparatus, showing a hidden path once blocked now open.");
pi.warp(610030100, 0);
pi.getEventInstance().showClearEffect();
eim.giveEventPlayersStageReward(1);
return true;
}

View File

@@ -1,5 +1,4 @@
function act() {
var eim = rm.getEventInstance();
if (eim != null) {
var mapId = rm.getMap().getId();
@@ -9,7 +8,9 @@ function act() {
eim.setIntProperty("glpq2", eim.getIntProperty("glpq2") + 1);
if (eim.getIntProperty("glpq2") == 5) { //all 5 done
eim.dropMessage(6, "The Antellion grants you access to the next portal! Proceed!");
eim.showClearEffect(mapId, "2pt", 2);
eim.giveEventPlayersStageReward(2);
}
} else if (mapId == 610030300) {
eim.dropMessage(6, "The Warrior Sigil has been activated! You hear gears turning! The Menhir Defense System is active! Run!");
@@ -17,11 +18,10 @@ function act() {
rm.getMap().moveEnvironment("menhir0", 1);
if (eim.getIntProperty("glpq3") == 5 && eim.getIntProperty("glpq3_p") == 5) {
eim.dropMessage(6, "The Antellion grants you access to the next portal! Proceed!");
eim.showClearEffect(mapId, "3pt", 2);
eim.giveEventPlayersStageReward(3);
}
}
}
//rm.getMap().moveEnvironment("menhir0", 1);
}

View File

@@ -8,7 +8,9 @@ function act() {
eim.setIntProperty("glpq2", eim.getIntProperty("glpq2") + 1);
if (eim.getIntProperty("glpq2") == 5) { //all 5 done
eim.dropMessage(6, "The Antellion grants you access to the next portal! Proceed!");
eim.showClearEffect(mapId, "2pt", 2);
eim.giveEventPlayersStageReward(2);
}
} else if (mapId == 610030300) {
eim.dropMessage(6, "The Archer Sigil has been activated! You hear gears turning! The Menhir Defense System is active! Run!");
@@ -17,7 +19,9 @@ function act() {
rm.getMap().moveEnvironment("menhir2", 1);
if (eim.getIntProperty("glpq3") == 5 && eim.getIntProperty("glpq3_p") == 5) {
eim.dropMessage(6, "The Antellion grants you access to the next portal! Proceed!");
eim.showClearEffect(mapId, "3pt", 2);
eim.showClearEffect(mapId, "3pt", 2);
eim.giveEventPlayersStageReward(3);
}
}
}

View File

@@ -8,7 +8,9 @@ function act() {
eim.setIntProperty("glpq2", eim.getIntProperty("glpq2") + 1);
if (eim.getIntProperty("glpq2") == 5) { //all 5 done
eim.dropMessage(6, "The Antellion grants you access to the next portal! Proceed!");
eim.showClearEffect(mapId, "2pt", 2);
eim.giveEventPlayersStageReward(2);
}
} else if (mapId == 610030300) {
eim.dropMessage(6, "The Mage Sigil has been activated! You hear gears turning! The Menhir Defense System is active! Run!");
@@ -16,7 +18,9 @@ function act() {
rm.getMap().moveEnvironment("menhir3", 1);
if (eim.getIntProperty("glpq3") == 5 && eim.getIntProperty("glpq3_p") == 5) {
eim.dropMessage(6, "The Antellion grants you access to the next portal! Proceed!");
eim.showClearEffect(mapId, "3pt", 2);
eim.giveEventPlayersStageReward(3);
}
}
}

View File

@@ -8,7 +8,9 @@ function act() {
eim.setIntProperty("glpq2", eim.getIntProperty("glpq2") + 1);
if (eim.getIntProperty("glpq2") == 5) { //all 5 done
eim.dropMessage(6, "The Antellion grants you access to the next portal! Proceed!");
eim.showClearEffect(mapId, "2pt", 2);
eim.giveEventPlayersStageReward(2);
}
} else if (mapId == 610030300) {
eim.dropMessage(6, "The Thief Sigil has been activated! You hear gears turning! The Menhir Defense System is active! Run!");
@@ -16,7 +18,9 @@ function act() {
rm.getMap().moveEnvironment("menhir4", 1);
if (eim.getIntProperty("glpq3") == 5 && eim.getIntProperty("glpq3_p") == 5) {
rm.mapMessage(6, "The Antellion grants you access to the next portal! Proceed!");
eim.showClearEffect(mapId, "3pt", 2);
eim.giveEventPlayersStageReward(3);
}
}
}

View File

@@ -8,7 +8,9 @@ function act() {
eim.setIntProperty("glpq2", eim.getIntProperty("glpq2") + 1);
if (eim.getIntProperty("glpq2") == 5) { //all 5 done
eim.dropMessage(6, "The Antellion grants you access to the next portal! Proceed!");
eim.showClearEffect(mapId, "2pt", 2);
eim.giveEventPlayersStageReward(2);
}
} else if (mapId == 610030300) {
eim.dropMessage(6, "The Pirate Sigil has been activated! You hear gears turning! The Menhir Defense System is active! Run!");
@@ -16,7 +18,9 @@ function act() {
rm.getMap().moveEnvironment("menhir5", 1);
if (eim.getIntProperty("glpq3") == 5 && eim.getIntProperty("glpq3_p") == 5) {
eim.dropMessage(6, "The Antellion grants you access to the next portal! Proceed!");
eim.showClearEffect(mapId, "3pt", 2);
eim.giveEventPlayersStageReward(3);
}
}
}

View File

@@ -5,7 +5,9 @@ function act() {
eim.setIntProperty("glpq5", eim.getIntProperty("glpq5") + 1);
if (eim.getIntProperty("glpq5") == 5) { //all 5 done
eim.dropMessage(6, "The Antellion grants you access to the next portal! Proceed!");
eim.showClearEffect(610030500, "5pt", 2);
eim.giveEventPlayersStageReward(5);
}
}
}

View File

@@ -5,7 +5,9 @@ function act() {
eim.setIntProperty("glpq5", eim.getIntProperty("glpq5") + 1);
if (eim.getIntProperty("glpq5") == 5) { //all 5 done
eim.dropMessage(6, "The Antellion grants you access to the next portal! Proceed!");
eim.showClearEffect(610030500, "5pt", 2);
eim.giveEventPlayersStageReward(5);
}
}
}

View File

@@ -5,7 +5,9 @@ function act() {
eim.setIntProperty("glpq5", eim.getIntProperty("glpq5") + 1);
if (eim.getIntProperty("glpq5") == 5) { //all 5 done
eim.dropMessage(6, "The Antellion grants you access to the next portal! Proceed!");
eim.showClearEffect(610030500, "5pt", 2);
eim.giveEventPlayersStageReward(5);
}
}
}

View File

@@ -5,7 +5,9 @@ function act() {
eim.setIntProperty("glpq5", eim.getIntProperty("glpq5") + 1);
if (eim.getIntProperty("glpq5") == 5) { //all 5 done
eim.dropMessage(6, "The Antellion grants you access to the next portal! Proceed!");
eim.showClearEffect(610030500, "5pt", 2);
eim.giveEventPlayersStageReward(5);
}
}
}

View File

@@ -5,7 +5,9 @@ function act() {
eim.setIntProperty("glpq5", eim.getIntProperty("glpq5") + 1);
if (eim.getIntProperty("glpq5") == 5) { //all 5 done
eim.dropMessage(6, "The Antellion grants you access to the next portal! Proceed!");
eim.showClearEffect(610030500, "5pt", 2);
eim.giveEventPlayersStageReward(5);
}
}
}

View File

@@ -0,0 +1,21 @@
var fid = "glpq_s";
function action() {
rm.mapMessage(6, "All stirges have disappeared.");
rm.getMap().killAllMonsters(true);
eim.setIntProperty(fid, 777);
}
function touch() {
var eim = rm.getEventInstance();
if(eim.getIntProperty(fid) == 5) action();
eim.setIntProperty(fid, eim.getIntProperty(fid) + 1);
}
function untouch() {
var eim = rm.getEventInstance();
if(eim.getIntProperty(fid) == 5) action();
eim.setIntProperty(fid, eim.getIntProperty(fid) - 1);
}

View File

@@ -0,0 +1,22 @@
function action() { //flame0, im assuming this is topleft
var flames = Array("a1", "a2", "b1", "b2", "c1", "c2");
for (var i = 0; i < flames.length; i++) {
rm.getMap().toggleEnvironment(flames[i]);
}
}
var fid = "glpq_f0";
function touch() {
var eim = rm.getEventInstance();
if(eim.getIntProperty(fid) == 0) action();
eim.setIntProperty(fid, eim.getIntProperty(fid) + 1);
}
function untouch() {
var eim = rm.getEventInstance();
if(eim.getIntProperty(fid) == 1) action();
eim.setIntProperty(fid, eim.getIntProperty(fid) - 1);
}

View File

@@ -5,7 +5,9 @@ function act() {
eim.setIntProperty("glpq4", eim.getIntProperty("glpq4") + 1);
if (eim.getIntProperty("glpq4") == 5) { //all 5 done
eim.dropMessage(6, "The Antellion grants you access to the next portal! Proceed!");
eim.showClearEffect(610030400, "4pt", 2);
eim.giveEventPlayersStageReward(4);
}
}
}

View File

@@ -5,7 +5,9 @@ function act() {
eim.setIntProperty("glpq4", eim.getIntProperty("glpq4") + 1);
if (eim.getIntProperty("glpq4") == 5) { //all 5 done
eim.dropMessage(6, "The Antellion grants you access to the next portal! Proceed!");
eim.showClearEffect(610030400, "4pt", 2);
eim.giveEventPlayersStageReward(4);
}
}
}

View File

@@ -5,7 +5,9 @@ function act() {
eim.setIntProperty("glpq4", eim.getIntProperty("glpq4") + 1);
if (eim.getIntProperty("glpq4") == 5) { //all 5 done
eim.dropMessage(6, "The Antellion grants you access to the next portal! Proceed!");
eim.showClearEffect(610030400, "4pt", 2);
eim.giveEventPlayersStageReward(4);
}
}
}

View File

@@ -5,7 +5,9 @@ function act() {
eim.setIntProperty("glpq4", eim.getIntProperty("glpq4") + 1);
if (eim.getIntProperty("glpq4") == 5) { //all 5 done
eim.dropMessage(6, "The Antellion grants you access to the next portal! Proceed!");
eim.showClearEffect(610030400, "4pt", 2);
eim.giveEventPlayersStageReward(4);
}
}
}

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