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

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