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:
ronancpl
2017-10-05 17:14:05 -03:00
parent 3a882c7f31
commit 6e1442af30
62 changed files with 670 additions and 85 deletions

View 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
View 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){}

View 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
View 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
View 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
View 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;
}
}

View File

@@ -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
View 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;
}
}

View 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();
}
}

View 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();
}
}

View File

@@ -0,0 +1,4 @@
function enter(pi) {
pi.openNpc(1063011, "PupeteerPassword");
return false;
}

View File

@@ -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;
}

View 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;
}
}

View 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
View 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){}