Merge pull request #16 from P0nk/inspection-cleanup
Clean up code using IntelliJ code inspection
This commit is contained in:
@@ -24,8 +24,8 @@ package client;
|
||||
* @author Ronan
|
||||
*/
|
||||
public interface AbstractCharacterListener {
|
||||
public void onHpChanged(int oldHp);
|
||||
public void onHpmpPoolUpdate();
|
||||
public void onStatUpdate();
|
||||
public void onAnnounceStatPoolUpdate();
|
||||
void onHpChanged(int oldHp);
|
||||
void onHpmpPoolUpdate();
|
||||
void onStatUpdate();
|
||||
void onAnnounceStatPoolUpdate();
|
||||
}
|
||||
|
||||
@@ -21,10 +21,6 @@ package client;
|
||||
|
||||
import config.YamlConfig;
|
||||
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.MonitoredReadLock;
|
||||
import net.server.audit.locks.MonitoredReentrantReadWriteLock;
|
||||
@@ -35,6 +31,11 @@ import net.server.audit.locks.factory.MonitoredWriteLockFactory;
|
||||
import server.maps.AbstractAnimatedMapleMapObject;
|
||||
import server.maps.MapleMap;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.locks.Lock;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author RonanLana
|
||||
@@ -315,7 +316,7 @@ public abstract class AbstractMapleCharacterObject extends AbstractAnimatedMaple
|
||||
short newHp = (short) (hpMpPool >> 48);
|
||||
short newMp = (short) (hpMpPool >> 32);
|
||||
short newMaxHp = (short) (hpMpPool >> 16);
|
||||
short newMaxMp = (short) (hpMpPool.shortValue());
|
||||
short newMaxMp = hpMpPool.shortValue();
|
||||
|
||||
if (newMaxHp != Short.MIN_VALUE) {
|
||||
if (newMaxHp < 50) {
|
||||
@@ -354,7 +355,7 @@ public abstract class AbstractMapleCharacterObject extends AbstractAnimatedMaple
|
||||
short newStr = (short) (strDexIntLuk >> 48);
|
||||
short newDex = (short) (strDexIntLuk >> 32);
|
||||
short newInt = (short) (strDexIntLuk >> 16);
|
||||
short newLuk = (short) (strDexIntLuk.shortValue());
|
||||
short newLuk = strDexIntLuk.shortValue();
|
||||
|
||||
if (newStr >= 4) {
|
||||
setStr(newStr);
|
||||
@@ -386,7 +387,7 @@ public abstract class AbstractMapleCharacterObject extends AbstractAnimatedMaple
|
||||
|
||||
if (newSp != null) {
|
||||
short sp = (short) (newSp >> 16);
|
||||
short skillbook = (short) (newSp.shortValue());
|
||||
short skillbook = newSp.shortValue();
|
||||
|
||||
setRemainingSp(sp, skillbook);
|
||||
statUpdates.put(MapleStat.AVAILABLESP, remainingSp[skillbook]);
|
||||
|
||||
@@ -21,20 +21,16 @@
|
||||
*/
|
||||
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 tools.DatabaseConnection;
|
||||
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 enum BuddyOperation {
|
||||
ADDED, DELETED
|
||||
@@ -53,7 +49,7 @@ public class BuddyList {
|
||||
|
||||
public boolean contains(int characterId) {
|
||||
synchronized(buddies) {
|
||||
return buddies.containsKey(Integer.valueOf(characterId));
|
||||
return buddies.containsKey(characterId);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -80,7 +76,7 @@ public class BuddyList {
|
||||
|
||||
public BuddylistEntry get(int characterId) {
|
||||
synchronized(buddies) {
|
||||
return buddies.get(Integer.valueOf(characterId));
|
||||
return buddies.get(characterId);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -97,13 +93,13 @@ public class BuddyList {
|
||||
|
||||
public void put(BuddylistEntry entry) {
|
||||
synchronized(buddies) {
|
||||
buddies.put(Integer.valueOf(entry.getCharacterId()), entry);
|
||||
buddies.put(entry.getCharacterId(), entry);
|
||||
}
|
||||
}
|
||||
|
||||
public void remove(int characterId) {
|
||||
synchronized(buddies) {
|
||||
buddies.remove(Integer.valueOf(characterId));
|
||||
buddies.remove(characterId);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -121,7 +117,7 @@ public class BuddyList {
|
||||
|
||||
public int[] getBuddyIds() {
|
||||
synchronized(buddies) {
|
||||
int buddyIds[] = new int[buddies.size()];
|
||||
int[] buddyIds = new int[buddies.size()];
|
||||
int i = 0;
|
||||
for (BuddylistEntry ble : buddies.values()) {
|
||||
buddyIds[i++] = ble.getCharacterId();
|
||||
|
||||
@@ -602,7 +602,7 @@ public class MapleClient {
|
||||
long ipAddress = 0;
|
||||
for (int i = 0; i < 4; 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;
|
||||
}
|
||||
@@ -807,12 +807,7 @@ public class MapleClient {
|
||||
|
||||
public final void disconnect(final boolean shutdown, final boolean cashshop) {
|
||||
if (canDisconnect()) {
|
||||
ThreadManager.getInstance().newTask(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
disconnectInternal(shutdown, cashshop);
|
||||
}
|
||||
});
|
||||
ThreadManager.getInstance().newTask(() -> disconnectInternal(shutdown, cashshop));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -21,6 +21,13 @@
|
||||
*/
|
||||
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.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
@@ -32,13 +39,6 @@ import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
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
|
||||
@@ -49,7 +49,7 @@ public class MapleFamily {
|
||||
private static final AtomicInteger familyIDCounter = new AtomicInteger();
|
||||
|
||||
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 String name;
|
||||
private String preceptsMessage = "";
|
||||
@@ -184,7 +184,7 @@ public class MapleFamily {
|
||||
|
||||
public static void loadAllFamilies() {
|
||||
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")) {
|
||||
ResultSet rsEntries = psEntries.executeQuery();
|
||||
while(rsEntries.next()) { // can be optimized
|
||||
@@ -236,7 +236,7 @@ public class MapleFamily {
|
||||
if(senior != null) {
|
||||
familyEntry.setSenior(family.getEntryByID(seniorid), false);
|
||||
} 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.setTodaysRep(todaysRep);
|
||||
|
||||
@@ -21,14 +21,11 @@
|
||||
*/
|
||||
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 tools.StringUtil;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Matze
|
||||
@@ -61,8 +58,8 @@ public class MapleQuestStatus {
|
||||
private short questID;
|
||||
private Status status;
|
||||
//private boolean updated; //maybe this can be of use for someone?
|
||||
private final Map<Integer, String> progress = new LinkedHashMap<Integer, String>();
|
||||
private final List<Integer> medalProgress = new LinkedList<Integer>();
|
||||
private final Map<Integer, String> progress = new LinkedHashMap<>();
|
||||
private final List<Integer> medalProgress = new LinkedList<>();
|
||||
private int npc;
|
||||
private long completionTime, expirationTime;
|
||||
private int forfeited = 0, completed = 0;
|
||||
|
||||
@@ -21,78 +21,22 @@
|
||||
*/
|
||||
package client;
|
||||
|
||||
import constants.skills.Aran;
|
||||
import constants.skills.Archer;
|
||||
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.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 constants.skills.*;
|
||||
import provider.*;
|
||||
import server.MapleStatEffect;
|
||||
import server.life.Element;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.HashMap;
|
||||
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 {
|
||||
private static Map<Integer, Skill> skills = new HashMap<>();
|
||||
private static MapleDataProvider datasource = MapleDataProviderFactory.getDataProvider(MapleDataProviderFactory.fileInWZPath("Skill.wz"));
|
||||
|
||||
public static Skill getSkill(int id) {
|
||||
if (!skills.isEmpty()) {
|
||||
return skills.get(Integer.valueOf(id));
|
||||
return skills.get(id);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@@ -389,10 +333,10 @@ public class SkillFactory {
|
||||
public static String getSkillName(int skillid) {
|
||||
MapleData data = MapleDataProviderFactory.getDataProvider(new File(System.getProperty("wzpath") + "/" + "String.wz")).getData("Skill.img");
|
||||
StringBuilder skill = new StringBuilder();
|
||||
skill.append(String.valueOf(skillid));
|
||||
skill.append(skillid);
|
||||
if (skill.length() == 4) {
|
||||
skill.delete(0, 4);
|
||||
skill.append("000").append(String.valueOf(skillid));
|
||||
skill.append("000").append(skillid);
|
||||
}
|
||||
if (data.getChildByPath(skill.toString()) != null) {
|
||||
for (MapleData skilldata : data.getChildByPath(skill.toString()).getChildren()) {
|
||||
|
||||
@@ -7,11 +7,12 @@ package client.autoban;
|
||||
|
||||
import client.MapleCharacter;
|
||||
import config.YamlConfig;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import net.server.Server;
|
||||
import tools.FilePrinter;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author kevintjuh93
|
||||
@@ -23,9 +24,9 @@ public class AutobanManager {
|
||||
private int misses = 0;
|
||||
private int lastmisses = 0;
|
||||
private int samemisscount = 0;
|
||||
private long spam[] = new long[20];
|
||||
private int timestamp[] = new int[20];
|
||||
private byte timestampcounter[] = new byte[20];
|
||||
private long[] spam = new long[20];
|
||||
private int[] timestamp = new int[20];
|
||||
private byte[] timestampcounter = new byte[20];
|
||||
|
||||
|
||||
public AutobanManager(MapleCharacter chr) {
|
||||
|
||||
@@ -48,7 +48,7 @@ public abstract class Command {
|
||||
this.rank = rank;
|
||||
}
|
||||
|
||||
protected String joinStringFrom(String arr[], int start) {
|
||||
protected String joinStringFrom(String[] arr, int start) {
|
||||
StringBuilder builder = new StringBuilder();
|
||||
for (int i = start; i < arr.length; i++) {
|
||||
builder.append(arr[i]);
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
*/
|
||||
package client.command;
|
||||
|
||||
import client.MapleClient;
|
||||
import client.command.commands.gm0.*;
|
||||
import client.command.commands.gm1.*;
|
||||
import client.command.commands.gm2.*;
|
||||
@@ -30,18 +31,11 @@ import client.command.commands.gm3.*;
|
||||
import client.command.commands.gm4.*;
|
||||
import client.command.commands.gm5.*;
|
||||
import client.command.commands.gm6.*;
|
||||
|
||||
import client.MapleClient;
|
||||
|
||||
import tools.FilePrinter;
|
||||
import tools.Pair;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Arrays;
|
||||
import java.util.Calendar;
|
||||
import java.util.HashMap;
|
||||
import java.util.*;
|
||||
|
||||
public class CommandsExecutor {
|
||||
|
||||
@@ -181,7 +175,7 @@ public class CommandsExecutor {
|
||||
}
|
||||
|
||||
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("droplimit", DropLimitCommand.class);
|
||||
@@ -217,7 +211,7 @@ public class CommandsExecutor {
|
||||
|
||||
|
||||
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("whodrops", 1, WhoDropsCommand.class);
|
||||
@@ -229,7 +223,7 @@ public class CommandsExecutor {
|
||||
|
||||
|
||||
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("whereami", 2, WhereaMiCommand.class);
|
||||
@@ -272,7 +266,7 @@ public class CommandsExecutor {
|
||||
}
|
||||
|
||||
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("fly", 3, FlyCommand.class);
|
||||
@@ -338,7 +332,7 @@ public class CommandsExecutor {
|
||||
}
|
||||
|
||||
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("proitem", 4, ProItemCommand.class);
|
||||
@@ -369,7 +363,7 @@ public class CommandsExecutor {
|
||||
}
|
||||
|
||||
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("set", 5, SetCommand.class);
|
||||
@@ -382,7 +376,7 @@ public class CommandsExecutor {
|
||||
}
|
||||
|
||||
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("warpworld", 6, WarpWorldCommand.class);
|
||||
|
||||
@@ -29,7 +29,10 @@ import client.command.Command;
|
||||
import constants.game.GameConstants;
|
||||
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;
|
||||
|
||||
public class GotoCommand extends Command {
|
||||
@@ -65,13 +68,7 @@ public class GotoCommand extends Command {
|
||||
public static String GOTO_AREAS_INFO = "";
|
||||
|
||||
private static void sortGotoEntries(List<Entry<String, Integer>> listEntries) {
|
||||
Collections.sort(listEntries, new Comparator<Entry<String, Integer>>() {
|
||||
@Override
|
||||
public int compare(Entry<String, Integer> e1, Entry<String, Integer> e2)
|
||||
{
|
||||
return e1.getValue().compareTo(e2.getValue());
|
||||
}
|
||||
});
|
||||
listEntries.sort((e1, e2) -> e1.getValue().compareTo(e2.getValue()));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -38,34 +38,31 @@ public class IdCommand extends Command {
|
||||
}
|
||||
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.");
|
||||
Runnable queryRunnable = new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
populateIdMap(params[0].toLowerCase());
|
||||
Runnable queryRunnable = () -> {
|
||||
try {
|
||||
populateIdMap(params[0].toLowerCase());
|
||||
|
||||
Map<String, String> resultList = fetchResults(itemMap.get(params[0]), queryItem);
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
if (resultList.size() > 0) {
|
||||
int count = 0;
|
||||
for (Map.Entry<String, String> entry: resultList.entrySet()) {
|
||||
sb.append(String.format("Id for %s is: #b%s#k", entry.getKey(), entry.getValue()) + "\r\n");
|
||||
if (++count > 100) {
|
||||
break;
|
||||
}
|
||||
Map<String, String> resultList = fetchResults(itemMap.get(params[0]), queryItem);
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
if (resultList.size() > 0) {
|
||||
int count = 0;
|
||||
for (Map.Entry<String, String> entry: resultList.entrySet()) {
|
||||
sb.append(String.format("Id for %s is: #b%s#k", entry.getKey(), entry.getValue()) + "\r\n");
|
||||
if (++count > 100) {
|
||||
break;
|
||||
}
|
||||
sb.append(String.format("Results found: #r%d#k | Returned: #b%d#k/100 | Refine search query to improve time.", resultList.size(), count) + "\r\n");
|
||||
|
||||
player.getAbstractPlayerInteraction().npcTalk(9010000, sb.toString());
|
||||
} else {
|
||||
player.yellowMessage(String.format("Id not found for item: %s, of type: %s.", queryItem, params[0]));
|
||||
}
|
||||
} catch (IdTypeNotSupportedException e) {
|
||||
player.yellowMessage("Your query type is not supported.");
|
||||
} catch (IOException e) {
|
||||
player.yellowMessage("Error reading file, please contact your administrator.");
|
||||
sb.append(String.format("Results found: #r%d#k | Returned: #b%d#k/100 | Refine search query to improve time.", resultList.size(), count) + "\r\n");
|
||||
|
||||
player.getAbstractPlayerInteraction().npcTalk(9010000, sb.toString());
|
||||
} else {
|
||||
player.yellowMessage(String.format("Id not found for item: %s, of type: %s.", queryItem, params[0]));
|
||||
}
|
||||
} catch (IdTypeNotSupportedException e) {
|
||||
player.yellowMessage("Your query type is not supported.");
|
||||
} catch (IOException e) {
|
||||
player.yellowMessage("Error reading file, please contact your administrator.");
|
||||
}
|
||||
};
|
||||
|
||||
@@ -76,7 +73,7 @@ public class IdCommand extends Command {
|
||||
if (!handbookDirectory.containsKey(type)) {
|
||||
throw new IdTypeNotSupportedException();
|
||||
}
|
||||
itemMap.put(type, new HashMap<String, String>());
|
||||
itemMap.put(type, new HashMap<>());
|
||||
BufferedReader reader = new BufferedReader(new FileReader(handbookDirectory.get(type)));
|
||||
String line;
|
||||
while ((line = reader.readLine()) != null) {
|
||||
|
||||
@@ -44,7 +44,7 @@ public class JailCommand extends Command {
|
||||
|
||||
int minutesJailed = 5;
|
||||
if (params.length >= 2) {
|
||||
minutesJailed = Integer.valueOf(params[1]);
|
||||
minutesJailed = Integer.parseInt(params[1]);
|
||||
if (minutesJailed <= 0) {
|
||||
player.yellowMessage("Syntax: !jail <playername> [<minutes>]");
|
||||
return;
|
||||
|
||||
@@ -75,12 +75,7 @@ public class BanCommand extends Command {
|
||||
target.yellowMessage("Reason: " + reason);
|
||||
c.announce(MaplePacketCreator.getGMEffect(4, (byte) 0));
|
||||
final MapleCharacter rip = target;
|
||||
TimerManager.getInstance().schedule(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
rip.getClient().disconnect(false, false);
|
||||
}
|
||||
}, 5000); //5 Seconds
|
||||
TimerManager.getInstance().schedule(() -> rip.getClient().disconnect(false, false), 5000); //5 Seconds
|
||||
Server.getInstance().broadcastMessage(c.getWorld(), MaplePacketCreator.serverNotice(6, "[RIP]: " + ign + " has been banned."));
|
||||
} else if (MapleCharacter.ban(ign, reason, false)) {
|
||||
c.announce(MaplePacketCreator.getGMEffect(4, (byte) 0));
|
||||
|
||||
@@ -41,7 +41,7 @@ public class CheckDmgCommand extends Command {
|
||||
int maxBase = victim.calculateMaxBaseDamage(victim.getTotalWatk());
|
||||
Integer watkBuff = victim.getBuffedValue(MapleBuffStat.WATK);
|
||||
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 (matkBuff == null) matkBuff = 0;
|
||||
|
||||
|
||||
@@ -40,9 +40,9 @@ public class HpMpCommand extends Command {
|
||||
|
||||
if (params.length == 2) {
|
||||
victim = c.getWorldServer().getPlayerStorage().getCharacterByName(params[0]);
|
||||
statUpdate = Integer.valueOf(params[1]);
|
||||
statUpdate = Integer.parseInt(params[1]);
|
||||
} else if (params.length == 1) {
|
||||
statUpdate = Integer.valueOf(params[0]);
|
||||
statUpdate = Integer.parseInt(params[0]);
|
||||
} else {
|
||||
player.yellowMessage("Syntax: !hpmp [<playername>] <value>");
|
||||
}
|
||||
|
||||
@@ -40,9 +40,9 @@ public class MaxHpMpCommand extends Command {
|
||||
int statUpdate = 1;
|
||||
if (params.length >= 2) {
|
||||
victim = c.getWorldServer().getPlayerStorage().getCharacterByName(params[0]);
|
||||
statUpdate = Integer.valueOf(params[1]);
|
||||
statUpdate = Integer.parseInt(params[1]);
|
||||
} else if (params.length == 1) {
|
||||
statUpdate = Integer.valueOf(params[0]);
|
||||
statUpdate = Integer.parseInt(params[0]);
|
||||
} else {
|
||||
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.");
|
||||
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)};
|
||||
int seed[] = {4001097, 4001096, 4001095, 4001100, 4001099, 4001098};
|
||||
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};
|
||||
for (int i = 0; i < pos.length; i++) {
|
||||
Item item = new Item(seed[i], (byte) 0, (short) 1);
|
||||
player.getMap().spawnItemDrop(player, player, item, pos[i], false, true);
|
||||
|
||||
@@ -40,7 +40,7 @@ import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
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.");
|
||||
|
||||
@@ -45,23 +45,20 @@ public class ServerAddChannelCommand extends Command {
|
||||
|
||||
final int worldid = Integer.parseInt(params[0]);
|
||||
|
||||
ThreadManager.getInstance().newTask(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
int chid = Server.getInstance().addChannel(worldid);
|
||||
if(player.isLoggedinWorld()) {
|
||||
if(chid >= 0) {
|
||||
player.dropMessage(5, "NEW Channel " + chid + " successfully deployed on world " + worldid + ".");
|
||||
ThreadManager.getInstance().newTask(() -> {
|
||||
int chid = Server.getInstance().addChannel(worldid);
|
||||
if(player.isLoggedinWorld()) {
|
||||
if(chid >= 0) {
|
||||
player.dropMessage(5, "NEW Channel " + chid + " successfully deployed on world " + worldid + ".");
|
||||
} else {
|
||||
if(chid == -3) {
|
||||
player.dropMessage(5, "Invalid worldid detected. Channel creation aborted.");
|
||||
} else if(chid == -2) {
|
||||
player.dropMessage(5, "Reached channel limit on worldid " + worldid + ". Channel creation aborted.");
|
||||
} else if(chid == -1) {
|
||||
player.dropMessage(5, "Error detected when loading the 'world.ini' file. Channel creation aborted.");
|
||||
} else {
|
||||
if(chid == -3) {
|
||||
player.dropMessage(5, "Invalid worldid detected. Channel creation aborted.");
|
||||
} else if(chid == -2) {
|
||||
player.dropMessage(5, "Reached channel limit on worldid " + worldid + ". Channel creation aborted.");
|
||||
} else if(chid == -1) {
|
||||
player.dropMessage(5, "Error detected when loading the 'world.ini' file. Channel creation aborted.");
|
||||
} else {
|
||||
player.dropMessage(5, "NEW Channel failed to be deployed. Check if the needed port is already in use or other limitations are taking place.");
|
||||
}
|
||||
player.dropMessage(5, "NEW Channel failed to be deployed. Check if the needed port is already in use or other limitations are taking place.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,20 +38,17 @@ public class ServerAddWorldCommand extends Command {
|
||||
public void execute(MapleClient c, String[] params) {
|
||||
final MapleCharacter player = c.getPlayer();
|
||||
|
||||
ThreadManager.getInstance().newTask(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
int wid = Server.getInstance().addWorld();
|
||||
ThreadManager.getInstance().newTask(() -> {
|
||||
int wid = Server.getInstance().addWorld();
|
||||
|
||||
if(player.isLoggedinWorld()) {
|
||||
if(wid >= 0) {
|
||||
player.dropMessage(5, "NEW World " + wid + " successfully deployed.");
|
||||
if(player.isLoggedinWorld()) {
|
||||
if(wid >= 0) {
|
||||
player.dropMessage(5, "NEW World " + wid + " successfully deployed.");
|
||||
} else {
|
||||
if(wid == -2) {
|
||||
player.dropMessage(5, "Error detected when loading the 'world.ini' file. World creation aborted.");
|
||||
} else {
|
||||
if(wid == -2) {
|
||||
player.dropMessage(5, "Error detected when loading the 'world.ini' file. World creation aborted.");
|
||||
} else {
|
||||
player.dropMessage(5, "NEW World failed to be deployed. Check if needed ports are already in use or maximum world count has been reached.");
|
||||
}
|
||||
player.dropMessage(5, "NEW World failed to be deployed. Check if needed ports are already in use or maximum world count has been reached.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,17 +44,14 @@ public class ServerRemoveChannelCommand extends Command {
|
||||
}
|
||||
|
||||
final int worldId = Integer.parseInt(params[0]);
|
||||
ThreadManager.getInstance().newTask(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if(Server.getInstance().removeChannel(worldId)) {
|
||||
if(player.isLoggedinWorld()) {
|
||||
player.dropMessage(5, "Successfully removed a channel on World " + worldId + ". Current channel count: " + Server.getInstance().getWorld(worldId).getChannelsSize() + ".");
|
||||
}
|
||||
} else {
|
||||
if(player.isLoggedinWorld()) {
|
||||
player.dropMessage(5, "Failed to remove last Channel on world " + worldId + ". Check if either that world exists or there are people currently playing there.");
|
||||
}
|
||||
ThreadManager.getInstance().newTask(() -> {
|
||||
if(Server.getInstance().removeChannel(worldId)) {
|
||||
if(player.isLoggedinWorld()) {
|
||||
player.dropMessage(5, "Successfully removed a channel on World " + worldId + ". Current channel count: " + Server.getInstance().getWorld(worldId).getChannelsSize() + ".");
|
||||
}
|
||||
} else {
|
||||
if(player.isLoggedinWorld()) {
|
||||
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,20 +44,17 @@ public class ServerRemoveWorldCommand extends Command {
|
||||
return;
|
||||
}
|
||||
|
||||
ThreadManager.getInstance().newTask(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if(Server.getInstance().removeWorld()) {
|
||||
if(player.isLoggedinWorld()) {
|
||||
player.dropMessage(5, "Successfully removed a world. Current world count: " + Server.getInstance().getWorldsSize() + ".");
|
||||
}
|
||||
} else {
|
||||
if(player.isLoggedinWorld()) {
|
||||
if(rwid < 0) {
|
||||
player.dropMessage(5, "No registered worlds to remove.");
|
||||
} else {
|
||||
player.dropMessage(5, "Failed to remove world " + rwid + ". Check if there are people currently playing there.");
|
||||
}
|
||||
ThreadManager.getInstance().newTask(() -> {
|
||||
if(Server.getInstance().removeWorld()) {
|
||||
if(player.isLoggedinWorld()) {
|
||||
player.dropMessage(5, "Successfully removed a world. Current world count: " + Server.getInstance().getWorldsSize() + ".");
|
||||
}
|
||||
} else {
|
||||
if(player.isLoggedinWorld()) {
|
||||
if(rwid < 0) {
|
||||
player.dropMessage(5, "No registered worlds to remove.");
|
||||
} else {
|
||||
player.dropMessage(5, "Failed to remove world " + rwid + ". Check if there are people currently playing there.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,10 +51,10 @@ public class ShutdownCommand extends Command {
|
||||
}
|
||||
|
||||
if (time > 1) {
|
||||
int seconds = (int) (time / 1000) % 60;
|
||||
int minutes = (int) ((time / (1000 * 60)) % 60);
|
||||
int hours = (int) ((time / (1000 * 60 * 60)) % 24);
|
||||
int days = (int) ((time / (1000 * 60 * 60 * 24)));
|
||||
int seconds = (time / 1000) % 60;
|
||||
int minutes = (time / (1000 * 60)) % 60;
|
||||
int hours = (time / (1000 * 60 * 60)) % 24;
|
||||
int days = (time / (1000 * 60 * 60 * 24));
|
||||
|
||||
String strTime = "";
|
||||
if (days > 0) strTime += days + " days, ";
|
||||
|
||||
@@ -25,15 +25,16 @@ import client.MapleClient;
|
||||
import config.YamlConfig;
|
||||
import constants.game.ExpTable;
|
||||
import constants.inventory.ItemConstants;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import server.MapleItemInformationProvider;
|
||||
import tools.MaplePacketCreator;
|
||||
import tools.Pair;
|
||||
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 static enum ScrollResult {
|
||||
@@ -383,7 +384,7 @@ public class Equip extends Item {
|
||||
public Pair<String, Pair<Boolean, Boolean>> gainStats(List<Pair<StatUpgrade, Integer>> stats) {
|
||||
boolean gotSlot = false, gotVicious = false;
|
||||
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) {
|
||||
switch (stat.getLeft()) {
|
||||
case incDEX:
|
||||
|
||||
@@ -49,7 +49,7 @@ public enum ItemFactory {
|
||||
private final boolean account;
|
||||
|
||||
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 {
|
||||
for (int i = 0; i < lockCount; i++) {
|
||||
@@ -104,7 +104,7 @@ public enum ItemFactory {
|
||||
equip.setWatk((short) rs.getInt("watk"));
|
||||
equip.setWdef((short) rs.getInt("wdef"));
|
||||
equip.setUpgradeSlots((byte) rs.getInt("upgradeslots"));
|
||||
equip.setLevel((byte) rs.getByte("level"));
|
||||
equip.setLevel(rs.getByte("level"));
|
||||
equip.setItemExp(rs.getInt("itemexp"));
|
||||
equip.setItemLevel(rs.getByte("itemlevel"));
|
||||
equip.setExpiration(rs.getLong("expiration"));
|
||||
@@ -135,7 +135,7 @@ public enum ItemFactory {
|
||||
try (ResultSet rs = ps.executeQuery()) {
|
||||
while (rs.next()) {
|
||||
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"));
|
||||
|
||||
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 {
|
||||
if (bundles > 0) {
|
||||
int petid = rs.getInt("petid");
|
||||
|
||||
@@ -21,28 +21,20 @@
|
||||
*/
|
||||
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.MapleClient;
|
||||
import constants.inventory.ItemConstants;
|
||||
import server.MapleItemInformationProvider;
|
||||
import client.inventory.manipulator.MapleInventoryManipulator;
|
||||
import tools.FilePrinter;
|
||||
import constants.inventory.ItemConstants;
|
||||
import net.server.audit.locks.MonitoredLockType;
|
||||
import net.server.audit.locks.factory.MonitoredReentrantLockFactory;
|
||||
import server.MapleItemInformationProvider;
|
||||
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) {
|
||||
Collections.sort(ret, new Comparator<Item>() {
|
||||
@Override
|
||||
public int compare(Item i1, Item i2) {
|
||||
return i1.getPosition() - i2.getPosition();
|
||||
}
|
||||
});
|
||||
ret.sort((i1, i2) -> i1.getPosition() - i2.getPosition());
|
||||
}
|
||||
|
||||
return ret;
|
||||
@@ -216,12 +203,7 @@ public class MapleInventory implements Iterable<Item> {
|
||||
}
|
||||
|
||||
if (ret.size() > 1) {
|
||||
Collections.sort(ret, new Comparator<Item>() {
|
||||
@Override
|
||||
public int compare(Item i1, Item i2) {
|
||||
return i1.getPosition() - i2.getPosition();
|
||||
}
|
||||
});
|
||||
ret.sort((i1, i2) -> i1.getPosition() - i2.getPosition());
|
||||
}
|
||||
|
||||
return ret;
|
||||
@@ -250,8 +232,8 @@ public class MapleInventory implements Iterable<Item> {
|
||||
public void move(short sSlot, short dSlot, short slotMax) {
|
||||
lock.lock();
|
||||
try {
|
||||
Item source = (Item) inventory.get(sSlot);
|
||||
Item target = (Item) inventory.get(dSlot);
|
||||
Item source = inventory.get(sSlot);
|
||||
Item target = inventory.get(dSlot);
|
||||
if (source == null) {
|
||||
return;
|
||||
}
|
||||
@@ -334,12 +316,8 @@ public class MapleInventory implements Iterable<Item> {
|
||||
}
|
||||
|
||||
if (ItemConstants.isRateCoupon(item.getItemId())) {
|
||||
ThreadManager.getInstance().newTask(new Runnable() { // deadlocks with coupons rates found thanks to GabrielSin & Masterrulax
|
||||
@Override
|
||||
public void run() {
|
||||
owner.updateCouponRates();
|
||||
}
|
||||
});
|
||||
// deadlocks with coupons rates found thanks to GabrielSin & Masterrulax
|
||||
ThreadManager.getInstance().newTask(() -> owner.updateCouponRates());
|
||||
}
|
||||
|
||||
return slotId;
|
||||
@@ -354,12 +332,7 @@ public class MapleInventory implements Iterable<Item> {
|
||||
}
|
||||
|
||||
if (ItemConstants.isRateCoupon(item.getItemId())) {
|
||||
ThreadManager.getInstance().newTask(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
owner.updateCouponRates();
|
||||
}
|
||||
});
|
||||
ThreadManager.getInstance().newTask(() -> owner.updateCouponRates());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -373,12 +346,7 @@ public class MapleInventory implements Iterable<Item> {
|
||||
}
|
||||
|
||||
if (item != null && ItemConstants.isRateCoupon(item.getItemId())) {
|
||||
ThreadManager.getInstance().newTask(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
owner.updateCouponRates();
|
||||
}
|
||||
});
|
||||
ThreadManager.getInstance().newTask(() -> owner.updateCouponRates());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -306,7 +306,7 @@ public class MaplePet extends Item {
|
||||
for (LifeMovementFragment move : movement) {
|
||||
if (move instanceof LifeMovement) {
|
||||
if (move instanceof AbsoluteLifeMovement) {
|
||||
this.setPos(((LifeMovement) move).getPosition());
|
||||
this.setPos(move.getPosition());
|
||||
}
|
||||
this.setStance(((LifeMovement) move).getNewstate());
|
||||
}
|
||||
|
||||
@@ -21,25 +21,26 @@
|
||||
*/
|
||||
package client.inventory;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import provider.MapleData;
|
||||
import provider.MapleDataProvider;
|
||||
import provider.MapleDataProviderFactory;
|
||||
import provider.MapleDataTool;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Danny (Leifde)
|
||||
*/
|
||||
public class PetDataFactory {
|
||||
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<Integer, Integer> petHunger = new HashMap<Integer, Integer>();
|
||||
private static Map<String, PetCommand> petCommands = new HashMap<>();
|
||||
private static Map<Integer, Integer> petHunger = new HashMap<>();
|
||||
|
||||
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) {
|
||||
return ret;
|
||||
}
|
||||
@@ -61,14 +62,14 @@ public class PetDataFactory {
|
||||
}
|
||||
|
||||
public static int getHunger(int petId) {
|
||||
Integer ret = petHunger.get(Integer.valueOf(petId));
|
||||
Integer ret = petHunger.get(petId);
|
||||
if (ret != null) {
|
||||
return ret;
|
||||
}
|
||||
synchronized (petHunger) {
|
||||
ret = petHunger.get(Integer.valueOf(petId));
|
||||
ret = petHunger.get(petId);
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -24,26 +24,20 @@ package client.inventory.manipulator;
|
||||
import client.MapleBuffStat;
|
||||
import client.MapleCharacter;
|
||||
import client.MapleClient;
|
||||
import client.inventory.Equip;
|
||||
import client.inventory.Item;
|
||||
import client.inventory.MapleInventory;
|
||||
import client.inventory.MapleInventoryType;
|
||||
import client.inventory.MaplePet;
|
||||
import client.inventory.ModifyInventory;
|
||||
import client.inventory.*;
|
||||
import client.newyear.NewYearCardRecord;
|
||||
import config.YamlConfig;
|
||||
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.Collections;
|
||||
import java.util.Iterator;
|
||||
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();
|
||||
while (quantity > 0) {
|
||||
if (i.hasNext()) {
|
||||
Item eItem = (Item) i.next();
|
||||
Item eItem = i.next();
|
||||
short oldQ = eItem.getQuantity();
|
||||
if (oldQ < slotMax && ((eItem.getOwner().equals(owner) || owner == null) && eItem.getFlag() == flag)) {
|
||||
short newQ = (short) Math.min(oldQ + quantity, slotMax);
|
||||
@@ -202,7 +196,7 @@ public class MapleInventoryManipulator {
|
||||
Iterator<Item> i = existing.iterator();
|
||||
while (quantity > 0) {
|
||||
if (i.hasNext()) {
|
||||
Item eItem = (Item) i.next();
|
||||
Item eItem = i.next();
|
||||
short oldQ = eItem.getQuantity();
|
||||
if (oldQ < slotMax && item.getFlag() == eItem.getFlag() && item.getOwner().equals(eItem.getOwner())) {
|
||||
short newQ = (short) Math.min(oldQ + quantity, slotMax);
|
||||
|
||||
@@ -20,6 +20,10 @@
|
||||
package client.newyear;
|
||||
|
||||
import client.MapleCharacter;
|
||||
import net.server.Server;
|
||||
import server.TimerManager;
|
||||
import tools.DatabaseConnection;
|
||||
import tools.MaplePacketCreator;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
@@ -28,10 +32,6 @@ import java.sql.SQLException;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ScheduledFuture;
|
||||
import net.server.Server;
|
||||
import server.TimerManager;
|
||||
import tools.DatabaseConnection;
|
||||
import tools.MaplePacketCreator;
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -244,23 +244,20 @@ public class NewYearCardRecord {
|
||||
public void startNewYearCardTask() {
|
||||
if(sendTask != null) return;
|
||||
|
||||
sendTask = TimerManager.getInstance().register(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
Server server = Server.getInstance();
|
||||
|
||||
int world = server.getCharacterWorld(receiverId);
|
||||
if(world == -1) {
|
||||
sendTask.cancel(false);
|
||||
sendTask = null;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
MapleCharacter target = server.getWorld(world).getPlayerStorage().getCharacterById(receiverId);
|
||||
if(target != null && target.isLoggedinWorld()) {
|
||||
target.announce(MaplePacketCreator.onNewYearCardRes(target, NewYearCardRecord.this, 0xC, 0));
|
||||
}
|
||||
sendTask = TimerManager.getInstance().register(() -> {
|
||||
Server server = Server.getInstance();
|
||||
|
||||
int world = server.getCharacterWorld(receiverId);
|
||||
if(world == -1) {
|
||||
sendTask.cancel(false);
|
||||
sendTask = null;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
MapleCharacter target = server.getWorld(world).getPlayerStorage().getCharacterById(receiverId);
|
||||
if(target != null && target.isLoggedinWorld()) {
|
||||
target.announce(MaplePacketCreator.onNewYearCardRes(target, NewYearCardRecord.this, 0xC, 0));
|
||||
}
|
||||
}, 1000 * 60 * 60); //1 Hour
|
||||
}
|
||||
|
||||
@@ -127,7 +127,7 @@ public class DueyProcessor {
|
||||
}
|
||||
|
||||
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) {
|
||||
|
||||
@@ -23,31 +23,21 @@
|
||||
*/
|
||||
package client.processor.stat;
|
||||
|
||||
import client.MapleCharacter;
|
||||
import client.MapleClient;
|
||||
import client.MapleJob;
|
||||
import client.MapleStat;
|
||||
import client.Skill;
|
||||
import client.SkillFactory;
|
||||
import client.*;
|
||||
import client.autoban.AutobanFactory;
|
||||
import client.inventory.Equip;
|
||||
import client.inventory.Item;
|
||||
import client.inventory.MapleInventoryType;
|
||||
import config.YamlConfig;
|
||||
import constants.skills.BlazeWizard;
|
||||
import constants.skills.Brawler;
|
||||
import constants.skills.DawnWarrior;
|
||||
import constants.skills.Magician;
|
||||
import constants.skills.ThunderBreaker;
|
||||
import constants.skills.Warrior;
|
||||
import constants.skills.*;
|
||||
import tools.MaplePacketCreator;
|
||||
import tools.Randomizer;
|
||||
import tools.data.input.SeekableLittleEndianAccessor;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
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[3] = chr.getInt();
|
||||
|
||||
Collections.sort(eqpStrList, Collections.reverseOrder());
|
||||
Collections.sort(eqpDexList, Collections.reverseOrder());
|
||||
Collections.sort(eqpLukList, Collections.reverseOrder());
|
||||
eqpStrList.sort(Collections.reverseOrder());
|
||||
eqpDexList.sort(Collections.reverseOrder());
|
||||
eqpLukList.sort(Collections.reverseOrder());
|
||||
|
||||
//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);
|
||||
@@ -374,7 +364,7 @@ public class AssignAPProcessor {
|
||||
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;
|
||||
|
||||
int newVal = 0;
|
||||
|
||||
@@ -30,7 +30,6 @@ import client.SkillFactory;
|
||||
import client.autoban.AutobanFactory;
|
||||
import constants.game.GameConstants;
|
||||
import constants.skills.Aran;
|
||||
import server.ThreadManager;
|
||||
import tools.FilePrinter;
|
||||
import tools.MaplePacketCreator;
|
||||
|
||||
@@ -87,12 +86,12 @@ public class AssignSPProcessor {
|
||||
}
|
||||
if (skill.getId() == Aran.FULL_SWING) {
|
||||
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_TRIPLE), (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), player.getSkillLevel(skill), player.getMasterLevel(skill), player.getSkillExpiration(skill));
|
||||
} else if (skill.getId() == Aran.OVER_SWING) {
|
||||
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_TRIPLE), (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), player.getSkillLevel(skill), player.getMasterLevel(skill), player.getSkillExpiration(skill));
|
||||
} else {
|
||||
player.changeSkillLevel(skill, (byte) (curLevel + 1), player.getMasterLevel(skill), player.getSkillExpiration(skill));
|
||||
}
|
||||
|
||||
@@ -1,26 +1,18 @@
|
||||
package constants.game;
|
||||
|
||||
import client.MapleDisease;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import client.MapleJob;
|
||||
import config.YamlConfig;
|
||||
import constants.skills.Aran;
|
||||
import provider.*;
|
||||
import server.maps.FieldLimit;
|
||||
import server.maps.MapleMap;
|
||||
import server.quest.MapleQuest;
|
||||
|
||||
import java.io.File;
|
||||
import java.text.DecimalFormat;
|
||||
import java.text.NumberFormat;
|
||||
import java.util.Locale;
|
||||
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;
|
||||
import java.util.*;
|
||||
|
||||
/*
|
||||
* @author kevintjuh93
|
||||
@@ -518,8 +510,8 @@ public class GameConstants {
|
||||
private static boolean isInBranchJobTree(int skillJobId, int jobId, int branchType) {
|
||||
int branch = (int)(Math.pow(10, branchType));
|
||||
|
||||
int skillBranch = (int)(skillJobId / branch) * branch;
|
||||
int jobBranch = (int)(jobId / branch) * branch;
|
||||
int skillBranch = (skillJobId / branch) * branch;
|
||||
int jobBranch = (jobId / branch) * branch;
|
||||
|
||||
return skillBranch == jobBranch;
|
||||
}
|
||||
@@ -527,8 +519,8 @@ public class GameConstants {
|
||||
private static boolean hasDivergedBranchJobTree(int skillJobId, int jobId, int branchType) {
|
||||
int branch = (int)(Math.pow(10, branchType));
|
||||
|
||||
int skillBranch = (int)(skillJobId / branch);
|
||||
int jobBranch = (int)(jobId / branch);
|
||||
int skillBranch = skillJobId / branch;
|
||||
int jobBranch = jobId / branch;
|
||||
|
||||
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).
|
||||
|
||||
//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
|
||||
// Added by kolakcc (Familiar)
|
||||
|
||||
@@ -25,19 +25,19 @@ public class LanguageConstants {
|
||||
|
||||
}
|
||||
|
||||
public static String CPQBlue[] = new String[3];
|
||||
public static String CPQError[] = new String[3];
|
||||
public static String CPQEntry[] = new String[3];
|
||||
public static String CPQFindError[] = new String[3];
|
||||
public static String CPQRed[] = new String[3];
|
||||
public static String CPQPlayerExit[] = new String[3];
|
||||
public static String CPQEntryLobby[] = new String[3];
|
||||
public static String CPQPickRoom[] = new String[3];
|
||||
public static String CPQExtendTime[] = new String[3];
|
||||
public static String CPQLeaderNotFound[] = new String[3];
|
||||
public static String CPQChallengeRoomAnswer[] = new String[3];
|
||||
public static String CPQChallengeRoomSent[] = new String[3];
|
||||
public static String CPQChallengeRoomDenied[] = new String[3];
|
||||
public static String[] CPQBlue = new String[3];
|
||||
public static String[] CPQError = new String[3];
|
||||
public static String[] CPQEntry = new String[3];
|
||||
public static String[] CPQFindError = new String[3];
|
||||
public static String[] CPQRed = new String[3];
|
||||
public static String[] CPQPlayerExit = new String[3];
|
||||
public static String[] CPQEntryLobby = new String[3];
|
||||
public static String[] CPQPickRoom = new String[3];
|
||||
public static String[] CPQExtendTime = new String[3];
|
||||
public static String[] CPQLeaderNotFound = new String[3];
|
||||
public static String[] CPQChallengeRoomAnswer = new String[3];
|
||||
public static String[] CPQChallengeRoomSent = new String[3];
|
||||
public static String[] CPQChallengeRoomDenied = new String[3];
|
||||
|
||||
static {
|
||||
int lang;
|
||||
|
||||
@@ -21,28 +21,19 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
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 config.YamlConfig;
|
||||
import constants.net.ServerConstants;
|
||||
import java.net.InetSocketAddress;
|
||||
|
||||
import net.server.Server;
|
||||
import net.server.audit.LockCollector;
|
||||
import net.server.audit.locks.MonitoredLockType;
|
||||
import net.server.audit.locks.MonitoredReentrantLock;
|
||||
import net.server.audit.locks.factory.MonitoredReentrantLockFactory;
|
||||
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.MapleAESOFB;
|
||||
import tools.MapleLogger;
|
||||
@@ -50,15 +41,14 @@ import tools.MaplePacketCreator;
|
||||
import tools.data.input.ByteArrayByteStream;
|
||||
import tools.data.input.GenericSeekableLittleEndianAccessor;
|
||||
import tools.data.input.SeekableLittleEndianAccessor;
|
||||
import java.util.Arrays;
|
||||
|
||||
import java.util.concurrent.ScheduledFuture;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.io.IOException;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.*;
|
||||
import java.util.Map.Entry;
|
||||
import net.server.audit.LockCollector;
|
||||
import server.TimerManager;
|
||||
import java.util.concurrent.ScheduledFuture;
|
||||
import java.util.concurrent.atomic.AtomicLong;
|
||||
|
||||
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));
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
byte ivRecv[] = {70, 114, 122, 82};
|
||||
byte ivSend[] = {82, 48, 120, 115};
|
||||
byte[] ivRecv = {70, 114, 122, 82};
|
||||
byte[] ivSend = {82, 48, 120, 115};
|
||||
ivRecv[3] = (byte) (Math.random() * 255);
|
||||
ivSend[3] = (byte) (Math.random() * 255);
|
||||
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);
|
||||
client.setWorld(world);
|
||||
client.setChannel(channel);
|
||||
@@ -274,12 +264,7 @@ public class MapleServerHandler extends IoHandlerAdapter {
|
||||
}
|
||||
|
||||
private void idleManagerTask() {
|
||||
this.idleManager = TimerManager.getInstance().register(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
manageIdleSessions();
|
||||
}
|
||||
}, 10000);
|
||||
this.idleManager = TimerManager.getInstance().register(() -> manageIdleSessions(), 10000);
|
||||
}
|
||||
|
||||
private void cancelIdleManagerTask() {
|
||||
@@ -288,12 +273,7 @@ public class MapleServerHandler extends IoHandlerAdapter {
|
||||
}
|
||||
|
||||
private void disposeLocks() {
|
||||
LockCollector.getInstance().registerDisposeAction(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
emptyLocks();
|
||||
}
|
||||
});
|
||||
LockCollector.getInstance().registerDisposeAction(() -> emptyLocks());
|
||||
}
|
||||
|
||||
private void emptyLocks() {
|
||||
|
||||
@@ -35,7 +35,7 @@ public class MapleCustomEncryption {
|
||||
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++) {
|
||||
byte remember = 0;
|
||||
byte dataLength = (byte) (data.length & 0xFF);
|
||||
@@ -69,7 +69,7 @@ public class MapleCustomEncryption {
|
||||
return data;
|
||||
}
|
||||
|
||||
public static byte[] decryptData(byte data[]) {
|
||||
public static byte[] decryptData(byte[] data) {
|
||||
for (int j = 1; j <= 6; j++) {
|
||||
byte remember = 0;
|
||||
byte dataLength = (byte) (data.length & 0xFF);
|
||||
|
||||
@@ -21,19 +21,19 @@
|
||||
*/
|
||||
package net.mina;
|
||||
|
||||
import config.YamlConfig;
|
||||
import client.MapleClient;
|
||||
import config.YamlConfig;
|
||||
import constants.net.OpcodeConstants;
|
||||
import net.server.coordinator.session.MapleSessionCoordinator;
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
import org.apache.mina.core.session.IoSession;
|
||||
import org.apache.mina.filter.codec.CumulativeProtocolDecoder;
|
||||
import org.apache.mina.filter.codec.ProtocolDecoderOutput;
|
||||
import tools.FilePrinter;
|
||||
import tools.HexTool;
|
||||
import tools.MapleAESOFB;
|
||||
import tools.data.input.ByteArrayByteStream;
|
||||
import tools.data.input.GenericLittleEndianAccessor;
|
||||
import tools.FilePrinter;
|
||||
|
||||
public class MaplePacketDecoder extends CumulativeProtocolDecoder {
|
||||
private static final String DECODER_STATE_KEY = MaplePacketDecoder.class.getName() + ".STATE";
|
||||
@@ -68,7 +68,7 @@ public class MaplePacketDecoder extends CumulativeProtocolDecoder {
|
||||
return false;
|
||||
}
|
||||
if (in.remaining() >= decoderState.packetlength) {
|
||||
byte decryptedPacket[] = new byte[decoderState.packetlength];
|
||||
byte[] decryptedPacket = new byte[decoderState.packetlength];
|
||||
in.get(decryptedPacket, 0, decoderState.packetlength);
|
||||
decoderState.packetlength = -1;
|
||||
rcvdCrypto.crypt(decryptedPacket);
|
||||
|
||||
@@ -54,7 +54,6 @@ import net.server.task.*;
|
||||
import net.server.world.World;
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
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.session.IdleStatus;
|
||||
import org.apache.mina.filter.codec.ProtocolCodecFilter;
|
||||
@@ -260,9 +259,7 @@ public class Server {
|
||||
try {
|
||||
List<Channel> channelz = new ArrayList<>();
|
||||
for (World world : this.getWorlds()) {
|
||||
for (Channel ch : world.getChannels()) {
|
||||
channelz.add(ch);
|
||||
}
|
||||
channelz.addAll(world.getChannels());
|
||||
}
|
||||
return channelz;
|
||||
} catch (NullPointerException npe) {
|
||||
@@ -702,7 +699,7 @@ public class Server {
|
||||
try {
|
||||
if (!YamlConfig.config.server.USE_WHOLE_SERVER_RANKING) {
|
||||
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());
|
||||
@@ -746,7 +743,7 @@ public class Server {
|
||||
try {
|
||||
if (!YamlConfig.config.server.USE_WHOLE_SERVER_RANKING) {
|
||||
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) {
|
||||
@@ -763,7 +760,7 @@ public class Server {
|
||||
|
||||
private void initWorldPlayerRanking() {
|
||||
if (YamlConfig.config.server.USE_WHOLE_SERVER_RANKING) {
|
||||
playerRanking.add(new ArrayList<Pair<String, Integer>>(0));
|
||||
playerRanking.add(new ArrayList<>(0));
|
||||
}
|
||||
updateWorldPlayerRanking();
|
||||
}
|
||||
@@ -876,7 +873,7 @@ public class Server {
|
||||
}
|
||||
|
||||
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++) {
|
||||
initWorld();
|
||||
@@ -901,7 +898,7 @@ public class Server {
|
||||
IoBuffer.setUseDirectBuffer(false); // join IO operations performed by lxconan
|
||||
IoBuffer.setAllocator(new SimpleBufferAllocator());
|
||||
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.setHandler(new MapleServerHandler());
|
||||
try {
|
||||
@@ -948,7 +945,7 @@ public class Server {
|
||||
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");
|
||||
Security.setProperty("crypto.policy", "unlimited");
|
||||
AutoJCE.removeCryptographyRestrictions();
|
||||
@@ -1465,7 +1462,7 @@ public class Server {
|
||||
if (wchars == null) {
|
||||
if (!accountChars.containsKey(accountId)) {
|
||||
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
|
||||
} else if (!wchars.isEmpty()) { // this action.
|
||||
lastwchars = wchars;
|
||||
@@ -1485,7 +1482,7 @@ public class Server {
|
||||
short characterCount = 0;
|
||||
List<List<MapleCharacter>> wchars = new ArrayList<>(wlen);
|
||||
for (int i = 0; i < wlen; i++) {
|
||||
wchars.add(i, new LinkedList<MapleCharacter>());
|
||||
wchars.add(i, new LinkedList<>());
|
||||
}
|
||||
|
||||
List<MapleCharacter> chars = new LinkedList<>();
|
||||
@@ -1567,7 +1564,7 @@ public class Server {
|
||||
try (Connection con = DatabaseConnection.getConnection();
|
||||
PreparedStatement ps = con.prepareStatement("SELECT * FROM namechanges WHERE completionTime IS NULL");
|
||||
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()) {
|
||||
con.setAutoCommit(false);
|
||||
int nameChangeId = rs.getInt("id");
|
||||
@@ -1578,7 +1575,7 @@ public class Server {
|
||||
if (!success) {
|
||||
con.rollback(); //discard changes
|
||||
} else {
|
||||
changedNames.add(new Pair<String, String>(oldName, newName));
|
||||
changedNames.add(new Pair<>(oldName, newName));
|
||||
}
|
||||
con.setAutoCommit(true);
|
||||
}
|
||||
@@ -1597,7 +1594,7 @@ public class Server {
|
||||
PreparedStatement ps = con.prepareStatement("SELECT * FROM worldtransfers WHERE completionTime IS NULL",
|
||||
ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
|
||||
ResultSet rs = ps.executeQuery()) {
|
||||
List<Integer> removedTransfers = new LinkedList<Integer>();
|
||||
List<Integer> removedTransfers = new LinkedList<>();
|
||||
while (rs.next()) {
|
||||
int nameChangeId = rs.getInt("id");
|
||||
int characterId = rs.getInt("characterId");
|
||||
@@ -1617,7 +1614,7 @@ public class Server {
|
||||
}
|
||||
}
|
||||
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()) {
|
||||
con.setAutoCommit(false);
|
||||
int nameChangeId = rs.getInt("id");
|
||||
@@ -1631,7 +1628,7 @@ public class Server {
|
||||
if (!success) {
|
||||
con.rollback();
|
||||
} 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);
|
||||
}
|
||||
@@ -1856,21 +1853,11 @@ public class Server {
|
||||
}
|
||||
|
||||
private void disconnectIdlesOnLoginTask() {
|
||||
TimerManager.getInstance().register(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
disconnectIdlesOnLoginState();
|
||||
}
|
||||
}, 300000);
|
||||
TimerManager.getInstance().register(() -> disconnectIdlesOnLoginState(), 300000);
|
||||
}
|
||||
|
||||
public final Runnable shutdown(final boolean restart) {//no player should be online when trying to shutdown!
|
||||
return new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
shutdownInternal(restart);
|
||||
}
|
||||
};
|
||||
return () -> shutdownInternal(restart);
|
||||
}
|
||||
|
||||
private synchronized void shutdownInternal(boolean restart) {
|
||||
@@ -1928,12 +1915,7 @@ public class Server {
|
||||
acceptor.unbind();
|
||||
acceptor = null;
|
||||
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() {
|
||||
@Override
|
||||
public void run() {
|
||||
System.exit(0);
|
||||
}
|
||||
}).start();
|
||||
new Thread(() -> System.exit(0)).start();
|
||||
} else {
|
||||
System.out.println("\r\nRestarting the server....\r\n");
|
||||
try {
|
||||
|
||||
@@ -19,26 +19,19 @@
|
||||
*/
|
||||
package net.server.audit;
|
||||
|
||||
import net.server.audit.locks.MonitoredLockType;
|
||||
import server.TimerManager;
|
||||
import tools.FilePrinter;
|
||||
|
||||
import java.text.DateFormat;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.*;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
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 net.server.audit.locks.MonitoredLockType;
|
||||
import server.TimerManager;
|
||||
import tools.FilePrinter;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author RonanLana
|
||||
@@ -127,8 +120,8 @@ public class ThreadTracker {
|
||||
|
||||
private static String printThreadStack(StackTraceElement[] list, String dateFormat) {
|
||||
String s = "----------------------------\r\n" + dateFormat + "\r\n";
|
||||
for(int i = 0; i < list.length; i++) {
|
||||
s += (" " + list[i].toString() + "\r\n");
|
||||
for (StackTraceElement stackTraceElement : list) {
|
||||
s += (" " + stackTraceElement.toString() + "\r\n");
|
||||
}
|
||||
|
||||
return s;
|
||||
@@ -277,12 +270,7 @@ public class ThreadTracker {
|
||||
}
|
||||
|
||||
public void registerThreadTrackerTask() {
|
||||
threadTrackerSchedule = TimerManager.getInstance().register(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
accessThreadTracker(true, false, MonitoredLockType.UNDEFINED, -1);
|
||||
}
|
||||
}, 10000, 10000);
|
||||
threadTrackerSchedule = TimerManager.getInstance().register(() -> accessThreadTracker(true, false, MonitoredLockType.UNDEFINED, -1), 10000, 10000);
|
||||
}
|
||||
|
||||
public void cancelThreadTrackerTask() {
|
||||
|
||||
@@ -108,5 +108,5 @@ public enum MonitoredLockType {
|
||||
MAP_AGGRO_IDLE,
|
||||
MINIDUNGEON,
|
||||
REACTOR,
|
||||
REACTOR_HIT;
|
||||
REACTOR_HIT
|
||||
}
|
||||
|
||||
@@ -25,12 +25,12 @@ package net.server.audit.locks;
|
||||
*/
|
||||
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 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 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;
|
||||
|
||||
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.locks.MonitoredLockType;
|
||||
import net.server.audit.locks.MonitoredReadLock;
|
||||
import net.server.audit.locks.MonitoredReentrantReadWriteLock;
|
||||
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) {
|
||||
final Thread t = Thread.currentThread();
|
||||
timeoutSchedule = TimerManager.getInstance().schedule(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
issueDeadlock(t);
|
||||
}
|
||||
}, YamlConfig.config.server.LOCK_MONITOR_TIME);
|
||||
timeoutSchedule = TimerManager.getInstance().schedule(() -> issueDeadlock(t), YamlConfig.config.server.LOCK_MONITOR_TIME);
|
||||
}
|
||||
} finally {
|
||||
state.unlock();
|
||||
@@ -144,8 +136,8 @@ public class TrackerReadLock extends ReentrantReadWriteLock.ReadLock implements
|
||||
|
||||
private static String printStackTrace(StackTraceElement[] list) {
|
||||
String s = "";
|
||||
for(int i = 0; i < list.length; i++) {
|
||||
s += (" " + list[i].toString() + "\r\n");
|
||||
for (StackTraceElement stackTraceElement : list) {
|
||||
s += (" " + stackTraceElement.toString() + "\r\n");
|
||||
}
|
||||
|
||||
return s;
|
||||
|
||||
@@ -19,22 +19,20 @@
|
||||
*/
|
||||
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 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.locks.MonitoredLockType;
|
||||
import net.server.audit.locks.MonitoredReentrantLock;
|
||||
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) {
|
||||
final Thread t = Thread.currentThread();
|
||||
timeoutSchedule = TimerManager.getInstance().schedule(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
issueDeadlock(t);
|
||||
}
|
||||
}, YamlConfig.config.server.LOCK_MONITOR_TIME);
|
||||
timeoutSchedule = TimerManager.getInstance().schedule(() -> issueDeadlock(t), YamlConfig.config.server.LOCK_MONITOR_TIME);
|
||||
}
|
||||
} finally {
|
||||
state.unlock();
|
||||
@@ -147,8 +140,8 @@ public class TrackerReentrantLock extends ReentrantLock implements MonitoredReen
|
||||
|
||||
private static String printStackTrace(StackTraceElement[] list) {
|
||||
String s = "";
|
||||
for(int i = 0; i < list.length; i++) {
|
||||
s += (" " + list[i].toString() + "\r\n");
|
||||
for (StackTraceElement stackTraceElement : list) {
|
||||
s += (" " + stackTraceElement.toString() + "\r\n");
|
||||
}
|
||||
|
||||
return s;
|
||||
|
||||
@@ -20,22 +20,21 @@
|
||||
package net.server.audit.locks.active;
|
||||
|
||||
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.locks.MonitoredLockType;
|
||||
import net.server.audit.locks.MonitoredReentrantReadWriteLock;
|
||||
import net.server.audit.locks.MonitoredWriteLock;
|
||||
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) {
|
||||
final Thread t = Thread.currentThread();
|
||||
timeoutSchedule = TimerManager.getInstance().schedule(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
issueDeadlock(t);
|
||||
}
|
||||
}, YamlConfig.config.server.LOCK_MONITOR_TIME);
|
||||
timeoutSchedule = TimerManager.getInstance().schedule(() -> issueDeadlock(t), YamlConfig.config.server.LOCK_MONITOR_TIME);
|
||||
}
|
||||
} finally {
|
||||
state.unlock();
|
||||
@@ -142,8 +136,8 @@ public class TrackerWriteLock extends ReentrantReadWriteLock.WriteLock implement
|
||||
|
||||
private static String printStackTrace(StackTraceElement[] list) {
|
||||
String s = "";
|
||||
for(int i = 0; i < list.length; i++) {
|
||||
s += (" " + list[i].toString() + "\r\n");
|
||||
for (StackTraceElement stackTraceElement : list) {
|
||||
s += (" " + stackTraceElement.toString() + "\r\n");
|
||||
}
|
||||
|
||||
return s;
|
||||
|
||||
@@ -13,8 +13,8 @@ public abstract class AbstractEmptyLock {
|
||||
String df = dateFormat.format(new Date());
|
||||
|
||||
String s = "\r\n" + df + "\r\n";
|
||||
for(int i = 0; i < list.length; i++) {
|
||||
s += (" " + list[i].toString() + "\r\n");
|
||||
for (StackTraceElement stackTraceElement : list) {
|
||||
s += (" " + stackTraceElement.toString() + "\r\n");
|
||||
}
|
||||
s += "----------------------------\r\n\r\n";
|
||||
|
||||
|
||||
@@ -41,7 +41,6 @@ import net.server.world.MaplePartyCharacter;
|
||||
import net.server.world.World;
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
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.session.IdleStatus;
|
||||
import org.apache.mina.filter.codec.ProtocolCodecFilter;
|
||||
@@ -81,7 +80,7 @@ public final class Channel {
|
||||
private Map<MapleExpeditionType, MapleExpedition> expeditions = new HashMap<>();
|
||||
private Map<Integer, MapleMiniDungeon> dungeons = new HashMap<>();
|
||||
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 boolean finishedShutdown = false;
|
||||
private Set<Integer> usedMC = new HashSet<>();
|
||||
@@ -109,7 +108,7 @@ public final class Channel {
|
||||
private MonitoredReadLock merchRlock = MonitoredReadLockFactory.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);
|
||||
|
||||
@@ -128,12 +127,10 @@ public final class Channel {
|
||||
acceptor = new NioSocketAcceptor();
|
||||
acceptor.setHandler(new MapleServerHandler(world, channel));
|
||||
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));
|
||||
((SocketSessionConfig) acceptor.getSessionConfig()).setTcpNoDelay(true);
|
||||
for (MapleExpeditionType exped : MapleExpeditionType.values()) {
|
||||
expedType.add(exped);
|
||||
}
|
||||
expedType.addAll(Arrays.asList(MapleExpeditionType.values()));
|
||||
|
||||
if (Server.getInstance().isOnline()) { // postpone event loading to improve boot time... thanks Riizade, daronhudson for noticing slow startup times
|
||||
eventSM = new EventScriptManager(this, getEvents());
|
||||
@@ -225,12 +222,7 @@ public final class Channel {
|
||||
}
|
||||
|
||||
private void disposeLocks() {
|
||||
LockCollector.getInstance().registerDisposeAction(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
emptyLocks();
|
||||
}
|
||||
});
|
||||
LockCollector.getInstance().registerDisposeAction(() -> emptyLocks());
|
||||
}
|
||||
|
||||
private void emptyLocks() {
|
||||
@@ -408,7 +400,7 @@ public final class Channel {
|
||||
int[] retArr = new int[ret.size()];
|
||||
int pos = 0;
|
||||
for (Integer i : ret) {
|
||||
retArr[pos++] = i.intValue();
|
||||
retArr[pos++] = i;
|
||||
}
|
||||
return retArr;
|
||||
}
|
||||
@@ -461,7 +453,7 @@ public final class Channel {
|
||||
}
|
||||
|
||||
private static String [] getEvents(){
|
||||
List<String> events = new ArrayList<String>();
|
||||
List<String> events = new ArrayList<>();
|
||||
for (File file : new File("scripts/event").listFiles()){
|
||||
events.add(file.getName().substring(0, file.getName().length() - 3));
|
||||
}
|
||||
@@ -606,29 +598,26 @@ public final class Channel {
|
||||
if (this.dojoTask[slot] != null) {
|
||||
this.dojoTask[slot].cancel(false);
|
||||
}
|
||||
this.dojoTask[slot] = TimerManager.getInstance().schedule(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
final int delta = (dojoMapId) % 100;
|
||||
final int dojoBaseMap = (slot < 5) ? 925030000 : 925020000;
|
||||
MapleParty party = null;
|
||||
this.dojoTask[slot] = TimerManager.getInstance().schedule(() -> {
|
||||
final int delta = (dojoMapId) % 100;
|
||||
final int dojoBaseMap = (slot < 5) ? 925030000 : 925020000;
|
||||
MapleParty party = null;
|
||||
|
||||
for (int i = 0; i < 5; i++) { //only 32 stages, but 38 maps
|
||||
if (stage + i > 38) {
|
||||
break;
|
||||
}
|
||||
|
||||
MapleMap dojoExit = getMapFactory().getMap(925020002);
|
||||
for(MapleCharacter chr: getMapFactory().getMap(dojoBaseMap + (100 * (stage + i)) + delta).getAllPlayers()) {
|
||||
if(GameConstants.isDojo(chr.getMap().getId())) {
|
||||
chr.changeMap(dojoExit);
|
||||
}
|
||||
party = chr.getParty();
|
||||
}
|
||||
for (int i = 0; i < 5; i++) { //only 32 stages, but 38 maps
|
||||
if (stage + i > 38) {
|
||||
break;
|
||||
}
|
||||
|
||||
freeDojoSlot(slot, party);
|
||||
MapleMap dojoExit = getMapFactory().getMap(925020002);
|
||||
for(MapleCharacter chr: getMapFactory().getMap(dojoBaseMap + (100 * (stage + i)) + delta).getAllPlayers()) {
|
||||
if(GameConstants.isDojo(chr.getMap().getId())) {
|
||||
chr.changeMap(dojoExit);
|
||||
}
|
||||
party = chr.getParty();
|
||||
}
|
||||
}
|
||||
|
||||
freeDojoSlot(slot, party);
|
||||
}, clockTime + 3000); // let the TIMES UP display for 3 seconds, then warp
|
||||
} finally {
|
||||
lock.unlock();
|
||||
@@ -857,12 +846,7 @@ public final class Channel {
|
||||
|
||||
ongoingStartTime = System.currentTimeMillis();
|
||||
if(weddingId != null) {
|
||||
ScheduledFuture<?> weddingTask = TimerManager.getInstance().schedule(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
closeOngoingWedding(cathedral);
|
||||
}
|
||||
}, YamlConfig.config.server.WEDDING_RESERVATION_TIMEOUT * 60 * 1000);
|
||||
ScheduledFuture<?> weddingTask = TimerManager.getInstance().schedule(() -> closeOngoingWedding(cathedral), YamlConfig.config.server.WEDDING_RESERVATION_TIMEOUT * 60 * 1000);
|
||||
|
||||
if(cathedral) {
|
||||
cathedralReservationTask = weddingTask;
|
||||
|
||||
@@ -21,25 +21,19 @@
|
||||
*/
|
||||
package net.server.channel.handlers;
|
||||
|
||||
import java.awt.Point;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import client.*;
|
||||
import client.autoban.AutobanFactory;
|
||||
import client.status.MonsterStatus;
|
||||
import client.status.MonsterStatusEffect;
|
||||
import config.YamlConfig;
|
||||
import constants.game.GameConstants;
|
||||
import constants.skills.*;
|
||||
import net.AbstractMaplePacketHandler;
|
||||
import net.server.PlayerBuffValueHolder;
|
||||
import scripting.AbstractPlayerInteraction;
|
||||
import server.MapleStatEffect;
|
||||
import server.TimerManager;
|
||||
import server.life.Element;
|
||||
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.life.*;
|
||||
import server.maps.MapleMap;
|
||||
import server.maps.MapleMapItem;
|
||||
import server.maps.MapleMapObject;
|
||||
@@ -48,62 +42,10 @@ import tools.MaplePacketCreator;
|
||||
import tools.Pair;
|
||||
import tools.Randomizer;
|
||||
import tools.data.input.LittleEndianAccessor;
|
||||
import client.MapleBuffStat;
|
||||
import client.MapleCharacter;
|
||||
import client.MapleJob;
|
||||
import client.Skill;
|
||||
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;
|
||||
|
||||
import java.awt.*;
|
||||
import java.util.List;
|
||||
import java.util.*;
|
||||
|
||||
public abstract class AbstractDealDamageHandler extends AbstractMaplePacketHandler {
|
||||
|
||||
@@ -208,7 +150,7 @@ public abstract class AbstractDealDamageHandler extends AbstractMaplePacketHandl
|
||||
if (attack.skill == ChiefBandit.MESO_EXPLOSION) {
|
||||
int delay = 0;
|
||||
for (Integer oned : attack.allDamage.keySet()) {
|
||||
MapleMapObject mapobject = map.getMapObject(oned.intValue());
|
||||
MapleMapObject mapobject = map.getMapObject(oned);
|
||||
if (mapobject != null && mapobject.getType() == MapleMapObjectType.ITEM) {
|
||||
final MapleMapItem mapitem = (MapleMapItem) mapobject;
|
||||
if (mapitem.getMeso() == 0) { //Maybe it is possible some how?
|
||||
@@ -220,18 +162,15 @@ public abstract class AbstractDealDamageHandler extends AbstractMaplePacketHandl
|
||||
if (mapitem.isPickedUp()) {
|
||||
return;
|
||||
}
|
||||
TimerManager.getInstance().schedule(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
mapitem.lockItem();
|
||||
try {
|
||||
if (mapitem.isPickedUp()) {
|
||||
return;
|
||||
}
|
||||
map.pickItemDrop(MaplePacketCreator.removeItemFromMap(mapitem.getObjectId(), 4, 0), mapitem);
|
||||
} finally {
|
||||
mapitem.unlockItem();
|
||||
TimerManager.getInstance().schedule(() -> {
|
||||
mapitem.lockItem();
|
||||
try {
|
||||
if (mapitem.isPickedUp()) {
|
||||
return;
|
||||
}
|
||||
map.pickItemDrop(MaplePacketCreator.removeItemFromMap(mapitem.getObjectId(), 4, 0), mapitem);
|
||||
} finally {
|
||||
mapitem.unlockItem();
|
||||
}
|
||||
}, delay);
|
||||
delay += 100;
|
||||
@@ -244,7 +183,7 @@ public abstract class AbstractDealDamageHandler extends AbstractMaplePacketHandl
|
||||
}
|
||||
}
|
||||
for (Integer oned : attack.allDamage.keySet()) {
|
||||
final MapleMonster monster = map.getMonsterByOid(oned.intValue());
|
||||
final MapleMonster monster = map.getMonsterByOid(oned);
|
||||
if (monster != null) {
|
||||
double distance = player.getPosition().distanceSq(monster.getPosition());
|
||||
double distanceToDetect = 200000.0;
|
||||
@@ -314,23 +253,18 @@ public abstract class AbstractDealDamageHandler extends AbstractMaplePacketHandl
|
||||
int picklv = (player.isGM()) ? pickpocket.getMaxLevel() : player.getSkillLevel(pickpocket);
|
||||
if(picklv > 0) {
|
||||
int delay = 0;
|
||||
final int maxmeso = player.getBuffedValue(MapleBuffStat.PICKPOCKET).intValue();
|
||||
final int maxmeso = player.getBuffedValue(MapleBuffStat.PICKPOCKET);
|
||||
for (Integer eachd : onedList) {
|
||||
eachd += Integer.MAX_VALUE;
|
||||
|
||||
if (pickpocket.getEffect(picklv).makeChanceResult()) {
|
||||
final Integer eachdf;
|
||||
final int eachdf;
|
||||
if(eachd < 0)
|
||||
eachdf = eachd + Integer.MAX_VALUE;
|
||||
else
|
||||
eachdf = eachd;
|
||||
|
||||
TimerManager.getInstance().schedule(new Runnable() {
|
||||
@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);
|
||||
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);
|
||||
delay += 100;
|
||||
}
|
||||
}
|
||||
@@ -346,7 +280,7 @@ public abstract class AbstractDealDamageHandler extends AbstractMaplePacketHandl
|
||||
MapleMonsterInformationProvider mi = MapleMonsterInformationProvider.getInstance();
|
||||
List<Integer> dropPool = mi.retrieveDropPool(monster.getId());
|
||||
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;
|
||||
while(rndPool >= dropPool.get(i)) i++;
|
||||
@@ -477,7 +411,7 @@ public abstract class AbstractDealDamageHandler extends AbstractMaplePacketHandl
|
||||
if (attack.skill != 0) {
|
||||
if (attackEffect.getFixDamage() != -1) {
|
||||
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;
|
||||
@@ -580,12 +514,9 @@ public abstract class AbstractDealDamageHandler extends AbstractMaplePacketHandl
|
||||
else animationTime = fixedTime;
|
||||
|
||||
if(animationTime > 0) { // be sure to only use LIMITED ATTACKS with animation time here
|
||||
TimerManager.getInstance().schedule(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
map.broadcastMessage(MaplePacketCreator.damageMonster(monster.getObjectId(), damage), monster.getPosition());
|
||||
map.damageMonster(attacker, monster, damage);
|
||||
}
|
||||
TimerManager.getInstance().schedule(() -> {
|
||||
map.broadcastMessage(MaplePacketCreator.damageMonster(monster.getObjectId(), damage), monster.getPosition());
|
||||
map.damageMonster(attacker, monster, damage);
|
||||
}, animationTime);
|
||||
} else {
|
||||
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++) {
|
||||
int mesoid = lea.readInt();
|
||||
lea.skip(1);
|
||||
ret.allDamage.put(Integer.valueOf(mesoid), null);
|
||||
ret.allDamage.put(mesoid, null);
|
||||
}
|
||||
return ret;
|
||||
} else {
|
||||
@@ -641,16 +572,16 @@ public abstract class AbstractDealDamageHandler extends AbstractMaplePacketHandl
|
||||
List<Integer> allDamageNumbers = new ArrayList<>();
|
||||
for (int j = 0; j < bullets; j++) {
|
||||
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);
|
||||
} else {
|
||||
int bullets = lea.readByte();
|
||||
for (int j = 0; j < bullets; j++) {
|
||||
int mesoid = lea.readInt();
|
||||
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) {
|
||||
lea.skip(4);
|
||||
}
|
||||
ret.allDamage.put(Integer.valueOf(oid), allDamageNumbers);
|
||||
ret.allDamage.put(oid, allDamageNumbers);
|
||||
}
|
||||
if (ret.skill == NightWalker.POISON_BOMB) { // Poison Bomb
|
||||
lea.skip(4);
|
||||
|
||||
@@ -21,9 +21,11 @@
|
||||
*/
|
||||
package net.server.channel.handlers;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import client.MapleCharacter;
|
||||
import client.MapleClient;
|
||||
import client.inventory.MapleInventory;
|
||||
import client.inventory.MapleInventoryType;
|
||||
import client.inventory.manipulator.MapleInventoryManipulator;
|
||||
import net.AbstractMaplePacketHandler;
|
||||
import server.MapleItemInformationProvider;
|
||||
import server.life.MapleLifeFactory;
|
||||
@@ -34,11 +36,9 @@ import server.quest.MapleQuest;
|
||||
import tools.MaplePacketCreator;
|
||||
import tools.Randomizer;
|
||||
import tools.data.input.SeekableLittleEndianAccessor;
|
||||
import client.MapleCharacter;
|
||||
import client.MapleClient;
|
||||
import client.inventory.MapleInventory;
|
||||
import client.inventory.MapleInventoryType;
|
||||
import client.inventory.manipulator.MapleInventoryManipulator;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public final class AdminCommandHandler extends AbstractMaplePacketHandler {
|
||||
|
||||
@@ -53,8 +53,7 @@ public final class AdminCommandHandler extends AbstractMaplePacketHandler {
|
||||
switch (mode) {
|
||||
case 0x00: // Level1~Level8 & Package1~Package2
|
||||
int[][] toSpawn = MapleItemInformationProvider.getInstance().getSummonMobs(slea.readInt());
|
||||
for (int z = 0; z < toSpawn.length; z++) {
|
||||
int[] toSpawnChild = toSpawn[z];
|
||||
for (int[] toSpawnChild : toSpawn) {
|
||||
if (Randomizer.nextInt(100) < toSpawnChild[1]) {
|
||||
c.getPlayer().getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(toSpawnChild[0]), c.getPlayer().getPosition());
|
||||
}
|
||||
|
||||
@@ -26,9 +26,9 @@ import client.MapleClient;
|
||||
import net.AbstractMaplePacketHandler;
|
||||
import net.opcodes.SendOpcode;
|
||||
import net.server.Server;
|
||||
import net.server.guild.MapleAlliance;
|
||||
import net.server.guild.MapleGuild;
|
||||
import net.server.guild.MapleGuildCharacter;
|
||||
import net.server.guild.MapleAlliance;
|
||||
import tools.MaplePacketCreator;
|
||||
import tools.data.input.SeekableLittleEndianAccessor;
|
||||
import tools.data.output.MaplePacketLittleEndianWriter;
|
||||
@@ -170,7 +170,7 @@ public final class AllianceOperationHandler extends AbstractMaplePacketHandler {
|
||||
break;
|
||||
}
|
||||
case 0x08:
|
||||
String ranks[] = new String[5];
|
||||
String[] ranks = new String[5];
|
||||
for (int i = 0; i < 5; i++) {
|
||||
ranks[i] = slea.readMapleAsciiString();
|
||||
}
|
||||
|
||||
@@ -21,30 +21,19 @@
|
||||
*/
|
||||
package net.server.channel.handlers;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
import client.*;
|
||||
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.skills.Crusader;
|
||||
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 constants.skills.*;
|
||||
import server.MapleStatEffect;
|
||||
import tools.MaplePacketCreator;
|
||||
import tools.Pair;
|
||||
import tools.data.input.SeekableLittleEndianAccessor;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
public final class CloseRangeDamageHandler extends AbstractDealDamageHandler {
|
||||
|
||||
@Override
|
||||
@@ -78,7 +67,7 @@ public final class CloseRangeDamageHandler extends AbstractDealDamageHandler {
|
||||
Integer comboBuff = chr.getBuffedValue(MapleBuffStat.COMBO);
|
||||
if (GameConstants.isFinisherSkill(attack.skill)) {
|
||||
if (comboBuff != null) {
|
||||
numFinisherOrbs = comboBuff.intValue() - 1;
|
||||
numFinisherOrbs = comboBuff - 1;
|
||||
}
|
||||
chr.handleOrbconsume();
|
||||
} 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
|
||||
final Iterator<List<Integer>> dmgIt = attack.allDamage.values().iterator();
|
||||
if (dmgIt.hasNext()) {
|
||||
totDamageToOneMonster = dmgIt.next().get(0).intValue();
|
||||
totDamageToOneMonster = dmgIt.next().get(0);
|
||||
}
|
||||
|
||||
chr.safeAddHP(-1 * totDamageToOneMonster * attack.getAttackEffect(chr, null).getX() / 100);
|
||||
|
||||
@@ -190,8 +190,8 @@ public final class CouponCodeHandler extends AbstractMaplePacketHandler {
|
||||
if (type < 0) {
|
||||
c.announce(MaplePacketCreator.showCashShopMessage((byte) parseCouponResult(type)));
|
||||
} else {
|
||||
List<Item> cashItems = new LinkedList<Item>();
|
||||
List<Pair<Integer, Integer>> items = new LinkedList<Pair<Integer, Integer>>();
|
||||
List<Item> cashItems = new LinkedList<>();
|
||||
List<Pair<Integer, Integer>> items = new LinkedList<>();
|
||||
int nxCredit = 0;
|
||||
int maplePoints = 0;
|
||||
int nxPrepaid = 0;
|
||||
@@ -245,7 +245,7 @@ public final class CouponCodeHandler extends AbstractMaplePacketHandler {
|
||||
cashItems.add(it);
|
||||
} else {
|
||||
MapleInventoryManipulator.addById(c, item, qty, "", -1);
|
||||
items.add(new Pair<Integer, Integer>((int)qty, item));
|
||||
items.add(new Pair<>((int) qty, item));
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -120,7 +120,7 @@ public final class EnterMTSHandler extends AbstractMaplePacketHandler {
|
||||
c.announce(MaplePacketCreator.showMTSCash(c.getPlayer()));
|
||||
List<MTSItemInfo> items = new ArrayList<>();
|
||||
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");
|
||||
ResultSet rs = ps.executeQuery()) {
|
||||
while (rs.next()) {
|
||||
@@ -157,7 +157,7 @@ public final class EnterMTSHandler extends AbstractMaplePacketHandler {
|
||||
equip.setExpiration(rs.getLong("expiration"));
|
||||
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) {
|
||||
Item i = new Item(rs.getInt("itemid"), (short) 0, (short) rs.getInt("quantity"));
|
||||
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 {
|
||||
Equip equip = new Equip(rs.getInt("itemid"), (byte) rs.getInt("position"), -1);
|
||||
equip.setOwner(rs.getString("owner"));
|
||||
@@ -217,7 +217,7 @@ public final class EnterMTSHandler extends AbstractMaplePacketHandler {
|
||||
equip.setFlag((short) rs.getInt("flag"));
|
||||
equip.setExpiration(rs.getLong("expiration"));
|
||||
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) {
|
||||
Item i = new Item(rs.getInt("itemid"), (short) 0, (short) rs.getInt("quantity"));
|
||||
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 {
|
||||
Equip equip = new Equip(rs.getInt("itemid"), (byte) rs.getInt("position"), -1);
|
||||
equip.setOwner(rs.getString("owner"));
|
||||
@@ -267,7 +267,7 @@ public final class EnterMTSHandler extends AbstractMaplePacketHandler {
|
||||
equip.setFlag((short) rs.getInt("flag"));
|
||||
equip.setExpiration(rs.getLong("expiration"));
|
||||
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;
|
||||
|
||||
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 java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import client.MapleClient;
|
||||
import config.YamlConfig;
|
||||
import constants.game.GameConstants;
|
||||
import net.AbstractMaplePacketHandler;
|
||||
import net.server.Server;
|
||||
import net.server.coordinator.matchchecker.MatchCheckerListenerFactory.MatchCheckerType;
|
||||
import net.server.guild.MapleAlliance;
|
||||
import net.server.guild.MapleGuild;
|
||||
import net.server.guild.MapleGuildResponse;
|
||||
import net.server.world.MapleParty;
|
||||
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 {
|
||||
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.");
|
||||
return;
|
||||
}
|
||||
String ranks[] = new String[5];
|
||||
String[] ranks = new String[5];
|
||||
for (int i = 0; i < 5; i++) {
|
||||
ranks[i] = slea.readMapleAsciiString();
|
||||
}
|
||||
|
||||
@@ -21,22 +21,18 @@
|
||||
*/
|
||||
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.MapleClient;
|
||||
import client.inventory.Item;
|
||||
import client.inventory.Equip;
|
||||
import client.inventory.MapleInventory;
|
||||
import client.inventory.MapleInventoryType;
|
||||
import client.inventory.ModifyInventory;
|
||||
import server.MapleItemInformationProvider;
|
||||
import client.inventory.*;
|
||||
import config.YamlConfig;
|
||||
import net.AbstractMaplePacketHandler;
|
||||
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) {
|
||||
w = (Equip)A.get(i);
|
||||
A.set(i, A.get(j));
|
||||
A.set(j, (Item)w);
|
||||
A.set(j, w);
|
||||
|
||||
i++;
|
||||
j--;
|
||||
@@ -290,7 +286,7 @@ public final class InventorySortHandler extends AbstractMaplePacketHandler {
|
||||
for (short i = 1; i <= inventory.getSlotLimit(); i++) {
|
||||
Item item = inventory.getItem(i);
|
||||
if (item != null) {
|
||||
itemarray.add((Item) item.copy());
|
||||
itemarray.add(item.copy());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -21,6 +21,23 @@
|
||||
*/
|
||||
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.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
@@ -29,23 +46,6 @@ import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
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 {
|
||||
|
||||
@Override
|
||||
@@ -159,10 +159,10 @@ public final class MTSHandler extends AbstractMaplePacketHandler {
|
||||
date += day + "";
|
||||
}
|
||||
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.setInt(1, 1);
|
||||
ps.setInt(2, (int) invType.getType());
|
||||
ps.setInt(2, invType.getType());
|
||||
ps.setInt(3, item.getItemId());
|
||||
ps.setInt(4, quantity);
|
||||
ps.setLong(5, item.getExpiration());
|
||||
@@ -176,7 +176,7 @@ public final class MTSHandler extends AbstractMaplePacketHandler {
|
||||
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.setInt(1, 1);
|
||||
ps.setInt(2, (int) invType.getType());
|
||||
ps.setInt(2, invType.getType());
|
||||
ps.setInt(3, equip.getItemId());
|
||||
ps.setInt(4, quantity);
|
||||
ps.setLong(5, equip.getExpiration());
|
||||
@@ -557,7 +557,7 @@ public final class MTSHandler extends AbstractMaplePacketHandler {
|
||||
if (rs.getInt("type") != 1) {
|
||||
Item i = new Item(rs.getInt("itemid"), (byte) 0, (short) rs.getInt("quantity"));
|
||||
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 {
|
||||
Equip equip = new Equip(rs.getInt("itemid"), (byte) rs.getInt("position"), -1);
|
||||
equip.setOwner(rs.getString("owner"));
|
||||
@@ -586,7 +586,7 @@ public final class MTSHandler extends AbstractMaplePacketHandler {
|
||||
equip.setRingId(rs.getInt("ringid"));
|
||||
equip.setExpiration(rs.getLong("expiration"));
|
||||
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();
|
||||
@@ -617,7 +617,7 @@ public final class MTSHandler extends AbstractMaplePacketHandler {
|
||||
if (rse.getInt("type") != 1) {
|
||||
Item i = new Item(rse.getInt("itemid"), (short) 0, (short) rse.getInt("quantity"));
|
||||
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 {
|
||||
Equip equip = new Equip(rse.getInt("itemid"), (byte) rse.getInt("position"), -1);
|
||||
equip.setOwner(rse.getString("owner"));
|
||||
@@ -646,7 +646,7 @@ public final class MTSHandler extends AbstractMaplePacketHandler {
|
||||
equip.setFlag((short) rs.getInt("flag"));
|
||||
equip.setExpiration(rs.getLong("expiration"));
|
||||
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) {
|
||||
Item i = new Item(rs.getInt("itemid"), (short) 0, (short) rs.getInt("quantity"));
|
||||
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 {
|
||||
Equip equip = new Equip(rs.getInt("itemid"), (byte) rs.getInt("position"), -1);
|
||||
equip.setOwner(rs.getString("owner"));
|
||||
@@ -714,7 +714,7 @@ public final class MTSHandler extends AbstractMaplePacketHandler {
|
||||
equip.setFlag((short) rs.getInt("flag"));
|
||||
equip.setExpiration(rs.getLong("expiration"));
|
||||
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();
|
||||
@@ -751,7 +751,7 @@ public final class MTSHandler extends AbstractMaplePacketHandler {
|
||||
if (rs.getInt("type") != 1) {
|
||||
Item i = new Item(rs.getInt("itemid"), (short) 0, (short) rs.getInt("quantity"));
|
||||
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 {
|
||||
Equip equip = new Equip(rs.getInt("itemid"), (byte) rs.getInt("position"), -1);
|
||||
equip.setOwner(rs.getString("owner"));
|
||||
@@ -780,7 +780,7 @@ public final class MTSHandler extends AbstractMaplePacketHandler {
|
||||
equip.setFlag((short) rs.getInt("flag"));
|
||||
equip.setExpiration(rs.getLong("expiration"));
|
||||
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();
|
||||
@@ -850,7 +850,7 @@ public final class MTSHandler extends AbstractMaplePacketHandler {
|
||||
if (rs.getInt("type") != 1) {
|
||||
Item i = new Item(rs.getInt("itemid"), (short) 0, (short) rs.getInt("quantity"));
|
||||
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 {
|
||||
Equip equip = new Equip(rs.getInt("itemid"), (byte) rs.getInt("position"), -1);
|
||||
equip.setOwner(rs.getString("owner"));
|
||||
@@ -879,7 +879,7 @@ public final class MTSHandler extends AbstractMaplePacketHandler {
|
||||
equip.setFlag((short) rs.getInt("flag"));
|
||||
equip.setExpiration(rs.getLong("expiration"));
|
||||
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();
|
||||
|
||||
@@ -43,7 +43,7 @@ public final class MultiChatHandler extends AbstractMaplePacketHandler {
|
||||
|
||||
int type = slea.readByte(); // 0 for buddys, 1 for partys
|
||||
int numRecipients = slea.readByte();
|
||||
int recipients[] = new int[numRecipients];
|
||||
int[] recipients = new int[numRecipients];
|
||||
for (int i = 0; i < numRecipients; i++) {
|
||||
recipients[i] = slea.readInt();
|
||||
}
|
||||
|
||||
@@ -23,9 +23,9 @@ package net.server.channel.handlers;
|
||||
|
||||
import client.MapleCharacter;
|
||||
import client.MapleClient;
|
||||
import client.inventory.MaplePet;
|
||||
import client.inventory.PetCommand;
|
||||
import client.inventory.PetDataFactory;
|
||||
import client.inventory.MaplePet;
|
||||
import net.AbstractMaplePacketHandler;
|
||||
import tools.MaplePacketCreator;
|
||||
import tools.Randomizer;
|
||||
@@ -47,7 +47,7 @@ public final class PetCommandHandler extends AbstractMaplePacketHandler {
|
||||
slea.readInt();
|
||||
slea.readByte();
|
||||
byte command = slea.readByte();
|
||||
PetCommand petCommand = PetDataFactory.getPetCommand(pet.getItemId(), (int) command);
|
||||
PetCommand petCommand = PetDataFactory.getPetCommand(pet.getItemId(), command);
|
||||
if (petCommand == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -234,7 +234,7 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler {
|
||||
player.visitMap(player.getMap());
|
||||
|
||||
BuddyList bl = player.getBuddylist();
|
||||
int buddyIds[] = bl.getBuddyIds();
|
||||
int[] buddyIds = bl.getBuddyIds();
|
||||
wserv.loggedOn(player.getName(), player.getId(), c.getChannel(), buddyIds);
|
||||
for (CharacterIdChannelPair onlineBuddy : wserv.multiBuddyFind(player.getId(), buddyIds)) {
|
||||
BuddylistEntry ble = bl.get(onlineBuddy.getCharacterId());
|
||||
@@ -360,7 +360,7 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler {
|
||||
|
||||
if(diseases != null) {
|
||||
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()));
|
||||
}
|
||||
}
|
||||
@@ -451,12 +451,7 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler {
|
||||
timedBuffs.add(new Pair<>(curtime - pb.usedTime, pb));
|
||||
}
|
||||
|
||||
Collections.sort(timedBuffs, new Comparator<Pair<Long, PlayerBuffValueHolder>>() {
|
||||
@Override
|
||||
public int compare(Pair<Long, PlayerBuffValueHolder> p1, Pair<Long, PlayerBuffValueHolder> p2) {
|
||||
return p1.getLeft().compareTo(p2.getLeft());
|
||||
}
|
||||
});
|
||||
timedBuffs.sort((p1, p2) -> p1.getLeft().compareTo(p2.getLeft()));
|
||||
|
||||
return timedBuffs;
|
||||
}
|
||||
|
||||
@@ -1,20 +1,20 @@
|
||||
package net.server.channel.handlers;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import client.MapleCharacter;
|
||||
import client.MapleClient;
|
||||
import client.MapleQuestStatus;
|
||||
import client.inventory.MapleInventory;
|
||||
import client.inventory.MapleInventoryType;
|
||||
import net.AbstractMaplePacketHandler;
|
||||
import client.inventory.manipulator.MapleInventoryManipulator;
|
||||
import net.AbstractMaplePacketHandler;
|
||||
import server.MapleItemInformationProvider;
|
||||
import server.MapleItemInformationProvider.QuestConsItem;
|
||||
import server.quest.MapleQuest;
|
||||
import tools.MaplePacketCreator;
|
||||
import tools.data.input.SeekableLittleEndianAccessor;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Xari
|
||||
@@ -55,7 +55,7 @@ public class RaiseIncExpHandler extends AbstractMaplePacketHandler {
|
||||
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 {
|
||||
inv.unlockInventory();
|
||||
}
|
||||
|
||||
@@ -21,26 +21,23 @@
|
||||
*/
|
||||
package net.server.channel.handlers;
|
||||
|
||||
import client.MapleClient;
|
||||
import client.MapleCharacter;
|
||||
import client.MapleClient;
|
||||
import client.Skill;
|
||||
import client.SkillFactory;
|
||||
import client.inventory.Equip;
|
||||
import client.inventory.*;
|
||||
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 constants.inventory.ItemConstants;
|
||||
import net.AbstractMaplePacketHandler;
|
||||
import server.MapleItemInformationProvider;
|
||||
import tools.MaplePacketCreator;
|
||||
import tools.data.input.SeekableLittleEndianAccessor;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author Matze
|
||||
* @author Frz
|
||||
@@ -81,7 +78,7 @@ public final class ScrollHandler extends AbstractMaplePacketHandler {
|
||||
announceCannotScroll(c, legendarySpirit);
|
||||
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
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -28,13 +28,14 @@ import client.SkillFactory;
|
||||
import client.inventory.Item;
|
||||
import client.inventory.MapleInventory;
|
||||
import client.inventory.MapleInventoryType;
|
||||
import java.util.Map;
|
||||
import net.AbstractMaplePacketHandler;
|
||||
import client.inventory.manipulator.MapleInventoryManipulator;
|
||||
import net.AbstractMaplePacketHandler;
|
||||
import server.MapleItemInformationProvider;
|
||||
import tools.MaplePacketCreator;
|
||||
import tools.data.input.SeekableLittleEndianAccessor;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public final class SkillBookHandler extends AbstractMaplePacketHandler {
|
||||
@Override
|
||||
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
|
||||
@@ -44,7 +45,7 @@ public final class SkillBookHandler extends AbstractMaplePacketHandler {
|
||||
}
|
||||
|
||||
slea.readInt();
|
||||
short slot = (short) slea.readShort();
|
||||
short slot = slea.readShort();
|
||||
int itemId = slea.readInt();
|
||||
|
||||
boolean canuse;
|
||||
|
||||
@@ -21,35 +21,21 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package net.server.channel.handlers;
|
||||
|
||||
import client.MapleBuffStat;
|
||||
import client.MapleCharacter;
|
||||
import client.MapleClient;
|
||||
import client.Skill;
|
||||
import client.SkillFactory;
|
||||
import client.*;
|
||||
import client.inventory.Item;
|
||||
import client.inventory.MapleInventory;
|
||||
import client.inventory.MapleInventoryType;
|
||||
import client.inventory.manipulator.MapleInventoryManipulator;
|
||||
import client.status.MonsterStatus;
|
||||
import client.status.MonsterStatusEffect;
|
||||
import config.YamlConfig;
|
||||
import constants.game.GameConstants;
|
||||
import constants.inventory.ItemConstants;
|
||||
import constants.skills.Aran;
|
||||
|
||||
import java.awt.Point;
|
||||
import java.util.Collections;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import net.AbstractMaplePacketHandler;
|
||||
import client.inventory.manipulator.MapleInventoryManipulator;
|
||||
import server.MapleStatEffect;
|
||||
import server.life.MapleLifeFactory.loseItem;
|
||||
import server.life.MapleMonster;
|
||||
import server.life.MobAttackInfo;
|
||||
import server.life.MobAttackInfoFactory;
|
||||
import server.life.MobSkill;
|
||||
import server.life.MobSkillFactory;
|
||||
import server.life.*;
|
||||
import server.maps.MapleMap;
|
||||
import server.maps.MapleMapObject;
|
||||
import tools.FilePrinter;
|
||||
@@ -57,6 +43,11 @@ import tools.MaplePacketCreator;
|
||||
import tools.Randomizer;
|
||||
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 {
|
||||
|
||||
@Override
|
||||
@@ -128,7 +119,7 @@ public final class TakeDamageHandler extends AbstractMaplePacketHandler {
|
||||
}
|
||||
|
||||
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);
|
||||
d++;
|
||||
}
|
||||
|
||||
@@ -20,13 +20,6 @@
|
||||
|
||||
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.MapleClient;
|
||||
import config.YamlConfig;
|
||||
@@ -35,6 +28,9 @@ import tools.DatabaseConnection;
|
||||
import tools.MaplePacketCreator;
|
||||
import tools.data.input.SeekableLittleEndianAccessor;
|
||||
|
||||
import java.sql.*;
|
||||
import java.util.Calendar;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Ronan
|
||||
@@ -76,7 +72,7 @@ public final class TransferNameHandler extends AbstractMaplePacketHandler {
|
||||
} else if(completedTimestamp.getTime() + YamlConfig.config.server.NAME_CHANGE_COOLDOWN > System.currentTimeMillis()) {
|
||||
c.announce(MaplePacketCreator.sendNameTransferRules(3));
|
||||
return;
|
||||
};
|
||||
}
|
||||
}
|
||||
} catch(SQLException e) {
|
||||
e.printStackTrace();
|
||||
|
||||
@@ -20,12 +20,6 @@
|
||||
|
||||
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.MapleClient;
|
||||
import config.YamlConfig;
|
||||
@@ -35,6 +29,8 @@ import tools.DatabaseConnection;
|
||||
import tools.MaplePacketCreator;
|
||||
import tools.data.input.SeekableLittleEndianAccessor;
|
||||
|
||||
import java.sql.*;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Ronan
|
||||
@@ -73,7 +69,7 @@ public final class TransferWorldHandler extends AbstractMaplePacketHandler {
|
||||
} else if(completedTimestamp.getTime() + YamlConfig.config.server.WORLD_TRANSFER_COOLDOWN > System.currentTimeMillis()) {
|
||||
c.announce(MaplePacketCreator.sendWorldTransferRules(7, c));
|
||||
return;
|
||||
};
|
||||
}
|
||||
}
|
||||
} catch(SQLException e) {
|
||||
e.printStackTrace();
|
||||
|
||||
@@ -21,49 +21,34 @@
|
||||
*/
|
||||
package net.server.channel.handlers;
|
||||
|
||||
import client.MapleCharacter;
|
||||
import client.MapleClient;
|
||||
import client.Skill;
|
||||
import client.SkillFactory;
|
||||
import client.SkillMacro;
|
||||
import client.*;
|
||||
import client.creator.veteran.*;
|
||||
import client.inventory.Equip;
|
||||
import client.inventory.*;
|
||||
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.MapleKarmaManipulator;
|
||||
import client.processor.npc.DueyProcessor;
|
||||
import client.processor.stat.AssignAPProcessor;
|
||||
import client.processor.stat.AssignSPProcessor;
|
||||
import client.processor.npc.DueyProcessor;
|
||||
import config.YamlConfig;
|
||||
import constants.game.GameConstants;
|
||||
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.server.Server;
|
||||
import server.MapleItemInformationProvider;
|
||||
import server.MapleShop;
|
||||
import server.MapleShopFactory;
|
||||
import server.TimerManager;
|
||||
import server.maps.AbstractMapleMapObject;
|
||||
import server.maps.FieldLimit;
|
||||
import server.maps.MaplePlayerShopItem;
|
||||
import server.maps.MapleKite;
|
||||
import server.maps.MapleMap;
|
||||
import server.maps.MapleTVEffect;
|
||||
import server.maps.*;
|
||||
import tools.MaplePacketCreator;
|
||||
import tools.Pair;
|
||||
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 {
|
||||
|
||||
@Override
|
||||
@@ -449,12 +434,7 @@ public final class UseCashItemHandler extends AbstractMaplePacketHandler {
|
||||
|
||||
final int world = c.getWorld();
|
||||
Server.getInstance().broadcastMessage(world, MaplePacketCreator.getAvatarMega(player, medal, c.getChannel(), itemId, strLines, (slea.readByte() != 0)));
|
||||
TimerManager.getInstance().schedule(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
Server.getInstance().broadcastMessage(world, MaplePacketCreator.byeAvatarMega());
|
||||
}
|
||||
}, 1000 * 10);
|
||||
TimerManager.getInstance().schedule(() -> Server.getInstance().broadcastMessage(world, MaplePacketCreator.byeAvatarMega()), 1000 * 10);
|
||||
remove(c, position, itemId);
|
||||
} else if (itemType == 540) {
|
||||
slea.readByte();
|
||||
@@ -597,26 +577,23 @@ public final class UseCashItemHandler extends AbstractMaplePacketHandler {
|
||||
remove(c, position, itemId);
|
||||
|
||||
final MapleClient client = c;
|
||||
TimerManager.getInstance().schedule(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if(!player.isLoggedin()) return;
|
||||
|
||||
player.toggleBlockCashShop();
|
||||
|
||||
final List<ModifyInventory> mods = new ArrayList<>();
|
||||
mods.add(new ModifyInventory(3, scrolled));
|
||||
mods.add(new ModifyInventory(0, scrolled));
|
||||
client.announce(MaplePacketCreator.modifyInventory(true, mods));
|
||||
TimerManager.getInstance().schedule(() -> {
|
||||
if(!player.isLoggedin()) return;
|
||||
|
||||
ScrollResult scrollResult = scrolled.getLevel() > curlevel ? ScrollResult.SUCCESS : ScrollResult.FAIL;
|
||||
player.getMap().broadcastMessage(MaplePacketCreator.getScrollEffect(player.getId(), scrollResult, false, false));
|
||||
if (eSlot < 0 && (scrollResult == ScrollResult.SUCCESS)) {
|
||||
player.equipChanged();
|
||||
}
|
||||
player.toggleBlockCashShop();
|
||||
|
||||
client.announce(MaplePacketCreator.enableActions());
|
||||
}
|
||||
final List<ModifyInventory> mods = new ArrayList<>();
|
||||
mods.add(new ModifyInventory(3, scrolled));
|
||||
mods.add(new ModifyInventory(0, scrolled));
|
||||
client.announce(MaplePacketCreator.modifyInventory(true, mods));
|
||||
|
||||
ScrollResult scrollResult = scrolled.getLevel() > curlevel ? ScrollResult.SUCCESS : ScrollResult.FAIL;
|
||||
player.getMap().broadcastMessage(MaplePacketCreator.getScrollEffect(player.getId(), scrollResult, false, false));
|
||||
if (eSlot < 0 && (scrollResult == ScrollResult.SUCCESS)) {
|
||||
player.equipChanged();
|
||||
}
|
||||
|
||||
client.announce(MaplePacketCreator.enableActions());
|
||||
}, 1000 * 3);
|
||||
} else {
|
||||
System.out.println("NEW CASH ITEM: " + itemType + "\n" + slea.toString());
|
||||
|
||||
@@ -20,18 +20,17 @@
|
||||
package net.server.channel.handlers;
|
||||
|
||||
import client.MapleClient;
|
||||
import constants.game.GameConstants;
|
||||
import net.AbstractMaplePacketHandler;
|
||||
import tools.data.input.SeekableLittleEndianAccessor;
|
||||
import tools.MaplePacketCreator;
|
||||
import tools.Pair;
|
||||
import tools.data.input.SeekableLittleEndianAccessor;
|
||||
|
||||
import java.util.Comparator;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.PriorityQueue;
|
||||
|
||||
import constants.game.GameConstants;
|
||||
|
||||
/**
|
||||
* @author Ronan
|
||||
*/
|
||||
@@ -48,17 +47,11 @@ public final class UseOwlOfMinervaHandler extends AbstractMaplePacketHandler {
|
||||
owlLeaderboards.add(i);
|
||||
}
|
||||
} else {
|
||||
Comparator<Pair<Integer, Integer>> comparator = new Comparator<Pair<Integer, Integer>>() { // descending order
|
||||
@Override
|
||||
public int compare(Pair<Integer, Integer> p1, Pair<Integer, Integer> p2) {
|
||||
return p2.getRight().compareTo(p1.getRight());
|
||||
}
|
||||
};
|
||||
// descending order
|
||||
Comparator<Pair<Integer, Integer>> comparator = (p1, p2) -> p2.getRight().compareTo(p1.getRight());
|
||||
|
||||
PriorityQueue<Pair<Integer, Integer>> queue = new PriorityQueue<>(Math.max(1, owlSearched.size()), comparator);
|
||||
for(Pair<Integer, Integer> p : owlSearched) {
|
||||
queue.add(p);
|
||||
}
|
||||
queue.addAll(owlSearched);
|
||||
|
||||
owlLeaderboards = new LinkedList<>();
|
||||
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.inventory.Item;
|
||||
import client.inventory.MapleInventoryType;
|
||||
import tools.Randomizer;
|
||||
import net.AbstractMaplePacketHandler;
|
||||
import client.inventory.manipulator.MapleInventoryManipulator;
|
||||
import net.AbstractMaplePacketHandler;
|
||||
import server.MapleItemInformationProvider;
|
||||
import server.life.MapleLifeFactory;
|
||||
import tools.MaplePacketCreator;
|
||||
import tools.Randomizer;
|
||||
import tools.data.input.SeekableLittleEndianAccessor;
|
||||
|
||||
/**
|
||||
@@ -52,8 +52,7 @@ public final class UseSummonBagHandler extends AbstractMaplePacketHandler {
|
||||
if (toUse != null && toUse.getQuantity() > 0 && toUse.getItemId() == itemId) {
|
||||
MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.USE, slot, (short) 1, false);
|
||||
int[][] toSpawn = MapleItemInformationProvider.getInstance().getSummonMobs(itemId);
|
||||
for (int z = 0; z < toSpawn.length; z++) {
|
||||
int[] toSpawnChild = toSpawn[z];
|
||||
for (int[] toSpawnChild : toSpawn) {
|
||||
if (Randomizer.nextInt(100) < toSpawnChild[1]) {
|
||||
c.getPlayer().getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(toSpawnChild[0]), c.getPlayer().getPosition());
|
||||
}
|
||||
|
||||
@@ -20,14 +20,14 @@
|
||||
package net.server.coordinator.login;
|
||||
|
||||
import config.YamlConfig;
|
||||
import net.server.Server;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import net.server.Server;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Ronan
|
||||
@@ -39,7 +39,7 @@ public class LoginStorage {
|
||||
public boolean registerLogin(int accountId) {
|
||||
List<Long> accHist = loginHistory.get(accountId);
|
||||
if (accHist == null) {
|
||||
accHist = new LinkedList<Long>();
|
||||
accHist = new LinkedList<>();
|
||||
loginHistory.put(accountId, accHist);
|
||||
}
|
||||
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
package net.server.coordinator.matchchecker;
|
||||
|
||||
import client.MapleCharacter;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
@@ -27,8 +28,8 @@ import java.util.Set;
|
||||
* @author Ronan
|
||||
*/
|
||||
public interface AbstractMatchCheckerListener {
|
||||
public void onMatchCreated(MapleCharacter leader, Set<MapleCharacter> nonLeaderMatchPlayers, String message);
|
||||
public void onMatchAccepted(int leaderid, Set<MapleCharacter> matchPlayers, String message);
|
||||
public void onMatchDeclined(int leaderid, Set<MapleCharacter> matchPlayers, String message);
|
||||
public void onMatchDismissed(int leaderid, Set<MapleCharacter> matchPlayers, String message);
|
||||
void onMatchCreated(MapleCharacter leader, Set<MapleCharacter> nonLeaderMatchPlayers, String message);
|
||||
void onMatchAccepted(int leaderid, Set<MapleCharacter> matchPlayers, String message);
|
||||
void onMatchDeclined(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
|
||||
*/
|
||||
public interface MatchCheckerListenerRecipe {
|
||||
public AbstractMatchCheckerListener getListener();
|
||||
AbstractMatchCheckerListener getListener();
|
||||
}
|
||||
|
||||
@@ -22,20 +22,6 @@ package net.server.coordinator.partysearch;
|
||||
import client.MapleCharacter;
|
||||
import client.MapleJob;
|
||||
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.MonitoredReadLock;
|
||||
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.MonitoredWriteLockFactory;
|
||||
import net.server.coordinator.world.MapleInviteCoordinator;
|
||||
import net.server.coordinator.world.MapleInviteCoordinator.InviteType;
|
||||
import net.server.world.MapleParty;
|
||||
import provider.MapleData;
|
||||
import provider.MapleDataProviderFactory;
|
||||
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");
|
||||
if (data != null) {
|
||||
for (MapleData mapdata : data.getChildren()) {
|
||||
int mapid = Integer.valueOf(mapdata.getName());
|
||||
int mapid = Integer.parseInt(mapdata.getName());
|
||||
|
||||
Set<Integer> neighborMaps = new HashSet<>();
|
||||
mapLinks.put(mapid, neighborMaps);
|
||||
|
||||
@@ -20,24 +20,16 @@
|
||||
package net.server.coordinator.partysearch;
|
||||
|
||||
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.MonitoredReadLock;
|
||||
import net.server.audit.locks.MonitoredReentrantReadWriteLock;
|
||||
import net.server.audit.locks.MonitoredWriteLock;
|
||||
import net.server.audit.locks.factory.MonitoredReadLockFactory;
|
||||
import net.server.audit.locks.factory.MonitoredWriteLockFactory;
|
||||
|
||||
import tools.IntervalBuilder;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Ronan
|
||||
@@ -90,13 +82,9 @@ public class PartySearchStorage {
|
||||
pscList.add(new PartySearchCharacter(chr));
|
||||
}
|
||||
|
||||
Collections.sort(pscList, new Comparator<PartySearchCharacter>() {
|
||||
@Override
|
||||
public int compare(PartySearchCharacter c1, PartySearchCharacter c2)
|
||||
{
|
||||
int levelP1 = c1.getLevel(), levelP2 = c2.getLevel();
|
||||
return levelP1 > levelP2 ? 1 : (levelP1 == levelP2 ? 0 : -1);
|
||||
}
|
||||
pscList.sort((c1, c2) -> {
|
||||
int levelP1 = c1.getLevel(), levelP2 = c2.getLevel();
|
||||
return levelP1 > levelP2 ? 1 : (levelP1 == levelP2 ? 0 : -1);
|
||||
});
|
||||
|
||||
psWLock.lock();
|
||||
|
||||
@@ -579,12 +579,7 @@ public class MapleSessionCoordinator {
|
||||
public void printSessionTrace() {
|
||||
if (!onlineClients.isEmpty()) {
|
||||
List<Entry<Integer, MapleClient>> elist = new ArrayList<>(onlineClients.entrySet());
|
||||
Collections.sort(elist, new Comparator<Entry<Integer, MapleClient>>() {
|
||||
@Override
|
||||
public int compare(Entry<Integer, MapleClient> e1, Entry<Integer, MapleClient> e2) {
|
||||
return e1.getKey().compareTo(e2.getKey());
|
||||
}
|
||||
});
|
||||
elist.sort((e1, e2) -> e1.getKey().compareTo(e2.getKey()));
|
||||
|
||||
System.out.println("Current online clients: ");
|
||||
for (Entry<Integer, MapleClient> e : elist) {
|
||||
@@ -605,12 +600,7 @@ public class MapleSessionCoordinator {
|
||||
if (!loginRemoteHosts.isEmpty()) {
|
||||
List<Entry<String, Set<IoSession>>> elist = new ArrayList<>(loginRemoteHosts.entrySet());
|
||||
|
||||
Collections.sort(elist, new Comparator<Entry<String, Set<IoSession>>>() {
|
||||
@Override
|
||||
public int compare(Entry<String, Set<IoSession>> e1, Entry<String, Set<IoSession>> e2) {
|
||||
return e1.getKey().compareTo(e2.getKey());
|
||||
}
|
||||
});
|
||||
elist.sort((e1, e2) -> e1.getKey().compareTo(e2.getKey()));
|
||||
|
||||
System.out.println("Current login sessions: ");
|
||||
for (Entry<String, Set<IoSession>> e : elist) {
|
||||
@@ -624,12 +614,7 @@ public class MapleSessionCoordinator {
|
||||
|
||||
if (!onlineClients.isEmpty()) {
|
||||
List<Entry<Integer, MapleClient>> elist = new ArrayList<>(onlineClients.entrySet());
|
||||
Collections.sort(elist, new Comparator<Entry<Integer, MapleClient>>() {
|
||||
@Override
|
||||
public int compare(Entry<Integer, MapleClient> e1, Entry<Integer, MapleClient> e2) {
|
||||
return e1.getKey().compareTo(e2.getKey());
|
||||
}
|
||||
});
|
||||
elist.sort((e1, e2) -> e1.getKey().compareTo(e2.getKey()));
|
||||
|
||||
str += ("Current online clients:\r\n");
|
||||
for (Entry<Integer, MapleClient> e : elist) {
|
||||
@@ -650,12 +635,7 @@ public class MapleSessionCoordinator {
|
||||
if (!loginRemoteHosts.isEmpty()) {
|
||||
List<Entry<String, Set<IoSession>>> elist = new ArrayList<>(loginRemoteHosts.entrySet());
|
||||
|
||||
Collections.sort(elist, new Comparator<Entry<String, Set<IoSession>>>() {
|
||||
@Override
|
||||
public int compare(Entry<String, Set<IoSession>> e1, Entry<String, Set<IoSession>> e2) {
|
||||
return e1.getKey().compareTo(e2.getKey());
|
||||
}
|
||||
});
|
||||
elist.sort((e1, e2) -> e1.getKey().compareTo(e2.getKey()));
|
||||
|
||||
str += ("Current login sessions:\r\n");
|
||||
for (Entry<String, Set<IoSession>> e : elist) {
|
||||
|
||||
@@ -22,10 +22,10 @@ package net.server.coordinator.world;
|
||||
import client.MapleCharacter;
|
||||
import tools.Pair;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
import java.util.HashSet;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
/**
|
||||
@@ -37,7 +37,7 @@ public class MapleInviteCoordinator {
|
||||
public enum InviteResult {
|
||||
ACCEPTED,
|
||||
DENIED,
|
||||
NOT_FOUND;
|
||||
NOT_FOUND
|
||||
}
|
||||
|
||||
public enum InviteType {
|
||||
|
||||
@@ -19,30 +19,22 @@
|
||||
*/
|
||||
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 java.util.concurrent.ScheduledFuture;
|
||||
import config.YamlConfig;
|
||||
import net.server.Server;
|
||||
import net.server.audit.LockCollector;
|
||||
import server.life.MapleMonster;
|
||||
import server.maps.MapleMap;
|
||||
import net.server.audit.locks.MonitoredLockType;
|
||||
import net.server.audit.locks.MonitoredReentrantLock;
|
||||
import net.server.audit.locks.factory.MonitoredReentrantLockFactory;
|
||||
import server.TimerManager;
|
||||
import server.life.MapleMonster;
|
||||
import server.maps.MapleMap;
|
||||
import tools.Pair;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.concurrent.ScheduledFuture;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Ronan
|
||||
@@ -95,12 +87,9 @@ public class MapleMonsterAggroCoordinator {
|
||||
try {
|
||||
if (aggroMonitor != null) return;
|
||||
|
||||
aggroMonitor = TimerManager.getInstance().register(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
runAggroUpdate(1);
|
||||
runSortLeadingCharactersAggro();
|
||||
}
|
||||
aggroMonitor = TimerManager.getInstance().register(() -> {
|
||||
runAggroUpdate(1);
|
||||
runSortLeadingCharactersAggro();
|
||||
}, YamlConfig.config.server.MOB_STATUS_AGGRO_INTERVAL, YamlConfig.config.server.MOB_STATUS_AGGRO_INTERVAL);
|
||||
} finally {
|
||||
idleLock.unlock();
|
||||
@@ -244,12 +233,8 @@ public class MapleMonsterAggroCoordinator {
|
||||
}
|
||||
|
||||
if (!toRemoveIdx.isEmpty()) {
|
||||
Collections.sort(toRemoveIdx, new Comparator<Integer>() { // last to first indexes
|
||||
@Override
|
||||
public int compare(Integer p1, Integer p2) {
|
||||
return p1 < p2 ? 1 : p1.equals(p2) ? 0 : -1;
|
||||
}
|
||||
});
|
||||
// last to first indexes
|
||||
toRemoveIdx.sort((p1, p2) -> p1 < p2 ? 1 : p1.equals(p2) ? 0 : -1);
|
||||
|
||||
for (int idx : toRemoveIdx) {
|
||||
sortedAggro.remove(idx);
|
||||
@@ -387,12 +372,7 @@ public class MapleMonsterAggroCoordinator {
|
||||
}
|
||||
|
||||
private void disposeLocks() {
|
||||
LockCollector.getInstance().registerDisposeAction(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
emptyLocks();
|
||||
}
|
||||
});
|
||||
LockCollector.getInstance().registerDisposeAction(() -> emptyLocks());
|
||||
}
|
||||
|
||||
private void emptyLocks() {
|
||||
|
||||
@@ -115,7 +115,7 @@ public class MapleGuild {
|
||||
if (notifications.keySet().size() != chs.size()) {
|
||||
notifications.clear();
|
||||
for (Integer ch : chs) {
|
||||
notifications.put(ch, new LinkedList<Integer>());
|
||||
notifications.put(ch, new LinkedList<>());
|
||||
}
|
||||
} else {
|
||||
for (List<Integer> l : notifications.values()) {
|
||||
|
||||
@@ -22,7 +22,9 @@
|
||||
package net.server.handlers.login;
|
||||
|
||||
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 tools.FilePrinter;
|
||||
import tools.MaplePacketCreator;
|
||||
@@ -66,8 +68,8 @@ public final class CreateCharHandler extends AbstractMaplePacketHandler {
|
||||
int gender = slea.readByte();
|
||||
|
||||
int [] items = new int [] {weapon, top, bottom, shoes, hair, face};
|
||||
for (int i = 0; i < items.length; i++){
|
||||
if (!isLegal(items[i])) {
|
||||
for (int item : items) {
|
||||
if (!isLegal(item)) {
|
||||
FilePrinter.printError(FilePrinter.EXPLOITS + name + ".txt", "Owner from account '" + c.getAccountName() + "' tried to packet edit in char creation.");
|
||||
c.disconnect(true, false);
|
||||
return;
|
||||
|
||||
@@ -20,14 +20,6 @@
|
||||
package net.server.services;
|
||||
|
||||
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.audit.LockCollector;
|
||||
import net.server.audit.locks.MonitoredLockType;
|
||||
@@ -36,6 +28,10 @@ import net.server.audit.locks.factory.MonitoredReentrantLockFactory;
|
||||
import server.TimerManager;
|
||||
import tools.Pair;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.concurrent.ScheduledFuture;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Ronan
|
||||
@@ -48,12 +44,7 @@ public abstract class BaseScheduler {
|
||||
|
||||
private ScheduledFuture<?> schedulerTask = null;
|
||||
private MonitoredReentrantLock schedulerLock;
|
||||
private Runnable monitorTask = new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
runBaseSchedule();
|
||||
}
|
||||
};
|
||||
private Runnable monitorTask = () -> runBaseSchedule();
|
||||
|
||||
protected BaseScheduler(MonitoredLockType lockType) {
|
||||
schedulerLock = MonitoredReentrantLockFactory.createLock(lockType, true);
|
||||
@@ -62,10 +53,8 @@ public abstract class BaseScheduler {
|
||||
// NOTE: practice EXTREME caution when adding external locks to the scheduler system, if you don't know what you're doing DON'T USE THIS.
|
||||
protected BaseScheduler(MonitoredLockType lockType, List<MonitoredReentrantLock> extLocks) {
|
||||
schedulerLock = MonitoredReentrantLockFactory.createLock(lockType, true);
|
||||
|
||||
for(MonitoredReentrantLock lock : extLocks) {
|
||||
externalLocks.add(lock);
|
||||
}
|
||||
|
||||
externalLocks.addAll(extLocks);
|
||||
}
|
||||
|
||||
protected void addListener(SchedulerListener listener) {
|
||||
@@ -201,12 +190,7 @@ public abstract class BaseScheduler {
|
||||
}
|
||||
|
||||
private void disposeLocks() {
|
||||
LockCollector.getInstance().registerDisposeAction(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
emptyLocks();
|
||||
}
|
||||
});
|
||||
LockCollector.getInstance().registerDisposeAction(() -> emptyLocks());
|
||||
}
|
||||
|
||||
private void emptyLocks() {
|
||||
|
||||
@@ -26,5 +26,5 @@ import java.util.List;
|
||||
* @author Ronan
|
||||
*/
|
||||
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) {
|
||||
try {
|
||||
cls = s;
|
||||
service = (BaseService) cls.getConstructor().newInstance();
|
||||
service = cls.getConstructor().newInstance();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
@@ -24,7 +24,7 @@ package net.server.services;
|
||||
* @author Ronan
|
||||
*/
|
||||
public interface ServiceType <T extends Enum<?>> {
|
||||
public abstract Service createService();
|
||||
public int ordinal();
|
||||
public T[] enumValues();
|
||||
Service createService();
|
||||
int ordinal();
|
||||
T[] enumValues();
|
||||
}
|
||||
|
||||
@@ -41,8 +41,8 @@ public class ServicesManager {
|
||||
}
|
||||
|
||||
public void shutdown() {
|
||||
for (int i = 0; i < services.length; i++) {
|
||||
services[i].dispose();
|
||||
for (Service service : services) {
|
||||
service.dispose();
|
||||
}
|
||||
services = null;
|
||||
}
|
||||
|
||||
@@ -19,10 +19,10 @@
|
||||
*/
|
||||
package net.server.services.task.channel;
|
||||
|
||||
import net.server.services.BaseService;
|
||||
import config.YamlConfig;
|
||||
import net.server.audit.locks.MonitoredLockType;
|
||||
import net.server.services.BaseScheduler;
|
||||
import net.server.services.BaseService;
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -30,7 +30,7 @@ import net.server.services.BaseScheduler;
|
||||
*/
|
||||
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() {
|
||||
for(int i = 0; i < YamlConfig.config.server.CHANNEL_LOCKS; i++) {
|
||||
|
||||
@@ -19,26 +19,27 @@
|
||||
*/
|
||||
package net.server.services.task.channel;
|
||||
|
||||
import net.server.services.BaseService;
|
||||
import client.MapleCharacter;
|
||||
import config.YamlConfig;
|
||||
import java.util.Collections;
|
||||
import net.server.audit.LockCollector;
|
||||
import net.server.audit.locks.MonitoredLockType;
|
||||
import net.server.audit.locks.MonitoredReentrantLock;
|
||||
import net.server.audit.locks.factory.MonitoredReentrantLockFactory;
|
||||
import net.server.services.BaseScheduler;
|
||||
import net.server.services.BaseService;
|
||||
import server.maps.MapleMap;
|
||||
import tools.MaplePacketCreator;
|
||||
|
||||
import java.util.Collections;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Ronan
|
||||
*/
|
||||
public class FaceExpressionService extends BaseService {
|
||||
|
||||
private FaceExpressionScheduler faceExpressionSchedulers[] = new FaceExpressionScheduler[YamlConfig.config.server.CHANNEL_LOCKS];
|
||||
private MonitoredReentrantLock faceLock[] = new MonitoredReentrantLock[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];
|
||||
|
||||
public FaceExpressionService() {
|
||||
for(int i = 0; i < YamlConfig.config.server.CHANNEL_LOCKS; i++) {
|
||||
@@ -54,12 +55,7 @@ public class FaceExpressionService extends BaseService {
|
||||
}
|
||||
|
||||
private void disposeLocks() {
|
||||
LockCollector.getInstance().registerDisposeAction(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
emptyLocks();
|
||||
}
|
||||
});
|
||||
LockCollector.getInstance().registerDisposeAction(() -> emptyLocks());
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -77,12 +73,9 @@ public class FaceExpressionService extends BaseService {
|
||||
public void registerFaceExpression(final MapleMap map, final MapleCharacter chr, int emote) {
|
||||
int lockid = getChannelSchedulerIndex(map.getId());
|
||||
|
||||
Runnable cancelAction = new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if(chr.isLoggedinWorld()) {
|
||||
map.broadcastMessage(chr, MaplePacketCreator.facialExpression(chr, 0), false);
|
||||
}
|
||||
Runnable cancelAction = () -> {
|
||||
if(chr.isLoggedinWorld()) {
|
||||
map.broadcastMessage(chr, MaplePacketCreator.facialExpression(chr, 0), false);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -19,18 +19,16 @@
|
||||
*/
|
||||
package net.server.services.task.channel;
|
||||
|
||||
import net.server.services.BaseService;
|
||||
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.locks.MonitoredLockType;
|
||||
import net.server.audit.locks.MonitoredReentrantLock;
|
||||
import net.server.audit.locks.factory.MonitoredReentrantLockFactory;
|
||||
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 {
|
||||
|
||||
private MobAnimationScheduler mobAnimationSchedulers[] = new MobAnimationScheduler[YamlConfig.config.server.CHANNEL_LOCKS];
|
||||
private MobAnimationScheduler[] mobAnimationSchedulers = new MobAnimationScheduler[YamlConfig.config.server.CHANNEL_LOCKS];
|
||||
|
||||
public MobAnimationService() {
|
||||
for(int i = 0; i < YamlConfig.config.server.CHANNEL_LOCKS; i++) {
|
||||
@@ -59,11 +57,9 @@ public class MobAnimationService extends BaseService {
|
||||
public boolean registerMobOnAnimationEffect(int mapid, int mobHash, long delay) {
|
||||
return mobAnimationSchedulers[getChannelSchedulerIndex(mapid)].registerAnimationMode(mobHash, delay);
|
||||
}
|
||||
|
||||
private static Runnable r = new Runnable() {
|
||||
@Override
|
||||
public void run() {} // do nothing
|
||||
};
|
||||
|
||||
// do nothing
|
||||
private static Runnable r = () -> {};
|
||||
|
||||
private class MobAnimationScheduler extends BaseScheduler {
|
||||
Set<Integer> onAnimationMobs = new HashSet<>(1000);
|
||||
@@ -72,18 +68,15 @@ public class MobAnimationService extends BaseService {
|
||||
public MobAnimationScheduler() {
|
||||
super(MonitoredLockType.CHANNEL_MOBACTION);
|
||||
|
||||
super.addListener(new SchedulerListener() {
|
||||
@Override
|
||||
public void removedScheduledEntries(List<Object> toRemove, boolean update) {
|
||||
animationLock.lock();
|
||||
try {
|
||||
for(Object hashObj : toRemove) {
|
||||
Integer mobHash = (Integer) hashObj;
|
||||
onAnimationMobs.remove(mobHash);
|
||||
}
|
||||
} finally {
|
||||
animationLock.unlock();
|
||||
super.addListener((toRemove, update) -> {
|
||||
animationLock.lock();
|
||||
try {
|
||||
for(Object hashObj : toRemove) {
|
||||
Integer mobHash = (Integer) hashObj;
|
||||
onAnimationMobs.remove(mobHash);
|
||||
}
|
||||
} finally {
|
||||
animationLock.unlock();
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -110,12 +103,7 @@ public class MobAnimationService extends BaseService {
|
||||
}
|
||||
|
||||
private void disposeLocks() {
|
||||
LockCollector.getInstance().registerDisposeAction(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
emptyLocks();
|
||||
}
|
||||
});
|
||||
LockCollector.getInstance().registerDisposeAction(() -> emptyLocks());
|
||||
}
|
||||
|
||||
private void emptyLocks() {
|
||||
|
||||
@@ -19,10 +19,10 @@
|
||||
*/
|
||||
package net.server.services.task.channel;
|
||||
|
||||
import net.server.services.BaseService;
|
||||
import config.YamlConfig;
|
||||
import net.server.audit.locks.MonitoredLockType;
|
||||
import net.server.services.BaseScheduler;
|
||||
import net.server.services.BaseService;
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -30,7 +30,7 @@ import net.server.services.BaseScheduler;
|
||||
*/
|
||||
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() {
|
||||
for(int i = 0; i < YamlConfig.config.server.CHANNEL_LOCKS; i++) {
|
||||
|
||||
@@ -19,10 +19,10 @@
|
||||
*/
|
||||
package net.server.services.task.channel;
|
||||
|
||||
import net.server.services.BaseService;
|
||||
import config.YamlConfig;
|
||||
import net.server.audit.locks.MonitoredLockType;
|
||||
import net.server.services.BaseScheduler;
|
||||
import net.server.services.BaseService;
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -30,7 +30,7 @@ import net.server.services.BaseScheduler;
|
||||
*/
|
||||
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() {
|
||||
for(int i = 0; i < YamlConfig.config.server.CHANNEL_LOCKS; i++) {
|
||||
|
||||
@@ -19,19 +19,19 @@
|
||||
*/
|
||||
package net.server.services.task.channel;
|
||||
|
||||
import net.server.services.BaseService;
|
||||
import client.status.MonsterStatusEffect;
|
||||
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.locks.MonitoredLockType;
|
||||
import net.server.audit.locks.MonitoredReentrantLock;
|
||||
import net.server.audit.locks.factory.MonitoredReentrantLockFactory;
|
||||
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 {
|
||||
|
||||
private MobStatusScheduler mobStatusSchedulers[] = new MobStatusScheduler[YamlConfig.config.server.CHANNEL_LOCKS];
|
||||
private MobStatusScheduler[] mobStatusSchedulers = new MobStatusScheduler[YamlConfig.config.server.CHANNEL_LOCKS];
|
||||
|
||||
public MobStatusService() {
|
||||
for(int i = 0; i < YamlConfig.config.server.CHANNEL_LOCKS; i++) {
|
||||
@@ -97,32 +97,29 @@ public class MobStatusService extends BaseService {
|
||||
public MobStatusScheduler() {
|
||||
super(MonitoredLockType.CHANNEL_MOBSTATUS);
|
||||
|
||||
super.addListener(new SchedulerListener() {
|
||||
@Override
|
||||
public void removedScheduledEntries(List<Object> toRemove, boolean update) {
|
||||
List<Runnable> toRun = new ArrayList<>();
|
||||
super.addListener((toRemove, update) -> {
|
||||
List<Runnable> toRun = new ArrayList<>();
|
||||
|
||||
overtimeStatusLock.lock();
|
||||
try {
|
||||
for(Object mseo : toRemove) {
|
||||
MonsterStatusEffect mse = (MonsterStatusEffect) mseo;
|
||||
registeredMobStatusOvertime.remove(mse);
|
||||
}
|
||||
|
||||
if(update) {
|
||||
// it's probably ok to use one thread for both management & overtime actions
|
||||
List<MobStatusOvertimeEntry> mdoeList = new ArrayList<>(registeredMobStatusOvertime.values());
|
||||
for(MobStatusOvertimeEntry mdoe : mdoeList) {
|
||||
mdoe.update(toRun);
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
overtimeStatusLock.unlock();
|
||||
overtimeStatusLock.lock();
|
||||
try {
|
||||
for(Object mseo : toRemove) {
|
||||
MonsterStatusEffect mse = (MonsterStatusEffect) mseo;
|
||||
registeredMobStatusOvertime.remove(mse);
|
||||
}
|
||||
|
||||
for(Runnable r : toRun) {
|
||||
r.run();
|
||||
if(update) {
|
||||
// it's probably ok to use one thread for both management & overtime actions
|
||||
List<MobStatusOvertimeEntry> mdoeList = new ArrayList<>(registeredMobStatusOvertime.values());
|
||||
for(MobStatusOvertimeEntry mdoe : mdoeList) {
|
||||
mdoe.update(toRun);
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
overtimeStatusLock.unlock();
|
||||
}
|
||||
|
||||
for(Runnable r : toRun) {
|
||||
r.run();
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -153,12 +150,7 @@ public class MobStatusService extends BaseService {
|
||||
}
|
||||
|
||||
private void disposeLocks() {
|
||||
LockCollector.getInstance().registerDisposeAction(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
emptyLocks();
|
||||
}
|
||||
});
|
||||
LockCollector.getInstance().registerDisposeAction(() -> emptyLocks());
|
||||
}
|
||||
|
||||
private void emptyLocks() {
|
||||
|
||||
@@ -19,10 +19,10 @@
|
||||
*/
|
||||
package net.server.services.task.channel;
|
||||
|
||||
import net.server.services.BaseService;
|
||||
import config.YamlConfig;
|
||||
import net.server.audit.locks.MonitoredLockType;
|
||||
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
|
||||
|
||||
private OverallScheduler channelSchedulers[] = new OverallScheduler[YamlConfig.config.server.CHANNEL_LOCKS];
|
||||
private OverallScheduler[] channelSchedulers = new OverallScheduler[YamlConfig.config.server.CHANNEL_LOCKS];
|
||||
|
||||
public OverallService() {
|
||||
for(int i = 0; i < YamlConfig.config.server.CHANNEL_LOCKS; i++) {
|
||||
|
||||
@@ -29,7 +29,7 @@ import java.util.List;
|
||||
public final class MapleMessenger {
|
||||
|
||||
private int id;
|
||||
private List<MapleMessengerCharacter> members = new ArrayList<MapleMessengerCharacter>(3);
|
||||
private List<MapleMessengerCharacter> members = new ArrayList<>(3);
|
||||
private boolean[] pos = new boolean[3];
|
||||
|
||||
public MapleMessenger(int id, MapleMessengerCharacter chrfor) {
|
||||
|
||||
@@ -24,17 +24,9 @@ package net.server.world;
|
||||
import client.MapleCharacter;
|
||||
import client.MapleClient;
|
||||
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.locks.MonitoredReentrantLock;
|
||||
import net.server.audit.locks.MonitoredLockType;
|
||||
import net.server.audit.locks.MonitoredReentrantLock;
|
||||
import net.server.audit.locks.factory.MonitoredReentrantLockFactory;
|
||||
import net.server.coordinator.matchchecker.MapleMatchCheckerCoordinator;
|
||||
import net.server.coordinator.matchchecker.MatchCheckerListenerFactory.MatchCheckerType;
|
||||
@@ -44,6 +36,9 @@ import server.maps.MapleMap;
|
||||
import server.partyquest.MonsterCarnival;
|
||||
import tools.MaplePacketCreator;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
public class MapleParty {
|
||||
|
||||
private int id;
|
||||
@@ -216,12 +211,7 @@ public class MapleParty {
|
||||
lock.unlock();
|
||||
}
|
||||
|
||||
Collections.sort(histList, new Comparator<Entry<Integer, Integer>>() {
|
||||
@Override
|
||||
public int compare(Entry<Integer, Integer> o1, Entry<Integer, Integer> o2) {
|
||||
return (o1.getValue()).compareTo(o2.getValue());
|
||||
}
|
||||
});
|
||||
histList.sort((o1, o2) -> (o1.getValue()).compareTo(o2.getValue()));
|
||||
|
||||
List<Integer> histSort = new LinkedList<>();
|
||||
for (Entry<Integer, Integer> e : histList) {
|
||||
@@ -292,12 +282,7 @@ public class MapleParty {
|
||||
}
|
||||
|
||||
public void disposeLocks() {
|
||||
LockCollector.getInstance().registerDisposeAction(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
emptyLocks();
|
||||
}
|
||||
});
|
||||
LockCollector.getInstance().registerDisposeAction(() -> emptyLocks());
|
||||
}
|
||||
|
||||
private void emptyLocks() {
|
||||
|
||||
@@ -138,7 +138,7 @@ public class World {
|
||||
private ScheduledFuture<?> timedMapObjectsSchedule;
|
||||
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<?> marriagesSchedule;
|
||||
@@ -165,7 +165,7 @@ public class World {
|
||||
mountUpdate = petUpdate;
|
||||
|
||||
for (int i = 0; i < 9; i++) {
|
||||
cashItemBought.add(new LinkedHashMap<Integer, Integer>());
|
||||
cashItemBought.add(new LinkedHashMap<>());
|
||||
}
|
||||
|
||||
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) {
|
||||
List<Entry<Integer, SortedMap<Integer, MapleCharacter>>> list = new ArrayList<>(map.size());
|
||||
for(Entry<Integer, SortedMap<Integer, MapleCharacter>> e : map.entrySet()) {
|
||||
list.add(e);
|
||||
}
|
||||
list.addAll(map.entrySet());
|
||||
|
||||
Collections.sort(list, new Comparator<Entry<Integer, SortedMap<Integer, MapleCharacter>>>() {
|
||||
@Override
|
||||
public int compare(Entry<Integer, SortedMap<Integer, MapleCharacter>> o1, Entry<Integer, SortedMap<Integer, MapleCharacter>> o2) {
|
||||
return o1.getKey() - o2.getKey();
|
||||
}
|
||||
});
|
||||
list.sort((o1, o2) -> o1.getKey() - o2.getKey());
|
||||
|
||||
return list;
|
||||
}
|
||||
@@ -488,9 +481,7 @@ public class World {
|
||||
}
|
||||
|
||||
for (Entry<Integer, SortedMap<Integer, MapleCharacter>> e : getSortedAccountCharacterView(accChars)) {
|
||||
for (MapleCharacter chr : e.getValue().values()) {
|
||||
chrList.add(chr);
|
||||
}
|
||||
chrList.addAll(e.getValue().values());
|
||||
}
|
||||
|
||||
return chrList;
|
||||
@@ -506,7 +497,7 @@ public class World {
|
||||
if(accChars != null) {
|
||||
chrList = new LinkedList<>(accChars.values());
|
||||
} else {
|
||||
accountChars.put(accountId, new TreeMap<Integer, MapleCharacter>());
|
||||
accountChars.put(accountId, new TreeMap<>());
|
||||
chrList = null;
|
||||
}
|
||||
} finally {
|
||||
@@ -579,7 +570,7 @@ public class World {
|
||||
|
||||
public Collection<MapleFamily> getFamilies() {
|
||||
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);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
@@ -1359,18 +1350,12 @@ public class World {
|
||||
|
||||
private List<Integer> getMostSellerOnTab(List<Pair<Integer, Integer>> tabSellers) {
|
||||
List<Integer> tabLeaderboards;
|
||||
|
||||
Comparator<Pair<Integer, Integer>> comparator = new Comparator<Pair<Integer, Integer>>() { // descending order
|
||||
@Override
|
||||
public int compare(Pair<Integer, Integer> p1, Pair<Integer, Integer> p2) {
|
||||
return p2.getRight().compareTo(p1.getRight());
|
||||
}
|
||||
};
|
||||
|
||||
// descending order
|
||||
Comparator<Pair<Integer, Integer>> comparator = (p1, p2) -> p2.getRight().compareTo(p1.getRight());
|
||||
|
||||
PriorityQueue<Pair<Integer, Integer>> queue = new PriorityQueue<>(Math.max(1, tabSellers.size()), comparator);
|
||||
for(Pair<Integer, Integer> p : tabSellers) {
|
||||
queue.add(p);
|
||||
}
|
||||
queue.addAll(tabSellers);
|
||||
|
||||
tabLeaderboards = new LinkedList<>();
|
||||
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);
|
||||
if(chr == null || !chr.isLoggedinWorld()) continue;
|
||||
|
||||
Integer dpVal = dp.getValue() + 1;
|
||||
int dpVal = dp.getValue() + 1;
|
||||
if(dpVal == YamlConfig.config.server.PET_EXHAUST_COUNT) {
|
||||
chr.runFullnessSchedule(dp.getKey() % 4);
|
||||
dpVal = 0;
|
||||
@@ -1557,9 +1542,7 @@ public class World {
|
||||
List<MaplePlayerShop> psList = new ArrayList<>();
|
||||
activePlayerShopsLock.lock();
|
||||
try {
|
||||
for(MaplePlayerShop mps : activePlayerShops.values()) {
|
||||
psList.add(mps);
|
||||
}
|
||||
psList.addAll(activePlayerShops.values());
|
||||
|
||||
return psList;
|
||||
} finally {
|
||||
@@ -1841,7 +1824,7 @@ public class World {
|
||||
List<MaplePlayerShopItem> itemBundles = hm.sendAvailableBundles(itemid);
|
||||
|
||||
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);
|
||||
|
||||
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>>() {
|
||||
@Override
|
||||
public int compare(Pair<MaplePlayerShopItem, AbstractMapleMapObject> p1, Pair<MaplePlayerShopItem, AbstractMapleMapObject> p2) {
|
||||
return p1.getLeft().getPrice() - p2.getLeft().getPrice();
|
||||
}
|
||||
});
|
||||
hmsAvailable.sort((p1, p2) -> p1.getLeft().getPrice() - p2.getLeft().getPrice());
|
||||
|
||||
hmsAvailable.subList(0, Math.min(hmsAvailable.size(), 200)); //truncates the list to have up to 200 elements
|
||||
return hmsAvailable;
|
||||
@@ -2049,12 +2027,7 @@ public class World {
|
||||
}
|
||||
|
||||
private void disposeLocks() {
|
||||
LockCollector.getInstance().registerDisposeAction(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
emptyLocks();
|
||||
}
|
||||
});
|
||||
LockCollector.getInstance().registerDisposeAction(() -> emptyLocks());
|
||||
}
|
||||
|
||||
private void emptyLocks() {
|
||||
|
||||
@@ -21,14 +21,15 @@
|
||||
*/
|
||||
package provider;
|
||||
|
||||
import java.util.List;
|
||||
import provider.wz.MapleDataType;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface MapleData extends MapleDataEntity, Iterable<MapleData> {
|
||||
@Override
|
||||
public String getName();
|
||||
public MapleDataType getType();
|
||||
public List<MapleData> getChildren();
|
||||
public MapleData getChildByPath(String path);
|
||||
public Object getData();
|
||||
String getName();
|
||||
MapleDataType getType();
|
||||
List<MapleData> getChildren();
|
||||
MapleData getChildByPath(String path);
|
||||
Object getData();
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@ import java.util.List;
|
||||
* @author Matze
|
||||
*/
|
||||
public interface MapleDataDirectoryEntry extends MapleDataEntry {
|
||||
public List<MapleDataDirectoryEntry> getSubdirectories();
|
||||
public List<MapleDataFileEntry> getFiles();
|
||||
public MapleDataEntry getEntry(String name);
|
||||
List<MapleDataDirectoryEntry> getSubdirectories();
|
||||
List<MapleDataFileEntry> getFiles();
|
||||
MapleDataEntry getEntry(String name);
|
||||
}
|
||||
|
||||
@@ -26,6 +26,6 @@ package provider;
|
||||
* @author Matze
|
||||
*/
|
||||
public interface MapleDataEntity {
|
||||
public String getName();
|
||||
public MapleDataEntity getParent();
|
||||
String getName();
|
||||
MapleDataEntity getParent();
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user