Merge pull request #16 from P0nk/inspection-cleanup

Clean up code using IntelliJ code inspection
This commit is contained in:
Ponk
2021-04-08 18:00:49 +02:00
committed by GitHub
201 changed files with 2254 additions and 3662 deletions
@@ -24,8 +24,8 @@ package client;
* @author Ronan * @author Ronan
*/ */
public interface AbstractCharacterListener { public interface AbstractCharacterListener {
public void onHpChanged(int oldHp); void onHpChanged(int oldHp);
public void onHpmpPoolUpdate(); void onHpmpPoolUpdate();
public void onStatUpdate(); void onStatUpdate();
public void onAnnounceStatPoolUpdate(); void onAnnounceStatPoolUpdate();
} }
@@ -21,10 +21,6 @@ package client;
import config.YamlConfig; import config.YamlConfig;
import constants.game.GameConstants; import constants.game.GameConstants;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.locks.Lock;
import net.server.audit.locks.MonitoredLockType; import net.server.audit.locks.MonitoredLockType;
import net.server.audit.locks.MonitoredReadLock; import net.server.audit.locks.MonitoredReadLock;
import net.server.audit.locks.MonitoredReentrantReadWriteLock; import net.server.audit.locks.MonitoredReentrantReadWriteLock;
@@ -35,6 +31,11 @@ import net.server.audit.locks.factory.MonitoredWriteLockFactory;
import server.maps.AbstractAnimatedMapleMapObject; import server.maps.AbstractAnimatedMapleMapObject;
import server.maps.MapleMap; import server.maps.MapleMap;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.locks.Lock;
/** /**
* *
* @author RonanLana * @author RonanLana
@@ -315,7 +316,7 @@ public abstract class AbstractMapleCharacterObject extends AbstractAnimatedMaple
short newHp = (short) (hpMpPool >> 48); short newHp = (short) (hpMpPool >> 48);
short newMp = (short) (hpMpPool >> 32); short newMp = (short) (hpMpPool >> 32);
short newMaxHp = (short) (hpMpPool >> 16); short newMaxHp = (short) (hpMpPool >> 16);
short newMaxMp = (short) (hpMpPool.shortValue()); short newMaxMp = hpMpPool.shortValue();
if (newMaxHp != Short.MIN_VALUE) { if (newMaxHp != Short.MIN_VALUE) {
if (newMaxHp < 50) { if (newMaxHp < 50) {
@@ -354,7 +355,7 @@ public abstract class AbstractMapleCharacterObject extends AbstractAnimatedMaple
short newStr = (short) (strDexIntLuk >> 48); short newStr = (short) (strDexIntLuk >> 48);
short newDex = (short) (strDexIntLuk >> 32); short newDex = (short) (strDexIntLuk >> 32);
short newInt = (short) (strDexIntLuk >> 16); short newInt = (short) (strDexIntLuk >> 16);
short newLuk = (short) (strDexIntLuk.shortValue()); short newLuk = strDexIntLuk.shortValue();
if (newStr >= 4) { if (newStr >= 4) {
setStr(newStr); setStr(newStr);
@@ -386,7 +387,7 @@ public abstract class AbstractMapleCharacterObject extends AbstractAnimatedMaple
if (newSp != null) { if (newSp != null) {
short sp = (short) (newSp >> 16); short sp = (short) (newSp >> 16);
short skillbook = (short) (newSp.shortValue()); short skillbook = newSp.shortValue();
setRemainingSp(sp, skillbook); setRemainingSp(sp, skillbook);
statUpdates.put(MapleStat.AVAILABLESP, remainingSp[skillbook]); statUpdates.put(MapleStat.AVAILABLESP, remainingSp[skillbook]);
+11 -15
View File
@@ -21,20 +21,16 @@
*/ */
package client; package client;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Collection;
import java.util.Collections;
import java.util.Deque;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.Map;
import net.server.PlayerStorage; import net.server.PlayerStorage;
import tools.DatabaseConnection; import tools.DatabaseConnection;
import tools.MaplePacketCreator; import tools.MaplePacketCreator;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;
public class BuddyList { public class BuddyList {
public enum BuddyOperation { public enum BuddyOperation {
ADDED, DELETED ADDED, DELETED
@@ -53,7 +49,7 @@ public class BuddyList {
public boolean contains(int characterId) { public boolean contains(int characterId) {
synchronized(buddies) { synchronized(buddies) {
return buddies.containsKey(Integer.valueOf(characterId)); return buddies.containsKey(characterId);
} }
} }
@@ -80,7 +76,7 @@ public class BuddyList {
public BuddylistEntry get(int characterId) { public BuddylistEntry get(int characterId) {
synchronized(buddies) { synchronized(buddies) {
return buddies.get(Integer.valueOf(characterId)); return buddies.get(characterId);
} }
} }
@@ -97,13 +93,13 @@ public class BuddyList {
public void put(BuddylistEntry entry) { public void put(BuddylistEntry entry) {
synchronized(buddies) { synchronized(buddies) {
buddies.put(Integer.valueOf(entry.getCharacterId()), entry); buddies.put(entry.getCharacterId(), entry);
} }
} }
public void remove(int characterId) { public void remove(int characterId) {
synchronized(buddies) { synchronized(buddies) {
buddies.remove(Integer.valueOf(characterId)); buddies.remove(characterId);
} }
} }
@@ -121,7 +117,7 @@ public class BuddyList {
public int[] getBuddyIds() { public int[] getBuddyIds() {
synchronized(buddies) { synchronized(buddies) {
int buddyIds[] = new int[buddies.size()]; int[] buddyIds = new int[buddies.size()];
int i = 0; int i = 0;
for (BuddylistEntry ble : buddies.values()) { for (BuddylistEntry ble : buddies.values()) {
buddyIds[i++] = ble.getCharacterId(); buddyIds[i++] = ble.getCharacterId();
+2 -7
View File
@@ -602,7 +602,7 @@ public class MapleClient {
long ipAddress = 0; long ipAddress = 0;
for (int i = 0; i < 4; i++) { for (int i = 0; i < 4; i++) {
int quad = Integer.parseInt(quads[i]); int quad = Integer.parseInt(quads[i]);
ipAddress += (long) (quad % 256) * (long) Math.pow(256, (double) (4 - i)); ipAddress += (long) (quad % 256) * (long) Math.pow(256, 4 - i);
} }
return ipAddress; return ipAddress;
} }
@@ -807,12 +807,7 @@ public class MapleClient {
public final void disconnect(final boolean shutdown, final boolean cashshop) { public final void disconnect(final boolean shutdown, final boolean cashshop) {
if (canDisconnect()) { if (canDisconnect()) {
ThreadManager.getInstance().newTask(new Runnable() { ThreadManager.getInstance().newTask(() -> disconnectInternal(shutdown, cashshop));
@Override
public void run() {
disconnectInternal(shutdown, cashshop);
}
});
} }
} }
+10 -10
View File
@@ -21,6 +21,13 @@
*/ */
package client; package client;
import net.server.Server;
import net.server.world.World;
import tools.DatabaseConnection;
import tools.FilePrinter;
import tools.MaplePacketCreator;
import tools.Pair;
import java.sql.Connection; import java.sql.Connection;
import java.sql.PreparedStatement; import java.sql.PreparedStatement;
import java.sql.ResultSet; import java.sql.ResultSet;
@@ -32,13 +39,6 @@ import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import net.server.Server;
import net.server.world.World;
import tools.DatabaseConnection;
import tools.FilePrinter;
import tools.MaplePacketCreator;
import tools.Pair;
/** /**
* *
* @author Jay Estrella - Mr.Trash :3 * @author Jay Estrella - Mr.Trash :3
@@ -49,7 +49,7 @@ public class MapleFamily {
private static final AtomicInteger familyIDCounter = new AtomicInteger(); private static final AtomicInteger familyIDCounter = new AtomicInteger();
private final int id, world; private final int id, world;
private final Map<Integer, MapleFamilyEntry> members = new ConcurrentHashMap<Integer, MapleFamilyEntry>(); private final Map<Integer, MapleFamilyEntry> members = new ConcurrentHashMap<>();
private MapleFamilyEntry leader; private MapleFamilyEntry leader;
private String name; private String name;
private String preceptsMessage = ""; private String preceptsMessage = "";
@@ -184,7 +184,7 @@ public class MapleFamily {
public static void loadAllFamilies() { public static void loadAllFamilies() {
try(Connection con = DatabaseConnection.getConnection()) { try(Connection con = DatabaseConnection.getConnection()) {
List<Pair<Pair<Integer, Integer>, MapleFamilyEntry>> unmatchedJuniors = new ArrayList<Pair<Pair<Integer, Integer>, MapleFamilyEntry>>(200); // <<world, seniorid> familyEntry> List<Pair<Pair<Integer, Integer>, MapleFamilyEntry>> unmatchedJuniors = new ArrayList<>(200); // <<world, seniorid> familyEntry>
try(PreparedStatement psEntries = con.prepareStatement("SELECT * FROM family_character")) { try(PreparedStatement psEntries = con.prepareStatement("SELECT * FROM family_character")) {
ResultSet rsEntries = psEntries.executeQuery(); ResultSet rsEntries = psEntries.executeQuery();
while(rsEntries.next()) { // can be optimized while(rsEntries.next()) { // can be optimized
@@ -236,7 +236,7 @@ public class MapleFamily {
if(senior != null) { if(senior != null) {
familyEntry.setSenior(family.getEntryByID(seniorid), false); familyEntry.setSenior(family.getEntryByID(seniorid), false);
} else { } else {
if(seniorid > 0) unmatchedJuniors.add(new Pair<Pair<Integer, Integer>, MapleFamilyEntry>(new Pair<Integer, Integer>(world, seniorid), familyEntry)); if(seniorid > 0) unmatchedJuniors.add(new Pair<>(new Pair<>(world, seniorid), familyEntry));
} }
familyEntry.setReputation(reputation); familyEntry.setReputation(reputation);
familyEntry.setTodaysRep(todaysRep); familyEntry.setTodaysRep(todaysRep);
+4 -7
View File
@@ -21,14 +21,11 @@
*/ */
package client; package client;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import server.quest.MapleQuest; import server.quest.MapleQuest;
import tools.StringUtil; import tools.StringUtil;
import java.util.*;
/** /**
* *
* @author Matze * @author Matze
@@ -61,8 +58,8 @@ public class MapleQuestStatus {
private short questID; private short questID;
private Status status; private Status status;
//private boolean updated; //maybe this can be of use for someone? //private boolean updated; //maybe this can be of use for someone?
private final Map<Integer, String> progress = new LinkedHashMap<Integer, String>(); private final Map<Integer, String> progress = new LinkedHashMap<>();
private final List<Integer> medalProgress = new LinkedList<Integer>(); private final List<Integer> medalProgress = new LinkedList<>();
private int npc; private int npc;
private long completionTime, expirationTime; private long completionTime, expirationTime;
private int forfeited = 0, completed = 0; private int forfeited = 0, completed = 0;
+7 -63
View File
@@ -21,78 +21,22 @@
*/ */
package client; package client;
import constants.skills.Aran; import constants.skills.*;
import constants.skills.Archer; import provider.*;
import constants.skills.Assassin; import server.MapleStatEffect;
import constants.skills.Bandit; import server.life.Element;
import constants.skills.Beginner;
import constants.skills.Bishop;
import constants.skills.BlazeWizard;
import constants.skills.Bowmaster;
import constants.skills.Buccaneer;
import constants.skills.ChiefBandit;
import constants.skills.Cleric;
import constants.skills.Corsair;
import constants.skills.Crossbowman;
import constants.skills.Crusader;
import constants.skills.DarkKnight;
import constants.skills.DawnWarrior;
import constants.skills.DragonKnight;
import constants.skills.Evan;
import constants.skills.FPArchMage;
import constants.skills.FPMage;
import constants.skills.FPWizard;
import constants.skills.Fighter;
import constants.skills.GM;
import constants.skills.Gunslinger;
import constants.skills.Hermit;
import constants.skills.Hero;
import constants.skills.Hunter;
import constants.skills.ILArchMage;
import constants.skills.ILMage;
import constants.skills.ILWizard;
import constants.skills.Legend;
import constants.skills.Magician;
import constants.skills.Marauder;
import constants.skills.Marksman;
import constants.skills.NightLord;
import constants.skills.NightWalker;
import constants.skills.Noblesse;
import constants.skills.Page;
import constants.skills.Paladin;
import constants.skills.Pirate;
import constants.skills.Priest;
import constants.skills.Ranger;
import constants.skills.Rogue;
import constants.skills.Shadower;
import constants.skills.Sniper;
import constants.skills.Spearman;
import constants.skills.SuperGM;
import constants.skills.Warrior;
import constants.skills.ThunderBreaker;
import constants.skills.WhiteKnight;
import constants.skills.WindArcher;
import java.io.File; import java.io.File;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import provider.MapleData;
import provider.MapleDataDirectoryEntry;
import provider.MapleDataFileEntry;
import provider.MapleDataProvider;
import provider.MapleDataProviderFactory;
import provider.MapleDataTool;
import server.MapleStatEffect;
import server.life.Element;
public class SkillFactory { public class SkillFactory {
private static Map<Integer, Skill> skills = new HashMap<>(); private static Map<Integer, Skill> skills = new HashMap<>();
private static MapleDataProvider datasource = MapleDataProviderFactory.getDataProvider(MapleDataProviderFactory.fileInWZPath("Skill.wz")); private static MapleDataProvider datasource = MapleDataProviderFactory.getDataProvider(MapleDataProviderFactory.fileInWZPath("Skill.wz"));
public static Skill getSkill(int id) { public static Skill getSkill(int id) {
if (!skills.isEmpty()) { if (!skills.isEmpty()) {
return skills.get(Integer.valueOf(id)); return skills.get(id);
} }
return null; return null;
} }
@@ -389,10 +333,10 @@ public class SkillFactory {
public static String getSkillName(int skillid) { public static String getSkillName(int skillid) {
MapleData data = MapleDataProviderFactory.getDataProvider(new File(System.getProperty("wzpath") + "/" + "String.wz")).getData("Skill.img"); MapleData data = MapleDataProviderFactory.getDataProvider(new File(System.getProperty("wzpath") + "/" + "String.wz")).getData("Skill.img");
StringBuilder skill = new StringBuilder(); StringBuilder skill = new StringBuilder();
skill.append(String.valueOf(skillid)); skill.append(skillid);
if (skill.length() == 4) { if (skill.length() == 4) {
skill.delete(0, 4); skill.delete(0, 4);
skill.append("000").append(String.valueOf(skillid)); skill.append("000").append(skillid);
} }
if (data.getChildByPath(skill.toString()) != null) { if (data.getChildByPath(skill.toString()) != null) {
for (MapleData skilldata : data.getChildByPath(skill.toString()).getChildren()) { for (MapleData skilldata : data.getChildByPath(skill.toString()).getChildren()) {
@@ -7,11 +7,12 @@ package client.autoban;
import client.MapleCharacter; import client.MapleCharacter;
import config.YamlConfig; import config.YamlConfig;
import java.util.HashMap;
import java.util.Map;
import net.server.Server; import net.server.Server;
import tools.FilePrinter; import tools.FilePrinter;
import java.util.HashMap;
import java.util.Map;
/** /**
* *
* @author kevintjuh93 * @author kevintjuh93
@@ -23,9 +24,9 @@ public class AutobanManager {
private int misses = 0; private int misses = 0;
private int lastmisses = 0; private int lastmisses = 0;
private int samemisscount = 0; private int samemisscount = 0;
private long spam[] = new long[20]; private long[] spam = new long[20];
private int timestamp[] = new int[20]; private int[] timestamp = new int[20];
private byte timestampcounter[] = new byte[20]; private byte[] timestampcounter = new byte[20];
public AutobanManager(MapleCharacter chr) { public AutobanManager(MapleCharacter chr) {
+1 -1
View File
@@ -48,7 +48,7 @@ public abstract class Command {
this.rank = rank; this.rank = rank;
} }
protected String joinStringFrom(String arr[], int start) { protected String joinStringFrom(String[] arr, int start) {
StringBuilder builder = new StringBuilder(); StringBuilder builder = new StringBuilder();
for (int i = start; i < arr.length; i++) { for (int i = start; i < arr.length; i++) {
builder.append(arr[i]); builder.append(arr[i]);
@@ -23,6 +23,7 @@
*/ */
package client.command; package client.command;
import client.MapleClient;
import client.command.commands.gm0.*; import client.command.commands.gm0.*;
import client.command.commands.gm1.*; import client.command.commands.gm1.*;
import client.command.commands.gm2.*; import client.command.commands.gm2.*;
@@ -30,18 +31,11 @@ import client.command.commands.gm3.*;
import client.command.commands.gm4.*; import client.command.commands.gm4.*;
import client.command.commands.gm5.*; import client.command.commands.gm5.*;
import client.command.commands.gm6.*; import client.command.commands.gm6.*;
import client.MapleClient;
import tools.FilePrinter; import tools.FilePrinter;
import tools.Pair; import tools.Pair;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.*;
import java.util.List;
import java.util.Arrays;
import java.util.Calendar;
import java.util.HashMap;
public class CommandsExecutor { public class CommandsExecutor {
@@ -181,7 +175,7 @@ public class CommandsExecutor {
} }
private void registerLv0Commands(){ private void registerLv0Commands(){
levelCommandsCursor = new Pair<>((List<String>) new ArrayList<String>(), (List<String>) new ArrayList<String>()); levelCommandsCursor = new Pair<>(new ArrayList<String>(), new ArrayList<String>());
addCommand(new String[]{"help", "commands"}, HelpCommand.class); addCommand(new String[]{"help", "commands"}, HelpCommand.class);
addCommand("droplimit", DropLimitCommand.class); addCommand("droplimit", DropLimitCommand.class);
@@ -217,7 +211,7 @@ public class CommandsExecutor {
private void registerLv1Commands() { private void registerLv1Commands() {
levelCommandsCursor = new Pair<>((List<String>) new ArrayList<String>(), (List<String>) new ArrayList<String>()); levelCommandsCursor = new Pair<>(new ArrayList<String>(), new ArrayList<String>());
addCommand("whatdropsfrom", 1, WhatDropsFromCommand.class); addCommand("whatdropsfrom", 1, WhatDropsFromCommand.class);
addCommand("whodrops", 1, WhoDropsCommand.class); addCommand("whodrops", 1, WhoDropsCommand.class);
@@ -229,7 +223,7 @@ public class CommandsExecutor {
private void registerLv2Commands(){ private void registerLv2Commands(){
levelCommandsCursor = new Pair<>((List<String>) new ArrayList<String>(), (List<String>) new ArrayList<String>()); levelCommandsCursor = new Pair<>(new ArrayList<String>(), new ArrayList<String>());
addCommand("recharge", 2, RechargeCommand.class); addCommand("recharge", 2, RechargeCommand.class);
addCommand("whereami", 2, WhereaMiCommand.class); addCommand("whereami", 2, WhereaMiCommand.class);
@@ -272,7 +266,7 @@ public class CommandsExecutor {
} }
private void registerLv3Commands() { private void registerLv3Commands() {
levelCommandsCursor = new Pair<>((List<String>) new ArrayList<String>(), (List<String>) new ArrayList<String>()); levelCommandsCursor = new Pair<>(new ArrayList<String>(), new ArrayList<String>());
addCommand("debuff", 3, DebuffCommand.class); addCommand("debuff", 3, DebuffCommand.class);
addCommand("fly", 3, FlyCommand.class); addCommand("fly", 3, FlyCommand.class);
@@ -338,7 +332,7 @@ public class CommandsExecutor {
} }
private void registerLv4Commands(){ private void registerLv4Commands(){
levelCommandsCursor = new Pair<>((List<String>) new ArrayList<String>(), (List<String>) new ArrayList<String>()); levelCommandsCursor = new Pair<>(new ArrayList<String>(), new ArrayList<String>());
addCommand("servermessage", 4, ServerMessageCommand.class); addCommand("servermessage", 4, ServerMessageCommand.class);
addCommand("proitem", 4, ProItemCommand.class); addCommand("proitem", 4, ProItemCommand.class);
@@ -369,7 +363,7 @@ public class CommandsExecutor {
} }
private void registerLv5Commands(){ private void registerLv5Commands(){
levelCommandsCursor = new Pair<>((List<String>) new ArrayList<String>(), (List<String>) new ArrayList<String>()); levelCommandsCursor = new Pair<>(new ArrayList<String>(), new ArrayList<String>());
addCommand("debug", 5, DebugCommand.class); addCommand("debug", 5, DebugCommand.class);
addCommand("set", 5, SetCommand.class); addCommand("set", 5, SetCommand.class);
@@ -382,7 +376,7 @@ public class CommandsExecutor {
} }
private void registerLv6Commands(){ private void registerLv6Commands(){
levelCommandsCursor = new Pair<>((List<String>) new ArrayList<String>(), (List<String>) new ArrayList<String>()); levelCommandsCursor = new Pair<>(new ArrayList<String>(), new ArrayList<String>());
addCommand("setgmlevel", 6, SetGmLevelCommand.class); addCommand("setgmlevel", 6, SetGmLevelCommand.class);
addCommand("warpworld", 6, WarpWorldCommand.class); addCommand("warpworld", 6, WarpWorldCommand.class);
@@ -29,7 +29,10 @@ import client.command.Command;
import constants.game.GameConstants; import constants.game.GameConstants;
import server.maps.*; import server.maps.*;
import java.util.*; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
public class GotoCommand extends Command { public class GotoCommand extends Command {
@@ -65,13 +68,7 @@ public class GotoCommand extends Command {
public static String GOTO_AREAS_INFO = ""; public static String GOTO_AREAS_INFO = "";
private static void sortGotoEntries(List<Entry<String, Integer>> listEntries) { private static void sortGotoEntries(List<Entry<String, Integer>> listEntries) {
Collections.sort(listEntries, new Comparator<Entry<String, Integer>>() { listEntries.sort((e1, e2) -> e1.getValue().compareTo(e2.getValue()));
@Override
public int compare(Entry<String, Integer> e1, Entry<String, Integer> e2)
{
return e1.getValue().compareTo(e2.getValue());
}
});
} }
@Override @Override
@@ -38,9 +38,7 @@ public class IdCommand extends Command {
} }
final String queryItem = joinStringArr(Arrays.copyOfRange(params, 1, params.length), " "); final String queryItem = joinStringArr(Arrays.copyOfRange(params, 1, params.length), " ");
player.yellowMessage("Querying for entry... May take some time... Please try to refine your search."); player.yellowMessage("Querying for entry... May take some time... Please try to refine your search.");
Runnable queryRunnable = new Runnable() { Runnable queryRunnable = () -> {
@Override
public void run() {
try { try {
populateIdMap(params[0].toLowerCase()); populateIdMap(params[0].toLowerCase());
@@ -66,7 +64,6 @@ public class IdCommand extends Command {
} catch (IOException e) { } catch (IOException e) {
player.yellowMessage("Error reading file, please contact your administrator."); player.yellowMessage("Error reading file, please contact your administrator.");
} }
}
}; };
ThreadManager.getInstance().newTask(queryRunnable); ThreadManager.getInstance().newTask(queryRunnable);
@@ -76,7 +73,7 @@ public class IdCommand extends Command {
if (!handbookDirectory.containsKey(type)) { if (!handbookDirectory.containsKey(type)) {
throw new IdTypeNotSupportedException(); throw new IdTypeNotSupportedException();
} }
itemMap.put(type, new HashMap<String, String>()); itemMap.put(type, new HashMap<>());
BufferedReader reader = new BufferedReader(new FileReader(handbookDirectory.get(type))); BufferedReader reader = new BufferedReader(new FileReader(handbookDirectory.get(type)));
String line; String line;
while ((line = reader.readLine()) != null) { while ((line = reader.readLine()) != null) {
@@ -44,7 +44,7 @@ public class JailCommand extends Command {
int minutesJailed = 5; int minutesJailed = 5;
if (params.length >= 2) { if (params.length >= 2) {
minutesJailed = Integer.valueOf(params[1]); minutesJailed = Integer.parseInt(params[1]);
if (minutesJailed <= 0) { if (minutesJailed <= 0) {
player.yellowMessage("Syntax: !jail <playername> [<minutes>]"); player.yellowMessage("Syntax: !jail <playername> [<minutes>]");
return; return;
@@ -75,12 +75,7 @@ public class BanCommand extends Command {
target.yellowMessage("Reason: " + reason); target.yellowMessage("Reason: " + reason);
c.announce(MaplePacketCreator.getGMEffect(4, (byte) 0)); c.announce(MaplePacketCreator.getGMEffect(4, (byte) 0));
final MapleCharacter rip = target; final MapleCharacter rip = target;
TimerManager.getInstance().schedule(new Runnable() { TimerManager.getInstance().schedule(() -> rip.getClient().disconnect(false, false), 5000); //5 Seconds
@Override
public void run() {
rip.getClient().disconnect(false, false);
}
}, 5000); //5 Seconds
Server.getInstance().broadcastMessage(c.getWorld(), MaplePacketCreator.serverNotice(6, "[RIP]: " + ign + " has been banned.")); Server.getInstance().broadcastMessage(c.getWorld(), MaplePacketCreator.serverNotice(6, "[RIP]: " + ign + " has been banned."));
} else if (MapleCharacter.ban(ign, reason, false)) { } else if (MapleCharacter.ban(ign, reason, false)) {
c.announce(MaplePacketCreator.getGMEffect(4, (byte) 0)); c.announce(MaplePacketCreator.getGMEffect(4, (byte) 0));
@@ -41,7 +41,7 @@ public class CheckDmgCommand extends Command {
int maxBase = victim.calculateMaxBaseDamage(victim.getTotalWatk()); int maxBase = victim.calculateMaxBaseDamage(victim.getTotalWatk());
Integer watkBuff = victim.getBuffedValue(MapleBuffStat.WATK); Integer watkBuff = victim.getBuffedValue(MapleBuffStat.WATK);
Integer matkBuff = victim.getBuffedValue(MapleBuffStat.MATK); Integer matkBuff = victim.getBuffedValue(MapleBuffStat.MATK);
Integer blessing = victim.getSkillLevel(10000000 * player.getJobType() + 12); int blessing = victim.getSkillLevel(10000000 * player.getJobType() + 12);
if (watkBuff == null) watkBuff = 0; if (watkBuff == null) watkBuff = 0;
if (matkBuff == null) matkBuff = 0; if (matkBuff == null) matkBuff = 0;
@@ -40,9 +40,9 @@ public class HpMpCommand extends Command {
if (params.length == 2) { if (params.length == 2) {
victim = c.getWorldServer().getPlayerStorage().getCharacterByName(params[0]); victim = c.getWorldServer().getPlayerStorage().getCharacterByName(params[0]);
statUpdate = Integer.valueOf(params[1]); statUpdate = Integer.parseInt(params[1]);
} else if (params.length == 1) { } else if (params.length == 1) {
statUpdate = Integer.valueOf(params[0]); statUpdate = Integer.parseInt(params[0]);
} else { } else {
player.yellowMessage("Syntax: !hpmp [<playername>] <value>"); player.yellowMessage("Syntax: !hpmp [<playername>] <value>");
} }
@@ -40,9 +40,9 @@ public class MaxHpMpCommand extends Command {
int statUpdate = 1; int statUpdate = 1;
if (params.length >= 2) { if (params.length >= 2) {
victim = c.getWorldServer().getPlayerStorage().getCharacterByName(params[0]); victim = c.getWorldServer().getPlayerStorage().getCharacterByName(params[0]);
statUpdate = Integer.valueOf(params[1]); statUpdate = Integer.parseInt(params[1]);
} else if (params.length == 1) { } else if (params.length == 1) {
statUpdate = Integer.valueOf(params[0]); statUpdate = Integer.parseInt(params[0]);
} else { } else {
player.yellowMessage("Syntax: !maxhpmp [<playername>] <value>"); player.yellowMessage("Syntax: !maxhpmp [<playername>] <value>");
} }
@@ -42,8 +42,8 @@ public class SeedCommand extends Command {
player.yellowMessage("This command can only be used in HPQ."); player.yellowMessage("This command can only be used in HPQ.");
return; return;
} }
Point pos[] = {new Point(7, -207), new Point(179, -447), new Point(-3, -687), new Point(-357, -687), new Point(-538, -447), new Point(-359, -207)}; Point[] pos = {new Point(7, -207), new Point(179, -447), new Point(-3, -687), new Point(-357, -687), new Point(-538, -447), new Point(-359, -207)};
int seed[] = {4001097, 4001096, 4001095, 4001100, 4001099, 4001098}; int[] seed = {4001097, 4001096, 4001095, 4001100, 4001099, 4001098};
for (int i = 0; i < pos.length; i++) { for (int i = 0; i < pos.length; i++) {
Item item = new Item(seed[i], (byte) 0, (short) 1); Item item = new Item(seed[i], (byte) 0, (short) 1);
player.getMap().spawnItemDrop(player, player, item, pos[i], false, true); player.getMap().spawnItemDrop(player, player, item, pos[i], false, true);
@@ -40,7 +40,7 @@ import java.util.Arrays;
import java.util.List; import java.util.List;
public class DebugCommand extends Command { public class DebugCommand extends Command {
private final static String debugTypes[] = {"monster", "packet", "portal", "spawnpoint", "pos", "map", "mobsp", "event", "areas", "reactors", "servercoupons", "playercoupons", "timer", "marriage", "buff", ""}; private final static String[] debugTypes = {"monster", "packet", "portal", "spawnpoint", "pos", "map", "mobsp", "event", "areas", "reactors", "servercoupons", "playercoupons", "timer", "marriage", "buff", ""};
{ {
setDescription("Show a debug message."); setDescription("Show a debug message.");
@@ -45,9 +45,7 @@ public class ServerAddChannelCommand extends Command {
final int worldid = Integer.parseInt(params[0]); final int worldid = Integer.parseInt(params[0]);
ThreadManager.getInstance().newTask(new Runnable() { ThreadManager.getInstance().newTask(() -> {
@Override
public void run() {
int chid = Server.getInstance().addChannel(worldid); int chid = Server.getInstance().addChannel(worldid);
if(player.isLoggedinWorld()) { if(player.isLoggedinWorld()) {
if(chid >= 0) { if(chid >= 0) {
@@ -64,7 +62,6 @@ public class ServerAddChannelCommand extends Command {
} }
} }
} }
}
}); });
} }
} }
@@ -38,9 +38,7 @@ public class ServerAddWorldCommand extends Command {
public void execute(MapleClient c, String[] params) { public void execute(MapleClient c, String[] params) {
final MapleCharacter player = c.getPlayer(); final MapleCharacter player = c.getPlayer();
ThreadManager.getInstance().newTask(new Runnable() { ThreadManager.getInstance().newTask(() -> {
@Override
public void run() {
int wid = Server.getInstance().addWorld(); int wid = Server.getInstance().addWorld();
if(player.isLoggedinWorld()) { if(player.isLoggedinWorld()) {
@@ -54,7 +52,6 @@ public class ServerAddWorldCommand extends Command {
} }
} }
} }
}
}); });
} }
} }
@@ -44,9 +44,7 @@ public class ServerRemoveChannelCommand extends Command {
} }
final int worldId = Integer.parseInt(params[0]); final int worldId = Integer.parseInt(params[0]);
ThreadManager.getInstance().newTask(new Runnable() { ThreadManager.getInstance().newTask(() -> {
@Override
public void run() {
if(Server.getInstance().removeChannel(worldId)) { if(Server.getInstance().removeChannel(worldId)) {
if(player.isLoggedinWorld()) { if(player.isLoggedinWorld()) {
player.dropMessage(5, "Successfully removed a channel on World " + worldId + ". Current channel count: " + Server.getInstance().getWorld(worldId).getChannelsSize() + "."); player.dropMessage(5, "Successfully removed a channel on World " + worldId + ". Current channel count: " + Server.getInstance().getWorld(worldId).getChannelsSize() + ".");
@@ -56,7 +54,6 @@ public class ServerRemoveChannelCommand extends Command {
player.dropMessage(5, "Failed to remove last Channel on world " + worldId + ". Check if either that world exists or there are people currently playing there."); player.dropMessage(5, "Failed to remove last Channel on world " + worldId + ". Check if either that world exists or there are people currently playing there.");
} }
} }
}
}); });
} }
} }
@@ -44,9 +44,7 @@ public class ServerRemoveWorldCommand extends Command {
return; return;
} }
ThreadManager.getInstance().newTask(new Runnable() { ThreadManager.getInstance().newTask(() -> {
@Override
public void run() {
if(Server.getInstance().removeWorld()) { if(Server.getInstance().removeWorld()) {
if(player.isLoggedinWorld()) { if(player.isLoggedinWorld()) {
player.dropMessage(5, "Successfully removed a world. Current world count: " + Server.getInstance().getWorldsSize() + "."); player.dropMessage(5, "Successfully removed a world. Current world count: " + Server.getInstance().getWorldsSize() + ".");
@@ -60,7 +58,6 @@ public class ServerRemoveWorldCommand extends Command {
} }
} }
} }
}
}); });
} }
} }
@@ -51,10 +51,10 @@ public class ShutdownCommand extends Command {
} }
if (time > 1) { if (time > 1) {
int seconds = (int) (time / 1000) % 60; int seconds = (time / 1000) % 60;
int minutes = (int) ((time / (1000 * 60)) % 60); int minutes = (time / (1000 * 60)) % 60;
int hours = (int) ((time / (1000 * 60 * 60)) % 24); int hours = (time / (1000 * 60 * 60)) % 24;
int days = (int) ((time / (1000 * 60 * 60 * 24))); int days = (time / (1000 * 60 * 60 * 24));
String strTime = ""; String strTime = "";
if (days > 0) strTime += days + " days, "; if (days > 0) strTime += days + " days, ";
+6 -5
View File
@@ -25,15 +25,16 @@ import client.MapleClient;
import config.YamlConfig; import config.YamlConfig;
import constants.game.ExpTable; import constants.game.ExpTable;
import constants.inventory.ItemConstants; import constants.inventory.ItemConstants;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import server.MapleItemInformationProvider; import server.MapleItemInformationProvider;
import tools.MaplePacketCreator; import tools.MaplePacketCreator;
import tools.Pair; import tools.Pair;
import tools.Randomizer; import tools.Randomizer;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
public class Equip extends Item { public class Equip extends Item {
public static enum ScrollResult { public static enum ScrollResult {
@@ -383,7 +384,7 @@ public class Equip extends Item {
public Pair<String, Pair<Boolean, Boolean>> gainStats(List<Pair<StatUpgrade, Integer>> stats) { public Pair<String, Pair<Boolean, Boolean>> gainStats(List<Pair<StatUpgrade, Integer>> stats) {
boolean gotSlot = false, gotVicious = false; boolean gotSlot = false, gotVicious = false;
String lvupStr = ""; String lvupStr = "";
Integer statUp, maxStat = YamlConfig.config.server.MAX_EQUIPMNT_STAT; int statUp, maxStat = YamlConfig.config.server.MAX_EQUIPMNT_STAT;
for (Pair<StatUpgrade, Integer> stat : stats) { for (Pair<StatUpgrade, Integer> stat : stats) {
switch (stat.getLeft()) { switch (stat.getLeft()) {
case incDEX: case incDEX:
@@ -49,7 +49,7 @@ public enum ItemFactory {
private final boolean account; private final boolean account;
private static final int lockCount = 400; private static final int lockCount = 400;
private static final Lock locks[] = new Lock[lockCount]; // thanks Masterrulax for pointing out a bottleneck issue here private static final Lock[] locks = new Lock[lockCount]; // thanks Masterrulax for pointing out a bottleneck issue here
static { static {
for (int i = 0; i < lockCount; i++) { for (int i = 0; i < lockCount; i++) {
@@ -104,7 +104,7 @@ public enum ItemFactory {
equip.setWatk((short) rs.getInt("watk")); equip.setWatk((short) rs.getInt("watk"));
equip.setWdef((short) rs.getInt("wdef")); equip.setWdef((short) rs.getInt("wdef"));
equip.setUpgradeSlots((byte) rs.getInt("upgradeslots")); equip.setUpgradeSlots((byte) rs.getInt("upgradeslots"));
equip.setLevel((byte) rs.getByte("level")); equip.setLevel(rs.getByte("level"));
equip.setItemExp(rs.getInt("itemexp")); equip.setItemExp(rs.getInt("itemexp"));
equip.setItemLevel(rs.getByte("itemlevel")); equip.setItemLevel(rs.getByte("itemlevel"));
equip.setExpiration(rs.getLong("expiration")); equip.setExpiration(rs.getLong("expiration"));
@@ -135,7 +135,7 @@ public enum ItemFactory {
try (ResultSet rs = ps.executeQuery()) { try (ResultSet rs = ps.executeQuery()) {
while (rs.next()) { while (rs.next()) {
Integer cid = rs.getInt("characterid"); Integer cid = rs.getInt("characterid");
items.add(new Pair<Item, Integer>(loadEquipFromResultSet(rs), cid)); items.add(new Pair<>(loadEquipFromResultSet(rs), cid));
} }
} }
} }
@@ -295,7 +295,7 @@ public enum ItemFactory {
MapleInventoryType mit = MapleInventoryType.getByType(rs.getByte("inventorytype")); MapleInventoryType mit = MapleInventoryType.getByType(rs.getByte("inventorytype"));
if (mit.equals(MapleInventoryType.EQUIP) || mit.equals(MapleInventoryType.EQUIPPED)) { if (mit.equals(MapleInventoryType.EQUIP) || mit.equals(MapleInventoryType.EQUIPPED)) {
items.add(new Pair<Item, MapleInventoryType>(loadEquipFromResultSet(rs), mit)); items.add(new Pair<>(loadEquipFromResultSet(rs), mit));
} else { } else {
if (bundles > 0) { if (bundles > 0) {
int petid = rs.getInt("petid"); int petid = rs.getInt("petid");
@@ -21,28 +21,20 @@
*/ */
package client.inventory; package client.inventory;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map.Entry;
import java.util.Map;
import java.util.concurrent.locks.Lock;
import net.server.audit.locks.factory.MonitoredReentrantLockFactory;
import tools.Pair;
import client.MapleCharacter; import client.MapleCharacter;
import client.MapleClient; import client.MapleClient;
import constants.inventory.ItemConstants;
import server.MapleItemInformationProvider;
import client.inventory.manipulator.MapleInventoryManipulator; import client.inventory.manipulator.MapleInventoryManipulator;
import tools.FilePrinter; import constants.inventory.ItemConstants;
import net.server.audit.locks.MonitoredLockType; import net.server.audit.locks.MonitoredLockType;
import net.server.audit.locks.factory.MonitoredReentrantLockFactory;
import server.MapleItemInformationProvider;
import server.ThreadManager; import server.ThreadManager;
import tools.FilePrinter;
import tools.Pair;
import java.util.*;
import java.util.Map.Entry;
import java.util.concurrent.locks.Lock;
/** /**
* *
@@ -196,12 +188,7 @@ public class MapleInventory implements Iterable<Item> {
} }
if (ret.size() > 1) { if (ret.size() > 1) {
Collections.sort(ret, new Comparator<Item>() { ret.sort((i1, i2) -> i1.getPosition() - i2.getPosition());
@Override
public int compare(Item i1, Item i2) {
return i1.getPosition() - i2.getPosition();
}
});
} }
return ret; return ret;
@@ -216,12 +203,7 @@ public class MapleInventory implements Iterable<Item> {
} }
if (ret.size() > 1) { if (ret.size() > 1) {
Collections.sort(ret, new Comparator<Item>() { ret.sort((i1, i2) -> i1.getPosition() - i2.getPosition());
@Override
public int compare(Item i1, Item i2) {
return i1.getPosition() - i2.getPosition();
}
});
} }
return ret; return ret;
@@ -250,8 +232,8 @@ public class MapleInventory implements Iterable<Item> {
public void move(short sSlot, short dSlot, short slotMax) { public void move(short sSlot, short dSlot, short slotMax) {
lock.lock(); lock.lock();
try { try {
Item source = (Item) inventory.get(sSlot); Item source = inventory.get(sSlot);
Item target = (Item) inventory.get(dSlot); Item target = inventory.get(dSlot);
if (source == null) { if (source == null) {
return; return;
} }
@@ -334,12 +316,8 @@ public class MapleInventory implements Iterable<Item> {
} }
if (ItemConstants.isRateCoupon(item.getItemId())) { if (ItemConstants.isRateCoupon(item.getItemId())) {
ThreadManager.getInstance().newTask(new Runnable() { // deadlocks with coupons rates found thanks to GabrielSin & Masterrulax // deadlocks with coupons rates found thanks to GabrielSin & Masterrulax
@Override ThreadManager.getInstance().newTask(() -> owner.updateCouponRates());
public void run() {
owner.updateCouponRates();
}
});
} }
return slotId; return slotId;
@@ -354,12 +332,7 @@ public class MapleInventory implements Iterable<Item> {
} }
if (ItemConstants.isRateCoupon(item.getItemId())) { if (ItemConstants.isRateCoupon(item.getItemId())) {
ThreadManager.getInstance().newTask(new Runnable() { ThreadManager.getInstance().newTask(() -> owner.updateCouponRates());
@Override
public void run() {
owner.updateCouponRates();
}
});
} }
} }
@@ -373,12 +346,7 @@ public class MapleInventory implements Iterable<Item> {
} }
if (item != null && ItemConstants.isRateCoupon(item.getItemId())) { if (item != null && ItemConstants.isRateCoupon(item.getItemId())) {
ThreadManager.getInstance().newTask(new Runnable() { ThreadManager.getInstance().newTask(() -> owner.updateCouponRates());
@Override
public void run() {
owner.updateCouponRates();
}
});
} }
} }
+1 -1
View File
@@ -306,7 +306,7 @@ public class MaplePet extends Item {
for (LifeMovementFragment move : movement) { for (LifeMovementFragment move : movement) {
if (move instanceof LifeMovement) { if (move instanceof LifeMovement) {
if (move instanceof AbsoluteLifeMovement) { if (move instanceof AbsoluteLifeMovement) {
this.setPos(((LifeMovement) move).getPosition()); this.setPos(move.getPosition());
} }
this.setStance(((LifeMovement) move).getNewstate()); this.setStance(((LifeMovement) move).getNewstate());
} }
@@ -21,25 +21,26 @@
*/ */
package client.inventory; package client.inventory;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import provider.MapleData; import provider.MapleData;
import provider.MapleDataProvider; import provider.MapleDataProvider;
import provider.MapleDataProviderFactory; import provider.MapleDataProviderFactory;
import provider.MapleDataTool; import provider.MapleDataTool;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
/** /**
* *
* @author Danny (Leifde) * @author Danny (Leifde)
*/ */
public class PetDataFactory { public class PetDataFactory {
private static MapleDataProvider dataRoot = MapleDataProviderFactory.getDataProvider(new File(System.getProperty("wzpath") + "/Item.wz")); private static MapleDataProvider dataRoot = MapleDataProviderFactory.getDataProvider(new File(System.getProperty("wzpath") + "/Item.wz"));
private static Map<String, PetCommand> petCommands = new HashMap<String, PetCommand>(); private static Map<String, PetCommand> petCommands = new HashMap<>();
private static Map<Integer, Integer> petHunger = new HashMap<Integer, Integer>(); private static Map<Integer, Integer> petHunger = new HashMap<>();
public static PetCommand getPetCommand(int petId, int skillId) { public static PetCommand getPetCommand(int petId, int skillId) {
PetCommand ret = petCommands.get(Integer.valueOf(petId) + "" + skillId); PetCommand ret = petCommands.get(petId + "" + skillId);
if (ret != null) { if (ret != null) {
return ret; return ret;
} }
@@ -61,14 +62,14 @@ public class PetDataFactory {
} }
public static int getHunger(int petId) { public static int getHunger(int petId) {
Integer ret = petHunger.get(Integer.valueOf(petId)); Integer ret = petHunger.get(petId);
if (ret != null) { if (ret != null) {
return ret; return ret;
} }
synchronized (petHunger) { synchronized (petHunger) {
ret = petHunger.get(Integer.valueOf(petId)); ret = petHunger.get(petId);
if (ret == null) { if (ret == null) {
ret = Integer.valueOf(MapleDataTool.getInt(dataRoot.getData("Pet/" + petId + ".img").getChildByPath("info/hungry"), 1)); ret = MapleDataTool.getInt(dataRoot.getData("Pet/" + petId + ".img").getChildByPath("info/hungry"), 1);
} }
return ret; return ret;
} }
@@ -24,26 +24,20 @@ package client.inventory.manipulator;
import client.MapleBuffStat; import client.MapleBuffStat;
import client.MapleCharacter; import client.MapleCharacter;
import client.MapleClient; import client.MapleClient;
import client.inventory.Equip; import client.inventory.*;
import client.inventory.Item;
import client.inventory.MapleInventory;
import client.inventory.MapleInventoryType;
import client.inventory.MaplePet;
import client.inventory.ModifyInventory;
import client.newyear.NewYearCardRecord; import client.newyear.NewYearCardRecord;
import config.YamlConfig; import config.YamlConfig;
import constants.inventory.ItemConstants; import constants.inventory.ItemConstants;
import server.MapleItemInformationProvider;
import server.maps.MapleMap;
import tools.FilePrinter;
import tools.MaplePacketCreator;
import java.awt.Point; import java.awt.*;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import server.MapleItemInformationProvider;
import server.maps.MapleMap;
import tools.FilePrinter;
import tools.MaplePacketCreator;
/** /**
* *
@@ -91,7 +85,7 @@ public class MapleInventoryManipulator {
Iterator<Item> i = existing.iterator(); Iterator<Item> i = existing.iterator();
while (quantity > 0) { while (quantity > 0) {
if (i.hasNext()) { if (i.hasNext()) {
Item eItem = (Item) i.next(); Item eItem = i.next();
short oldQ = eItem.getQuantity(); short oldQ = eItem.getQuantity();
if (oldQ < slotMax && ((eItem.getOwner().equals(owner) || owner == null) && eItem.getFlag() == flag)) { if (oldQ < slotMax && ((eItem.getOwner().equals(owner) || owner == null) && eItem.getFlag() == flag)) {
short newQ = (short) Math.min(oldQ + quantity, slotMax); short newQ = (short) Math.min(oldQ + quantity, slotMax);
@@ -202,7 +196,7 @@ public class MapleInventoryManipulator {
Iterator<Item> i = existing.iterator(); Iterator<Item> i = existing.iterator();
while (quantity > 0) { while (quantity > 0) {
if (i.hasNext()) { if (i.hasNext()) {
Item eItem = (Item) i.next(); Item eItem = i.next();
short oldQ = eItem.getQuantity(); short oldQ = eItem.getQuantity();
if (oldQ < slotMax && item.getFlag() == eItem.getFlag() && item.getOwner().equals(eItem.getOwner())) { if (oldQ < slotMax && item.getFlag() == eItem.getFlag() && item.getOwner().equals(eItem.getOwner())) {
short newQ = (short) Math.min(oldQ + quantity, slotMax); short newQ = (short) Math.min(oldQ + quantity, slotMax);
@@ -20,6 +20,10 @@
package client.newyear; package client.newyear;
import client.MapleCharacter; import client.MapleCharacter;
import net.server.Server;
import server.TimerManager;
import tools.DatabaseConnection;
import tools.MaplePacketCreator;
import java.sql.Connection; import java.sql.Connection;
import java.sql.PreparedStatement; import java.sql.PreparedStatement;
@@ -28,10 +32,6 @@ import java.sql.SQLException;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
import java.util.concurrent.ScheduledFuture; import java.util.concurrent.ScheduledFuture;
import net.server.Server;
import server.TimerManager;
import tools.DatabaseConnection;
import tools.MaplePacketCreator;
/** /**
* *
@@ -244,9 +244,7 @@ public class NewYearCardRecord {
public void startNewYearCardTask() { public void startNewYearCardTask() {
if(sendTask != null) return; if(sendTask != null) return;
sendTask = TimerManager.getInstance().register(new Runnable() { sendTask = TimerManager.getInstance().register(() -> {
@Override
public void run() {
Server server = Server.getInstance(); Server server = Server.getInstance();
int world = server.getCharacterWorld(receiverId); int world = server.getCharacterWorld(receiverId);
@@ -261,7 +259,6 @@ public class NewYearCardRecord {
if(target != null && target.isLoggedinWorld()) { if(target != null && target.isLoggedinWorld()) {
target.announce(MaplePacketCreator.onNewYearCardRes(target, NewYearCardRecord.this, 0xC, 0)); target.announce(MaplePacketCreator.onNewYearCardRes(target, NewYearCardRecord.this, 0xC, 0));
} }
}
}, 1000 * 60 * 60); //1 Hour }, 1000 * 60 * 60); //1 Hour
} }
@@ -127,7 +127,7 @@ public class DueyProcessor {
} }
private static void deletePackageFromInventoryDB(Connection con, int packageId) throws SQLException { private static void deletePackageFromInventoryDB(Connection con, int packageId) throws SQLException {
ItemFactory.DUEY.saveItems(new LinkedList<Pair<Item, MapleInventoryType>>(), packageId, con); ItemFactory.DUEY.saveItems(new LinkedList<>(), packageId, con);
} }
private static void removePackageFromDB(int packageId) { private static void removePackageFromDB(int packageId) {
@@ -23,31 +23,21 @@
*/ */
package client.processor.stat; package client.processor.stat;
import client.MapleCharacter; import client.*;
import client.MapleClient;
import client.MapleJob;
import client.MapleStat;
import client.Skill;
import client.SkillFactory;
import client.autoban.AutobanFactory; import client.autoban.AutobanFactory;
import client.inventory.Equip; import client.inventory.Equip;
import client.inventory.Item; import client.inventory.Item;
import client.inventory.MapleInventoryType; import client.inventory.MapleInventoryType;
import config.YamlConfig; import config.YamlConfig;
import constants.skills.BlazeWizard; import constants.skills.*;
import constants.skills.Brawler; import tools.MaplePacketCreator;
import constants.skills.DawnWarrior; import tools.Randomizer;
import constants.skills.Magician; import tools.data.input.SeekableLittleEndianAccessor;
import constants.skills.ThunderBreaker;
import constants.skills.Warrior;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import server.ThreadManager;
import tools.MaplePacketCreator;
import tools.Randomizer;
import tools.data.input.SeekableLittleEndianAccessor;
/** /**
* *
@@ -102,9 +92,9 @@ public class AssignAPProcessor {
statUpdate[2] = chr.getLuk(); statUpdate[2] = chr.getLuk();
statUpdate[3] = chr.getInt(); statUpdate[3] = chr.getInt();
Collections.sort(eqpStrList, Collections.reverseOrder()); eqpStrList.sort(Collections.reverseOrder());
Collections.sort(eqpDexList, Collections.reverseOrder()); eqpDexList.sort(Collections.reverseOrder());
Collections.sort(eqpLukList, Collections.reverseOrder()); eqpLukList.sort(Collections.reverseOrder());
//Autoassigner looks up the 1st/2nd placed equips for their stats to calculate the optimal upgrade. //Autoassigner looks up the 1st/2nd placed equips for their stats to calculate the optimal upgrade.
int eqpStr = getNthHighestStat(eqpStrList, (short) 0) + getNthHighestStat(eqpStrList, (short) 1); int eqpStr = getNthHighestStat(eqpStrList, (short) 0) + getNthHighestStat(eqpStrList, (short) 1);
@@ -374,7 +364,7 @@ public class AssignAPProcessor {
return(statList.size() <= rank ? 0 : statList.get(rank)); return(statList.size() <= rank ? 0 : statList.get(rank));
} }
private static int gainStatByType(MapleStat type, int[] statGain, int gain, int statUpdate[]) { private static int gainStatByType(MapleStat type, int[] statGain, int gain, int[] statUpdate) {
if(gain <= 0) return 0; if(gain <= 0) return 0;
int newVal = 0; int newVal = 0;
@@ -30,7 +30,6 @@ import client.SkillFactory;
import client.autoban.AutobanFactory; import client.autoban.AutobanFactory;
import constants.game.GameConstants; import constants.game.GameConstants;
import constants.skills.Aran; import constants.skills.Aran;
import server.ThreadManager;
import tools.FilePrinter; import tools.FilePrinter;
import tools.MaplePacketCreator; import tools.MaplePacketCreator;
@@ -87,12 +86,12 @@ public class AssignSPProcessor {
} }
if (skill.getId() == Aran.FULL_SWING) { if (skill.getId() == Aran.FULL_SWING) {
player.changeSkillLevel(skill, (byte) (curLevel + 1), player.getMasterLevel(skill), player.getSkillExpiration(skill)); player.changeSkillLevel(skill, (byte) (curLevel + 1), player.getMasterLevel(skill), player.getSkillExpiration(skill));
player.changeSkillLevel(SkillFactory.getSkill(Aran.HIDDEN_FULL_DOUBLE), (byte) player.getSkillLevel(skill), player.getMasterLevel(skill), player.getSkillExpiration(skill)); player.changeSkillLevel(SkillFactory.getSkill(Aran.HIDDEN_FULL_DOUBLE), player.getSkillLevel(skill), player.getMasterLevel(skill), player.getSkillExpiration(skill));
player.changeSkillLevel(SkillFactory.getSkill(Aran.HIDDEN_FULL_TRIPLE), (byte) player.getSkillLevel(skill), player.getMasterLevel(skill), player.getSkillExpiration(skill)); player.changeSkillLevel(SkillFactory.getSkill(Aran.HIDDEN_FULL_TRIPLE), player.getSkillLevel(skill), player.getMasterLevel(skill), player.getSkillExpiration(skill));
} else if (skill.getId() == Aran.OVER_SWING) { } else if (skill.getId() == Aran.OVER_SWING) {
player.changeSkillLevel(skill, (byte) (curLevel + 1), player.getMasterLevel(skill), player.getSkillExpiration(skill)); player.changeSkillLevel(skill, (byte) (curLevel + 1), player.getMasterLevel(skill), player.getSkillExpiration(skill));
player.changeSkillLevel(SkillFactory.getSkill(Aran.HIDDEN_OVER_DOUBLE), (byte) player.getSkillLevel(skill), player.getMasterLevel(skill), player.getSkillExpiration(skill)); player.changeSkillLevel(SkillFactory.getSkill(Aran.HIDDEN_OVER_DOUBLE), player.getSkillLevel(skill), player.getMasterLevel(skill), player.getSkillExpiration(skill));
player.changeSkillLevel(SkillFactory.getSkill(Aran.HIDDEN_OVER_TRIPLE), (byte) player.getSkillLevel(skill), player.getMasterLevel(skill), player.getSkillExpiration(skill)); player.changeSkillLevel(SkillFactory.getSkill(Aran.HIDDEN_OVER_TRIPLE), player.getSkillLevel(skill), player.getMasterLevel(skill), player.getSkillExpiration(skill));
} else { } else {
player.changeSkillLevel(skill, (byte) (curLevel + 1), player.getMasterLevel(skill), player.getSkillExpiration(skill)); player.changeSkillLevel(skill, (byte) (curLevel + 1), player.getMasterLevel(skill), player.getSkillExpiration(skill));
} }
+10 -18
View File
@@ -1,26 +1,18 @@
package constants.game; package constants.game;
import client.MapleDisease; import client.MapleDisease;
import java.util.ArrayList;
import java.util.List;
import java.util.HashMap;
import java.util.Map;
import client.MapleJob; import client.MapleJob;
import config.YamlConfig; import config.YamlConfig;
import constants.skills.Aran; import constants.skills.Aran;
import provider.*;
import server.maps.FieldLimit;
import server.maps.MapleMap;
import server.quest.MapleQuest;
import java.io.File; import java.io.File;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.text.NumberFormat; import java.text.NumberFormat;
import java.util.Locale; import java.util.*;
import provider.MapleData;
import provider.MapleDataDirectoryEntry;
import provider.MapleDataFileEntry;
import provider.MapleDataProvider;
import provider.MapleDataProviderFactory;
import provider.MapleDataTool;
import server.maps.MapleMap;
import server.maps.FieldLimit;
import server.quest.MapleQuest;
/* /*
* @author kevintjuh93 * @author kevintjuh93
@@ -518,8 +510,8 @@ public class GameConstants {
private static boolean isInBranchJobTree(int skillJobId, int jobId, int branchType) { private static boolean isInBranchJobTree(int skillJobId, int jobId, int branchType) {
int branch = (int)(Math.pow(10, branchType)); int branch = (int)(Math.pow(10, branchType));
int skillBranch = (int)(skillJobId / branch) * branch; int skillBranch = (skillJobId / branch) * branch;
int jobBranch = (int)(jobId / branch) * branch; int jobBranch = (jobId / branch) * branch;
return skillBranch == jobBranch; return skillBranch == jobBranch;
} }
@@ -527,8 +519,8 @@ public class GameConstants {
private static boolean hasDivergedBranchJobTree(int skillJobId, int jobId, int branchType) { private static boolean hasDivergedBranchJobTree(int skillJobId, int jobId, int branchType) {
int branch = (int)(Math.pow(10, branchType)); int branch = (int)(Math.pow(10, branchType));
int skillBranch = (int)(skillJobId / branch); int skillBranch = skillJobId / branch;
int jobBranch = (int)(jobId / branch); int jobBranch = jobId / branch;
return skillBranch != jobBranch && skillBranch % 10 != 0; return skillBranch != jobBranch && skillBranch % 10 != 0;
} }
@@ -9,7 +9,7 @@ public class ServerConstants {
public static final boolean JAVA_8 = getJavaVersion() >= 8; //Max amount of times a party leader is allowed to persist on the Party Search before entry expiration (thus needing to manually restart the Party Search to be able to search for members). public static final boolean JAVA_8 = getJavaVersion() >= 8; //Max amount of times a party leader is allowed to persist on the Party Search before entry expiration (thus needing to manually restart the Party Search to be able to search for members).
//Debug Variables //Debug Variables
public static int DEBUG_VALUES[] = new int[10]; // Field designed for packet testing purposes public static int[] DEBUG_VALUES = new int[10]; // Field designed for packet testing purposes
// https://github.com/openstreetmap/josm/blob/a3a6e8a6b657cf4c5b4c64ea14d6e87be6280d65/src/org/openstreetmap/josm/tools/Utils.java#L1566-L1585 // https://github.com/openstreetmap/josm/blob/a3a6e8a6b657cf4c5b4c64ea14d6e87be6280d65/src/org/openstreetmap/josm/tools/Utils.java#L1566-L1585
// Added by kolakcc (Familiar) // Added by kolakcc (Familiar)
@@ -25,19 +25,19 @@ public class LanguageConstants {
} }
public static String CPQBlue[] = new String[3]; public static String[] CPQBlue = new String[3];
public static String CPQError[] = new String[3]; public static String[] CPQError = new String[3];
public static String CPQEntry[] = new String[3]; public static String[] CPQEntry = new String[3];
public static String CPQFindError[] = new String[3]; public static String[] CPQFindError = new String[3];
public static String CPQRed[] = new String[3]; public static String[] CPQRed = new String[3];
public static String CPQPlayerExit[] = new String[3]; public static String[] CPQPlayerExit = new String[3];
public static String CPQEntryLobby[] = new String[3]; public static String[] CPQEntryLobby = new String[3];
public static String CPQPickRoom[] = new String[3]; public static String[] CPQPickRoom = new String[3];
public static String CPQExtendTime[] = new String[3]; public static String[] CPQExtendTime = new String[3];
public static String CPQLeaderNotFound[] = new String[3]; public static String[] CPQLeaderNotFound = new String[3];
public static String CPQChallengeRoomAnswer[] = new String[3]; public static String[] CPQChallengeRoomAnswer = new String[3];
public static String CPQChallengeRoomSent[] = new String[3]; public static String[] CPQChallengeRoomSent = new String[3];
public static String CPQChallengeRoomDenied[] = new String[3]; public static String[] CPQChallengeRoomDenied = new String[3];
static { static {
int lang; int lang;
+17 -37
View File
@@ -21,28 +21,19 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package net; package net;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Set;
import java.util.HashSet;
import java.util.Calendar;
import java.util.concurrent.atomic.AtomicLong;
import config.YamlConfig;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
import client.MapleClient; import client.MapleClient;
import config.YamlConfig;
import constants.net.ServerConstants; import constants.net.ServerConstants;
import java.net.InetSocketAddress;
import net.server.Server; import net.server.Server;
import net.server.audit.LockCollector;
import net.server.audit.locks.MonitoredLockType; import net.server.audit.locks.MonitoredLockType;
import net.server.audit.locks.MonitoredReentrantLock; import net.server.audit.locks.MonitoredReentrantLock;
import net.server.audit.locks.factory.MonitoredReentrantLockFactory; import net.server.audit.locks.factory.MonitoredReentrantLockFactory;
import net.server.coordinator.session.MapleSessionCoordinator; import net.server.coordinator.session.MapleSessionCoordinator;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
import server.TimerManager;
import tools.FilePrinter; import tools.FilePrinter;
import tools.MapleAESOFB; import tools.MapleAESOFB;
import tools.MapleLogger; import tools.MapleLogger;
@@ -50,15 +41,14 @@ import tools.MaplePacketCreator;
import tools.data.input.ByteArrayByteStream; import tools.data.input.ByteArrayByteStream;
import tools.data.input.GenericSeekableLittleEndianAccessor; import tools.data.input.GenericSeekableLittleEndianAccessor;
import tools.data.input.SeekableLittleEndianAccessor; import tools.data.input.SeekableLittleEndianAccessor;
import java.util.Arrays;
import java.util.concurrent.ScheduledFuture; import java.io.IOException;
import java.net.InetSocketAddress;
import java.util.HashMap; import java.text.SimpleDateFormat;
import java.util.Map; import java.util.*;
import java.util.Map.Entry; import java.util.Map.Entry;
import net.server.audit.LockCollector; import java.util.concurrent.ScheduledFuture;
import server.TimerManager; import java.util.concurrent.atomic.AtomicLong;
public class MapleServerHandler extends IoHandlerAdapter { public class MapleServerHandler extends IoHandlerAdapter {
private final static Set<Short> ignoredDebugRecvPackets = new HashSet<>(Arrays.asList((short) 167, (short) 197, (short) 89, (short) 91, (short) 41, (short) 188, (short) 107)); private final static Set<Short> ignoredDebugRecvPackets = new HashSet<>(Arrays.asList((short) 167, (short) 197, (short) 89, (short) 91, (short) 41, (short) 188, (short) 107));
@@ -138,12 +128,12 @@ public class MapleServerHandler extends IoHandlerAdapter {
FilePrinter.print(FilePrinter.SESSION, "IoSession with " + session.getRemoteAddress() + " opened on " + sdf.format(Calendar.getInstance().getTime()), false); FilePrinter.print(FilePrinter.SESSION, "IoSession with " + session.getRemoteAddress() + " opened on " + sdf.format(Calendar.getInstance().getTime()), false);
} }
byte ivRecv[] = {70, 114, 122, 82}; byte[] ivRecv = {70, 114, 122, 82};
byte ivSend[] = {82, 48, 120, 115}; byte[] ivSend = {82, 48, 120, 115};
ivRecv[3] = (byte) (Math.random() * 255); ivRecv[3] = (byte) (Math.random() * 255);
ivSend[3] = (byte) (Math.random() * 255); ivSend[3] = (byte) (Math.random() * 255);
MapleAESOFB sendCypher = new MapleAESOFB(ivSend, (short) (0xFFFF - ServerConstants.VERSION)); MapleAESOFB sendCypher = new MapleAESOFB(ivSend, (short) (0xFFFF - ServerConstants.VERSION));
MapleAESOFB recvCypher = new MapleAESOFB(ivRecv, (short) ServerConstants.VERSION); MapleAESOFB recvCypher = new MapleAESOFB(ivRecv, ServerConstants.VERSION);
MapleClient client = new MapleClient(sendCypher, recvCypher, session); MapleClient client = new MapleClient(sendCypher, recvCypher, session);
client.setWorld(world); client.setWorld(world);
client.setChannel(channel); client.setChannel(channel);
@@ -274,12 +264,7 @@ public class MapleServerHandler extends IoHandlerAdapter {
} }
private void idleManagerTask() { private void idleManagerTask() {
this.idleManager = TimerManager.getInstance().register(new Runnable() { this.idleManager = TimerManager.getInstance().register(() -> manageIdleSessions(), 10000);
@Override
public void run() {
manageIdleSessions();
}
}, 10000);
} }
private void cancelIdleManagerTask() { private void cancelIdleManagerTask() {
@@ -288,12 +273,7 @@ public class MapleServerHandler extends IoHandlerAdapter {
} }
private void disposeLocks() { private void disposeLocks() {
LockCollector.getInstance().registerDisposeAction(new Runnable() { LockCollector.getInstance().registerDisposeAction(() -> emptyLocks());
@Override
public void run() {
emptyLocks();
}
});
} }
private void emptyLocks() { private void emptyLocks() {
@@ -35,7 +35,7 @@ public class MapleCustomEncryption {
return (byte) ((tmp & 0xFF) | (tmp >>> 8)); return (byte) ((tmp & 0xFF) | (tmp >>> 8));
} }
public static byte[] encryptData(byte data[]) { public static byte[] encryptData(byte[] data) {
for (int j = 0; j < 6; j++) { for (int j = 0; j < 6; j++) {
byte remember = 0; byte remember = 0;
byte dataLength = (byte) (data.length & 0xFF); byte dataLength = (byte) (data.length & 0xFF);
@@ -69,7 +69,7 @@ public class MapleCustomEncryption {
return data; return data;
} }
public static byte[] decryptData(byte data[]) { public static byte[] decryptData(byte[] data) {
for (int j = 1; j <= 6; j++) { for (int j = 1; j <= 6; j++) {
byte remember = 0; byte remember = 0;
byte dataLength = (byte) (data.length & 0xFF); byte dataLength = (byte) (data.length & 0xFF);
@@ -21,19 +21,19 @@
*/ */
package net.mina; package net.mina;
import config.YamlConfig;
import client.MapleClient; import client.MapleClient;
import config.YamlConfig;
import constants.net.OpcodeConstants; import constants.net.OpcodeConstants;
import net.server.coordinator.session.MapleSessionCoordinator; import net.server.coordinator.session.MapleSessionCoordinator;
import org.apache.mina.core.buffer.IoBuffer; import org.apache.mina.core.buffer.IoBuffer;
import org.apache.mina.core.session.IoSession; import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.CumulativeProtocolDecoder; import org.apache.mina.filter.codec.CumulativeProtocolDecoder;
import org.apache.mina.filter.codec.ProtocolDecoderOutput; import org.apache.mina.filter.codec.ProtocolDecoderOutput;
import tools.FilePrinter;
import tools.HexTool; import tools.HexTool;
import tools.MapleAESOFB; import tools.MapleAESOFB;
import tools.data.input.ByteArrayByteStream; import tools.data.input.ByteArrayByteStream;
import tools.data.input.GenericLittleEndianAccessor; import tools.data.input.GenericLittleEndianAccessor;
import tools.FilePrinter;
public class MaplePacketDecoder extends CumulativeProtocolDecoder { public class MaplePacketDecoder extends CumulativeProtocolDecoder {
private static final String DECODER_STATE_KEY = MaplePacketDecoder.class.getName() + ".STATE"; private static final String DECODER_STATE_KEY = MaplePacketDecoder.class.getName() + ".STATE";
@@ -68,7 +68,7 @@ public class MaplePacketDecoder extends CumulativeProtocolDecoder {
return false; return false;
} }
if (in.remaining() >= decoderState.packetlength) { if (in.remaining() >= decoderState.packetlength) {
byte decryptedPacket[] = new byte[decoderState.packetlength]; byte[] decryptedPacket = new byte[decoderState.packetlength];
in.get(decryptedPacket, 0, decoderState.packetlength); in.get(decryptedPacket, 0, decoderState.packetlength);
decoderState.packetlength = -1; decoderState.packetlength = -1;
rcvdCrypto.crypt(decryptedPacket); rcvdCrypto.crypt(decryptedPacket);
+17 -35
View File
@@ -54,7 +54,6 @@ import net.server.task.*;
import net.server.world.World; import net.server.world.World;
import org.apache.mina.core.buffer.IoBuffer; import org.apache.mina.core.buffer.IoBuffer;
import org.apache.mina.core.buffer.SimpleBufferAllocator; import org.apache.mina.core.buffer.SimpleBufferAllocator;
import org.apache.mina.core.filterchain.IoFilter;
import org.apache.mina.core.service.IoAcceptor; import org.apache.mina.core.service.IoAcceptor;
import org.apache.mina.core.session.IdleStatus; import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.filter.codec.ProtocolCodecFilter; import org.apache.mina.filter.codec.ProtocolCodecFilter;
@@ -260,9 +259,7 @@ public class Server {
try { try {
List<Channel> channelz = new ArrayList<>(); List<Channel> channelz = new ArrayList<>();
for (World world : this.getWorlds()) { for (World world : this.getWorlds()) {
for (Channel ch : world.getChannels()) { channelz.addAll(world.getChannels());
channelz.add(ch);
}
} }
return channelz; return channelz;
} catch (NullPointerException npe) { } catch (NullPointerException npe) {
@@ -702,7 +699,7 @@ public class Server {
try { try {
if (!YamlConfig.config.server.USE_WHOLE_SERVER_RANKING) { if (!YamlConfig.config.server.USE_WHOLE_SERVER_RANKING) {
for (int i = playerRanking.size(); i <= worldid; i++) { for (int i = playerRanking.size(); i <= worldid; i++) {
playerRanking.add(new ArrayList<Pair<String, Integer>>(0)); playerRanking.add(new ArrayList<>(0));
} }
playerRanking.add(worldid, ranking.get(0).getRight()); playerRanking.add(worldid, ranking.get(0).getRight());
@@ -746,7 +743,7 @@ public class Server {
try { try {
if (!YamlConfig.config.server.USE_WHOLE_SERVER_RANKING) { if (!YamlConfig.config.server.USE_WHOLE_SERVER_RANKING) {
for (int i = playerRanking.size(); i <= rankUpdates.get(rankUpdates.size() - 1).getLeft(); i++) { for (int i = playerRanking.size(); i <= rankUpdates.get(rankUpdates.size() - 1).getLeft(); i++) {
playerRanking.add(new ArrayList<Pair<String, Integer>>(0)); playerRanking.add(new ArrayList<>(0));
} }
for (Pair<Integer, List<Pair<String, Integer>>> wranks : rankUpdates) { for (Pair<Integer, List<Pair<String, Integer>>> wranks : rankUpdates) {
@@ -763,7 +760,7 @@ public class Server {
private void initWorldPlayerRanking() { private void initWorldPlayerRanking() {
if (YamlConfig.config.server.USE_WHOLE_SERVER_RANKING) { if (YamlConfig.config.server.USE_WHOLE_SERVER_RANKING) {
playerRanking.add(new ArrayList<Pair<String, Integer>>(0)); playerRanking.add(new ArrayList<>(0));
} }
updateWorldPlayerRanking(); updateWorldPlayerRanking();
} }
@@ -876,7 +873,7 @@ public class Server {
} }
try { try {
Integer worldCount = Math.min(GameConstants.WORLD_NAMES.length, YamlConfig.config.server.WORLDS); int worldCount = Math.min(GameConstants.WORLD_NAMES.length, YamlConfig.config.server.WORLDS);
for (int i = 0; i < worldCount; i++) { for (int i = 0; i < worldCount; i++) {
initWorld(); initWorld();
@@ -901,7 +898,7 @@ public class Server {
IoBuffer.setUseDirectBuffer(false); // join IO operations performed by lxconan IoBuffer.setUseDirectBuffer(false); // join IO operations performed by lxconan
IoBuffer.setAllocator(new SimpleBufferAllocator()); IoBuffer.setAllocator(new SimpleBufferAllocator());
acceptor = new NioSocketAcceptor(); acceptor = new NioSocketAcceptor();
acceptor.getFilterChain().addLast("codec", (IoFilter) new ProtocolCodecFilter(new MapleCodecFactory())); acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new MapleCodecFactory()));
acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 30); acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 30);
acceptor.setHandler(new MapleServerHandler()); acceptor.setHandler(new MapleServerHandler());
try { try {
@@ -948,7 +945,7 @@ public class Server {
tMan.register(new BossLogTask(), 24 * 60 * 60 * 1000, timeLeft); tMan.register(new BossLogTask(), 24 * 60 * 60 * 1000, timeLeft);
} }
public static void main(String args[]) { public static void main(String[] args) {
System.setProperty("wzpath", "wz"); System.setProperty("wzpath", "wz");
Security.setProperty("crypto.policy", "unlimited"); Security.setProperty("crypto.policy", "unlimited");
AutoJCE.removeCryptographyRestrictions(); AutoJCE.removeCryptographyRestrictions();
@@ -1465,7 +1462,7 @@ public class Server {
if (wchars == null) { if (wchars == null) {
if (!accountChars.containsKey(accountId)) { if (!accountChars.containsKey(accountId)) {
accountCharacterCount.put(accountId, (short) 0); accountCharacterCount.put(accountId, (short) 0);
accountChars.put(accountId, new HashSet<Integer>()); // not advisable at all to write on the map on a read-protected environment accountChars.put(accountId, new HashSet<>()); // not advisable at all to write on the map on a read-protected environment
} // yet it's known there's no problem since no other point in the source does } // yet it's known there's no problem since no other point in the source does
} else if (!wchars.isEmpty()) { // this action. } else if (!wchars.isEmpty()) { // this action.
lastwchars = wchars; lastwchars = wchars;
@@ -1485,7 +1482,7 @@ public class Server {
short characterCount = 0; short characterCount = 0;
List<List<MapleCharacter>> wchars = new ArrayList<>(wlen); List<List<MapleCharacter>> wchars = new ArrayList<>(wlen);
for (int i = 0; i < wlen; i++) { for (int i = 0; i < wlen; i++) {
wchars.add(i, new LinkedList<MapleCharacter>()); wchars.add(i, new LinkedList<>());
} }
List<MapleCharacter> chars = new LinkedList<>(); List<MapleCharacter> chars = new LinkedList<>();
@@ -1567,7 +1564,7 @@ public class Server {
try (Connection con = DatabaseConnection.getConnection(); try (Connection con = DatabaseConnection.getConnection();
PreparedStatement ps = con.prepareStatement("SELECT * FROM namechanges WHERE completionTime IS NULL"); PreparedStatement ps = con.prepareStatement("SELECT * FROM namechanges WHERE completionTime IS NULL");
ResultSet rs = ps.executeQuery()) { ResultSet rs = ps.executeQuery()) {
List<Pair<String, String>> changedNames = new LinkedList<Pair<String, String>>(); //logging only List<Pair<String, String>> changedNames = new LinkedList<>(); //logging only
while (rs.next()) { while (rs.next()) {
con.setAutoCommit(false); con.setAutoCommit(false);
int nameChangeId = rs.getInt("id"); int nameChangeId = rs.getInt("id");
@@ -1578,7 +1575,7 @@ public class Server {
if (!success) { if (!success) {
con.rollback(); //discard changes con.rollback(); //discard changes
} else { } else {
changedNames.add(new Pair<String, String>(oldName, newName)); changedNames.add(new Pair<>(oldName, newName));
} }
con.setAutoCommit(true); con.setAutoCommit(true);
} }
@@ -1597,7 +1594,7 @@ public class Server {
PreparedStatement ps = con.prepareStatement("SELECT * FROM worldtransfers WHERE completionTime IS NULL", PreparedStatement ps = con.prepareStatement("SELECT * FROM worldtransfers WHERE completionTime IS NULL",
ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
ResultSet rs = ps.executeQuery()) { ResultSet rs = ps.executeQuery()) {
List<Integer> removedTransfers = new LinkedList<Integer>(); List<Integer> removedTransfers = new LinkedList<>();
while (rs.next()) { while (rs.next()) {
int nameChangeId = rs.getInt("id"); int nameChangeId = rs.getInt("id");
int characterId = rs.getInt("characterId"); int characterId = rs.getInt("characterId");
@@ -1617,7 +1614,7 @@ public class Server {
} }
} }
rs.beforeFirst(); rs.beforeFirst();
List<Pair<Integer, Pair<Integer, Integer>>> worldTransfers = new LinkedList<Pair<Integer, Pair<Integer, Integer>>>(); //logging only <charid, <oldWorld, newWorld>> List<Pair<Integer, Pair<Integer, Integer>>> worldTransfers = new LinkedList<>(); //logging only <charid, <oldWorld, newWorld>>
while (rs.next()) { while (rs.next()) {
con.setAutoCommit(false); con.setAutoCommit(false);
int nameChangeId = rs.getInt("id"); int nameChangeId = rs.getInt("id");
@@ -1631,7 +1628,7 @@ public class Server {
if (!success) { if (!success) {
con.rollback(); con.rollback();
} else { } else {
worldTransfers.add(new Pair<Integer, Pair<Integer, Integer>>(characterId, new Pair<Integer, Integer>(oldWorld, newWorld))); worldTransfers.add(new Pair<>(characterId, new Pair<>(oldWorld, newWorld)));
} }
con.setAutoCommit(true); con.setAutoCommit(true);
} }
@@ -1856,21 +1853,11 @@ public class Server {
} }
private void disconnectIdlesOnLoginTask() { private void disconnectIdlesOnLoginTask() {
TimerManager.getInstance().register(new Runnable() { TimerManager.getInstance().register(() -> disconnectIdlesOnLoginState(), 300000);
@Override
public void run() {
disconnectIdlesOnLoginState();
}
}, 300000);
} }
public final Runnable shutdown(final boolean restart) {//no player should be online when trying to shutdown! public final Runnable shutdown(final boolean restart) {//no player should be online when trying to shutdown!
return new Runnable() { return () -> shutdownInternal(restart);
@Override
public void run() {
shutdownInternal(restart);
}
};
} }
private synchronized void shutdownInternal(boolean restart) { private synchronized void shutdownInternal(boolean restart) {
@@ -1928,12 +1915,7 @@ public class Server {
acceptor.unbind(); acceptor.unbind();
acceptor = null; acceptor = null;
if (!restart) { // shutdown hook deadlocks if System.exit() method is used within its body chores, thanks MIKE for pointing that out if (!restart) { // shutdown hook deadlocks if System.exit() method is used within its body chores, thanks MIKE for pointing that out
new Thread(new Runnable() { new Thread(() -> System.exit(0)).start();
@Override
public void run() {
System.exit(0);
}
}).start();
} else { } else {
System.out.println("\r\nRestarting the server....\r\n"); System.out.println("\r\nRestarting the server....\r\n");
try { try {
@@ -19,26 +19,19 @@
*/ */
package net.server.audit; package net.server.audit;
import net.server.audit.locks.MonitoredLockType;
import server.TimerManager;
import tools.FilePrinter;
import java.text.DateFormat; import java.text.DateFormat;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.*;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.Set;
import java.util.TimeZone;
import java.util.concurrent.ScheduledFuture; import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock; import java.util.concurrent.locks.ReentrantLock;
import net.server.audit.locks.MonitoredLockType;
import server.TimerManager;
import tools.FilePrinter;
/** /**
* *
* @author RonanLana * @author RonanLana
@@ -127,8 +120,8 @@ public class ThreadTracker {
private static String printThreadStack(StackTraceElement[] list, String dateFormat) { private static String printThreadStack(StackTraceElement[] list, String dateFormat) {
String s = "----------------------------\r\n" + dateFormat + "\r\n"; String s = "----------------------------\r\n" + dateFormat + "\r\n";
for(int i = 0; i < list.length; i++) { for (StackTraceElement stackTraceElement : list) {
s += (" " + list[i].toString() + "\r\n"); s += (" " + stackTraceElement.toString() + "\r\n");
} }
return s; return s;
@@ -277,12 +270,7 @@ public class ThreadTracker {
} }
public void registerThreadTrackerTask() { public void registerThreadTrackerTask() {
threadTrackerSchedule = TimerManager.getInstance().register(new Runnable() { threadTrackerSchedule = TimerManager.getInstance().register(() -> accessThreadTracker(true, false, MonitoredLockType.UNDEFINED, -1), 10000, 10000);
@Override
public void run() {
accessThreadTracker(true, false, MonitoredLockType.UNDEFINED, -1);
}
}, 10000, 10000);
} }
public void cancelThreadTrackerTask() { public void cancelThreadTrackerTask() {
@@ -108,5 +108,5 @@ public enum MonitoredLockType {
MAP_AGGRO_IDLE, MAP_AGGRO_IDLE,
MINIDUNGEON, MINIDUNGEON,
REACTOR, REACTOR,
REACTOR_HIT; REACTOR_HIT
} }
@@ -25,12 +25,12 @@ package net.server.audit.locks;
*/ */
public interface MonitoredReadLock { public interface MonitoredReadLock {
public void lock(); void lock();
public void unlock(); void unlock();
public boolean tryLock(); boolean tryLock();
public MonitoredReadLock dispose(); MonitoredReadLock dispose();
} }
@@ -25,12 +25,12 @@ package net.server.audit.locks;
*/ */
public interface MonitoredReentrantLock { public interface MonitoredReentrantLock {
public void lock(); void lock();
public void unlock(); void unlock();
public boolean tryLock(); boolean tryLock();
public MonitoredReentrantLock dispose(); MonitoredReentrantLock dispose();
} }
@@ -25,12 +25,12 @@ package net.server.audit.locks;
*/ */
public interface MonitoredWriteLock { public interface MonitoredWriteLock {
public void lock(); void lock();
public void unlock(); void unlock();
public boolean tryLock(); boolean tryLock();
public MonitoredWriteLock dispose(); MonitoredWriteLock dispose();
} }
@@ -20,24 +20,21 @@
package net.server.audit.locks.active; package net.server.audit.locks.active;
import config.YamlConfig; import config.YamlConfig;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.locks.ReentrantReadWriteLock;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.concurrent.ScheduledFuture;
import server.TimerManager;
import net.server.audit.ThreadTracker; import net.server.audit.ThreadTracker;
import net.server.audit.locks.MonitoredLockType; import net.server.audit.locks.MonitoredLockType;
import net.server.audit.locks.MonitoredReadLock; import net.server.audit.locks.MonitoredReadLock;
import net.server.audit.locks.MonitoredReentrantReadWriteLock; import net.server.audit.locks.MonitoredReentrantReadWriteLock;
import net.server.audit.locks.empty.EmptyReadLock; import net.server.audit.locks.empty.EmptyReadLock;
import server.TimerManager;
import tools.FilePrinter; import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.TimeZone;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
/** /**
* *
@@ -109,12 +106,7 @@ public class TrackerReadLock extends ReentrantReadWriteLock.ReadLock implements
if(reentrantCount.incrementAndGet() == 1) { if(reentrantCount.incrementAndGet() == 1) {
final Thread t = Thread.currentThread(); final Thread t = Thread.currentThread();
timeoutSchedule = TimerManager.getInstance().schedule(new Runnable() { timeoutSchedule = TimerManager.getInstance().schedule(() -> issueDeadlock(t), YamlConfig.config.server.LOCK_MONITOR_TIME);
@Override
public void run() {
issueDeadlock(t);
}
}, YamlConfig.config.server.LOCK_MONITOR_TIME);
} }
} finally { } finally {
state.unlock(); state.unlock();
@@ -144,8 +136,8 @@ public class TrackerReadLock extends ReentrantReadWriteLock.ReadLock implements
private static String printStackTrace(StackTraceElement[] list) { private static String printStackTrace(StackTraceElement[] list) {
String s = ""; String s = "";
for(int i = 0; i < list.length; i++) { for (StackTraceElement stackTraceElement : list) {
s += (" " + list[i].toString() + "\r\n"); s += (" " + stackTraceElement.toString() + "\r\n");
} }
return s; return s;
@@ -19,22 +19,20 @@
*/ */
package net.server.audit.locks.active; package net.server.audit.locks.active;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.concurrent.ScheduledFuture;
import config.YamlConfig; import config.YamlConfig;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
import server.TimerManager;
import net.server.audit.ThreadTracker; import net.server.audit.ThreadTracker;
import net.server.audit.locks.MonitoredLockType; import net.server.audit.locks.MonitoredLockType;
import net.server.audit.locks.MonitoredReentrantLock; import net.server.audit.locks.MonitoredReentrantLock;
import net.server.audit.locks.empty.EmptyReentrantLock; import net.server.audit.locks.empty.EmptyReentrantLock;
import tools.FilePrinter; import server.TimerManager;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.TimeZone;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/** /**
* *
@@ -112,12 +110,7 @@ public class TrackerReentrantLock extends ReentrantLock implements MonitoredReen
if(reentrantCount.incrementAndGet() == 1) { if(reentrantCount.incrementAndGet() == 1) {
final Thread t = Thread.currentThread(); final Thread t = Thread.currentThread();
timeoutSchedule = TimerManager.getInstance().schedule(new Runnable() { timeoutSchedule = TimerManager.getInstance().schedule(() -> issueDeadlock(t), YamlConfig.config.server.LOCK_MONITOR_TIME);
@Override
public void run() {
issueDeadlock(t);
}
}, YamlConfig.config.server.LOCK_MONITOR_TIME);
} }
} finally { } finally {
state.unlock(); state.unlock();
@@ -147,8 +140,8 @@ public class TrackerReentrantLock extends ReentrantLock implements MonitoredReen
private static String printStackTrace(StackTraceElement[] list) { private static String printStackTrace(StackTraceElement[] list) {
String s = ""; String s = "";
for(int i = 0; i < list.length; i++) { for (StackTraceElement stackTraceElement : list) {
s += (" " + list[i].toString() + "\r\n"); s += (" " + stackTraceElement.toString() + "\r\n");
} }
return s; return s;
@@ -20,22 +20,21 @@
package net.server.audit.locks.active; package net.server.audit.locks.active;
import config.YamlConfig; import config.YamlConfig;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.locks.ReentrantReadWriteLock;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.concurrent.ScheduledFuture;
import server.TimerManager;
import net.server.audit.ThreadTracker; import net.server.audit.ThreadTracker;
import net.server.audit.locks.MonitoredLockType; import net.server.audit.locks.MonitoredLockType;
import net.server.audit.locks.MonitoredReentrantReadWriteLock; import net.server.audit.locks.MonitoredReentrantReadWriteLock;
import net.server.audit.locks.MonitoredWriteLock; import net.server.audit.locks.MonitoredWriteLock;
import net.server.audit.locks.empty.EmptyWriteLock; import net.server.audit.locks.empty.EmptyWriteLock;
import tools.FilePrinter; import server.TimerManager;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.TimeZone;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
/** /**
* *
@@ -107,12 +106,7 @@ public class TrackerWriteLock extends ReentrantReadWriteLock.WriteLock implement
if(reentrantCount.incrementAndGet() == 1) { if(reentrantCount.incrementAndGet() == 1) {
final Thread t = Thread.currentThread(); final Thread t = Thread.currentThread();
timeoutSchedule = TimerManager.getInstance().schedule(new Runnable() { timeoutSchedule = TimerManager.getInstance().schedule(() -> issueDeadlock(t), YamlConfig.config.server.LOCK_MONITOR_TIME);
@Override
public void run() {
issueDeadlock(t);
}
}, YamlConfig.config.server.LOCK_MONITOR_TIME);
} }
} finally { } finally {
state.unlock(); state.unlock();
@@ -142,8 +136,8 @@ public class TrackerWriteLock extends ReentrantReadWriteLock.WriteLock implement
private static String printStackTrace(StackTraceElement[] list) { private static String printStackTrace(StackTraceElement[] list) {
String s = ""; String s = "";
for(int i = 0; i < list.length; i++) { for (StackTraceElement stackTraceElement : list) {
s += (" " + list[i].toString() + "\r\n"); s += (" " + stackTraceElement.toString() + "\r\n");
} }
return s; return s;
@@ -13,8 +13,8 @@ public abstract class AbstractEmptyLock {
String df = dateFormat.format(new Date()); String df = dateFormat.format(new Date());
String s = "\r\n" + df + "\r\n"; String s = "\r\n" + df + "\r\n";
for(int i = 0; i < list.length; i++) { for (StackTraceElement stackTraceElement : list) {
s += (" " + list[i].toString() + "\r\n"); s += (" " + stackTraceElement.toString() + "\r\n");
} }
s += "----------------------------\r\n\r\n"; s += "----------------------------\r\n\r\n";
+9 -25
View File
@@ -41,7 +41,6 @@ import net.server.world.MaplePartyCharacter;
import net.server.world.World; import net.server.world.World;
import org.apache.mina.core.buffer.IoBuffer; import org.apache.mina.core.buffer.IoBuffer;
import org.apache.mina.core.buffer.SimpleBufferAllocator; import org.apache.mina.core.buffer.SimpleBufferAllocator;
import org.apache.mina.core.filterchain.IoFilter;
import org.apache.mina.core.service.IoAcceptor; import org.apache.mina.core.service.IoAcceptor;
import org.apache.mina.core.session.IdleStatus; import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.filter.codec.ProtocolCodecFilter; import org.apache.mina.filter.codec.ProtocolCodecFilter;
@@ -81,7 +80,7 @@ public final class Channel {
private Map<MapleExpeditionType, MapleExpedition> expeditions = new HashMap<>(); private Map<MapleExpeditionType, MapleExpedition> expeditions = new HashMap<>();
private Map<Integer, MapleMiniDungeon> dungeons = new HashMap<>(); private Map<Integer, MapleMiniDungeon> dungeons = new HashMap<>();
private List<MapleExpeditionType> expedType = new ArrayList<>(); private List<MapleExpeditionType> expedType = new ArrayList<>();
private Set<MapleMap> ownedMaps = Collections.synchronizedSet(Collections.newSetFromMap(new WeakHashMap<MapleMap, Boolean>())); private Set<MapleMap> ownedMaps = Collections.synchronizedSet(Collections.newSetFromMap(new WeakHashMap<>()));
private MapleEvent event; private MapleEvent event;
private boolean finishedShutdown = false; private boolean finishedShutdown = false;
private Set<Integer> usedMC = new HashSet<>(); private Set<Integer> usedMC = new HashSet<>();
@@ -109,7 +108,7 @@ public final class Channel {
private MonitoredReadLock merchRlock = MonitoredReadLockFactory.createLock(merchantLock); private MonitoredReadLock merchRlock = MonitoredReadLockFactory.createLock(merchantLock);
private MonitoredWriteLock merchWlock = MonitoredWriteLockFactory.createLock(merchantLock); private MonitoredWriteLock merchWlock = MonitoredWriteLockFactory.createLock(merchantLock);
private MonitoredReentrantLock faceLock[] = new MonitoredReentrantLock[YamlConfig.config.server.CHANNEL_LOCKS]; private MonitoredReentrantLock[] faceLock = new MonitoredReentrantLock[YamlConfig.config.server.CHANNEL_LOCKS];
private MonitoredReentrantLock lock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.CHANNEL, true); private MonitoredReentrantLock lock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.CHANNEL, true);
@@ -128,12 +127,10 @@ public final class Channel {
acceptor = new NioSocketAcceptor(); acceptor = new NioSocketAcceptor();
acceptor.setHandler(new MapleServerHandler(world, channel)); acceptor.setHandler(new MapleServerHandler(world, channel));
acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 30); acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 30);
acceptor.getFilterChain().addLast("codec", (IoFilter) new ProtocolCodecFilter(new MapleCodecFactory())); acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new MapleCodecFactory()));
acceptor.bind(new InetSocketAddress(port)); acceptor.bind(new InetSocketAddress(port));
((SocketSessionConfig) acceptor.getSessionConfig()).setTcpNoDelay(true); ((SocketSessionConfig) acceptor.getSessionConfig()).setTcpNoDelay(true);
for (MapleExpeditionType exped : MapleExpeditionType.values()) { expedType.addAll(Arrays.asList(MapleExpeditionType.values()));
expedType.add(exped);
}
if (Server.getInstance().isOnline()) { // postpone event loading to improve boot time... thanks Riizade, daronhudson for noticing slow startup times if (Server.getInstance().isOnline()) { // postpone event loading to improve boot time... thanks Riizade, daronhudson for noticing slow startup times
eventSM = new EventScriptManager(this, getEvents()); eventSM = new EventScriptManager(this, getEvents());
@@ -225,12 +222,7 @@ public final class Channel {
} }
private void disposeLocks() { private void disposeLocks() {
LockCollector.getInstance().registerDisposeAction(new Runnable() { LockCollector.getInstance().registerDisposeAction(() -> emptyLocks());
@Override
public void run() {
emptyLocks();
}
});
} }
private void emptyLocks() { private void emptyLocks() {
@@ -408,7 +400,7 @@ public final class Channel {
int[] retArr = new int[ret.size()]; int[] retArr = new int[ret.size()];
int pos = 0; int pos = 0;
for (Integer i : ret) { for (Integer i : ret) {
retArr[pos++] = i.intValue(); retArr[pos++] = i;
} }
return retArr; return retArr;
} }
@@ -461,7 +453,7 @@ public final class Channel {
} }
private static String [] getEvents(){ private static String [] getEvents(){
List<String> events = new ArrayList<String>(); List<String> events = new ArrayList<>();
for (File file : new File("scripts/event").listFiles()){ for (File file : new File("scripts/event").listFiles()){
events.add(file.getName().substring(0, file.getName().length() - 3)); events.add(file.getName().substring(0, file.getName().length() - 3));
} }
@@ -606,9 +598,7 @@ public final class Channel {
if (this.dojoTask[slot] != null) { if (this.dojoTask[slot] != null) {
this.dojoTask[slot].cancel(false); this.dojoTask[slot].cancel(false);
} }
this.dojoTask[slot] = TimerManager.getInstance().schedule(new Runnable() { this.dojoTask[slot] = TimerManager.getInstance().schedule(() -> {
@Override
public void run() {
final int delta = (dojoMapId) % 100; final int delta = (dojoMapId) % 100;
final int dojoBaseMap = (slot < 5) ? 925030000 : 925020000; final int dojoBaseMap = (slot < 5) ? 925030000 : 925020000;
MapleParty party = null; MapleParty party = null;
@@ -628,7 +618,6 @@ public final class Channel {
} }
freeDojoSlot(slot, party); freeDojoSlot(slot, party);
}
}, clockTime + 3000); // let the TIMES UP display for 3 seconds, then warp }, clockTime + 3000); // let the TIMES UP display for 3 seconds, then warp
} finally { } finally {
lock.unlock(); lock.unlock();
@@ -857,12 +846,7 @@ public final class Channel {
ongoingStartTime = System.currentTimeMillis(); ongoingStartTime = System.currentTimeMillis();
if(weddingId != null) { if(weddingId != null) {
ScheduledFuture<?> weddingTask = TimerManager.getInstance().schedule(new Runnable() { ScheduledFuture<?> weddingTask = TimerManager.getInstance().schedule(() -> closeOngoingWedding(cathedral), YamlConfig.config.server.WEDDING_RESERVATION_TIMEOUT * 60 * 1000);
@Override
public void run() {
closeOngoingWedding(cathedral);
}
}, YamlConfig.config.server.WEDDING_RESERVATION_TIMEOUT * 60 * 1000);
if(cathedral) { if(cathedral) {
cathedralReservationTask = weddingTask; cathedralReservationTask = weddingTask;
@@ -21,25 +21,19 @@
*/ */
package net.server.channel.handlers; package net.server.channel.handlers;
import java.awt.Point; import client.*;
import java.util.ArrayList; import client.autoban.AutobanFactory;
import java.util.Collections; import client.status.MonsterStatus;
import java.util.HashMap; import client.status.MonsterStatusEffect;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import config.YamlConfig; import config.YamlConfig;
import constants.game.GameConstants;
import constants.skills.*;
import net.AbstractMaplePacketHandler; import net.AbstractMaplePacketHandler;
import net.server.PlayerBuffValueHolder;
import scripting.AbstractPlayerInteraction;
import server.MapleStatEffect; import server.MapleStatEffect;
import server.TimerManager; import server.TimerManager;
import server.life.Element; import server.life.*;
import server.life.ElementalEffectiveness;
import server.life.MapleMonster;
import server.life.MapleMonsterInformationProvider;
import server.life.MobSkill;
import server.life.MobSkillFactory;
import server.life.MonsterDropEntry;
import server.maps.MapleMap; import server.maps.MapleMap;
import server.maps.MapleMapItem; import server.maps.MapleMapItem;
import server.maps.MapleMapObject; import server.maps.MapleMapObject;
@@ -48,62 +42,10 @@ import tools.MaplePacketCreator;
import tools.Pair; import tools.Pair;
import tools.Randomizer; import tools.Randomizer;
import tools.data.input.LittleEndianAccessor; import tools.data.input.LittleEndianAccessor;
import client.MapleBuffStat;
import client.MapleCharacter; import java.awt.*;
import client.MapleJob; import java.util.List;
import client.Skill; import java.util.*;
import client.SkillFactory;
import client.autoban.AutobanFactory;
import client.status.MonsterStatus;
import client.status.MonsterStatusEffect;
import constants.game.GameConstants;
import constants.skills.Aran;
import constants.skills.Assassin;
import constants.skills.Bandit;
import constants.skills.Beginner;
import constants.skills.Bishop;
import constants.skills.BlazeWizard;
import constants.skills.Bowmaster;
import constants.skills.Brawler;
import constants.skills.Buccaneer;
import constants.skills.ChiefBandit;
import constants.skills.Cleric;
import constants.skills.Corsair;
import constants.skills.Crossbowman;
import constants.skills.Crusader;
import constants.skills.DawnWarrior;
import constants.skills.DragonKnight;
import constants.skills.Evan;
import constants.skills.FPArchMage;
import constants.skills.FPMage;
import constants.skills.FPWizard;
import constants.skills.Fighter;
import constants.skills.Gunslinger;
import constants.skills.Hermit;
import constants.skills.Hero;
import constants.skills.Hunter;
import constants.skills.ILArchMage;
import constants.skills.ILMage;
import constants.skills.Legend;
import constants.skills.Marauder;
import constants.skills.Marksman;
import constants.skills.NightLord;
import constants.skills.NightWalker;
import constants.skills.Noblesse;
import constants.skills.Outlaw;
import constants.skills.Page;
import constants.skills.Paladin;
import constants.skills.Ranger;
import constants.skills.Rogue;
import constants.skills.Shadower;
import constants.skills.Sniper;
import constants.skills.Spearman;
import constants.skills.SuperGM;
import constants.skills.ThunderBreaker;
import constants.skills.WhiteKnight;
import constants.skills.WindArcher;
import net.server.PlayerBuffValueHolder;
import scripting.AbstractPlayerInteraction;
public abstract class AbstractDealDamageHandler extends AbstractMaplePacketHandler { public abstract class AbstractDealDamageHandler extends AbstractMaplePacketHandler {
@@ -208,7 +150,7 @@ public abstract class AbstractDealDamageHandler extends AbstractMaplePacketHandl
if (attack.skill == ChiefBandit.MESO_EXPLOSION) { if (attack.skill == ChiefBandit.MESO_EXPLOSION) {
int delay = 0; int delay = 0;
for (Integer oned : attack.allDamage.keySet()) { for (Integer oned : attack.allDamage.keySet()) {
MapleMapObject mapobject = map.getMapObject(oned.intValue()); MapleMapObject mapobject = map.getMapObject(oned);
if (mapobject != null && mapobject.getType() == MapleMapObjectType.ITEM) { if (mapobject != null && mapobject.getType() == MapleMapObjectType.ITEM) {
final MapleMapItem mapitem = (MapleMapItem) mapobject; final MapleMapItem mapitem = (MapleMapItem) mapobject;
if (mapitem.getMeso() == 0) { //Maybe it is possible some how? if (mapitem.getMeso() == 0) { //Maybe it is possible some how?
@@ -220,9 +162,7 @@ public abstract class AbstractDealDamageHandler extends AbstractMaplePacketHandl
if (mapitem.isPickedUp()) { if (mapitem.isPickedUp()) {
return; return;
} }
TimerManager.getInstance().schedule(new Runnable() { TimerManager.getInstance().schedule(() -> {
@Override
public void run() {
mapitem.lockItem(); mapitem.lockItem();
try { try {
if (mapitem.isPickedUp()) { if (mapitem.isPickedUp()) {
@@ -232,7 +172,6 @@ public abstract class AbstractDealDamageHandler extends AbstractMaplePacketHandl
} finally { } finally {
mapitem.unlockItem(); mapitem.unlockItem();
} }
}
}, delay); }, delay);
delay += 100; delay += 100;
} finally { } finally {
@@ -244,7 +183,7 @@ public abstract class AbstractDealDamageHandler extends AbstractMaplePacketHandl
} }
} }
for (Integer oned : attack.allDamage.keySet()) { for (Integer oned : attack.allDamage.keySet()) {
final MapleMonster monster = map.getMonsterByOid(oned.intValue()); final MapleMonster monster = map.getMonsterByOid(oned);
if (monster != null) { if (monster != null) {
double distance = player.getPosition().distanceSq(monster.getPosition()); double distance = player.getPosition().distanceSq(monster.getPosition());
double distanceToDetect = 200000.0; double distanceToDetect = 200000.0;
@@ -314,23 +253,18 @@ public abstract class AbstractDealDamageHandler extends AbstractMaplePacketHandl
int picklv = (player.isGM()) ? pickpocket.getMaxLevel() : player.getSkillLevel(pickpocket); int picklv = (player.isGM()) ? pickpocket.getMaxLevel() : player.getSkillLevel(pickpocket);
if(picklv > 0) { if(picklv > 0) {
int delay = 0; int delay = 0;
final int maxmeso = player.getBuffedValue(MapleBuffStat.PICKPOCKET).intValue(); final int maxmeso = player.getBuffedValue(MapleBuffStat.PICKPOCKET);
for (Integer eachd : onedList) { for (Integer eachd : onedList) {
eachd += Integer.MAX_VALUE; eachd += Integer.MAX_VALUE;
if (pickpocket.getEffect(picklv).makeChanceResult()) { if (pickpocket.getEffect(picklv).makeChanceResult()) {
final Integer eachdf; final int eachdf;
if(eachd < 0) if(eachd < 0)
eachdf = eachd + Integer.MAX_VALUE; eachdf = eachd + Integer.MAX_VALUE;
else else
eachdf = eachd; eachdf = eachd;
TimerManager.getInstance().schedule(new Runnable() { TimerManager.getInstance().schedule(() -> map.spawnMesoDrop(Math.min((int) Math.max(((double) eachdf / (double) 20000) * (double) maxmeso, 1), maxmeso), new Point((int) (monster.getPosition().getX() + Randomizer.nextInt(100) - 50), (int) (monster.getPosition().getY())), monster, player, true, (byte) 2), delay);
@Override
public void run() {
map.spawnMesoDrop(Math.min((int) Math.max(((double) eachdf / (double) 20000) * (double) maxmeso, (double) 1), maxmeso), new Point((int) (monster.getPosition().getX() + Randomizer.nextInt(100) - 50), (int) (monster.getPosition().getY())), monster, player, true, (byte) 2);
}
}, delay);
delay += 100; delay += 100;
} }
} }
@@ -346,7 +280,7 @@ public abstract class AbstractDealDamageHandler extends AbstractMaplePacketHandl
MapleMonsterInformationProvider mi = MapleMonsterInformationProvider.getInstance(); MapleMonsterInformationProvider mi = MapleMonsterInformationProvider.getInstance();
List<Integer> dropPool = mi.retrieveDropPool(monster.getId()); List<Integer> dropPool = mi.retrieveDropPool(monster.getId());
if(!dropPool.isEmpty()) { if(!dropPool.isEmpty()) {
Integer rndPool = (int) Math.floor(Math.random() * dropPool.get(dropPool.size() - 1)); int rndPool = (int) Math.floor(Math.random() * dropPool.get(dropPool.size() - 1));
int i = 0; int i = 0;
while(rndPool >= dropPool.get(i)) i++; while(rndPool >= dropPool.get(i)) i++;
@@ -477,7 +411,7 @@ public abstract class AbstractDealDamageHandler extends AbstractMaplePacketHandl
if (attack.skill != 0) { if (attack.skill != 0) {
if (attackEffect.getFixDamage() != -1) { if (attackEffect.getFixDamage() != -1) {
if (totDamageToOneMonster != attackEffect.getFixDamage() && totDamageToOneMonster != 0) { if (totDamageToOneMonster != attackEffect.getFixDamage() && totDamageToOneMonster != 0) {
AutobanFactory.FIX_DAMAGE.autoban(player, String.valueOf(totDamageToOneMonster) + " damage"); AutobanFactory.FIX_DAMAGE.autoban(player, totDamageToOneMonster + " damage");
} }
int threeSnailsId = player.getJobType() * 10000000 + 1000; int threeSnailsId = player.getJobType() * 10000000 + 1000;
@@ -580,12 +514,9 @@ public abstract class AbstractDealDamageHandler extends AbstractMaplePacketHandl
else animationTime = fixedTime; else animationTime = fixedTime;
if(animationTime > 0) { // be sure to only use LIMITED ATTACKS with animation time here if(animationTime > 0) { // be sure to only use LIMITED ATTACKS with animation time here
TimerManager.getInstance().schedule(new Runnable() { TimerManager.getInstance().schedule(() -> {
@Override
public void run() {
map.broadcastMessage(MaplePacketCreator.damageMonster(monster.getObjectId(), damage), monster.getPosition()); map.broadcastMessage(MaplePacketCreator.damageMonster(monster.getObjectId(), damage), monster.getPosition());
map.damageMonster(attacker, monster, damage); map.damageMonster(attacker, monster, damage);
}
}, animationTime); }, animationTime);
} else { } else {
map.broadcastMessage(MaplePacketCreator.damageMonster(monster.getObjectId(), damage), monster.getPosition()); map.broadcastMessage(MaplePacketCreator.damageMonster(monster.getObjectId(), damage), monster.getPosition());
@@ -627,7 +558,7 @@ public abstract class AbstractDealDamageHandler extends AbstractMaplePacketHandl
for (int j = 0; j < bullets; j++) { for (int j = 0; j < bullets; j++) {
int mesoid = lea.readInt(); int mesoid = lea.readInt();
lea.skip(1); lea.skip(1);
ret.allDamage.put(Integer.valueOf(mesoid), null); ret.allDamage.put(mesoid, null);
} }
return ret; return ret;
} else { } else {
@@ -641,16 +572,16 @@ public abstract class AbstractDealDamageHandler extends AbstractMaplePacketHandl
List<Integer> allDamageNumbers = new ArrayList<>(); List<Integer> allDamageNumbers = new ArrayList<>();
for (int j = 0; j < bullets; j++) { for (int j = 0; j < bullets; j++) {
int damage = lea.readInt(); int damage = lea.readInt();
allDamageNumbers.add(Integer.valueOf(damage)); allDamageNumbers.add(damage);
} }
ret.allDamage.put(Integer.valueOf(oid), allDamageNumbers); ret.allDamage.put(oid, allDamageNumbers);
lea.skip(4); lea.skip(4);
} else { } else {
int bullets = lea.readByte(); int bullets = lea.readByte();
for (int j = 0; j < bullets; j++) { for (int j = 0; j < bullets; j++) {
int mesoid = lea.readInt(); int mesoid = lea.readInt();
lea.skip(1); lea.skip(1);
ret.allDamage.put(Integer.valueOf(mesoid), null); ret.allDamage.put(mesoid, null);
} }
} }
} }
@@ -928,7 +859,7 @@ public abstract class AbstractDealDamageHandler extends AbstractMaplePacketHandl
if (ret.skill != Corsair.RAPID_FIRE || ret.skill != Aran.HIDDEN_FULL_DOUBLE || ret.skill != Aran.HIDDEN_FULL_TRIPLE || ret.skill != Aran.HIDDEN_OVER_DOUBLE || ret.skill != Aran.HIDDEN_OVER_TRIPLE) { if (ret.skill != Corsair.RAPID_FIRE || ret.skill != Aran.HIDDEN_FULL_DOUBLE || ret.skill != Aran.HIDDEN_FULL_TRIPLE || ret.skill != Aran.HIDDEN_OVER_DOUBLE || ret.skill != Aran.HIDDEN_OVER_TRIPLE) {
lea.skip(4); lea.skip(4);
} }
ret.allDamage.put(Integer.valueOf(oid), allDamageNumbers); ret.allDamage.put(oid, allDamageNumbers);
} }
if (ret.skill == NightWalker.POISON_BOMB) { // Poison Bomb if (ret.skill == NightWalker.POISON_BOMB) { // Poison Bomb
lea.skip(4); lea.skip(4);
@@ -21,9 +21,11 @@
*/ */
package net.server.channel.handlers; package net.server.channel.handlers;
import java.util.Arrays; import client.MapleCharacter;
import java.util.List; import client.MapleClient;
import client.inventory.MapleInventory;
import client.inventory.MapleInventoryType;
import client.inventory.manipulator.MapleInventoryManipulator;
import net.AbstractMaplePacketHandler; import net.AbstractMaplePacketHandler;
import server.MapleItemInformationProvider; import server.MapleItemInformationProvider;
import server.life.MapleLifeFactory; import server.life.MapleLifeFactory;
@@ -34,11 +36,9 @@ import server.quest.MapleQuest;
import tools.MaplePacketCreator; import tools.MaplePacketCreator;
import tools.Randomizer; import tools.Randomizer;
import tools.data.input.SeekableLittleEndianAccessor; import tools.data.input.SeekableLittleEndianAccessor;
import client.MapleCharacter;
import client.MapleClient; import java.util.Arrays;
import client.inventory.MapleInventory; import java.util.List;
import client.inventory.MapleInventoryType;
import client.inventory.manipulator.MapleInventoryManipulator;
public final class AdminCommandHandler extends AbstractMaplePacketHandler { public final class AdminCommandHandler extends AbstractMaplePacketHandler {
@@ -53,8 +53,7 @@ public final class AdminCommandHandler extends AbstractMaplePacketHandler {
switch (mode) { switch (mode) {
case 0x00: // Level1~Level8 & Package1~Package2 case 0x00: // Level1~Level8 & Package1~Package2
int[][] toSpawn = MapleItemInformationProvider.getInstance().getSummonMobs(slea.readInt()); int[][] toSpawn = MapleItemInformationProvider.getInstance().getSummonMobs(slea.readInt());
for (int z = 0; z < toSpawn.length; z++) { for (int[] toSpawnChild : toSpawn) {
int[] toSpawnChild = toSpawn[z];
if (Randomizer.nextInt(100) < toSpawnChild[1]) { if (Randomizer.nextInt(100) < toSpawnChild[1]) {
c.getPlayer().getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(toSpawnChild[0]), c.getPlayer().getPosition()); c.getPlayer().getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(toSpawnChild[0]), c.getPlayer().getPosition());
} }
@@ -26,9 +26,9 @@ import client.MapleClient;
import net.AbstractMaplePacketHandler; import net.AbstractMaplePacketHandler;
import net.opcodes.SendOpcode; import net.opcodes.SendOpcode;
import net.server.Server; import net.server.Server;
import net.server.guild.MapleAlliance;
import net.server.guild.MapleGuild; import net.server.guild.MapleGuild;
import net.server.guild.MapleGuildCharacter; import net.server.guild.MapleGuildCharacter;
import net.server.guild.MapleAlliance;
import tools.MaplePacketCreator; import tools.MaplePacketCreator;
import tools.data.input.SeekableLittleEndianAccessor; import tools.data.input.SeekableLittleEndianAccessor;
import tools.data.output.MaplePacketLittleEndianWriter; import tools.data.output.MaplePacketLittleEndianWriter;
@@ -170,7 +170,7 @@ public final class AllianceOperationHandler extends AbstractMaplePacketHandler {
break; break;
} }
case 0x08: case 0x08:
String ranks[] = new String[5]; String[] ranks = new String[5];
for (int i = 0; i < 5; i++) { for (int i = 0; i < 5; i++) {
ranks[i] = slea.readMapleAsciiString(); ranks[i] = slea.readMapleAsciiString();
} }
@@ -21,30 +21,19 @@
*/ */
package net.server.channel.handlers; package net.server.channel.handlers;
import java.util.Collections; import client.*;
import java.util.Iterator;
import java.util.List;
import config.YamlConfig; import config.YamlConfig;
import client.MapleBuffStat;
import client.MapleCharacter;
import client.MapleClient;
import client.MapleJob;
import client.Skill;
import client.SkillFactory;
import constants.game.GameConstants; import constants.game.GameConstants;
import constants.skills.Crusader; import constants.skills.*;
import constants.skills.DawnWarrior;
import constants.skills.DragonKnight;
import constants.skills.Hero;
import constants.skills.NightWalker;
import constants.skills.Rogue;
import constants.skills.WindArcher;
import server.MapleStatEffect; import server.MapleStatEffect;
import tools.MaplePacketCreator; import tools.MaplePacketCreator;
import tools.Pair; import tools.Pair;
import tools.data.input.SeekableLittleEndianAccessor; import tools.data.input.SeekableLittleEndianAccessor;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
public final class CloseRangeDamageHandler extends AbstractDealDamageHandler { public final class CloseRangeDamageHandler extends AbstractDealDamageHandler {
@Override @Override
@@ -78,7 +67,7 @@ public final class CloseRangeDamageHandler extends AbstractDealDamageHandler {
Integer comboBuff = chr.getBuffedValue(MapleBuffStat.COMBO); Integer comboBuff = chr.getBuffedValue(MapleBuffStat.COMBO);
if (GameConstants.isFinisherSkill(attack.skill)) { if (GameConstants.isFinisherSkill(attack.skill)) {
if (comboBuff != null) { if (comboBuff != null) {
numFinisherOrbs = comboBuff.intValue() - 1; numFinisherOrbs = comboBuff - 1;
} }
chr.handleOrbconsume(); chr.handleOrbconsume();
} else if (attack.numAttacked > 0) { } else if (attack.numAttacked > 0) {
@@ -129,7 +118,7 @@ public final class CloseRangeDamageHandler extends AbstractDealDamageHandler {
int totDamageToOneMonster = 0; // sacrifice attacks only 1 mob with 1 attack int totDamageToOneMonster = 0; // sacrifice attacks only 1 mob with 1 attack
final Iterator<List<Integer>> dmgIt = attack.allDamage.values().iterator(); final Iterator<List<Integer>> dmgIt = attack.allDamage.values().iterator();
if (dmgIt.hasNext()) { if (dmgIt.hasNext()) {
totDamageToOneMonster = dmgIt.next().get(0).intValue(); totDamageToOneMonster = dmgIt.next().get(0);
} }
chr.safeAddHP(-1 * totDamageToOneMonster * attack.getAttackEffect(chr, null).getX() / 100); chr.safeAddHP(-1 * totDamageToOneMonster * attack.getAttackEffect(chr, null).getX() / 100);
@@ -190,8 +190,8 @@ public final class CouponCodeHandler extends AbstractMaplePacketHandler {
if (type < 0) { if (type < 0) {
c.announce(MaplePacketCreator.showCashShopMessage((byte) parseCouponResult(type))); c.announce(MaplePacketCreator.showCashShopMessage((byte) parseCouponResult(type)));
} else { } else {
List<Item> cashItems = new LinkedList<Item>(); List<Item> cashItems = new LinkedList<>();
List<Pair<Integer, Integer>> items = new LinkedList<Pair<Integer, Integer>>(); List<Pair<Integer, Integer>> items = new LinkedList<>();
int nxCredit = 0; int nxCredit = 0;
int maplePoints = 0; int maplePoints = 0;
int nxPrepaid = 0; int nxPrepaid = 0;
@@ -245,7 +245,7 @@ public final class CouponCodeHandler extends AbstractMaplePacketHandler {
cashItems.add(it); cashItems.add(it);
} else { } else {
MapleInventoryManipulator.addById(c, item, qty, "", -1); MapleInventoryManipulator.addById(c, item, qty, "", -1);
items.add(new Pair<Integer, Integer>((int)qty, item)); items.add(new Pair<>((int) qty, item));
} }
break; break;
} }
@@ -120,7 +120,7 @@ public final class EnterMTSHandler extends AbstractMaplePacketHandler {
c.announce(MaplePacketCreator.showMTSCash(c.getPlayer())); c.announce(MaplePacketCreator.showMTSCash(c.getPlayer()));
List<MTSItemInfo> items = new ArrayList<>(); List<MTSItemInfo> items = new ArrayList<>();
int pages = 0; int pages = 0;
try (Connection con = DatabaseConnection.getConnection();) { try (Connection con = DatabaseConnection.getConnection()) {
try (PreparedStatement ps = con.prepareStatement("SELECT * FROM mts_items WHERE tab = 1 AND transfer = 0 ORDER BY id DESC LIMIT 16, 16"); try (PreparedStatement ps = con.prepareStatement("SELECT * FROM mts_items WHERE tab = 1 AND transfer = 0 ORDER BY id DESC LIMIT 16, 16");
ResultSet rs = ps.executeQuery()) { ResultSet rs = ps.executeQuery()) {
while (rs.next()) { while (rs.next()) {
@@ -157,7 +157,7 @@ public final class EnterMTSHandler extends AbstractMaplePacketHandler {
equip.setExpiration(rs.getLong("expiration")); equip.setExpiration(rs.getLong("expiration"));
equip.setGiftFrom(rs.getString("giftFrom")); equip.setGiftFrom(rs.getString("giftFrom"));
items.add(new MTSItemInfo((Item) equip, rs.getInt("price") + 100 + (int) (rs.getInt("price") * 0.1), rs.getInt("id"), rs.getInt("seller"), rs.getString("sellername"), rs.getString("sell_ends"))); items.add(new MTSItemInfo(equip, rs.getInt("price") + 100 + (int) (rs.getInt("price") * 0.1), rs.getInt("id"), rs.getInt("seller"), rs.getString("sellername"), rs.getString("sell_ends")));
} }
} }
} }
@@ -188,7 +188,7 @@ public final class EnterMTSHandler extends AbstractMaplePacketHandler {
if (rs.getInt("type") != 1) { if (rs.getInt("type") != 1) {
Item i = new Item(rs.getInt("itemid"), (short) 0, (short) rs.getInt("quantity")); Item i = new Item(rs.getInt("itemid"), (short) 0, (short) rs.getInt("quantity"));
i.setOwner(rs.getString("owner")); i.setOwner(rs.getString("owner"));
items.add(new MTSItemInfo((Item) i, rs.getInt("price"), rs.getInt("id"), rs.getInt("seller"), rs.getString("sellername"), rs.getString("sell_ends"))); items.add(new MTSItemInfo(i, rs.getInt("price"), rs.getInt("id"), rs.getInt("seller"), rs.getString("sellername"), rs.getString("sell_ends")));
} else { } else {
Equip equip = new Equip(rs.getInt("itemid"), (byte) rs.getInt("position"), -1); Equip equip = new Equip(rs.getInt("itemid"), (byte) rs.getInt("position"), -1);
equip.setOwner(rs.getString("owner")); equip.setOwner(rs.getString("owner"));
@@ -217,7 +217,7 @@ public final class EnterMTSHandler extends AbstractMaplePacketHandler {
equip.setFlag((short) rs.getInt("flag")); equip.setFlag((short) rs.getInt("flag"));
equip.setExpiration(rs.getLong("expiration")); equip.setExpiration(rs.getLong("expiration"));
equip.setGiftFrom(rs.getString("giftFrom")); equip.setGiftFrom(rs.getString("giftFrom"));
items.add(new MTSItemInfo((Item) equip, rs.getInt("price"), rs.getInt("id"), rs.getInt("seller"), rs.getString("sellername"), rs.getString("sell_ends"))); items.add(new MTSItemInfo(equip, rs.getInt("price"), rs.getInt("id"), rs.getInt("seller"), rs.getString("sellername"), rs.getString("sell_ends")));
} }
} }
} }
@@ -238,7 +238,7 @@ public final class EnterMTSHandler extends AbstractMaplePacketHandler {
if (rs.getInt("type") != 1) { if (rs.getInt("type") != 1) {
Item i = new Item(rs.getInt("itemid"), (short) 0, (short) rs.getInt("quantity")); Item i = new Item(rs.getInt("itemid"), (short) 0, (short) rs.getInt("quantity"));
i.setOwner(rs.getString("owner")); i.setOwner(rs.getString("owner"));
items.add(new MTSItemInfo((Item) i, rs.getInt("price"), rs.getInt("id"), rs.getInt("seller"), rs.getString("sellername"), rs.getString("sell_ends"))); items.add(new MTSItemInfo(i, rs.getInt("price"), rs.getInt("id"), rs.getInt("seller"), rs.getString("sellername"), rs.getString("sell_ends")));
} else { } else {
Equip equip = new Equip(rs.getInt("itemid"), (byte) rs.getInt("position"), -1); Equip equip = new Equip(rs.getInt("itemid"), (byte) rs.getInt("position"), -1);
equip.setOwner(rs.getString("owner")); equip.setOwner(rs.getString("owner"));
@@ -267,7 +267,7 @@ public final class EnterMTSHandler extends AbstractMaplePacketHandler {
equip.setFlag((short) rs.getInt("flag")); equip.setFlag((short) rs.getInt("flag"));
equip.setExpiration(rs.getLong("expiration")); equip.setExpiration(rs.getLong("expiration"));
equip.setGiftFrom(rs.getString("giftFrom")); equip.setGiftFrom(rs.getString("giftFrom"));
items.add(new MTSItemInfo((Item) equip, rs.getInt("price"), rs.getInt("id"), rs.getInt("seller"), rs.getString("sellername"), rs.getString("sell_ends"))); items.add(new MTSItemInfo(equip, rs.getInt("price"), rs.getInt("id"), rs.getInt("seller"), rs.getString("sellername"), rs.getString("sell_ends")));
} }
} }
} }
@@ -21,22 +21,23 @@
*/ */
package net.server.channel.handlers; package net.server.channel.handlers;
import config.YamlConfig;
import net.server.guild.MapleGuildResponse;
import net.server.guild.MapleGuild;
import constants.game.GameConstants;
import client.MapleClient;
import net.AbstractMaplePacketHandler;
import tools.data.input.SeekableLittleEndianAccessor;
import tools.MaplePacketCreator;
import client.MapleCharacter; import client.MapleCharacter;
import java.util.HashSet; import client.MapleClient;
import java.util.Set; import config.YamlConfig;
import constants.game.GameConstants;
import net.AbstractMaplePacketHandler;
import net.server.Server; import net.server.Server;
import net.server.coordinator.matchchecker.MatchCheckerListenerFactory.MatchCheckerType; import net.server.coordinator.matchchecker.MatchCheckerListenerFactory.MatchCheckerType;
import net.server.guild.MapleAlliance; import net.server.guild.MapleAlliance;
import net.server.guild.MapleGuild;
import net.server.guild.MapleGuildResponse;
import net.server.world.MapleParty; import net.server.world.MapleParty;
import net.server.world.World; import net.server.world.World;
import tools.MaplePacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
import java.util.HashSet;
import java.util.Set;
public final class GuildOperationHandler extends AbstractMaplePacketHandler { public final class GuildOperationHandler extends AbstractMaplePacketHandler {
private boolean isGuildNameAcceptable(String name) { private boolean isGuildNameAcceptable(String name) {
@@ -187,7 +188,7 @@ public final class GuildOperationHandler extends AbstractMaplePacketHandler {
System.out.println("[Hack] " + mc.getName() + " tried to change guild rank titles when s/he does not have permission."); System.out.println("[Hack] " + mc.getName() + " tried to change guild rank titles when s/he does not have permission.");
return; return;
} }
String ranks[] = new String[5]; String[] ranks = new String[5];
for (int i = 0; i < 5; i++) { for (int i = 0; i < 5; i++) {
ranks[i] = slea.readMapleAsciiString(); ranks[i] = slea.readMapleAsciiString();
} }
@@ -21,22 +21,18 @@
*/ */
package net.server.channel.handlers; package net.server.channel.handlers;
import java.util.ArrayList;
import java.util.List;
import config.YamlConfig;
import net.AbstractMaplePacketHandler;
import tools.MaplePacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
import client.MapleCharacter; import client.MapleCharacter;
import client.MapleClient; import client.MapleClient;
import client.inventory.Item; import client.inventory.*;
import client.inventory.Equip; import config.YamlConfig;
import client.inventory.MapleInventory; import net.AbstractMaplePacketHandler;
import client.inventory.MapleInventoryType;
import client.inventory.ModifyInventory;
import server.MapleItemInformationProvider;
import net.server.Server; import net.server.Server;
import server.MapleItemInformationProvider;
import tools.MaplePacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
import java.util.ArrayList;
import java.util.List;
/** /**
* *
@@ -159,7 +155,7 @@ class PairedQuicksort {
if (i <= j) { if (i <= j) {
w = (Equip)A.get(i); w = (Equip)A.get(i);
A.set(i, A.get(j)); A.set(i, A.get(j));
A.set(j, (Item)w); A.set(j, w);
i++; i++;
j--; j--;
@@ -290,7 +286,7 @@ public final class InventorySortHandler extends AbstractMaplePacketHandler {
for (short i = 1; i <= inventory.getSlotLimit(); i++) { for (short i = 1; i <= inventory.getSlotLimit(); i++) {
Item item = inventory.getItem(i); Item item = inventory.getItem(i);
if (item != null) { if (item != null) {
itemarray.add((Item) item.copy()); itemarray.add(item.copy());
} }
} }
@@ -21,6 +21,23 @@
*/ */
package net.server.channel.handlers; package net.server.channel.handlers;
import client.MapleCharacter;
import client.MapleClient;
import client.inventory.Equip;
import client.inventory.Item;
import client.inventory.MapleInventoryType;
import client.inventory.manipulator.MapleInventoryManipulator;
import constants.inventory.ItemConstants;
import net.AbstractMaplePacketHandler;
import net.server.Server;
import net.server.channel.Channel;
import server.MTSItemInfo;
import server.MapleItemInformationProvider;
import tools.DatabaseConnection;
import tools.MaplePacketCreator;
import tools.Pair;
import tools.data.input.SeekableLittleEndianAccessor;
import java.sql.Connection; import java.sql.Connection;
import java.sql.PreparedStatement; import java.sql.PreparedStatement;
import java.sql.ResultSet; import java.sql.ResultSet;
@@ -29,23 +46,6 @@ import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
import java.util.List; import java.util.List;
import net.AbstractMaplePacketHandler;
import net.server.Server;
import net.server.channel.Channel;
import server.MTSItemInfo;
import client.inventory.manipulator.MapleInventoryManipulator;
import server.MapleItemInformationProvider;
import tools.DatabaseConnection;
import tools.MaplePacketCreator;
import tools.Pair;
import tools.data.input.SeekableLittleEndianAccessor;
import client.MapleCharacter;
import client.MapleClient;
import client.inventory.Equip;
import client.inventory.Item;
import client.inventory.MapleInventoryType;
import constants.inventory.ItemConstants;
public final class MTSHandler extends AbstractMaplePacketHandler { public final class MTSHandler extends AbstractMaplePacketHandler {
@Override @Override
@@ -159,10 +159,10 @@ public final class MTSHandler extends AbstractMaplePacketHandler {
date += day + ""; date += day + "";
} }
if (!i.getInventoryType().equals(MapleInventoryType.EQUIP)) { if (!i.getInventoryType().equals(MapleInventoryType.EQUIP)) {
Item item = (Item) i; Item item = i;
ps = con.prepareStatement("INSERT INTO mts_items (tab, type, itemid, quantity, expiration, giftFrom, seller, price, owner, sellername, sell_ends) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); ps = con.prepareStatement("INSERT INTO mts_items (tab, type, itemid, quantity, expiration, giftFrom, seller, price, owner, sellername, sell_ends) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
ps.setInt(1, 1); ps.setInt(1, 1);
ps.setInt(2, (int) invType.getType()); ps.setInt(2, invType.getType());
ps.setInt(3, item.getItemId()); ps.setInt(3, item.getItemId());
ps.setInt(4, quantity); ps.setInt(4, quantity);
ps.setLong(5, item.getExpiration()); ps.setLong(5, item.getExpiration());
@@ -176,7 +176,7 @@ public final class MTSHandler extends AbstractMaplePacketHandler {
Equip equip = (Equip) i; Equip equip = (Equip) i;
ps = con.prepareStatement("INSERT INTO mts_items (tab, type, itemid, quantity, expiration, giftFrom, seller, price, upgradeslots, level, str, dex, `int`, luk, hp, mp, watk, matk, wdef, mdef, acc, avoid, hands, speed, jump, locked, owner, sellername, sell_ends, vicious, flag, itemexp, itemlevel, ringid) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); ps = con.prepareStatement("INSERT INTO mts_items (tab, type, itemid, quantity, expiration, giftFrom, seller, price, upgradeslots, level, str, dex, `int`, luk, hp, mp, watk, matk, wdef, mdef, acc, avoid, hands, speed, jump, locked, owner, sellername, sell_ends, vicious, flag, itemexp, itemlevel, ringid) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
ps.setInt(1, 1); ps.setInt(1, 1);
ps.setInt(2, (int) invType.getType()); ps.setInt(2, invType.getType());
ps.setInt(3, equip.getItemId()); ps.setInt(3, equip.getItemId());
ps.setInt(4, quantity); ps.setInt(4, quantity);
ps.setLong(5, equip.getExpiration()); ps.setLong(5, equip.getExpiration());
@@ -557,7 +557,7 @@ public final class MTSHandler extends AbstractMaplePacketHandler {
if (rs.getInt("type") != 1) { if (rs.getInt("type") != 1) {
Item i = new Item(rs.getInt("itemid"), (byte) 0, (short) rs.getInt("quantity")); Item i = new Item(rs.getInt("itemid"), (byte) 0, (short) rs.getInt("quantity"));
i.setOwner(rs.getString("owner")); i.setOwner(rs.getString("owner"));
items.add(new MTSItemInfo((Item) i, rs.getInt("price"), rs.getInt("id"), rs.getInt("seller"), rs.getString("sellername"), rs.getString("sell_ends"))); items.add(new MTSItemInfo(i, rs.getInt("price"), rs.getInt("id"), rs.getInt("seller"), rs.getString("sellername"), rs.getString("sell_ends")));
} else { } else {
Equip equip = new Equip(rs.getInt("itemid"), (byte) rs.getInt("position"), -1); Equip equip = new Equip(rs.getInt("itemid"), (byte) rs.getInt("position"), -1);
equip.setOwner(rs.getString("owner")); equip.setOwner(rs.getString("owner"));
@@ -586,7 +586,7 @@ public final class MTSHandler extends AbstractMaplePacketHandler {
equip.setRingId(rs.getInt("ringid")); equip.setRingId(rs.getInt("ringid"));
equip.setExpiration(rs.getLong("expiration")); equip.setExpiration(rs.getLong("expiration"));
equip.setGiftFrom(rs.getString("giftFrom")); equip.setGiftFrom(rs.getString("giftFrom"));
items.add(new MTSItemInfo((Item) equip, rs.getInt("price"), rs.getInt("id"), rs.getInt("seller"), rs.getString("sellername"), rs.getString("sell_ends"))); items.add(new MTSItemInfo(equip, rs.getInt("price"), rs.getInt("id"), rs.getInt("seller"), rs.getString("sellername"), rs.getString("sell_ends")));
} }
} }
rs.close(); rs.close();
@@ -617,7 +617,7 @@ public final class MTSHandler extends AbstractMaplePacketHandler {
if (rse.getInt("type") != 1) { if (rse.getInt("type") != 1) {
Item i = new Item(rse.getInt("itemid"), (short) 0, (short) rse.getInt("quantity")); Item i = new Item(rse.getInt("itemid"), (short) 0, (short) rse.getInt("quantity"));
i.setOwner(rse.getString("owner")); i.setOwner(rse.getString("owner"));
items.add(new MTSItemInfo((Item) i, rse.getInt("price"), rse.getInt("id"), rse.getInt("seller"), rse.getString("sellername"), rse.getString("sell_ends"))); items.add(new MTSItemInfo(i, rse.getInt("price"), rse.getInt("id"), rse.getInt("seller"), rse.getString("sellername"), rse.getString("sell_ends")));
} else { } else {
Equip equip = new Equip(rse.getInt("itemid"), (byte) rse.getInt("position"), -1); Equip equip = new Equip(rse.getInt("itemid"), (byte) rse.getInt("position"), -1);
equip.setOwner(rse.getString("owner")); equip.setOwner(rse.getString("owner"));
@@ -646,7 +646,7 @@ public final class MTSHandler extends AbstractMaplePacketHandler {
equip.setFlag((short) rs.getInt("flag")); equip.setFlag((short) rs.getInt("flag"));
equip.setExpiration(rs.getLong("expiration")); equip.setExpiration(rs.getLong("expiration"));
equip.setGiftFrom(rs.getString("giftFrom")); equip.setGiftFrom(rs.getString("giftFrom"));
items.add(new MTSItemInfo((Item) equip, rse.getInt("price"), rse.getInt("id"), rse.getInt("seller"), rse.getString("sellername"), rse.getString("sell_ends"))); items.add(new MTSItemInfo(equip, rse.getInt("price"), rse.getInt("id"), rse.getInt("seller"), rse.getString("sellername"), rse.getString("sell_ends")));
} }
} }
} }
@@ -685,7 +685,7 @@ public final class MTSHandler extends AbstractMaplePacketHandler {
if (rs.getInt("type") != 1) { if (rs.getInt("type") != 1) {
Item i = new Item(rs.getInt("itemid"), (short) 0, (short) rs.getInt("quantity")); Item i = new Item(rs.getInt("itemid"), (short) 0, (short) rs.getInt("quantity"));
i.setOwner(rs.getString("owner")); i.setOwner(rs.getString("owner"));
items.add(new MTSItemInfo((Item) i, rs.getInt("price"), rs.getInt("id"), rs.getInt("seller"), rs.getString("sellername"), rs.getString("sell_ends"))); items.add(new MTSItemInfo(i, rs.getInt("price"), rs.getInt("id"), rs.getInt("seller"), rs.getString("sellername"), rs.getString("sell_ends")));
} else { } else {
Equip equip = new Equip(rs.getInt("itemid"), (byte) rs.getInt("position"), -1); Equip equip = new Equip(rs.getInt("itemid"), (byte) rs.getInt("position"), -1);
equip.setOwner(rs.getString("owner")); equip.setOwner(rs.getString("owner"));
@@ -714,7 +714,7 @@ public final class MTSHandler extends AbstractMaplePacketHandler {
equip.setFlag((short) rs.getInt("flag")); equip.setFlag((short) rs.getInt("flag"));
equip.setExpiration(rs.getLong("expiration")); equip.setExpiration(rs.getLong("expiration"));
equip.setGiftFrom(rs.getString("giftFrom")); equip.setGiftFrom(rs.getString("giftFrom"));
items.add(new MTSItemInfo((Item) equip, rs.getInt("price"), rs.getInt("id"), rs.getInt("seller"), rs.getString("sellername"), rs.getString("sell_ends"))); items.add(new MTSItemInfo(equip, rs.getInt("price"), rs.getInt("id"), rs.getInt("seller"), rs.getString("sellername"), rs.getString("sell_ends")));
} }
} }
rs.close(); rs.close();
@@ -751,7 +751,7 @@ public final class MTSHandler extends AbstractMaplePacketHandler {
if (rs.getInt("type") != 1) { if (rs.getInt("type") != 1) {
Item i = new Item(rs.getInt("itemid"), (short) 0, (short) rs.getInt("quantity")); Item i = new Item(rs.getInt("itemid"), (short) 0, (short) rs.getInt("quantity"));
i.setOwner(rs.getString("owner")); i.setOwner(rs.getString("owner"));
items.add(new MTSItemInfo((Item) i, rs.getInt("price"), rs.getInt("id"), rs.getInt("seller"), rs.getString("sellername"), rs.getString("sell_ends"))); items.add(new MTSItemInfo(i, rs.getInt("price"), rs.getInt("id"), rs.getInt("seller"), rs.getString("sellername"), rs.getString("sell_ends")));
} else { } else {
Equip equip = new Equip(rs.getInt("itemid"), (byte) rs.getInt("position"), -1); Equip equip = new Equip(rs.getInt("itemid"), (byte) rs.getInt("position"), -1);
equip.setOwner(rs.getString("owner")); equip.setOwner(rs.getString("owner"));
@@ -780,7 +780,7 @@ public final class MTSHandler extends AbstractMaplePacketHandler {
equip.setFlag((short) rs.getInt("flag")); equip.setFlag((short) rs.getInt("flag"));
equip.setExpiration(rs.getLong("expiration")); equip.setExpiration(rs.getLong("expiration"));
equip.setGiftFrom(rs.getString("giftFrom")); equip.setGiftFrom(rs.getString("giftFrom"));
items.add(new MTSItemInfo((Item) equip, rs.getInt("price"), rs.getInt("id"), rs.getInt("seller"), rs.getString("sellername"), rs.getString("sell_ends"))); items.add(new MTSItemInfo(equip, rs.getInt("price"), rs.getInt("id"), rs.getInt("seller"), rs.getString("sellername"), rs.getString("sell_ends")));
} }
} }
rs.close(); rs.close();
@@ -850,7 +850,7 @@ public final class MTSHandler extends AbstractMaplePacketHandler {
if (rs.getInt("type") != 1) { if (rs.getInt("type") != 1) {
Item i = new Item(rs.getInt("itemid"), (short) 0, (short) rs.getInt("quantity")); Item i = new Item(rs.getInt("itemid"), (short) 0, (short) rs.getInt("quantity"));
i.setOwner(rs.getString("owner")); i.setOwner(rs.getString("owner"));
items.add(new MTSItemInfo((Item) i, rs.getInt("price"), rs.getInt("id"), rs.getInt("seller"), rs.getString("sellername"), rs.getString("sell_ends"))); items.add(new MTSItemInfo(i, rs.getInt("price"), rs.getInt("id"), rs.getInt("seller"), rs.getString("sellername"), rs.getString("sell_ends")));
} else { } else {
Equip equip = new Equip(rs.getInt("itemid"), (byte) rs.getInt("position"), -1); Equip equip = new Equip(rs.getInt("itemid"), (byte) rs.getInt("position"), -1);
equip.setOwner(rs.getString("owner")); equip.setOwner(rs.getString("owner"));
@@ -879,7 +879,7 @@ public final class MTSHandler extends AbstractMaplePacketHandler {
equip.setFlag((short) rs.getInt("flag")); equip.setFlag((short) rs.getInt("flag"));
equip.setExpiration(rs.getLong("expiration")); equip.setExpiration(rs.getLong("expiration"));
equip.setGiftFrom(rs.getString("giftFrom")); equip.setGiftFrom(rs.getString("giftFrom"));
items.add(new MTSItemInfo((Item) equip, rs.getInt("price"), rs.getInt("id"), rs.getInt("seller"), rs.getString("sellername"), rs.getString("sell_ends"))); items.add(new MTSItemInfo(equip, rs.getInt("price"), rs.getInt("id"), rs.getInt("seller"), rs.getString("sellername"), rs.getString("sell_ends")));
} }
} }
rs.close(); rs.close();
@@ -43,7 +43,7 @@ public final class MultiChatHandler extends AbstractMaplePacketHandler {
int type = slea.readByte(); // 0 for buddys, 1 for partys int type = slea.readByte(); // 0 for buddys, 1 for partys
int numRecipients = slea.readByte(); int numRecipients = slea.readByte();
int recipients[] = new int[numRecipients]; int[] recipients = new int[numRecipients];
for (int i = 0; i < numRecipients; i++) { for (int i = 0; i < numRecipients; i++) {
recipients[i] = slea.readInt(); recipients[i] = slea.readInt();
} }
@@ -23,9 +23,9 @@ package net.server.channel.handlers;
import client.MapleCharacter; import client.MapleCharacter;
import client.MapleClient; import client.MapleClient;
import client.inventory.MaplePet;
import client.inventory.PetCommand; import client.inventory.PetCommand;
import client.inventory.PetDataFactory; import client.inventory.PetDataFactory;
import client.inventory.MaplePet;
import net.AbstractMaplePacketHandler; import net.AbstractMaplePacketHandler;
import tools.MaplePacketCreator; import tools.MaplePacketCreator;
import tools.Randomizer; import tools.Randomizer;
@@ -47,7 +47,7 @@ public final class PetCommandHandler extends AbstractMaplePacketHandler {
slea.readInt(); slea.readInt();
slea.readByte(); slea.readByte();
byte command = slea.readByte(); byte command = slea.readByte();
PetCommand petCommand = PetDataFactory.getPetCommand(pet.getItemId(), (int) command); PetCommand petCommand = PetDataFactory.getPetCommand(pet.getItemId(), command);
if (petCommand == null) { if (petCommand == null) {
return; return;
} }
@@ -234,7 +234,7 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler {
player.visitMap(player.getMap()); player.visitMap(player.getMap());
BuddyList bl = player.getBuddylist(); BuddyList bl = player.getBuddylist();
int buddyIds[] = bl.getBuddyIds(); int[] buddyIds = bl.getBuddyIds();
wserv.loggedOn(player.getName(), player.getId(), c.getChannel(), buddyIds); wserv.loggedOn(player.getName(), player.getId(), c.getChannel(), buddyIds);
for (CharacterIdChannelPair onlineBuddy : wserv.multiBuddyFind(player.getId(), buddyIds)) { for (CharacterIdChannelPair onlineBuddy : wserv.multiBuddyFind(player.getId(), buddyIds)) {
BuddylistEntry ble = bl.get(onlineBuddy.getCharacterId()); BuddylistEntry ble = bl.get(onlineBuddy.getCharacterId());
@@ -360,7 +360,7 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler {
if(diseases != null) { if(diseases != null) {
for(Entry<MapleDisease, Pair<Long, MobSkill>> e : diseases.entrySet()) { for(Entry<MapleDisease, Pair<Long, MobSkill>> e : diseases.entrySet()) {
final List<Pair<MapleDisease, Integer>> debuff = Collections.singletonList(new Pair<>(e.getKey(), Integer.valueOf(e.getValue().getRight().getX()))); final List<Pair<MapleDisease, Integer>> debuff = Collections.singletonList(new Pair<>(e.getKey(), e.getValue().getRight().getX()));
c.announce(MaplePacketCreator.giveDebuff(debuff, e.getValue().getRight())); c.announce(MaplePacketCreator.giveDebuff(debuff, e.getValue().getRight()));
} }
} }
@@ -451,12 +451,7 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler {
timedBuffs.add(new Pair<>(curtime - pb.usedTime, pb)); timedBuffs.add(new Pair<>(curtime - pb.usedTime, pb));
} }
Collections.sort(timedBuffs, new Comparator<Pair<Long, PlayerBuffValueHolder>>() { timedBuffs.sort((p1, p2) -> p1.getLeft().compareTo(p2.getLeft()));
@Override
public int compare(Pair<Long, PlayerBuffValueHolder> p1, Pair<Long, PlayerBuffValueHolder> p2) {
return p1.getLeft().compareTo(p2.getLeft());
}
});
return timedBuffs; return timedBuffs;
} }
@@ -1,20 +1,20 @@
package net.server.channel.handlers; package net.server.channel.handlers;
import java.util.Map;
import client.MapleCharacter; import client.MapleCharacter;
import client.MapleClient; import client.MapleClient;
import client.MapleQuestStatus; import client.MapleQuestStatus;
import client.inventory.MapleInventory; import client.inventory.MapleInventory;
import client.inventory.MapleInventoryType; import client.inventory.MapleInventoryType;
import net.AbstractMaplePacketHandler;
import client.inventory.manipulator.MapleInventoryManipulator; import client.inventory.manipulator.MapleInventoryManipulator;
import net.AbstractMaplePacketHandler;
import server.MapleItemInformationProvider; import server.MapleItemInformationProvider;
import server.MapleItemInformationProvider.QuestConsItem; import server.MapleItemInformationProvider.QuestConsItem;
import server.quest.MapleQuest; import server.quest.MapleQuest;
import tools.MaplePacketCreator; import tools.MaplePacketCreator;
import tools.data.input.SeekableLittleEndianAccessor; import tools.data.input.SeekableLittleEndianAccessor;
import java.util.Map;
/** /**
* *
* @author Xari * @author Xari
@@ -55,7 +55,7 @@ public class RaiseIncExpHandler extends AbstractMaplePacketHandler {
return; return;
} }
MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.getByType(inventorytype), (short) slot, (short) 1, false, true); MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.getByType(inventorytype), slot, (short) 1, false, true);
} finally { } finally {
inv.unlockInventory(); inv.unlockInventory();
} }
@@ -21,26 +21,23 @@
*/ */
package net.server.channel.handlers; package net.server.channel.handlers;
import client.MapleClient;
import client.MapleCharacter; import client.MapleCharacter;
import client.MapleClient;
import client.Skill; import client.Skill;
import client.SkillFactory; import client.SkillFactory;
import client.inventory.Equip; import client.inventory.*;
import client.inventory.Equip.ScrollResult; import client.inventory.Equip.ScrollResult;
import client.inventory.Item;
import client.inventory.MapleInventory;
import client.inventory.MapleInventoryType;
import client.inventory.ModifyInventory;
import constants.inventory.ItemConstants;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import net.AbstractMaplePacketHandler;
import client.inventory.manipulator.MapleInventoryManipulator; import client.inventory.manipulator.MapleInventoryManipulator;
import constants.inventory.ItemConstants;
import net.AbstractMaplePacketHandler;
import server.MapleItemInformationProvider; import server.MapleItemInformationProvider;
import tools.MaplePacketCreator; import tools.MaplePacketCreator;
import tools.data.input.SeekableLittleEndianAccessor; import tools.data.input.SeekableLittleEndianAccessor;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/** /**
* @author Matze * @author Matze
* @author Frz * @author Frz
@@ -81,7 +78,7 @@ public final class ScrollHandler extends AbstractMaplePacketHandler {
announceCannotScroll(c, legendarySpirit); announceCannotScroll(c, legendarySpirit);
return; return;
} }
} else if (!ItemConstants.isModifierScroll(scroll.getItemId()) && ((Equip) toScroll).getUpgradeSlots() < 1) { } else if (!ItemConstants.isModifierScroll(scroll.getItemId()) && toScroll.getUpgradeSlots() < 1) {
announceCannotScroll(c, legendarySpirit); // thanks onechord for noticing zero upgrade slots freezing Legendary Scroll UI announceCannotScroll(c, legendarySpirit); // thanks onechord for noticing zero upgrade slots freezing Legendary Scroll UI
return; return;
} }
@@ -28,13 +28,14 @@ import client.SkillFactory;
import client.inventory.Item; import client.inventory.Item;
import client.inventory.MapleInventory; import client.inventory.MapleInventory;
import client.inventory.MapleInventoryType; import client.inventory.MapleInventoryType;
import java.util.Map;
import net.AbstractMaplePacketHandler;
import client.inventory.manipulator.MapleInventoryManipulator; import client.inventory.manipulator.MapleInventoryManipulator;
import net.AbstractMaplePacketHandler;
import server.MapleItemInformationProvider; import server.MapleItemInformationProvider;
import tools.MaplePacketCreator; import tools.MaplePacketCreator;
import tools.data.input.SeekableLittleEndianAccessor; import tools.data.input.SeekableLittleEndianAccessor;
import java.util.Map;
public final class SkillBookHandler extends AbstractMaplePacketHandler { public final class SkillBookHandler extends AbstractMaplePacketHandler {
@Override @Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) { public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
@@ -44,7 +45,7 @@ public final class SkillBookHandler extends AbstractMaplePacketHandler {
} }
slea.readInt(); slea.readInt();
short slot = (short) slea.readShort(); short slot = slea.readShort();
int itemId = slea.readInt(); int itemId = slea.readInt();
boolean canuse; boolean canuse;
@@ -21,35 +21,21 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package net.server.channel.handlers; package net.server.channel.handlers;
import client.MapleBuffStat; import client.*;
import client.MapleCharacter;
import client.MapleClient;
import client.Skill;
import client.SkillFactory;
import client.inventory.Item; import client.inventory.Item;
import client.inventory.MapleInventory; import client.inventory.MapleInventory;
import client.inventory.MapleInventoryType; import client.inventory.MapleInventoryType;
import client.inventory.manipulator.MapleInventoryManipulator;
import client.status.MonsterStatus; import client.status.MonsterStatus;
import client.status.MonsterStatusEffect; import client.status.MonsterStatusEffect;
import config.YamlConfig; import config.YamlConfig;
import constants.game.GameConstants; import constants.game.GameConstants;
import constants.inventory.ItemConstants; import constants.inventory.ItemConstants;
import constants.skills.Aran; import constants.skills.Aran;
import java.awt.Point;
import java.util.Collections;
import java.util.ArrayList;
import java.util.List;
import net.AbstractMaplePacketHandler; import net.AbstractMaplePacketHandler;
import client.inventory.manipulator.MapleInventoryManipulator;
import server.MapleStatEffect; import server.MapleStatEffect;
import server.life.MapleLifeFactory.loseItem; import server.life.MapleLifeFactory.loseItem;
import server.life.MapleMonster; import server.life.*;
import server.life.MobAttackInfo;
import server.life.MobAttackInfoFactory;
import server.life.MobSkill;
import server.life.MobSkillFactory;
import server.maps.MapleMap; import server.maps.MapleMap;
import server.maps.MapleMapObject; import server.maps.MapleMapObject;
import tools.FilePrinter; import tools.FilePrinter;
@@ -57,6 +43,11 @@ import tools.MaplePacketCreator;
import tools.Randomizer; import tools.Randomizer;
import tools.data.input.SeekableLittleEndianAccessor; import tools.data.input.SeekableLittleEndianAccessor;
import java.awt.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public final class TakeDamageHandler extends AbstractMaplePacketHandler { public final class TakeDamageHandler extends AbstractMaplePacketHandler {
@Override @Override
@@ -128,7 +119,7 @@ public final class TakeDamageHandler extends AbstractMaplePacketHandler {
} }
for (byte b = 0; b < qty; b++) { for (byte b = 0; b < qty; b++) {
pos.x = (int) (playerpos + ((d % 2 == 0) ? (25 * (d + 1) / 2) : -(25 * (d / 2)))); pos.x = playerpos + ((d % 2 == 0) ? (25 * (d + 1) / 2) : -(25 * (d / 2)));
map.spawnItemDrop(chr, chr, new Item(loseItem.getId(), (short) 0, (short) 1), map.calcDropPos(pos, chr.getPosition()), true, true); map.spawnItemDrop(chr, chr, new Item(loseItem.getId(), (short) 0, (short) 1), map.calcDropPos(pos, chr.getPosition()), true, true);
d++; d++;
} }
@@ -20,13 +20,6 @@
package net.server.channel.handlers; package net.server.channel.handlers;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.Calendar;
import java.sql.Connection;
import client.MapleCharacter; import client.MapleCharacter;
import client.MapleClient; import client.MapleClient;
import config.YamlConfig; import config.YamlConfig;
@@ -35,6 +28,9 @@ import tools.DatabaseConnection;
import tools.MaplePacketCreator; import tools.MaplePacketCreator;
import tools.data.input.SeekableLittleEndianAccessor; import tools.data.input.SeekableLittleEndianAccessor;
import java.sql.*;
import java.util.Calendar;
/** /**
* *
* @author Ronan * @author Ronan
@@ -76,7 +72,7 @@ public final class TransferNameHandler extends AbstractMaplePacketHandler {
} else if(completedTimestamp.getTime() + YamlConfig.config.server.NAME_CHANGE_COOLDOWN > System.currentTimeMillis()) { } else if(completedTimestamp.getTime() + YamlConfig.config.server.NAME_CHANGE_COOLDOWN > System.currentTimeMillis()) {
c.announce(MaplePacketCreator.sendNameTransferRules(3)); c.announce(MaplePacketCreator.sendNameTransferRules(3));
return; return;
}; }
} }
} catch(SQLException e) { } catch(SQLException e) {
e.printStackTrace(); e.printStackTrace();
@@ -20,12 +20,6 @@
package net.server.channel.handlers; package net.server.channel.handlers;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import client.MapleCharacter; import client.MapleCharacter;
import client.MapleClient; import client.MapleClient;
import config.YamlConfig; import config.YamlConfig;
@@ -35,6 +29,8 @@ import tools.DatabaseConnection;
import tools.MaplePacketCreator; import tools.MaplePacketCreator;
import tools.data.input.SeekableLittleEndianAccessor; import tools.data.input.SeekableLittleEndianAccessor;
import java.sql.*;
/** /**
* *
* @author Ronan * @author Ronan
@@ -73,7 +69,7 @@ public final class TransferWorldHandler extends AbstractMaplePacketHandler {
} else if(completedTimestamp.getTime() + YamlConfig.config.server.WORLD_TRANSFER_COOLDOWN > System.currentTimeMillis()) { } else if(completedTimestamp.getTime() + YamlConfig.config.server.WORLD_TRANSFER_COOLDOWN > System.currentTimeMillis()) {
c.announce(MaplePacketCreator.sendWorldTransferRules(7, c)); c.announce(MaplePacketCreator.sendWorldTransferRules(7, c));
return; return;
}; }
} }
} catch(SQLException e) { } catch(SQLException e) {
e.printStackTrace(); e.printStackTrace();
@@ -21,49 +21,34 @@
*/ */
package net.server.channel.handlers; package net.server.channel.handlers;
import client.MapleCharacter; import client.*;
import client.MapleClient;
import client.Skill;
import client.SkillFactory;
import client.SkillMacro;
import client.creator.veteran.*; import client.creator.veteran.*;
import client.inventory.Equip; import client.inventory.*;
import client.inventory.Equip.ScrollResult; import client.inventory.Equip.ScrollResult;
import client.inventory.Item;
import client.inventory.MapleInventory;
import client.inventory.MapleInventoryType;
import client.inventory.MaplePet;
import client.inventory.ModifyInventory;
import client.inventory.manipulator.MapleInventoryManipulator; import client.inventory.manipulator.MapleInventoryManipulator;
import client.inventory.manipulator.MapleKarmaManipulator; import client.inventory.manipulator.MapleKarmaManipulator;
import client.processor.npc.DueyProcessor;
import client.processor.stat.AssignAPProcessor; import client.processor.stat.AssignAPProcessor;
import client.processor.stat.AssignSPProcessor; import client.processor.stat.AssignSPProcessor;
import client.processor.npc.DueyProcessor;
import config.YamlConfig; import config.YamlConfig;
import constants.game.GameConstants; import constants.game.GameConstants;
import constants.inventory.ItemConstants; import constants.inventory.ItemConstants;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import net.AbstractMaplePacketHandler; import net.AbstractMaplePacketHandler;
import net.server.Server; import net.server.Server;
import server.MapleItemInformationProvider; import server.MapleItemInformationProvider;
import server.MapleShop; import server.MapleShop;
import server.MapleShopFactory; import server.MapleShopFactory;
import server.TimerManager; import server.TimerManager;
import server.maps.AbstractMapleMapObject; import server.maps.*;
import server.maps.FieldLimit;
import server.maps.MaplePlayerShopItem;
import server.maps.MapleKite;
import server.maps.MapleMap;
import server.maps.MapleTVEffect;
import tools.MaplePacketCreator; import tools.MaplePacketCreator;
import tools.Pair; import tools.Pair;
import tools.data.input.SeekableLittleEndianAccessor; import tools.data.input.SeekableLittleEndianAccessor;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public final class UseCashItemHandler extends AbstractMaplePacketHandler { public final class UseCashItemHandler extends AbstractMaplePacketHandler {
@Override @Override
@@ -449,12 +434,7 @@ public final class UseCashItemHandler extends AbstractMaplePacketHandler {
final int world = c.getWorld(); final int world = c.getWorld();
Server.getInstance().broadcastMessage(world, MaplePacketCreator.getAvatarMega(player, medal, c.getChannel(), itemId, strLines, (slea.readByte() != 0))); Server.getInstance().broadcastMessage(world, MaplePacketCreator.getAvatarMega(player, medal, c.getChannel(), itemId, strLines, (slea.readByte() != 0)));
TimerManager.getInstance().schedule(new Runnable() { TimerManager.getInstance().schedule(() -> Server.getInstance().broadcastMessage(world, MaplePacketCreator.byeAvatarMega()), 1000 * 10);
@Override
public void run() {
Server.getInstance().broadcastMessage(world, MaplePacketCreator.byeAvatarMega());
}
}, 1000 * 10);
remove(c, position, itemId); remove(c, position, itemId);
} else if (itemType == 540) { } else if (itemType == 540) {
slea.readByte(); slea.readByte();
@@ -597,9 +577,7 @@ public final class UseCashItemHandler extends AbstractMaplePacketHandler {
remove(c, position, itemId); remove(c, position, itemId);
final MapleClient client = c; final MapleClient client = c;
TimerManager.getInstance().schedule(new Runnable() { TimerManager.getInstance().schedule(() -> {
@Override
public void run() {
if(!player.isLoggedin()) return; if(!player.isLoggedin()) return;
player.toggleBlockCashShop(); player.toggleBlockCashShop();
@@ -616,7 +594,6 @@ public final class UseCashItemHandler extends AbstractMaplePacketHandler {
} }
client.announce(MaplePacketCreator.enableActions()); client.announce(MaplePacketCreator.enableActions());
}
}, 1000 * 3); }, 1000 * 3);
} else { } else {
System.out.println("NEW CASH ITEM: " + itemType + "\n" + slea.toString()); System.out.println("NEW CASH ITEM: " + itemType + "\n" + slea.toString());
@@ -20,18 +20,17 @@
package net.server.channel.handlers; package net.server.channel.handlers;
import client.MapleClient; import client.MapleClient;
import constants.game.GameConstants;
import net.AbstractMaplePacketHandler; import net.AbstractMaplePacketHandler;
import tools.data.input.SeekableLittleEndianAccessor;
import tools.MaplePacketCreator; import tools.MaplePacketCreator;
import tools.Pair; import tools.Pair;
import tools.data.input.SeekableLittleEndianAccessor;
import java.util.Comparator; import java.util.Comparator;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.PriorityQueue; import java.util.PriorityQueue;
import constants.game.GameConstants;
/** /**
* @author Ronan * @author Ronan
*/ */
@@ -48,17 +47,11 @@ public final class UseOwlOfMinervaHandler extends AbstractMaplePacketHandler {
owlLeaderboards.add(i); owlLeaderboards.add(i);
} }
} else { } else {
Comparator<Pair<Integer, Integer>> comparator = new Comparator<Pair<Integer, Integer>>() { // descending order // descending order
@Override Comparator<Pair<Integer, Integer>> comparator = (p1, p2) -> p2.getRight().compareTo(p1.getRight());
public int compare(Pair<Integer, Integer> p1, Pair<Integer, Integer> p2) {
return p2.getRight().compareTo(p1.getRight());
}
};
PriorityQueue<Pair<Integer, Integer>> queue = new PriorityQueue<>(Math.max(1, owlSearched.size()), comparator); PriorityQueue<Pair<Integer, Integer>> queue = new PriorityQueue<>(Math.max(1, owlSearched.size()), comparator);
for(Pair<Integer, Integer> p : owlSearched) { queue.addAll(owlSearched);
queue.add(p);
}
owlLeaderboards = new LinkedList<>(); owlLeaderboards = new LinkedList<>();
for(int i = 0; i < Math.min(owlSearched.size(), 10); i++) { for(int i = 0; i < Math.min(owlSearched.size(), 10); i++) {
@@ -24,12 +24,12 @@ package net.server.channel.handlers;
import client.MapleClient; import client.MapleClient;
import client.inventory.Item; import client.inventory.Item;
import client.inventory.MapleInventoryType; import client.inventory.MapleInventoryType;
import tools.Randomizer;
import net.AbstractMaplePacketHandler;
import client.inventory.manipulator.MapleInventoryManipulator; import client.inventory.manipulator.MapleInventoryManipulator;
import net.AbstractMaplePacketHandler;
import server.MapleItemInformationProvider; import server.MapleItemInformationProvider;
import server.life.MapleLifeFactory; import server.life.MapleLifeFactory;
import tools.MaplePacketCreator; import tools.MaplePacketCreator;
import tools.Randomizer;
import tools.data.input.SeekableLittleEndianAccessor; import tools.data.input.SeekableLittleEndianAccessor;
/** /**
@@ -52,8 +52,7 @@ public final class UseSummonBagHandler extends AbstractMaplePacketHandler {
if (toUse != null && toUse.getQuantity() > 0 && toUse.getItemId() == itemId) { if (toUse != null && toUse.getQuantity() > 0 && toUse.getItemId() == itemId) {
MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.USE, slot, (short) 1, false); MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.USE, slot, (short) 1, false);
int[][] toSpawn = MapleItemInformationProvider.getInstance().getSummonMobs(itemId); int[][] toSpawn = MapleItemInformationProvider.getInstance().getSummonMobs(itemId);
for (int z = 0; z < toSpawn.length; z++) { for (int[] toSpawnChild : toSpawn) {
int[] toSpawnChild = toSpawn[z];
if (Randomizer.nextInt(100) < toSpawnChild[1]) { if (Randomizer.nextInt(100) < toSpawnChild[1]) {
c.getPlayer().getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(toSpawnChild[0]), c.getPlayer().getPosition()); c.getPlayer().getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(toSpawnChild[0]), c.getPlayer().getPosition());
} }
@@ -20,14 +20,14 @@
package net.server.coordinator.login; package net.server.coordinator.login;
import config.YamlConfig; import config.YamlConfig;
import net.server.Server;
import java.util.Collections; import java.util.Collections;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import net.server.Server;
/** /**
* *
* @author Ronan * @author Ronan
@@ -39,7 +39,7 @@ public class LoginStorage {
public boolean registerLogin(int accountId) { public boolean registerLogin(int accountId) {
List<Long> accHist = loginHistory.get(accountId); List<Long> accHist = loginHistory.get(accountId);
if (accHist == null) { if (accHist == null) {
accHist = new LinkedList<Long>(); accHist = new LinkedList<>();
loginHistory.put(accountId, accHist); loginHistory.put(accountId, accHist);
} }
@@ -20,6 +20,7 @@
package net.server.coordinator.matchchecker; package net.server.coordinator.matchchecker;
import client.MapleCharacter; import client.MapleCharacter;
import java.util.Set; import java.util.Set;
/** /**
@@ -27,8 +28,8 @@ import java.util.Set;
* @author Ronan * @author Ronan
*/ */
public interface AbstractMatchCheckerListener { public interface AbstractMatchCheckerListener {
public void onMatchCreated(MapleCharacter leader, Set<MapleCharacter> nonLeaderMatchPlayers, String message); void onMatchCreated(MapleCharacter leader, Set<MapleCharacter> nonLeaderMatchPlayers, String message);
public void onMatchAccepted(int leaderid, Set<MapleCharacter> matchPlayers, String message); void onMatchAccepted(int leaderid, Set<MapleCharacter> matchPlayers, String message);
public void onMatchDeclined(int leaderid, Set<MapleCharacter> matchPlayers, String message); void onMatchDeclined(int leaderid, Set<MapleCharacter> matchPlayers, String message);
public void onMatchDismissed(int leaderid, Set<MapleCharacter> matchPlayers, String message); void onMatchDismissed(int leaderid, Set<MapleCharacter> matchPlayers, String message);
} }
@@ -24,5 +24,5 @@ package net.server.coordinator.matchchecker;
* @author Ronan * @author Ronan
*/ */
public interface MatchCheckerListenerRecipe { public interface MatchCheckerListenerRecipe {
public AbstractMatchCheckerListener getListener(); AbstractMatchCheckerListener getListener();
} }
@@ -22,20 +22,6 @@ package net.server.coordinator.partysearch;
import client.MapleCharacter; import client.MapleCharacter;
import client.MapleJob; import client.MapleJob;
import config.YamlConfig; import config.YamlConfig;
import java.io.File;
import net.server.world.MapleParty;
import net.server.coordinator.world.MapleInviteCoordinator.InviteType;
import tools.MaplePacketCreator;
import tools.Pair;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import net.server.audit.locks.MonitoredLockType; import net.server.audit.locks.MonitoredLockType;
import net.server.audit.locks.MonitoredReadLock; import net.server.audit.locks.MonitoredReadLock;
import net.server.audit.locks.MonitoredReentrantReadWriteLock; import net.server.audit.locks.MonitoredReentrantReadWriteLock;
@@ -43,9 +29,17 @@ import net.server.audit.locks.MonitoredWriteLock;
import net.server.audit.locks.factory.MonitoredReadLockFactory; import net.server.audit.locks.factory.MonitoredReadLockFactory;
import net.server.audit.locks.factory.MonitoredWriteLockFactory; import net.server.audit.locks.factory.MonitoredWriteLockFactory;
import net.server.coordinator.world.MapleInviteCoordinator; import net.server.coordinator.world.MapleInviteCoordinator;
import net.server.coordinator.world.MapleInviteCoordinator.InviteType;
import net.server.world.MapleParty;
import provider.MapleData; import provider.MapleData;
import provider.MapleDataProviderFactory; import provider.MapleDataProviderFactory;
import provider.MapleDataTool; import provider.MapleDataTool;
import tools.MaplePacketCreator;
import tools.Pair;
import java.io.File;
import java.util.*;
import java.util.Map.Entry;
/** /**
* *
@@ -77,7 +71,7 @@ public class MaplePartySearchCoordinator {
MapleData data = MapleDataProviderFactory.getDataProvider(new File(System.getProperty("wzpath") + "/" + "Etc.wz")).getData("MapNeighbors.img"); MapleData data = MapleDataProviderFactory.getDataProvider(new File(System.getProperty("wzpath") + "/" + "Etc.wz")).getData("MapNeighbors.img");
if (data != null) { if (data != null) {
for (MapleData mapdata : data.getChildren()) { for (MapleData mapdata : data.getChildren()) {
int mapid = Integer.valueOf(mapdata.getName()); int mapid = Integer.parseInt(mapdata.getName());
Set<Integer> neighborMaps = new HashSet<>(); Set<Integer> neighborMaps = new HashSet<>();
mapLinks.put(mapid, neighborMaps); mapLinks.put(mapid, neighborMaps);
@@ -20,24 +20,16 @@
package net.server.coordinator.partysearch; package net.server.coordinator.partysearch;
import client.MapleCharacter; import client.MapleCharacter;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import net.server.audit.locks.MonitoredLockType; import net.server.audit.locks.MonitoredLockType;
import net.server.audit.locks.MonitoredReadLock; import net.server.audit.locks.MonitoredReadLock;
import net.server.audit.locks.MonitoredReentrantReadWriteLock; import net.server.audit.locks.MonitoredReentrantReadWriteLock;
import net.server.audit.locks.MonitoredWriteLock; import net.server.audit.locks.MonitoredWriteLock;
import net.server.audit.locks.factory.MonitoredReadLockFactory; import net.server.audit.locks.factory.MonitoredReadLockFactory;
import net.server.audit.locks.factory.MonitoredWriteLockFactory; import net.server.audit.locks.factory.MonitoredWriteLockFactory;
import tools.IntervalBuilder; import tools.IntervalBuilder;
import java.util.*;
/** /**
* *
* @author Ronan * @author Ronan
@@ -90,13 +82,9 @@ public class PartySearchStorage {
pscList.add(new PartySearchCharacter(chr)); pscList.add(new PartySearchCharacter(chr));
} }
Collections.sort(pscList, new Comparator<PartySearchCharacter>() { pscList.sort((c1, c2) -> {
@Override
public int compare(PartySearchCharacter c1, PartySearchCharacter c2)
{
int levelP1 = c1.getLevel(), levelP2 = c2.getLevel(); int levelP1 = c1.getLevel(), levelP2 = c2.getLevel();
return levelP1 > levelP2 ? 1 : (levelP1 == levelP2 ? 0 : -1); return levelP1 > levelP2 ? 1 : (levelP1 == levelP2 ? 0 : -1);
}
}); });
psWLock.lock(); psWLock.lock();
@@ -579,12 +579,7 @@ public class MapleSessionCoordinator {
public void printSessionTrace() { public void printSessionTrace() {
if (!onlineClients.isEmpty()) { if (!onlineClients.isEmpty()) {
List<Entry<Integer, MapleClient>> elist = new ArrayList<>(onlineClients.entrySet()); List<Entry<Integer, MapleClient>> elist = new ArrayList<>(onlineClients.entrySet());
Collections.sort(elist, new Comparator<Entry<Integer, MapleClient>>() { elist.sort((e1, e2) -> e1.getKey().compareTo(e2.getKey()));
@Override
public int compare(Entry<Integer, MapleClient> e1, Entry<Integer, MapleClient> e2) {
return e1.getKey().compareTo(e2.getKey());
}
});
System.out.println("Current online clients: "); System.out.println("Current online clients: ");
for (Entry<Integer, MapleClient> e : elist) { for (Entry<Integer, MapleClient> e : elist) {
@@ -605,12 +600,7 @@ public class MapleSessionCoordinator {
if (!loginRemoteHosts.isEmpty()) { if (!loginRemoteHosts.isEmpty()) {
List<Entry<String, Set<IoSession>>> elist = new ArrayList<>(loginRemoteHosts.entrySet()); List<Entry<String, Set<IoSession>>> elist = new ArrayList<>(loginRemoteHosts.entrySet());
Collections.sort(elist, new Comparator<Entry<String, Set<IoSession>>>() { elist.sort((e1, e2) -> e1.getKey().compareTo(e2.getKey()));
@Override
public int compare(Entry<String, Set<IoSession>> e1, Entry<String, Set<IoSession>> e2) {
return e1.getKey().compareTo(e2.getKey());
}
});
System.out.println("Current login sessions: "); System.out.println("Current login sessions: ");
for (Entry<String, Set<IoSession>> e : elist) { for (Entry<String, Set<IoSession>> e : elist) {
@@ -624,12 +614,7 @@ public class MapleSessionCoordinator {
if (!onlineClients.isEmpty()) { if (!onlineClients.isEmpty()) {
List<Entry<Integer, MapleClient>> elist = new ArrayList<>(onlineClients.entrySet()); List<Entry<Integer, MapleClient>> elist = new ArrayList<>(onlineClients.entrySet());
Collections.sort(elist, new Comparator<Entry<Integer, MapleClient>>() { elist.sort((e1, e2) -> e1.getKey().compareTo(e2.getKey()));
@Override
public int compare(Entry<Integer, MapleClient> e1, Entry<Integer, MapleClient> e2) {
return e1.getKey().compareTo(e2.getKey());
}
});
str += ("Current online clients:\r\n"); str += ("Current online clients:\r\n");
for (Entry<Integer, MapleClient> e : elist) { for (Entry<Integer, MapleClient> e : elist) {
@@ -650,12 +635,7 @@ public class MapleSessionCoordinator {
if (!loginRemoteHosts.isEmpty()) { if (!loginRemoteHosts.isEmpty()) {
List<Entry<String, Set<IoSession>>> elist = new ArrayList<>(loginRemoteHosts.entrySet()); List<Entry<String, Set<IoSession>>> elist = new ArrayList<>(loginRemoteHosts.entrySet());
Collections.sort(elist, new Comparator<Entry<String, Set<IoSession>>>() { elist.sort((e1, e2) -> e1.getKey().compareTo(e2.getKey()));
@Override
public int compare(Entry<String, Set<IoSession>> e1, Entry<String, Set<IoSession>> e2) {
return e1.getKey().compareTo(e2.getKey());
}
});
str += ("Current login sessions:\r\n"); str += ("Current login sessions:\r\n");
for (Entry<String, Set<IoSession>> e : elist) { for (Entry<String, Set<IoSession>> e : elist) {
@@ -22,10 +22,10 @@ package net.server.coordinator.world;
import client.MapleCharacter; import client.MapleCharacter;
import tools.Pair; import tools.Pair;
import java.util.HashSet;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.Set; import java.util.Set;
import java.util.HashSet;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
/** /**
@@ -37,7 +37,7 @@ public class MapleInviteCoordinator {
public enum InviteResult { public enum InviteResult {
ACCEPTED, ACCEPTED,
DENIED, DENIED,
NOT_FOUND; NOT_FOUND
} }
public enum InviteType { public enum InviteType {
@@ -19,30 +19,22 @@
*/ */
package net.server.coordinator.world; package net.server.coordinator.world;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import config.YamlConfig;
import client.MapleCharacter; import client.MapleCharacter;
import java.util.concurrent.ScheduledFuture; import config.YamlConfig;
import net.server.Server; import net.server.Server;
import net.server.audit.LockCollector; import net.server.audit.LockCollector;
import server.life.MapleMonster;
import server.maps.MapleMap;
import net.server.audit.locks.MonitoredLockType; import net.server.audit.locks.MonitoredLockType;
import net.server.audit.locks.MonitoredReentrantLock; import net.server.audit.locks.MonitoredReentrantLock;
import net.server.audit.locks.factory.MonitoredReentrantLockFactory; import net.server.audit.locks.factory.MonitoredReentrantLockFactory;
import server.TimerManager; import server.TimerManager;
import server.life.MapleMonster;
import server.maps.MapleMap;
import tools.Pair; import tools.Pair;
import java.util.*;
import java.util.Map.Entry;
import java.util.concurrent.ScheduledFuture;
/** /**
* *
* @author Ronan * @author Ronan
@@ -95,12 +87,9 @@ public class MapleMonsterAggroCoordinator {
try { try {
if (aggroMonitor != null) return; if (aggroMonitor != null) return;
aggroMonitor = TimerManager.getInstance().register(new Runnable() { aggroMonitor = TimerManager.getInstance().register(() -> {
@Override
public void run() {
runAggroUpdate(1); runAggroUpdate(1);
runSortLeadingCharactersAggro(); runSortLeadingCharactersAggro();
}
}, YamlConfig.config.server.MOB_STATUS_AGGRO_INTERVAL, YamlConfig.config.server.MOB_STATUS_AGGRO_INTERVAL); }, YamlConfig.config.server.MOB_STATUS_AGGRO_INTERVAL, YamlConfig.config.server.MOB_STATUS_AGGRO_INTERVAL);
} finally { } finally {
idleLock.unlock(); idleLock.unlock();
@@ -244,12 +233,8 @@ public class MapleMonsterAggroCoordinator {
} }
if (!toRemoveIdx.isEmpty()) { if (!toRemoveIdx.isEmpty()) {
Collections.sort(toRemoveIdx, new Comparator<Integer>() { // last to first indexes // last to first indexes
@Override toRemoveIdx.sort((p1, p2) -> p1 < p2 ? 1 : p1.equals(p2) ? 0 : -1);
public int compare(Integer p1, Integer p2) {
return p1 < p2 ? 1 : p1.equals(p2) ? 0 : -1;
}
});
for (int idx : toRemoveIdx) { for (int idx : toRemoveIdx) {
sortedAggro.remove(idx); sortedAggro.remove(idx);
@@ -387,12 +372,7 @@ public class MapleMonsterAggroCoordinator {
} }
private void disposeLocks() { private void disposeLocks() {
LockCollector.getInstance().registerDisposeAction(new Runnable() { LockCollector.getInstance().registerDisposeAction(() -> emptyLocks());
@Override
public void run() {
emptyLocks();
}
});
} }
private void emptyLocks() { private void emptyLocks() {
@@ -115,7 +115,7 @@ public class MapleGuild {
if (notifications.keySet().size() != chs.size()) { if (notifications.keySet().size() != chs.size()) {
notifications.clear(); notifications.clear();
for (Integer ch : chs) { for (Integer ch : chs) {
notifications.put(ch, new LinkedList<Integer>()); notifications.put(ch, new LinkedList<>());
} }
} else { } else {
for (List<Integer> l : notifications.values()) { for (List<Integer> l : notifications.values()) {
@@ -22,7 +22,9 @@
package net.server.handlers.login; package net.server.handlers.login;
import client.MapleClient; import client.MapleClient;
import client.creator.novice.*; import client.creator.novice.BeginnerCreator;
import client.creator.novice.LegendCreator;
import client.creator.novice.NoblesseCreator;
import net.AbstractMaplePacketHandler; import net.AbstractMaplePacketHandler;
import tools.FilePrinter; import tools.FilePrinter;
import tools.MaplePacketCreator; import tools.MaplePacketCreator;
@@ -66,8 +68,8 @@ public final class CreateCharHandler extends AbstractMaplePacketHandler {
int gender = slea.readByte(); int gender = slea.readByte();
int [] items = new int [] {weapon, top, bottom, shoes, hair, face}; int [] items = new int [] {weapon, top, bottom, shoes, hair, face};
for (int i = 0; i < items.length; i++){ for (int item : items) {
if (!isLegal(items[i])) { if (!isLegal(item)) {
FilePrinter.printError(FilePrinter.EXPLOITS + name + ".txt", "Owner from account '" + c.getAccountName() + "' tried to packet edit in char creation."); FilePrinter.printError(FilePrinter.EXPLOITS + name + ".txt", "Owner from account '" + c.getAccountName() + "' tried to packet edit in char creation.");
c.disconnect(true, false); c.disconnect(true, false);
return; return;
@@ -20,14 +20,6 @@
package net.server.services; package net.server.services;
import config.YamlConfig; import config.YamlConfig;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.ScheduledFuture;
import net.server.Server; import net.server.Server;
import net.server.audit.LockCollector; import net.server.audit.LockCollector;
import net.server.audit.locks.MonitoredLockType; import net.server.audit.locks.MonitoredLockType;
@@ -36,6 +28,10 @@ import net.server.audit.locks.factory.MonitoredReentrantLockFactory;
import server.TimerManager; import server.TimerManager;
import tools.Pair; import tools.Pair;
import java.util.*;
import java.util.Map.Entry;
import java.util.concurrent.ScheduledFuture;
/** /**
* *
* @author Ronan * @author Ronan
@@ -48,12 +44,7 @@ public abstract class BaseScheduler {
private ScheduledFuture<?> schedulerTask = null; private ScheduledFuture<?> schedulerTask = null;
private MonitoredReentrantLock schedulerLock; private MonitoredReentrantLock schedulerLock;
private Runnable monitorTask = new Runnable() { private Runnable monitorTask = () -> runBaseSchedule();
@Override
public void run() {
runBaseSchedule();
}
};
protected BaseScheduler(MonitoredLockType lockType) { protected BaseScheduler(MonitoredLockType lockType) {
schedulerLock = MonitoredReentrantLockFactory.createLock(lockType, true); schedulerLock = MonitoredReentrantLockFactory.createLock(lockType, true);
@@ -63,9 +54,7 @@ public abstract class BaseScheduler {
protected BaseScheduler(MonitoredLockType lockType, List<MonitoredReentrantLock> extLocks) { protected BaseScheduler(MonitoredLockType lockType, List<MonitoredReentrantLock> extLocks) {
schedulerLock = MonitoredReentrantLockFactory.createLock(lockType, true); schedulerLock = MonitoredReentrantLockFactory.createLock(lockType, true);
for(MonitoredReentrantLock lock : extLocks) { externalLocks.addAll(extLocks);
externalLocks.add(lock);
}
} }
protected void addListener(SchedulerListener listener) { protected void addListener(SchedulerListener listener) {
@@ -201,12 +190,7 @@ public abstract class BaseScheduler {
} }
private void disposeLocks() { private void disposeLocks() {
LockCollector.getInstance().registerDisposeAction(new Runnable() { LockCollector.getInstance().registerDisposeAction(() -> emptyLocks());
@Override
public void run() {
emptyLocks();
}
});
} }
private void emptyLocks() { private void emptyLocks() {
@@ -26,5 +26,5 @@ import java.util.List;
* @author Ronan * @author Ronan
*/ */
public interface SchedulerListener { public interface SchedulerListener {
public void removedScheduledEntries(List<Object> entries, boolean update); void removedScheduledEntries(List<Object> entries, boolean update);
} }
@@ -31,7 +31,7 @@ public class Service <T extends BaseService> {
public Service(Class<T> s) { public Service(Class<T> s) {
try { try {
cls = s; cls = s;
service = (BaseService) cls.getConstructor().newInstance(); service = cls.getConstructor().newInstance();
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
@@ -24,7 +24,7 @@ package net.server.services;
* @author Ronan * @author Ronan
*/ */
public interface ServiceType <T extends Enum<?>> { public interface ServiceType <T extends Enum<?>> {
public abstract Service createService(); Service createService();
public int ordinal(); int ordinal();
public T[] enumValues(); T[] enumValues();
} }
@@ -41,8 +41,8 @@ public class ServicesManager {
} }
public void shutdown() { public void shutdown() {
for (int i = 0; i < services.length; i++) { for (Service service : services) {
services[i].dispose(); service.dispose();
} }
services = null; services = null;
} }
@@ -19,10 +19,10 @@
*/ */
package net.server.services.task.channel; package net.server.services.task.channel;
import net.server.services.BaseService;
import config.YamlConfig; import config.YamlConfig;
import net.server.audit.locks.MonitoredLockType; import net.server.audit.locks.MonitoredLockType;
import net.server.services.BaseScheduler; import net.server.services.BaseScheduler;
import net.server.services.BaseService;
/** /**
* *
@@ -30,7 +30,7 @@ import net.server.services.BaseScheduler;
*/ */
public class EventService extends BaseService { public class EventService extends BaseService {
private EventScheduler eventSchedulers[] = new EventScheduler[YamlConfig.config.server.CHANNEL_LOCKS]; private EventScheduler[] eventSchedulers = new EventScheduler[YamlConfig.config.server.CHANNEL_LOCKS];
public EventService() { public EventService() {
for(int i = 0; i < YamlConfig.config.server.CHANNEL_LOCKS; i++) { for(int i = 0; i < YamlConfig.config.server.CHANNEL_LOCKS; i++) {
@@ -19,26 +19,27 @@
*/ */
package net.server.services.task.channel; package net.server.services.task.channel;
import net.server.services.BaseService;
import client.MapleCharacter; import client.MapleCharacter;
import config.YamlConfig; import config.YamlConfig;
import java.util.Collections;
import net.server.audit.LockCollector; import net.server.audit.LockCollector;
import net.server.audit.locks.MonitoredLockType; import net.server.audit.locks.MonitoredLockType;
import net.server.audit.locks.MonitoredReentrantLock; import net.server.audit.locks.MonitoredReentrantLock;
import net.server.audit.locks.factory.MonitoredReentrantLockFactory; import net.server.audit.locks.factory.MonitoredReentrantLockFactory;
import net.server.services.BaseScheduler; import net.server.services.BaseScheduler;
import net.server.services.BaseService;
import server.maps.MapleMap; import server.maps.MapleMap;
import tools.MaplePacketCreator; import tools.MaplePacketCreator;
import java.util.Collections;
/** /**
* *
* @author Ronan * @author Ronan
*/ */
public class FaceExpressionService extends BaseService { public class FaceExpressionService extends BaseService {
private FaceExpressionScheduler faceExpressionSchedulers[] = new FaceExpressionScheduler[YamlConfig.config.server.CHANNEL_LOCKS]; private FaceExpressionScheduler[] faceExpressionSchedulers = new FaceExpressionScheduler[YamlConfig.config.server.CHANNEL_LOCKS];
private MonitoredReentrantLock faceLock[] = new MonitoredReentrantLock[YamlConfig.config.server.CHANNEL_LOCKS]; private MonitoredReentrantLock[] faceLock = new MonitoredReentrantLock[YamlConfig.config.server.CHANNEL_LOCKS];
public FaceExpressionService() { public FaceExpressionService() {
for(int i = 0; i < YamlConfig.config.server.CHANNEL_LOCKS; i++) { for(int i = 0; i < YamlConfig.config.server.CHANNEL_LOCKS; i++) {
@@ -54,12 +55,7 @@ public class FaceExpressionService extends BaseService {
} }
private void disposeLocks() { private void disposeLocks() {
LockCollector.getInstance().registerDisposeAction(new Runnable() { LockCollector.getInstance().registerDisposeAction(() -> emptyLocks());
@Override
public void run() {
emptyLocks();
}
});
} }
@Override @Override
@@ -77,13 +73,10 @@ public class FaceExpressionService extends BaseService {
public void registerFaceExpression(final MapleMap map, final MapleCharacter chr, int emote) { public void registerFaceExpression(final MapleMap map, final MapleCharacter chr, int emote) {
int lockid = getChannelSchedulerIndex(map.getId()); int lockid = getChannelSchedulerIndex(map.getId());
Runnable cancelAction = new Runnable() { Runnable cancelAction = () -> {
@Override
public void run() {
if(chr.isLoggedinWorld()) { if(chr.isLoggedinWorld()) {
map.broadcastMessage(chr, MaplePacketCreator.facialExpression(chr, 0), false); map.broadcastMessage(chr, MaplePacketCreator.facialExpression(chr, 0), false);
} }
}
}; };
faceLock[lockid].lock(); faceLock[lockid].lock();
@@ -19,18 +19,16 @@
*/ */
package net.server.services.task.channel; package net.server.services.task.channel;
import net.server.services.BaseService;
import config.YamlConfig; import config.YamlConfig;
import net.server.audit.locks.MonitoredLockType;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import net.server.audit.LockCollector; import net.server.audit.LockCollector;
import net.server.audit.locks.MonitoredLockType;
import net.server.audit.locks.MonitoredReentrantLock; import net.server.audit.locks.MonitoredReentrantLock;
import net.server.audit.locks.factory.MonitoredReentrantLockFactory; import net.server.audit.locks.factory.MonitoredReentrantLockFactory;
import net.server.services.BaseScheduler; import net.server.services.BaseScheduler;
import net.server.services.SchedulerListener; import net.server.services.BaseService;
import java.util.HashSet;
import java.util.Set;
/** /**
* *
@@ -38,7 +36,7 @@ import net.server.services.SchedulerListener;
*/ */
public class MobAnimationService extends BaseService { public class MobAnimationService extends BaseService {
private MobAnimationScheduler mobAnimationSchedulers[] = new MobAnimationScheduler[YamlConfig.config.server.CHANNEL_LOCKS]; private MobAnimationScheduler[] mobAnimationSchedulers = new MobAnimationScheduler[YamlConfig.config.server.CHANNEL_LOCKS];
public MobAnimationService() { public MobAnimationService() {
for(int i = 0; i < YamlConfig.config.server.CHANNEL_LOCKS; i++) { for(int i = 0; i < YamlConfig.config.server.CHANNEL_LOCKS; i++) {
@@ -60,10 +58,8 @@ public class MobAnimationService extends BaseService {
return mobAnimationSchedulers[getChannelSchedulerIndex(mapid)].registerAnimationMode(mobHash, delay); return mobAnimationSchedulers[getChannelSchedulerIndex(mapid)].registerAnimationMode(mobHash, delay);
} }
private static Runnable r = new Runnable() { // do nothing
@Override private static Runnable r = () -> {};
public void run() {} // do nothing
};
private class MobAnimationScheduler extends BaseScheduler { private class MobAnimationScheduler extends BaseScheduler {
Set<Integer> onAnimationMobs = new HashSet<>(1000); Set<Integer> onAnimationMobs = new HashSet<>(1000);
@@ -72,9 +68,7 @@ public class MobAnimationService extends BaseService {
public MobAnimationScheduler() { public MobAnimationScheduler() {
super(MonitoredLockType.CHANNEL_MOBACTION); super(MonitoredLockType.CHANNEL_MOBACTION);
super.addListener(new SchedulerListener() { super.addListener((toRemove, update) -> {
@Override
public void removedScheduledEntries(List<Object> toRemove, boolean update) {
animationLock.lock(); animationLock.lock();
try { try {
for(Object hashObj : toRemove) { for(Object hashObj : toRemove) {
@@ -84,7 +78,6 @@ public class MobAnimationService extends BaseService {
} finally { } finally {
animationLock.unlock(); animationLock.unlock();
} }
}
}); });
} }
@@ -110,12 +103,7 @@ public class MobAnimationService extends BaseService {
} }
private void disposeLocks() { private void disposeLocks() {
LockCollector.getInstance().registerDisposeAction(new Runnable() { LockCollector.getInstance().registerDisposeAction(() -> emptyLocks());
@Override
public void run() {
emptyLocks();
}
});
} }
private void emptyLocks() { private void emptyLocks() {
@@ -19,10 +19,10 @@
*/ */
package net.server.services.task.channel; package net.server.services.task.channel;
import net.server.services.BaseService;
import config.YamlConfig; import config.YamlConfig;
import net.server.audit.locks.MonitoredLockType; import net.server.audit.locks.MonitoredLockType;
import net.server.services.BaseScheduler; import net.server.services.BaseScheduler;
import net.server.services.BaseService;
/** /**
* *
@@ -30,7 +30,7 @@ import net.server.services.BaseScheduler;
*/ */
public class MobClearSkillService extends BaseService { public class MobClearSkillService extends BaseService {
private MobClearSkillScheduler mobClearSkillSchedulers[] = new MobClearSkillScheduler[YamlConfig.config.server.CHANNEL_LOCKS]; private MobClearSkillScheduler[] mobClearSkillSchedulers = new MobClearSkillScheduler[YamlConfig.config.server.CHANNEL_LOCKS];
public MobClearSkillService() { public MobClearSkillService() {
for(int i = 0; i < YamlConfig.config.server.CHANNEL_LOCKS; i++) { for(int i = 0; i < YamlConfig.config.server.CHANNEL_LOCKS; i++) {
@@ -19,10 +19,10 @@
*/ */
package net.server.services.task.channel; package net.server.services.task.channel;
import net.server.services.BaseService;
import config.YamlConfig; import config.YamlConfig;
import net.server.audit.locks.MonitoredLockType; import net.server.audit.locks.MonitoredLockType;
import net.server.services.BaseScheduler; import net.server.services.BaseScheduler;
import net.server.services.BaseService;
/** /**
* *
@@ -30,7 +30,7 @@ import net.server.services.BaseScheduler;
*/ */
public class MobMistService extends BaseService { public class MobMistService extends BaseService {
private MobMistScheduler mobMistSchedulers[] = new MobMistScheduler[YamlConfig.config.server.CHANNEL_LOCKS]; private MobMistScheduler[] mobMistSchedulers = new MobMistScheduler[YamlConfig.config.server.CHANNEL_LOCKS];
public MobMistService() { public MobMistService() {
for(int i = 0; i < YamlConfig.config.server.CHANNEL_LOCKS; i++) { for(int i = 0; i < YamlConfig.config.server.CHANNEL_LOCKS; i++) {
@@ -19,19 +19,19 @@
*/ */
package net.server.services.task.channel; package net.server.services.task.channel;
import net.server.services.BaseService;
import client.status.MonsterStatusEffect; import client.status.MonsterStatusEffect;
import config.YamlConfig; import config.YamlConfig;
import java.util.HashMap;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import net.server.audit.LockCollector; import net.server.audit.LockCollector;
import net.server.audit.locks.MonitoredLockType; import net.server.audit.locks.MonitoredLockType;
import net.server.audit.locks.MonitoredReentrantLock; import net.server.audit.locks.MonitoredReentrantLock;
import net.server.audit.locks.factory.MonitoredReentrantLockFactory; import net.server.audit.locks.factory.MonitoredReentrantLockFactory;
import net.server.services.BaseScheduler; import net.server.services.BaseScheduler;
import net.server.services.SchedulerListener; import net.server.services.BaseService;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/** /**
* *
@@ -39,7 +39,7 @@ import net.server.services.SchedulerListener;
*/ */
public class MobStatusService extends BaseService { public class MobStatusService extends BaseService {
private MobStatusScheduler mobStatusSchedulers[] = new MobStatusScheduler[YamlConfig.config.server.CHANNEL_LOCKS]; private MobStatusScheduler[] mobStatusSchedulers = new MobStatusScheduler[YamlConfig.config.server.CHANNEL_LOCKS];
public MobStatusService() { public MobStatusService() {
for(int i = 0; i < YamlConfig.config.server.CHANNEL_LOCKS; i++) { for(int i = 0; i < YamlConfig.config.server.CHANNEL_LOCKS; i++) {
@@ -97,9 +97,7 @@ public class MobStatusService extends BaseService {
public MobStatusScheduler() { public MobStatusScheduler() {
super(MonitoredLockType.CHANNEL_MOBSTATUS); super(MonitoredLockType.CHANNEL_MOBSTATUS);
super.addListener(new SchedulerListener() { super.addListener((toRemove, update) -> {
@Override
public void removedScheduledEntries(List<Object> toRemove, boolean update) {
List<Runnable> toRun = new ArrayList<>(); List<Runnable> toRun = new ArrayList<>();
overtimeStatusLock.lock(); overtimeStatusLock.lock();
@@ -123,7 +121,6 @@ public class MobStatusService extends BaseService {
for(Runnable r : toRun) { for(Runnable r : toRun) {
r.run(); r.run();
} }
}
}); });
} }
@@ -153,12 +150,7 @@ public class MobStatusService extends BaseService {
} }
private void disposeLocks() { private void disposeLocks() {
LockCollector.getInstance().registerDisposeAction(new Runnable() { LockCollector.getInstance().registerDisposeAction(() -> emptyLocks());
@Override
public void run() {
emptyLocks();
}
});
} }
private void emptyLocks() { private void emptyLocks() {
@@ -19,10 +19,10 @@
*/ */
package net.server.services.task.channel; package net.server.services.task.channel;
import net.server.services.BaseService;
import config.YamlConfig; import config.YamlConfig;
import net.server.audit.locks.MonitoredLockType; import net.server.audit.locks.MonitoredLockType;
import net.server.services.BaseScheduler; import net.server.services.BaseScheduler;
import net.server.services.BaseService;
/** /**
* *
@@ -30,7 +30,7 @@ import net.server.services.BaseScheduler;
*/ */
public class OverallService extends BaseService { // thanks Alex for suggesting a refactor over the several channel schedulers unnecessarily populating the Channel class public class OverallService extends BaseService { // thanks Alex for suggesting a refactor over the several channel schedulers unnecessarily populating the Channel class
private OverallScheduler channelSchedulers[] = new OverallScheduler[YamlConfig.config.server.CHANNEL_LOCKS]; private OverallScheduler[] channelSchedulers = new OverallScheduler[YamlConfig.config.server.CHANNEL_LOCKS];
public OverallService() { public OverallService() {
for(int i = 0; i < YamlConfig.config.server.CHANNEL_LOCKS; i++) { for(int i = 0; i < YamlConfig.config.server.CHANNEL_LOCKS; i++) {
@@ -29,7 +29,7 @@ import java.util.List;
public final class MapleMessenger { public final class MapleMessenger {
private int id; private int id;
private List<MapleMessengerCharacter> members = new ArrayList<MapleMessengerCharacter>(3); private List<MapleMessengerCharacter> members = new ArrayList<>(3);
private boolean[] pos = new boolean[3]; private boolean[] pos = new boolean[3];
public MapleMessenger(int id, MapleMessengerCharacter chrfor) { public MapleMessenger(int id, MapleMessengerCharacter chrfor) {
+6 -21
View File
@@ -24,17 +24,9 @@ package net.server.world;
import client.MapleCharacter; import client.MapleCharacter;
import client.MapleClient; import client.MapleClient;
import config.YamlConfig; import config.YamlConfig;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.HashMap;
import java.util.Map.Entry;
import java.util.Map;
import java.util.Comparator;
import net.server.audit.LockCollector; import net.server.audit.LockCollector;
import net.server.audit.locks.MonitoredReentrantLock;
import net.server.audit.locks.MonitoredLockType; import net.server.audit.locks.MonitoredLockType;
import net.server.audit.locks.MonitoredReentrantLock;
import net.server.audit.locks.factory.MonitoredReentrantLockFactory; import net.server.audit.locks.factory.MonitoredReentrantLockFactory;
import net.server.coordinator.matchchecker.MapleMatchCheckerCoordinator; import net.server.coordinator.matchchecker.MapleMatchCheckerCoordinator;
import net.server.coordinator.matchchecker.MatchCheckerListenerFactory.MatchCheckerType; import net.server.coordinator.matchchecker.MatchCheckerListenerFactory.MatchCheckerType;
@@ -44,6 +36,9 @@ import server.maps.MapleMap;
import server.partyquest.MonsterCarnival; import server.partyquest.MonsterCarnival;
import tools.MaplePacketCreator; import tools.MaplePacketCreator;
import java.util.*;
import java.util.Map.Entry;
public class MapleParty { public class MapleParty {
private int id; private int id;
@@ -216,12 +211,7 @@ public class MapleParty {
lock.unlock(); lock.unlock();
} }
Collections.sort(histList, new Comparator<Entry<Integer, Integer>>() { histList.sort((o1, o2) -> (o1.getValue()).compareTo(o2.getValue()));
@Override
public int compare(Entry<Integer, Integer> o1, Entry<Integer, Integer> o2) {
return (o1.getValue()).compareTo(o2.getValue());
}
});
List<Integer> histSort = new LinkedList<>(); List<Integer> histSort = new LinkedList<>();
for (Entry<Integer, Integer> e : histList) { for (Entry<Integer, Integer> e : histList) {
@@ -292,12 +282,7 @@ public class MapleParty {
} }
public void disposeLocks() { public void disposeLocks() {
LockCollector.getInstance().registerDisposeAction(new Runnable() { LockCollector.getInstance().registerDisposeAction(() -> emptyLocks());
@Override
public void run() {
emptyLocks();
}
});
} }
private void emptyLocks() { private void emptyLocks() {
+17 -44
View File
@@ -138,7 +138,7 @@ public class World {
private ScheduledFuture<?> timedMapObjectsSchedule; private ScheduledFuture<?> timedMapObjectsSchedule;
private MonitoredReentrantLock timedMapObjectLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.WORLD_MAPOBJS, true); private MonitoredReentrantLock timedMapObjectLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.WORLD_MAPOBJS, true);
private Map<MapleCharacter, Integer> fishingAttempters = Collections.synchronizedMap(new WeakHashMap<MapleCharacter, Integer>()); private Map<MapleCharacter, Integer> fishingAttempters = Collections.synchronizedMap(new WeakHashMap<>());
private ScheduledFuture<?> charactersSchedule; private ScheduledFuture<?> charactersSchedule;
private ScheduledFuture<?> marriagesSchedule; private ScheduledFuture<?> marriagesSchedule;
@@ -165,7 +165,7 @@ public class World {
mountUpdate = petUpdate; mountUpdate = petUpdate;
for (int i = 0; i < 9; i++) { for (int i = 0; i < 9; i++) {
cashItemBought.add(new LinkedHashMap<Integer, Integer>()); cashItemBought.add(new LinkedHashMap<>());
} }
TimerManager tman = TimerManager.getInstance(); TimerManager tman = TimerManager.getInstance();
@@ -457,16 +457,9 @@ public class World {
private static List<Entry<Integer, SortedMap<Integer, MapleCharacter>>> getSortedAccountCharacterView(Map<Integer, SortedMap<Integer, MapleCharacter>> map) { private static List<Entry<Integer, SortedMap<Integer, MapleCharacter>>> getSortedAccountCharacterView(Map<Integer, SortedMap<Integer, MapleCharacter>> map) {
List<Entry<Integer, SortedMap<Integer, MapleCharacter>>> list = new ArrayList<>(map.size()); List<Entry<Integer, SortedMap<Integer, MapleCharacter>>> list = new ArrayList<>(map.size());
for(Entry<Integer, SortedMap<Integer, MapleCharacter>> e : map.entrySet()) { list.addAll(map.entrySet());
list.add(e);
}
Collections.sort(list, new Comparator<Entry<Integer, SortedMap<Integer, MapleCharacter>>>() { list.sort((o1, o2) -> o1.getKey() - o2.getKey());
@Override
public int compare(Entry<Integer, SortedMap<Integer, MapleCharacter>> o1, Entry<Integer, SortedMap<Integer, MapleCharacter>> o2) {
return o1.getKey() - o2.getKey();
}
});
return list; return list;
} }
@@ -488,9 +481,7 @@ public class World {
} }
for (Entry<Integer, SortedMap<Integer, MapleCharacter>> e : getSortedAccountCharacterView(accChars)) { for (Entry<Integer, SortedMap<Integer, MapleCharacter>> e : getSortedAccountCharacterView(accChars)) {
for (MapleCharacter chr : e.getValue().values()) { chrList.addAll(e.getValue().values());
chrList.add(chr);
}
} }
return chrList; return chrList;
@@ -506,7 +497,7 @@ public class World {
if(accChars != null) { if(accChars != null) {
chrList = new LinkedList<>(accChars.values()); chrList = new LinkedList<>(accChars.values());
} else { } else {
accountChars.put(accountId, new TreeMap<Integer, MapleCharacter>()); accountChars.put(accountId, new TreeMap<>());
chrList = null; chrList = null;
} }
} finally { } finally {
@@ -579,7 +570,7 @@ public class World {
public Collection<MapleFamily> getFamilies() { public Collection<MapleFamily> getFamilies() {
synchronized(families) { synchronized(families) {
return Collections.unmodifiableCollection((Collection<MapleFamily>) families.values()); return Collections.unmodifiableCollection(families.values());
} }
} }
@@ -1246,7 +1237,7 @@ public class World {
updateBuddies(characterId, channel, buddies, true); updateBuddies(characterId, channel, buddies, true);
} }
public void loggedOn(String name, int characterId, int channel, int buddies[]) { public void loggedOn(String name, int characterId, int channel, int[] buddies) {
updateBuddies(characterId, channel, buddies, false); updateBuddies(characterId, channel, buddies, false);
} }
@@ -1360,17 +1351,11 @@ public class World {
private List<Integer> getMostSellerOnTab(List<Pair<Integer, Integer>> tabSellers) { private List<Integer> getMostSellerOnTab(List<Pair<Integer, Integer>> tabSellers) {
List<Integer> tabLeaderboards; List<Integer> tabLeaderboards;
Comparator<Pair<Integer, Integer>> comparator = new Comparator<Pair<Integer, Integer>>() { // descending order // descending order
@Override Comparator<Pair<Integer, Integer>> comparator = (p1, p2) -> p2.getRight().compareTo(p1.getRight());
public int compare(Pair<Integer, Integer> p1, Pair<Integer, Integer> p2) {
return p2.getRight().compareTo(p1.getRight());
}
};
PriorityQueue<Pair<Integer, Integer>> queue = new PriorityQueue<>(Math.max(1, tabSellers.size()), comparator); PriorityQueue<Pair<Integer, Integer>> queue = new PriorityQueue<>(Math.max(1, tabSellers.size()), comparator);
for(Pair<Integer, Integer> p : tabSellers) { queue.addAll(tabSellers);
queue.add(p);
}
tabLeaderboards = new LinkedList<>(); tabLeaderboards = new LinkedList<>();
for(int i = 0; i < Math.min(tabSellers.size(), 5); i++) { for(int i = 0; i < Math.min(tabSellers.size(), 5); i++) {
@@ -1460,7 +1445,7 @@ public class World {
MapleCharacter chr = this.getPlayerStorage().getCharacterById(dp.getKey() / 4); MapleCharacter chr = this.getPlayerStorage().getCharacterById(dp.getKey() / 4);
if(chr == null || !chr.isLoggedinWorld()) continue; if(chr == null || !chr.isLoggedinWorld()) continue;
Integer dpVal = dp.getValue() + 1; int dpVal = dp.getValue() + 1;
if(dpVal == YamlConfig.config.server.PET_EXHAUST_COUNT) { if(dpVal == YamlConfig.config.server.PET_EXHAUST_COUNT) {
chr.runFullnessSchedule(dp.getKey() % 4); chr.runFullnessSchedule(dp.getKey() % 4);
dpVal = 0; dpVal = 0;
@@ -1557,9 +1542,7 @@ public class World {
List<MaplePlayerShop> psList = new ArrayList<>(); List<MaplePlayerShop> psList = new ArrayList<>();
activePlayerShopsLock.lock(); activePlayerShopsLock.lock();
try { try {
for(MaplePlayerShop mps : activePlayerShops.values()) { psList.addAll(activePlayerShops.values());
psList.add(mps);
}
return psList; return psList;
} finally { } finally {
@@ -1841,7 +1824,7 @@ public class World {
List<MaplePlayerShopItem> itemBundles = hm.sendAvailableBundles(itemid); List<MaplePlayerShopItem> itemBundles = hm.sendAvailableBundles(itemid);
for(MaplePlayerShopItem mpsi : itemBundles) { for(MaplePlayerShopItem mpsi : itemBundles) {
hmsAvailable.add(new Pair<>(mpsi, (AbstractMapleMapObject) hm)); hmsAvailable.add(new Pair<>(mpsi, hm));
} }
} }
@@ -1849,16 +1832,11 @@ public class World {
List<MaplePlayerShopItem> itemBundles = ps.sendAvailableBundles(itemid); List<MaplePlayerShopItem> itemBundles = ps.sendAvailableBundles(itemid);
for(MaplePlayerShopItem mpsi : itemBundles) { for(MaplePlayerShopItem mpsi : itemBundles) {
hmsAvailable.add(new Pair<>(mpsi, (AbstractMapleMapObject) ps)); hmsAvailable.add(new Pair<>(mpsi, ps));
} }
} }
Collections.sort(hmsAvailable, new Comparator<Pair<MaplePlayerShopItem, AbstractMapleMapObject>>() { hmsAvailable.sort((p1, p2) -> p1.getLeft().getPrice() - p2.getLeft().getPrice());
@Override
public int compare(Pair<MaplePlayerShopItem, AbstractMapleMapObject> p1, Pair<MaplePlayerShopItem, AbstractMapleMapObject> p2) {
return p1.getLeft().getPrice() - p2.getLeft().getPrice();
}
});
hmsAvailable.subList(0, Math.min(hmsAvailable.size(), 200)); //truncates the list to have up to 200 elements hmsAvailable.subList(0, Math.min(hmsAvailable.size(), 200)); //truncates the list to have up to 200 elements
return hmsAvailable; return hmsAvailable;
@@ -2049,12 +2027,7 @@ public class World {
} }
private void disposeLocks() { private void disposeLocks() {
LockCollector.getInstance().registerDisposeAction(new Runnable() { LockCollector.getInstance().registerDisposeAction(() -> emptyLocks());
@Override
public void run() {
emptyLocks();
}
});
} }
private void emptyLocks() { private void emptyLocks() {
+7 -6
View File
@@ -21,14 +21,15 @@
*/ */
package provider; package provider;
import java.util.List;
import provider.wz.MapleDataType; import provider.wz.MapleDataType;
import java.util.List;
public interface MapleData extends MapleDataEntity, Iterable<MapleData> { public interface MapleData extends MapleDataEntity, Iterable<MapleData> {
@Override @Override
public String getName(); String getName();
public MapleDataType getType(); MapleDataType getType();
public List<MapleData> getChildren(); List<MapleData> getChildren();
public MapleData getChildByPath(String path); MapleData getChildByPath(String path);
public Object getData(); Object getData();
} }
@@ -28,7 +28,7 @@ import java.util.List;
* @author Matze * @author Matze
*/ */
public interface MapleDataDirectoryEntry extends MapleDataEntry { public interface MapleDataDirectoryEntry extends MapleDataEntry {
public List<MapleDataDirectoryEntry> getSubdirectories(); List<MapleDataDirectoryEntry> getSubdirectories();
public List<MapleDataFileEntry> getFiles(); List<MapleDataFileEntry> getFiles();
public MapleDataEntry getEntry(String name); MapleDataEntry getEntry(String name);
} }
+2 -2
View File
@@ -26,6 +26,6 @@ package provider;
* @author Matze * @author Matze
*/ */
public interface MapleDataEntity { public interface MapleDataEntity {
public String getName(); String getName();
public MapleDataEntity getParent(); MapleDataEntity getParent();
} }

Some files were not shown because too many files have changed in this diff Show More