Commands overhaul + Selective loot + Antimulticlient Coordinator

Completely overhauled commands layout, each command splitted in Java classes.
Optimized "ranks" command, no more calling the DB to get ranking info.
Implemented a mechanic where mobs only spawns loots that are visible/collectable by the player's party.
Implemented a server flag which sets whether explorers, cygnus and legends are allowed to share the cash shop inventory or not.
Implemented support for dynamic server rates at bootup. Rates can now be assigned at the configuration.ini file.
Devised the anti-multiclient login coordinator feature. Besides multiclient attempts by the same machine, it also prevents unauthorized login attempts into an account.
Fixed PQ instances being forcefully closed even when party leader reassignment upon logout is available.
Fixed mob statis not concurrently protected.
This commit is contained in:
ronancpl
2018-08-28 14:12:00 -03:00
parent b5c6831129
commit 132f286391
210 changed files with 10518 additions and 3851 deletions

View File

@@ -111,6 +111,7 @@ function writeFeatureTab_MonstersMapsReactors() {
addFeature("Monsterbook displays updated drop data info.");
addFeature("Every skill/mastery book is now obtainable.");
addFeature("Mobs now can drop more than one of the same equip.");
addFeature("Mobs only drop items collectable by the player/party.");
addFeature("Redesigned HT mechanics: assemble & dmg taken.");
addFeature("Implemented Zombify disease status.");
addFeature("Added Boss HP Bar for dozens of bosses.");
@@ -146,10 +147,12 @@ function writeFeatureTab_Playerpotentials() {
addFeature("Pet evolutions functional (not GMS-like).");
addFeature("Reviewed keybinding system.");
addFeature("Character slots per world/server-wide.");
addFeature("Optional cash shop inventory separated by classes.");
}
function writeFeatureTab_Serverpotentials() {
addFeature("Multi-worlds.");
addFeature("Each world can hold it's own rates from server bootup.");
addFeature("Dynamic World/Channel deployment.");
addFeature("Inventory auto-gather and auto-sorting feature.");
addFeature("Enhanced auto-pot system: smart pet potion handle.");
@@ -158,13 +161,13 @@ function writeFeatureTab_Serverpotentials() {
addFeature("Enhanced inventory check: free slots smartly fetched.");
addFeature("Enhanced petloot handler: no brute-force inv. checks.");
addFeature("Tweaked pet/mount hunger to a balanced growth rate.");
addFeature("Consistent experience gain system.");
addFeature("Consistent experience and meso gain system.");
addFeature("NPC crafters won't take items freely anymore.");
addFeature("Duey: pkg rcvd popup and many delivery mechanics.");
addFeature("Pet pickup gives preference to player attacks.");
addFeature("Channel capacity bar and worlds with capacity check.");
addFeature("Diseases visible for others, even after changing maps.");
addFeature("Persistent diseases. Players keep their status on login.");
addFeature("Persistent diseases. Players keeps status on login.");
addFeature("Poison damage value visible for other players.");
addFeature("M. book announcer displays info based on demand.");
addFeature("Custom jail system.");
@@ -182,9 +185,11 @@ function writeFeatureTab_Serverpotentials() {
}
function writeFeatureTab_AdminGMcommands() {
addFeature("Server commands layered by GM levels.");
addFeature("Spawn Zakum/Horntail/Pinkbean.");
addFeature("Several new commands.");
addFeature("Rank command highlighting users by world or overall.");
addFeature("Server commands layered by GM levels.");
addFeature("Revamped command files layout - thanks Arthur L!");
}
function writeFeatureTab_CustomNPCs() {
@@ -219,6 +224,7 @@ function writeFeatureTab_Project() {
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 a robust anti-exploit login coordinator.");
addFeature("Usage of HikariCP to improve DB connection calls.");
addFeature("Developed many survey tools for content profiling.");
addFeature("ThreadTracker: runtime tool for deadlock detection.");

View File

@@ -6,252 +6,18 @@
Script: commands.js
*/
importPackage(Packages.client.command);
var status;
var common_heading = "@";
var staff_heading = "!";
var comm_lv6 = [];
var desc_lv6 = [];
var comm_lv5 = [];
var desc_lv5 = [];
var comm_lv4 = [];
var desc_lv4 = [];
var comm_lv3 = [];
var desc_lv3 = [];
var comm_lv2 = [];
var desc_lv2 = [];
var comm_lv1 = [];
var desc_lv1 = [];
var comm_lv0 = [];
var desc_lv0 = [];
var levels = ["Common", "Donator", "JrGM", "GM", "SuperGM", "Developer", "Admin"];
var comm_cursor, desc_cursor;
function addCommand(comm, desc) {
comm_cursor.push(comm);
desc_cursor.push(desc);
}
function writeHeavenMSCommandsLv6() { //Admin
comm_cursor = comm_lv6;
desc_cursor = desc_lv6;
addCommand("setgmlevel", "");
addCommand("warpworld", "");
addCommand("saveall", "");
addCommand("dcall", "");
addCommand("mapplayers", "");
addCommand("getacc", "");
addCommand("addchannel", "");
addCommand("addworld", "");
//addCommand("removechannel", "");
//addCommand("removeworld", "");
addCommand("shutdown", "");
addCommand("shutdownnow", "");
addCommand("clearquestcache", "");
addCommand("clearquest", "");
addCommand("spawnallpnpcs", "");
addCommand("eraseallpnpcs", "");
}
function writeHeavenMSCommandsLv5() { //Developer
comm_cursor = comm_lv5;
desc_cursor = desc_lv5;
addCommand("debugmonster", "");
addCommand("debugpacket", "");
addCommand("debugportal", "");
addCommand("debugspawnpoint", "");
addCommand("debugpos", "");
addCommand("debugmap", "");
addCommand("debugmobsp", "");
addCommand("debugevent", "");
addCommand("debugareas", "");
addCommand("debugreactors", "");
addCommand("debugcoupons", "");
addCommand("debugplayercoupons", "");
addCommand("debugtimer", "");
addCommand("debugmarriage", "");
addCommand("showpackets", "");
addCommand("set", "");
}
function writeHeavenMSCommandsLv4() { //SuperGM
comm_cursor = comm_lv4;
desc_cursor = desc_lv4;
addCommand("servermessage", "");
addCommand("proitem", "");
addCommand("seteqstat", "");
addCommand("exprate", "");
addCommand("mesorate", "");
addCommand("droprate", "");
addCommand("questrate", "");
addCommand("itemvac", "");
addCommand("forcevac", "");
addCommand("zakum", "");
addCommand("horntail", "");
addCommand("pinkbean", "");
addCommand("pap", "");
addCommand("pianus", "");
addCommand("cake", "");
addCommand("playernpcremove", "");
addCommand("playernpc", "");
}
function writeHeavenMSCommandsLv3() { //GM
comm_cursor = comm_lv3;
desc_cursor = desc_lv3;
addCommand("debuff", "");
addCommand("fly", "");
addCommand("spawn", "");
addCommand("mutemap", "");
addCommand("checkdmg", "");
addCommand("inmap", "");
addCommand("reloadevents", "");
addCommand("reloaddrops", "");
addCommand("reloadportals", "");
addCommand("reloadmap", "");
addCommand("reloadshops", "");
addCommand("hpmp", "");
addCommand("maxhpmp", "");
addCommand("music", "");
addCommand("monitor", "");
addCommand("monitors", "");
addCommand("ignore", "");
addCommand("ignored", "");
addCommand("pos", "");
addCommand("togglecoupon", "");
addCommand("chat", "");
addCommand("fame", "");
addCommand("givenx", "");
addCommand("givevp", "");
addCommand("givems", "");
addCommand("id", "");
addCommand("expeds", "");
addCommand("kill", "");
addCommand("seed", "");
addCommand("maxenergy", "");
addCommand("killall", "");
addCommand("notice", "");
addCommand("rip", "");
addCommand("openportal", "");
addCommand("closeportal", "");
addCommand("pe", "");
addCommand("startevent", "");
addCommand("endevent", "");
addCommand("online2", "");
addCommand("warpsnowball", "");
addCommand("ban", "");
addCommand("unban", "");
addCommand("healmap", "");
addCommand("healperson", "");
addCommand("hurt", "");
addCommand("killmap", "");
addCommand("night", "");
addCommand("npc", "");
addCommand("face", "");
addCommand("hair", "");
addCommand("startquest", "");
addCommand("completequest", "");
addCommand("resetquest", "");
}
function writeHeavenMSCommandsLv2() { //JrGM
comm_cursor = comm_lv2;
desc_cursor = desc_lv2;
addCommand("recharge", "");
addCommand("whereami", "");
addCommand("hide", "");
addCommand("unhide", "");
addCommand("sp", "");
addCommand("ap", "");
addCommand("empowerme", "");
addCommand("buffmap", "");
addCommand("buff", "");
addCommand("bomb", "");
addCommand("dc", "");
addCommand("cleardrops", "");
addCommand("clearslot", "");
addCommand("warp", "");
addCommand("warpto", "");
addCommand("warphere", "");
addCommand("reach", "");
addCommand("gmshop", "");
addCommand("heal", "");
addCommand("item", "");
addCommand("level", "");
addCommand("levelpro", "");
addCommand("setstat", "");
addCommand("maxstat", "");
addCommand("maxskill", "");
addCommand("resetskill", "");
addCommand("mesos", "");
addCommand("search", "");
addCommand("jail", "");
addCommand("unjail", "");
addCommand("job", "");
addCommand("unbug", "");
}
function writeHeavenMSCommandsLv1() { //Donator
comm_cursor = comm_lv1;
desc_cursor = desc_lv1;
addCommand("bosshp", "");
addCommand("mobhp", "");
addCommand("whatdropsfrom", "");
addCommand("whodrops", "");
addCommand("buffme", "");
addCommand("goto", "");
}
function writeHeavenMSCommandsLv0() { //Common
comm_cursor = comm_lv0;
desc_cursor = desc_lv0;
addCommand("commands", "");
addCommand("droplimit", "");
addCommand("time", "");
addCommand("credits", "");
addCommand("uptime", "");
addCommand("gacha", "");
addCommand("dispose", "");
addCommand("equiplv", "");
addCommand("showrates", "");
addCommand("rates", "");
addCommand("online", "");
addCommand("gm", "");
addCommand("reportbug", "");
//addCommand("points", "");
addCommand("joinevent", "");
addCommand("leaveevent", "");
addCommand("ranks", "");
addCommand("str", "");
addCommand("dex", "");
addCommand("int", "");
addCommand("luk", "");
}
var commands;
function writeHeavenMSCommands() {
writeHeavenMSCommandsLv0(); //Common
writeHeavenMSCommandsLv1(); //Donator
writeHeavenMSCommandsLv2(); //JrGM
writeHeavenMSCommandsLv3(); //GM
writeHeavenMSCommandsLv4(); //Developer
writeHeavenMSCommandsLv5(); //SuperGM
writeHeavenMSCommandsLv6(); //Admin
commands = CommandsExecutor.getInstance().getGmCommands();
}
function start() {
@@ -282,33 +48,19 @@ function action(mode, type, selection) {
cm.sendSimple(sendStr);
} else if(status == 1) {
var lvComm, lvDesc, lvHead = (cm.getPlayer().gmLevel() < 2) ? common_heading : staff_heading;
if(selection == 0) {
lvComm = comm_lv0;
lvDesc = desc_lv0;
} else if(selection == 1) {
lvComm = comm_lv1;
lvDesc = desc_lv1;
} else if(selection == 2) {
lvComm = comm_lv2;
lvDesc = desc_lv2;
} else if(selection == 3) {
lvComm = comm_lv3;
lvDesc = desc_lv3;
} else if(selection == 4) {
lvComm = comm_lv4;
lvDesc = desc_lv4;
} else if(selection == 5) {
lvComm = comm_lv5;
lvDesc = desc_lv5;
} else {
lvComm = comm_lv6;
lvDesc = desc_lv6;
if(selection > 6) {
selection = 6;
} else if(selection < 0) {
selection = 0;
}
lvComm = commands.get(selection).getLeft();
lvDesc = commands.get(selection).getRight();
var sendStr = "The following commands are available for #b" + levels[selection] + "#k:\r\n\r\n";
for(var i = 0; i < lvComm.length; i++) {
sendStr += " #L" + i + "# " + lvHead + lvComm[i] + " - " + lvDesc[i];
for(var i = 0; i < lvComm.size(); i++) {
sendStr += " #L" + i + "# " + lvHead + lvComm.get(i) + " - " + lvDesc.get(i);
sendStr += "#l\r\n";
}

View File

@@ -61,7 +61,7 @@ function writeServerStaff_MoopleDEV() {
}
function writeServerStaff_MetroMS() {
addPerson("Moongra", "Developer");
addPerson("Moogra", "Developer");
setHistory(2009, 2010);
}
@@ -73,6 +73,7 @@ function writeServerStaff_BubblesDEV() {
function writeServerStaff_ThePackII() {
addPerson("Hofer", "Developer");
addPerson("Moogra", "Developer");
setHistory(2008, 2009);
}