Abstract channel schedulers + Mob animation track + More portal SFX

Implemented an improved scheduler system for channels, on where Runnables objects are "registered in" to run on a scheduled future time (effective run time will depend on the proc time of the worker acting under-the-hood).
Implemented a channel scheduler for detecting "mobs currently on animation state". This allows the server to send info to the client about whether a mob should cast a skill or not at that moment.
Improved concurrent protection on MapleMonster listeners registry.
Improved resource deallocation when destroying a monster object.
Added a server flag to allow clean slates to be used on equipments even on the "only successfully used scroll slots" case.
Fixed a critical deadlock case with MapleServerHandler.
Added the portal SFX for many scripted portals that still lacked the sound effect.
This commit is contained in:
ronancpl
2018-07-08 18:25:48 -03:00
parent 94425ba616
commit 5dc16d0cab
42 changed files with 1226 additions and 161 deletions

View File

@@ -19,7 +19,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/>.
*/
//Gachaphon
//Gachapon
var ids = [2000004,2020012,2000005,2030007,2022027,2040001,2041002, 2040805, 2040702, 2043802, 2040402, 2043702, 1302022, 1322021, 1322026, 1302026, 1442017, 1082147, 1102043, 1442016, 1402012, 1302027, 1322027, 1322025, 1312012, 1062000, 1332020, 1302028, 1372002, 1002033, 1092022, 1302021, 1102041, 1102042, 1322024, 1082148, 1002012, 1322012, 1322022, 1002020, 1302013, 1082146, 1442014, 1002096, 1302017, 1442012, 1322010, 1442011, 1442018, 1092011, 1092014, 1302003, 1432001, 1312011, 1002088, 1041020, 1322015, 1442004, 1422008, 1302056, 1432000, 1382001, 1041053, 1060014, 1050053, 1051032, 1050073, 1061036, 1002253, 1002034, 1051025, 1050067, 1051052, 1002072, 1002144, 1051054, 1050069, 1372007, 1050056, 1050074, 1002254, 1002274, 1002218, 1051055, 1382010, 1002246, 1050039, 1382007, 1372000, 1002013, 1050072, 1002036, 1002243, 1372008, 1382008, 1382011, 1092021, 1051034, 1050047, 1040019, 1041031, 1051033, 1002153, 1002252, 1051024, 1002153, 1050068, 1382003, 1382006, 1050055, 1051031, 1050025, 1002155, 1002245, 1452004, 1452023, 1060057, 1040071, 1002137, 1462009, 1452017, 1040025, 1041027, 1452005, 1452007, 1061057, 1472006, 1472019, 1060084, 1472028, 1002179, 1082074, 1332015, 1432001, 1060071, 1472007, 1472002, 1051009, 1061037, 1332016, 1332034, 1472020, 1102084, 1102086, 1102042, 1032026, 1082149];
var status = 0;

View File

@@ -116,6 +116,7 @@ function writeFeatureTab_MonstersMapsReactors() {
addFeature("C. Balrog's boat approaching visual effect functional.");
addFeature("Maps having everlasting items no longer expires them.");
addFeature("PQs, Taxis and events warps players to random SPs.");
addFeature("Uncovered missing portal SFX on scripted portals.");
addFeature("PQ boxes sprays items when opened, GMS-like.");
addFeature("Reactors pick items up smartly from the field.");
addFeature("Reviewed Masteria, W. Tour, N. Desert and Neo City.");
@@ -199,8 +200,9 @@ function writeFeatureTab_Project() {
addFeature("Reviewed many Java aspects that needed attention.");
addFeature("Reviewed SQL data, eliminating duplicated entries.");
addFeature("Protected many flaws with login management system.");
addFeature("Developed many survey tools for content management.");
addFeature("Developed many survey tools for content profiling.");
addFeature("ThreadTracker: runtime tool for deadlock detection.");
addFeature("Channel, World and Server-wide timer management.");
addFeature("Heavily reviewed future task management, spawning much less threads and relieving task overload on the TimerManager.");
}
@@ -240,7 +242,7 @@ function action(mode, type, selection) {
status--;
if (status == 0) {
var sendStr = "HeavenMS was developed on the timespan of 3 years, based on where Solaxia left. On the meantime many nice features emerged, development aimed to get back the old GMS experience. Now many of these so-long missing features are gracefully presented to you in the shape of this server. Long live MapleStory!!\r\n\r\nThese are the features of #bHeavenMS#k:\r\n\r\n";
var sendStr = "HeavenMS was developed on the timespan of 3 years, based on where Solaxia left. On the meantime many nice features emerged, development aimed to get back the old GMS experience. Now many of these so-long missing features are gracefully presented to you in the shape of this server. Long live MapleStory!!\r\n\r\nThese are the features from #bHeavenMS#k:\r\n\r\n";
for(var i = 0; i < tabs.length; i++) {
sendStr += "#L" + i + "##b" + tabs[i] + "#k#l\r\n";
}

View File

@@ -40,7 +40,8 @@ function enter(pi) {
// do nothing; send message to player
pi.getPlayer().dropMessage(6, "Horntail\'s Seal is Blocking this Door.");
return false;
}else {
} else {
pi.playPortalSound();
pi.getPlayer().changeMap(target, targetPortal);
return true;
}
@@ -56,7 +57,8 @@ function enter(pi) {
// do nothing; send message to player
pi.getPlayer().dropMessage(6, "Horntail\'s Seal is Blocking this Door.");
return false;
}else {
} else {
pi.playPortalSound();
pi.getPlayer().changeMap(target, targetPortal);
return true;
}
@@ -72,7 +74,8 @@ function enter(pi) {
// do nothing; send message to player
pi.getPlayer().dropMessage(6, "Horntail\'s Seal is Blocking this Door.");
return false;
}else {
} else {
pi.playPortalSound();
pi.getPlayer().changeMap(target, targetPortal);
return true;
}
@@ -88,7 +91,8 @@ function enter(pi) {
// do nothing; send message to player
pi.getPlayer().dropMessage(6, "Horntail\'s Seal is Blocking this Door.");
return false;
}else {
} else {
pi.playPortalSound();
pi.getPlayer().changeMap(target, targetPortal);
return true;
}
@@ -104,6 +108,7 @@ function enter(pi) {
if (pi.haveItem(4001092) && pi.isEventLeader()) {
eim.showClearEffect();
pi.getPlayer().dropMessage(6, "The leader's key break the seal for a flash...");
pi.playPortalSound();
pi.getPlayer().changeMap(target, targetPortal);
eim.setIntProperty("5stageclear", 1);
return true;
@@ -111,7 +116,8 @@ function enter(pi) {
pi.getPlayer().dropMessage(6, "Horntail\'s Seal is blocking this door. Only the leader with the key can lift this seal.");
return false;
}
}else {
} else {
pi.playPortalSound();
pi.getPlayer().changeMap(target, targetPortal);
return true;
}

View File

@@ -39,6 +39,7 @@ function enter(pi) {
return false;
}
pi.playPortalSound();
eim.warpEventTeam(target);
return true;
} else {

View File

@@ -28,6 +28,7 @@ function enter(pi) {
var target = eim.getMapInstance(103000801);
if (eim.getProperty("1stageclear") != null) {
pi.playPortalSound();
pi.getPlayer().changeMap(target, target.getPortal("st00"));
return true;
}

View File

@@ -28,6 +28,7 @@ function enter(pi) {
var eim = pi.getPlayer().getEventInstance();
var target = eim.getMapInstance(103000802);
if (eim.getProperty("2stageclear") != null) {
pi.playPortalSound();
pi.getPlayer().changeMap(target, target.getPortal("st00"));
return true;
}

View File

@@ -27,6 +27,7 @@ function enter(pi) {
var eim = pi.getPlayer().getEventInstance();
var target = eim.getMapInstance(103000803);
if (eim.getProperty("3stageclear") != null) {
pi.playPortalSound();
pi.getPlayer().changeMap(target, target.getPortal("st00"));
return true;
}

View File

@@ -28,6 +28,7 @@ function enter(pi) {
var eim = pi.getPlayer().getEventInstance();
var target = eim.getMapInstance(103000804);
if (eim.getProperty("4stageclear") != null) {
pi.playPortalSound();
pi.getPlayer().changeMap(target, target.getPortal("st00"));
return true;
}

View File

@@ -27,6 +27,7 @@ function enter(pi) {
var eim = pi.getPlayer().getEventInstance();
var target = eim.getMapInstance(103000805);
if (eim.getProperty("5stageclear") != null) {
pi.playPortalSound();
pi.getPlayer().changeMap(target, target.getPortal("st00"));
return true;
}

View File

@@ -35,6 +35,7 @@ function enter(pi) {
return false;
}
else {
pi.playPortalSound();
pi.getPlayer().changeMap(target, targetPortal);
return true;
}

View File

@@ -35,6 +35,7 @@ function enter(pi) {
return false;
}
else {
pi.playPortalSound();
pi.getPlayer().changeMap(target, targetPortal);
return true;
}

View File

@@ -36,6 +36,7 @@ function enter(pi) {
return false;
}
else {
pi.playPortalSound();
pi.getPlayer().changeMap(target, targetPortal);
return true;
}

View File

@@ -36,6 +36,7 @@ function enter(pi) {
return false;
}
else {
pi.playPortalSound();
pi.getPlayer().changeMap(target, targetPortal);
return true;
}

View File

@@ -36,6 +36,7 @@ function enter(pi) {
return false;
}
else {
pi.playPortalSound();
pi.getPlayer().changeMap(target, targetPortal);
return true;
}

View File

@@ -40,6 +40,7 @@ function enter(pi) {
if(eim.getProperty("6stageclear") == null) {
eim.setProperty("6stageclear", "true");
}
pi.playPortalSound();
pi.getPlayer().changeMap(target, targetPortal);
return true;
}

View File

@@ -27,6 +27,7 @@ function enter(pi) {
var eim = pi.getPlayer().getEventInstance();
var target = eim.getMapInstance(922010800);
if (eim.getProperty("7stageclear") != null) {
pi.playPortalSound();
pi.getPlayer().changeMap(target, target.getPortal("st00"));
return true;
} else

View File

@@ -37,6 +37,7 @@ function enter(pi) {
return false;
}
else {
pi.playPortalSound();
pi.getPlayer().changeMap(target, targetPortal);
return true;
}

View File

@@ -1,5 +1,6 @@
function enter(pi) {
if (pi.getPlayer().getParty() != null && pi.isEventLeader() && pi.haveItem(4001055,1)) {
pi.playPortalSound();
pi.getEventInstance().warpEventTeam(920010100);
return true;
} else {

View File

@@ -3,6 +3,7 @@ function enter(pi) {
if (eim.isEventCleared()) {
if(pi.isEventLeader()) {
pi.playPortalSound();
eim.warpEventTeam(930000800);
return true;
} else {