Reformat and clean up "net" package

This commit is contained in:
P0nk
2021-09-09 23:26:02 +02:00
parent 69f4580637
commit 6be6ea9927
235 changed files with 3556 additions and 3398 deletions
-3
View File
@@ -60,11 +60,8 @@ public final class PacketProcessor {
return null; return null;
} }
PacketHandler handler = handlers[packetId]; PacketHandler handler = handlers[packetId];
if (handler != null) {
return handler; return handler;
} }
return null;
}
public void registerHandler(RecvOpcode code, PacketHandler handler) { public void registerHandler(RecvOpcode code, PacketHandler handler) {
try { try {
+1 -1
View File
@@ -206,7 +206,7 @@ public enum RecvOpcode {
private int code = -2; private int code = -2;
private RecvOpcode(int code) { RecvOpcode(int code) {
this.code = code; this.code = code;
} }
+1 -1
View File
@@ -356,7 +356,7 @@ public enum SendOpcode {
VEGA_SCROLL(0x166); VEGA_SCROLL(0x166);
private int code = -2; private int code = -2;
private SendOpcode(int code) { SendOpcode(int code) {
this.code = code; this.code = code;
} }
@@ -33,15 +33,14 @@ import java.util.Map;
import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.Lock;
/** /**
*
* @author Danny//changed to map :3 * @author Danny//changed to map :3
* @author Ronan//debuffs to storage as well * @author Ronan//debuffs to storage as well
*/ */
public class PlayerBuffStorage { public class PlayerBuffStorage {
private int id = (int) (Math.random() * 100); private final int id = (int) (Math.random() * 100);
private final Lock lock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.BUFF_STORAGE, true); private final Lock lock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.BUFF_STORAGE, true);
private Map<Integer, List<PlayerBuffValueHolder>> buffs = new HashMap<>(); private final Map<Integer, List<PlayerBuffValueHolder>> buffs = new HashMap<>();
private Map<Integer, Map<Disease, Pair<Long, MobSkill>>> diseases = new HashMap<>(); private final Map<Integer, Map<Disease, Pair<Long, MobSkill>>> diseases = new HashMap<>();
public void addBuffsToStorage(int chrid, List<PlayerBuffValueHolder> toStore) { public void addBuffsToStorage(int chrid, List<PlayerBuffValueHolder> toStore) {
lock.lock(); lock.lock();
@@ -99,9 +98,6 @@ public class PlayerBuffStorage {
return false; return false;
} }
final PlayerBuffStorage other = (PlayerBuffStorage) obj; final PlayerBuffStorage other = (PlayerBuffStorage) obj;
if (id != other.id) { return id == other.id;
return false;
}
return true;
} }
} }
@@ -24,7 +24,6 @@ package net.server;
import server.StatEffect; import server.StatEffect;
/** /**
*
* @author Danny * @author Danny
*/ */
public class PlayerBuffValueHolder { public class PlayerBuffValueHolder {
@@ -22,7 +22,6 @@
package net.server; package net.server;
/** /**
*
* @author Danny * @author Danny
*/ */
public class PlayerCoolDownValueHolder { public class PlayerCoolDownValueHolder {
+5 -3
View File
@@ -36,8 +36,8 @@ public class PlayerStorage {
private final MonitoredReentrantReadWriteLock locks = new MonitoredReentrantReadWriteLock(MonitoredLockType.PLAYER_STORAGE, true); private final MonitoredReentrantReadWriteLock locks = new MonitoredReentrantReadWriteLock(MonitoredLockType.PLAYER_STORAGE, true);
private final Map<Integer, Character> storage = new LinkedHashMap<>(); private final Map<Integer, Character> storage = new LinkedHashMap<>();
private final Map<String, Character> nameStorage = new LinkedHashMap<>(); private final Map<String, Character> nameStorage = new LinkedHashMap<>();
private MonitoredReadLock rlock = MonitoredReadLockFactory.createLock(locks); private final MonitoredReadLock rlock = MonitoredReadLockFactory.createLock(locks);
private MonitoredWriteLock wlock = MonitoredWriteLockFactory.createLock(locks); private final MonitoredWriteLock wlock = MonitoredWriteLockFactory.createLock(locks);
public void addPlayer(Character chr) { public void addPlayer(Character chr) {
wlock.lock(); wlock.lock();
@@ -53,7 +53,9 @@ public class PlayerStorage {
wlock.lock(); wlock.lock();
try { try {
Character mc = storage.remove(chr); Character mc = storage.remove(chr);
if(mc != null) nameStorage.remove(mc.getName().toLowerCase()); if (mc != null) {
nameStorage.remove(mc.getName().toLowerCase());
}
return mc; return mc;
} finally { } finally {
+4 -4
View File
@@ -96,14 +96,14 @@ public class Server {
private static final List<Integer> activeCoupons = new LinkedList<>(); private static final List<Integer> activeCoupons = new LinkedList<>();
private LoginServer loginServer; private LoginServer loginServer;
private List<Map<Integer, String>> channels = new LinkedList<>(); private final List<Map<Integer, String>> channels = new LinkedList<>();
private List<World> worlds = new ArrayList<>(); private final List<World> worlds = new ArrayList<>();
private final Properties subnetInfo = new Properties(); private final Properties subnetInfo = new Properties();
private final Map<Integer, Set<Integer>> accountChars = new HashMap<>(); private final Map<Integer, Set<Integer>> accountChars = new HashMap<>();
private final Map<Integer, Short> accountCharacterCount = new HashMap<>(); private final Map<Integer, Short> accountCharacterCount = new HashMap<>();
private final Map<Integer, Integer> worldChars = new HashMap<>(); private final Map<Integer, Integer> worldChars = new HashMap<>();
private final Map<String, Integer> transitioningChars = new HashMap<>(); private final Map<String, Integer> transitioningChars = new HashMap<>();
private List<Pair<Integer, String>> worldRecommendedList = new LinkedList<>(); private final List<Pair<Integer, String>> worldRecommendedList = new LinkedList<>();
private final Map<Integer, Guild> guilds = new HashMap<>(100); private final Map<Integer, Guild> guilds = new HashMap<>(100);
private final Map<Client, Long> inLoginState = new HashMap<>(100); private final Map<Client, Long> inLoginState = new HashMap<>(100);
@@ -1613,7 +1613,7 @@ public class Server {
String reason = Character.checkWorldTransferEligibility(con, characterId, oldWorld, newWorld); //check if character is still eligible String reason = Character.checkWorldTransferEligibility(con, characterId, oldWorld, newWorld); //check if character is still eligible
if (reason != null) { if (reason != null) {
removedTransfers.add(nameChangeId); removedTransfers.add(nameChangeId);
FilePrinter.print(FilePrinter.WORLD_TRANSFER, "World transfer cancelled : Character ID " + characterId + " at " + Calendar.getInstance().getTime().toString() + ", Reason : " + reason); FilePrinter.print(FilePrinter.WORLD_TRANSFER, "World transfer cancelled : Character ID " + characterId + " at " + Calendar.getInstance().getTime() + ", Reason : " + reason);
try (PreparedStatement delPs = con.prepareStatement("DELETE FROM worldtransfers WHERE id = ?")) { try (PreparedStatement delPs = con.prepareStatement("DELETE FROM worldtransfers WHERE id = ?")) {
delPs.setInt(1, nameChangeId); delPs.setInt(1, nameChangeId);
delPs.executeUpdate(); delPs.executeUpdate();
@@ -20,15 +20,14 @@
package net.server.audit; package net.server.audit;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock; import java.util.concurrent.locks.ReentrantLock;
/** /**
*
* @author Ronan * @author Ronan
*/ */
public class LockCollector { public class LockCollector {
@@ -39,7 +38,7 @@ public class LockCollector {
return instance; return instance;
} }
private Map<Runnable, Integer> disposableLocks = new HashMap<>(200); private final Map<Runnable, Integer> disposableLocks = new HashMap<>(200);
private final Lock lock = new ReentrantLock(true); private final Lock lock = new ReentrantLock(true);
public void registerDisposeAction(Runnable r) { public void registerDisposeAction(Runnable r) {
@@ -33,9 +33,8 @@ import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock; import java.util.concurrent.locks.ReentrantLock;
/** /**
*
* @author RonanLana * @author RonanLana
* * <p>
* This tool has the main purpose of auditing deadlocks throughout the server and must be used only for debugging. The flag is USE_THREAD_TRACKER. * This tool has the main purpose of auditing deadlocks throughout the server and must be used only for debugging. The flag is USE_THREAD_TRACKER.
*/ */
public class ThreadTracker { public class ThreadTracker {
@@ -229,8 +228,7 @@ public class ThreadTracker {
} else { } else {
threadLock.put(tid, 1); threadLock.put(tid, 1);
} }
} } else {
else {
AtomicInteger c = lockCount.get(lockOid); AtomicInteger c = lockCount.get(lockOid);
if (c != null) { // thanks BHB for detecting an NPE here if (c != null) { // thanks BHB for detecting an NPE here
c.decrementAndGet(); c.decrementAndGet();
@@ -20,7 +20,6 @@
package net.server.audit.locks; package net.server.audit.locks;
/** /**
*
* @author RonanLana * @author RonanLana
*/ */
@@ -20,7 +20,6 @@
package net.server.audit.locks; package net.server.audit.locks;
/** /**
*
* @author RonanLana * @author RonanLana
*/ */
public interface MonitoredReadLock { public interface MonitoredReadLock {
@@ -20,7 +20,6 @@
package net.server.audit.locks; package net.server.audit.locks;
/** /**
*
* @author RonanLana * @author RonanLana
*/ */
public interface MonitoredReentrantLock { public interface MonitoredReentrantLock {
@@ -22,7 +22,6 @@ package net.server.audit.locks;
import java.util.concurrent.locks.ReentrantReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock;
/** /**
*
* @author RonanLana * @author RonanLana
*/ */
public class MonitoredReentrantReadWriteLock extends ReentrantReadWriteLock { public class MonitoredReentrantReadWriteLock extends ReentrantReadWriteLock {
@@ -20,7 +20,6 @@
package net.server.audit.locks; package net.server.audit.locks;
/** /**
*
* @author RonanLana * @author RonanLana
*/ */
public interface MonitoredWriteLock { public interface MonitoredWriteLock {
@@ -37,7 +37,6 @@ import java.util.concurrent.locks.ReentrantLock;
import java.util.concurrent.locks.ReentrantReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock;
/** /**
*
* @author RonanLana * @author RonanLana
*/ */
public class TrackerReadLock extends ReentrantReadWriteLock.ReadLock implements MonitoredReadLock { public class TrackerReadLock extends ReentrantReadWriteLock.ReadLock implements MonitoredReadLock {
@@ -35,7 +35,6 @@ import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock; import java.util.concurrent.locks.ReentrantLock;
/** /**
*
* @author RonanLana * @author RonanLana
*/ */
public class TrackerReentrantLock extends ReentrantLock implements MonitoredReentrantLock { public class TrackerReentrantLock extends ReentrantLock implements MonitoredReentrantLock {
@@ -37,7 +37,6 @@ import java.util.concurrent.locks.ReentrantLock;
import java.util.concurrent.locks.ReentrantReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock;
/** /**
*
* @author RonanLana * @author RonanLana
*/ */
public class TrackerWriteLock extends ReentrantReadWriteLock.WriteLock implements MonitoredWriteLock { public class TrackerWriteLock extends ReentrantReadWriteLock.WriteLock implements MonitoredWriteLock {
@@ -24,7 +24,6 @@ import net.server.audit.locks.MonitoredReadLock;
import tools.FilePrinter; import tools.FilePrinter;
/** /**
*
* @author RonanLana * @author RonanLana
*/ */
public class EmptyReadLock extends AbstractEmptyLock implements MonitoredReadLock { public class EmptyReadLock extends AbstractEmptyLock implements MonitoredReadLock {
@@ -24,7 +24,6 @@ import net.server.audit.locks.MonitoredReentrantLock;
import tools.FilePrinter; import tools.FilePrinter;
/** /**
*
* @author RonanLana * @author RonanLana
*/ */
public class EmptyReentrantLock extends AbstractEmptyLock implements MonitoredReentrantLock { public class EmptyReentrantLock extends AbstractEmptyLock implements MonitoredReentrantLock {
@@ -24,7 +24,6 @@ import net.server.audit.locks.MonitoredWriteLock;
import tools.FilePrinter; import tools.FilePrinter;
/** /**
*
* @author RonanLana * @author RonanLana
*/ */
public class EmptyWriteLock extends AbstractEmptyLock implements MonitoredWriteLock { public class EmptyWriteLock extends AbstractEmptyLock implements MonitoredWriteLock {
@@ -23,7 +23,6 @@ import net.server.audit.locks.MonitoredReentrantReadWriteLock;
import net.server.audit.locks.active.TrackerReadLock; import net.server.audit.locks.active.TrackerReadLock;
/** /**
*
* @author RonanLana * @author RonanLana
*/ */
public class MonitoredReadLockFactory { public class MonitoredReadLockFactory {
@@ -23,7 +23,6 @@ import net.server.audit.locks.MonitoredLockType;
import net.server.audit.locks.active.TrackerReentrantLock; import net.server.audit.locks.active.TrackerReentrantLock;
/** /**
*
* @author RonanLana * @author RonanLana
*/ */
public class MonitoredReentrantLockFactory { public class MonitoredReentrantLockFactory {
@@ -23,7 +23,6 @@ import net.server.audit.locks.MonitoredReentrantReadWriteLock;
import net.server.audit.locks.active.TrackerWriteLock; import net.server.audit.locks.active.TrackerWriteLock;
/** /**
*
* @author RonanLana * @author RonanLana
*/ */
public class MonitoredWriteLockFactory { public class MonitoredWriteLockFactory {
+64 -31
View File
@@ -70,25 +70,25 @@ public final class Channel {
private MapManager mapManager; private MapManager mapManager;
private EventScriptManager eventSM; private EventScriptManager eventSM;
private ServicesManager services; private ServicesManager services;
private Map<Integer, HiredMerchant> hiredMerchants = new HashMap<>(); private final Map<Integer, HiredMerchant> hiredMerchants = new HashMap<>();
private final Map<Integer, Integer> storedVars = new HashMap<>(); private final Map<Integer, Integer> storedVars = new HashMap<>();
private Set<Integer> playersAway = new HashSet<>(); private final Set<Integer> playersAway = new HashSet<>();
private Map<ExpeditionType, Expedition> expeditions = new HashMap<>(); private final Map<ExpeditionType, Expedition> expeditions = new HashMap<>();
private Map<Integer, MiniDungeon> dungeons = new HashMap<>(); private final Map<Integer, MiniDungeon> dungeons = new HashMap<>();
private List<ExpeditionType> expedType = new ArrayList<>(); private final List<ExpeditionType> expedType = new ArrayList<>();
private Set<MapleMap> ownedMaps = Collections.synchronizedSet(Collections.newSetFromMap(new WeakHashMap<>())); private final Set<MapleMap> ownedMaps = Collections.synchronizedSet(Collections.newSetFromMap(new WeakHashMap<>()));
private Event event; private Event event;
private boolean finishedShutdown = false; private boolean finishedShutdown = false;
private Set<Integer> usedMC = new HashSet<>(); private final Set<Integer> usedMC = new HashSet<>();
private int usedDojo = 0; private int usedDojo = 0;
private int[] dojoStage; private int[] dojoStage;
private long[] dojoFinishTime; private long[] dojoFinishTime;
private ScheduledFuture<?>[] dojoTask; private ScheduledFuture<?>[] dojoTask;
private Map<Integer, Integer> dojoParty = new HashMap<>(); private final Map<Integer, Integer> dojoParty = new HashMap<>();
private List<Integer> chapelReservationQueue = new LinkedList<>(); private final List<Integer> chapelReservationQueue = new LinkedList<>();
private List<Integer> cathedralReservationQueue = new LinkedList<>(); private final List<Integer> cathedralReservationQueue = new LinkedList<>();
private ScheduledFuture<?> chapelReservationTask; private ScheduledFuture<?> chapelReservationTask;
private ScheduledFuture<?> cathedralReservationTask; private ScheduledFuture<?> cathedralReservationTask;
@@ -100,11 +100,11 @@ public final class Channel {
private Set<Integer> ongoingCathedralGuests = null; private Set<Integer> ongoingCathedralGuests = null;
private long ongoingStartTime; private long ongoingStartTime;
private MonitoredReentrantReadWriteLock merchantLock = new MonitoredReentrantReadWriteLock(MonitoredLockType.MERCHANT, true); private final MonitoredReentrantReadWriteLock merchantLock = new MonitoredReentrantReadWriteLock(MonitoredLockType.MERCHANT, true);
private MonitoredReadLock merchRlock = MonitoredReadLockFactory.createLock(merchantLock); private final MonitoredReadLock merchRlock = MonitoredReadLockFactory.createLock(merchantLock);
private MonitoredWriteLock merchWlock = MonitoredWriteLockFactory.createLock(merchantLock); private final MonitoredWriteLock merchWlock = MonitoredWriteLockFactory.createLock(merchantLock);
private MonitoredReentrantLock[] faceLock = new MonitoredReentrantLock[YamlConfig.config.server.CHANNEL_LOCKS]; private final MonitoredReentrantLock[] faceLock = new MonitoredReentrantLock[YamlConfig.config.server.CHANNEL_LOCKS];
private MonitoredReentrantLock lock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.CHANNEL, true); private MonitoredReentrantLock lock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.CHANNEL, true);
@@ -466,7 +466,9 @@ public final class Channel {
} }
public int lookupPartyDojo(Party party) { public int lookupPartyDojo(Party party) {
if(party == null) return -1; if (party == null) {
return -1;
}
Integer i = dojoParty.get(party.hashCode()); Integer i = dojoParty.get(party.hashCode());
return (i != null) ? i : -1; return (i != null) ? i : -1;
@@ -499,7 +501,9 @@ public final class Channel {
int dojoSlot = getDojoSlot(slotMapid); int dojoSlot = getDojoSlot(slotMapid);
if (party != null) { if (party != null) {
if(dojoParty.containsKey(party.hashCode())) return -2; if (dojoParty.containsKey(party.hashCode())) {
return -2;
}
dojoParty.put(party.hashCode(), dojoSlot); dojoParty.put(party.hashCode(), dojoSlot);
} }
@@ -528,7 +532,9 @@ public final class Channel {
} }
if (party != null) { if (party != null) {
if(dojoParty.remove(party.hashCode()) != null) return; if (dojoParty.remove(party.hashCode()) != null) {
return;
}
} }
if (dojoParty.containsValue(slot)) { // strange case, no party there! if (dojoParty.containsValue(slot)) { // strange case, no party there!
@@ -573,7 +579,9 @@ public final class Channel {
break; break;
} }
MapleMap dojoMap = getMapFactory().getMap(dojoBaseMap + (100 * (stage + i)) + delta); MapleMap dojoMap = getMapFactory().getMap(dojoBaseMap + (100 * (stage + i)) + delta);
if(!dojoMap.getAllPlayers().isEmpty()) return; if (!dojoMap.getAllPlayers().isEmpty()) {
return;
}
} }
freeDojoSlot(slot, null); freeDojoSlot(slot, null);
@@ -582,7 +590,9 @@ public final class Channel {
private void startDojoSchedule(final int dojoMapId) { private void startDojoSchedule(final int dojoMapId) {
final int slot = getDojoSlot(dojoMapId); final int slot = getDojoSlot(dojoMapId);
final int stage = (dojoMapId / 100) % 100; final int stage = (dojoMapId / 100) % 100;
if(stage <= dojoStage[slot]) return; if (stage <= dojoStage[slot]) {
return;
}
long clockTime = (stage > 36 ? 15 : (stage / 6) + 5) * 60000; long clockTime = (stage > 36 ? 15 : (stage / 6) + 5) * 60000;
@@ -622,7 +632,9 @@ public final class Channel {
public void dismissDojoSchedule(int dojoMapId, Party party) { public void dismissDojoSchedule(int dojoMapId, Party party) {
int slot = getDojoSlot(dojoMapId); int slot = getDojoSlot(dojoMapId);
int stage = (dojoMapId / 100) % 100; int stage = (dojoMapId / 100) % 100;
if(stage <= dojoStage[slot]) return; if (stage <= dojoStage[slot]) {
return;
}
lock.lock(); lock.lock();
try { try {
@@ -656,7 +668,9 @@ public final class Channel {
public boolean addMiniDungeon(int dungeonid) { public boolean addMiniDungeon(int dungeonid) {
lock.lock(); lock.lock();
try { try {
if(dungeons.containsKey(dungeonid)) return false; if (dungeons.containsKey(dungeonid)) {
return false;
}
MiniDungeonInfo mmdi = MiniDungeonInfo.getDungeon(dungeonid); MiniDungeonInfo mmdi = MiniDungeonInfo.getDungeon(dungeonid);
MiniDungeon mmd = new MiniDungeon(mmdi.getBase(), this.getMapFactory().getMap(mmdi.getDungeonId()).getTimeLimit()); // thanks Conrad for noticing hardcoded time limit for minidungeons MiniDungeon mmd = new MiniDungeon(mmdi.getBase(), this.getMapFactory().getMap(mmdi.getDungeonId()).getTimeLimit()); // thanks Conrad for noticing hardcoded time limit for minidungeons
@@ -692,10 +706,14 @@ public final class Channel {
lock.lock(); lock.lock();
try { try {
List<Integer> weddingReservationQueue = (cathedral ? cathedralReservationQueue : chapelReservationQueue); List<Integer> weddingReservationQueue = (cathedral ? cathedralReservationQueue : chapelReservationQueue);
if(weddingReservationQueue.isEmpty()) return null; if (weddingReservationQueue.isEmpty()) {
return null;
}
ret = weddingReservationQueue.remove(0); ret = weddingReservationQueue.remove(0);
if(ret == null) return null; if (ret == null) {
return null;
}
} finally { } finally {
lock.unlock(); lock.unlock();
} }
@@ -723,12 +741,16 @@ public final class Channel {
} }
public int getWeddingReservationStatus(Integer weddingId, boolean cathedral) { public int getWeddingReservationStatus(Integer weddingId, boolean cathedral) {
if(weddingId == null) return -1; if (weddingId == null) {
return -1;
}
lock.lock(); lock.lock();
try { try {
if (cathedral) { if (cathedral) {
if(weddingId.equals(ongoingCathedral)) return 0; if (weddingId.equals(ongoingCathedral)) {
return 0;
}
for (int i = 0; i < cathedralReservationQueue.size(); i++) { for (int i = 0; i < cathedralReservationQueue.size(); i++) {
if (weddingId.equals(cathedralReservationQueue.get(i))) { if (weddingId.equals(cathedralReservationQueue.get(i))) {
@@ -736,7 +758,9 @@ public final class Channel {
} }
} }
} else { } else {
if(weddingId.equals(ongoingChapel)) return 0; if (weddingId.equals(ongoingChapel)) {
return 0;
}
for (int i = 0; i < chapelReservationQueue.size(); i++) { for (int i = 0; i < chapelReservationQueue.size(); i++) {
if (weddingId.equals(chapelReservationQueue.get(i))) { if (weddingId.equals(chapelReservationQueue.get(i))) {
@@ -752,7 +776,9 @@ public final class Channel {
} }
public int pushWeddingReservation(Integer weddingId, boolean cathedral, boolean premium, Integer groomId, Integer brideId) { public int pushWeddingReservation(Integer weddingId, boolean cathedral, boolean premium, Integer groomId, Integer brideId) {
if(weddingId == null || isWeddingReserved(weddingId)) return -1; if (weddingId == null || isWeddingReserved(weddingId)) {
return -1;
}
World wserv = getWorldServer(); World wserv = getWorldServer();
wserv.putMarriageQueued(weddingId, cathedral, premium, groomId, brideId); wserv.putMarriageQueued(weddingId, cathedral, premium, groomId, brideId);
@@ -851,12 +877,16 @@ public final class Channel {
public synchronized boolean acceptOngoingWedding(final boolean cathedral) { // couple succeeded to show up and started the ceremony public synchronized boolean acceptOngoingWedding(final boolean cathedral) { // couple succeeded to show up and started the ceremony
if (cathedral) { if (cathedral) {
if(cathedralReservationTask == null) return false; if (cathedralReservationTask == null) {
return false;
}
cathedralReservationTask.cancel(false); cathedralReservationTask.cancel(false);
cathedralReservationTask = null; cathedralReservationTask = null;
} else { } else {
if(chapelReservationTask == null) return false; if (chapelReservationTask == null) {
return false;
}
chapelReservationTask.cancel(false); chapelReservationTask.cancel(false);
chapelReservationTask = null; chapelReservationTask = null;
@@ -877,9 +907,10 @@ public final class Channel {
if (leftTime / (60 * 1000) > 0) { if (leftTime / (60 * 1000) > 0) {
mode++; //counts minutes mode++; //counts minutes
if(leftTime / (60*60*1000) > 0) if (leftTime / (60 * 60 * 1000) > 0) {
mode++; //counts hours mode++; //counts hours
} }
}
switch (mode) { switch (mode) {
case 2: case 2:
@@ -907,7 +938,9 @@ public final class Channel {
} }
public String getWeddingReservationTimeLeft(Integer weddingId) { public String getWeddingReservationTimeLeft(Integer weddingId) {
if(weddingId == null) return null; if (weddingId == null) {
return null;
}
lock.lock(); lock.lock();
try { try {
@@ -22,7 +22,6 @@
package net.server.channel; package net.server.channel;
/** /**
*
* @author Frz * @author Frz
*/ */
public class CharacterIdChannelPair { public class CharacterIdChannelPair {
@@ -65,7 +65,9 @@ public abstract class AbstractDealDamageHandler extends AbstractPacketHandler {
} }
int skillLevel = chr.getSkillLevel(mySkill); int skillLevel = chr.getSkillLevel(mySkill);
if(skillLevel == 0 && GameConstants.isPqSkillMap(chr.getMapId()) && GameConstants.isPqSkill(mySkill.getId())) skillLevel = 1; if (skillLevel == 0 && GameConstants.isPqSkillMap(chr.getMapId()) && GameConstants.isPqSkill(mySkill.getId())) {
skillLevel = 1;
}
if (skillLevel == 0) { if (skillLevel == 0) {
return null; return null;
@@ -189,29 +191,29 @@ public abstract class AbstractDealDamageHandler extends AbstractPacketHandler {
double distance = player.getPosition().distanceSq(monster.getPosition()); double distance = player.getPosition().distanceSq(monster.getPosition());
double distanceToDetect = 200000.0; double distanceToDetect = 200000.0;
if(attack.ranged) if (attack.ranged) {
distanceToDetect += 400000; distanceToDetect += 400000;
}
if(attack.magic) if (attack.magic) {
distanceToDetect += 200000; distanceToDetect += 200000;
}
if(player.getJob().isA(Job.ARAN1)) if (player.getJob().isA(Job.ARAN1)) {
distanceToDetect += 200000; // Arans have extra range over normal warriors. distanceToDetect += 200000; // Arans have extra range over normal warriors.
}
if(attack.skill == Aran.COMBO_SMASH || attack.skill == Aran.BODY_PRESSURE) if (attack.skill == Aran.COMBO_SMASH || attack.skill == Aran.BODY_PRESSURE) {
distanceToDetect += 40000; distanceToDetect += 40000;
} else if (attack.skill == Bishop.GENESIS || attack.skill == ILArchMage.BLIZZARD || attack.skill == FPArchMage.METEOR_SHOWER) {
else if(attack.skill == Bishop.GENESIS || attack.skill == ILArchMage.BLIZZARD || attack.skill == FPArchMage.METEOR_SHOWER)
distanceToDetect += 275000; distanceToDetect += 275000;
} else if (attack.skill == Hero.BRANDISH || attack.skill == DragonKnight.SPEAR_CRUSHER || attack.skill == DragonKnight.POLE_ARM_CRUSHER) {
else if(attack.skill == Hero.BRANDISH || attack.skill == DragonKnight.SPEAR_CRUSHER || attack.skill == DragonKnight.POLE_ARM_CRUSHER)
distanceToDetect += 40000; distanceToDetect += 40000;
} else if (attack.skill == DragonKnight.DRAGON_ROAR || attack.skill == SuperGM.SUPER_DRAGON_ROAR) {
else if(attack.skill == DragonKnight.DRAGON_ROAR || attack.skill == SuperGM.SUPER_DRAGON_ROAR)
distanceToDetect += 250000; distanceToDetect += 250000;
} else if (attack.skill == Shadower.BOOMERANG_STEP) {
else if(attack.skill == Shadower.BOOMERANG_STEP)
distanceToDetect += 60000; distanceToDetect += 60000;
}
if (distance > distanceToDetect) { if (distance > distanceToDetect) {
AutobanFactory.DISTANCE_HACK.alert(player, "Distance Sq to monster: " + distance + " SID: " + attack.skill + " MID: " + monster.getId()); AutobanFactory.DISTANCE_HACK.alert(player, "Distance Sq to monster: " + distance + " SID: " + attack.skill + " MID: " + monster.getId());
@@ -244,7 +246,9 @@ public abstract class AbstractDealDamageHandler extends AbstractPacketHandler {
} }
for (Integer eachd : onedList) { for (Integer eachd : onedList) {
if(eachd < 0) eachd += Integer.MAX_VALUE; if (eachd < 0) {
eachd += Integer.MAX_VALUE;
}
totDamageToOneMonster += eachd; totDamageToOneMonster += eachd;
} }
totDamage += totDamageToOneMonster; totDamage += totDamageToOneMonster;
@@ -260,10 +264,11 @@ public abstract class AbstractDealDamageHandler extends AbstractPacketHandler {
if (pickpocket.getEffect(picklv).makeChanceResult()) { if (pickpocket.getEffect(picklv).makeChanceResult()) {
final int eachdf; final int eachdf;
if(eachd < 0) if (eachd < 0) {
eachdf = eachd + Integer.MAX_VALUE; eachdf = eachd + Integer.MAX_VALUE;
else } else {
eachdf = eachd; eachdf = eachd;
}
TimerManager.getInstance().schedule(() -> 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); 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; delay += 100;
@@ -284,7 +289,9 @@ public abstract class AbstractDealDamageHandler extends AbstractPacketHandler {
int rndPool = (int) Math.floor(Math.random() * dropPool.get(dropPool.size() - 1)); int rndPool = (int) Math.floor(Math.random() * dropPool.get(dropPool.size() - 1));
int i = 0; int i = 0;
while(rndPool >= dropPool.get(i)) i++; while (rndPool >= dropPool.get(i)) {
i++;
}
List<MonsterDropEntry> toSteal = new ArrayList<>(); List<MonsterDropEntry> toSteal = new ArrayList<>();
toSteal.add(mi.retrieveDrop(monster.getId()).get(i)); toSteal.add(mi.retrieveDrop(monster.getId()).get(i));
@@ -511,8 +518,11 @@ public abstract class AbstractDealDamageHandler extends AbstractPacketHandler {
private static void damageMonsterWithSkill(final Character attacker, final MapleMap map, final Monster monster, final int damage, int skillid, int fixedTime) { private static void damageMonsterWithSkill(final Character attacker, final MapleMap map, final Monster monster, final int damage, int skillid, int fixedTime) {
int animationTime; int animationTime;
if(fixedTime == 0) animationTime = SkillFactory.getSkill(skillid).getAnimationTime(); if (fixedTime == 0) {
else animationTime = fixedTime; animationTime = SkillFactory.getSkill(skillid).getAnimationTime();
} else {
animationTime = fixedTime;
}
if (animationTime > 0) { // be sure to only use LIMITED ATTACKS with animation time here if (animationTime > 0) { // be sure to only use LIMITED ATTACKS with animation time here
TimerManager.getInstance().schedule(() -> { TimerManager.getInstance().schedule(() -> {
@@ -539,7 +549,9 @@ public abstract class AbstractDealDamageHandler extends AbstractPacketHandler {
if (ret.skill > 0) { if (ret.skill > 0) {
ret.skilllevel = chr.getSkillLevel(ret.skill); ret.skilllevel = chr.getSkillLevel(ret.skill);
if(ret.skilllevel == 0 && GameConstants.isPqSkillMap(chr.getMapId()) && GameConstants.isPqSkill(ret.skill)) ret.skilllevel = 1; if (ret.skilllevel == 0 && GameConstants.isPqSkillMap(chr.getMapId()) && GameConstants.isPqSkill(ret.skill)) {
ret.skilllevel = 1;
}
} }
if (ret.skill == Evan.ICE_BREATH || ret.skill == Evan.FIRE_BREATH || ret.skill == FPArchMage.BIG_BANG || ret.skill == ILArchMage.BIG_BANG || ret.skill == Bishop.BIG_BANG || ret.skill == Gunslinger.GRENADE || ret.skill == Brawler.CORKSCREW_BLOW || ret.skill == ThunderBreaker.CORKSCREW_BLOW || ret.skill == NightWalker.POISON_BOMB) { if (ret.skill == Evan.ICE_BREATH || ret.skill == Evan.FIRE_BREATH || ret.skill == FPArchMage.BIG_BANG || ret.skill == ILArchMage.BIG_BANG || ret.skill == Bishop.BIG_BANG || ret.skill == Gunslinger.GRENADE || ret.skill == Brawler.CORKSCREW_BLOW || ret.skill == ThunderBreaker.CORKSCREW_BLOW || ret.skill == NightWalker.POISON_BOMB) {
@@ -627,21 +639,25 @@ public abstract class AbstractDealDamageHandler extends AbstractPacketHandler {
// Since the skill is magic based, use the magic formula // Since the skill is magic based, use the magic formula
if (chr.getJob() == Job.IL_ARCHMAGE || chr.getJob() == Job.IL_MAGE) { if (chr.getJob() == Job.IL_ARCHMAGE || chr.getJob() == Job.IL_MAGE) {
int skillLvl = chr.getSkillLevel(ILMage.ELEMENT_AMPLIFICATION); int skillLvl = chr.getSkillLevel(ILMage.ELEMENT_AMPLIFICATION);
if(skillLvl > 0) if (skillLvl > 0) {
calcDmgMax = calcDmgMax * SkillFactory.getSkill(ILMage.ELEMENT_AMPLIFICATION).getEffect(skillLvl).getY() / 100; calcDmgMax = calcDmgMax * SkillFactory.getSkill(ILMage.ELEMENT_AMPLIFICATION).getEffect(skillLvl).getY() / 100;
}
} else if (chr.getJob() == Job.FP_ARCHMAGE || chr.getJob() == Job.FP_MAGE) { } else if (chr.getJob() == Job.FP_ARCHMAGE || chr.getJob() == Job.FP_MAGE) {
int skillLvl = chr.getSkillLevel(FPMage.ELEMENT_AMPLIFICATION); int skillLvl = chr.getSkillLevel(FPMage.ELEMENT_AMPLIFICATION);
if(skillLvl > 0) if (skillLvl > 0) {
calcDmgMax = calcDmgMax * SkillFactory.getSkill(FPMage.ELEMENT_AMPLIFICATION).getEffect(skillLvl).getY() / 100; calcDmgMax = calcDmgMax * SkillFactory.getSkill(FPMage.ELEMENT_AMPLIFICATION).getEffect(skillLvl).getY() / 100;
}
} else if (chr.getJob() == Job.BLAZEWIZARD3 || chr.getJob() == Job.BLAZEWIZARD4) { } else if (chr.getJob() == Job.BLAZEWIZARD3 || chr.getJob() == Job.BLAZEWIZARD4) {
int skillLvl = chr.getSkillLevel(BlazeWizard.ELEMENT_AMPLIFICATION); int skillLvl = chr.getSkillLevel(BlazeWizard.ELEMENT_AMPLIFICATION);
if(skillLvl > 0) if (skillLvl > 0) {
calcDmgMax = calcDmgMax * SkillFactory.getSkill(BlazeWizard.ELEMENT_AMPLIFICATION).getEffect(skillLvl).getY() / 100; calcDmgMax = calcDmgMax * SkillFactory.getSkill(BlazeWizard.ELEMENT_AMPLIFICATION).getEffect(skillLvl).getY() / 100;
}
} else if (chr.getJob() == Job.EVAN7 || chr.getJob() == Job.EVAN8 || chr.getJob() == Job.EVAN9 || chr.getJob() == Job.EVAN10) { } else if (chr.getJob() == Job.EVAN7 || chr.getJob() == Job.EVAN8 || chr.getJob() == Job.EVAN9 || chr.getJob() == Job.EVAN10) {
int skillLvl = chr.getSkillLevel(Evan.MAGIC_AMPLIFICATION); int skillLvl = chr.getSkillLevel(Evan.MAGIC_AMPLIFICATION);
if(skillLvl > 0) if (skillLvl > 0) {
calcDmgMax = calcDmgMax * SkillFactory.getSkill(Evan.MAGIC_AMPLIFICATION).getEffect(skillLvl).getY() / 100; calcDmgMax = calcDmgMax * SkillFactory.getSkill(Evan.MAGIC_AMPLIFICATION).getEffect(skillLvl).getY() / 100;
} }
}
calcDmgMax *= effect.getMatk(); calcDmgMax *= effect.getMatk();
if (ret.skill == Cleric.HEAL) { if (ret.skill == Cleric.HEAL) {
@@ -673,7 +689,9 @@ public abstract class AbstractDealDamageHandler extends AbstractPacketHandler {
} else { } else {
// Normal Combo // Normal Combo
int skillLv = chr.getSkillLevel(oid); int skillLv = chr.getSkillLevel(oid);
if(skillLv <= 0 || chr.isGM()) skillLv = SkillFactory.getSkill(oid).getMaxLevel(); if (skillLv <= 0 || chr.isGM()) {
skillLv = SkillFactory.getSkill(oid).getMaxLevel();
}
if (skillLv > 0) { if (skillLv > 0) {
StatEffect ceffect = SkillFactory.getSkill(oid).getEffect(skillLv); StatEffect ceffect = SkillFactory.getSkill(oid).getEffect(skillLv);
@@ -684,16 +702,17 @@ public abstract class AbstractDealDamageHandler extends AbstractPacketHandler {
if (GameConstants.isFinisherSkill(ret.skill)) { if (GameConstants.isFinisherSkill(ret.skill)) {
// Finisher skills do more damage based on how many orbs the player has. // Finisher skills do more damage based on how many orbs the player has.
int orbs = comboBuff - 1; int orbs = comboBuff - 1;
if(orbs == 2) if (orbs == 2) {
calcDmgMax *= 1.2; calcDmgMax *= 1.2;
else if(orbs == 3) } else if (orbs == 3) {
calcDmgMax *= 1.54; calcDmgMax *= 1.54;
else if(orbs == 4) } else if (orbs == 4) {
calcDmgMax *= 2; calcDmgMax *= 2;
else if(orbs >= 5) } else if (orbs >= 5) {
calcDmgMax *= 2.5; calcDmgMax *= 2.5;
} }
} }
}
if (chr.getEnergyBar() == 15000) { if (chr.getEnergyBar() == 15000) {
int energycharge = chr.isCygnus() ? ThunderBreaker.ENERGY_CHARGE : Marauder.ENERGY_CHARGE; int energycharge = chr.isCygnus() ? ThunderBreaker.ENERGY_CHARGE : Marauder.ENERGY_CHARGE;
@@ -716,10 +735,7 @@ public abstract class AbstractDealDamageHandler extends AbstractPacketHandler {
calcDmgMax += 80000; // Aran Tutorial. calcDmgMax += 80000; // Aran Tutorial.
} }
boolean canCrit = false; boolean canCrit = chr.getJob().isA((Job.BOWMAN)) || chr.getJob().isA(Job.THIEF) || chr.getJob().isA(Job.NIGHTWALKER1) || chr.getJob().isA(Job.WINDARCHER1) || chr.getJob() == Job.ARAN3 || chr.getJob() == Job.ARAN4 || chr.getJob() == Job.MARAUDER || chr.getJob() == Job.BUCCANEER;
if(chr.getJob().isA((Job.BOWMAN)) || chr.getJob().isA(Job.THIEF) || chr.getJob().isA(Job.NIGHTWALKER1) || chr.getJob().isA(Job.WINDARCHER1) || chr.getJob() == Job.ARAN3 || chr.getJob() == Job.ARAN4 || chr.getJob() == Job.MARAUDER || chr.getJob() == Job.BUCCANEER) {
canCrit = true;
}
if (chr.getBuffEffect(BuffStat.SHARP_EYES) != null) { if (chr.getBuffEffect(BuffStat.SHARP_EYES) != null) {
// Any class that has sharp eyes can crit. Also, since it stacks with normal crit go ahead // Any class that has sharp eyes can crit. Also, since it stacks with normal crit go ahead
@@ -729,16 +745,14 @@ public abstract class AbstractDealDamageHandler extends AbstractPacketHandler {
calcDmgMax *= 1.4; calcDmgMax *= 1.4;
} }
boolean shadowPartner = false; boolean shadowPartner = chr.getBuffEffect(BuffStat.SHADOWPARTNER) != null;
if(chr.getBuffEffect(BuffStat.SHADOWPARTNER) != null) {
shadowPartner = true;
}
if (ret.skill != 0) { if (ret.skill != 0) {
int fixed = ret.getAttackEffect(chr, SkillFactory.getSkill(ret.skill)).getFixDamage(); int fixed = ret.getAttackEffect(chr, SkillFactory.getSkill(ret.skill)).getFixDamage();
if(fixed > 0) if (fixed > 0) {
calcDmgMax = fixed; calcDmgMax = fixed;
} }
}
for (int i = 0; i < ret.numAttacked; i++) { for (int i = 0; i < ret.numAttacked; i++) {
int oid = p.readInt(); int oid = p.readInt();
p.skip(14); p.skip(14);
@@ -818,9 +832,10 @@ public abstract class AbstractDealDamageHandler extends AbstractPacketHandler {
int damage = p.readInt(); int damage = p.readInt();
long hitDmgMax = calcDmgMax; long hitDmgMax = calcDmgMax;
if (ret.skill == Buccaneer.BARRAGE || ret.skill == ThunderBreaker.BARRAGE) { if (ret.skill == Buccaneer.BARRAGE || ret.skill == ThunderBreaker.BARRAGE) {
if(j > 3) if (j > 3) {
hitDmgMax *= Math.pow(2, (j - 3)); hitDmgMax *= Math.pow(2, (j - 3));
} }
}
if (shadowPartner) { if (shadowPartner) {
// For shadow partner, the second half of the hits only do 50% damage. So calc that // For shadow partner, the second half of the hits only do 50% damage. So calc that
// in for the crit effects. // in for the crit effects.
@@ -838,7 +853,9 @@ public abstract class AbstractDealDamageHandler extends AbstractPacketHandler {
long maxWithCrit = hitDmgMax; long maxWithCrit = hitDmgMax;
if (canCrit) // They can crit, so up the max. if (canCrit) // They can crit, so up the max.
{
maxWithCrit *= 2; maxWithCrit *= 2;
}
// Warn if the damage is over 1.5x what we calculated above. // Warn if the damage is over 1.5x what we calculated above.
if (damage > maxWithCrit * 1.5) { if (damage > maxWithCrit * 1.5) {
@@ -36,7 +36,9 @@ public abstract class AbstractMovementPacketHandler extends AbstractPacketHandle
protected List<LifeMovementFragment> parseMovement(InPacket p) throws EmptyMovementException { protected List<LifeMovementFragment> parseMovement(InPacket p) throws EmptyMovementException {
List<LifeMovementFragment> res = new ArrayList<>(); List<LifeMovementFragment> res = new ArrayList<>();
byte numCommands = p.readByte(); byte numCommands = p.readByte();
if (numCommands < 1) throw new EmptyMovementException(p); if (numCommands < 1) {
throw new EmptyMovementException(p);
}
for (byte i = 0; i < numCommands; i++) { for (byte i = 0; i < numCommands; i++) {
byte command = p.readByte(); byte command = p.readByte();
switch (command) { switch (command) {
@@ -148,7 +150,9 @@ public abstract class AbstractMovementPacketHandler extends AbstractPacketHandle
protected void updatePosition(InPacket p, AnimatedMapObject target, int yOffset) throws EmptyMovementException { protected void updatePosition(InPacket p, AnimatedMapObject target, int yOffset) throws EmptyMovementException {
byte numCommands = p.readByte(); byte numCommands = p.readByte();
if (numCommands < 1) throw new EmptyMovementException(p); if (numCommands < 1) {
throw new EmptyMovementException(p);
}
for (byte i = 0; i < numCommands; i++) { for (byte i = 0; i < numCommands; i++) {
byte command = p.readByte(); byte command = p.readByte();
switch (command) { switch (command) {
@@ -41,7 +41,6 @@ import java.sql.PreparedStatement;
import java.sql.SQLException; import java.sql.SQLException;
/** /**
*
* @author Jay Estrella * @author Jay Estrella
* @author Ubaware * @author Ubaware
*/ */
@@ -60,7 +59,9 @@ public final class AcceptFamilyHandler extends AbstractPacketHandler {
Character inviter = c.getWorldServer().getPlayerStorage().getCharacterById(inviterId); Character inviter = c.getWorldServer().getPlayerStorage().getCharacterById(inviterId);
if (inviter != null) { if (inviter != null) {
InviteResult inviteResult = InviteCoordinator.answerInvite(InviteType.FAMILY, c.getPlayer().getId(), c.getPlayer(), accept); InviteResult inviteResult = InviteCoordinator.answerInvite(InviteType.FAMILY, c.getPlayer().getId(), c.getPlayer(), accept);
if(inviteResult.result == InviteResultType.NOT_FOUND) return; //was never invited. (or expired on server only somehow?) if (inviteResult.result == InviteResultType.NOT_FOUND) {
return; //was never invited. (or expired on server only somehow?)
}
if (accept) { if (accept) {
if (inviter.getFamily() != null) { if (inviter.getFamily() != null) {
if (chr.getFamily() == null) { if (chr.getFamily() == null) {
@@ -77,7 +78,9 @@ public final class AcceptFamilyHandler extends AbstractPacketHandler {
} else { //absorb target family } else { //absorb target family
FamilyEntry targetEntry = chr.getFamilyEntry(); FamilyEntry targetEntry = chr.getFamilyEntry();
Family targetFamily = targetEntry.getFamily(); Family targetFamily = targetEntry.getFamily();
if(targetFamily.getLeader() != targetEntry) return; if (targetFamily.getLeader() != targetEntry) {
return;
}
if (inviter.getFamily().getTotalGenerations() + targetFamily.getTotalGenerations() <= YamlConfig.config.server.FAMILY_MAX_GENERATIONS) { if (inviter.getFamily().getTotalGenerations() + targetFamily.getTotalGenerations() <= YamlConfig.config.server.FAMILY_MAX_GENERATIONS) {
targetEntry.join(inviter.getFamilyEntry()); targetEntry.join(inviter.getFamilyEntry());
} else { } else {
@@ -9,7 +9,6 @@ import tools.LogHelper;
import tools.PacketCreator; import tools.PacketCreator;
/** /**
*
* @author kevintjuh93 * @author kevintjuh93
*/ */
public class AdminChatHandler extends AbstractPacketHandler { public class AdminChatHandler extends AbstractPacketHandler {
@@ -176,7 +176,7 @@ public final class AdminCommandHandler extends AbstractPacketHandler {
} }
break; break;
default: default:
System.out.println("New GM packet encountered (MODE : " + mode + ": " + p.toString()); System.out.println("New GM packet encountered (MODE : " + mode + ": " + p);
break; break;
} }
} }
@@ -33,7 +33,6 @@ import net.server.guild.GuildPackets;
import tools.PacketCreator; import tools.PacketCreator;
/** /**
*
* @author XoticStory, Ronan * @author XoticStory, Ronan
*/ */
public final class AllianceOperationHandler extends AbstractPacketHandler { public final class AllianceOperationHandler extends AbstractPacketHandler {
@@ -215,7 +214,9 @@ public final class AllianceOperationHandler extends AbstractPacketHandler {
private void changePlayerAllianceRank(Alliance alliance, Character chr, boolean raise) { private void changePlayerAllianceRank(Alliance alliance, Character chr, boolean raise) {
int newRank = chr.getAllianceRank() + (raise ? -1 : 1); int newRank = chr.getAllianceRank() + (raise ? -1 : 1);
if(newRank < 3 || newRank > 5) return; if (newRank < 3 || newRank > 5) {
return;
}
chr.getMGC().setAllianceRank(newRank); chr.getMGC().setAllianceRank(newRank);
chr.saveGuildStatus(); chr.saveGuildStatus();
@@ -53,7 +53,9 @@ public class AranComboHandler extends AbstractPacketHandler {
case 80: case 80:
case 90: case 90:
case 100: case 100:
if (player.getJob().getId() != 2000 && (combo / 10) > skillLevel) break; if (player.getJob().getId() != 2000 && (combo / 10) > skillLevel) {
break;
}
SkillFactory.getSkill(Aran.COMBO_ABILITY).getEffect(combo / 10).applyComboBuff(player, combo); SkillFactory.getSkill(Aran.COMBO_ABILITY).getEffect(combo / 10).applyComboBuff(player, combo);
break; break;
} }
@@ -33,7 +33,9 @@ public final class AutoAggroHandler extends AbstractPacketHandler {
@Override @Override
public final void handlePacket(InPacket p, Client c) { public final void handlePacket(InPacket p, Client c) {
Character player = c.getPlayer(); Character player = c.getPlayer();
if (player.isHidden()) return; // Don't auto aggro GM's in hide... if (player.isHidden()) {
return; // Don't auto aggro GM's in hide...
}
MapleMap map = player.getMap(); MapleMap map = player.getMap();
int oid = p.readInt(); int oid = p.readInt();
@@ -27,7 +27,6 @@ import net.AbstractPacketHandler;
import net.packet.InPacket; import net.packet.InPacket;
/** /**
*
* @author Generic, Ronan * @author Generic, Ronan
*/ */
public class AutoAssignHandler extends AbstractPacketHandler { public class AutoAssignHandler extends AbstractPacketHandler {
@@ -30,7 +30,6 @@ import server.maps.Summon;
import java.util.Collection; import java.util.Collection;
/** /**
*
* @author BubblesDev * @author BubblesDev
*/ */
public final class BeholderHandler extends AbstractPacketHandler {//Summon Skills noobs public final class BeholderHandler extends AbstractPacketHandler {//Summon Skills noobs
@@ -40,7 +40,7 @@ import static client.BuddyList.BuddyOperation.ADDED;
public class BuddylistModifyHandler extends AbstractPacketHandler { public class BuddylistModifyHandler extends AbstractPacketHandler {
private static class CharacterIdNameBuddyCapacity extends CharacterNameAndId { private static class CharacterIdNameBuddyCapacity extends CharacterNameAndId {
private int buddyCapacity; private final int buddyCapacity;
public CharacterIdNameBuddyCapacity(int id, String name, int buddyCapacity) { public CharacterIdNameBuddyCapacity(int id, String name, int buddyCapacity) {
super(id, name); super(id, name);
@@ -129,7 +129,9 @@ public final class CashOperationHandler extends AbstractPacketHandler {
ex.printStackTrace(); ex.printStackTrace();
} }
Character receiver = c.getChannelServer().getPlayerStorage().getCharacterByName(recipient.get("name")); Character receiver = c.getChannelServer().getPlayerStorage().getCharacterByName(recipient.get("name"));
if (receiver != null) receiver.showNote(); if (receiver != null) {
receiver.showNote();
}
} else if (action == 0x05) { // Modify wish list } else if (action == 0x05) { // Modify wish list
cs.clearWishList(); cs.clearWishList();
for (byte i = 0; i < 10; i++) { for (byte i = 0; i < 10; i++) {
@@ -28,7 +28,6 @@ import tools.PacketCreator;
import tools.Pair; import tools.Pair;
/** /**
*
* @author RonanLana * @author RonanLana
*/ */
public class CashShopSurpriseHandler extends AbstractPacketHandler { public class CashShopSurpriseHandler extends AbstractPacketHandler {
@@ -28,7 +28,6 @@ import net.packet.InPacket;
import net.server.Server; import net.server.Server;
/** /**
*
* @author Matze * @author Matze
*/ */
public final class ChangeChannelHandler extends AbstractPacketHandler { public final class ChangeChannelHandler extends AbstractPacketHandler {
@@ -46,7 +46,7 @@ public final class ChangeMapHandler extends AbstractPacketHandler {
if (chr.isChangingMaps() || chr.isBanned()) { if (chr.isChangingMaps() || chr.isBanned()) {
if (chr.isChangingMaps()) { if (chr.isChangingMaps()) {
FilePrinter.printError(FilePrinter.PORTAL_STUCK + chr.getName() + ".txt", "Player " + chr.getName() + " got stuck when changing maps. Timestamp: " + Calendar.getInstance().getTime().toString() + " Last visited mapids: " + chr.getLastVisitedMapids()); FilePrinter.printError(FilePrinter.PORTAL_STUCK + chr.getName() + ".txt", "Player " + chr.getName() + " got stuck when changing maps. Timestamp: " + Calendar.getInstance().getTime() + " Last visited mapids: " + chr.getLastVisitedMapids());
} }
c.sendPacket(PacketCreator.enableActions()); c.sendPacket(PacketCreator.enableActions());
@@ -29,7 +29,6 @@ import net.packet.InPacket;
import scripting.npc.NPCScriptManager; import scripting.npc.NPCScriptManager;
/** /**
*
* @author kevintjuh93 * @author kevintjuh93
*/ */
public class ClickGuideHandler extends AbstractPacketHandler { public class ClickGuideHandler extends AbstractPacketHandler {
@@ -27,7 +27,6 @@ import net.packet.InPacket;
import tools.PacketCreator; import tools.PacketCreator;
/** /**
*
* @author Xterminator * @author Xterminator
*/ */
public final class CloseChalkboardHandler extends AbstractPacketHandler { public final class CloseChalkboardHandler extends AbstractPacketHandler {
@@ -57,7 +57,9 @@ public final class CloseRangeDamageHandler extends AbstractDealDamageHandler {
} }
if (chr.getDojoEnergy() < 10000 && (attack.skill == 1009 || attack.skill == 10001009 || attack.skill == 20001009)) // PE hacking or maybe just lagging if (chr.getDojoEnergy() < 10000 && (attack.skill == 1009 || attack.skill == 10001009 || attack.skill == 20001009)) // PE hacking or maybe just lagging
{
return; return;
}
if (GameConstants.isDojo(chr.getMap().getId()) && attack.numAttacked > 0) { if (GameConstants.isDojo(chr.getMap().getId()) && attack.numAttacked > 0) {
chr.setDojoEnergy(chr.getDojoEnergy() + YamlConfig.config.server.DOJO_ENERGY_ATK); chr.setDojoEnergy(chr.getDojoEnergy() + YamlConfig.config.server.DOJO_ENERGY_ATK);
c.sendPacket(PacketCreator.getEnergy("energy", chr.getDojoEnergy())); c.sendPacket(PacketCreator.getEnergy("energy", chr.getDojoEnergy()));
@@ -84,10 +86,15 @@ public final class CloseRangeDamageHandler extends AbstractDealDamageHandler {
ceffect = advcombo.getEffect(advComboSkillLevel); ceffect = advcombo.getEffect(advComboSkillLevel);
} else { } else {
int comboLv = chr.getSkillLevel(combo); int comboLv = chr.getSkillLevel(combo);
if(comboLv <= 0 || chr.isGM()) comboLv = SkillFactory.getSkill(oid).getMaxLevel(); if (comboLv <= 0 || chr.isGM()) {
comboLv = SkillFactory.getSkill(oid).getMaxLevel();
}
if(comboLv > 0) ceffect = combo.getEffect(comboLv); if (comboLv > 0) {
else ceffect = null; ceffect = combo.getEffect(comboLv);
} else {
ceffect = null;
}
} }
if (ceffect != null) { if (ceffect != null) {
if (orbcount < ceffect.getX() + 1) { if (orbcount < ceffect.getX() + 1) {
@@ -99,7 +106,9 @@ public final class CloseRangeDamageHandler extends AbstractDealDamageHandler {
} }
int olv = chr.getSkillLevel(oid); int olv = chr.getSkillLevel(oid);
if(olv <= 0) olv = SkillFactory.getSkill(oid).getMaxLevel(); if (olv <= 0) {
olv = SkillFactory.getSkill(oid).getMaxLevel();
}
int duration = combo.getEffect(olv).getDuration(); int duration = combo.getEffect(olv).getDuration();
List<Pair<BuffStat, Integer>> stat = Collections.singletonList(new Pair<>(BuffStat.COMBO, neworbcount)); List<Pair<BuffStat, Integer>> stat = Collections.singletonList(new Pair<>(BuffStat.COMBO, neworbcount));
@@ -31,7 +31,6 @@ import server.maps.MapleMap;
import tools.PacketCreator; import tools.PacketCreator;
/** /**
*
* @author kevintjuh93 * @author kevintjuh93
*/ */
public final class CoconutHandler extends AbstractPacketHandler { public final class CoconutHandler extends AbstractPacketHandler {
@@ -45,7 +45,6 @@ import java.util.*;
import java.util.Map.Entry; import java.util.Map.Entry;
/** /**
*
* @author Penguins (Acrylic) * @author Penguins (Acrylic)
* @author Ronan (HeavenMS) * @author Ronan (HeavenMS)
*/ */
@@ -28,7 +28,6 @@ import net.packet.InPacket;
import net.server.guild.Guild; import net.server.guild.Guild;
/** /**
*
* @author Xterminator * @author Xterminator
*/ */
public final class DenyGuildRequestHandler extends AbstractPacketHandler { public final class DenyGuildRequestHandler extends AbstractPacketHandler {
@@ -30,7 +30,6 @@ import server.maps.MapObject;
import tools.PacketCreator; import tools.PacketCreator;
/** /**
*
* @author Matze * @author Matze
*/ */
public final class DoorHandler extends AbstractPacketHandler { public final class DoorHandler extends AbstractPacketHandler {
@@ -30,7 +30,6 @@ import server.maps.MiniDungeonInfo;
import tools.PacketCreator; import tools.PacketCreator;
/** /**
*
* @author Flav * @author Flav
*/ */
public class EnterCashShopHandler extends AbstractPacketHandler { public class EnterCashShopHandler extends AbstractPacketHandler {
@@ -31,7 +31,6 @@ import net.server.coordinator.world.InviteCoordinator.InviteType;
import tools.PacketCreator; import tools.PacketCreator;
/** /**
*
* @author Jay Estrella * @author Jay Estrella
* @author Ubaware * @author Ubaware
*/ */
@@ -11,10 +11,16 @@ public class FamilyPreceptsHandler extends AbstractPacketHandler {
@Override @Override
public void handlePacket(InPacket p, Client c) { public void handlePacket(InPacket p, Client c) {
Family family = c.getPlayer().getFamily(); Family family = c.getPlayer().getFamily();
if(family == null) return; if (family == null) {
if(family.getLeader().getChr() != c.getPlayer()) return; //only the leader can set the precepts return;
}
if (family.getLeader().getChr() != c.getPlayer()) {
return; //only the leader can set the precepts
}
String newPrecepts = p.readString(); String newPrecepts = p.readString();
if(newPrecepts.length() > 200) return; if (newPrecepts.length() > 200) {
return;
}
family.setMessage(newPrecepts, true); family.setMessage(newPrecepts, true);
//family.broadcastFamilyInfoUpdate(); //probably don't need to broadcast for this? //family.broadcastFamilyInfoUpdate(); //probably don't need to broadcast for this?
c.sendPacket(PacketCreator.getFamilyInfo(c.getPlayer().getFamilyEntry())); c.sendPacket(PacketCreator.getFamilyInfo(c.getPlayer().getFamilyEntry()));
@@ -31,23 +31,33 @@ public class FamilySeparateHandler extends AbstractPacketHandler {
@Override @Override
public void handlePacket(InPacket p, Client c) { public void handlePacket(InPacket p, Client c) {
if(!YamlConfig.config.server.USE_FAMILY_SYSTEM) return; if (!YamlConfig.config.server.USE_FAMILY_SYSTEM) {
return;
}
Family oldFamily = c.getPlayer().getFamily(); Family oldFamily = c.getPlayer().getFamily();
if(oldFamily == null) return; if (oldFamily == null) {
return;
}
FamilyEntry forkOn = null; FamilyEntry forkOn = null;
boolean isSenior; boolean isSenior;
if (p.available() > 0) { //packet 0x95 doesn't send id, since there is only one senior if (p.available() > 0) { //packet 0x95 doesn't send id, since there is only one senior
forkOn = c.getPlayer().getFamily().getEntryByID(p.readInt()); forkOn = c.getPlayer().getFamily().getEntryByID(p.readInt());
if(!c.getPlayer().getFamilyEntry().isJunior(forkOn)) return; //packet editing? if (!c.getPlayer().getFamilyEntry().isJunior(forkOn)) {
return; //packet editing?
}
isSenior = true; isSenior = true;
} else { } else {
forkOn = c.getPlayer().getFamilyEntry(); forkOn = c.getPlayer().getFamilyEntry();
isSenior = false; isSenior = false;
} }
if(forkOn == null) return; if (forkOn == null) {
return;
}
FamilyEntry senior = forkOn.getSenior(); FamilyEntry senior = forkOn.getSenior();
if(senior == null) return; if (senior == null) {
return;
}
int levelDiff = Math.abs(c.getPlayer().getLevel() - senior.getLevel()); int levelDiff = Math.abs(c.getPlayer().getLevel() - senior.getLevel());
int cost = 2500 * levelDiff; int cost = 2500 * levelDiff;
cost += levelDiff * levelDiff; cost += levelDiff * levelDiff;
@@ -58,7 +68,9 @@ public class FamilySeparateHandler extends AbstractPacketHandler {
c.getPlayer().gainMeso(-cost); c.getPlayer().gainMeso(-cost);
int repCost = separateRepCost(forkOn); int repCost = separateRepCost(forkOn);
senior.gainReputation(-repCost, false); senior.gainReputation(-repCost, false);
if(senior.getSenior() != null) senior.getSenior().gainReputation(-(repCost/2), false); if (senior.getSenior() != null) {
senior.getSenior().gainReputation(-(repCost / 2), false);
}
forkOn.announceToSenior(PacketCreator.serverNotice(5, forkOn.getName() + " has left the family."), true); forkOn.announceToSenior(PacketCreator.serverNotice(5, forkOn.getName() + " has left the family."), true);
forkOn.fork(); forkOn.fork();
c.sendPacket(PacketCreator.getFamilyInfo(forkOn)); //pedigree info will be requested from the client if the window is open c.sendPacket(PacketCreator.getFamilyInfo(forkOn)); //pedigree info will be requested from the client if the window is open
@@ -18,14 +18,20 @@ public class FamilySummonResponseHandler extends AbstractPacketHandler {
@Override @Override
public void handlePacket(InPacket p, Client c) { public void handlePacket(InPacket p, Client c) {
if(!YamlConfig.config.server.USE_FAMILY_SYSTEM) return; if (!YamlConfig.config.server.USE_FAMILY_SYSTEM) {
return;
}
p.readString(); //family name p.readString(); //family name
boolean accept = p.readByte() != 0; boolean accept = p.readByte() != 0;
InviteResult inviteResult = InviteCoordinator.answerInvite(InviteType.FAMILY_SUMMON, c.getPlayer().getId(), c.getPlayer(), accept); InviteResult inviteResult = InviteCoordinator.answerInvite(InviteType.FAMILY_SUMMON, c.getPlayer().getId(), c.getPlayer(), accept);
if(inviteResult.result == InviteResultType.NOT_FOUND) return; if (inviteResult.result == InviteResultType.NOT_FOUND) {
return;
}
Character inviter = inviteResult.from; Character inviter = inviteResult.from;
FamilyEntry inviterEntry = inviter.getFamilyEntry(); FamilyEntry inviterEntry = inviter.getFamilyEntry();
if(inviterEntry == null) return; if (inviterEntry == null) {
return;
}
MapleMap map = (MapleMap) inviteResult.params[0]; MapleMap map = (MapleMap) inviteResult.params[0];
if (accept && inviter.getMap() == map) { //cancel if inviter has changed maps if (accept && inviter.getMap() == map) { //cancel if inviter has changed maps
c.getPlayer().changeMap(map, map.getPortal(0)); c.getPlayer().changeMap(map, map.getPortal(0));
@@ -35,7 +35,6 @@ import server.maps.MapleMap;
import tools.PacketCreator; import tools.PacketCreator;
/** /**
*
* @author Moogra * @author Moogra
* @author Ubaware * @author Ubaware
*/ */
@@ -28,7 +28,6 @@ import net.AbstractPacketHandler;
import net.packet.InPacket; import net.packet.InPacket;
/** /**
*
* @author kevintjuh93 * @author kevintjuh93
*/ */
public class FredrickHandler extends AbstractPacketHandler { public class FredrickHandler extends AbstractPacketHandler {
@@ -111,7 +111,8 @@ public final class GuildOperationHandler extends AbstractPacketHandler {
GuildResponse mgr = Guild.sendInvitation(c, targetName); GuildResponse mgr = Guild.sendInvitation(c, targetName);
if (mgr != null) { if (mgr != null) {
c.sendPacket(mgr.getPacket(targetName)); c.sendPacket(mgr.getPacket(targetName));
} else {} // already sent invitation, do nothing } else {
} // already sent invitation, do nothing
break; break;
case 0x06: case 0x06:
@@ -144,7 +145,9 @@ public final class GuildOperationHandler extends AbstractPacketHandler {
c.sendPacket(GuildPackets.showGuildInfo(mc)); c.sendPacket(GuildPackets.showGuildInfo(mc));
allianceId = mc.getGuild().getAllianceId(); allianceId = mc.getGuild().getAllianceId();
if(allianceId > 0) Server.getInstance().getAlliance(allianceId).updateAlliancePackets(mc); if (allianceId > 0) {
Server.getInstance().getAlliance(allianceId).updateAlliancePackets(mc);
}
mc.saveGuildStatus(); // update database mc.saveGuildStatus(); // update database
mc.getMap().broadcastPacket(mc, GuildPackets.guildNameChanged(mc.getId(), mc.getGuild().getName())); // thanks Vcoc for pointing out an issue with updating guild tooltip to players in the map mc.getMap().broadcastPacket(mc, GuildPackets.guildNameChanged(mc.getId(), mc.getGuild().getName())); // thanks Vcoc for pointing out an issue with updating guild tooltip to players in the map
@@ -164,7 +167,9 @@ public final class GuildOperationHandler extends AbstractPacketHandler {
Server.getInstance().leaveGuild(mc.getMGC()); Server.getInstance().leaveGuild(mc.getMGC());
c.sendPacket(GuildPackets.showGuildInfo(null)); c.sendPacket(GuildPackets.showGuildInfo(null));
if(allianceId > 0) Server.getInstance().getAlliance(allianceId).updateAlliancePackets(mc); if (allianceId > 0) {
Server.getInstance().getAlliance(allianceId).updateAlliancePackets(mc);
}
mc.getMGC().setGuildId(0); mc.getMGC().setGuildId(0);
mc.getMGC().setGuildRank(5); mc.getMGC().setGuildRank(5);
@@ -182,7 +187,9 @@ public final class GuildOperationHandler extends AbstractPacketHandler {
} }
Server.getInstance().expelMember(mc.getMGC(), name, cid); Server.getInstance().expelMember(mc.getMGC(), name, cid);
if(allianceId > 0) Server.getInstance().getAlliance(allianceId).updateAlliancePackets(mc); if (allianceId > 0) {
Server.getInstance().getAlliance(allianceId).updateAlliancePackets(mc);
}
break; break;
case 0x0d: case 0x0d:
if (mc.getGuildId() <= 0 || mc.getGuildRank() != 1) { if (mc.getGuildId() <= 0 || mc.getGuildRank() != 1) {
@@ -234,7 +241,9 @@ public final class GuildOperationHandler extends AbstractPacketHandler {
break; break;
case 0x10: case 0x10:
if (mc.getGuildId() <= 0 || mc.getGuildRank() > 2) { if (mc.getGuildId() <= 0 || mc.getGuildRank() > 2) {
if(mc.getGuildId() <= 0) System.out.println("[Hack] " + mc.getName() + " tried to change guild notice while not in a guild."); if (mc.getGuildId() <= 0) {
System.out.println("[Hack] " + mc.getName() + " tried to change guild notice while not in a guild.");
}
return; return;
} }
String notice = p.readString(); String notice = p.readString();
@@ -270,7 +279,7 @@ public final class GuildOperationHandler extends AbstractPacketHandler {
break; break;
default: default:
System.out.println("Unhandled GUILD_OPERATION packet: \n" + p.toString()); System.out.println("Unhandled GUILD_OPERATION packet: \n" + p);
} }
} }
} }
@@ -35,7 +35,9 @@ public final class HealOvertimeHandler extends AbstractPacketHandler {
@Override @Override
public final void handlePacket(InPacket p, Client c) { public final void handlePacket(InPacket p, Client c) {
Character chr = c.getPlayer(); Character chr = c.getPlayer();
if(!chr.isLoggedinWorld()) return; if (!chr.isLoggedinWorld()) {
return;
}
AutobanManager abm = chr.getAutobanManager(); AutobanManager abm = chr.getAutobanManager();
int timestamp = Server.getInstance().getCurrentTimestamp(); int timestamp = Server.getInstance().getCurrentTimestamp();
@@ -44,7 +46,9 @@ public final class HealOvertimeHandler extends AbstractPacketHandler {
short healHP = p.readShort(); short healHP = p.readShort();
if (healHP != 0) { if (healHP != 0) {
abm.setTimestamp(8, timestamp, 28); // thanks Vcoc & Thora for pointing out d/c happening here abm.setTimestamp(8, timestamp, 28); // thanks Vcoc & Thora for pointing out d/c happening here
if ((abm.getLastSpam(0) + 1500) > timestamp) AutobanFactory.FAST_HP_HEALING.addPoint(abm, "Fast hp healing"); if ((abm.getLastSpam(0) + 1500) > timestamp) {
AutobanFactory.FAST_HP_HEALING.addPoint(abm, "Fast hp healing");
}
MapleMap map = chr.getMap(); MapleMap map = chr.getMap();
int abHeal = (int) (77 * map.getRecovery() * 1.5); // thanks Ari for noticing players not getting healed in sauna in certain cases int abHeal = (int) (77 * map.getRecovery() * 1.5); // thanks Ari for noticing players not getting healed in sauna in certain cases
@@ -38,7 +38,6 @@ import java.sql.SQLException;
import java.util.Arrays; import java.util.Arrays;
/** /**
*
* @author XoticStory * @author XoticStory
*/ */
public final class HiredMerchantRequest extends AbstractPacketHandler { public final class HiredMerchantRequest extends AbstractPacketHandler {
@@ -26,7 +26,6 @@ import net.AbstractPacketHandler;
import net.packet.InPacket; import net.packet.InPacket;
/** /**
*
* @author BubblesDev * @author BubblesDev
*/ */
public final class InnerPortalHandler extends AbstractPacketHandler { public final class InnerPortalHandler extends AbstractPacketHandler {
@@ -64,14 +64,22 @@ public final class InventoryMergeHandler extends AbstractPacketHandler {
for (short dst = 1; dst <= inventory.getSlotLimit(); dst++) { for (short dst = 1; dst <= inventory.getSlotLimit(); dst++) {
dstItem = inventory.getItem(dst); dstItem = inventory.getItem(dst);
if(dstItem == null) continue; if (dstItem == null) {
continue;
}
for (short src = (short) (dst + 1); src <= inventory.getSlotLimit(); src++) { for (short src = (short) (dst + 1); src <= inventory.getSlotLimit(); src++) {
srcItem = inventory.getItem(src); srcItem = inventory.getItem(src);
if(srcItem == null) continue; if (srcItem == null) {
continue;
}
if(dstItem.getItemId() != srcItem.getItemId()) continue; if (dstItem.getItemId() != srcItem.getItemId()) {
if(dstItem.getQuantity() == ii.getSlotMax(c, inventory.getItem(dst).getItemId())) break; continue;
}
if (dstItem.getQuantity() == ii.getSlotMax(c, inventory.getItem(dst).getItemId())) {
break;
}
InventoryManipulator.move(c, inventoryType, src, dst); InventoryManipulator.move(c, inventoryType, src, dst);
} }
@@ -35,7 +35,6 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
/** /**
*
* @author BubblesDev * @author BubblesDev
* @author Ronan * @author Ronan
*/ */
@@ -54,8 +53,12 @@ class PairedQuicksort {
x = A.get((i + j) / 2); x = A.get((i + j) / 2);
do { do {
while (x.getItemId() > A.get(i).getItemId()) i++; while (x.getItemId() > A.get(i).getItemId()) {
while (x.getItemId() < A.get(j).getItemId()) j--; i++;
}
while (x.getItemId() < A.get(j).getItemId()) {
j--;
}
if (i <= j) { if (i <= j) {
w = A.get(i); w = A.get(i);
@@ -81,8 +84,12 @@ class PairedQuicksort {
x = A.get((i + j) / 2); x = A.get((i + j) / 2);
do { do {
int watk = getWatkForProjectile(x); int watk = getWatkForProjectile(x);
while (watk < getWatkForProjectile(A.get(i))) i++; while (watk < getWatkForProjectile(A.get(i))) {
while (watk > getWatkForProjectile(A.get(j))) j--; i++;
}
while (watk > getWatkForProjectile(A.get(j))) {
j--;
}
if (i <= j) { if (i <= j) {
w = A.get(i); w = A.get(i);
@@ -103,8 +110,12 @@ class PairedQuicksort {
x = A.get((i + j) / 2); x = A.get((i + j) / 2);
do { do {
while (ii.getName(x.getItemId()).compareTo(ii.getName(A.get(i).getItemId())) > 0) i++; while (ii.getName(x.getItemId()).compareTo(ii.getName(A.get(i).getItemId())) > 0) {
while (ii.getName(x.getItemId()).compareTo(ii.getName(A.get(j).getItemId())) < 0) j--; i++;
}
while (ii.getName(x.getItemId()).compareTo(ii.getName(A.get(j).getItemId())) < 0) {
j--;
}
if (i <= j) { if (i <= j) {
w = A.get(i); w = A.get(i);
@@ -125,8 +136,12 @@ class PairedQuicksort {
x = A.get((i + j) / 2); x = A.get((i + j) / 2);
do { do {
while (x.getQuantity() > A.get(i).getQuantity()) i++; while (x.getQuantity() > A.get(i).getQuantity()) {
while (x.getQuantity() < A.get(j).getQuantity()) j--; i++;
}
while (x.getQuantity() < A.get(j).getQuantity()) {
j--;
}
if (i <= j) { if (i <= j) {
w = A.get(i); w = A.get(i);
@@ -149,8 +164,12 @@ class PairedQuicksort {
do { do {
while (x.getLevel() > ((Equip)A.get(i)).getLevel()) i++; while (x.getLevel() > ((Equip) A.get(i)).getLevel()) {
while (x.getLevel() < ((Equip)A.get(j)).getLevel()) j--; i++;
}
while (x.getLevel() < ((Equip) A.get(j)).getLevel()) {
j--;
}
if (i <= j) { if (i <= j) {
w = (Equip) A.get(i); w = (Equip) A.get(i);
@@ -182,8 +201,12 @@ class PairedQuicksort {
} }
if (Esq < j) MapleQuicksort(Esq, j, A, sort); if (Esq < j) {
if (i < Dir) MapleQuicksort(i, Dir, A, sort); MapleQuicksort(Esq, j, A, sort);
}
if (i < Dir) {
MapleQuicksort(i, Dir, A, sort);
}
} }
private static int getItemSubtype(Item it) { private static int getItemSubtype(Item it) {
@@ -254,7 +277,9 @@ class PairedQuicksort {
intersect.add(A.size()); intersect.add(A.size());
for (int ind = 0; ind < intersect.size() - 1; ind++) { for (int ind = 0; ind < intersect.size() - 1; ind++) {
if(intersect.get(ind + 1) > intersect.get(ind)) MapleQuicksort(intersect.get(ind), intersect.get(ind + 1) - 1, A, secondarySort); if (intersect.get(ind + 1) > intersect.get(ind)) {
MapleQuicksort(intersect.get(ind), intersect.get(ind + 1) - 1, A, secondarySort);
}
} }
} }
} }
@@ -29,7 +29,6 @@ import net.packet.InPacket;
import tools.PacketCreator; import tools.PacketCreator;
/** /**
*
* @author Matze * @author Matze
*/ */
public final class ItemMoveHandler extends AbstractPacketHandler { public final class ItemMoveHandler extends AbstractPacketHandler {
@@ -56,7 +55,9 @@ public final class ItemMoveHandler extends AbstractPacketHandler {
InventoryManipulator.move(c, type, src, action); InventoryManipulator.move(c, type, src, action);
} }
if (c.getPlayer().getMap().getHPDec() > 0) c.getPlayer().resetHpDecreaseTask(); if (c.getPlayer().getMap().getHPDec() > 0) {
c.getPlayer().resetHpDecreaseTask();
}
c.getPlayer().getAutobanManager().spam(6); c.getPlayer().getAutobanManager().spam(6);
} }
} }
@@ -31,7 +31,6 @@ import tools.FilePrinter;
import java.awt.*; import java.awt.*;
/** /**
*
* @author Matze * @author Matze
* @author Ronan * @author Ronan
*/ */
@@ -45,7 +44,9 @@ public final class ItemPickupHandler extends AbstractPacketHandler {
int oid = p.readInt(); int oid = p.readInt();
Character chr = c.getPlayer(); Character chr = c.getPlayer();
MapObject ob = chr.getMap().getMapObject(oid); MapObject ob = chr.getMap().getMapObject(oid);
if(ob == null) return; if (ob == null) {
return;
}
Point charPos = chr.getPosition(); Point charPos = chr.getPosition();
Point obPos = ob.getPosition(); Point obPos = ob.getPosition();
@@ -48,7 +48,9 @@ public final class ItemRewardHandler extends AbstractPacketHandler {
int itemId = p.readInt(); // will load from xml I don't care. int itemId = p.readInt(); // will load from xml I don't care.
Item it = c.getPlayer().getInventory(InventoryType.USE).getItem(slot); // null check here thanks to Thora Item it = c.getPlayer().getInventory(InventoryType.USE).getItem(slot); // null check here thanks to Thora
if (it == null || it.getItemId() != itemId || c.getPlayer().getInventory(InventoryType.USE).countById(itemId) < 1) return; if (it == null || it.getItemId() != itemId || c.getPlayer().getInventory(InventoryType.USE).countById(itemId) < 1) {
return;
}
ItemInformationProvider ii = ItemInformationProvider.getInstance(); ItemInformationProvider ii = ItemInformationProvider.getInstance();
Pair<Integer, List<RewardItem>> rewards = ii.getItemReward(itemId); Pair<Integer, List<RewardItem>> rewards = ii.getItemReward(itemId);
@@ -28,7 +28,6 @@ import net.packet.InPacket;
import tools.PacketCreator; import tools.PacketCreator;
/** /**
*
* @author kevintjuh93 * @author kevintjuh93
*/ */
public class LeftKnockbackHandler extends AbstractPacketHandler { public class LeftKnockbackHandler extends AbstractPacketHandler {
@@ -537,7 +537,7 @@ public final class MTSHandler extends AbstractPacketHandler {
c.sendPacket(PacketCreator.MTSFailBuy()); c.sendPacket(PacketCreator.MTSFailBuy());
} }
} else { } else {
System.out.println("Unhandled OP(MTS): " + op + " Packet: " + p.toString()); System.out.println("Unhandled OP(MTS): " + op + " Packet: " + p);
} }
} else { } else {
c.sendPacket(PacketCreator.showMTSCash(c.getPlayer())); c.sendPacket(PacketCreator.showMTSCash(c.getPlayer()));
@@ -27,7 +27,6 @@ import net.AbstractPacketHandler;
import net.packet.InPacket; import net.packet.InPacket;
/** /**
*
* @author Jay Estrella, Ronan * @author Jay Estrella, Ronan
*/ */
public final class MakerSkillHandler extends AbstractPacketHandler { public final class MakerSkillHandler extends AbstractPacketHandler {
@@ -28,7 +28,6 @@ import net.packet.InPacket;
import tools.PacketCreator; import tools.PacketCreator;
/** /**
*
* @author Matze * @author Matze
* @author Ronan - concurrency protection * @author Ronan - concurrency protection
*/ */
@@ -31,7 +31,6 @@ import tools.PacketCreator;
import tools.Randomizer; import tools.Randomizer;
/** /**
*
* @author Xotic (XoticStory) & BubblesDev * @author Xotic (XoticStory) & BubblesDev
*/ */
@@ -37,7 +37,6 @@ import tools.PacketCreator;
import java.util.Map; import java.util.Map;
/** /**
*
* @author Jay Estrella * @author Jay Estrella
* @author Ronan * @author Ronan
*/ */
@@ -49,7 +49,8 @@ public class MoveDragonHandler extends AbstractMovementPacketHandler {
} else { } else {
chr.getMap().broadcastMessage(chr, PacketCreator.moveDragon(dragon, startPos, p, movementDataLength), dragon.getPosition()); chr.getMap().broadcastMessage(chr, PacketCreator.moveDragon(dragon, startPos, p, movementDataLength), dragon.getPosition());
} }
} catch (EmptyMovementException e) {} } catch (EmptyMovementException e) {
}
} }
} }
} }
@@ -147,7 +147,9 @@ public final class MoveLifeHandler extends AbstractMovementPacketHandler {
Point serverStartPos = new Point(monster.getPosition()); Point serverStartPos = new Point(monster.getPosition());
Boolean aggro = monster.aggroMoveLifeUpdate(player); Boolean aggro = monster.aggroMoveLifeUpdate(player);
if (aggro == null) return; if (aggro == null) {
return;
}
if (nextUse != null) { if (nextUse != null) {
c.sendPacket(PacketCreator.moveMonsterResponse(objectid, moveid, mobMp, aggro, nextSkillId, nextSkillLevel)); c.sendPacket(PacketCreator.moveMonsterResponse(objectid, moveid, mobMp, aggro, nextSkillId, nextSkillLevel));
@@ -169,7 +171,8 @@ public final class MoveLifeHandler extends AbstractMovementPacketHandler {
map.broadcastMessage(player, PacketCreator.moveMonster(objectid, nextMovementCouldBeSkill, rawActivity, useSkillId, useSkillLevel, pOption, startPos, p, movementDataLength), serverStartPos); map.broadcastMessage(player, PacketCreator.moveMonster(objectid, nextMovementCouldBeSkill, rawActivity, useSkillId, useSkillLevel, pOption, startPos, p, movementDataLength), serverStartPos);
//updatePosition(res, monster, -2); //does this need to be done after the packet is broadcast? //updatePosition(res, monster, -2); //does this need to be done after the packet is broadcast?
map.moveMonster(monster, monster.getPosition()); map.moveMonster(monster, monster.getPosition());
} catch (EmptyMovementException e) {} } catch (EmptyMovementException e) {
}
if (banishPlayers != null) { if (banishPlayers != null) {
for (Character chr : banishPlayers) { for (Character chr : banishPlayers) {
@@ -42,6 +42,7 @@ public final class MovePlayerHandler extends AbstractMovementPacketHandler {
} else { } else {
c.getPlayer().getMap().broadcastMessage(c.getPlayer(), PacketCreator.movePlayer(c.getPlayer().getId(), p, movementDataLength), false); c.getPlayer().getMap().broadcastMessage(c.getPlayer(), PacketCreator.movePlayer(c.getPlayer().getId(), p, movementDataLength), false);
} }
} catch (EmptyMovementException e) {} } catch (EmptyMovementException e) {
}
} }
} }
@@ -53,7 +53,8 @@ public final class MoveSummonHandler extends AbstractMovementPacketHandler {
p.seek(movementDataStart); p.seek(movementDataStart);
player.getMap().broadcastMessage(player, PacketCreator.moveSummon(player.getId(), oid, startPos, p, movementDataLength), summon.getPosition()); player.getMap().broadcastMessage(player, PacketCreator.moveSummon(player.getId(), oid, startPos, p, movementDataLength), summon.getPosition());
} catch (EmptyMovementException e) {} } catch (EmptyMovementException e) {
}
} }
} }
} }
@@ -28,7 +28,6 @@ import scripting.npc.NPCScriptManager;
import scripting.quest.QuestScriptManager; import scripting.quest.QuestScriptManager;
/** /**
*
* @author Matze * @author Matze
*/ */
public final class NPCMoreTalkHandler extends AbstractPacketHandler { public final class NPCMoreTalkHandler extends AbstractPacketHandler {
@@ -29,7 +29,6 @@ import net.packet.InPacket;
import tools.FilePrinter; import tools.FilePrinter;
/** /**
*
* @author Matze * @author Matze
*/ */
public final class NPCShopHandler extends AbstractPacketHandler { public final class NPCShopHandler extends AbstractPacketHandler {
@@ -50,7 +50,9 @@ public final class NPCTalkHandler extends AbstractPacketHandler {
MapObject obj = c.getPlayer().getMap().getMapObject(oid); MapObject obj = c.getPlayer().getMap().getMapObject(oid);
if (obj instanceof NPC) { if (obj instanceof NPC) {
NPC npc = (NPC) obj; NPC npc = (NPC) obj;
if(YamlConfig.config.server.USE_DEBUG == true) c.getPlayer().dropMessage(5, "Talking to NPC " + npc.getId()); if (YamlConfig.config.server.USE_DEBUG == true) {
c.getPlayer().dropMessage(5, "Talking to NPC " + npc.getId());
}
if (npc.getId() == 9010009) { //is duey if (npc.getId() == 9010009) { //is duey
DueyProcessor.dueySendTalk(c, false); DueyProcessor.dueySendTalk(c, false);
@@ -36,9 +36,8 @@ import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
/** /**
*
* @author Ronan * @author Ronan
* * <p>
* Header layout thanks to Eric * Header layout thanks to Eric
*/ */
public final class NewYearCardHandler extends AbstractPacketHandler { public final class NewYearCardHandler extends AbstractPacketHandler {
@@ -100,7 +99,9 @@ public final class NewYearCardHandler extends AbstractPacketHandler {
NewYearCardRecord.updateNewYearCard(newyear); NewYearCardRecord.updateNewYearCard(newyear);
player.getAbstractPlayerInteraction().gainItem(4301000, (short) 1); player.getAbstractPlayerInteraction().gainItem(4301000, (short) 1);
if(!newyear.getMessage().isEmpty()) player.dropMessage(6, "[New Year] " + newyear.getSenderName() + ": " + newyear.getMessage()); if (!newyear.getMessage().isEmpty()) {
player.dropMessage(6, "[New Year] " + newyear.getSenderName() + ": " + newyear.getMessage());
}
player.addNewYearRecord(newyear); player.addNewYearRecord(newyear);
player.sendPacket(PacketCreator.onNewYearCardRes(player, newyear, 6, 0)); // successfully rcvd player.sendPacket(PacketCreator.onNewYearCardRes(player, newyear, 6, 0)); // successfully rcvd
@@ -146,7 +147,9 @@ public final class NewYearCardHandler extends AbstractPacketHandler {
} }
private static int getValidNewYearCardStatus(int itemid, Character player, short slot) { private static int getValidNewYearCardStatus(int itemid, Character player, short slot) {
if(!ItemConstants.isNewYearCardUse(itemid)) return 0x14; if (!ItemConstants.isNewYearCardUse(itemid)) {
return 0x14;
}
Item it = player.getInventory(ItemConstants.getInventoryType(itemid)).getItem(slot); Item it = player.getInventory(ItemConstants.getInventoryType(itemid)).getItem(slot);
return (it != null && it.getItemId() == itemid) ? 0 : 0x12; return (it != null && it.getItemId() == itemid) ? 0 : 0x12;
@@ -27,13 +27,14 @@ import net.packet.InPacket;
import tools.PacketCreator; import tools.PacketCreator;
/** /**
*
* @author Ubaware * @author Ubaware
*/ */
public final class OpenFamilyHandler extends AbstractPacketHandler { public final class OpenFamilyHandler extends AbstractPacketHandler {
@Override @Override
public final void handlePacket(InPacket p, Client c) { public final void handlePacket(InPacket p, Client c) {
if(!YamlConfig.config.server.USE_FAMILY_SYSTEM) return; if (!YamlConfig.config.server.USE_FAMILY_SYSTEM) {
return;
}
Character chr = c.getPlayer(); Character chr = c.getPlayer();
c.sendPacket(PacketCreator.getFamilyInfo(chr.getFamilyEntry())); c.sendPacket(PacketCreator.getFamilyInfo(chr.getFamilyEntry()));
} }
@@ -27,13 +27,14 @@ import net.packet.InPacket;
import tools.PacketCreator; import tools.PacketCreator;
/** /**
*
* @author Ubaware * @author Ubaware
*/ */
public final class OpenFamilyPedigreeHandler extends AbstractPacketHandler { public final class OpenFamilyPedigreeHandler extends AbstractPacketHandler {
@Override @Override
public final void handlePacket(InPacket p, Client c) { public final void handlePacket(InPacket p, Client c) {
if(!YamlConfig.config.server.USE_FAMILY_SYSTEM) return; if (!YamlConfig.config.server.USE_FAMILY_SYSTEM) {
return;
}
Character target = c.getChannelServer().getPlayerStorage().getCharacterByName(p.readString()); Character target = c.getChannelServer().getPlayerStorage().getCharacterByName(p.readString());
if (target != null && target.getFamily() != null) { if (target != null && target.getFamily() != null) {
c.sendPacket(PacketCreator.showPedigree(target.getFamilyEntry())); c.sendPacket(PacketCreator.showPedigree(target.getFamilyEntry()));
@@ -47,8 +47,11 @@ public final class OwlWarpHandler extends AbstractPacketHandler {
if (hm == null || hm.getMapId() != mapid || !hm.hasItem(c.getPlayer().getOwlSearch())) { if (hm == null || hm.getMapId() != mapid || !hm.hasItem(c.getPlayer().getOwlSearch())) {
ps = c.getWorldServer().getPlayerShop(ownerid); ps = c.getWorldServer().getPlayerShop(ownerid);
if (ps == null || ps.getMapId() != mapid || !ps.hasItem(c.getPlayer().getOwlSearch())) { if (ps == null || ps.getMapId() != mapid || !ps.hasItem(c.getPlayer().getOwlSearch())) {
if(hm == null && ps == null) c.sendPacket(PacketCreator.getOwlMessage(1)); if (hm == null && ps == null) {
else c.sendPacket(PacketCreator.getOwlMessage(3)); c.sendPacket(PacketCreator.getOwlMessage(1));
} else {
c.sendPacket(PacketCreator.getOwlMessage(3));
}
return; return;
} }
@@ -59,8 +62,11 @@ public final class OwlWarpHandler extends AbstractPacketHandler {
if (ps.isOpen()) { //change map has a delay, must double check if (ps.isOpen()) { //change map has a delay, must double check
if (!ps.visitShop(c.getPlayer())) { if (!ps.visitShop(c.getPlayer())) {
if(!ps.isBanned(c.getPlayer().getName())) c.sendPacket(PacketCreator.getOwlMessage(2)); if (!ps.isBanned(c.getPlayer().getName())) {
else c.sendPacket(PacketCreator.getOwlMessage(17)); c.sendPacket(PacketCreator.getOwlMessage(2));
} else {
c.sendPacket(PacketCreator.getOwlMessage(17));
}
} }
} else { } else {
//c.sendPacket(PacketCreator.serverNotice(1, "That merchant has either been closed or is under maintenance.")); //c.sendPacket(PacketCreator.serverNotice(1, "That merchant has either been closed or is under maintenance."));
@@ -26,7 +26,6 @@ import net.AbstractPacketHandler;
import net.packet.InPacket; import net.packet.InPacket;
/** /**
*
* @author Quasar * @author Quasar
*/ */
public class PartySearchRegisterHandler extends AbstractPacketHandler { public class PartySearchRegisterHandler extends AbstractPacketHandler {
@@ -30,7 +30,6 @@ import net.server.world.World;
import tools.PacketCreator; import tools.PacketCreator;
/** /**
*
* @author XoticStory * @author XoticStory
* @author BubblesDev * @author BubblesDev
* @author Ronan * @author Ronan
@@ -64,7 +63,9 @@ public class PartySearchStartHandler extends AbstractPacketHandler {
int jobs = p.readInt(); int jobs = p.readInt();
Party party = c.getPlayer().getParty(); Party party = c.getPlayer().getParty();
if (party == null || !c.getPlayer().isPartyLeader()) return; if (party == null || !c.getPlayer().isPartyLeader()) {
return;
}
World world = c.getWorldServer(); World world = c.getWorldServer();
world.getPartySearchCoordinator().registerPartyLeader(chr, min, max, jobs); world.getPartySearchCoordinator().registerPartyLeader(chr, min, max, jobs);
@@ -41,7 +41,9 @@ public final class PetExcludeItemsHandler extends AbstractPacketHandler {
Character chr = c.getPlayer(); Character chr = c.getPlayer();
byte petIndex = chr.getPetIndex(petId); byte petIndex = chr.getPetIndex(petId);
if (petIndex < 0) return; if (petIndex < 0) {
return;
}
final Pet pet = chr.getPet(petIndex); final Pet pet = chr.getPet(petIndex);
if (pet == null) { if (pet == null) {
@@ -64,7 +64,9 @@ public final class PetFoodHandler extends AbstractPacketHandler {
} }
Pet pet = chr.getPet(slot); Pet pet = chr.getPet(slot);
if(pet == null) return; if (pet == null) {
return;
}
short pos = p.readShort(); short pos = p.readShort();
int itemId = p.readInt(); int itemId = p.readInt();
@@ -46,7 +46,6 @@ import java.sql.SQLException;
import java.util.Arrays; import java.util.Arrays;
/** /**
*
* @author Matze * @author Matze
* @author Ronan - concurrency safety and reviewed minigames * @author Ronan - concurrency safety and reviewed minigames
*/ */
@@ -100,7 +99,7 @@ public final class PlayerInteractionHandler extends AbstractPacketHandler {
SELECT_CARD(0x44); SELECT_CARD(0x44);
final byte code; final byte code;
private Action(int code) { Action(int code) {
this.code = (byte) code; this.code = (byte) code;
} }
@@ -278,7 +277,9 @@ public final class PlayerInteractionHandler extends AbstractPacketHandler {
return; return;
} }
} else { } else {
if (isTradeOpen(chr)) return; if (isTradeOpen(chr)) {
return;
}
int oid = p.readInt(); int oid = p.readInt();
MapObject ob = chr.getMap().getMapObject(oid); MapObject ob = chr.getMap().getMapObject(oid);
@@ -339,7 +340,9 @@ public final class PlayerInteractionHandler extends AbstractPacketHandler {
chr.closeHiredMerchant(true); chr.closeHiredMerchant(true);
} }
} else if (mode == Action.OPEN_STORE.getCode() || mode == Action.OPEN_CASH.getCode()) { } else if (mode == Action.OPEN_STORE.getCode() || mode == Action.OPEN_CASH.getCode()) {
if (isTradeOpen(chr)) return; if (isTradeOpen(chr)) {
return;
}
if (mode == Action.OPEN_STORE.getCode()) { if (mode == Action.OPEN_STORE.getCode()) {
p.readByte(); //01 p.readByte(); //01
@@ -364,7 +367,8 @@ public final class PlayerInteractionHandler extends AbstractPacketHandler {
if (YamlConfig.config.server.USE_ERASE_PERMIT_ON_OPENSHOP) { if (YamlConfig.config.server.USE_ERASE_PERMIT_ON_OPENSHOP) {
try { try {
InventoryManipulator.removeById(c, InventoryType.CASH, shop.getItemId(), 1, true, false); InventoryManipulator.removeById(c, InventoryType.CASH, shop.getItemId(), 1, true, false);
} catch(RuntimeException re) {} // fella does not have a player shop permit... } catch (RuntimeException re) {
} // fella does not have a player shop permit...
} }
chr.getMap().broadcastMessage(PacketCreator.updatePlayerShopBox(shop)); chr.getMap().broadcastMessage(PacketCreator.updatePlayerShopBox(shop));
@@ -554,7 +558,9 @@ public final class PlayerInteractionHandler extends AbstractPacketHandler {
} else if (mode == Action.CONFIRM.getCode()) { } else if (mode == Action.CONFIRM.getCode()) {
Trade.completeTrade(chr); Trade.completeTrade(chr);
} else if (mode == Action.ADD_ITEM.getCode() || mode == Action.PUT_ITEM.getCode()) { } else if (mode == Action.ADD_ITEM.getCode() || mode == Action.PUT_ITEM.getCode()) {
if (isTradeOpen(chr)) return; if (isTradeOpen(chr)) {
return;
}
InventoryType ivType = InventoryType.getByType(p.readByte()); InventoryType ivType = InventoryType.getByType(p.readByte());
short slot = p.readShort(); short slot = p.readShort();
@@ -647,7 +653,9 @@ public final class PlayerInteractionHandler extends AbstractPacketHandler {
c.sendPacket(PacketCreator.serverNotice(1, "You can't sell without owning a shop.")); c.sendPacket(PacketCreator.serverNotice(1, "You can't sell without owning a shop."));
} }
} else if (mode == Action.REMOVE_ITEM.getCode()) { } else if (mode == Action.REMOVE_ITEM.getCode()) {
if (isTradeOpen(chr)) return; if (isTradeOpen(chr)) {
return;
}
PlayerShop shop = chr.getPlayerShop(); PlayerShop shop = chr.getPlayerShop();
if (shop != null && shop.isOwner(chr)) { if (shop != null && shop.isOwner(chr)) {
@@ -668,12 +676,16 @@ public final class PlayerInteractionHandler extends AbstractPacketHandler {
} }
} else if (mode == Action.MERCHANT_MESO.getCode()) { } else if (mode == Action.MERCHANT_MESO.getCode()) {
HiredMerchant merchant = chr.getHiredMerchant(); HiredMerchant merchant = chr.getHiredMerchant();
if (merchant == null) return; if (merchant == null) {
return;
}
merchant.withdrawMesos(chr); merchant.withdrawMesos(chr);
} else if (mode == Action.MERCHANT_ORGANIZE.getCode()) { } else if (mode == Action.MERCHANT_ORGANIZE.getCode()) {
HiredMerchant merchant = chr.getHiredMerchant(); HiredMerchant merchant = chr.getHiredMerchant();
if (merchant == null || !merchant.isOwner(chr)) return; if (merchant == null || !merchant.isOwner(chr)) {
return;
}
merchant.withdrawMesos(chr); merchant.withdrawMesos(chr);
merchant.clearInexistentItems(); merchant.clearInexistentItems();
@@ -685,7 +697,9 @@ public final class PlayerInteractionHandler extends AbstractPacketHandler {
c.sendPacket(PacketCreator.updateHiredMerchant(merchant, chr)); c.sendPacket(PacketCreator.updateHiredMerchant(merchant, chr));
} else if (mode == Action.BUY.getCode() || mode == Action.MERCHANT_BUY.getCode()) { } else if (mode == Action.BUY.getCode() || mode == Action.MERCHANT_BUY.getCode()) {
if (isTradeOpen(chr)) return; if (isTradeOpen(chr)) {
return;
}
int itemid = p.readByte(); int itemid = p.readByte();
short quantity = p.readShort(); short quantity = p.readShort();
@@ -706,7 +720,9 @@ public final class PlayerInteractionHandler extends AbstractPacketHandler {
merchant.broadcastToVisitorsThreadsafe(PacketCreator.updateHiredMerchant(merchant, chr)); merchant.broadcastToVisitorsThreadsafe(PacketCreator.updateHiredMerchant(merchant, chr));
} }
} else if (mode == Action.TAKE_ITEM_BACK.getCode()) { } else if (mode == Action.TAKE_ITEM_BACK.getCode()) {
if (isTradeOpen(chr)) return; if (isTradeOpen(chr)) {
return;
}
HiredMerchant merchant = chr.getHiredMerchant(); HiredMerchant merchant = chr.getHiredMerchant();
if (merchant != null && merchant.isOwner(chr)) { if (merchant != null && merchant.isOwner(chr)) {
@@ -726,14 +742,18 @@ public final class PlayerInteractionHandler extends AbstractPacketHandler {
merchant.takeItemBack(slot, chr); merchant.takeItemBack(slot, chr);
} }
} else if (mode == Action.CLOSE_MERCHANT.getCode()) { } else if (mode == Action.CLOSE_MERCHANT.getCode()) {
if (isTradeOpen(chr)) return; if (isTradeOpen(chr)) {
return;
}
HiredMerchant merchant = chr.getHiredMerchant(); HiredMerchant merchant = chr.getHiredMerchant();
if (merchant != null) { if (merchant != null) {
merchant.closeOwnerMerchant(chr); merchant.closeOwnerMerchant(chr);
} }
} else if (mode == Action.MAINTENANCE_OFF.getCode()) { } else if (mode == Action.MAINTENANCE_OFF.getCode()) {
if (isTradeOpen(chr)) return; if (isTradeOpen(chr)) {
return;
}
HiredMerchant merchant = chr.getHiredMerchant(); HiredMerchant merchant = chr.getHiredMerchant();
if (merchant != null) { if (merchant != null) {
@@ -385,7 +385,9 @@ public final class PlayerLoggedinHandler extends AbstractPacketHandler {
player.commitExcludedItems(); player.commitExcludedItems();
showDueyNotification(c, player); showDueyNotification(c, player);
if (player.getMap().getHPDec() > 0) player.resetHpDecreaseTask(); if (player.getMap().getHPDec() > 0) {
player.resetHpDecreaseTask();
}
player.resetPlayerRates(); player.resetPlayerRates();
if (YamlConfig.config.server.USE_ADD_RATES_BY_LEVEL) { if (YamlConfig.config.server.USE_ADD_RATES_BY_LEVEL) {
@@ -432,7 +434,9 @@ public final class PlayerLoggedinHandler extends AbstractPacketHandler {
c.sendPacket(PacketCreator.setNPCScriptable(npcsIds)); c.sendPacket(PacketCreator.setNPCScriptable(npcsIds));
} }
if (newcomer) player.setLoginTime(System.currentTimeMillis()); if (newcomer) {
player.setLoginTime(System.currentTimeMillis());
}
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} finally { } finally {
@@ -34,7 +34,6 @@ import java.util.Collections;
import java.util.List; import java.util.List;
/** /**
*
* @author Ronan * @author Ronan
*/ */
public final class PlayerMapTransitionHandler extends AbstractPacketHandler { public final class PlayerMapTransitionHandler extends AbstractPacketHandler {
@@ -32,7 +32,6 @@ import server.quest.Quest;
import java.awt.*; import java.awt.*;
/** /**
*
* @author Matze * @author Matze
*/ */
public final class QuestActionHandler extends AbstractPacketHandler { public final class QuestActionHandler extends AbstractPacketHandler {
@@ -6,26 +6,21 @@ import net.AbstractPacketHandler;
import net.packet.InPacket; import net.packet.InPacket;
/** /**
*
* @author Shavit * @author Shavit
*/ */
public class QuickslotKeyMappedModifiedHandler extends AbstractPacketHandler public class QuickslotKeyMappedModifiedHandler extends AbstractPacketHandler {
{
@Override @Override
public void handlePacket(InPacket p, Client c) public void handlePacket(InPacket p, Client c) {
{
// Invalid size for the packet. // Invalid size for the packet.
if (p.available() != QuickslotBinding.QUICKSLOT_SIZE * Integer.BYTES || if (p.available() != QuickslotBinding.QUICKSLOT_SIZE * Integer.BYTES ||
// not logged in-game // not logged in-game
c.getPlayer() == null) c.getPlayer() == null) {
{
return; return;
} }
byte[] aQuickslotKeyMapped = new byte[QuickslotBinding.QUICKSLOT_SIZE]; byte[] aQuickslotKeyMapped = new byte[QuickslotBinding.QUICKSLOT_SIZE];
for(int i = 0; i < QuickslotBinding.QUICKSLOT_SIZE; i++) for (int i = 0; i < QuickslotBinding.QUICKSLOT_SIZE; i++) {
{
aQuickslotKeyMapped[i] = (byte) p.readInt(); aQuickslotKeyMapped[i] = (byte) p.readInt();
} }
@@ -16,7 +16,6 @@ import tools.PacketCreator;
import java.util.Map; import java.util.Map;
/** /**
*
* @author Xari * @author Xari
* @author Ronan - added concurrency protection and quest progress limit * @author Ronan - added concurrency protection and quest progress limit
*/ */
@@ -10,7 +10,6 @@ import scripting.quest.QuestScriptManager;
import server.quest.Quest; import server.quest.Quest;
/** /**
*
* @author Xari * @author Xari
*/ */
public class RaiseUIStateHandler extends AbstractPacketHandler { public class RaiseUIStateHandler extends AbstractPacketHandler {
@@ -167,8 +167,11 @@ public final class RangedAttackHandler extends AbstractDealDamageHandler {
bulletConsume = (byte) (effect.getBulletConsume() * (hasShadowPartner ? 2 : 1)); bulletConsume = (byte) (effect.getBulletConsume() * (hasShadowPartner ? 2 : 1));
} }
if(slot < 0) System.out.println("<ERROR> Projectile to use was unable to be found."); if (slot < 0) {
else InventoryManipulator.removeFromSlot(c, InventoryType.USE, slot, bulletConsume, false, true); System.out.println("<ERROR> Projectile to use was unable to be found.");
} else {
InventoryManipulator.removeFromSlot(c, InventoryType.USE, slot, bulletConsume, false, true);
}
} }
} }
@@ -29,7 +29,6 @@ import net.packet.InPacket;
import scripting.npc.NPCScriptManager; import scripting.npc.NPCScriptManager;
/** /**
*
* @author Generic * @author Generic
*/ */
public final class RemoteGachaponHandler extends AbstractPacketHandler { public final class RemoteGachaponHandler extends AbstractPacketHandler {
@@ -30,7 +30,6 @@ import server.maps.HiredMerchant;
import tools.PacketCreator; import tools.PacketCreator;
/** /**
*
* @author kevintjuh93 - :3 * @author kevintjuh93 - :3
*/ */
public class RemoteStoreHandler extends AbstractPacketHandler { public class RemoteStoreHandler extends AbstractPacketHandler {
@@ -86,7 +86,7 @@ public final class ReportHandler extends AbstractPacketHandler {
Timestamp currentTimestamp = new java.sql.Timestamp(calendar.getTime().getTime()); Timestamp currentTimestamp = new java.sql.Timestamp(calendar.getTime().getTime());
try (Connection con = DatabaseConnection.getConnection(); try (Connection con = DatabaseConnection.getConnection();
PreparedStatement ps = con.prepareStatement("INSERT INTO reports (`reporttime`, `reporterid`, `victimid`, `reason`, `chatlog`, `description`) VALUES (?, ?, ?, ?, ?, ?)")) { PreparedStatement ps = con.prepareStatement("INSERT INTO reports (`reporttime`, `reporterid`, `victimid`, `reason`, `chatlog`, `description`) VALUES (?, ?, ?, ?, ?, ?)")) {
ps.setString(1, currentTimestamp.toGMTString().toString()); ps.setString(1, currentTimestamp.toGMTString());
ps.setInt(2, reporterid); ps.setInt(2, reporterid);
ps.setInt(3, victimid); ps.setInt(3, victimid);
ps.setInt(4, reason); ps.setInt(4, reason);
@@ -173,7 +173,9 @@ public final class RingActionHandler extends AbstractPacketHandler {
private synchronized static void breakMarriage(Character chr) { private synchronized static void breakMarriage(Character chr) {
int partnerid = chr.getPartnerId(); int partnerid = chr.getPartnerId();
if(partnerid <= 0) return; if (partnerid <= 0) {
return;
}
chr.getClient().getWorldServer().deleteRelationship(chr.getId(), partnerid); chr.getClient().getWorldServer().deleteRelationship(chr.getId(), partnerid);
Ring.removeRing(chr.getMarriageRing()); Ring.removeRing(chr.getMarriageRing());
@@ -493,12 +495,13 @@ public final class RingActionHandler extends AbstractPacketHandler {
} }
} }
} }
} catch (NumberFormatException nfe) {} } catch (NumberFormatException nfe) {
}
break; break;
default: default:
System.out.println("Unhandled RING_ACTION Mode: " + p.toString()); System.out.println("Unhandled RING_ACTION Mode: " + p);
break; break;
} }
@@ -31,7 +31,6 @@ import server.ItemInformationProvider;
import server.ItemInformationProvider.ScriptedItem; import server.ItemInformationProvider.ScriptedItem;
/** /**
*
* @author Jay Estrella * @author Jay Estrella
*/ */
public final class ScriptedItemHandler extends AbstractPacketHandler { public final class ScriptedItemHandler extends AbstractPacketHandler {
@@ -43,7 +42,9 @@ public final class ScriptedItemHandler extends AbstractPacketHandler {
ItemInformationProvider ii = ItemInformationProvider.getInstance(); ItemInformationProvider ii = ItemInformationProvider.getInstance();
ScriptedItem info = ii.getScriptedItemInfo(itemId); ScriptedItem info = ii.getScriptedItemInfo(itemId);
if (info == null) return; if (info == null) {
return;
}
Item item = c.getPlayer().getInventory(ItemConstants.getInventoryType(itemId)).getItem(itemSlot); Item item = c.getPlayer().getInventory(ItemConstants.getInventoryType(itemId)).getItem(itemSlot);
if (item == null || item.getItemId() != itemId || item.getQuantity() < 1) { if (item == null || item.getItemId() != itemId || item.getQuantity() < 1) {
@@ -34,7 +34,9 @@ public final class SkillMacroHandler extends AbstractPacketHandler {
public final void handlePacket(InPacket p, Client c) { public final void handlePacket(InPacket p, Client c) {
Character chr = c.getPlayer(); Character chr = c.getPlayer();
int num = p.readByte(); int num = p.readByte();
if (num > 5) return; if (num > 5) {
return;
}
for (int i = 0; i < num; i++) { for (int i = 0; i < num; i++) {
String name = p.readString(); String name = p.readString();
@@ -29,7 +29,6 @@ import server.events.gm.Snowball;
import server.maps.MapleMap; import server.maps.MapleMap;
/** /**
*
* @author kevintjuh93 * @author kevintjuh93
*/ */
public final class SnowballHandler extends AbstractPacketHandler { public final class SnowballHandler extends AbstractPacketHandler {
@@ -43,23 +42,31 @@ public final class SnowballHandler extends AbstractPacketHandler {
int what = p.readByte(); int what = p.readByte();
//slea.skip(4); //slea.skip(4);
if (snowball == null || othersnowball == null || snowball.getSnowmanHP() == 0) return; if (snowball == null || othersnowball == null || snowball.getSnowmanHP() == 0) {
if ((currentServerTime() - chr.getLastSnowballAttack()) < 500) return; return;
if (chr.getTeam() != (what % 2)) return; }
if ((currentServerTime() - chr.getLastSnowballAttack()) < 500) {
return;
}
if (chr.getTeam() != (what % 2)) {
return;
}
chr.setLastSnowballAttack(currentServerTime()); chr.setLastSnowballAttack(currentServerTime());
int damage = 0; int damage = 0;
if (what < 2 && othersnowball.getSnowmanHP() > 0) if (what < 2 && othersnowball.getSnowmanHP() > 0) {
damage = 10; damage = 10;
else if (what == 2 || what == 3) { } else if (what == 2 || what == 3) {
if (Math.random() < 0.03) if (Math.random() < 0.03) {
damage = 45; damage = 45;
else } else {
damage = 15; damage = 15;
} }
}
if (what >= 0 && what <= 4) if (what >= 0 && what <= 4) {
snowball.hit(what, damage); snowball.hit(what, damage);
}
} }
} }

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