Improved login phase + C. scheduler & EXP share & MoveLifeHandler fix

Refactored login system, caching account data, merging some queries and using way less DB queries on login.
Server now uses associative tables for character-account and character-world, lowering considerably usage of some DB queries.
Fixed getPartyMembersOnSameMap method trying to access disconnected members, promptly throwing nulls.
Improved EXP distribution system, now crediting damage-contributing EXP to the party when the player is not present on the map.
Improved the "View-all-chars" feature mechanics, not so often disconnecting players for server response timeout anymore.
Improved Mystic Doors mechanics, now correctly spawning party players at actual door location on the off-town map.
Fixed "fly" command not working properly. All characters of that account are able to use this mechanic (client session limitation).
Fixed a critical deadlock issue on the new channel scheduler system.
Fixed some mobs not using skills, issue brought on the latest MoveLifeHandler update.
Improved slightly skill/movement synergy on the MoveLifeHandler responses.
GMs no longer creates Hall-of-fame PlayerNPCs when reaching max class level.
Fixed monsterValue script method being triggered multiple times for party members.
Fixed pinkbean not dropping items inside expedition.
Moved "recharge" command from Donator to JrGM.
This commit is contained in:
ronancpl
2018-07-14 13:10:40 -03:00
parent 5dc16d0cab
commit ad812de001
91 changed files with 1902 additions and 86664 deletions

View File

@@ -162,6 +162,12 @@ function playerRevive(eim, player) {
return true;
}
function monsterRevive(eim, mob) {
if(isPinkBean(mob)) {
mob.enableDrops();
}
}
function playerDisconnected(eim, player) {
if (eim.isEventTeamLackingNow(true, minPlayers, player)) {
eim.dropMessage(5, "[Expedition] Either the leader has quit the expedition or there is no longer the minimum number of members required to continue it.");

View File

@@ -0,0 +1,17 @@
importPackage(Packages.server.life);
function start(ms) {
var pos = new java.awt.Point(842, 0);
var mobId = 9400633;
var mobName = "Astaroth";
var player = ms.getPlayer();
var map = player.getMap();
if(map.getMonsterById(mobId) != null){
return;
}
map.spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(mobId), pos);
player.message(mobName + " has appeared!");
}

View File

@@ -50,7 +50,7 @@ function start() {
if (cm.getLevel() >= 8 && cm.canGetFirstJob(jobType))
cm.sendNext("Want to be a magician? There are some standards to meet. because we can't just accept EVERYONE in... #bYour level should be at least 8#k, with getting INT as your top priority. Let's see.");
else {
cm.sendOk("Train a bit more until you reach #blevel 10, " + cm.getFirstJobStatRequirement(jobType) + "#k and I can show you the way of the #rMagician#k.");
cm.sendOk("Train a bit more until you reach #blevel 8, " + cm.getFirstJobStatRequirement(jobType) + "#k and I can show you the way of the #rMagician#k.");
cm.dispose();
}
} else if (cm.getLevel() >= 30 && cm.getJobId() == 200) {

47
scripts/npc/2071012.js Normal file
View File

@@ -0,0 +1,47 @@
/* A Familiar Lady
Hidden Street : Gloomy Forest (922220000)
*/
var status;
function start() {
status = -1;
action(1, 0, 0);
}
function action(mode, type, selection) {
if (mode == -1) {
cm.dispose();
} else {
if (mode == 0 && type > 0) {
cm.dispose();
return;
}
if (mode == 1)
status++;
else
status--;
if(status == 0) {
if(cm.getQuestProgress(23647, 0) != 0) {
cm.dispose();
return;
}
if(!cm.haveItem(4031793, 1)) {
cm.sendOk("Umm... Hey... Would you help me find a #bsoft and shiny silver fur#k that I lost on the woods? I need it, I need it, I need it sooooo much!");
cm.dispose();
return;
}
cm.sendYesNo("Hey... Umm... Would you help me find a #bsoft and shiny silver fur#k that I lost on the woods? I need it, I need it, I need it sooooo much! ... Oh you found it!!! Will you give it to me?");
} else if(status == 1) {
cm.sendNext("Teehehee~ That's your reward for taking it from me, serves you well.");
cm.gainItem(4031793, -1);
cm.gainFame(-5);
cm.setQuestProgress(23647, 0, 1);
cm.dispose();
}
}
}

View File

@@ -1,5 +1,5 @@
/*
This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server
This file is part of the HeavenMS MapleStory Server
Copyleft (L) 2017 RonanLana
This program is free software: you can redistribute it and/or modify

View File

@@ -1,5 +1,5 @@
/*
This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server
This file is part of the HeavenMS MapleStory Server
Copyleft (L) 2017 RonanLana
This program is free software: you can redistribute it and/or modify

View File

@@ -1,5 +1,5 @@
/*
This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server
This file is part of the HeavenMS MapleStory Server
Copyleft (L) 2017 RonanLana
This program is free software: you can redistribute it and/or modify

View File

@@ -1,5 +1,5 @@
/*
This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server
This file is part of the HeavenMS MapleStory Server
Copyleft (L) 2017 RonanLana
This program is free software: you can redistribute it and/or modify

View File

@@ -1,5 +1,5 @@
/*
This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server
This file is part of the HeavenMS MapleStory Server
Copyleft (L) 2017 RonanLana
This program is free software: you can redistribute it and/or modify

View File

@@ -1,5 +1,5 @@
/*
This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server
This file is part of the HeavenMS MapleStory Server
Copyleft (L) 2017 RonanLana
This program is free software: you can redistribute it and/or modify

View File

@@ -1,5 +1,5 @@
/*
This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server
This file is part of the HeavenMS MapleStory Server
Copyleft (L) 2017 RonanLana
This program is free software: you can redistribute it and/or modify

View File

@@ -1,5 +1,5 @@
/*
This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server
This file is part of the HeavenMS MapleStory Server
Copyleft (L) 2017 RonanLana
This program is free software: you can redistribute it and/or modify

View File

@@ -1,5 +1,5 @@
/*
This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server
This file is part of the HeavenMS MapleStory Server
Copyleft (L) 2017 RonanLana
This program is free software: you can redistribute it and/or modify

View File

@@ -1,5 +1,5 @@
/*
This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server
This file is part of the HeavenMS MapleStory Server
Copyleft (L) 2017 RonanLana
This program is free software: you can redistribute it and/or modify

View File

@@ -1,5 +1,5 @@
/*
This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server
This file is part of the HeavenMS MapleStory Server
Copyleft (L) 2017 RonanLana
This program is free software: you can redistribute it and/or modify

View File

@@ -1,5 +1,5 @@
/*
This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server
This file is part of the HeavenMS MapleStory Server
Copyleft (L) 2017 RonanLana
This program is free software: you can redistribute it and/or modify

View File

@@ -1,5 +1,5 @@
/*
This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server
This file is part of the HeavenMS MapleStory Server
Copyleft (L) 2017 RonanLana
This program is free software: you can redistribute it and/or modify

View File

@@ -1,5 +1,5 @@
/*
This file is part of the HeavenMS (MapleSolaxiaV2) MapleStory Server
This file is part of the HeavenMS MapleStory Server
Copyleft (L) 2017 RonanLana
This program is free software: you can redistribute it and/or modify

45
scripts/npc/9201133.js Normal file
View File

@@ -0,0 +1,45 @@
var map = 677000010;
var quest = 28283;
var status = -1;
var inHuntingGround;
function start(mode, type, selection) {
inHuntingGround = (cm.getMapId() >= 677000010 && cm.getMapId() <= 677000012);
action(1, 0, 0);
}
function action(mode, type, selection) {
if (mode == 1) {
status++;
} else {
cm.dispose();
return;
}
if (status == 0) {
if(!inHuntingGround) {
if (cm.isQuestStarted(quest)) {
if(!cm.getPlayer().haveItemEquipped(1003036)) {
cm.sendOk("The path ahead has a weird stench... Equip the #rgas mask#k before entering.");
cm.dispose();
return;
}
cm.sendYesNo("Would you like to move to #b#m" + map + "##k?");
} else {
cm.sendOk("The entrance is blocked by a strange force.");
cm.dispose();
}
} else {
if(cm.getMapId() == 677000011) {
map = 677000012;
cm.sendYesNo("Would you like to move to #b#m" + map + "##k?");
} else {
map = 105050400;
cm.sendYesNo("Would you like to #bexit this place#k?");
}
}
} else {
cm.warp(map, 0);
cm.dispose();
}
}

View File

@@ -156,6 +156,7 @@ function writeFeatureTab_Serverpotentials() {
addFeature("Custom jail system.");
addFeature("Custom buyback system, uses mesos / NX, via MTS.");
addFeature("Delete Character.");
addFeature("Smooth view-all-char, now showing all account chars.");
addFeature("Autosaver (periodically saves player's data on DB).");
addFeature("Fixed and randomized HP/MP growth rate available.");
addFeature("Prevented 'NPC gone after some uptime' issue.");
@@ -199,6 +200,7 @@ function writeFeatureTab_Project() {
addFeature("Uncovered many opcodes throughout the source.");
addFeature("Reviewed many Java aspects that needed attention.");
addFeature("Reviewed SQL data, eliminating duplicated entries.");
addFeature("Improved login phase, using cache over DB queries.");
addFeature("Protected many flaws with login management system.");
addFeature("Developed many survey tools for content profiling.");
addFeature("ThreadTracker: runtime tool for deadlock detection.");

View File

@@ -162,6 +162,7 @@ function writeHeavenMSCommandsLv2() { //JrGM
comm_cursor = comm_lv2;
desc_cursor = desc_lv2;
addCommand("recharge", "");
addCommand("whereami", "");
addCommand("hide", "");
addCommand("unhide", "");
@@ -205,7 +206,6 @@ function writeHeavenMSCommandsLv1() { //Donator
addCommand("whodrops", "");
addCommand("buffme", "");
addCommand("goto", "");
addCommand("recharge", "");
}
function writeHeavenMSCommandsLv0() { //Common

View File

@@ -1,4 +1,10 @@
function enter(pi) {
pi.playPortalSound(); pi.warp(222010200, "east00");
if(!(pi.isQuestStarted(3647) && pi.haveItem(4031793, 1))) {
pi.playPortalSound(); pi.warp(222010200, "east00");
} else {
if(!pi.isQuestStarted(23647)) pi.forceStartQuest(23647);
pi.playPortalSound(); pi.warp(922220000, "east00");
}
return true;
}