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:
@@ -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;
|
||||
|
||||
@@ -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";
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -39,6 +39,7 @@ function enter(pi) {
|
||||
return false;
|
||||
}
|
||||
|
||||
pi.playPortalSound();
|
||||
eim.warpEventTeam(target);
|
||||
return true;
|
||||
} else {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -35,6 +35,7 @@ function enter(pi) {
|
||||
return false;
|
||||
}
|
||||
else {
|
||||
pi.playPortalSound();
|
||||
pi.getPlayer().changeMap(target, targetPortal);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -35,6 +35,7 @@ function enter(pi) {
|
||||
return false;
|
||||
}
|
||||
else {
|
||||
pi.playPortalSound();
|
||||
pi.getPlayer().changeMap(target, targetPortal);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -36,6 +36,7 @@ function enter(pi) {
|
||||
return false;
|
||||
}
|
||||
else {
|
||||
pi.playPortalSound();
|
||||
pi.getPlayer().changeMap(target, targetPortal);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -36,6 +36,7 @@ function enter(pi) {
|
||||
return false;
|
||||
}
|
||||
else {
|
||||
pi.playPortalSound();
|
||||
pi.getPlayer().changeMap(target, targetPortal);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -36,6 +36,7 @@ function enter(pi) {
|
||||
return false;
|
||||
}
|
||||
else {
|
||||
pi.playPortalSound();
|
||||
pi.getPlayer().changeMap(target, targetPortal);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -37,6 +37,7 @@ function enter(pi) {
|
||||
return false;
|
||||
}
|
||||
else {
|
||||
pi.playPortalSound();
|
||||
pi.getPlayer().changeMap(target, targetPortal);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -3,6 +3,7 @@ function enter(pi) {
|
||||
|
||||
if (eim.isEventCleared()) {
|
||||
if(pi.isEventLeader()) {
|
||||
pi.playPortalSound();
|
||||
eim.warpEventTeam(930000800);
|
||||
return true;
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user