Added Puppets on Aggro + Guild/Alliance packet info patch + Pet flags

Added pet flags recognition, such as the "pet speed same as owner" mechanic.
Fixed repeatable quest "Remnants of HT..." not rewarding Dragon Stones.
Refactored character object's check slots method, now using the same algorithm from the API class.
Fixed a vunerability from before reviving/respawning players to towns, on where players would get their HP restored in area map before sending them back to safety.
Fixed some NPC gates in Mushking Empire, allowing players to access bosses free of quest requirements.
Improved dialog of NPCs for "permission to attempt Zakum expeds".
Implemented (or rather improved) item scripts, now using NPC conversation methods as it was intended originally.
Rehauled mob-skill "summon mobs" limit, now using the placeholders found in the wz to determine limit of concurrent underlings spawned, and "limit" now refers to total of underlings spawned from a mob.
Revised IoSession closing mechanics in several login classes.
Implemented automated loggedin account shutdown if another player has gained a pass from the DB to login.
Improved the server-side check for teleport rocks.
Fixed removeAfter from mobs being procced after they were disposed.
Reviewed EIM start references on several scripts, minding the latest EIM setup implementations.
Fixed equipments that were reused Scissors of Karma not not being able to sell on pshops/merchants.
Fixed a bug where entering alliances would lead a player to see information from other guilds of past alliances until an update takes place.
Padronized a few skillbook names.
Reviewed player puppets not gaining priority properly on the recent aggro system.
Improved "item sold" message of merchants, now displaying also quantity left of an item on store.
Fixed a bug with itemid limits of weapons on server.
This commit is contained in:
ronancpl
2019-02-17 16:08:53 -03:00
parent 4beea39615
commit 46fec675f1
127 changed files with 1760 additions and 608 deletions

View File

@@ -41,6 +41,14 @@ function init() {
em.setProperty("noEntry","false");
}
function setup(level, lobbyid) {
var eim = em.newInstance("3rdJob_bowman_" + lobbyid);
eim.setProperty("level", level);
eim.setProperty("boss", "0");
return eim;
}
function playerEntry(eim, player) {
eim.getInstanceMap(maxMapId).resetPQ(1);
@@ -97,8 +105,6 @@ function dispose() {}
// ---------- FILLER FUNCTIONS ----------
function setup(eim, leaderid) {}
function disbandParty(eim, player) {}
function afterSetup(eim) {}

View File

@@ -41,6 +41,14 @@ function init() {
em.setProperty("noEntry","false");
}
function setup(level, lobbyid) {
var eim = em.newInstance("3rdJob_magician_" + lobbyid);
eim.setProperty("level", level);
eim.setProperty("boss", "0");
return eim;
}
function playerEntry(eim, player) {
eim.getInstanceMap(maxMapId).resetPQ(1);
@@ -97,8 +105,6 @@ function dispose() {}
// ---------- FILLER FUNCTIONS ----------
function setup(eim, leaderid) {}
function disbandParty(eim, player) {}
function afterSetup(eim) {}

View File

@@ -43,15 +43,38 @@ function init() {
em.setProperty("noEntry","false");
}
function checkHogHealth(eim) {
var watchHog = eim.getInstanceMap(923010000).getMonsterById(9300102);
if (watchHog != null) {
var hp = watchHog.getHp();
var oldHp = eim.getIntProperty("whog_hp");
if (oldHp - hp > 1000) { // or 800, if using mobHP / eventTime
eim.dropMessage(6, "Please protect the pig from the aliens!"); // thanks Vcoc
}
eim.setIntProperty("whog_hp", hp);
}
}
function respawnStages(eim) {
var i;
for (i = 0; i < eventMaps.length; i++) {
eim.getInstanceMap(eventMaps[i]).instanceMapRespawn();
}
checkHogHealth(eim);
eim.schedule("respawnStages", 10 * 1000);
}
function setup(level, lobbyid) {
var eim = em.newInstance("3rdJob_mount_" + lobbyid);
eim.setProperty("level", level);
eim.setProperty("boss", "0");
eim.setProperty("whog_hp", "0");
return eim;
}
function playerEntry(eim, player) {
var mapObj = eim.getInstanceMap(entryMap);
@@ -127,8 +150,6 @@ function dispose() {}
// ---------- FILLER FUNCTIONS ----------
function setup(eim, leaderid) {}
function disbandParty(eim, player) {}
function afterSetup(eim) {}

View File

@@ -51,6 +51,14 @@ function playerEntry(eim, player) {
eim.startEventTimer(eventTime * 60000);
}
function setup(level, lobbyid) {
var eim = em.newInstance("3rdJob_pirate_" + lobbyid);
eim.setProperty("level", level);
eim.setProperty("boss", "0");
return eim;
}
function playerUnregistered(eim, player) {}
function playerExit(eim, player) {
@@ -97,8 +105,6 @@ function dispose() {}
// ---------- FILLER FUNCTIONS ----------
function setup(eim, leaderid) {}
function disbandParty(eim, player) {}
function afterSetup(eim) {}

View File

@@ -41,6 +41,14 @@ function init() {
em.setProperty("noEntry","false");
}
function setup(level, lobbyid) {
var eim = em.newInstance("3rdJob_thief_" + lobbyid);
eim.setProperty("level", level);
eim.setProperty("boss", "0");
return eim;
}
function playerEntry(eim, player) {
eim.getInstanceMap(maxMapId).resetPQ(1);
@@ -97,8 +105,6 @@ function dispose() {}
// ---------- FILLER FUNCTIONS ----------
function setup(eim, leaderid) {}
function disbandParty(eim, player) {}
function afterSetup(eim) {}

View File

@@ -41,6 +41,14 @@ function init() {
em.setProperty("noEntry","false");
}
function setup(level, lobbyid) {
var eim = em.newInstance("3rdJob_warrior_" + lobbyid);
eim.setProperty("level", level);
eim.setProperty("boss", "0");
return eim;
}
function playerEntry(eim, player) {
eim.getInstanceMap(maxMapId).resetPQ(1);
@@ -97,8 +105,6 @@ function dispose() {}
// ---------- FILLER FUNCTIONS ----------
function setup(eim, leaderid) {}
function disbandParty(eim, player) {}
function afterSetup(eim) {}

View File

@@ -20,27 +20,22 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
var exitMap;
var instanceId;
var minPlayers = 3;
function init() {
instanceId = 1;
}
function init() {}
function monsterValue(eim, mobId) {
return 1;
}
function setup() {
function setup(level, lobbyid) {
exitMap = em.getChannelServer().getMapFactory().getMap(105090800); // <exit>
var instanceName = "4jberserk" + instanceId;
var eim = em.newInstance(instanceName);
var eim = em.newInstance("4jberserk_" + lobbyid);
eim.setProperty("level", level);
var mf = eim.getMapFactory();
instanceId++;
var map = mf.getMap(910500200);
map.addMapTimer(3*60);
em.schedule("timeOut", 20 * 60000);

View File

@@ -27,23 +27,21 @@
*/
var exitMap;
var instanceId;
var minPlayers = 3;
function init() {
instanceId = 1;
}
function init() {}
function monsterValue(eim, mobId) {
return 1;
}
function setup() {
function setup(level, lobbyid) {
exitMap = em.getChannelServer().getMapFactory().getMap(105090700); // <exit>
var instanceName = "4jrush" + instanceId;
var eim = em.newInstance(instanceName);
var eim = em.newInstance("4jrush_" + lobbyid);
eim.setProperty("level", level);
var mf = eim.getMapFactory();
instanceId++;
var map = mf.getMap(910500100);
map.addMapTimer(20*60);
em.schedule("timeOut", 20 * 60000);

View File

@@ -41,6 +41,14 @@ function init() {
em.setProperty("noEntry","false");
}
function setup(level, lobbyid) {
var eim = em.newInstance("Aran_2ndmount_" + lobbyid);
eim.setProperty("level", level);
eim.setProperty("boss", "0");
return eim;
}
function respawnStages(eim) {}
function playerEntry(eim, player) {
@@ -114,8 +122,6 @@ function dispose() {}
// ---------- FILLER FUNCTIONS ----------
function setup(eim, leaderid) {}
function disbandParty(eim, player) {}
function afterSetup(eim) {}

View File

@@ -41,6 +41,14 @@ function init() {
em.setProperty("noEntry","false");
}
function setup(level, lobbyid) {
var eim = em.newInstance("Aran_3rdmount_" + lobbyid);
eim.setProperty("level", level);
eim.setProperty("boss", "0");
return eim;
}
function respawnStages(eim) {}
function playerEntry(eim, player) {
@@ -119,8 +127,6 @@ function dispose() {}
// ---------- FILLER FUNCTIONS ----------
function setup(eim, leaderid) {}
function disbandParty(eim, player) {}
function afterSetup(eim) {}

View File

@@ -41,6 +41,14 @@ function init() {
em.setProperty("noEntry","false");
}
function setup(level, lobbyid) {
var eim = em.newInstance("BalrogQuest_" + lobbyid);
eim.setProperty("level", level);
eim.setProperty("boss", "0");
return eim;
}
function respawnStages(eim) {}
function afterSetup(eim) {}
@@ -104,8 +112,6 @@ function dispose() {}
// ---------- FILLER FUNCTIONS ----------
function setup(eim, leaderid) {}
function disbandParty(eim, player) {}
function changedLeader(eim, leader) {}

View File

@@ -32,6 +32,14 @@ function init() {
em.setProperty("noEntry","false");
}
function setup(level, lobbyid) {
var eim = em.newInstance("DollHouse_" + lobbyid);
eim.setProperty("level", level);
eim.setProperty("boss", "0");
return eim;
}
function playerEntry(eim, player) {
eim.getInstanceMap(entryMap).shuffleReactors();
eim.setExclusiveItems([4031094]);
@@ -81,8 +89,6 @@ function dispose() {}
// ---------- FILLER FUNCTIONS ----------
function setup(eim, leaderid) {}
function monsterValue(eim, mobid) {return 0;}
function disbandParty(eim, player) {}

View File

@@ -16,8 +16,8 @@ function init() {
rideTime = em.getTransportationTime(rideTime);
}
function setup() {
var eim = em.newInstance("Hak_" + + em.getProperty("player"));
function setup(level, lobbyid) {
var eim = em.newInstance("Hak_" + lobbyid);
return eim;
}

View File

@@ -16,8 +16,8 @@ function init() {
rideTime = em.getTransportationTime(rideTime);
}
function setup() {
var eim = em.newInstance("KerningTrain_" + em.getProperty("player"));
function setup(level, lobbyid) {
var eim = em.newInstance("KerningTrain_" + lobbyid);
return eim;
}

View File

@@ -34,8 +34,11 @@ function init() {
otherMap = em.getChannelServer().getMapFactory().getMap(103040420);
}
function setup() {
var eim = em.newInstance("RockSpirit_" + em.getProperty("player"));
function setup(level, lobbyid) {
var eim = em.newInstance("RockSpirit_" + lobbyid);
eim.setProperty("level", level);
eim.setProperty("boss", "0");
respawn(eim);
eim.startEventTimer(timer);
return eim;

View File

@@ -34,8 +34,11 @@ function init() {
otherMap = em.getChannelServer().getMapFactory().getMap(103040450);
}
function setup() {
var eim = em.newInstance("RockSpiritVIP_" + em.getProperty("player"));
function setup(level, lobbyid) {
var eim = em.newInstance("RockSpiritVIP_" + lobbyid);
eim.setProperty("level", level);
eim.setProperty("boss", "0");
respawn(eim);
eim.startEventTimer(timer);
return eim;

View File

@@ -33,8 +33,9 @@ function getEligibleParty(party) { //selects, from the given party, the tea
return eligible;
}
function setup() {
var eim = em.newInstance("s4aWorld");
function setup(level, lobbyid) {
var eim = em.newInstance("s4aWorld_" + lobbyid);
eim.setProperty("level", level);
eim.getInstanceMap(910500000).resetPQ(1);
respawnStages(eim);

View File

@@ -3,12 +3,12 @@ importPackage(Packages.tools);
var mapId = 200090000;
function start(pi) {
var map = pi.getClient().getChannelServer().getMapFactory().getMap(mapId);
function start(ms) {
var map = ms.getClient().getChannelServer().getMapFactory().getMap(mapId);
if(map.getDocked()) {
pi.getClient().announce(MaplePacketCreator.musicChange("Bgm04/ArabPirate"));
pi.getClient().announce(MaplePacketCreator.crogBoatPacket(true));
ms.getClient().announce(MaplePacketCreator.musicChange("Bgm04/ArabPirate"));
ms.getClient().announce(MaplePacketCreator.crogBoatPacket(true));
}
return(true);

View File

@@ -3,12 +3,12 @@ importPackage(Packages.tools);
var mapId = 200090010;
function start(pi) {
var map = pi.getClient().getChannelServer().getMapFactory().getMap(mapId);
function start(ms) {
var map = ms.getClient().getChannelServer().getMapFactory().getMap(mapId);
if(map.getDocked()) {
pi.getClient().announce(MaplePacketCreator.musicChange("Bgm04/ArabPirate"));
pi.getClient().announce(MaplePacketCreator.crogBoatPacket(true));
ms.getClient().announce(MaplePacketCreator.musicChange("Bgm04/ArabPirate"));
ms.getClient().announce(MaplePacketCreator.crogBoatPacket(true));
}
return(true);

View File

@@ -1,5 +1,5 @@
function start(pi) {
var map = pi.getClient().getChannelServer().getMapFactory().getMap(922000000);
function start(ms) {
var map = ms.getClient().getChannelServer().getMapFactory().getMap(922000000);
map.clearDrops();
map.resetReactors();
map.shuffleReactors();

View File

@@ -25,10 +25,11 @@ function action(mode, type, selection) {
}
if (status == 1) {
if (selection == 0) {
var train = cm.getEventManager("KerningTrain");
train.newInstance("KerningTrain");
train.setProperty("player", cm.getPlayer().getName());
train.startInstance(cm.getPlayer());
var em = cm.getEventManager("KerningTrain");
if (!em.startInstance(cm.getPlayer())) {
cm.sendOk("The passenger wagon is already full. Try again a bit later.");
}
cm.dispose();
return;
} else if (selection == 1) {

View File

@@ -47,10 +47,10 @@ function action(mode, type, selection) {
if (status == 0) {
if (selection == 0) {
if (cm.isQuestStarted(2286) || cm.isQuestStarted(2287) || cm.isQuestStarted(2288)) {
var rock = cm.getEventManager("RockSpirit");
rock.newInstance("RockSpirit");
rock.setProperty("player", cm.getPlayer().getName());
rock.startInstance(cm.getPlayer());
var em = cm.getEventManager("RockSpirit");
if (!em.startInstance(cm.getPlayer())) {
cm.sendOk("Uh... It looks like the rooms ahead are a bit crowded right now. Please wait around here for a bit, ok?");
}
cm.dispose();
return;
} else {

View File

@@ -59,13 +59,12 @@ function start() {
if (em == null)
cm.sendOk("Sorry, but 3rd job advancement (" + js + ") is closed.");
else {
if (em.getProperty("noEntry") == "false") {
var eim = em.newInstance("3rdjob_" + js);
eim.registerPlayer(cm.getPlayer());
}
else {
if (!em.startInstance(cm.getPlayer())) {
cm.sendOk("Someone else is already challenging the clone. Please wait until the area is cleared.");
}
cm.dispose();
return;
}
}

View File

@@ -174,7 +174,7 @@ function action(mode, type, selection) {
if (selection > 0) {
var banned = expedMembers.get(selection - 1);
expedition.ban(banned);
cm.sendOk("You have banned " + banned.getName() + " from the expedition.");
cm.sendOk("You have banned " + banned.getValue() + " from the expedition.");
cm.dispose();
} else {
cm.sendSimple(list);

View File

@@ -6,7 +6,7 @@
var status;
function start(){
status = -1;
status = -1;
action(1, 0, 0);
}
@@ -26,6 +26,11 @@ function action(mode, type, selection){
if(cm.getMapId() == 106021402) {
if (!(cm.isQuestCompleted(2331))) {
cm.dispose();
return;
}
if(status == 0){
cm.sendSimple("#L0#Enter to fight #bKing Pepe#k and #bYeti Brothers#k.#l\r\n#L1#Enter to fight #bPrime Minister#k.#l");
}
@@ -48,6 +53,12 @@ function action(mode, type, selection){
}
}
} else {
var questProgress = cm.getQuestProgress(2330, 3300005) + cm.getQuestProgress(2330, 3300006) + cm.getQuestProgress(2330, 3300007); //3 Yetis
if (!(cm.isQuestStarted(2330) && questProgress < 3)) { // thanks Vcoc for finding an exploit with boss entry through NPC
cm.dispose();
return;
}
if(status == 0){
cm.sendSimple("#L1#Enter to fight #bKing Pepe#k and #bYeti Brothers#k.#l");
}

View File

@@ -140,11 +140,11 @@ function action(mode, type, selection){
}
} else {
if (cm.getPlayer().getLevel() >= 50){
cm.sendNext("Ok, go.");
cm.sendOk("The Chief's Residence Council grants you #bconcession#k to make part of the #rcounteroffensive team against Zakum#k. Good luck on your journey ahead.");
if(!(cm.isQuestStarted(100200) || cm.isQuestCompleted(100200))) cm.startQuest(100200);
if(Packages.constants.ServerConstants.USE_ENABLE_SOLO_EXPEDITIONS && !cm.isQuestCompleted(100201)) cm.completeQuest(100201);
}else
cm.sendNext("You're weak.");
cm.sendOk("You're way too weak to make part of the #rcounteroffensive team against Zakum#k. Reach at least #blevel 50#k, then talk to me.");
cm.dispose();
}
}

View File

@@ -112,11 +112,11 @@ function action(mode, type, selection){
}
} else {
if (cm.getPlayer().getLevel() >= 50){
cm.sendNext("Ok, go.");
cm.sendOk("The Chief's Residence Council grants you #bconcession#k to make part of the #rcounteroffensive team against Zakum#k. Good luck on your journey ahead.");
if(!(cm.isQuestStarted(100200) || cm.isQuestCompleted(100200))) cm.startQuest(100200);
if(Packages.constants.ServerConstants.USE_ENABLE_SOLO_EXPEDITIONS && !cm.isQuestCompleted(100201)) cm.completeQuest(100201);
}else
cm.sendNext("You're weak.");
cm.sendOk("You're way too weak to make part of the #rcounteroffensive team against Zakum#k. Reach at least #blevel 50#k, then talk to me.");
cm.dispose();
}
}

View File

@@ -113,11 +113,11 @@ function action(mode, type, selection){
}
} else {
if (cm.getPlayer().getLevel() >= 50){
cm.sendNext("Ok, go.");
cm.sendOk("The Chief's Residence Council grants you #bconcession#k to make part of the #rcounteroffensive team against Zakum#k. Good luck on your journey ahead.");
if(!(cm.isQuestStarted(100200) || cm.isQuestCompleted(100200))) cm.startQuest(100200);
if(Packages.constants.ServerConstants.USE_ENABLE_SOLO_EXPEDITIONS && !cm.isQuestCompleted(100201)) cm.completeQuest(100201);
}else
cm.sendNext("You're weak.");
cm.sendOk("You're way too weak to make part of the #rcounteroffensive team against Zakum#k. Reach at least #blevel 50#k, then talk to me.");
cm.dispose();
}
}

View File

@@ -112,11 +112,11 @@ function action(mode, type, selection){
}
} else {
if (cm.getPlayer().getLevel() >= 50){
cm.sendNext("Ok, go.");
cm.sendOk("The Chief's Residence Council grants you #bconcession#k to make part of the #rcounteroffensive team against Zakum#k. Good luck on your journey ahead.");
if(!(cm.isQuestStarted(100200) || cm.isQuestCompleted(100200))) cm.startQuest(100200);
if(Packages.constants.ServerConstants.USE_ENABLE_SOLO_EXPEDITIONS && !cm.isQuestCompleted(100201)) cm.completeQuest(100201);
}else
cm.sendNext("You're weak.");
cm.sendOk("You're way too weak to make part of the #rcounteroffensive team against Zakum#k. Reach at least #blevel 50#k, then talk to me.");
cm.dispose();
}
}

View File

@@ -111,11 +111,11 @@ function action(mode, type, selection){
}
} else {
if (cm.getPlayer().getLevel() >= 50){
cm.sendNext("Ok, go.");
cm.sendOk("The Chief's Residence Council grants you #bconcession#k to make part of the #rcounteroffensive team against Zakum#k. Good luck on your journey ahead.");
if(!(cm.isQuestStarted(100200) || cm.isQuestCompleted(100200))) cm.startQuest(100200);
if(Packages.constants.ServerConstants.USE_ENABLE_SOLO_EXPEDITIONS && !cm.isQuestCompleted(100201)) cm.completeQuest(100201);
}else
cm.sendNext("You're weak.");
cm.sendOk("You're way too weak to make part of the #rcounteroffensive team against Zakum#k. Reach at least #blevel 50#k, then talk to me.");
cm.dispose();
}
}

View File

@@ -176,7 +176,7 @@ function action(mode, type, selection) {
if (selection > 0) {
var banned = expedMembers.get(selection - 1);
expedition.ban(banned);
cm.sendOk("You have banned " + banned.getName() + " from the expedition.");
cm.sendOk("You have banned " + banned.getValue() + " from the expedition."); // getValue, thanks MedicOP for finding this issue
cm.dispose();
} else {
cm.sendSimple(list);

View File

@@ -78,13 +78,13 @@ function action(mode, type, selection) {
if (getEimForString(em,passwd) != null)
cm.sendOk("You may not use that password.");
else { // start Zakum Battle
var eim = em.newInstance("Zakum" + passwd);
if(!em.startInstance(eim,cm.getPlayer().getName())) {
cm.sendOk("A party in your name is already registered in this instance.");
cm.dispose();
return;
//var em = cm.getEventManager("Zakum" + passwd);
if (!em.startInstance(cm.getPlayer())) {
cm.sendOk("A party is already registered in this instance.");
}
eim.registerPlayer(cm.getPlayer());
cm.dispose();
return;
}
}
if (state == 1) { // Member

View File

@@ -56,8 +56,11 @@ function action(mode, type, selection) {
if (status == 1)
cm.sendYesNo("Are you ready to enter the dollhouse map?");
else if (status == 2) {
var eim = em.newInstance("DollHouse");
eim.registerPlayer(cm.getPlayer());
var em = cm.getEventManager("DollHouse");
if (!em.startInstance(cm.getPlayer())) {
cm.sendOk("Hmm... The DollHouse is being challenged already, it seems. Try again later.");
}
cm.dispose();
}
}

View File

@@ -36,11 +36,7 @@ function start() {
if (em == null)
cm.sendOk("Sorry, but 3rd job advancement (mount) is closed.");
else {
if (em.getProperty("noEntry") == "false") {
var eim = em.newInstance("3rdjob_mount");
eim.registerPlayer(cm.getPlayer());
}
else {
if (!em.startInstance(cm.getPlayer())) {
cm.sendOk("There is currently someone in this map, come back later.");
}
}

View File

@@ -168,7 +168,7 @@ function action(mode, type, selection) {
if (selection > 0) {
var banned = expedMembers.get(selection - 1);
expedition.ban(banned);
cm.sendOk("You have banned " + banned.getName() + " from the expedition.");
cm.sendOk("You have banned " + banned.getValue() + " from the expedition.");
cm.dispose();
} else {
cm.sendSimple(list);

View File

@@ -85,10 +85,14 @@ function action(mode, type, selection) {
cm.warp(250000100, 0);
cm.dispose();
} else {
var em = cm.getEventManager("Hak");
if (!em.startInstance(cm.getPlayer())) {
cm.sendOk("Uh... We are currently taking requests from too many maplers right now... Please try again in a bit.");
cm.dispose();
return;
}
cm.gainMeso(-cost[slct]);
hak.newInstance("Hak");
hak.setProperty("player", cm.getPlayer().getName());
hak.startInstance(cm.getPlayer());
cm.dispose();
}
}

View File

@@ -171,7 +171,7 @@ function action(mode, type, selection) {
if (selection > 0) {
var banned = expedMembers.get(selection - 1);
expedition.ban(banned);
cm.sendOk("You have banned " + banned.getName() + " from the expedition.");
cm.sendOk("You have banned " + banned.getValue() + " from the expedition.");
cm.dispose();
} else {
cm.sendSimple(list);

View File

@@ -175,7 +175,7 @@ function action(mode, type, selection) {
if (selection > 0) {
var banned = expedMembers.get(selection - 1);
expedition.ban(banned);
cm.sendOk("You have banned " + banned.getName() + " from the expedition.");
cm.sendOk("You have banned " + banned.getValue() + " from the expedition.");
cm.dispose();
} else {
cm.sendSimple(list);

View File

@@ -158,7 +158,7 @@ function action(mode, type, selection) {
if (selection > 0) {
var banned = expedMembers.get(selection - 1);
expedition.ban(banned);
cm.sendOk("You have banned " + banned.getName() + " from the expedition.");
cm.sendOk("You have banned " + banned.getValue() + " from the expedition.");
cm.dispose();
} else {
cm.sendSimple(list);

View File

@@ -175,7 +175,7 @@ function action(mode, type, selection) {
if (selection > 0) {
var banned = expedMembers.get(selection - 1);
expedition.ban(banned);
cm.sendOk("You have banned " + banned.getName() + " from the expedition.");
cm.sendOk("You have banned " + banned.getValue() + " from the expedition.");
cm.dispose();
} else {
cm.sendSimple(list);

View File

@@ -48,6 +48,7 @@ function writeFeatureTab_PQs() {
addFeature("Mu Lung Dojo.");
addFeature("Capt. Latanica with party fighting the boss.");
addFeature("Filled up missing obligatory event script methods.");
addFeature("Secured uniquety of active lobby-name instances.");
}
function writeFeatureTab_Skills() {
@@ -126,7 +127,9 @@ function writeFeatureTab_MonstersMapsReactors() {
addFeature("Mobs now can drop more than one of the same equip.");
addFeature("Mobs only drop items collectable by the player/party.");
addFeature("Mobs shouldn't fall from foothold too often now.");
addFeature("Puppets holds targeted mobs nearby on new aggro feat.");
addFeature("Properly applying MP cost on non-skill mob moves.");
addFeature("Limited underling mob spawns.");
addFeature("Implemented mob banish by touch & skill move.");
addFeature("Redesigned HT mechanics: assemble & dmg taken.");
addFeature("Implemented Zombify disease status.");
@@ -253,10 +256,12 @@ function writeFeatureTab_Project() {
addFeature("Improved login phase, using cache over DB queries.");
addFeature("Protected many flaws with login management system.");
addFeature("Developed a robust anti-exploit login coordinator.");
addFeature("Revised uniqueness aspect of logged in accounts.");
addFeature("Usage of HikariCP to improve DB connection calls.");
addFeature("Usage of Java Threadpool to improve runnable calls.");
addFeature("Developed many survey tools for content profiling.");
addFeature("Removed dangling item name throughout game files.");
addFeature("Remodeled item scripts, properly using NPC dialogs.");
addFeature("ThreadTracker: runtime tool for deadlock detection.");
addFeature("Channel, World and Server-wide timer management.");
addFeature("Thoroughly reviewed encapsulation for player stats.");

View File

@@ -1,8 +1,10 @@
function enter(pi) {
var em = pi.getEventManager("KerningTrain");
if (!em.startInstance(pi.getPlayer())) {
pi.message("The passenger wagon is already full. Try again a bit later.");
return false;
}
pi.playPortalSound();
var train = pi.getEventManager("KerningTrain");
train.newInstance("KerningTrain");
train.setProperty("player", pi.getPlayer().getName());
train.startInstance(pi.getPlayer());
return true;
}

View File

@@ -6,14 +6,13 @@ function enter(pi) {
return false;
}
else {
if (em.getProperty("noEntry") == "false") {
var eim = em.newInstance("Aran_2ndmount");
eim.registerPlayer(pi.getPlayer());
return true;
}
else {
var em = pi.getEventManager("Aran_2ndmount");
if (!em.startInstance(pi.getPlayer())) {
pi.message("There is currently someone in this map, come back later.");
return false;
} else {
pi.playPortalSound();
return true;
}
}
} else {

View File

@@ -28,6 +28,8 @@ function enter(pi) {
pi.playPortalSound();
pi.warp(900000000, 0);
return true;
}
return false;
} else {
pi.message("Private property. This place can only be entered when running an errand from Camila.");
return false;
}
}

View File

@@ -20,6 +20,9 @@ function enter(pi) {
case 100000201:
pi.warp(100000204, 2); //or 100000205
break;
case 101000003: // portal warp fix thanks to Vcoc
pi.warp(101000004, 2); //or 101000005
break;
default:
pi.warp(pi.getMapId() + 1, 1); //or + 2
break;

View File

@@ -22,13 +22,13 @@ function start(mode, type, selection) {
} else if (status == 3) {
qm.sendAcceptDecline("Please, Aran. Please stop me from becoming enraged. Only you can control me. It's getting out of my hands now. Please do whatever it takes to #rstop me from going berserk#k!");
} else if (status == 4) {
qm.startQuest();
var mb = qm.getEventManager("MahaBattle");
mb.newInstance("MahaBattle");
mb.setProperty("player", qm.getPlayer().getName());
mb.startInstance(qm.getPlayer());
var em = qm.getEventManager("MahaBattle");
if (!em.startInstance(qm.getPlayer())) {
qm.sendOk("There is currently someone in this map, come back later.");
} else {
qm.startQuest();
}
qm.dispose();
}
}

View File

@@ -48,17 +48,14 @@ function start(mode, type, selection) {
return;
}
else {
if (em.getProperty("noEntry") == "false") {
var eim = em.newInstance("Aran_3rdmount");
eim.registerPlayer(qm.getPlayer());
qm.forceStartQuest();
qm.dispose();
}
else {
var em = qm.getEventManager("Aran_3rdmount");
if (!em.startInstance(qm.getPlayer())) {
qm.sendOk("There is currently someone in this map, come back later.");
qm.dispose();
} else {
qm.forceStartQuest();
}
qm.dispose();
}
}
}

View File

@@ -42,17 +42,14 @@ function start(mode, type, selection) {
return;
}
if (em.getProperty("noEntry") == "false") {
var eim = em.newInstance("BalrogQuest");
eim.registerPlayer(qm.getPlayer());
eim.startEvent();
qm.dispose();
}
else {
var em = qm.getEventManager("BalrogQuest");
if (!em.startInstance(qm.getPlayer())) {
qm.sendOk("There is currently someone in this map, come back later.");
qm.dispose();
} else {
qm.forceStartQuest();
}
qm.dispose();
}
}
}

View File

@@ -43,13 +43,14 @@ function end(mode, type, selection) {
qm.sendNext("You got the #b#i4032521##k with you, great. Let me show you the way.");
} else if (status == 1) {
var em = qm.getEventManager("RockSpiritVIP");
if (!em.startInstance(qm.getPlayer())) {
qm.sendOk("Uh... It looks like the rooms ahead are a bit crowded right now. Please wait around here for a bit, ok?");
qm.dispose();
return;
}
qm.gainItem(4032521, -10);
var rock = qm.getEventManager("RockSpiritVIP");
rock.newInstance("RockSpiritVIP");
rock.setProperty("player", qm.getPlayer().getName());
rock.startInstance(qm.getPlayer());
qm.forceCompleteQuest();
qm.dispose();
}

View File

@@ -41,9 +41,22 @@ function start(mode, type, selection) {
return;
}
qm.sendNext("You have brought a #b#t4001094##k, thank you for the effort!");
if (qm.haveItem(2041200, 1)) {
qm.sendOk("(The #b#t2041200##k in my bag has grown brighter since reaching this place... Noticing again, the young dragon over there seems to be glaring bitterly towards it.)");
qm.dispose();
return;
}
qm.sendNext("You have brought a #b#t4001094##k, thank you for retrieving one more of my kin to the nest! Please have this...\r\n\r\n....... (bleuuhnuhgh) (blahrgngnhhng) ...\r\n\r\nehh, #b#t2041200##k as a token of my kin's gratitude. And do a favor for us, please, get that thing out of here...");
} else if (status == 1) {
if (!qm.canHold(2041200, 1)) {
qm.sendOk("Please make a room on your USE inventory to receive the reward.");
qm.dispose();
return;
}
qm.gainItem(4001094, -1);
qm.gainItem(2041200, 1); // quest not rewarding properly found thanks to MedicOP & Thora
qm.gainExp(42000);
qm.forceCompleteQuest();