Minor tweak on Exp system + Diet's Cygnus quest line
Changed minimum level required to gain EXP of mob from -5 to -20 the mob level (players below that level sees a red-colored font when displaying higher-leveled mob HPbar). Thanks to DietStory dev team, fixed some quests for KoC.
This commit is contained in:
112
scripts/event/Cygnus_Magic_Library.js
Normal file
112
scripts/event/Cygnus_Magic_Library.js
Normal file
@@ -0,0 +1,112 @@
|
||||
var minPlayers = 1;
|
||||
var timeLimit = 10; //10 minutes
|
||||
var eventTimer = 1000 * 60 * timeLimit;
|
||||
var entryMap = 101000000;
|
||||
var exitMap = 101000000;
|
||||
var eventMap = 910110000;
|
||||
|
||||
function init(){}
|
||||
|
||||
function setup(difficulty, lobbyId){
|
||||
var eim = em.newInstance("Cygnus_Magic_Library_" +lobbyId);
|
||||
eim.getInstanceMap(eventMap).resetFully();
|
||||
eim.getInstanceMap(eventMap).allowSummonState(false);
|
||||
respawn(eim);
|
||||
eim.startEventTimer(eventTimer);
|
||||
return eim;
|
||||
}
|
||||
|
||||
function afterSetup(eim){}
|
||||
|
||||
function respawn(eim){
|
||||
var map = eim.getMapInstance(entryMap);
|
||||
map.allowSummonState(true);
|
||||
map.instanceMapRespawn();
|
||||
eim.schedule("respawn", 10000);
|
||||
}
|
||||
|
||||
function playerEntry(eim, player){
|
||||
var magicLibrary = eim.getMapInstance(eventMap);
|
||||
player.changeMap(magicLibrary, magicLibrary.getPortal(1));
|
||||
}
|
||||
|
||||
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(entryMap);
|
||||
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){
|
||||
var party = eim.getPlayers();
|
||||
|
||||
if(party.size() < minPlayers){
|
||||
for(var i = 0; i < party.size(); i++){
|
||||
playerExit(eim, party.get(i));
|
||||
}
|
||||
eim.dispose();
|
||||
}
|
||||
else{
|
||||
playerExit(eim, player);
|
||||
}
|
||||
}
|
||||
|
||||
function disbandParty(eim){}
|
||||
|
||||
function playerUnregistered(eim, player){}
|
||||
|
||||
function playerExit(eim, player){
|
||||
eim.unregisterPlayer(player);
|
||||
player.changeMap(entryMap, 2);
|
||||
}
|
||||
|
||||
function moveMap(eim, player){
|
||||
if(player.getMap().getId() == exitMap){
|
||||
removePlayer(eim, player);
|
||||
eim.dispose();
|
||||
}
|
||||
}
|
||||
|
||||
function removePlayer(eim, player){
|
||||
eim.unregisterPlayer(player);
|
||||
player.getMap().removePlayer(player);
|
||||
player.setMap(entryMap);
|
||||
}
|
||||
|
||||
function cancelSchedule(){}
|
||||
|
||||
function dispose(){}
|
||||
|
||||
function clearPQ(eim){}
|
||||
|
||||
function monsterKilled(mob, eim){}
|
||||
|
||||
function allMonstersDead(eim){}
|
||||
114
scripts/event/Puppeteer.js
Normal file
114
scripts/event/Puppeteer.js
Normal file
@@ -0,0 +1,114 @@
|
||||
var minPlayers = 1;
|
||||
var timeLimit = 10; //10 minutes
|
||||
var eventTimer = 1000 * 60 * timeLimit;
|
||||
var entryMap = 910510001;
|
||||
var exitMap = 105070300;
|
||||
var eventMap = 910510000;
|
||||
|
||||
function init(){}
|
||||
|
||||
function setup(difficulty, lobbyId){
|
||||
var eim = em.newInstance("Puppeteer_" +lobbyId);
|
||||
eim.getInstanceMap(eventMap).resetFully();
|
||||
eim.getInstanceMap(eventMap).allowSummonState(false);
|
||||
respawn(eim);
|
||||
eim.startEventTimer(eventTimer);
|
||||
return eim;
|
||||
}
|
||||
|
||||
function afterSetup(eim){}
|
||||
|
||||
function respawn(eim){
|
||||
var map = eim.getMapInstance(entryMap);
|
||||
map.allowSummonState(true);
|
||||
map.instanceMapRespawn();
|
||||
eim.schedule("respawn", 10000);
|
||||
}
|
||||
|
||||
function playerEntry(eim, player){
|
||||
var cave = eim.getMapInstance(eventMap);
|
||||
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(entryMap);
|
||||
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){
|
||||
var party = eim.getPlayers();
|
||||
|
||||
if(party.size() < minPlayers){
|
||||
for(var i = 0; i < party.size(); i++){
|
||||
playerExit(eim, party.get(i));
|
||||
}
|
||||
eim.dispose();
|
||||
}
|
||||
else{
|
||||
playerExit(eim, player);
|
||||
}
|
||||
}
|
||||
|
||||
function disbandParty(eim){}
|
||||
|
||||
function playerUnregistered(eim, player){}
|
||||
|
||||
function playerExit(eim, player){
|
||||
eim.unregisterPlayer(player);
|
||||
player.changeMap(entryMap, 2);
|
||||
}
|
||||
|
||||
function moveMap(eim, player){
|
||||
if(player.getMap().getId() == exitMap || player.getMap().getId() == entryMap){
|
||||
removePlayer(eim, player);
|
||||
eim.stopEventTimer();
|
||||
eim.setEventCleared();
|
||||
eim.dispose();
|
||||
}
|
||||
}
|
||||
|
||||
function removePlayer(eim, player){
|
||||
eim.unregisterPlayer(player);
|
||||
player.getMap().removePlayer(player);
|
||||
player.setMap(entryMap);
|
||||
}
|
||||
|
||||
function cancelSchedule(){}
|
||||
|
||||
function dispose(){}
|
||||
|
||||
function clearPQ(eim){}
|
||||
|
||||
function monsterKilled(mob, eim){}
|
||||
|
||||
function allMonstersDead(eim){}
|
||||
10
scripts/map/onUserEnter/910510000.js
Normal file
10
scripts/map/onUserEnter/910510000.js
Normal file
@@ -0,0 +1,10 @@
|
||||
importPackage(Packages.server.life);
|
||||
|
||||
function start(ms){
|
||||
var mobId = 9300285;
|
||||
var player = ms.getPlayer();
|
||||
var map = player.getMap();
|
||||
|
||||
if(ms.isQuestStarted(20730) && ms.getQuestProgress(20730, 9300285) == 0)
|
||||
map.spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(mobId), new java.awt.Point(680, 258));
|
||||
}
|
||||
47
scripts/npc/1032109.js
Normal file
47
scripts/npc/1032109.js
Normal file
@@ -0,0 +1,47 @@
|
||||
/*
|
||||
NPC: Corner of the Magic Library
|
||||
MAP: Hidden Street - Magic Library (910110000)
|
||||
QUEST: Maybe it's Grendel! (20718)
|
||||
*/
|
||||
importPackage(Packages.server.life);
|
||||
|
||||
var status;
|
||||
var mobId = 2220100; //Blue Mushroom
|
||||
|
||||
function start(){
|
||||
status = -1;
|
||||
action(1, 0, 0);
|
||||
}
|
||||
|
||||
function action(mode, type, selection){
|
||||
if(mode == -1 || (mode == 0 && status == 0)){
|
||||
cm.dispose();
|
||||
return;
|
||||
}
|
||||
else if(mode == 0)
|
||||
status--;
|
||||
else
|
||||
status++;
|
||||
|
||||
|
||||
if(status == 0){
|
||||
cm.sendOk("A mysterious black figure appeared and summoned a lot of angry monsters!");
|
||||
}
|
||||
else if(status == 1){
|
||||
var player = cm.getPlayer();
|
||||
var map = player.getMap();
|
||||
|
||||
for(var i = 0; i < 10; i++)
|
||||
map.spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(mobId), new java.awt.Point(117, 183));
|
||||
for(var i = 0; i < 10; i++)
|
||||
map.spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(mobId), new java.awt.Point(4, 183));
|
||||
for(var i = 0; i < 10; i++)
|
||||
map.spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(mobId), new java.awt.Point(-109, 183));
|
||||
|
||||
cm.completeQuest(20718, 1103003);
|
||||
cm.gainExp(4000 * cm.getPlayer().getExpRate());
|
||||
|
||||
cm.dispose();
|
||||
return;
|
||||
}
|
||||
}
|
||||
32
scripts/npc/1032110.js
Normal file
32
scripts/npc/1032110.js
Normal file
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
NPC: Corner of the Magic Library
|
||||
MAP: Hidden Street - Magic Library (910110000)
|
||||
QUEST: Maybe it's Grendel! (20718)
|
||||
*/
|
||||
|
||||
var status;
|
||||
|
||||
function start(){
|
||||
status = -1;
|
||||
action(1, 0, 0);
|
||||
}
|
||||
|
||||
function action(mode, type, selection){
|
||||
if(mode == -1 || (mode == 0 && status == 0)){
|
||||
cm.dispose();
|
||||
return;
|
||||
}
|
||||
else if(mode == 0)
|
||||
status--;
|
||||
else
|
||||
status++;
|
||||
|
||||
|
||||
if(status == 0){
|
||||
cm.sendOk("Nothing remarkable here.");
|
||||
}
|
||||
else if(status == 1){
|
||||
cm.dispose();
|
||||
return;
|
||||
}
|
||||
}
|
||||
45
scripts/npc/1032111.js
Normal file
45
scripts/npc/1032111.js
Normal file
@@ -0,0 +1,45 @@
|
||||
/*
|
||||
NPC: Small Tree Stump
|
||||
MAP: Victoria Road - Top of the Tree That Grew (101010103)
|
||||
QUEST: Maybe it's Arwen! (20716)
|
||||
*/
|
||||
|
||||
var status;
|
||||
|
||||
function start(){
|
||||
status = -1;
|
||||
action(1, 0, 0);
|
||||
}
|
||||
|
||||
function action(mode, type, selection){
|
||||
if(mode == -1 || (mode == 0 && status == 0)){
|
||||
cm.dispose();
|
||||
return;
|
||||
}
|
||||
else if(mode == 0)
|
||||
status--;
|
||||
else
|
||||
status++;
|
||||
|
||||
|
||||
if(status == 0){
|
||||
if(cm.isQuestStarted(20716)){
|
||||
if(!cm.hasItem(4032142)){
|
||||
if(cm.canHold(4032142)){
|
||||
cm.gainItem(4032142, 1);
|
||||
cm.sendOk("You bottled up some of the clear tree sap. #i4032142#");
|
||||
}
|
||||
else
|
||||
cm.sendOk("Make sure you have a free spot in your ETC inventory.");
|
||||
}
|
||||
else
|
||||
cm.sendOk("A never ending flow of sap is coming from this small tree stump.");
|
||||
}
|
||||
else
|
||||
cm.sendOk("A never ending flow of sap is coming from this small tree stump.");
|
||||
}
|
||||
else if(status == 1){
|
||||
cm.dispose();
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -25,26 +25,22 @@ function action(mode, type, selection){
|
||||
else
|
||||
status++;
|
||||
|
||||
|
||||
if(cm.isQuestStarted(20710)){
|
||||
if(!cm.hasItem(4032136)){
|
||||
cm.sendNext("You have found a #b#t4032136##k in the trash can! #i4032136#");
|
||||
|
||||
if(cm.canHold(4032136)){
|
||||
cm.gainItem(4032136, 1);
|
||||
if(status == 0) {
|
||||
if(cm.isQuestStarted(20710)) {
|
||||
if(!cm.hasItem(4032136)) {
|
||||
if(cm.canHold(4032136)) {
|
||||
cm.gainItem(4032136, 1);
|
||||
cm.sendNext("You have found a #b#t4032136##k in the trash can! #i4032136#");
|
||||
} else {
|
||||
cm.sendOk("#i4032136# Not enough space in your ETC inventory.");
|
||||
}
|
||||
} else {
|
||||
cm.sendOk("Just a trash can sitting there.");
|
||||
}
|
||||
else{
|
||||
cm.sendOk("#i4032136# Not enough space in your ETC inventory.");
|
||||
}
|
||||
cm.dispose();
|
||||
}
|
||||
else{
|
||||
} else {
|
||||
cm.sendOk("Just a trash can sitting there.");
|
||||
cm.dispose();
|
||||
}
|
||||
}
|
||||
else{
|
||||
cm.sendOk("Just a trash can sitting there.");
|
||||
} else if(status == 1){
|
||||
cm.dispose();
|
||||
}
|
||||
}
|
||||
|
||||
30
scripts/npc/1104000.js
Normal file
30
scripts/npc/1104000.js
Normal file
@@ -0,0 +1,30 @@
|
||||
var status;
|
||||
|
||||
function start(){
|
||||
status = -1;
|
||||
action(1, 0, 0);
|
||||
}
|
||||
|
||||
function action(mode, type, selection){
|
||||
if(mode == -1 || (mode == 0 && status == 0)){
|
||||
cm.dispose();
|
||||
return;
|
||||
}
|
||||
else if(mode == 0)
|
||||
status--;
|
||||
else
|
||||
status++;
|
||||
|
||||
|
||||
|
||||
if(status == 0){
|
||||
cm.sendNext("What the... you don't belong here!");
|
||||
}
|
||||
else if(status == 1){
|
||||
var puppet = cm.getEventManager("Puppeteer");
|
||||
puppet.setProperty("player", cm.getPlayer().getName());
|
||||
puppet.startInstance(cm.getPlayer());
|
||||
cm.dispose();
|
||||
return;
|
||||
}
|
||||
}
|
||||
28
scripts/npc/MaybeItsGrendel_end.js
Normal file
28
scripts/npc/MaybeItsGrendel_end.js
Normal file
@@ -0,0 +1,28 @@
|
||||
var status;
|
||||
|
||||
function start(){
|
||||
status = -1;
|
||||
action(1, 0, 0);
|
||||
}
|
||||
|
||||
function action(mode, type, selection){
|
||||
if(mode == -1 || (mode == 0 && status == 0)){
|
||||
cm.dispose();
|
||||
return;
|
||||
}
|
||||
else if(mode == 0)
|
||||
status--;
|
||||
else
|
||||
status++;
|
||||
|
||||
|
||||
if(status == 0){
|
||||
cm.sendNext("...a black shadowy figure came out and attacked you? How can this take place at #b#p1032001##k's house? This sounds like one big conspiracy here...");
|
||||
}
|
||||
else if(status == 1){
|
||||
cm.sendNextPrev("I'll have to sort this all out in my mind. Talk to me in a bit.");
|
||||
}
|
||||
else if(status == 2){
|
||||
cm.dispose();
|
||||
}
|
||||
}
|
||||
40
scripts/npc/PupeteerPassword.js
Normal file
40
scripts/npc/PupeteerPassword.js
Normal file
@@ -0,0 +1,40 @@
|
||||
var status;
|
||||
|
||||
function start(){
|
||||
status = -1;
|
||||
action(1, 0, 0);
|
||||
}
|
||||
|
||||
function action(mode, type, selection){
|
||||
if(mode == -1 || (mode == 0 && status == 0)){
|
||||
cm.dispose();
|
||||
return;
|
||||
}
|
||||
else if(mode == 0)
|
||||
status--;
|
||||
else
|
||||
status++;
|
||||
|
||||
|
||||
|
||||
if(status == 0){
|
||||
cm.sendGetText("A suspicious voice pierces through the silence. #bPassword#k!");
|
||||
}
|
||||
else if(status == 1){
|
||||
if(cm.getText() == "Francis is a genius Puppeteer!"){
|
||||
|
||||
if(cm.isQuestCompleted(20730) || !cm.isQuestStarted(20730) || (cm.isQuestStarted(20730) && cm.getQuestProgress(20730, 9300285) > 0))
|
||||
cm.warp(910510000, 1);
|
||||
else if(cm.isQuestStarted(20730))
|
||||
cm.warp(910510001, 1);
|
||||
|
||||
cm.dispose();
|
||||
}
|
||||
else{
|
||||
cm.sendOk("#rWrong!");
|
||||
}
|
||||
}
|
||||
else if(status == 2){
|
||||
cm.dispose();
|
||||
}
|
||||
}
|
||||
4
scripts/portal/enterDollcave.js
Normal file
4
scripts/portal/enterDollcave.js
Normal file
@@ -0,0 +1,4 @@
|
||||
function enter(pi) {
|
||||
pi.openNpc(1063011, "PupeteerPassword");
|
||||
return false;
|
||||
}
|
||||
@@ -3,24 +3,31 @@
|
||||
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/>.
|
||||
|
||||
Edited by: Kevin
|
||||
*/
|
||||
function enter(pi) {
|
||||
pi.playPortalSound();
|
||||
pi.warp(101000003, 8);
|
||||
return true;
|
||||
}
|
||||
if(pi.isQuestStarted(20718)){
|
||||
pi.playPortalSound();
|
||||
var cml = pi.getEventManager("Cygnus_Magic_Library");
|
||||
cml.setProperty("player", pi.getPlayer().getName());
|
||||
cml.startInstance(pi.getPlayer());
|
||||
}
|
||||
else{
|
||||
pi.playPortalSound();
|
||||
pi.warp(101000003, 8);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
17
scripts/portal/exit_puppeteer.js
Normal file
17
scripts/portal/exit_puppeteer.js
Normal file
@@ -0,0 +1,17 @@
|
||||
function enter(pi) {
|
||||
if(pi.getMap().countMonster(9300285) > 0){
|
||||
pi.getPlayer().message("Defeat the Puppeteer before leaving.");
|
||||
return false;
|
||||
}
|
||||
else{
|
||||
var eim = pi.getEventInstance();
|
||||
if(eim != null){
|
||||
eim.stopEventTimer();
|
||||
eim.dispose();
|
||||
}
|
||||
|
||||
pi.playPortalSound();
|
||||
pi.warp(105070300, 3);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
19
scripts/portal/outMagiclib.js
Normal file
19
scripts/portal/outMagiclib.js
Normal file
@@ -0,0 +1,19 @@
|
||||
function enter(pi) {
|
||||
if(pi.getMap().countMonster(2220100) > 0){
|
||||
pi.getPlayer().message("Cannot leave until all Blue Mushrooms have been defeated.");
|
||||
return false;
|
||||
}
|
||||
else{
|
||||
var eim = pi.getEventInstance();
|
||||
eim.stopEventTimer();
|
||||
eim.dispose();
|
||||
|
||||
pi.playPortalSound();
|
||||
pi.warp(101000000, 26);
|
||||
|
||||
if(pi.isQuestCompleted(20718))
|
||||
pi.openNpc(1103003, "MaybeItsGrendel_end");
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
28
scripts/quest/20720.js
Normal file
28
scripts/quest/20720.js
Normal file
@@ -0,0 +1,28 @@
|
||||
/*
|
||||
QUEST: Before the Mission in Perion Begins
|
||||
NPC: Neinheart
|
||||
*/
|
||||
|
||||
var status = -1;
|
||||
|
||||
function start(mode, type, selection){
|
||||
if(mode == -1 || (mode == 0 && status == 0)){
|
||||
qm.dispose();
|
||||
return;
|
||||
}
|
||||
else if(mode == 0)
|
||||
status--;
|
||||
else
|
||||
status++;
|
||||
|
||||
|
||||
else if(status == 0){
|
||||
qm.sendAcceptDecline("How's the leveling up so far? By this time, you might be able to participate in the Party Quest at #m103000000#. Leveling up is important, yes, but we need you now to take on a mission as a Cygnus Knight. We just received a new information that may help us.");
|
||||
}
|
||||
else if(status == 1){
|
||||
qm.forceStartQuest();
|
||||
qm.dispose();
|
||||
}
|
||||
}
|
||||
|
||||
function end(mode, type, selection){}
|
||||
Reference in New Issue
Block a user