diff --git a/src/main/java/server/CashShop.java b/src/main/java/server/CashShop.java index 2d0e8bbb8a..593257813a 100644 --- a/src/main/java/server/CashShop.java +++ b/src/main/java/server/CashShop.java @@ -48,10 +48,12 @@ import java.util.concurrent.locks.Lock; public class CashShop { public static class CashItem { - private int sn, itemId, price; - private long period; - private short count; - private boolean onSale; + private final int sn; + private final int itemId; + private final int price; + private final long period; + private final short count; + private final boolean onSale; private CashItem(int sn, int itemId, int price, long period, short count, boolean onSale) { this.sn = sn; @@ -120,8 +122,9 @@ public class CashShop { } public static class SpecialCashItem { - private int sn, modifier; - private byte info; //? + private final int sn; + private final int modifier; + private final byte info; //? public SpecialCashItem(int sn, int modifier, byte info) { this.sn = sn; @@ -240,13 +243,17 @@ public class CashShop { } } - private int accountId, characterId, nxCredit, maplePoint, nxPrepaid; + private final int accountId; + private final int characterId; + private int nxCredit; + private int maplePoint; + private int nxPrepaid; private boolean opened; private ItemFactory factory; - private List inventory = new ArrayList<>(); - private List wishList = new ArrayList<>(); + private final List inventory = new ArrayList<>(); + private final List wishList = new ArrayList<>(); private int notes = 0; - private Lock lock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.CASHSHOP); + private final Lock lock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.CASHSHOP); public CashShop(int accountId, int characterId, int jobType) throws SQLException { this.accountId = accountId; diff --git a/src/main/java/server/DueyPackage.java b/src/main/java/server/DueyPackage.java index 1b95a0250c..51adff33b6 100644 --- a/src/main/java/server/DueyPackage.java +++ b/src/main/java/server/DueyPackage.java @@ -22,8 +22,9 @@ package server; import client.inventory.Item; -import java.util.Calendar; + import java.sql.Timestamp; +import java.util.Calendar; public class DueyPackage { private String sender = null; @@ -61,11 +62,11 @@ public class DueyPackage { public void setMesos(int set) { mesos = set; } - + public String getMessage() { return message; } - + public void setMessage(String m) { message = m; } @@ -86,7 +87,7 @@ public class DueyPackage { return 0; } } - + public boolean isDeliveringTime() { Calendar ts = timestamp; if (ts != null) { @@ -99,13 +100,13 @@ public class DueyPackage { public void setSentTime(Timestamp ts, boolean quick) { Calendar cal = Calendar.getInstance(); cal.setTimeInMillis(ts.getTime()); - + if (quick) { if (System.currentTimeMillis() - ts.getTime() < 24 * 60 * 60 * 1000) { // thanks inhyuk for noticing quick delivery packages unavailable to retrieve from the get-go cal.add(Calendar.DATE, -1); } } - + this.timestamp = cal; } } diff --git a/src/main/java/server/MTSItemInfo.java b/src/main/java/server/MTSItemInfo.java index c1f45de483..3779d69925 100644 --- a/src/main/java/server/MTSItemInfo.java +++ b/src/main/java/server/MTSItemInfo.java @@ -22,18 +22,20 @@ package server; import client.inventory.Item; + import java.util.Calendar; /** - * * @author Traitor */ public class MTSItemInfo { - private int price; - private Item item; - private String seller; - private int id; - private int year, month, day = 1; + private final int price; + private final Item item; + private final String seller; + private final int id; + private final int year; + private final int month; + private int day = 1; public MTSItemInfo(Item item, int price, int id, int cid, String seller, String date) { this.item = item; diff --git a/src/main/java/server/MakerItemFactory.java b/src/main/java/server/MakerItemFactory.java index 1e9c699947..b37430f2b3 100644 --- a/src/main/java/server/MakerItemFactory.java +++ b/src/main/java/server/MakerItemFactory.java @@ -31,33 +31,32 @@ import java.util.Map; import java.util.Map.Entry; /** - * * @author Jay Estrella, Ronan */ public class MakerItemFactory { - private static ItemInformationProvider ii = ItemInformationProvider.getInstance(); - + private static final ItemInformationProvider ii = ItemInformationProvider.getInstance(); + public static MakerItemCreateEntry getItemCreateEntry(int toCreate, int stimulantid, Map reagentids) { MakerItemCreateEntry makerEntry = ii.getMakerItemEntry(toCreate); - if(makerEntry.isInvalid()) { + if (makerEntry.isInvalid()) { return makerEntry; } - - // THEY DECIDED FOR SOME BIZARRE PATTERN ON THE FEE THING, ALMOST RANDOMIZED. - if(stimulantid != -1) { + + // THEY DECIDED FOR SOME BIZARRE PATTERN ON THE FEE THING, ALMOST RANDOMIZED. + if (stimulantid != -1) { makerEntry.addCost(getMakerStimulantFee(toCreate)); } - - if(!reagentids.isEmpty()) { - for(Entry r : reagentids.entrySet()) { + + if (!reagentids.isEmpty()) { + for (Entry r : reagentids.entrySet()) { makerEntry.addCost((getMakerReagentFee(toCreate, ((r.getKey() % 10) + 1))) * r.getValue()); } } - + makerEntry.trimCost(); // "commit" the real cost of the recipe. return makerEntry; } - + public static MakerItemCreateEntry generateLeftoverCrystalEntry(int fromLeftoverid, int crystalId) { MakerItemCreateEntry ret = new MakerItemCreateEntry(0, 0, 1); ret.addReqItem(fromLeftoverid, 100); @@ -73,13 +72,13 @@ public class MakerItemFactory { } return ret; } - + private static double getMakerStimulantFee(int itemid) { - if(YamlConfig.config.server.USE_MAKER_FEE_HEURISTICS) { + if (YamlConfig.config.server.USE_MAKER_FEE_HEURISTICS) { EquipType et = EquipType.getEquipTypeById(itemid); int eqpLevel = ii.getEquipLevelReq(itemid); - switch(et) { + switch (et) { case CAP: return 1145.736246 * Math.exp(0.03336832546 * eqpLevel); @@ -108,13 +107,13 @@ public class MakerItemFactory { return 14000; } } - + private static double getMakerReagentFee(int itemid, int reagentLevel) { - if(YamlConfig.config.server.USE_MAKER_FEE_HEURISTICS) { + if (YamlConfig.config.server.USE_MAKER_FEE_HEURISTICS) { EquipType et = EquipType.getEquipTypeById(itemid); int eqpLevel = ii.getEquipLevelReq(itemid); - switch(et) { + switch (et) { case CAP: return 5592.01613 * Math.exp(0.02914576018 * eqpLevel) * reagentLevel; @@ -143,20 +142,21 @@ public class MakerItemFactory { return 8000 * reagentLevel; } } - + public static class MakerItemCreateEntry { - private int reqLevel, reqMakerLevel; + private final int reqLevel; + private final int reqMakerLevel; private double cost; private int reqCost; - private List> reqItems = new ArrayList<>(); // itemId / amount - private List> gainItems = new ArrayList<>(); // itemId / amount + private final List> reqItems = new ArrayList<>(); // itemId / amount + private final List> gainItems = new ArrayList<>(); // itemId / amount public MakerItemCreateEntry(int cost, int reqLevel, int reqMakerLevel) { this.cost = cost; this.reqLevel = reqLevel; this.reqMakerLevel = reqMakerLevel; } - + public MakerItemCreateEntry(MakerItemCreateEntry mi) { this.cost = mi.cost; this.reqLevel = mi.reqLevel; @@ -170,7 +170,7 @@ public class MakerItemFactory { public List> getReqItems() { return reqItems; } - + public List> getGainItems() { return gainItems; } @@ -186,7 +186,7 @@ public class MakerItemFactory { public int getCost() { return reqCost; } - + public void addCost(double amount) { cost += amount; } @@ -194,16 +194,16 @@ public class MakerItemFactory { protected void addReqItem(int itemId, int amount) { reqItems.add(new Pair<>(itemId, amount)); } - + protected void addGainItem(int itemId, int amount) { gainItems.add(new Pair<>(itemId, amount)); } - + public void trimCost() { reqCost = (int) (cost / 1000); reqCost *= 1000; } - + public boolean isInvalid() { // thanks Rohenn, Wh1SK3Y for noticing some items not getting checked properly return reqLevel < 0; } diff --git a/src/main/java/server/StatEffect.java b/src/main/java/server/StatEffect.java index c71dd32d6c..b2c47a9337 100644 --- a/src/main/java/server/StatEffect.java +++ b/src/main/java/server/StatEffect.java @@ -1648,7 +1648,9 @@ public class StatEffect { private boolean isCureAllAbnormalStatus() { if (skill) { return isHerosWill(sourceid); - } else return sourceid == 2022544; + } else { + return sourceid == 2022544; + } } public static boolean isHerosWill(int skillid) { diff --git a/src/main/java/server/ThreadManager.java b/src/main/java/server/ThreadManager.java index b5c8cc0d10..ea3ad78034 100644 --- a/src/main/java/server/ThreadManager.java +++ b/src/main/java/server/ThreadManager.java @@ -22,20 +22,19 @@ package server; import java.util.concurrent.*; /** - * * @author Ronan */ public class ThreadManager { - private static ThreadManager instance = new ThreadManager(); - + private static final ThreadManager instance = new ThreadManager(); + public static ThreadManager getInstance() { return instance; } - + private ThreadPoolExecutor tpe; - + private ThreadManager() {} - + private class RejectedExecutionHandlerImpl implements RejectedExecutionHandler { @Override @@ -45,23 +44,24 @@ public class ThreadManager { } } - + public void newTask(Runnable r) { tpe.execute(r); } - + public void start() { RejectedExecutionHandler reh = new RejectedExecutionHandlerImpl(); ThreadFactory tf = Executors.defaultThreadFactory(); - + tpe = new ThreadPoolExecutor(20, 1000, 77, TimeUnit.SECONDS, new ArrayBlockingQueue<>(50), tf, reh); } - + public void stop() { tpe.shutdown(); try { tpe.awaitTermination(5, TimeUnit.MINUTES); - } catch (InterruptedException ie) {} + } catch (InterruptedException ie) { + } } - + } diff --git a/src/main/java/server/TimerManager.java b/src/main/java/server/TimerManager.java index 45f689a6b7..52c7dc59ba 100644 --- a/src/main/java/server/TimerManager.java +++ b/src/main/java/server/TimerManager.java @@ -34,12 +34,12 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; public class TimerManager implements TimerManagerMBean { - private static TimerManager instance = new TimerManager(); - + private static final TimerManager instance = new TimerManager(); + public static TimerManager getInstance() { return instance; } - + private ScheduledThreadPoolExecutor ses; private TimerManager() { @@ -68,24 +68,24 @@ public class TimerManager implements TimerManagerMBean { //this is a no-no, it actually does nothing..then why the fuck are you doing it? stpe.setContinueExistingPeriodicTasksAfterShutdownPolicy(false); stpe.setRemoveOnCancelPolicy(true); - + stpe.setKeepAliveTime(5, TimeUnit.MINUTES); stpe.allowCoreThreadTimeOut(true); - + ses = stpe; } public void stop() { ses.shutdownNow(); } - + public Runnable purge() {//Yay? return () -> { Server.getInstance().forceUpdateCurrentTime(); ses.purge(); }; } - + public ScheduledFuture register(Runnable r, long repeatTime, long delay) { return ses.scheduleAtFixedRate(new LoggingSaveRunnable(r), delay, repeatTime, TimeUnit.MILLISECONDS); } @@ -97,7 +97,7 @@ public class TimerManager implements TimerManagerMBean { public ScheduledFuture schedule(Runnable r, long delay) { return ses.schedule(new LoggingSaveRunnable(r), delay, TimeUnit.MILLISECONDS); } - + public ScheduledFuture scheduleAtTimestamp(Runnable r, long timestamp) { return schedule(r, timestamp - System.currentTimeMillis()); } @@ -118,7 +118,7 @@ public class TimerManager implements TimerManagerMBean { } @Override - public long getTaskCount() { + public long getTaskCount() { return ses.getTaskCount(); } @@ -132,7 +132,7 @@ public class TimerManager implements TimerManagerMBean { return ses.isTerminated(); } - + private static class LoggingSaveRunnable implements Runnable { Runnable r; diff --git a/src/main/java/server/events/Events.java b/src/main/java/server/events/Events.java index be3b8e8a41..d43d3ea3e7 100644 --- a/src/main/java/server/events/Events.java +++ b/src/main/java/server/events/Events.java @@ -27,8 +27,8 @@ package server.events; */ public abstract class Events { public Events() { - + } - + public abstract int getInfo(); } \ No newline at end of file diff --git a/src/main/java/server/events/RescueGaga.java b/src/main/java/server/events/RescueGaga.java index 851d49a7cf..370c6cccc9 100644 --- a/src/main/java/server/events/RescueGaga.java +++ b/src/main/java/server/events/RescueGaga.java @@ -9,13 +9,12 @@ import client.Character; import client.SkillFactory; /** - * * @author kevintjuh93 */ public class RescueGaga extends Events { - + private int completed; - + public RescueGaga(int completed) { super(); this.completed = completed; @@ -33,7 +32,7 @@ public class RescueGaga extends Events { public int getInfo() { return getCompleted(); } - + public void giveSkill(Character chr) { int skillid = 0; switch (chr.getJobType()) { @@ -44,7 +43,7 @@ public class RescueGaga extends Events { case 2: skillid = 10001014; } - + long expiration = (System.currentTimeMillis() + 3600 * 24 * 20 * 1000);//20 days if (completed < 20) { chr.changeSkillLevel(SkillFactory.getSkill(skillid), (byte) 1, 1, expiration); @@ -54,5 +53,5 @@ public class RescueGaga extends Events { chr.changeSkillLevel(SkillFactory.getSkill(skillid), (byte) 2, 2, chr.getSkillExpiration(skillid)); } } - + } diff --git a/src/main/java/server/gachapon/ElNath.java b/src/main/java/server/gachapon/ElNath.java index 20c752dfe3..738e27a888 100644 --- a/src/main/java/server/gachapon/ElNath.java +++ b/src/main/java/server/gachapon/ElNath.java @@ -1,65 +1,64 @@ package server.gachapon; /** -* -* @author Ronan - parsed MapleSEA loots -* -* MapleSEA-like loots thanks to AyumiLove - src: https://ayumilovemaple.wordpress.com/maplestory-gachapon-guide/ -*/ + * @author Ronan - parsed MapleSEA loots + *

+ * MapleSEA-like loots thanks to AyumiLove - src: https://ayumilovemaple.wordpress.com/maplestory-gachapon-guide/ + */ public class ElNath extends GachaponItems { - @Override - public int[] getCommonItems() { - return new int [] { - - /* Scroll */ - 2041012, 2048003, 2043800, 2043301, 2040301, 2043101, 2043201, 2043001, 2044301, 2043801, 2044201, 2043701, 2044502, - 2041011, 2041014, 2044602, 2043302, 2043202, 2043002, 2048005, 2044402, 2044302, 2043802, 2044102, 2044202, 2043702, - 2044812, + @Override + public int[] getCommonItems() { + return new int[]{ - /* Useable drop */ - 2000004, 2000005, + /* Scroll */ + 2041012, 2048003, 2043800, 2043301, 2040301, 2043101, 2043201, 2043001, 2044301, 2043801, 2044201, 2043701, 2044502, + 2041011, 2041014, 2044602, 2043302, 2043202, 2043002, 2048005, 2044402, 2044302, 2043802, 2044102, 2044202, 2043702, + 2044812, - /* Common equipment */ - 1402010, 1032003, 1442013, 1432009, 1302022, 1302029, 1322021, 1302026, 1442017, 1322023, 1102011, 1032008, 1322026, - 1442016, 1312000, 1032007, 1322025, 1322027, 1032020, 1442015, 1432017, 1302027, 1302049, 1372006, 1032022, 1032021, - 1372004, 1332020, 1322007, 1032006, 1302028, 1322003, 1302007, 1092030, 1302021, 1322024, 1322012, 1032005, 1322022, - 1032013, 1302025, 1302013, 1032017, 1032002, 1032001, 1302017, 1432018, 1442012, 1302000, 1032000, 1102013, 1442022, - 1372005, 1442021, 1032009, 1302016, + /* Useable drop */ + 2000004, 2000005, - /* Warrior equipment */ - 1442003, 1312007, 1402008, 1312008, 1412008, 1442009, 1302004, 1312006, 1442016, 1402012, 1302003, 1312005, 1432002, - 1432001, 1302008, 1040030, 1402015, 1322015, 1432006, 1322002, 1302010, 1322017, 1402003, 1402006, 1322000, 1422001, - 1442001, 1422004, 1412004, 1322009, 1322011, 1442000, 1412005, 1402002, 1432004, 1442010, 1422008, 1442007, 1422009, - 1322019, 1412003, 1412007, 1302009, 1412000, 1322014, 1402001, 1402007, 1432005, + /* Common equipment */ + 1402010, 1032003, 1442013, 1432009, 1302022, 1302029, 1322021, 1302026, 1442017, 1322023, 1102011, 1032008, 1322026, + 1442016, 1312000, 1032007, 1322025, 1322027, 1032020, 1442015, 1432017, 1302027, 1302049, 1372006, 1032022, 1032021, + 1372004, 1332020, 1322007, 1032006, 1302028, 1322003, 1302007, 1092030, 1302021, 1322024, 1322012, 1032005, 1322022, + 1032013, 1302025, 1302013, 1032017, 1032002, 1032001, 1302017, 1432018, 1442012, 1302000, 1032000, 1102013, 1442022, + 1372005, 1442021, 1032009, 1302016, - /* Magician equipment */ - 1382001, 1372007, 1382010, 1382007, 1372000, 1372003, 1382011, 1382006, 1382000, + /* Warrior equipment */ + 1442003, 1312007, 1402008, 1312008, 1412008, 1442009, 1302004, 1312006, 1442016, 1402012, 1302003, 1312005, 1432002, + 1432001, 1302008, 1040030, 1402015, 1322015, 1432006, 1322002, 1302010, 1322017, 1402003, 1402006, 1322000, 1422001, + 1442001, 1422004, 1412004, 1322009, 1322011, 1442000, 1412005, 1402002, 1432004, 1442010, 1422008, 1442007, 1422009, + 1322019, 1412003, 1412007, 1302009, 1412000, 1322014, 1402001, 1402007, 1432005, - /* Bowman equipment */ - 1452004, 1452000, 1452010, 1452015, 1452014, 1462012, 1462010, 1452017, 1462000, 1452008, 1452006, 1462006, 1452007, - 1452002, 1402001, + /* Magician equipment */ + 1382001, 1372007, 1382010, 1382007, 1372000, 1372003, 1382011, 1382006, 1382000, - /* Thief equipment */ - 1472006, 1472010, 1332022, 1332011, 1472015, 1472016, 1472023, 1472028, 1472022, 1472011, 1472026, 1332024, 1332009, - 1472017, 1472013, 1472029, 1472021, 1332015, 1332031, 1332023, 1332004, 1472000, 1332019, 1472027, 1332018, 1472007, - 1332012, 1332016, 1472024, 1332017, 1332003, 1472012, 1472014, 1472005, 1472018, 1472001, + /* Bowman equipment */ + 1452004, 1452000, 1452010, 1452015, 1452014, 1462012, 1462010, 1452017, 1462000, 1452008, 1452006, 1462006, 1452007, + 1452002, 1402001, - /* Pirate equipment */ - 1072294, 1492009 + /* Thief equipment */ + 1472006, 1472010, 1332022, 1332011, 1472015, 1472016, 1472023, 1472028, 1472022, 1472011, 1472026, 1332024, 1332009, + 1472017, 1472013, 1472029, 1472021, 1332015, 1332031, 1332023, 1332004, 1472000, 1332019, 1472027, 1332018, 1472007, + 1332012, 1332016, 1472024, 1332017, 1332003, 1472012, 1472014, 1472005, 1472018, 1472001, - }; - } + /* Pirate equipment */ + 1072294, 1492009 - @Override - public int[] getUncommonItems() { - return new int [] {2022439, 2040804, 2040805, 2340000}; - } + }; + } - @Override - public int[] getRareItems() { - return new int [] {2043803, 1102085}; - } + @Override + public int[] getUncommonItems() { + return new int[]{2022439, 2040804, 2040805, 2340000}; + } + + @Override + public int[] getRareItems() { + return new int[]{2043803, 1102085}; + } } diff --git a/src/main/java/server/gachapon/Ellinia.java b/src/main/java/server/gachapon/Ellinia.java index 2fd02b9819..40b1d0eca4 100644 --- a/src/main/java/server/gachapon/Ellinia.java +++ b/src/main/java/server/gachapon/Ellinia.java @@ -1,19 +1,18 @@ package server.gachapon; /** -* -* @author Alan (SharpAceX) - gachapon source classes stub & pirate equipment -* @author Ronan - parsed MapleSEA loots -* -* MapleSEA-like loots thanks to AyumiLove - src: https://ayumilovemaple.wordpress.com/maplestory-gachapon-guide/ -*/ + * @author Alan (SharpAceX) - gachapon source classes stub & pirate equipment + * @author Ronan - parsed MapleSEA loots + *

+ * MapleSEA-like loots thanks to AyumiLove - src: https://ayumilovemaple.wordpress.com/maplestory-gachapon-guide/ + */ public class Ellinia extends GachaponItems { - @Override - public int[] getCommonItems() { - return new int[] { - + @Override + public int[] getCommonItems() { + return new int[]{ + /* Scroll */ 2043302, 2040002, 2043102, 2043002, 2044402, 2044302, 2043802, 2044002, 2041017, 2044902, @@ -46,21 +45,21 @@ public class Ellinia extends GachaponItems { 1472010, 1472006, 1332011, 1472031, 1041048, 1472019, 1041095, 1040095, 1002128, 1061077, 1060025, 1041040, 1061033, 1472028, 1472022, 1472011, 1040096, 1062002, 1002129, 1472026, 1332009, 1060043, 1002249, 1472021, 1040084, 1332015, 1002173, 1002148, 1332004, 1332018, 1472009, 1061069, 1002176, 1041044, 1061037, 1060032, 1472020, 1040060, 1472018, 1332013, 1332002, 1402001, - + /* Pirate equipment */ - 1002625, 1002616, 1482005, 1052098, 1482003, - 1482001, 1492004, 1002622, 1492005, 1082195 - }; - } + 1002625, 1002616, 1482005, 1052098, 1482003, + 1482001, 1492004, 1002622, 1492005, 1082195 + }; + } - @Override - public int[] getUncommonItems() { - return new int [] {1082149, 1002391, 1002419}; - } + @Override + public int[] getUncommonItems() { + return new int[]{1082149, 1002391, 1002419}; + } - @Override - public int[] getRareItems() { - return new int [] {}; - } + @Override + public int[] getRareItems() { + return new int[]{}; + } } diff --git a/src/main/java/server/gachapon/GachaponItems.java b/src/main/java/server/gachapon/GachaponItems.java index febe23839c..64e01e2744 100644 --- a/src/main/java/server/gachapon/GachaponItems.java +++ b/src/main/java/server/gachapon/GachaponItems.java @@ -23,35 +23,34 @@ along with this program. If not, see . package server.gachapon; /** -* -* @author Alan (SharpAceX) -*/ + * @author Alan (SharpAceX) + */ public abstract class GachaponItems { - public abstract int [] getCommonItems(); - public abstract int [] getUncommonItems(); - public abstract int [] getRareItems(); - - private final int [] commonItems; - private final int [] uncommonItems; - private final int [] rareItems; - - public GachaponItems() { - this.commonItems = getCommonItems(); - this.uncommonItems = getUncommonItems(); - this.rareItems = getRareItems(); - } + public abstract int[] getCommonItems(); + public abstract int[] getUncommonItems(); + public abstract int[] getRareItems(); - public final int[] getItems(int tier) { - if (tier == 0) { - return commonItems; - } else if (tier == 1) { - return uncommonItems; - } else if (tier == 2) { - return rareItems; - } - return null; - } + private final int[] commonItems; + private final int[] uncommonItems; + private final int[] rareItems; + + public GachaponItems() { + this.commonItems = getCommonItems(); + this.uncommonItems = getUncommonItems(); + this.rareItems = getRareItems(); + } + + public final int[] getItems(int tier) { + if (tier == 0) { + return commonItems; + } else if (tier == 1) { + return uncommonItems; + } else if (tier == 2) { + return rareItems; + } + return null; + } } diff --git a/src/main/java/server/gachapon/Global.java b/src/main/java/server/gachapon/Global.java index 42567db2ec..1a89174bfd 100644 --- a/src/main/java/server/gachapon/Global.java +++ b/src/main/java/server/gachapon/Global.java @@ -1,47 +1,46 @@ package server.gachapon; /** -* -* @author Alan (SharpAceX) -* @author Ronan - added ores and reworked global loots -*/ + * @author Alan (SharpAceX) + * @author Ronan - added ores and reworked global loots + */ public class Global extends GachaponItems { - @Override - public int[] getCommonItems() { - return new int[] { - /* Potions */ - 2000004, 2000005, 2001002, 2001001, 2020012, 2020013, 2020014, 2020015, - - /* Ores */ - 4004000, 4004001, 4004002, 4004003, 4004004, - 4006000, 4006001, - 4010000, 4010001, 4010002, 4010003, 4010004, 4010005, 4010006, 4010007, - 4020000, 4020001, 4020002, 4020003, 4020004, 4020005, 4020006, 4020007, 4020008 - }; - } + @Override + public int[] getCommonItems() { + return new int[]{ + /* Potions */ + 2000004, 2000005, 2001002, 2001001, 2020012, 2020013, 2020014, 2020015, - @Override - public int[] getUncommonItems() { - return new int[] { - /* Potions */ - 2022179, 2022273, 2022282, 2022283, 2022285, 2022245, 2022182, - - /* Scrolls */ - 2049003 - }; - } + /* Ores */ + 4004000, 4004001, 4004002, 4004003, 4004004, + 4006000, 4006001, + 4010000, 4010001, 4010002, 4010003, 4010004, 4010005, 4010006, 4010007, + 4020000, 4020001, 4020002, 4020003, 4020004, 4020005, 4020006, 4020007, 4020008 + }; + } - @Override - public int[] getRareItems() { - return new int[] { - /* Scrolls */ - 2049100, 2340000, - - /* Chairs */ - 3010063, 3010064 - }; - } + @Override + public int[] getUncommonItems() { + return new int[]{ + /* Potions */ + 2022179, 2022273, 2022282, 2022283, 2022285, 2022245, 2022182, + + /* Scrolls */ + 2049003 + }; + } + + @Override + public int[] getRareItems() { + return new int[]{ + /* Scrolls */ + 2049100, 2340000, + + /* Chairs */ + 3010063, 3010064 + }; + } } diff --git a/src/main/java/server/gachapon/Henesys.java b/src/main/java/server/gachapon/Henesys.java index 3030e8e65e..47d5ff5866 100644 --- a/src/main/java/server/gachapon/Henesys.java +++ b/src/main/java/server/gachapon/Henesys.java @@ -1,61 +1,60 @@ package server.gachapon; /** -* -* @author Alan (SharpAceX) - gachapon source classes stub -* @author Ronan - parsed MapleSEA loots -* -* MapleSEA-like loots thanks to AyumiLove - src: https://ayumilovemaple.wordpress.com/maplestory-gachapon-guide/ -*/ + * @author Alan (SharpAceX) - gachapon source classes stub + * @author Ronan - parsed MapleSEA loots + *

+ * MapleSEA-like loots thanks to AyumiLove - src: https://ayumilovemaple.wordpress.com/maplestory-gachapon-guide/ + */ public class Henesys extends GachaponItems { - @Override - public int[] getCommonItems() { - return new int [] { - - /* Scroll */ - 2040001, 2041002, 2040702, 2043802, 2040402, 2043702, 2044813, + @Override + public int[] getCommonItems() { + return new int[]{ - /* Useable Drops */ - 2000004, 2000005, 2020012, 2030007, + /* Scroll */ + 2040001, 2041002, 2040702, 2043802, 2040402, 2043702, 2044813, - /* Common equipment */ - 1432009, 1302022, 1322021, 1302026, 1442017, 1082147, 1102043, 1322026, 1442016, 1402012, 1322025, 1322027, 1302027, - 1312012, 1062000, 1332020, 1302028, 1372002, 1002033, 1092022, 1302021, 1322009, 1322024, 1082148, 1002012, 1322012, - 1322022, 1002020, 1302013, 1082146, 1442014, 1002096, 1302017, 1442012, + /* Useable Drops */ + 2000004, 2000005, 2020012, 2030007, - /* Warrior equipment */ - 1092011, 1092014, 1302003, 1432001, 1312011, 1002088, 1041020, 1322015, 1442004, 1422008, 1302056, 1432000, 1442005, + /* Common equipment */ + 1432009, 1302022, 1322021, 1302026, 1442017, 1082147, 1102043, 1322026, 1442016, 1402012, 1322025, 1322027, 1302027, + 1312012, 1062000, 1332020, 1302028, 1372002, 1002033, 1092022, 1302021, 1322009, 1322024, 1082148, 1002012, 1322012, + 1322022, 1002020, 1302013, 1082146, 1442014, 1002096, 1302017, 1442012, - /* Magician equipment */ - 1382001, 1041053, 1041029, 1050053, 1051032, 1050073, 1061036, 1002253, 1002034, 1051025, 1050067, 1051052, 1002072, - 1002144, 1051054, 1050069, 1372007, 1050056, 1050074, 1002254, 1002274, 1002218, 1051055, 1382010, 1002246, 1050039, - 1382007, 1372000, 1002013, 1050072, 1002036, 1002244, 1372008, 1382008, 1382011, 1092021, 1051034, 1050047, 1040019, - 1041031, 1051033, 1002153, 1002252, 1051024, 1051053, 1050068, 1382003, 1382006, 1050055, 1051031, 1050025, 1002155, - 1002245, 1372001, + /* Warrior equipment */ + 1092011, 1092014, 1302003, 1432001, 1312011, 1002088, 1041020, 1322015, 1442004, 1422008, 1302056, 1432000, 1442005, - /* Bowman equipment */ - 1452004, 1452023, 1060057, 1432001, 1040071, 1002137, 1462009, 1452017, 1040025, 1041027, 1452005, 1452007, 1061057, + /* Magician equipment */ + 1382001, 1041053, 1041029, 1050053, 1051032, 1050073, 1061036, 1002253, 1002034, 1051025, 1050067, 1051052, 1002072, + 1002144, 1051054, 1050069, 1372007, 1050056, 1050074, 1002254, 1002274, 1002218, 1051055, 1382010, 1002246, 1050039, + 1382007, 1372000, 1002013, 1050072, 1002036, 1002244, 1372008, 1382008, 1382011, 1092021, 1051034, 1050047, 1040019, + 1041031, 1051033, 1002153, 1002252, 1051024, 1051053, 1050068, 1382003, 1382006, 1050055, 1051031, 1050025, 1002155, + 1002245, 1372001, - /* Thief equipment */ - 1472006, 1472019, 1060084, 1472028, 1472004, 1002179, 1082074, 1472029, 1040100, 1332015, 1432001, 1040097, 1060071, - 1472007, 1472002, 1051009, 1041044, 1041003, 1332016, 1472020, 1332003, - - /* Pirate equipment */ - 1002622, 1082204, 1082213, 1082198, 1002631, 1052122, 1482012, 1052131, 1482007, 1482004, 1072318, 1492007 + /* Bowman equipment */ + 1452004, 1452023, 1060057, 1432001, 1040071, 1002137, 1462009, 1452017, 1040025, 1041027, 1452005, 1452007, 1061057, - }; - } + /* Thief equipment */ + 1472006, 1472019, 1060084, 1472028, 1472004, 1002179, 1082074, 1472029, 1040100, 1332015, 1432001, 1040097, 1060071, + 1472007, 1472002, 1051009, 1041044, 1041003, 1332016, 1472020, 1332003, - @Override - public int[] getUncommonItems() { - return new int[] {2040805, 1102041, 1102042, 1442018}; - } + /* Pirate equipment */ + 1002622, 1082204, 1082213, 1082198, 1002631, 1052122, 1482012, 1052131, 1482007, 1482004, 1072318, 1492007 - @Override - public int[] getRareItems() { - return new int[] {}; - } + }; + } + + @Override + public int[] getUncommonItems() { + return new int[]{2040805, 1102041, 1102042, 1442018}; + } + + @Override + public int[] getRareItems() { + return new int[]{}; + } } diff --git a/src/main/java/server/gachapon/KerningCity.java b/src/main/java/server/gachapon/KerningCity.java index 2bc5ff57ab..91b4316486 100644 --- a/src/main/java/server/gachapon/KerningCity.java +++ b/src/main/java/server/gachapon/KerningCity.java @@ -1,59 +1,58 @@ package server.gachapon; /** -* -* @author Alan (SharpAceX) - gachapon source classes stub & pirate equipment -* @author Ronan - parsed MapleSEA loots -* -* MapleSEA-like loots thanks to AyumiLove - src: https://ayumilovemaple.wordpress.com/maplestory-gachapon-guide/ -*/ + * @author Alan (SharpAceX) - gachapon source classes stub & pirate equipment + * @author Ronan - parsed MapleSEA loots + *

+ * MapleSEA-like loots thanks to AyumiLove - src: https://ayumilovemaple.wordpress.com/maplestory-gachapon-guide/ + */ public class KerningCity extends GachaponItems { - @Override - public int[] getCommonItems() { - return new int [] { - - /* Scroll */ - 2041016, 2043302, 2040902, 2044804, 2044906, + @Override + public int[] getCommonItems() { + return new int[]{ - /* Useable drop */ - 2000004, 2000005, 2022025, 2022027, + /* Scroll */ + 2041016, 2043302, 2040902, 2044804, 2044906, - /* Common equipment */ - 1442013, 1432009, 1322021, 1050018, 1002392, 1002394, 1442004, 1372002, 1002418, 1002033, 1092008, - 1082148, 1062001, 1302017, 1032023, 1102013, 1102040, 1002041, 1002097, + /* Useable drop */ + 2000004, 2000005, 2022025, 2022027, - /* Warrior equipment */ - 1332026, 1051010, 1432001, 1422005, 1332019, 1302010, 1002056, 1060011, 1322011, 1432004, 1002028, - 1051000, 1442007, 1302002, + /* Common equipment */ + 1442013, 1432009, 1322021, 1050018, 1002392, 1002394, 1442004, 1372002, 1002418, 1002033, 1092008, + 1082148, 1062001, 1302017, 1032023, 1102013, 1102040, 1002041, 1002097, - /* Magician equipment */ - 1002037, 1002034, 1082020, 1050039, 1372000, 1002215, 1051034, 1040019, 1061034, 1382003, 1382006, - 1050025, + /* Warrior equipment */ + 1332026, 1051010, 1432001, 1422005, 1332019, 1302010, 1002056, 1060011, 1322011, 1432004, 1002028, + 1051000, 1442007, 1302002, - /* Bowman equipment */ - 1002118, 1061081, 1452011, 1462012, 1452006, 1452007, + /* Magician equipment */ + 1002037, 1002034, 1082020, 1050039, 1372000, 1002215, 1051034, 1040019, 1061034, 1382003, 1382006, + 1050025, - /* Thief equipment */ - 1472010, 1472029, 1041048, 1041095, 1060031, 1061033, 1041049, 1472011, 1040096, 1472033, 1332026, - 1051006, 1082074, 1472025, 1061106, 1040084, 1332015, 1472000, 1332019, 1002183, 1002209, 1092020, - 1332029, 1092019, 1061099, 1060106, 1040032, 1040059, 1332003, 1040060, 1060046, 1472005, 1332027, - - /* Pirate equipment */ - 1082192, 1072288, 1492003, 1052113, 1052104, - 1492002, 1052095, 1492001, 1002613, 1492004 - }; - } + /* Bowman equipment */ + 1002118, 1061081, 1452011, 1462012, 1452006, 1452007, - @Override - public int[] getUncommonItems() { - return new int[] {2040805, 1082149, 1102041}; - } + /* Thief equipment */ + 1472010, 1472029, 1041048, 1041095, 1060031, 1061033, 1041049, 1472011, 1040096, 1472033, 1332026, + 1051006, 1082074, 1472025, 1061106, 1040084, 1332015, 1472000, 1332019, 1002183, 1002209, 1092020, + 1332029, 1092019, 1061099, 1060106, 1040032, 1040059, 1332003, 1040060, 1060046, 1472005, 1332027, - @Override - public int[] getRareItems() { - return new int[] {}; - } + /* Pirate equipment */ + 1082192, 1072288, 1492003, 1052113, 1052104, + 1492002, 1052095, 1492001, 1002613, 1492004 + }; + } + + @Override + public int[] getUncommonItems() { + return new int[]{2040805, 1082149, 1102041}; + } + + @Override + public int[] getRareItems() { + return new int[]{}; + } } diff --git a/src/main/java/server/gachapon/Ludibrium.java b/src/main/java/server/gachapon/Ludibrium.java index 02bb659bec..e75175e6d4 100644 --- a/src/main/java/server/gachapon/Ludibrium.java +++ b/src/main/java/server/gachapon/Ludibrium.java @@ -1,56 +1,55 @@ package server.gachapon; /** -* -* @author Ronan - parsed MapleSEA loots -* -* MapleSEA-like loots thanks to AyumiLove - src: https://ayumilovemaple.wordpress.com/maplestory-gachapon-guide/ -*/ + * @author Ronan - parsed MapleSEA loots + *

+ * MapleSEA-like loots thanks to AyumiLove - src: https://ayumilovemaple.wordpress.com/maplestory-gachapon-guide/ + */ public class Ludibrium extends GachaponItems { - @Override - public int[] getCommonItems() { - return new int [] { - - /* Scroll */ - 2048000, 2040601, 2041019, 2041007, 2041016, 2041022, 2041001, 2041010, 2041013, 2041004, 2044701, 2043301, 2040301, 2048004, 2048001, 2040901, 2040701, 2040704, 2040707, 2040602, 2041020, 2041008, 2041017, 2041023, 2041002, 2041011, 2041014, 2041005, 2044702, 2043302, 2040302, 2040002, 2044402, 2048005, 2048002, 2040702, 2040705, 2040708, 2044302, 2043802, 2040402, 2043702, 2044811, + @Override + public int[] getCommonItems() { + return new int[]{ - /* Useable drop */ - 2000004, 2000005, 4006000, 4006001, + /* Scroll */ + 2048000, 2040601, 2041019, 2041007, 2041016, 2041022, 2041001, 2041010, 2041013, 2041004, 2044701, 2043301, 2040301, 2048004, 2048001, 2040901, 2040701, 2040704, 2040707, 2040602, 2041020, 2041008, 2041017, 2041023, 2041002, 2041011, 2041014, 2041005, 2044702, 2043302, 2040302, 2040002, 2044402, 2048005, 2048002, 2040702, 2040705, 2040708, 2044302, 2043802, 2040402, 2043702, 2044811, - /* Common equipment */ - 1032003, 1432009, 1302022, 1302029, 1102014, 1102018, 1312014, 1302026, 1102015, 1032011, 1312013, 1032008, 1032019, 1032007, 1332030, 1032020, 1032004, 1302027, 1032022, 1312012, 1032021, 1032006, 1302028, 1322003, 1032016, 1032015, 1302024, 1092008, 1032018, 1302021, 1032014, 1332021, 1322012, 1032005, 1032013, 1102012, 1302025, 1302013, 1032002, 1032001, 1032012, 1302017, 1032010, 1402014, 1102017, 1102013, 1442021, 1032009, + /* Useable drop */ + 2000004, 2000005, 4006000, 4006001, - /* Beginner equipment */ - 1332021, 1422011, + /* Common equipment */ + 1032003, 1432009, 1302022, 1302029, 1102014, 1102018, 1312014, 1302026, 1102015, 1032011, 1312013, 1032008, 1032019, 1032007, 1332030, 1032020, 1032004, 1302027, 1032022, 1312012, 1032021, 1032006, 1302028, 1322003, 1032016, 1032015, 1302024, 1092008, 1032018, 1302021, 1032014, 1332021, 1322012, 1032005, 1032013, 1102012, 1302025, 1302013, 1032002, 1032001, 1032012, 1302017, 1032010, 1402014, 1102017, 1102013, 1442021, 1032009, - /* Warrior equipment */ - 1402017, 1422005, 1002023, 1332016, 1432005, + /* Beginner equipment */ + 1332021, 1422011, - /* Magician equipment */ - 1002037, 1002034, 1002064, 1002038, 1002013, 1002036, 1382011, 1002035, 1002065, 1382014, 1372001, + /* Warrior equipment */ + 1402017, 1422005, 1002023, 1332016, 1432005, - /* Bowman equipment */ - 1452026, 1002162, 1002164, 1462018, 1002165, 1452014, 1002163, 1452012, 1002161, 1452009, 1462007, + /* Magician equipment */ + 1002037, 1002034, 1002064, 1002038, 1002013, 1002036, 1382011, 1002035, 1002065, 1382014, 1372001, - /* Thief Equipment */ - 1332022, 1002175, 1002172, 1002174, 1040096, 1472033, 1002173, 1332054, 1472054, 1002171, 1332016, + /* Bowman equipment */ + 1452026, 1002162, 1002164, 1462018, 1002165, 1452014, 1002163, 1452012, 1002161, 1452009, 1462007, - /* Pirate equipment */ - 1002646 - - }; - } + /* Thief Equipment */ + 1332022, 1002175, 1002172, 1002174, 1040096, 1472033, 1002173, 1332054, 1472054, 1002171, 1332016, - @Override - public int[] getUncommonItems() { - return new int [] {2040805, 1002419, 1442018}; - } + /* Pirate equipment */ + 1002646 - @Override - public int[] getRareItems() { - return new int [] {}; - } + }; + } + + @Override + public int[] getUncommonItems() { + return new int[]{2040805, 1002419, 1442018}; + } + + @Override + public int[] getRareItems() { + return new int[]{}; + } } diff --git a/src/main/java/server/gachapon/MushroomShrine.java b/src/main/java/server/gachapon/MushroomShrine.java index a31f47f587..1f277bd88c 100644 --- a/src/main/java/server/gachapon/MushroomShrine.java +++ b/src/main/java/server/gachapon/MushroomShrine.java @@ -1,58 +1,57 @@ package server.gachapon; /** -* -* @author Alan (SharpAceX) - gachapon source classes stub -* @author Ronan - parsed MapleSEA loots -* -* MapleSEA-like loots thanks to AyumiLove - src: https://ayumilovemaple.wordpress.com/maplestory-gachapon-guide/ -*/ + * @author Alan (SharpAceX) - gachapon source classes stub + * @author Ronan - parsed MapleSEA loots + *

+ * MapleSEA-like loots thanks to AyumiLove - src: https://ayumilovemaple.wordpress.com/maplestory-gachapon-guide/ + */ public class MushroomShrine extends GachaponItems { - @Override - public int[] getCommonItems() { - return new int [] { - - /* Scroll */ - 2040305, 2040306, 2040308, 2044604, 2041039, 2041037, 2041035, 2041034, 2041041, 2040608, 2040605, 2040604, 2040611, - 2040610, 2040813, 2040808, 2043004, 2040017, 2040015, 2040011, 2040013, 2040405, 2040406, 2040410, 2040511, 2040509, - 2040508, 2040519, 2040521, 2040108, 2040904, 2040908, 2043104, 2044104, 2043005, 2043004, 2043006, 2044004, 2044205, - 2043304, 2040607, 2040715, 2040713, 2044305, 2044904, + @Override + public int[] getCommonItems() { + return new int[]{ - /* Common equipment */ - 1102040, 1002392, 1432009, 1002393, 1002394, 1082147, 1082148, 1032028, 1002585, 1002586, 1432013, 1022047, 1322027, - 1012056, 1432018, + /* Scroll */ + 2040305, 2040306, 2040308, 2044604, 2041039, 2041037, 2041035, 2041034, 2041041, 2040608, 2040605, 2040604, 2040611, + 2040610, 2040813, 2040808, 2043004, 2040017, 2040015, 2040011, 2040013, 2040405, 2040406, 2040410, 2040511, 2040509, + 2040508, 2040519, 2040521, 2040108, 2040904, 2040908, 2043104, 2044104, 2043005, 2043004, 2043006, 2044004, 2044205, + 2043304, 2040607, 2040715, 2040713, 2044305, 2044904, - /* Beginner equipment */ - 1072264, 1072262, 1072263, + /* Common equipment */ + 1102040, 1002392, 1432009, 1002393, 1002394, 1082147, 1082148, 1032028, 1002585, 1002586, 1432013, 1022047, 1322027, + 1012056, 1432018, - /* Warrior equipment */ - 1060074, 1322002, 1002340, 1442004, 1402037, 1422008, 1050022, + /* Beginner equipment */ + 1072264, 1072262, 1072263, - /* Mage equipment */ - 1382037, 1060014, 1051026, 1050056, 1050029, 1051030, 1382036, 1372032, 1041015, 1382015, 1372008, 1382008, + /* Warrior equipment */ + 1060074, 1322002, 1002340, 1442004, 1402037, 1422008, 1050022, - /* Bowman equipment */ - 1452018, 1041068, 1462007, + /* Mage equipment */ + 1382037, 1060014, 1051026, 1050056, 1050029, 1051030, 1382036, 1372032, 1041015, 1382015, 1372008, 1382008, - /* Thief equipment */ - 1060052, 1472013, 1002180, 1002170, 1060073, 1060099, - - /* Pirate equipment */ - 1492004, 1492012, 1482009, 1072303, 1002637, 1052107, 1082189, 1052116, 1072309 + /* Bowman equipment */ + 1452018, 1041068, 1462007, - }; - } + /* Thief equipment */ + 1060052, 1472013, 1002180, 1002170, 1060073, 1060099, - @Override - public int[] getUncommonItems() { - return new int [] {2040811, 2040810, 2040815, 1102041, 1102042, 1082149}; - } + /* Pirate equipment */ + 1492004, 1492012, 1482009, 1072303, 1002637, 1052107, 1082189, 1052116, 1072309 - @Override - public int[] getRareItems() { - return new int [] {1102084, 3010019}; - } + }; + } + + @Override + public int[] getUncommonItems() { + return new int[]{2040811, 2040810, 2040815, 1102041, 1102042, 1082149}; + } + + @Override + public int[] getRareItems() { + return new int[]{1102084, 3010019}; + } } diff --git a/src/main/java/server/gachapon/NautilusHarbor.java b/src/main/java/server/gachapon/NautilusHarbor.java index 40f2f3782c..1fe64f0aa5 100644 --- a/src/main/java/server/gachapon/NautilusHarbor.java +++ b/src/main/java/server/gachapon/NautilusHarbor.java @@ -1,66 +1,65 @@ package server.gachapon; /** -* -* @author Alan (SharpAceX) - gachapon source classes stub & pirate items -* @author Ronan - parsed MapleSEA loots -* -* MapleSEA-like loots thanks to AyumiLove - src: https://ayumilovemaple.wordpress.com/maplestory-gachapon-guide/ -*/ + * @author Alan (SharpAceX) - gachapon source classes stub & pirate items + * @author Ronan - parsed MapleSEA loots + *

+ * MapleSEA-like loots thanks to AyumiLove - src: https://ayumilovemaple.wordpress.com/maplestory-gachapon-guide/ + */ public class NautilusHarbor extends GachaponItems { - @Override - public int[] getCommonItems() { - return new int[] { - /* Scroll */ - 2040605, 2040626, 2040609, 2040607, 2041029, 2041027, 2041031, 2041037, 2041033, 2041039, 2041041, 2041035, - 2040809, 2040813, 2040015, 2040009, 2040011, 2040013, 2040509, 2040521, 2040519, 2040507, 2040905, 2040909, - 2040907, 2040713, 2040715, 2040717, 2040405, 2040409, 2040407, 2040426, 2040303, 2040307, 2040309, 2044505, - 2044705, 2044605, 2043305, 2043105, 2043205, 2043005, 2043007, 2044405, 2044305, 2043805, 2044105, 2044205, - 2044005, 2043705, 2044901, + @Override + public int[] getCommonItems() { + return new int[]{ + /* Scroll */ + 2040605, 2040626, 2040609, 2040607, 2041029, 2041027, 2041031, 2041037, 2041033, 2041039, 2041041, 2041035, + 2040809, 2040813, 2040015, 2040009, 2040011, 2040013, 2040509, 2040521, 2040519, 2040507, 2040905, 2040909, + 2040907, 2040713, 2040715, 2040717, 2040405, 2040409, 2040407, 2040426, 2040303, 2040307, 2040309, 2044505, + 2044705, 2044605, 2043305, 2043105, 2043205, 2043005, 2043007, 2044405, 2044305, 2043805, 2044105, 2044205, + 2044005, 2043705, 2044901, - /* Useable drop */ - 2012000, 2000004, 2020008, 2000005, 2012002, 2101004, 2101005, 2101002, 2101003, 4006000, + /* Useable drop */ + 2012000, 2000004, 2020008, 2000005, 2012002, 2101004, 2101005, 2101002, 2101003, 4006000, - /* Warrior equipment */ - 1092014, 1402017, + /* Warrior equipment */ + 1092014, 1402017, - /* Magician equipment */ - 1002037, 1002034, 1002064, 1002038, 1382037, 1372000, 1002013, 1002035, 1002065, 1382000, + /* Magician equipment */ + 1002037, 1002034, 1002064, 1002038, 1382037, 1372000, 1002013, 1002035, 1002065, 1382000, - /* Bowman equipment */ - 1452018, + /* Bowman equipment */ + 1452018, - /* Thief equipment */ - 1472010, 1002175, 1472017, 1472025, - - /* Pirate equipment */ - 1002610, 1002616, 1002622, 1002628, 1002634, 1002640, 1002646, 1052095, 1052101, 1052107, - 1052113, 1052119, 1052125, 1052131, 1072285, 1072291, 1072297, 1072303, 1072309, 1072315, - 1082180, 1082186, 1082192, 1082198, 1082204, 1082210, 1482001, 1482003, 1482005, 1482007, - 1482009, 1482011, 1492000, 1492002, 1492004, 1492006, 1492008, 1492010, 1492012, 1002613, - 1002619, 1002625, 1002631, 1002637, 1002643, 1052098, 1052104, 1052110, 1052116, 1052122, - 1052128, 1072288, 1072294, 1072300, 1072306, 1072312, 1072318, 1072338, 1082183, 1082189, - 1082195, 1082201, 1082207, 1082213, 1482000, 1482002, 1482004, 1482006, 1482008, 1482010, - 1482012, 1492001, 1492003, 1492005, 1492007, 1492009, 1492011, - - /* Knuckler Scrolls */ - 2044800, 2044801, 2044802, 2044803, 2044804, 2044805, 2044806, 2044807, 2044808, 2044809, - - /* Gun Scrolls */ - 2044900, 2044901, 2044902, 2044903, 2044904 - }; - } + /* Thief equipment */ + 1472010, 1002175, 1472017, 1472025, - @Override - public int[] getUncommonItems() { - return new int[] {2040811, 2040815, 2101001}; - } + /* Pirate equipment */ + 1002610, 1002616, 1002622, 1002628, 1002634, 1002640, 1002646, 1052095, 1052101, 1052107, + 1052113, 1052119, 1052125, 1052131, 1072285, 1072291, 1072297, 1072303, 1072309, 1072315, + 1082180, 1082186, 1082192, 1082198, 1082204, 1082210, 1482001, 1482003, 1482005, 1482007, + 1482009, 1482011, 1492000, 1492002, 1492004, 1492006, 1492008, 1492010, 1492012, 1002613, + 1002619, 1002625, 1002631, 1002637, 1002643, 1052098, 1052104, 1052110, 1052116, 1052122, + 1052128, 1072288, 1072294, 1072300, 1072306, 1072312, 1072318, 1072338, 1082183, 1082189, + 1082195, 1082201, 1082207, 1082213, 1482000, 1482002, 1482004, 1482006, 1482008, 1482010, + 1482012, 1492001, 1492003, 1492005, 1492007, 1492009, 1492011, - @Override - public int[] getRareItems() { - return new int[] {}; - } + /* Knuckler Scrolls */ + 2044800, 2044801, 2044802, 2044803, 2044804, 2044805, 2044806, 2044807, 2044808, 2044809, + + /* Gun Scrolls */ + 2044900, 2044901, 2044902, 2044903, 2044904 + }; + } + + @Override + public int[] getUncommonItems() { + return new int[]{2040811, 2040815, 2101001}; + } + + @Override + public int[] getRareItems() { + return new int[]{}; + } } diff --git a/src/main/java/server/gachapon/NewLeafCity.java b/src/main/java/server/gachapon/NewLeafCity.java index 6a4b08524d..85b6193c24 100644 --- a/src/main/java/server/gachapon/NewLeafCity.java +++ b/src/main/java/server/gachapon/NewLeafCity.java @@ -1,55 +1,54 @@ package server.gachapon; /** -* -* @author Alan (SharpAceX) - gachapon source classes stub & pirate equipment -* @author Ronan - parsed MapleSEA loots, thanks Vcoc for noticing somewhat unbalanced loots in NLC -* -* MapleSEA-like loots thanks to AyumiLove - src: https://ayumilovemaple.wordpress.com/maplestory-gachapon-guide/ -*/ + * @author Alan (SharpAceX) - gachapon source classes stub & pirate equipment + * @author Ronan - parsed MapleSEA loots, thanks Vcoc for noticing somewhat unbalanced loots in NLC + *

+ * MapleSEA-like loots thanks to AyumiLove - src: https://ayumilovemaple.wordpress.com/maplestory-gachapon-guide/ + */ public class NewLeafCity extends GachaponItems { - @Override - public int[] getCommonItems() { - return new int[] { - - /* Scroll */ - 2040406, 2040408, 2040404, 2040411, 2040409, 2044405, 2040610, 2040607, 2040812, 2041039, 2041040, 2041034, - 2041030, 2041037, 2043105, 2043304, 2040103, 2040605, 2040611, 2043004, 2043204, 2044204, 2044005, 2040521, - 2040510, 2043304, 2040908, 2040904, 2040907, 2040809, 2040812, 2040014, 2040714, 2040712, 2044004, 2043705, - 2044505, 2040519, 2040204, 2040104, 2040109, 2044704, 2040906, 2044304, 2043007, 2040307, 2040304, 2040309, - 2040208, 2040209, 2044803, + @Override + public int[] getCommonItems() { + return new int[]{ - /* Common equipment */ - 1102040, 1102086, 1082145, 1032027, 1082146, 1002395, 1002083, 1002392, 1002587, 1022047, + /* Scroll */ + 2040406, 2040408, 2040404, 2040411, 2040409, 2044405, 2040610, 2040607, 2040812, 2041039, 2041040, 2041034, + 2041030, 2041037, 2043105, 2043304, 2040103, 2040605, 2040611, 2043004, 2043204, 2044204, 2044005, 2040521, + 2040510, 2043304, 2040908, 2040904, 2040907, 2040809, 2040812, 2040014, 2040714, 2040712, 2044004, 2043705, + 2044505, 2040519, 2040204, 2040104, 2040109, 2044704, 2040906, 2044304, 2043007, 2040307, 2040304, 2040309, + 2040208, 2040209, 2044803, - /* Warrior equipment */ - 1312002, 1432013, 1060030, 1422008, 1050022, 1050011, 1402013, 1402017, 1302012, + /* Common equipment */ + 1102040, 1102086, 1082145, 1032027, 1082146, 1002395, 1002083, 1002392, 1002587, 1022047, - /* Mage equipment */ - 1002074, 1050029, 1040093, 1050056, 1050039, 1382008, + /* Warrior equipment */ + 1312002, 1432013, 1060030, 1422008, 1050022, 1050011, 1402013, 1402017, 1302012, - /* Bowman equipment */ - 1002159, 1061051, 1040023, + /* Mage equipment */ + 1002074, 1050029, 1040093, 1050056, 1050039, 1382008, - /* Thief equipment */ - 1061054, 1061106, 1002249, 1040084, 1060052, 1472054, - - /* Pirate equipment */ - 1002640, 1002643, 1002646, 1052125, 1052128, 1052131, 1072312, 1072315, 1072318, 1082207, 1082210, 1082213, - 1482010, 1482011, 1002640, 1482012, 1492010, 1492011, 1492012 - }; - } + /* Bowman equipment */ + 1002159, 1061051, 1040023, - @Override - public int[] getUncommonItems() { - return new int[] {2022284, 2040811, 2040815, 2040811, 1102041, 1102042, 1082149}; - } + /* Thief equipment */ + 1061054, 1061106, 1002249, 1040084, 1060052, 1472054, - @Override - public int[] getRareItems() { - return new int[] {}; - } + /* Pirate equipment */ + 1002640, 1002643, 1002646, 1052125, 1052128, 1052131, 1072312, 1072315, 1072318, 1082207, 1082210, 1082213, + 1482010, 1482011, 1002640, 1482012, 1492010, 1492011, 1492012 + }; + } + + @Override + public int[] getUncommonItems() { + return new int[]{2022284, 2040811, 2040815, 2040811, 1102041, 1102042, 1082149}; + } + + @Override + public int[] getRareItems() { + return new int[]{}; + } } diff --git a/src/main/java/server/gachapon/Perion.java b/src/main/java/server/gachapon/Perion.java index 7cbd7be1f2..80e4dc5ea2 100644 --- a/src/main/java/server/gachapon/Perion.java +++ b/src/main/java/server/gachapon/Perion.java @@ -1,57 +1,56 @@ package server.gachapon; /** -* -* @author Alan (SharpAceX) - gachapon source classes stub & pirate equipment -* @author Ronan - parsed MapleSEA loots -* -* MapleSEA-like loots thanks to AyumiLove - src: https://ayumilovemaple.wordpress.com/maplestory-gachapon-guide/ -*/ + * @author Alan (SharpAceX) - gachapon source classes stub & pirate equipment + * @author Ronan - parsed MapleSEA loots + *

+ * MapleSEA-like loots thanks to AyumiLove - src: https://ayumilovemaple.wordpress.com/maplestory-gachapon-guide/ + */ public class Perion extends GachaponItems { - @Override - public int[] getCommonItems() { - return new int [] { - - /* Scrolls */ - 2044907, 2044802, - - /* Useable drop */ - 2000004, 2000005, + @Override + public int[] getCommonItems() { + return new int[]{ - /* Common equipment */ - 1402010, 1302022, 1002060, 1322021, 1082147, 1002006, 1002026, 1002392, 1322025, 1322027, 1102000, 1082150, - 1332020, 1322007, 1302021, 1002395, 1082148, 1322012, 1302017, 1322010, 1032000, 1102013, 1002097, + /* Scrolls */ + 2044907, 2044802, - /* Warrior equipment */ - 1322020, 1312007, 1312008, 1302004, 1312006, 1082036, 1082117, 1061088, 1302008, 1422005, 1002048, 1061087, - 1302018, 1322017, 1422001, 1040103, 1060077, 1002022, 1002050, 1442000, 1432030, 1402037, 1092002, 1041092, - 1050006, 1432004, 1061019, 1432000, 1060009, 1051000, 1002021, 1322014, 1432005, + /* Useable drop */ + 2000004, 2000005, - /* Magician equipment */ - 1051032, 1040018, 1051027, 1372007, 1050049, 1002036, 1382012, 1002217, 1051033, 1382006, 1050048, + /* Common equipment */ + 1402010, 1302022, 1002060, 1322021, 1082147, 1002006, 1002026, 1002392, 1322025, 1322027, 1102000, 1082150, + 1332020, 1322007, 1302021, 1002395, 1082148, 1322012, 1302017, 1322010, 1032000, 1102013, 1002097, - /* Bowman equipment */ - 1061061, 1060062, 1040075, 1462013, 1041065, 1452006, - - /* Thief equipment */ - 1040095, 1060084, 1002182, 1041049, 1002247, 1332024, 1332009, 1060024, 1332015, 1041060, 1061032, 1041074, - 1041003, 1332016, 1472020, 1332003, 1041059, + /* Warrior equipment */ + 1322020, 1312007, 1312008, 1302004, 1312006, 1082036, 1082117, 1061088, 1302008, 1422005, 1002048, 1061087, + 1302018, 1322017, 1422001, 1040103, 1060077, 1002022, 1002050, 1442000, 1432030, 1402037, 1092002, 1041092, + 1050006, 1432004, 1061019, 1432000, 1060009, 1051000, 1002021, 1322014, 1432005, - /* Pirate equipment */ - 1482001, 1492002, 1052113, 1002616, 1072294, 1492004, 1482006, 1082192, 1082189, 1082195 - }; - } + /* Magician equipment */ + 1051032, 1040018, 1051027, 1372007, 1050049, 1002036, 1382012, 1002217, 1051033, 1382006, 1050048, - @Override - public int[] getUncommonItems() { - return new int [] {1082149, 1002391, 1002419, 1102041}; - } + /* Bowman equipment */ + 1061061, 1060062, 1040075, 1462013, 1041065, 1452006, - @Override - public int[] getRareItems() { - return new int [] {}; - } + /* Thief equipment */ + 1040095, 1060084, 1002182, 1041049, 1002247, 1332024, 1332009, 1060024, 1332015, 1041060, 1061032, 1041074, + 1041003, 1332016, 1472020, 1332003, 1041059, + + /* Pirate equipment */ + 1482001, 1492002, 1052113, 1002616, 1072294, 1492004, 1482006, 1082192, 1082189, 1082195 + }; + } + + @Override + public int[] getUncommonItems() { + return new int[]{1082149, 1002391, 1002419, 1102041}; + } + + @Override + public int[] getRareItems() { + return new int[]{}; + } } diff --git a/src/main/java/server/gachapon/ShowaSpaFemale.java b/src/main/java/server/gachapon/ShowaSpaFemale.java index be6ca227a7..29f71822ef 100644 --- a/src/main/java/server/gachapon/ShowaSpaFemale.java +++ b/src/main/java/server/gachapon/ShowaSpaFemale.java @@ -1,58 +1,57 @@ package server.gachapon; /** -* -* @author Alan (SharpAceX) - gachapon source classes stub -* @author Ronan - parsed MapleSEA loots -* -* MapleSEA-like loots src: http://maplesecrets.blogspot.com/2011/06/gachapon-showa-towns-sauna-female-spa.html -*/ + * @author Alan (SharpAceX) - gachapon source classes stub + * @author Ronan - parsed MapleSEA loots + *

+ * MapleSEA-like loots src: http://maplesecrets.blogspot.com/2011/06/gachapon-showa-towns-sauna-female-spa.html + */ public class ShowaSpaFemale extends GachaponItems { - @Override - public int[] getCommonItems() { - return new int [] { - - /* Scroll */ - 2048005, 2048002, 2043202, 2044602, 2043214, 2041307, 2041035, 2044104, 2044505, 2044305, 2043304, 2041309, - 2044010, 2044803, 2044814, 2044904, 2044902, 2044901, + @Override + public int[] getCommonItems() { + return new int[]{ - /* Useable drop */ - 2022016, 2000005, 2022025, 2022027, + /* Scroll */ + 2048005, 2048002, 2043202, 2044602, 2043214, 2041307, 2041035, 2044104, 2044505, 2044305, 2043304, 2041309, + 2044010, 2044803, 2044814, 2044904, 2044902, 2044901, - /* Common equipment */ - 1402000, 1402013, 1002418, 1022047, 1082145, 1082147, 1082146, 1082178, 1082175, + /* Useable drop */ + 2022016, 2000005, 2022025, 2022027, - /* Common setup */ - 3010073, 3010099, + /* Common equipment */ + 1402000, 1402013, 1002418, 1022047, 1082145, 1082147, 1082146, 1082178, 1082175, - /* Warrior equipment */ - 1422013, 1432030, + /* Common setup */ + 3010073, 3010099, - /* Magician equipment */ - 1372002, 1382003, + /* Warrior equipment */ + 1422013, 1432030, - /* Bowman equipment */ - 1040023, + /* Magician equipment */ + 1372002, 1382003, - /* Thief equipment */ - 1332003, 1002209, + /* Bowman equipment */ + 1040023, - /* Pirate equipment */ - 1082198, 1082213, 1482007, 1492004, 1002646 - - }; - } + /* Thief equipment */ + 1332003, 1002209, - @Override - public int[] getUncommonItems() { - return new int [] {2040916, 1102042}; - } + /* Pirate equipment */ + 1082198, 1082213, 1482007, 1492004, 1002646 - @Override - public int[] getRareItems() { - return new int [] {}; - } + }; + } + + @Override + public int[] getUncommonItems() { + return new int[]{2040916, 1102042}; + } + + @Override + public int[] getRareItems() { + return new int[]{}; + } } diff --git a/src/main/java/server/gachapon/ShowaSpaMale.java b/src/main/java/server/gachapon/ShowaSpaMale.java index 18c983c1d9..d0f38956b1 100644 --- a/src/main/java/server/gachapon/ShowaSpaMale.java +++ b/src/main/java/server/gachapon/ShowaSpaMale.java @@ -1,60 +1,59 @@ package server.gachapon; /** -* -* @author Alan (SharpAceX) - gachapon source classes stub -* @author Ronan - parsed MapleSEA loots -* -* MapleSEA-like loots src: http://maplesecrets.blogspot.com/2011/05/gachapon-showa-towns-sauna.html -*/ + * @author Alan (SharpAceX) - gachapon source classes stub + * @author Ronan - parsed MapleSEA loots + *

+ * MapleSEA-like loots src: http://maplesecrets.blogspot.com/2011/05/gachapon-showa-towns-sauna.html + */ public class ShowaSpaMale extends GachaponItems { - @Override - public int[] getCommonItems() { - return new int [] { - - /* Scroll */ - 2048005, 2048002, 2043202, 2044602, 2043214, 2041307, 2041035, 2044104, 2044505, 2044305, 2043304, 2044902, - 2044901, 2044811, 2044903, 2044804, + @Override + public int[] getCommonItems() { + return new int[]{ - /* Useable drop */ - 2022016, 2000005, 2022025, 2022027, + /* Scroll */ + 2048005, 2048002, 2043202, 2044602, 2043214, 2041307, 2041035, 2044104, 2044505, 2044305, 2043304, 2044902, + 2044901, 2044811, 2044903, 2044804, - /* Common equipment */ - 1332020, 1312004, 1332032, 1322023, 1322026, 1322022, 1322012, 1302014, 1302049, 1302017, 1332007, 1432009, - 1432016, 1432017, 1432009, 1402013, 1402044, 1442014, 1442017, 1442016, 1442025, 1002418, 1082178, 1082179, - 1082148, 1032027, 1032032, 1102028, 1102086, + /* Useable drop */ + 2022016, 2000005, 2022025, 2022027, - /* Common setup */ - 3010073, 3010111, + /* Common equipment */ + 1332020, 1312004, 1332032, 1322023, 1322026, 1322022, 1322012, 1302014, 1302049, 1302017, 1332007, 1432009, + 1432016, 1432017, 1432009, 1402013, 1402044, 1442014, 1442017, 1442016, 1442025, 1002418, 1082178, 1082179, + 1082148, 1032027, 1032032, 1102028, 1102086, - /* Warrior equipment */ - 1412005, 1402048, 1402049, 1322011, 1302003, 1302004, 1302008, + /* Common setup */ + 3010073, 3010111, - /* Magician equipment */ - 1372000, 1372009, 1372001, 1372011, 1382006, 1382014, + /* Warrior equipment */ + 1412005, 1402048, 1402049, 1322011, 1302003, 1302004, 1302008, - /* Bowman equipment */ - 1452018, 1452006, 1452008, 1452005, 1462002, 1462007, 1462003, 1002169, + /* Magician equipment */ + 1372000, 1372009, 1372001, 1372011, 1382006, 1382014, - /* Thief equipment */ - 1472023, 1332012, 1332017, 1332022, 1332006, 1332029, 1040097, + /* Bowman equipment */ + 1452018, 1452006, 1452008, 1452005, 1462002, 1462007, 1462003, 1002169, - /* Pirate equipment */ - 1052107, 1082204, 1072318, 1002637, 1482009, 1492007 - - }; - } + /* Thief equipment */ + 1472023, 1332012, 1332017, 1332022, 1332006, 1332029, 1040097, - @Override - public int[] getUncommonItems() { - return new int [] {2040916, 1102042}; - } + /* Pirate equipment */ + 1052107, 1082204, 1072318, 1002637, 1482009, 1492007 - @Override - public int[] getRareItems() { - return new int [] {}; - } + }; + } + + @Override + public int[] getUncommonItems() { + return new int[]{2040916, 1102042}; + } + + @Override + public int[] getRareItems() { + return new int[]{}; + } } diff --git a/src/main/java/server/gachapon/Sleepywood.java b/src/main/java/server/gachapon/Sleepywood.java index 0e09f904d1..1212addfc9 100644 --- a/src/main/java/server/gachapon/Sleepywood.java +++ b/src/main/java/server/gachapon/Sleepywood.java @@ -1,59 +1,58 @@ package server.gachapon; /** -* -* @author Alan (SharpAceX) - gachapon source classes stub & pirate equipment -* @author Ronan - parsed MapleSEA loots -* -* MapleSEA-like loots thanks to AyumiLove - src: https://ayumilovemaple.wordpress.com/maplestory-gachapon-guide/ -*/ + * @author Alan (SharpAceX) - gachapon source classes stub & pirate equipment + * @author Ronan - parsed MapleSEA loots + *

+ * MapleSEA-like loots thanks to AyumiLove - src: https://ayumilovemaple.wordpress.com/maplestory-gachapon-guide/ + */ public class Sleepywood extends GachaponItems { - @Override - public int[] getCommonItems() { - return new int [] { - - /* Scroll */ - 2048003, 2048000, 2040601, 2044501, 2041019, 2041016, 2041022, 2041010, 2041013, 2043301, 2040301, 2040801, 2040001, - 2040004, 2043101, 2043201, 2043001, 2040504, 2040501, 2048004, 2048001, 2044401, 2040901, 2040701, 2040704, 2040707, - 2044301, 2043801, 2044101, 2044201, 2044001, 2040602, 2044502, 2041020, 2041017, 2041023, 2041014, 2041005, 2044702, - 2044602, 2043302, 2040302, 2040802, 2040005, 2043202, 2043002, 2040505, 2040502, 2048005, 2048002, 2044402, 2040902, - 2040702, 2040705, 2040708, 2044302, 2043802, 2044202, 2044002, 2044801, 2044903, 2044814, + @Override + public int[] getCommonItems() { + return new int[]{ - /* Useable drop */ - 2012000, 2012003, 2020007, 2000004, 2012001, 2020008, 2070006, 2020012, 2000005, 2030007, 2012002, 2002001, 2070005, + /* Scroll */ + 2048003, 2048000, 2040601, 2044501, 2041019, 2041016, 2041022, 2041010, 2041013, 2043301, 2040301, 2040801, 2040001, + 2040004, 2043101, 2043201, 2043001, 2040504, 2040501, 2048004, 2048001, 2044401, 2040901, 2040701, 2040704, 2040707, + 2044301, 2043801, 2044101, 2044201, 2044001, 2040602, 2044502, 2041020, 2041017, 2041023, 2041014, 2041005, 2044702, + 2044602, 2043302, 2040302, 2040802, 2040005, 2043202, 2043002, 2040505, 2040502, 2048005, 2048002, 2044402, 2040902, + 2040702, 2040705, 2040708, 2044302, 2043802, 2044202, 2044002, 2044801, 2044903, 2044814, - /* Common equipment */ - 1032003, 1432009, 1102014, 1102018, 1002392, 1322026, 1032022, 1312012, 1332020, 1092030, 1032016, 1032015, 1032014, - 1322024, 1032013, 1322022, 1102016, 1032012, 1032023, 1402014, 1032000, 1102017, + /* Useable drop */ + 2012000, 2012003, 2020007, 2000004, 2012001, 2020008, 2070006, 2020012, 2000005, 2030007, 2012002, 2002001, 2070005, - /* Warrior equipment */ - 1402017, 1051010, 1432011, 1442006, 1322002, 1422004, 1432010, 1051011, 1060018, 1432000, 1422003, 1412003, 1422000, + /* Common equipment */ + 1032003, 1432009, 1102014, 1102018, 1002392, 1322026, 1032022, 1312012, 1332020, 1092030, 1032016, 1032015, 1032014, + 1322024, 1032013, 1322022, 1102016, 1032012, 1032023, 1402014, 1032000, 1102017, - /* Magician equipment */ - 1002034, 1002142, 1382010, 1002013, 1382008, 1382011, 1050047, 1002065, + /* Warrior equipment */ + 1402017, 1051010, 1432011, 1442006, 1322002, 1422004, 1432010, 1051011, 1060018, 1432000, 1422003, 1412003, 1422000, - /* Bowman equipment */ - 1452003, 1002165, 1040068, 1462013, 1462011, 1462012, 1061050, 1462010, 1002161, + /* Magician equipment */ + 1002034, 1002142, 1382010, 1002013, 1382008, 1382011, 1050047, 1002065, - /* Thief equipment */ - 1332022, 1002175, 1040042, 1472004, 1040057, 1332031, 1332023, 1332010, 1002171, 1060046, - - /* Pirate equipment */ - 1002631, 1002634, 1002637, 1052116, 1052119, 1052122, 1072303, 1072306, 1072309, 1082198, 1082201, 1082204, 1482007, - 1482008, 1482009 - }; - } + /* Bowman equipment */ + 1452003, 1002165, 1040068, 1462013, 1462011, 1462012, 1061050, 1462010, 1002161, - @Override - public int[] getUncommonItems() { - return new int [] {2040804, 2040817, 2040805, 2340000, 1082149, 1442018}; - } + /* Thief equipment */ + 1332022, 1002175, 1040042, 1472004, 1040057, 1332031, 1332023, 1332010, 1002171, 1060046, - @Override - public int[] getRareItems() { - return new int [] {}; - } + /* Pirate equipment */ + 1002631, 1002634, 1002637, 1052116, 1052119, 1052122, 1072303, 1072306, 1072309, 1082198, 1082201, 1082204, 1482007, + 1482008, 1482009 + }; + } + + @Override + public int[] getUncommonItems() { + return new int[]{2040804, 2040817, 2040805, 2340000, 1082149, 1442018}; + } + + @Override + public int[] getRareItems() { + return new int[]{}; + } } diff --git a/src/main/java/server/life/ChangeableStats.java b/src/main/java/server/life/ChangeableStats.java index 1ae4312d7c..e6ef76ff8f 100644 --- a/src/main/java/server/life/ChangeableStats.java +++ b/src/main/java/server/life/ChangeableStats.java @@ -49,6 +49,6 @@ public class ChangeableStats extends OverrideMonsterStats { } public ChangeableStats(MonsterStats stats, float statModifier, boolean pqMob) { - this(stats, (int)(statModifier * stats.getLevel()), pqMob); + this(stats, (int) (statModifier * stats.getLevel()), pqMob); } } diff --git a/src/main/java/server/life/Element.java b/src/main/java/server/life/Element.java index 9d22fd9b8a..ec6f114434 100644 --- a/src/main/java/server/life/Element.java +++ b/src/main/java/server/life/Element.java @@ -24,21 +24,22 @@ package server.life; public enum Element { NEUTRAL(0), PHYSICAL(1), FIRE(2, true), ICE(3, true), LIGHTING(4), POISON(5), HOLY(6, true), DARKNESS(7); - private int value; + private final int value; private boolean special = false; - private Element(int v) { - this.value = v; + + Element(int v) { + this.value = v; } - private Element(int v, boolean special) { - this.value = v; - this.special = special; + Element(int v, boolean special) { + this.value = v; + this.special = special; } public boolean isSpecial() { - return special; + return special; } - + public static Element getFromChar(char c) { switch (Character.toUpperCase(c)) { case 'F': @@ -52,14 +53,14 @@ public enum Element { case 'H': return HOLY; case 'D': - return DARKNESS; + return DARKNESS; case 'P': return NEUTRAL; } throw new IllegalArgumentException("unknown elemnt char " + c); } - + public int getValue() { - return value; + return value; } } diff --git a/src/main/java/server/life/MobAttackInfo.java b/src/main/java/server/life/MobAttackInfo.java index 59a5a9b679..5285caff4d 100644 --- a/src/main/java/server/life/MobAttackInfo.java +++ b/src/main/java/server/life/MobAttackInfo.java @@ -22,7 +22,6 @@ package server.life; /** - * * @author Danny (Leifde) */ public class MobAttackInfo { diff --git a/src/main/java/server/life/MobAttackInfoFactory.java b/src/main/java/server/life/MobAttackInfoFactory.java index eb680da2d6..5536db5a87 100644 --- a/src/main/java/server/life/MobAttackInfoFactory.java +++ b/src/main/java/server/life/MobAttackInfoFactory.java @@ -32,12 +32,11 @@ import java.util.HashMap; import java.util.Map; /** - * * @author Danny (Leifde) */ public class MobAttackInfoFactory { - private static Map mobAttacks = new HashMap<>(); - private static DataProvider dataSource = DataProviderFactory.getDataProvider(WZFiles.MOB); + private static final Map mobAttacks = new HashMap<>(); + private static final DataProvider dataSource = DataProviderFactory.getDataProvider(WZFiles.MOB); public static MobAttackInfo getMobAttackInfo(Monster mob, int attack) { MobAttackInfo ret = mobAttacks.get(mob.getId() + "" + attack); @@ -55,11 +54,11 @@ public class MobAttackInfoFactory { mobData = dataSource.getData(StringUtil.getLeftPaddedStr(linkedmob + ".img", '0', 11)); } Data attackData = mobData.getChildByPath("attack" + (attack + 1) + "/info"); - + if (attackData == null) { - return null; + return null; } - + Data deadlyAttack = attackData.getChildByPath("deadlyAttack"); int mpBurn = DataTool.getInt("mpBurn", attackData, 0); int disease = DataTool.getInt("disease", attackData, 0); @@ -70,7 +69,7 @@ public class MobAttackInfoFactory { ret.setMpBurn(mpBurn); ret.setDiseaseSkill(disease); ret.setDiseaseLevel(level); - ret.setMpCon(mpCon); + ret.setMpCon(mpCon); } mobAttacks.put(mob.getId() + "" + attack, ret); } diff --git a/src/main/java/server/life/MobSkill.java b/src/main/java/server/life/MobSkill.java index 3202313af8..0228528eec 100644 --- a/src/main/java/server/life/MobSkill.java +++ b/src/main/java/server/life/MobSkill.java @@ -39,13 +39,14 @@ import java.util.List; import java.util.*; /** - * * @author Danny (Leifde) */ public class MobSkill { - private int skillId, skillLevel, mpCon; - private List toSummon = new ArrayList<>(); + private final int skillId; + private final int skillLevel; + private int mpCon; + private final List toSummon = new ArrayList<>(); private int spawnEffect, hp, x, y, count; private long duration, cooltime; private float prop; @@ -251,7 +252,7 @@ public class MobSkill { int summonLimit = monster.countAvailableMobSummons(summons.size(), skillLimit); if (summonLimit >= 1) { boolean bossRushMap = GameConstants.isBossRush(map.getId()); - + Collections.shuffle(summons); for (Integer mobId : summons.subList(0, summonLimit)) { Monster toSpawn = LifeFactory.getMonster(mobId); diff --git a/src/main/java/server/life/MobSkillFactory.java b/src/main/java/server/life/MobSkillFactory.java index f6c54ab167..281f84880b 100644 --- a/src/main/java/server/life/MobSkillFactory.java +++ b/src/main/java/server/life/MobSkillFactory.java @@ -40,14 +40,13 @@ import java.util.List; import java.util.Map; /** - * * @author Danny (Leifde) */ public class MobSkillFactory { - private static Map mobSkills = new HashMap<>(); + private static final Map mobSkills = new HashMap<>(); private final static DataProvider dataSource = DataProviderFactory.getDataProvider(WZFiles.SKILL); - private static Data skillRoot = dataSource.getData("MobSkill.img"); + private static final Data skillRoot = dataSource.getData("MobSkill.img"); private final static MonitoredReentrantReadWriteLock dataLock = new MonitoredReentrantReadWriteLock(MonitoredLockType.MOBSKILL_FACTORY); private final static MonitoredReadLock rL = MonitoredReadLockFactory.createLock(dataLock); private final static MonitoredWriteLock wL = MonitoredWriteLockFactory.createLock(dataLock); diff --git a/src/main/java/server/life/MonsterDropEntry.java b/src/main/java/server/life/MonsterDropEntry.java index fdba5042d5..44a6843f48 100644 --- a/src/main/java/server/life/MonsterDropEntry.java +++ b/src/main/java/server/life/MonsterDropEntry.java @@ -21,18 +21,18 @@ package server.life; /** - * * @author LightPepsi */ public class MonsterDropEntry { public MonsterDropEntry(int itemId, int chance, int Minimum, int Maximum, short questid) { - this.itemId = itemId; - this.chance = chance; - this.questid = questid; - this.Minimum = Minimum; - this.Maximum = Maximum; + this.itemId = itemId; + this.chance = chance; + this.questid = questid; + this.Minimum = Minimum; + this.Maximum = Maximum; } + public short questid; public int itemId, chance, Minimum, Maximum; } \ No newline at end of file diff --git a/src/main/java/server/life/MonsterGlobalDropEntry.java b/src/main/java/server/life/MonsterGlobalDropEntry.java index 136f219736..383ded6958 100644 --- a/src/main/java/server/life/MonsterGlobalDropEntry.java +++ b/src/main/java/server/life/MonsterGlobalDropEntry.java @@ -21,18 +21,18 @@ package server.life; /** - * * @author LightPepsi */ public class MonsterGlobalDropEntry { public MonsterGlobalDropEntry(int itemId, int chance, int continent, int Minimum, int Maximum, short questid) { - this.itemId = itemId; - this.chance = chance; - this.questid = questid; - this.continentid = continent; - this.Minimum = Minimum; - this.Maximum = Maximum; + this.itemId = itemId; + this.chance = chance; + this.questid = questid; + this.continentid = continent; + this.Minimum = Minimum; + this.Maximum = Maximum; } + public int itemId, chance, Minimum, Maximum, continentid; public short questid; } diff --git a/src/main/java/server/life/MonsterListener.java b/src/main/java/server/life/MonsterListener.java index 291c56b2c1..d84b894c78 100644 --- a/src/main/java/server/life/MonsterListener.java +++ b/src/main/java/server/life/MonsterListener.java @@ -1,8 +1,9 @@ package server.life; + import client.Character; public interface MonsterListener { - + void monsterKilled(int aniTime); void monsterDamaged(Character from, int trueDmg); void monsterHealed(int trueHeal); diff --git a/src/main/java/server/life/SpawnPoint.java b/src/main/java/server/life/SpawnPoint.java index c6f901ee1a..18738133be 100644 --- a/src/main/java/server/life/SpawnPoint.java +++ b/src/main/java/server/life/SpawnPoint.java @@ -28,12 +28,17 @@ import java.awt.*; import java.util.concurrent.atomic.AtomicInteger; public class SpawnPoint { - private int monster, mobTime, team, fh, f; - private Point pos; + private final int monster; + private final int mobTime; + private final int team; + private final int fh; + private final int f; + private final Point pos; private long nextPossibleSpawn; private int mobInterval = 5000; - private AtomicInteger spawnedMonsters = new AtomicInteger(0); - private boolean immobile, denySpawn = false; + private final AtomicInteger spawnedMonsters = new AtomicInteger(0); + private final boolean immobile; + private boolean denySpawn = false; public SpawnPoint(final Monster monster, Point pos, boolean immobile, int mobTime, int mobInterval, int team) { this.monster = monster.getId(); @@ -46,34 +51,30 @@ public class SpawnPoint { this.mobInterval = mobInterval; this.nextPossibleSpawn = Server.getInstance().getCurrentTime(); } - + public int getSpawned() { return spawnedMonsters.intValue(); } - + public void setDenySpawn(boolean val) { denySpawn = val; } - + public boolean getDenySpawn() { return denySpawn; } public boolean shouldSpawn() { - if (denySpawn || mobTime < 0 || spawnedMonsters.get() > 0) { + if (denySpawn || mobTime < 0 || spawnedMonsters.get() > 0) { return false; } return nextPossibleSpawn <= Server.getInstance().getCurrentTime(); } public boolean shouldForceSpawn() { - if (mobTime < 0 || spawnedMonsters.get() > 0) { - return false; - } - - return true; + return mobTime >= 0 && spawnedMonsters.get() <= 0; } - + public Monster getMonster() { Monster mob = new Monster(LifeFactory.getMonster(monster)); mob.setPosition(new Point(pos)); @@ -92,10 +93,10 @@ public class SpawnPoint { } spawnedMonsters.decrementAndGet(); } - + @Override public void monsterDamaged(Character from, int trueDmg) {} - + @Override public void monsterHealed(int trueHeal) {} }); @@ -104,7 +105,7 @@ public class SpawnPoint { } return mob; } - + public int getMonsterId() { return monster; } @@ -120,11 +121,11 @@ public class SpawnPoint { public final int getFh() { return fh; } - + public int getMobTime() { return mobTime; } - + public int getTeam() { return team; } diff --git a/src/main/java/server/maps/FieldLimit.java b/src/main/java/server/maps/FieldLimit.java index 04abc34c35..3f0afb4558 100644 --- a/src/main/java/server/maps/FieldLimit.java +++ b/src/main/java/server/maps/FieldLimit.java @@ -21,7 +21,6 @@ package server.maps; /** - * * @author AngelSL */ public enum FieldLimit { @@ -44,7 +43,7 @@ public enum FieldLimit { //ANTI_MACRO_LIMIT(0x10000), // No notes CANNOTJUMPDOWN(0x20000), //SUMMON_NPC_LIMIT(0x40000); // Seems to .. disable Rush if 0x2 is set - + //......... EVEN MORE LIMITS ............ //SUMMON_NPC_LIMIT(0x40000), NO_EXP_DECREASE(0x80000), @@ -52,10 +51,10 @@ public enum FieldLimit { //PARCEL_OPEN_LIMIT(0x200000), DROP_LIMIT(0x400000); //ROCKETBOOSTER_LIMIT(0x800000) //lol we don't even have mechanics <3 - - private long i; - private FieldLimit(long i) { + private final long i; + + FieldLimit(long i) { this.i = i; } diff --git a/src/main/java/server/maps/MapMonitor.java b/src/main/java/server/maps/MapMonitor.java index 4b74c619a1..b3a5c8565e 100644 --- a/src/main/java/server/maps/MapMonitor.java +++ b/src/main/java/server/maps/MapMonitor.java @@ -45,14 +45,14 @@ public class MapMonitor { monitorSchedule.cancel(false); monitorSchedule = null; } - + map.killAllMonsters(); map.clearDrops(); if (portal != null) { portal.setPortalStatus(Portal.OPEN); } map.resetReactors(); - + map = null; portal = null; } diff --git a/src/main/java/server/maps/MapleTVEffect.java b/src/main/java/server/maps/MapleTVEffect.java index 511874e25a..c675139f13 100644 --- a/src/main/java/server/maps/MapleTVEffect.java +++ b/src/main/java/server/maps/MapleTVEffect.java @@ -34,34 +34,34 @@ import java.util.List; * @author Ronan - made MapleTV mechanics synchronous */ public class MapleTVEffect { - - private final static boolean[] ACTIVE = new boolean[Server.getInstance().getWorldsSize()]; - - public static synchronized boolean broadcastMapleTVIfNotActive(Character player, Character victim, List messages, int tvType){ - int w = player.getWorld(); - if(!ACTIVE[w]) { - broadcastTV(true, w, messages, player, tvType, victim); - return true; - } - - return false; - } - private static synchronized void broadcastTV(boolean activity, final int userWorld, List message, Character user, int type, Character partner) { - Server server = Server.getInstance(); - ACTIVE[userWorld] = activity; - if (activity) { - server.broadcastMessage(userWorld, PacketCreator.enableTV()); - server.broadcastMessage(userWorld, PacketCreator.sendTV(user, message, type <= 2 ? type : type - 3, partner)); - int delay = 15000; - if (type == 4) { - delay = 30000; - } else if (type == 5) { - delay = 60000; - } - TimerManager.getInstance().schedule(() -> broadcastTV(false, userWorld, null, null, -1, null), delay); - } else { - server.broadcastMessage(userWorld, PacketCreator.removeTV()); - } - } + private final static boolean[] ACTIVE = new boolean[Server.getInstance().getWorldsSize()]; + + public static synchronized boolean broadcastMapleTVIfNotActive(Character player, Character victim, List messages, int tvType) { + int w = player.getWorld(); + if (!ACTIVE[w]) { + broadcastTV(true, w, messages, player, tvType, victim); + return true; + } + + return false; + } + + private static synchronized void broadcastTV(boolean activity, final int userWorld, List message, Character user, int type, Character partner) { + Server server = Server.getInstance(); + ACTIVE[userWorld] = activity; + if (activity) { + server.broadcastMessage(userWorld, PacketCreator.enableTV()); + server.broadcastMessage(userWorld, PacketCreator.sendTV(user, message, type <= 2 ? type : type - 3, partner)); + int delay = 15000; + if (type == 4) { + delay = 30000; + } else if (type == 5) { + delay = 60000; + } + TimerManager.getInstance().schedule(() -> broadcastTV(false, userWorld, null, null, -1, null), delay); + } else { + server.broadcastMessage(userWorld, PacketCreator.removeTV()); + } + } } diff --git a/src/main/java/server/maps/Reactor.java b/src/main/java/server/maps/Reactor.java index f6d54c2109..94818e8622 100644 --- a/src/main/java/server/maps/Reactor.java +++ b/src/main/java/server/maps/Reactor.java @@ -334,7 +334,9 @@ public class Reactor extends AbstractMapObject { if (this.getDelay() > 0) { this.delayedRespawn(); } - } else return !this.inDelayedRespawn(); + } else { + return !this.inDelayedRespawn(); + } } finally { reactorLock.unlock(); } diff --git a/src/main/java/server/maps/ReactorDropEntry.java b/src/main/java/server/maps/ReactorDropEntry.java index 99f48ed5fa..5513f7fb3e 100644 --- a/src/main/java/server/maps/ReactorDropEntry.java +++ b/src/main/java/server/maps/ReactorDropEntry.java @@ -23,10 +23,11 @@ package server.maps; public class ReactorDropEntry { public ReactorDropEntry(int itemId, int chance, int questId) { - this.itemId = itemId; - this.chance = chance; - this.questid = questId; + this.itemId = itemId; + this.chance = chance; + this.questid = questId; } + public int itemId, chance, questid; public int assignedRangeStart, assignedRangeLength; } \ No newline at end of file diff --git a/src/main/java/server/maps/SavedLocation.java b/src/main/java/server/maps/SavedLocation.java index eab1d823a1..dcdb6f5b0c 100644 --- a/src/main/java/server/maps/SavedLocation.java +++ b/src/main/java/server/maps/SavedLocation.java @@ -22,7 +22,8 @@ package server.maps; public class SavedLocation { - private int mapid = 102000000, portal; + private int mapid = 102000000; + private final int portal; public SavedLocation(int mapid, int portal) { this.mapid = mapid; diff --git a/src/main/java/server/maps/SummonMovementType.java b/src/main/java/server/maps/SummonMovementType.java index 01dabcc218..3e52618303 100644 --- a/src/main/java/server/maps/SummonMovementType.java +++ b/src/main/java/server/maps/SummonMovementType.java @@ -25,7 +25,7 @@ public enum SummonMovementType { STATIONARY(0), FOLLOW(1), CIRCLE_FOLLOW(3); private final int val; - private SummonMovementType(int val) { + SummonMovementType(int val) { this.val = val; } diff --git a/src/main/java/server/movement/AbstractLifeMovement.java b/src/main/java/server/movement/AbstractLifeMovement.java index 832915a155..1a50beb3e7 100644 --- a/src/main/java/server/movement/AbstractLifeMovement.java +++ b/src/main/java/server/movement/AbstractLifeMovement.java @@ -21,12 +21,13 @@ */ package server.movement; -import java.awt.Point; +import java.awt.*; public abstract class AbstractLifeMovement implements LifeMovement { - private Point position; - private int duration; - private int newstate, type; + private final Point position; + private final int duration; + private final int newstate; + private final int type; public AbstractLifeMovement(int type, Point position, int duration, int newstate) { super(); diff --git a/src/main/java/server/movement/LifeMovement.java b/src/main/java/server/movement/LifeMovement.java index 49b40f3121..92d10f47c0 100644 --- a/src/main/java/server/movement/LifeMovement.java +++ b/src/main/java/server/movement/LifeMovement.java @@ -21,7 +21,7 @@ */ package server.movement; -import java.awt.Point; +import java.awt.*; public interface LifeMovement extends LifeMovementFragment { Point getPosition(); diff --git a/src/main/java/server/partyquest/AriantColiseum.java b/src/main/java/server/partyquest/AriantColiseum.java index b9fcd7dc06..5a9884da44 100644 --- a/src/main/java/server/partyquest/AriantColiseum.java +++ b/src/main/java/server/partyquest/AriantColiseum.java @@ -35,36 +35,35 @@ import java.util.Map.Entry; import java.util.concurrent.ScheduledFuture; /** - * * @author Ronan */ public class AriantColiseum { - + private Expedition exped; private MapleMap map; - - private Map score; - private Map rewardTier; + + private final Map score; + private final Map rewardTier; private boolean scoreDirty = false; - + private ScheduledFuture ariantUpdate; private ScheduledFuture ariantFinish; private ScheduledFuture ariantScoreboard; - + private int lostShards = 0; - + private boolean eventClear = false; - + public AriantColiseum(MapleMap eventMap, Expedition expedition) { exped = expedition; exped.finishRegistration(); - + map = eventMap; map.resetFully(); - + int pqTimer = 10 * 60 * 1000; int pqTimerBoard = (9 * 60 * 1000) + 50 * 1000; - + List players = exped.getActiveMembers(); score = new HashMap<>(); rewardTier = new HashMap<>(); @@ -74,73 +73,73 @@ public class AriantColiseum { mc.updateAriantScore(); rewardTier.put(mc, 0); } - + for (Character mc : players) { mc.sendPacket(PacketCreator.updateAriantPQRanking(score)); } - + setAriantScoreBoard(TimerManager.getInstance().schedule(() -> showArenaResults(), pqTimerBoard)); - + setArenaFinish(TimerManager.getInstance().schedule(() -> enterKingsRoom(), pqTimer)); - + setArenaUpdate(TimerManager.getInstance().register(() -> broadcastAriantScoreUpdate(), 500, 500)); } - + private void setArenaUpdate(ScheduledFuture ariantUpdate) { this.ariantUpdate = ariantUpdate; } - + private void setArenaFinish(ScheduledFuture arenaFinish) { this.ariantFinish = arenaFinish; } - + private void setAriantScoreBoard(ScheduledFuture ariantScore) { this.ariantScoreboard = ariantScore; } - + private void cancelArenaUpdate() { if (ariantUpdate != null) { ariantUpdate.cancel(true); ariantUpdate = null; } } - + private void cancelArenaFinish() { if (ariantFinish != null) { ariantFinish.cancel(true); ariantFinish = null; } } - + private void cancelAriantScoreBoard() { if (ariantScoreboard != null) { ariantScoreboard.cancel(true); ariantScoreboard = null; } } - + private void cancelAriantSchedules() { cancelArenaUpdate(); cancelArenaFinish(); cancelAriantScoreBoard(); } - + public int getAriantScore(Character chr) { Integer chrScore = score.get(chr); return chrScore != null ? chrScore : 0; } - + public void clearAriantScore(Character chr) { score.remove(chr); } - + public void updateAriantScore(Character chr, int points) { if (map != null) { score.put(chr, points); scoreDirty = true; } } - + private void broadcastAriantScoreUpdate() { if (scoreDirty) { for (Character chr : score.keySet()) { @@ -149,26 +148,26 @@ public class AriantColiseum { scoreDirty = false; } } - + public int getAriantRewardTier(Character chr) { Integer reward = rewardTier.get(chr); return reward != null ? reward : 0; } - + public void clearAriantRewardTier(Character chr) { rewardTier.remove(chr); } - + public void addLostShards(int quantity) { lostShards += quantity; } - + public void leaveArena(Character chr) { if (!(eventClear && GameConstants.isAriantColiseumArena(chr.getMapId()))) { leaveArenaInternal(chr); } } - + private synchronized void leaveArenaInternal(Character chr) { if (exped != null) { if (exped.removeMember(chr)) { @@ -177,53 +176,53 @@ public class AriantColiseum { dispose(); } chr.setAriantColiseum(null); - + int shards = chr.countItem(4031868); chr.getAbstractPlayerInteraction().removeAll(4031868); chr.updateAriantScore(shards); } } } - + public void playerDisconnected(Character chr) { leaveArenaInternal(chr); } - + private void showArenaResults() { eventClear = true; - + if (map != null) { map.broadcastMessage(PacketCreator.showAriantScoreBoard()); map.killAllMonsters(); - + distributeAriantPoints(); } } - + private static boolean isUnfairMatch(Integer winnerScore, Integer secondScore, Integer lostShardsScore, List runnerupsScore) { if (winnerScore <= 0) { return false; } - + double runnerupsScoreCount = 0; for (Integer i : runnerupsScore) { runnerupsScoreCount += i; } - + runnerupsScoreCount += lostShardsScore; secondScore += lostShardsScore; - + double matchRes = runnerupsScoreCount / winnerScore; double runnerupRes = ((double) secondScore) / winnerScore; - + return matchRes < 0.81770726891980117713114871015349 && (runnerupsScoreCount < 7 || runnerupRes < 0.5929); } - + public void distributeAriantPoints() { int firstTop = -1, secondTop = -1; Character winner = null; List runnerups = new ArrayList<>(); - + for (Entry e : score.entrySet()) { Integer s = e.getValue(); if (s > firstTop) { @@ -233,17 +232,17 @@ public class AriantColiseum { } else if (s > secondTop) { secondTop = s; } - + runnerups.add(s); rewardTier.put(e.getKey(), (int) Math.floor(s / 10)); } - + runnerups.remove(firstTop); if (isUnfairMatch(firstTop, secondTop, map.getDroppedItemsCountById(4031868) + lostShards, runnerups)) { rewardTier.put(winner, 1); } } - + private ExpeditionType getExpeditionType() { ExpeditionType type; if (map.getId() == 980010101) { @@ -253,28 +252,28 @@ public class AriantColiseum { } else { type = ExpeditionType.ARIANT2; } - + return type; } - + private void enterKingsRoom() { exped.removeChannelExpedition(map.getChannelServer()); cancelAriantSchedules(); - + for (Character chr : map.getAllPlayers()) { chr.changeMap(980010010, 0); } } - + private synchronized void dispose() { if (exped != null) { exped.dispose(false); - + for (Character chr : exped.getActiveMembers()) { chr.setAriantColiseum(null); chr.changeMap(980010000, 0); } - + map.getWorldServer().registerTimedMapObject(() -> { score.clear(); exped = null; diff --git a/src/main/java/server/partyquest/GuardianSpawnPoint.java b/src/main/java/server/partyquest/GuardianSpawnPoint.java index 9f918f22d4..e2eacb17d3 100644 --- a/src/main/java/server/partyquest/GuardianSpawnPoint.java +++ b/src/main/java/server/partyquest/GuardianSpawnPoint.java @@ -1,9 +1,8 @@ package server.partyquest; -import java.awt.Point; +import java.awt.*; /** - * * @author David */ public class GuardianSpawnPoint { diff --git a/src/main/java/server/partyquest/MonsterCarnival.java b/src/main/java/server/partyquest/MonsterCarnival.java index 8402babe57..d0a5f31227 100644 --- a/src/main/java/server/partyquest/MonsterCarnival.java +++ b/src/main/java/server/partyquest/MonsterCarnival.java @@ -93,13 +93,13 @@ public class MonsterCarnival { } return; } - + // thanks Atoot, Vcoc for noting double CPQ functional being sent to players in CPQ start - + timer = TimerManager.getInstance().schedule(() -> timeUp(), map.getTimeDefault() * 1000); // thanks Atoot for noticing an irregular "event extended" issue here effectTimer = TimerManager.getInstance().schedule(() -> complete(), map.getTimeDefault() * 1000 - 10 * 1000); respawnTask = TimerManager.getInstance().register(() -> respawn(), YamlConfig.config.server.RESPAWN_INTERVAL); - + cs.initMonsterCarnival(cpq1, room); } catch (Exception e) { e.printStackTrace(); @@ -109,7 +109,7 @@ public class MonsterCarnival { private void respawn() { map.respawn(); } - + public void playerDisconnected(int charid) { int team = -1; for (PartyCharacter mpc : leader1.getParty().getMembers()) { @@ -155,7 +155,7 @@ public class MonsterCarnival { public boolean canSummonR() { return summonsR < map.getMaxMobs(); } - + public void summonR() { summonsR++; } @@ -163,11 +163,11 @@ public class MonsterCarnival { public boolean canSummonB() { return summonsB < map.getMaxMobs(); } - + public void summonB() { summonsB++; } - + public boolean canGuardianR() { int teamReactors = 0; for (Reactor react : map.getAllReactors()) { @@ -175,10 +175,10 @@ public class MonsterCarnival { teamReactors += 1; } } - + return teamReactors < map.getMaxReactors(); } - + public boolean canGuardianB() { int teamReactors = 0; for (Reactor react : map.getAllReactors()) { @@ -186,7 +186,7 @@ public class MonsterCarnival { teamReactors += 1; } } - + return teamReactors < map.getMaxReactors(); } @@ -238,7 +238,7 @@ public class MonsterCarnival { leader2.getParty().setEnemy(null); map.dispose(); map = null; - + cs.finishMonsterCarnival(cpq1, room); } @@ -345,9 +345,9 @@ public class MonsterCarnival { chrMap.dropMessage(5, LanguageConstants.getMessage(chrMap, LanguageConstants.CPQExtendTime)); } startTime = System.currentTimeMillis() + 3 * 60 * 1000; - + map.broadcastMessage(PacketCreator.getClock(3 * 60)); - + timer = TimerManager.getInstance().schedule(() -> timeUp(), map.getTimeExpand() * 1000); effectTimer = TimerManager.getInstance().schedule(() -> complete(), map.getTimeExpand() * 1000 - 10 * 1000); // thanks Vcoc for noticing a time set issue here } @@ -355,10 +355,10 @@ public class MonsterCarnival { public void complete() { int cp1 = this.redTotalCP; int cp2 = this.blueTotalCP; - + this.redTimeupCP = cp1; this.blueTimeupCP = cp2; - + if (cp1 == cp2) { return; } @@ -368,7 +368,7 @@ public class MonsterCarnival { if (chnl != chnl1) { throw new RuntimeException("Os lideres estao em canais diferentes."); } - + map.killAllMonsters(); for (PartyCharacter mpc : leader1.getParty().getMembers()) { Character mc = mpc.getPlayer(); @@ -509,11 +509,11 @@ public class MonsterCarnival { this.blueCP = CP; } } - + public int getRoom() { return this.room; } - + public MapleMap getEventMap() { return this.map; } diff --git a/src/main/java/server/partyquest/MonsterCarnivalParty.java b/src/main/java/server/partyquest/MonsterCarnivalParty.java index ff9ad810be..9dffa978ce 100644 --- a/src/main/java/server/partyquest/MonsterCarnivalParty.java +++ b/src/main/java/server/partyquest/MonsterCarnivalParty.java @@ -13,8 +13,8 @@ import java.util.List; public class MonsterCarnivalParty { private List members = new LinkedList<>(); - private Character leader; - private byte team; + private final Character leader; + private final byte team; private short availableCP = 0, totalCP = 0; private int summons = 8; private boolean winner = false; @@ -77,10 +77,11 @@ public class MonsterCarnivalParty { } public void warpOut() { - if (winner == true) + if (winner == true) { warpOut(980000003 + (leader.getMonsterCarnival().getRoom() * 100)); - else + } else { warpOut(980000004 + (leader.getMonsterCarnival().getRoom() * 100)); + } } public boolean allInMap(MapleMap map) { diff --git a/src/main/java/server/partyquest/PartyQuest.java b/src/main/java/server/partyquest/PartyQuest.java index 2851e080a1..ad2c00ecbf 100644 --- a/src/main/java/server/partyquest/PartyQuest.java +++ b/src/main/java/server/partyquest/PartyQuest.java @@ -32,7 +32,6 @@ import java.util.ArrayList; import java.util.List; /** - * * @author kevintjuh93 */ public class PartyQuest { @@ -49,8 +48,9 @@ public class PartyQuest { for (PartyCharacter pchr : party.getMembers()) { if (pchr.getChannel() == channel && pchr.getMapId() == mapid) { Character chr = Server.getInstance().getWorld(world).getChannel(channel).getPlayerStorage().getCharacterById(pchr.getId()); - if (chr != null) + if (chr != null) { this.participants.add(chr); + } } } } @@ -67,46 +67,48 @@ public class PartyQuest { synchronized (participants) { participants.remove(chr); chr.setPartyQuest(null); - if (participants.isEmpty()) super.finalize(); + if (participants.isEmpty()) { + super.finalize(); + } //System.gc(); } } - public static int getExp(String PQ, int level) { - if (PQ.equals("HenesysPQ")){ - return 1250 * level / 5; - } else if(PQ.equals("KerningPQFinal")){ - return 500 * level / 5; - } else if(PQ.equals("KerningPQ4th")){ - return 400 * level / 5; - } else if(PQ.equals("KerningPQ3rd")){ - return 300 * level / 5; - } else if(PQ.equals("KerningPQ2nd")){ - return 200 * level / 5; - } else if(PQ.equals("KerningPQ1st")){ - return 100 * level / 5; - } else if(PQ.equals("LudiMazePQ")){ - return 2000 * level / 5; - } else if(PQ.equals("LudiPQ1st")) { - return 100 * level / 5; - } else if(PQ.equals("LudiPQ2nd")) { - return 250 * level / 5; - } else if(PQ.equals("LudiPQ3rd")) { - return 350 * level / 5; - } else if(PQ.equals("LudiPQ4th")) { - return 350 * level / 5; - } else if(PQ.equals("LudiPQ5th")) { - return 400 * level / 5; - } else if(PQ.equals("LudiPQ6th")) { - return 450 * level / 5; - } else if(PQ.equals("LudiPQ7th")) { - return 500 * level / 5; - } else if(PQ.equals("LudiPQ8th")) { - return 650 * level / 5; - } else if(PQ.equals("LudiPQLast")) { - return 800 * level / 5; - } - FilePrinter.printError(FilePrinter.NPC, "Unhandled PartyQuest: " + PQ); - return 0; - } + public static int getExp(String PQ, int level) { + if (PQ.equals("HenesysPQ")) { + return 1250 * level / 5; + } else if (PQ.equals("KerningPQFinal")) { + return 500 * level / 5; + } else if (PQ.equals("KerningPQ4th")) { + return 400 * level / 5; + } else if (PQ.equals("KerningPQ3rd")) { + return 300 * level / 5; + } else if (PQ.equals("KerningPQ2nd")) { + return 200 * level / 5; + } else if (PQ.equals("KerningPQ1st")) { + return 100 * level / 5; + } else if (PQ.equals("LudiMazePQ")) { + return 2000 * level / 5; + } else if (PQ.equals("LudiPQ1st")) { + return 100 * level / 5; + } else if (PQ.equals("LudiPQ2nd")) { + return 250 * level / 5; + } else if (PQ.equals("LudiPQ3rd")) { + return 350 * level / 5; + } else if (PQ.equals("LudiPQ4th")) { + return 350 * level / 5; + } else if (PQ.equals("LudiPQ5th")) { + return 400 * level / 5; + } else if (PQ.equals("LudiPQ6th")) { + return 450 * level / 5; + } else if (PQ.equals("LudiPQ7th")) { + return 500 * level / 5; + } else if (PQ.equals("LudiPQ8th")) { + return 650 * level / 5; + } else if (PQ.equals("LudiPQLast")) { + return 800 * level / 5; + } + FilePrinter.printError(FilePrinter.NPC, "Unhandled PartyQuest: " + PQ); + return 0; + } } diff --git a/src/main/java/server/partyquest/Pyramid.java b/src/main/java/server/partyquest/Pyramid.java index 99a3bf89e6..75632ec7d2 100644 --- a/src/main/java/server/partyquest/Pyramid.java +++ b/src/main/java/server/partyquest/Pyramid.java @@ -31,7 +31,6 @@ import tools.PacketCreator; import java.util.concurrent.ScheduledFuture; /** - * * @author kevintjuh93 */ public class Pyramid extends PartyQuest { @@ -82,7 +81,9 @@ public class Pyramid extends PartyQuest { count = 0; gaugeSchedule = TimerManager.getInstance().register(() -> { gauge -= decrease; - if (gauge <= 0) warp(926010001); + if (gauge <= 0) { + warp(926010001); + } }, 1000); } @@ -90,23 +91,31 @@ public class Pyramid extends PartyQuest { public void kill() { kill++; - if (gauge < 100) count++; + if (gauge < 100) { + count++; + } gauge++; broadcastInfo("hit", kill); - if (gauge >= 100) gauge = 100; + if (gauge >= 100) { + gauge = 100; + } checkBuffs(); } public void cool() { cool++; int plus = coolAdd; - if ((gauge + coolAdd) > 100) plus -= ((gauge + coolAdd) - 100); + if ((gauge + coolAdd) > 100) { + plus -= ((gauge + coolAdd) - 100); + } gauge += plus; count += plus; - if (gauge >= 100) gauge = 100; + if (gauge >= 100) { + gauge = 100; + } broadcastInfo("cool", cool); checkBuffs(); - + } public void miss() { @@ -118,10 +127,11 @@ public class Pyramid extends PartyQuest { public int timer() { int value; - if (stage > 0) + if (stage > 0) { value = 180; - else + } else { value = 120; + } timer = TimerManager.getInstance().schedule(() -> { stage++; @@ -146,7 +156,9 @@ public class Pyramid extends PartyQuest { gaugeSchedule = null; timer.cancel(false); timer = null; - } else stage = 0; + } else { + stage = 0; + } } public void broadcastInfo(String info, int amount) { @@ -157,7 +169,9 @@ public class Pyramid extends PartyQuest { } public boolean useSkill() { - if (skill < 1) return false; + if (skill < 1) { + return false; + } skill--; broadcastInfo("skill", skill); @@ -169,8 +183,9 @@ public class Pyramid extends PartyQuest { if (buffcount == 0 && total >= 250) { buffcount++; ItemInformationProvider ii = ItemInformationProvider.getInstance(); - for (Character chr : getParticipants()) + for (Character chr : getParticipants()) { ii.getItemEffect(2022585).applyTo(chr); + } } else if (buffcount == 1 && total >= 500) { buffcount++; @@ -212,20 +227,34 @@ public class Pyramid extends PartyQuest { if (exp == 0) { int totalkills = (kill + cool); if (stage == 5) { - if (totalkills >= 3000) rank = 0; - else if (totalkills >= 2000) rank = 1; - else if (totalkills >= 1500) rank = 2; - else if(totalkills >= 500) rank = 3; - else rank = 4; + if (totalkills >= 3000) { + rank = 0; + } else if (totalkills >= 2000) { + rank = 1; + } else if (totalkills >= 1500) { + rank = 2; + } else if (totalkills >= 500) { + rank = 3; + } else { + rank = 4; + } } else { - if (totalkills >= 2000) rank = 3; - else rank = 4; + if (totalkills >= 2000) { + rank = 3; + } else { + rank = 4; + } } - if (rank == 0) exp = (60500 + (5500 * mode.getMode())); - else if(rank == 1) exp = (55000 + (5000 * mode.getMode())); - else if (rank == 2) exp = (46750 + (4250 * mode.getMode())); - else if (rank == 3) exp = (22000 + (2000 * mode.getMode())); + if (rank == 0) { + exp = (60500 + (5500 * mode.getMode())); + } else if (rank == 1) { + exp = (55000 + (5000 * mode.getMode())); + } else if (rank == 2) { + exp = (46750 + (4250 * mode.getMode())); + } else if (rank == 3) { + exp = (22000 + (2000 * mode.getMode())); + } exp += ((kill * 2) + (cool * 10)); } diff --git a/src/main/java/server/quest/actions/BuffAction.java b/src/main/java/server/quest/actions/BuffAction.java index 3f45ec59d0..696690000d 100644 --- a/src/main/java/server/quest/actions/BuffAction.java +++ b/src/main/java/server/quest/actions/BuffAction.java @@ -29,29 +29,28 @@ import server.quest.Quest; import server.quest.QuestActionType; /** - * * @author Tyler (Twdtwd) */ public class BuffAction extends AbstractQuestAction { - int itemEffect; - - public BuffAction(Quest quest, Data data) { - super(QuestActionType.BUFF, quest); - processData(data); - } - - @Override - public boolean check(Character chr, Integer extSelection) { - return true; - } - - @Override - public void processData(Data data) { - itemEffect = DataTool.getInt(data); - } - - @Override - public void run(Character chr, Integer extSelection) { - ItemInformationProvider.getInstance().getItemEffect(itemEffect).applyTo(chr); - } + int itemEffect; + + public BuffAction(Quest quest, Data data) { + super(QuestActionType.BUFF, quest); + processData(data); + } + + @Override + public boolean check(Character chr, Integer extSelection) { + return true; + } + + @Override + public void processData(Data data) { + itemEffect = DataTool.getInt(data); + } + + @Override + public void run(Character chr, Integer extSelection) { + ItemInformationProvider.getInstance().getItemEffect(itemEffect).applyTo(chr); + } } diff --git a/src/main/java/server/quest/actions/ExpAction.java b/src/main/java/server/quest/actions/ExpAction.java index 2a9dbb61a6..f2c42f6ac8 100644 --- a/src/main/java/server/quest/actions/ExpAction.java +++ b/src/main/java/server/quest/actions/ExpAction.java @@ -29,33 +29,32 @@ import server.quest.Quest; import server.quest.QuestActionType; /** - * * @author Tyler (Twdtwd) */ public class ExpAction extends AbstractQuestAction { - int exp; - - public ExpAction(Quest quest, Data data) { - super(QuestActionType.EXP, quest); - processData(data); - } - - - @Override - public void processData(Data data) { - exp = DataTool.getInt(data); - } - - @Override - public void run(Character chr, Integer extSelection) { - runAction(chr, exp); - } - - public static void runAction(Character chr, int gain) { - if (!YamlConfig.config.server.USE_QUEST_RATE) { - chr.gainExp(gain * chr.getExpRate(), true, true); - } else { - chr.gainExp(gain * chr.getQuestExpRate(), true, true); - } + int exp; + + public ExpAction(Quest quest, Data data) { + super(QuestActionType.EXP, quest); + processData(data); + } + + + @Override + public void processData(Data data) { + exp = DataTool.getInt(data); + } + + @Override + public void run(Character chr, Integer extSelection) { + runAction(chr, exp); + } + + public static void runAction(Character chr, int gain) { + if (!YamlConfig.config.server.USE_QUEST_RATE) { + chr.gainExp(gain * chr.getExpRate(), true, true); + } else { + chr.gainExp(gain * chr.getQuestExpRate(), true, true); } + } } diff --git a/src/main/java/server/quest/actions/FameAction.java b/src/main/java/server/quest/actions/FameAction.java index 3af4763d14..3f6c61662a 100644 --- a/src/main/java/server/quest/actions/FameAction.java +++ b/src/main/java/server/quest/actions/FameAction.java @@ -28,26 +28,25 @@ import server.quest.Quest; import server.quest.QuestActionType; /** - * * @author Tyler (Twdtwd) */ public class FameAction extends AbstractQuestAction { - int fame; - - public FameAction(Quest quest, Data data) { - super(QuestActionType.FAME, quest); - questID = quest.getId(); - processData(data); - } - - - @Override - public void processData(Data data) { - fame = DataTool.getInt(data); - } - - @Override - public void run(Character chr, Integer extSelection) { - chr.gainFame(fame); - } + int fame; + + public FameAction(Quest quest, Data data) { + super(QuestActionType.FAME, quest); + questID = quest.getId(); + processData(data); + } + + + @Override + public void processData(Data data) { + fame = DataTool.getInt(data); + } + + @Override + public void run(Character chr, Integer extSelection) { + chr.gainFame(fame); + } } diff --git a/src/main/java/server/quest/actions/InfoAction.java b/src/main/java/server/quest/actions/InfoAction.java index 7a8fbe50c2..a30d84fc87 100644 --- a/src/main/java/server/quest/actions/InfoAction.java +++ b/src/main/java/server/quest/actions/InfoAction.java @@ -26,29 +26,28 @@ import server.quest.Quest; import server.quest.QuestActionType; /** - * * @author Ronan */ public class InfoAction extends AbstractQuestAction { - - private String info; - private int questID; - public InfoAction(Quest quest, Data data) { - super(QuestActionType.INFO, quest); - questID = quest.getId(); - processData(data); - } + private String info; + private final int questID; - @Override - public void processData(Data data) { - info = DataTool.getString(data, ""); - } + public InfoAction(Quest quest, Data data) { + super(QuestActionType.INFO, quest); + questID = quest.getId(); + processData(data); + } + + @Override + public void processData(Data data) { + info = DataTool.getString(data, ""); + } - @Override - public void run(Character chr, Integer extSelection) { - chr.getAbstractPlayerInteraction().setQuestProgress(questID, info); - } - + @Override + public void run(Character chr, Integer extSelection) { + chr.getAbstractPlayerInteraction().setQuestProgress(questID, info); + } + } diff --git a/src/main/java/server/quest/actions/ItemAction.java b/src/main/java/server/quest/actions/ItemAction.java index 0ac27b85fd..a708b0aecc 100644 --- a/src/main/java/server/quest/actions/ItemAction.java +++ b/src/main/java/server/quest/actions/ItemAction.java @@ -43,316 +43,324 @@ import java.util.LinkedList; import java.util.List; /** - * * @author Tyler (Twdtwd) * @author Ronan */ public class ItemAction extends AbstractQuestAction { - List items = new ArrayList<>(); - - public ItemAction(Quest quest, Data data) { - super(QuestActionType.ITEM, quest); - processData(data); - } - - - @Override - public void processData(Data data) { - for (Data iEntry : data.getChildren()) { - int id = DataTool.getInt(iEntry.getChildByPath("id")); - int count = DataTool.getInt(iEntry.getChildByPath("count"), 1); - int period = DataTool.getInt(iEntry.getChildByPath("period"), 0); - - Integer prop = null; - Data propData = iEntry.getChildByPath("prop"); - if(propData != null) - prop = DataTool.getInt(propData); - - int gender = 2; - if (iEntry.getChildByPath("gender") != null) - gender = DataTool.getInt(iEntry.getChildByPath("gender")); - - int job = -1; - if (iEntry.getChildByPath("job") != null) - job = DataTool.getInt(iEntry.getChildByPath("job")); - - items.add(new ItemData(Integer.parseInt(iEntry.getName()), id, count, prop, job, gender, period)); - } - - items.sort((o1, o2) -> o1.map - o2.map); - } - - @Override - public void run(Character chr, Integer extSelection) { - List takeItem = new LinkedList<>(); - List giveItem = new LinkedList<>(); - - int props = 0, rndProps = 0, accProps = 0; - for(ItemData item : items) { - if(item.getProp() != null && item.getProp() != -1 && canGetItem(item, chr)) { - props += item.getProp(); - } - } - - int extNum = 0; - if (props > 0) { - rndProps = Randomizer.nextInt(props); - } - for (ItemData iEntry : items) { - if (!canGetItem(iEntry, chr)) { - continue; - } - - if(iEntry.getProp() != null) { - if(iEntry.getProp() == -1) { - if(extSelection != extNum++) - continue; - } else { - accProps += iEntry.getProp(); - - if(accProps <= rndProps) { - continue; - } else { - accProps = Integer.MIN_VALUE; - } - } - } - - if(iEntry.getCount() < 0) { // Remove Item - takeItem.add(iEntry); - } else { // Give Item - giveItem.add(iEntry); - } - } - - // must take all needed items before giving others - - for(ItemData iEntry: takeItem) { - int itemid = iEntry.getId(), count = iEntry.getCount(); - - InventoryType type = ItemConstants.getInventoryType(itemid); - int quantity = count * -1; // Invert - if(type.equals(InventoryType.EQUIP)) { - if(chr.getInventory(type).countById(itemid) < quantity) { - // Not enough in the equip inventoty, so check Equipped... - if(chr.getInventory(InventoryType.EQUIPPED).countById(itemid) > quantity) { - // Found it equipped, so change the type to equipped. - type = InventoryType.EQUIPPED; - } - } - } + List items = new ArrayList<>(); - InventoryManipulator.removeById(chr.getClient(), type, itemid, quantity, true, false); - chr.sendPacket(PacketCreator.getShowItemGain(itemid, (short) count, true)); - } - - for(ItemData iEntry: giveItem) { - int itemid = iEntry.getId(), count = iEntry.getCount(), period = iEntry.getPeriod(); // thanks Vcoc for noticing quest milestone item not getting removed from inventory after a while - - InventoryManipulator.addById(chr.getClient(), itemid, (short) count, "", -1, period > 0 ? (System.currentTimeMillis() + period * 60 * 1000) : -1); - chr.sendPacket(PacketCreator.getShowItemGain(itemid, (short) count, true)); - } - } - - @Override - public boolean check(Character chr, Integer extSelection) { - List> gainList = new LinkedList<>(); - List> selectList = new LinkedList<>(); - List> randomList = new LinkedList<>(); - - List allSlotUsed = new ArrayList(5); - for(byte i = 0; i < 5; i++) allSlotUsed.add(0); - - for(ItemData item : items) { - if (!canGetItem(item, chr)) { - continue; - } - - InventoryType type = ItemConstants.getInventoryType(item.getId()); - if(item.getProp() != null) { - Item toItem = new Item(item.getId(), (short) 0, (short) item.getCount()); - - if(item.getProp() < 0) { - selectList.add(new Pair<>(toItem, type)); - } else { - randomList.add(new Pair<>(toItem, type)); - } - - } else { - // Make sure they can hold the item. - Item toItem = new Item(item.getId(), (short) 0, (short) item.getCount()); - gainList.add(new Pair<>(toItem, type)); - - if(item.getCount() < 0) { - // Make sure they actually have the item. - int quantity = item.getCount() * -1; - - int freeSlotCount = chr.getInventory(type).freeSlotCountById(item.getId(), quantity); - if(freeSlotCount == -1) { - if(type.equals(InventoryType.EQUIP) && chr.getInventory(InventoryType.EQUIPPED).countById(item.getId()) > quantity) - continue; - - announceInventoryLimit(Collections.singletonList(item.getId()), chr); - return false; - } else { - int idx = type.getType() - 1; // more slots available from the given items! - allSlotUsed.set(idx, allSlotUsed.get(idx) - freeSlotCount); - } - } - } - } - - if(!randomList.isEmpty()) { - int result; - Client c = chr.getClient(); - - List rndUsed = new ArrayList(5); - for(byte i = 0; i < 5; i++) rndUsed.add(allSlotUsed.get(i)); - - for(Pair it: randomList) { - int idx = it.getRight().getType() - 1; - - result = InventoryManipulator.checkSpaceProgressively(c, it.getLeft().getItemId(), it.getLeft().getQuantity(), "", rndUsed.get(idx), false); - if(result % 2 == 0) { - announceInventoryLimit(Collections.singletonList(it.getLeft().getItemId()), chr); - return false; - } - - allSlotUsed.set(idx, Math.max(allSlotUsed.get(idx), result >> 1)); - } - } - - if(!selectList.isEmpty()) { - Pair selected = selectList.get(extSelection); - gainList.add(selected); - } - - if (!canHold(chr, gainList)) { - List gainItemids = new LinkedList<>(); - for (Pair it : gainList) { - gainItemids.add(it.getLeft().getItemId()); - } - - announceInventoryLimit(gainItemids, chr); - return false; - } - return true; - } - - private void announceInventoryLimit(List itemids, Character chr) { - for (Integer id : itemids) { - if (ItemInformationProvider.getInstance().isPickupRestricted(id) && chr.haveItemWithId(id, true)) { - chr.dropMessage(1, "Please check if you already have a similar one-of-a-kind item in your inventory."); - return; - } - } - - chr.dropMessage(1, "Please check if you have enough space in your inventory."); - } - - private boolean canHold(Character chr, List> gainList) { - List toAddItemids = new LinkedList<>(); - List toAddQuantity = new LinkedList<>(); - List toRemoveItemids = new LinkedList<>(); - List toRemoveQuantity = new LinkedList<>(); - - for (Pair item : gainList) { - Item it = item.getLeft(); + public ItemAction(Quest quest, Data data) { + super(QuestActionType.ITEM, quest); + processData(data); + } - if (it.getQuantity() > 0) { - toAddItemids.add(it.getItemId()); - toAddQuantity.add((int) it.getQuantity()); - } else { - toRemoveItemids.add(it.getItemId()); - toRemoveQuantity.add(-1 * ((int) it.getQuantity())); - } - } - - // thanks onechord for noticing quests unnecessarily giving out "full inventory" from quests that also takes items from players - return chr.getAbstractPlayerInteraction().canHoldAllAfterRemoving(toAddItemids, toAddQuantity, toRemoveItemids, toRemoveQuantity); - } - - private boolean canGetItem(ItemData item, Character chr) { - if (item.getGender() != 2 && item.getGender() != chr.getGender()) { - return false; - } - - if (item.job > 0) { - final List code = getJobBy5ByteEncoding(item.getJob()); - boolean jobFound = false; - for (int codec : code) { - if (codec / 100 == chr.getJob().getId() / 100) { - jobFound = true; - break; - } - } - return jobFound; - } - - return true; - } - - public boolean restoreLostItem(Character chr, int itemid) { - if (!ItemInformationProvider.getInstance().isQuestItem(itemid)) { - return false; + + @Override + public void processData(Data data) { + for (Data iEntry : data.getChildren()) { + int id = DataTool.getInt(iEntry.getChildByPath("id")); + int count = DataTool.getInt(iEntry.getChildByPath("count"), 1); + int period = DataTool.getInt(iEntry.getChildByPath("period"), 0); + + Integer prop = null; + Data propData = iEntry.getChildByPath("prop"); + if (propData != null) { + prop = DataTool.getInt(propData); } - - // thanks danielktran (MapleHeroesD) - for (ItemData item : items) { - if (item.getId() == itemid) { - int missingQty = item.getCount() - chr.countItem(itemid); - if (missingQty > 0) { - if (!chr.canHold(itemid, missingQty)) { - chr.dropMessage(1, "Please check if you have enough space in your inventory."); - return false; - } - - InventoryManipulator.addById(chr.getClient(), item.getId(), (short) missingQty); - FilePrinter.print(FilePrinter.QUEST_RESTORE_ITEM, chr + " obtained " + itemid + " qty. " + missingQty + " from quest " + questID); + + int gender = 2; + if (iEntry.getChildByPath("gender") != null) { + gender = DataTool.getInt(iEntry.getChildByPath("gender")); + } + + int job = -1; + if (iEntry.getChildByPath("job") != null) { + job = DataTool.getInt(iEntry.getChildByPath("job")); + } + + items.add(new ItemData(Integer.parseInt(iEntry.getName()), id, count, prop, job, gender, period)); + } + + items.sort((o1, o2) -> o1.map - o2.map); + } + + @Override + public void run(Character chr, Integer extSelection) { + List takeItem = new LinkedList<>(); + List giveItem = new LinkedList<>(); + + int props = 0, rndProps = 0, accProps = 0; + for (ItemData item : items) { + if (item.getProp() != null && item.getProp() != -1 && canGetItem(item, chr)) { + props += item.getProp(); + } + } + + int extNum = 0; + if (props > 0) { + rndProps = Randomizer.nextInt(props); + } + for (ItemData iEntry : items) { + if (!canGetItem(iEntry, chr)) { + continue; + } + + if (iEntry.getProp() != null) { + if (iEntry.getProp() == -1) { + if (extSelection != extNum++) { + continue; + } + } else { + accProps += iEntry.getProp(); + + if (accProps <= rndProps) { + continue; + } else { + accProps = Integer.MIN_VALUE; } - return true; } } - + + if (iEntry.getCount() < 0) { // Remove Item + takeItem.add(iEntry); + } else { // Give Item + giveItem.add(iEntry); + } + } + + // must take all needed items before giving others + + for (ItemData iEntry : takeItem) { + int itemid = iEntry.getId(), count = iEntry.getCount(); + + InventoryType type = ItemConstants.getInventoryType(itemid); + int quantity = count * -1; // Invert + if (type.equals(InventoryType.EQUIP)) { + if (chr.getInventory(type).countById(itemid) < quantity) { + // Not enough in the equip inventoty, so check Equipped... + if (chr.getInventory(InventoryType.EQUIPPED).countById(itemid) > quantity) { + // Found it equipped, so change the type to equipped. + type = InventoryType.EQUIPPED; + } + } + } + + InventoryManipulator.removeById(chr.getClient(), type, itemid, quantity, true, false); + chr.sendPacket(PacketCreator.getShowItemGain(itemid, (short) count, true)); + } + + for (ItemData iEntry : giveItem) { + int itemid = iEntry.getId(), count = iEntry.getCount(), period = iEntry.getPeriod(); // thanks Vcoc for noticing quest milestone item not getting removed from inventory after a while + + InventoryManipulator.addById(chr.getClient(), itemid, (short) count, "", -1, period > 0 ? (System.currentTimeMillis() + period * 60 * 1000) : -1); + chr.sendPacket(PacketCreator.getShowItemGain(itemid, (short) count, true)); + } + } + + @Override + public boolean check(Character chr, Integer extSelection) { + List> gainList = new LinkedList<>(); + List> selectList = new LinkedList<>(); + List> randomList = new LinkedList<>(); + + List allSlotUsed = new ArrayList(5); + for (byte i = 0; i < 5; i++) { + allSlotUsed.add(0); + } + + for (ItemData item : items) { + if (!canGetItem(item, chr)) { + continue; + } + + InventoryType type = ItemConstants.getInventoryType(item.getId()); + if (item.getProp() != null) { + Item toItem = new Item(item.getId(), (short) 0, (short) item.getCount()); + + if (item.getProp() < 0) { + selectList.add(new Pair<>(toItem, type)); + } else { + randomList.add(new Pair<>(toItem, type)); + } + + } else { + // Make sure they can hold the item. + Item toItem = new Item(item.getId(), (short) 0, (short) item.getCount()); + gainList.add(new Pair<>(toItem, type)); + + if (item.getCount() < 0) { + // Make sure they actually have the item. + int quantity = item.getCount() * -1; + + int freeSlotCount = chr.getInventory(type).freeSlotCountById(item.getId(), quantity); + if (freeSlotCount == -1) { + if (type.equals(InventoryType.EQUIP) && chr.getInventory(InventoryType.EQUIPPED).countById(item.getId()) > quantity) { + continue; + } + + announceInventoryLimit(Collections.singletonList(item.getId()), chr); + return false; + } else { + int idx = type.getType() - 1; // more slots available from the given items! + allSlotUsed.set(idx, allSlotUsed.get(idx) - freeSlotCount); + } + } + } + } + + if (!randomList.isEmpty()) { + int result; + Client c = chr.getClient(); + + List rndUsed = new ArrayList(5); + for (byte i = 0; i < 5; i++) { + rndUsed.add(allSlotUsed.get(i)); + } + + for (Pair it : randomList) { + int idx = it.getRight().getType() - 1; + + result = InventoryManipulator.checkSpaceProgressively(c, it.getLeft().getItemId(), it.getLeft().getQuantity(), "", rndUsed.get(idx), false); + if (result % 2 == 0) { + announceInventoryLimit(Collections.singletonList(it.getLeft().getItemId()), chr); + return false; + } + + allSlotUsed.set(idx, Math.max(allSlotUsed.get(idx), result >> 1)); + } + } + + if (!selectList.isEmpty()) { + Pair selected = selectList.get(extSelection); + gainList.add(selected); + } + + if (!canHold(chr, gainList)) { + List gainItemids = new LinkedList<>(); + for (Pair it : gainList) { + gainItemids.add(it.getLeft().getItemId()); + } + + announceInventoryLimit(gainItemids, chr); return false; } - - private class ItemData { - private final int map, id, count, job, gender, period; - private final Integer prop; - - public ItemData(int map, int id, int count, Integer prop, int job, int gender, int period) { - this.map = map; - this.id = id; - this.count = count; - this.prop = prop; - this.job = job; - this.gender = gender; - this.period = period; - } - - public int getId() { - return id; - } - - public int getCount() { - return count; - } - - public Integer getProp() { - return prop; - } - - public int getJob() { - return job; - } - - public int getGender() { - return gender; - } - - public int getPeriod() { - return period; - } - } + return true; + } + + private void announceInventoryLimit(List itemids, Character chr) { + for (Integer id : itemids) { + if (ItemInformationProvider.getInstance().isPickupRestricted(id) && chr.haveItemWithId(id, true)) { + chr.dropMessage(1, "Please check if you already have a similar one-of-a-kind item in your inventory."); + return; + } + } + + chr.dropMessage(1, "Please check if you have enough space in your inventory."); + } + + private boolean canHold(Character chr, List> gainList) { + List toAddItemids = new LinkedList<>(); + List toAddQuantity = new LinkedList<>(); + List toRemoveItemids = new LinkedList<>(); + List toRemoveQuantity = new LinkedList<>(); + + for (Pair item : gainList) { + Item it = item.getLeft(); + + if (it.getQuantity() > 0) { + toAddItemids.add(it.getItemId()); + toAddQuantity.add((int) it.getQuantity()); + } else { + toRemoveItemids.add(it.getItemId()); + toRemoveQuantity.add(-1 * ((int) it.getQuantity())); + } + } + + // thanks onechord for noticing quests unnecessarily giving out "full inventory" from quests that also takes items from players + return chr.getAbstractPlayerInteraction().canHoldAllAfterRemoving(toAddItemids, toAddQuantity, toRemoveItemids, toRemoveQuantity); + } + + private boolean canGetItem(ItemData item, Character chr) { + if (item.getGender() != 2 && item.getGender() != chr.getGender()) { + return false; + } + + if (item.job > 0) { + final List code = getJobBy5ByteEncoding(item.getJob()); + boolean jobFound = false; + for (int codec : code) { + if (codec / 100 == chr.getJob().getId() / 100) { + jobFound = true; + break; + } + } + return jobFound; + } + + return true; + } + + public boolean restoreLostItem(Character chr, int itemid) { + if (!ItemInformationProvider.getInstance().isQuestItem(itemid)) { + return false; + } + + // thanks danielktran (MapleHeroesD) + for (ItemData item : items) { + if (item.getId() == itemid) { + int missingQty = item.getCount() - chr.countItem(itemid); + if (missingQty > 0) { + if (!chr.canHold(itemid, missingQty)) { + chr.dropMessage(1, "Please check if you have enough space in your inventory."); + return false; + } + + InventoryManipulator.addById(chr.getClient(), item.getId(), (short) missingQty); + FilePrinter.print(FilePrinter.QUEST_RESTORE_ITEM, chr + " obtained " + itemid + " qty. " + missingQty + " from quest " + questID); + } + return true; + } + } + + return false; + } + + private class ItemData { + private final int map, id, count, job, gender, period; + private final Integer prop; + + public ItemData(int map, int id, int count, Integer prop, int job, int gender, int period) { + this.map = map; + this.id = id; + this.count = count; + this.prop = prop; + this.job = job; + this.gender = gender; + this.period = period; + } + + public int getId() { + return id; + } + + public int getCount() { + return count; + } + + public Integer getProp() { + return prop; + } + + public int getJob() { + return job; + } + + public int getGender() { + return gender; + } + + public int getPeriod() { + return period; + } + } } diff --git a/src/main/java/server/quest/actions/MesoAction.java b/src/main/java/server/quest/actions/MesoAction.java index 459930bb12..7b434f6d2f 100644 --- a/src/main/java/server/quest/actions/MesoAction.java +++ b/src/main/java/server/quest/actions/MesoAction.java @@ -29,38 +29,37 @@ import server.quest.Quest; import server.quest.QuestActionType; /** - * * @author Tyler (Twdtwd) */ public class MesoAction extends AbstractQuestAction { - int mesos; - - public MesoAction(Quest quest, Data data) { - super(QuestActionType.MESO, quest); - questID = quest.getId(); - processData(data); - } - - - @Override - public void processData(Data data) { - mesos = DataTool.getInt(data); - } - - @Override - public void run(Character chr, Integer extSelection) { - runAction(chr, mesos); - } - - public static void runAction(Character chr, int gain) { - if (gain < 0) { - chr.gainMeso(gain, true, false, true); - } else { - if (!YamlConfig.config.server.USE_QUEST_RATE) { - chr.gainMeso(gain * chr.getMesoRate(), true, false, true); - } else { - chr.gainMeso(gain * chr.getQuestMesoRate(), true, false, true); - } - } + int mesos; + + public MesoAction(Quest quest, Data data) { + super(QuestActionType.MESO, quest); + questID = quest.getId(); + processData(data); + } + + + @Override + public void processData(Data data) { + mesos = DataTool.getInt(data); + } + + @Override + public void run(Character chr, Integer extSelection) { + runAction(chr, mesos); + } + + public static void runAction(Character chr, int gain) { + if (gain < 0) { + chr.gainMeso(gain, true, false, true); + } else { + if (!YamlConfig.config.server.USE_QUEST_RATE) { + chr.gainMeso(gain * chr.getMesoRate(), true, false, true); + } else { + chr.gainMeso(gain * chr.getQuestMesoRate(), true, false, true); + } } + } } diff --git a/src/main/java/server/quest/actions/NextQuestAction.java b/src/main/java/server/quest/actions/NextQuestAction.java index 9ac7c83464..e55f09c91a 100644 --- a/src/main/java/server/quest/actions/NextQuestAction.java +++ b/src/main/java/server/quest/actions/NextQuestAction.java @@ -30,26 +30,25 @@ import server.quest.QuestActionType; import tools.PacketCreator; /** - * * @author Tyler (Twdtwd) */ public class NextQuestAction extends AbstractQuestAction { - int nextQuest; - - public NextQuestAction(Quest quest, Data data) { - super(QuestActionType.NEXTQUEST, quest); - processData(data); - } - - - @Override - public void processData(Data data) { - nextQuest = DataTool.getInt(data); - } - - @Override - public void run(Character chr, Integer extSelection) { - QuestStatus status = chr.getQuest(Quest.getInstance(questID)); - chr.sendPacket(PacketCreator.updateQuestFinish((short) questID, status.getNpc(), (short) nextQuest)); - } + int nextQuest; + + public NextQuestAction(Quest quest, Data data) { + super(QuestActionType.NEXTQUEST, quest); + processData(data); + } + + + @Override + public void processData(Data data) { + nextQuest = DataTool.getInt(data); + } + + @Override + public void run(Character chr, Integer extSelection) { + QuestStatus status = chr.getQuest(Quest.getInstance(questID)); + chr.sendPacket(PacketCreator.updateQuestFinish((short) questID, status.getNpc(), (short) nextQuest)); + } } diff --git a/src/main/java/server/quest/actions/PetSkillAction.java b/src/main/java/server/quest/actions/PetSkillAction.java index f310d59ee5..e544fc6727 100644 --- a/src/main/java/server/quest/actions/PetSkillAction.java +++ b/src/main/java/server/quest/actions/PetSkillAction.java @@ -30,35 +30,35 @@ import server.quest.Quest; import server.quest.QuestActionType; /** - * * @author Tyler (Twdtwd) */ public class PetSkillAction extends AbstractQuestAction { - int flag; - - public PetSkillAction(Quest quest, Data data) { - super(QuestActionType.PETSKILL, quest); - questID = quest.getId(); - processData(data); - } - - - @Override - public void processData(Data data) { - flag = DataTool.getInt("petskill", data); - } - - @Override - public boolean check(Character chr, Integer extSelection) { - QuestStatus status = chr.getQuest(Quest.getInstance(questID)); - if(!(status.getStatus() == QuestStatus.Status.NOT_STARTED && status.getForfeited() > 0)) - return false; - - return chr.getPet(0) != null; - } - - @Override - public void run(Character chr, Integer extSelection) { - chr.getPet(0).setFlag((byte) ItemConstants.getFlagByInt(flag)); - } + int flag; + + public PetSkillAction(Quest quest, Data data) { + super(QuestActionType.PETSKILL, quest); + questID = quest.getId(); + processData(data); + } + + + @Override + public void processData(Data data) { + flag = DataTool.getInt("petskill", data); + } + + @Override + public boolean check(Character chr, Integer extSelection) { + QuestStatus status = chr.getQuest(Quest.getInstance(questID)); + if (!(status.getStatus() == QuestStatus.Status.NOT_STARTED && status.getForfeited() > 0)) { + return false; + } + + return chr.getPet(0) != null; + } + + @Override + public void run(Character chr, Integer extSelection) { + chr.getPet(0).setFlag((byte) ItemConstants.getFlagByInt(flag)); + } } diff --git a/src/main/java/server/quest/actions/PetSpeedAction.java b/src/main/java/server/quest/actions/PetSpeedAction.java index cd1b997707..b90894eced 100644 --- a/src/main/java/server/quest/actions/PetSpeedAction.java +++ b/src/main/java/server/quest/actions/PetSpeedAction.java @@ -27,33 +27,34 @@ import server.quest.Quest; import server.quest.QuestActionType; /** - * * @author Ronan */ public class PetSpeedAction extends AbstractQuestAction { - - public PetSpeedAction(Quest quest, Data data) { - super(QuestActionType.PETTAMENESS, quest); - questID = quest.getId(); - } - - - @Override - public void processData(Data data) {} - - @Override - public void run(Character chr, Integer extSelection) { - Client c = chr.getClient(); - - Pet pet = chr.getPet(0); // assuming here only the pet leader will gain owner speed - if(pet == null) return; - - c.lockClient(); - try { - pet.addPetFlag(c.getPlayer(), Pet.PetFlag.OWNER_SPEED); - } finally { - c.unlockClient(); - } - - } + + public PetSpeedAction(Quest quest, Data data) { + super(QuestActionType.PETTAMENESS, quest); + questID = quest.getId(); + } + + + @Override + public void processData(Data data) {} + + @Override + public void run(Character chr, Integer extSelection) { + Client c = chr.getClient(); + + Pet pet = chr.getPet(0); // assuming here only the pet leader will gain owner speed + if (pet == null) { + return; + } + + c.lockClient(); + try { + pet.addPetFlag(c.getPlayer(), Pet.PetFlag.OWNER_SPEED); + } finally { + c.unlockClient(); + } + + } } diff --git a/src/main/java/server/quest/actions/PetTamenessAction.java b/src/main/java/server/quest/actions/PetTamenessAction.java index fa32db7829..0a177a79cf 100644 --- a/src/main/java/server/quest/actions/PetTamenessAction.java +++ b/src/main/java/server/quest/actions/PetTamenessAction.java @@ -28,36 +28,37 @@ import server.quest.Quest; import server.quest.QuestActionType; /** - * * @author Ronan */ public class PetTamenessAction extends AbstractQuestAction { - int tameness; - - public PetTamenessAction(Quest quest, Data data) { - super(QuestActionType.PETTAMENESS, quest); - questID = quest.getId(); - processData(data); - } - - - @Override - public void processData(Data data) { - tameness = DataTool.getInt(data); - } - - @Override - public void run(Character chr, Integer extSelection) { - Client c = chr.getClient(); - - Pet pet = chr.getPet(0); // assuming here only the pet leader will gain tameness - if(pet == null) return; - - c.lockClient(); - try { - pet.gainClosenessFullness(chr, tameness, 0, 0); - } finally { - c.unlockClient(); - } - } + int tameness; + + public PetTamenessAction(Quest quest, Data data) { + super(QuestActionType.PETTAMENESS, quest); + questID = quest.getId(); + processData(data); + } + + + @Override + public void processData(Data data) { + tameness = DataTool.getInt(data); + } + + @Override + public void run(Character chr, Integer extSelection) { + Client c = chr.getClient(); + + Pet pet = chr.getPet(0); // assuming here only the pet leader will gain tameness + if (pet == null) { + return; + } + + c.lockClient(); + try { + pet.gainClosenessFullness(chr, tameness, 0, 0); + } finally { + c.unlockClient(); + } + } } diff --git a/src/main/java/server/quest/actions/QuestAction.java b/src/main/java/server/quest/actions/QuestAction.java index 8f26c74f10..dfbe11e556 100644 --- a/src/main/java/server/quest/actions/QuestAction.java +++ b/src/main/java/server/quest/actions/QuestAction.java @@ -32,34 +32,33 @@ import java.util.HashMap; import java.util.Map; /** - * * @author Tyler (Twdtwd) */ public class QuestAction extends AbstractQuestAction { - int mesos; - Map quests = new HashMap<>(); - - public QuestAction(Quest quest, Data data) { - super(QuestActionType.QUEST, quest); - questID = quest.getId(); - processData(data); - } - - - @Override - public void processData(Data data) { - for (Data qEntry : data) { - int questid = DataTool.getInt(qEntry.getChildByPath("id")); - int stat = DataTool.getInt(qEntry.getChildByPath("state")); - quests.put(questid, stat); - } - } - - @Override - public void run(Character chr, Integer extSelection) { - for(Integer questID : quests.keySet()) { - int stat = quests.get(questID); - chr.updateQuestStatus(new QuestStatus(Quest.getInstance(questID), QuestStatus.Status.getById(stat))); - } - } + int mesos; + Map quests = new HashMap<>(); + + public QuestAction(Quest quest, Data data) { + super(QuestActionType.QUEST, quest); + questID = quest.getId(); + processData(data); + } + + + @Override + public void processData(Data data) { + for (Data qEntry : data) { + int questid = DataTool.getInt(qEntry.getChildByPath("id")); + int stat = DataTool.getInt(qEntry.getChildByPath("state")); + quests.put(questid, stat); + } + } + + @Override + public void run(Character chr, Integer extSelection) { + for (Integer questID : quests.keySet()) { + int stat = quests.get(questID); + chr.updateQuestStatus(new QuestStatus(Quest.getInstance(questID), QuestStatus.Status.getById(stat))); + } + } } diff --git a/src/main/java/server/quest/actions/SkillAction.java b/src/main/java/server/quest/actions/SkillAction.java index c825246d13..b805fe39b5 100644 --- a/src/main/java/server/quest/actions/SkillAction.java +++ b/src/main/java/server/quest/actions/SkillAction.java @@ -36,88 +36,87 @@ import java.util.List; import java.util.Map; /** - * * @author Tyler (Twdtwd) */ public class SkillAction extends AbstractQuestAction { - int itemEffect; - Map skillData = new HashMap<>(); - - public SkillAction(Quest quest, Data data) { - super(QuestActionType.SKILL, quest); - processData(data); - } - - - @Override - public void processData(Data data) { - for (Data sEntry : data) { - byte skillLevel = 0; - int skillid = DataTool.getInt(sEntry.getChildByPath("id")); - Data skillLevelData = sEntry.getChildByPath("skillLevel"); - if(skillLevelData != null) - skillLevel = (byte) DataTool.getInt(skillLevelData); - int masterLevel = DataTool.getInt(sEntry.getChildByPath("masterLevel")); - List jobs = new ArrayList<>(); - - Data applicableJobs = sEntry.getChildByPath("job"); - if(applicableJobs != null) { - for (Data applicableJob : applicableJobs.getChildren()) { - jobs.add(DataTool.getInt(applicableJob)); - } - } - - skillData.put(skillid, new SkillData(skillid, skillLevel, masterLevel, jobs)); - } - } - - @Override - public void run(Character chr, Integer extSelection) { - for(SkillData skill : skillData.values()) { - Skill skillObject = SkillFactory.getSkill(skill.getId()); - if(skillObject == null) continue; - - boolean shouldLearn = false; - - if(skill.jobsContains(chr.getJob()) || skillObject.isBeginnerSkill()) - shouldLearn = true; - - byte skillLevel = (byte) Math.max(skill.getLevel(), chr.getSkillLevel(skillObject)); - int masterLevel = Math.max(skill.getMasterLevel(), chr.getMasterLevel(skillObject)); - if (shouldLearn) { - chr.changeSkillLevel(skillObject, skillLevel, masterLevel, -1); - } - - } - } - - private class SkillData { - protected int id, level, masterLevel; - List jobs = new ArrayList<>(); - - public SkillData(int id, int level, int masterLevel, List jobs) { - this.id = id; - this.level = level; - this.masterLevel = masterLevel; - this.jobs = jobs; - } - - public int getId() { - return id; - } - - public int getLevel() { - return level; - } - - public int getMasterLevel() { - return masterLevel; - } - - public boolean jobsContains(Job job) { - return jobs.contains(job.getId()); - } - - - } + int itemEffect; + Map skillData = new HashMap<>(); + + public SkillAction(Quest quest, Data data) { + super(QuestActionType.SKILL, quest); + processData(data); + } + + + @Override + public void processData(Data data) { + for (Data sEntry : data) { + byte skillLevel = 0; + int skillid = DataTool.getInt(sEntry.getChildByPath("id")); + Data skillLevelData = sEntry.getChildByPath("skillLevel"); + if (skillLevelData != null) { + skillLevel = (byte) DataTool.getInt(skillLevelData); + } + int masterLevel = DataTool.getInt(sEntry.getChildByPath("masterLevel")); + List jobs = new ArrayList<>(); + + Data applicableJobs = sEntry.getChildByPath("job"); + if (applicableJobs != null) { + for (Data applicableJob : applicableJobs.getChildren()) { + jobs.add(DataTool.getInt(applicableJob)); + } + } + + skillData.put(skillid, new SkillData(skillid, skillLevel, masterLevel, jobs)); + } + } + + @Override + public void run(Character chr, Integer extSelection) { + for (SkillData skill : skillData.values()) { + Skill skillObject = SkillFactory.getSkill(skill.getId()); + if (skillObject == null) { + continue; + } + + boolean shouldLearn = skill.jobsContains(chr.getJob()) || skillObject.isBeginnerSkill(); + + byte skillLevel = (byte) Math.max(skill.getLevel(), chr.getSkillLevel(skillObject)); + int masterLevel = Math.max(skill.getMasterLevel(), chr.getMasterLevel(skillObject)); + if (shouldLearn) { + chr.changeSkillLevel(skillObject, skillLevel, masterLevel, -1); + } + + } + } + + private class SkillData { + protected int id, level, masterLevel; + List jobs = new ArrayList<>(); + + public SkillData(int id, int level, int masterLevel, List jobs) { + this.id = id; + this.level = level; + this.masterLevel = masterLevel; + this.jobs = jobs; + } + + public int getId() { + return id; + } + + public int getLevel() { + return level; + } + + public int getMasterLevel() { + return masterLevel; + } + + public boolean jobsContains(Job job) { + return jobs.contains(job.getId()); + } + + + } } \ No newline at end of file diff --git a/src/main/java/server/quest/requirements/BuffExceptRequirement.java b/src/main/java/server/quest/requirements/BuffExceptRequirement.java index c79e63ba6b..c4dda6607f 100644 --- a/src/main/java/server/quest/requirements/BuffExceptRequirement.java +++ b/src/main/java/server/quest/requirements/BuffExceptRequirement.java @@ -26,25 +26,24 @@ import server.quest.Quest; import server.quest.QuestRequirementType; /** - * * @author Ronan */ public class BuffExceptRequirement extends AbstractQuestRequirement { - private int buffId = -1; - - public BuffExceptRequirement(Quest quest, Data data) { - super(QuestRequirementType.BUFF); - processData(data); - } - - @Override - public void processData(Data data) { - // item buffs are negative - buffId = -1 * Integer.parseInt(DataTool.getString(data)); - } - - @Override - public boolean check(Character chr, Integer npcid) { - return !chr.hasBuffFromSourceid(buffId); - } + private int buffId = -1; + + public BuffExceptRequirement(Quest quest, Data data) { + super(QuestRequirementType.BUFF); + processData(data); + } + + @Override + public void processData(Data data) { + // item buffs are negative + buffId = -1 * Integer.parseInt(DataTool.getString(data)); + } + + @Override + public boolean check(Character chr, Integer npcid) { + return !chr.hasBuffFromSourceid(buffId); + } } diff --git a/src/main/java/server/quest/requirements/BuffRequirement.java b/src/main/java/server/quest/requirements/BuffRequirement.java index 064f1fc39c..71b78d951e 100644 --- a/src/main/java/server/quest/requirements/BuffRequirement.java +++ b/src/main/java/server/quest/requirements/BuffRequirement.java @@ -26,25 +26,24 @@ import server.quest.Quest; import server.quest.QuestRequirementType; /** - * * @author Ronan */ public class BuffRequirement extends AbstractQuestRequirement { - private int buffId = 1; - - public BuffRequirement(Quest quest, Data data) { - super(QuestRequirementType.BUFF); - processData(data); - } - - @Override - public void processData(Data data) { - // item buffs are negative - buffId = -1 * Integer.parseInt(DataTool.getString(data)); - } - - @Override - public boolean check(Character chr, Integer npcid) { - return chr.hasBuffFromSourceid(buffId); - } + private int buffId = 1; + + public BuffRequirement(Quest quest, Data data) { + super(QuestRequirementType.BUFF); + processData(data); + } + + @Override + public void processData(Data data) { + // item buffs are negative + buffId = -1 * Integer.parseInt(DataTool.getString(data)); + } + + @Override + public boolean check(Character chr, Integer npcid) { + return chr.hasBuffFromSourceid(buffId); + } } diff --git a/src/main/java/server/quest/requirements/CompletedQuestRequirement.java b/src/main/java/server/quest/requirements/CompletedQuestRequirement.java index 6ff61ab621..4b0f52251c 100644 --- a/src/main/java/server/quest/requirements/CompletedQuestRequirement.java +++ b/src/main/java/server/quest/requirements/CompletedQuestRequirement.java @@ -28,26 +28,25 @@ import server.quest.Quest; import server.quest.QuestRequirementType; /** - * * @author Tyler (Twdtwd) */ public class CompletedQuestRequirement extends AbstractQuestRequirement { - private int reqQuest; - - - public CompletedQuestRequirement(Quest quest, Data data) { - super(QuestRequirementType.COMPLETED_QUEST); - processData(data); - } - - @Override - public void processData(Data data) { - reqQuest = DataTool.getInt(data); - } - - - @Override - public boolean check(Character chr, Integer npcid) { - return chr.getCompletedQuests().size() >= reqQuest; - } + private int reqQuest; + + + public CompletedQuestRequirement(Quest quest, Data data) { + super(QuestRequirementType.COMPLETED_QUEST); + processData(data); + } + + @Override + public void processData(Data data) { + reqQuest = DataTool.getInt(data); + } + + + @Override + public boolean check(Character chr, Integer npcid) { + return chr.getCompletedQuests().size() >= reqQuest; + } } diff --git a/src/main/java/server/quest/requirements/EndDateRequirement.java b/src/main/java/server/quest/requirements/EndDateRequirement.java index ccf01fb10e..1953450ef3 100644 --- a/src/main/java/server/quest/requirements/EndDateRequirement.java +++ b/src/main/java/server/quest/requirements/EndDateRequirement.java @@ -30,32 +30,30 @@ import server.quest.QuestRequirementType; import java.util.Calendar; /** - * * @author Tyler (Twdtwd) */ public class EndDateRequirement extends AbstractQuestRequirement { - private String timeStr; - - - public EndDateRequirement(Quest quest, Data data) { - super(QuestRequirementType.END_DATE); - processData(data); - } - - /** - * - * @param data - */ - @Override - public void processData(Data data) { - timeStr = DataTool.getString(data); - } - - - @Override - public boolean check(Character chr, Integer npcid) { - Calendar cal = Calendar.getInstance(); - cal.set(Integer.parseInt(timeStr.substring(0, 4)), Integer.parseInt(timeStr.substring(4, 6)), Integer.parseInt(timeStr.substring(6, 8)), Integer.parseInt(timeStr.substring(8, 10)), 0); - return cal.getTimeInMillis() >= System.currentTimeMillis(); - } + private String timeStr; + + + public EndDateRequirement(Quest quest, Data data) { + super(QuestRequirementType.END_DATE); + processData(data); + } + + /** + * @param data + */ + @Override + public void processData(Data data) { + timeStr = DataTool.getString(data); + } + + + @Override + public boolean check(Character chr, Integer npcid) { + Calendar cal = Calendar.getInstance(); + cal.set(Integer.parseInt(timeStr.substring(0, 4)), Integer.parseInt(timeStr.substring(4, 6)), Integer.parseInt(timeStr.substring(6, 8)), Integer.parseInt(timeStr.substring(8, 10)), 0); + return cal.getTimeInMillis() >= System.currentTimeMillis(); + } } diff --git a/src/main/java/server/quest/requirements/FieldEnterRequirement.java b/src/main/java/server/quest/requirements/FieldEnterRequirement.java index e69b913cb0..a1f75626fa 100644 --- a/src/main/java/server/quest/requirements/FieldEnterRequirement.java +++ b/src/main/java/server/quest/requirements/FieldEnterRequirement.java @@ -28,29 +28,28 @@ import server.quest.Quest; import server.quest.QuestRequirementType; /** - * * @author Tyler (Twdtwd) */ public class FieldEnterRequirement extends AbstractQuestRequirement { - private int mapId = -1; - - - public FieldEnterRequirement(Quest quest, Data data) { - super(QuestRequirementType.FIELD_ENTER); - processData(data); - } - - @Override - public void processData(Data data) { - Data zeroField = data.getChildByPath("0"); - if (zeroField != null) { - mapId = DataTool.getInt(zeroField); - } - } - - - @Override - public boolean check(Character chr, Integer npcid) { - return mapId == chr.getMapId(); - } + private int mapId = -1; + + + public FieldEnterRequirement(Quest quest, Data data) { + super(QuestRequirementType.FIELD_ENTER); + processData(data); + } + + @Override + public void processData(Data data) { + Data zeroField = data.getChildByPath("0"); + if (zeroField != null) { + mapId = DataTool.getInt(zeroField); + } + } + + + @Override + public boolean check(Character chr, Integer npcid) { + return mapId == chr.getMapId(); + } } diff --git a/src/main/java/server/quest/requirements/InfoExRequirement.java b/src/main/java/server/quest/requirements/InfoExRequirement.java index 50e36c170b..5dcfced984 100644 --- a/src/main/java/server/quest/requirements/InfoExRequirement.java +++ b/src/main/java/server/quest/requirements/InfoExRequirement.java @@ -31,36 +31,35 @@ import java.util.ArrayList; import java.util.List; /** - * * @author Tyler (Twdtwd) */ public class InfoExRequirement extends AbstractQuestRequirement { - private List infoExpected = new ArrayList<>(); - private int questID; - - - public InfoExRequirement(Quest quest, Data data) { - super(QuestRequirementType.INFO_EX); - questID = quest.getId(); - processData(data); - } - - @Override - public void processData(Data data) { - // Because we have to... - for(Data infoEx : data.getChildren()) { - Data value = infoEx.getChildByPath("value"); - infoExpected.add(DataTool.getString(value, "")); - } - } - - - @Override - public boolean check(Character chr, Integer npcid) { - return true; - } - - public List getInfo() { - return infoExpected; + private final List infoExpected = new ArrayList<>(); + private final int questID; + + + public InfoExRequirement(Quest quest, Data data) { + super(QuestRequirementType.INFO_EX); + questID = quest.getId(); + processData(data); + } + + @Override + public void processData(Data data) { + // Because we have to... + for (Data infoEx : data.getChildren()) { + Data value = infoEx.getChildByPath("value"); + infoExpected.add(DataTool.getString(value, "")); } + } + + + @Override + public boolean check(Character chr, Integer npcid) { + return true; + } + + public List getInfo() { + return infoExpected; + } } diff --git a/src/main/java/server/quest/requirements/InfoNumberRequirement.java b/src/main/java/server/quest/requirements/InfoNumberRequirement.java index f3f78f1c2d..b308d668e1 100644 --- a/src/main/java/server/quest/requirements/InfoNumberRequirement.java +++ b/src/main/java/server/quest/requirements/InfoNumberRequirement.java @@ -26,32 +26,31 @@ import server.quest.Quest; import server.quest.QuestRequirementType; /** - * * @author Ronan */ public class InfoNumberRequirement extends AbstractQuestRequirement { - - private short infoNumber; - private int questID; - public InfoNumberRequirement(Quest quest, Data data) { - super(QuestRequirementType.INFO_NUMBER); - questID = quest.getId(); - processData(data); - } + private short infoNumber; + private final int questID; - @Override - public void processData(Data data) { - infoNumber = (short) DataTool.getIntConvert(data, 0); - } + public InfoNumberRequirement(Quest quest, Data data) { + super(QuestRequirementType.INFO_NUMBER); + questID = quest.getId(); + processData(data); + } + + @Override + public void processData(Data data) { + infoNumber = (short) DataTool.getIntConvert(data, 0); + } - @Override - public boolean check(Character chr, Integer npcid) { - return true; - } + @Override + public boolean check(Character chr, Integer npcid) { + return true; + } - public short getInfoNumber() { - return infoNumber; - } + public short getInfoNumber() { + return infoNumber; + } } diff --git a/src/main/java/server/quest/requirements/IntervalRequirement.java b/src/main/java/server/quest/requirements/IntervalRequirement.java index be85edc793..a6f6ca0bec 100644 --- a/src/main/java/server/quest/requirements/IntervalRequirement.java +++ b/src/main/java/server/quest/requirements/IntervalRequirement.java @@ -29,69 +29,69 @@ import server.quest.Quest; import server.quest.QuestRequirementType; /** - * * @author Tyler (Twdtwd) */ public class IntervalRequirement extends AbstractQuestRequirement { - private int interval = -1; - private int questID; - - public IntervalRequirement(Quest quest, Data data) { - super(QuestRequirementType.INTERVAL); - questID = quest.getId(); - processData(data); - } - - public int getInterval() { - return interval; + private int interval = -1; + private final int questID; + + public IntervalRequirement(Quest quest, Data data) { + super(QuestRequirementType.INTERVAL); + questID = quest.getId(); + processData(data); + } + + public int getInterval() { + return interval; + } + + @Override + public void processData(Data data) { + interval = DataTool.getInt(data) * 60 * 1000; + } + + private static String getIntervalTimeLeft(Character chr, IntervalRequirement r) { + StringBuilder str = new StringBuilder(); + + long futureTime = chr.getQuest(Quest.getInstance(r.questID)).getCompletionTime() + r.getInterval(); + long leftTime = futureTime - System.currentTimeMillis(); + + byte mode = 0; + if (leftTime / (60 * 1000) > 0) { + mode++; //counts minutes + + if (leftTime / (60 * 60 * 1000) > 0) { + mode++; //counts hours + } } - - @Override - public void processData(Data data) { - interval = DataTool.getInt(data) * 60 * 1000; - } - - private static String getIntervalTimeLeft(Character chr, IntervalRequirement r) { - StringBuilder str = new StringBuilder(); - long futureTime = chr.getQuest(Quest.getInstance(r.questID)).getCompletionTime() + r.getInterval(); - long leftTime = futureTime - System.currentTimeMillis(); + switch (mode) { + case 2: + int hours = (int) ((leftTime / (1000 * 60 * 60))); + str.append(hours + " hours, "); - byte mode = 0; - if(leftTime / (60*1000) > 0) { - mode++; //counts minutes + case 1: + int minutes = (int) ((leftTime / (1000 * 60)) % 60); + str.append(minutes + " minutes, "); - if(leftTime / (60*60*1000) > 0) - mode++; //counts hours - } - - switch(mode) { - case 2: - int hours = (int) ((leftTime / (1000*60*60))); - str.append(hours + " hours, "); - - case 1: - int minutes = (int) ((leftTime / (1000*60)) % 60); - str.append(minutes + " minutes, "); - - default: - int seconds = (int) (leftTime / 1000) % 60 ; - str.append(seconds + " seconds"); - } - - return str.toString(); + default: + int seconds = (int) (leftTime / 1000) % 60; + str.append(seconds + " seconds"); } - - @Override - public boolean check(Character chr, Integer npcid) { - boolean check = !chr.getQuest(Quest.getInstance(questID)).getStatus().equals(QuestStatus.Status.COMPLETED); - boolean check2 = chr.getQuest(Quest.getInstance(questID)).getCompletionTime() <= System.currentTimeMillis() - interval; - - if (check || check2) { - return true; - } else { - chr.message("This quest will become available again in approximately " + getIntervalTimeLeft(chr, this) + "."); - return false; - } - } + + return str.toString(); + } + + @Override + public boolean check(Character chr, Integer npcid) { + boolean check = !chr.getQuest(Quest.getInstance(questID)).getStatus().equals(QuestStatus.Status.COMPLETED); + boolean check2 = chr.getQuest(Quest.getInstance(questID)).getCompletionTime() <= System.currentTimeMillis() - interval; + + if (check || check2) { + return true; + } else { + chr.message("This quest will become available again in approximately " + getIntervalTimeLeft(chr, this) + "."); + return false; + } + } } diff --git a/src/main/java/server/quest/requirements/ItemRequirement.java b/src/main/java/server/quest/requirements/ItemRequirement.java index d47554f2d2..4966e9f67d 100644 --- a/src/main/java/server/quest/requirements/ItemRequirement.java +++ b/src/main/java/server/quest/requirements/ItemRequirement.java @@ -35,73 +35,72 @@ import java.util.HashMap; import java.util.Map; /** - * * @author Tyler (Twdtwd) */ public class ItemRequirement extends AbstractQuestRequirement { - Map items = new HashMap<>(); - - - public ItemRequirement(Quest quest, Data data) { - super(QuestRequirementType.ITEM); - processData(data); - } - - @Override - public void processData(Data data) { - for (Data itemEntry : data.getChildren()) { - int itemId = DataTool.getInt(itemEntry.getChildByPath("id")); - int count = DataTool.getInt(itemEntry.getChildByPath("count"), 0); - - items.put(itemId, count); - } - } - - - @Override - public boolean check(Character chr, Integer npcid) { - ItemInformationProvider ii = ItemInformationProvider.getInstance(); - for(Integer itemId : items.keySet()) { - int countNeeded = items.get(itemId); - int count = 0; - - InventoryType iType = ItemConstants.getInventoryType(itemId); - - if (iType.equals(InventoryType.UNDEFINED)) { - return false; - } - for (Item item : chr.getInventory(iType).listById(itemId)) { - count += item.getQuantity(); - } - //Weird stuff, nexon made some quests only available when wearing gm clothes. This enables us to accept it >< - if (iType.equals(InventoryType.EQUIP) && !ItemConstants.isMedal(itemId)) { - if(chr.isGM()) { - for (Item item : chr.getInventory(InventoryType.EQUIPPED).listById(itemId)) { - count += item.getQuantity(); - } - } else { - if(count < countNeeded) { - if(chr.getInventory(InventoryType.EQUIPPED).countById(itemId) + count >= countNeeded) { - chr.dropMessage(5, "Unequip the required " + ii.getName(itemId) + " before trying this quest operation."); - return false; - } - } - } - } - - if(count < countNeeded || countNeeded <= 0 && count > 0) { - return false; - } - } - return true; - } - - public int getItemAmountNeeded(int itemid, boolean complete) { - Integer amount = items.get(itemid); - if (amount != null) { - return amount; - } else { - return complete ? Integer.MAX_VALUE : Integer.MIN_VALUE; + Map items = new HashMap<>(); + + + public ItemRequirement(Quest quest, Data data) { + super(QuestRequirementType.ITEM); + processData(data); + } + + @Override + public void processData(Data data) { + for (Data itemEntry : data.getChildren()) { + int itemId = DataTool.getInt(itemEntry.getChildByPath("id")); + int count = DataTool.getInt(itemEntry.getChildByPath("count"), 0); + + items.put(itemId, count); + } + } + + + @Override + public boolean check(Character chr, Integer npcid) { + ItemInformationProvider ii = ItemInformationProvider.getInstance(); + for (Integer itemId : items.keySet()) { + int countNeeded = items.get(itemId); + int count = 0; + + InventoryType iType = ItemConstants.getInventoryType(itemId); + + if (iType.equals(InventoryType.UNDEFINED)) { + return false; + } + for (Item item : chr.getInventory(iType).listById(itemId)) { + count += item.getQuantity(); + } + //Weird stuff, nexon made some quests only available when wearing gm clothes. This enables us to accept it >< + if (iType.equals(InventoryType.EQUIP) && !ItemConstants.isMedal(itemId)) { + if (chr.isGM()) { + for (Item item : chr.getInventory(InventoryType.EQUIPPED).listById(itemId)) { + count += item.getQuantity(); + } + } else { + if (count < countNeeded) { + if (chr.getInventory(InventoryType.EQUIPPED).countById(itemId) + count >= countNeeded) { + chr.dropMessage(5, "Unequip the required " + ii.getName(itemId) + " before trying this quest operation."); + return false; + } + } } - } + } + + if (count < countNeeded || countNeeded <= 0 && count > 0) { + return false; + } + } + return true; + } + + public int getItemAmountNeeded(int itemid, boolean complete) { + Integer amount = items.get(itemid); + if (amount != null) { + return amount; + } else { + return complete ? Integer.MAX_VALUE : Integer.MIN_VALUE; + } + } } diff --git a/src/main/java/server/quest/requirements/JobRequirement.java b/src/main/java/server/quest/requirements/JobRequirement.java index f2463af772..bcd75a2dcd 100644 --- a/src/main/java/server/quest/requirements/JobRequirement.java +++ b/src/main/java/server/quest/requirements/JobRequirement.java @@ -32,36 +32,34 @@ import java.util.ArrayList; import java.util.List; /** - * * @author Tyler (Twdtwd) */ public class JobRequirement extends AbstractQuestRequirement { - List jobs = new ArrayList<>(); - - public JobRequirement(Quest quest, Data data) { - super(QuestRequirementType.JOB); - processData(data); - } - - /** - * - * @param data - */ - @Override - public void processData(Data data) { - for (Data jobEntry : data.getChildren()) { - jobs.add(DataTool.getInt(jobEntry)); - } - } - - - @Override - public boolean check(Character chr, Integer npcid) { - for(Integer job : jobs) { - if (chr.getJob().equals(Job.getById(job)) || chr.isGM()) { - return true; - } - } - return false; - } + List jobs = new ArrayList<>(); + + public JobRequirement(Quest quest, Data data) { + super(QuestRequirementType.JOB); + processData(data); + } + + /** + * @param data + */ + @Override + public void processData(Data data) { + for (Data jobEntry : data.getChildren()) { + jobs.add(DataTool.getInt(jobEntry)); + } + } + + + @Override + public boolean check(Character chr, Integer npcid) { + for (Integer job : jobs) { + if (chr.getJob().equals(Job.getById(job)) || chr.isGM()) { + return true; + } + } + return false; + } } diff --git a/src/main/java/server/quest/requirements/MaxLevelRequirement.java b/src/main/java/server/quest/requirements/MaxLevelRequirement.java index c92424614e..c095bbcecc 100644 --- a/src/main/java/server/quest/requirements/MaxLevelRequirement.java +++ b/src/main/java/server/quest/requirements/MaxLevelRequirement.java @@ -28,30 +28,28 @@ import server.quest.Quest; import server.quest.QuestRequirementType; /** - * * @author Tyler (Twdtwd) */ public class MaxLevelRequirement extends AbstractQuestRequirement { - private int maxLevel; - - - public MaxLevelRequirement(Quest quest, Data data) { - super(QuestRequirementType.MAX_LEVEL); - processData(data); - } - - /** - * - * @param data - */ - @Override - public void processData(Data data) { - maxLevel = DataTool.getInt(data); - } - - - @Override - public boolean check(Character chr, Integer npcid) { - return maxLevel >= chr.getLevel(); - } + private int maxLevel; + + + public MaxLevelRequirement(Quest quest, Data data) { + super(QuestRequirementType.MAX_LEVEL); + processData(data); + } + + /** + * @param data + */ + @Override + public void processData(Data data) { + maxLevel = DataTool.getInt(data); + } + + + @Override + public boolean check(Character chr, Integer npcid) { + return maxLevel >= chr.getLevel(); + } } diff --git a/src/main/java/server/quest/requirements/MesoRequirement.java b/src/main/java/server/quest/requirements/MesoRequirement.java index 58b1542757..f365a25d84 100644 --- a/src/main/java/server/quest/requirements/MesoRequirement.java +++ b/src/main/java/server/quest/requirements/MesoRequirement.java @@ -26,30 +26,29 @@ import server.quest.Quest; import server.quest.QuestRequirementType; /** - * * @author Ronan */ public class MesoRequirement extends AbstractQuestRequirement { - private int meso = 0; - - public MesoRequirement(Quest quest, Data data) { - super(QuestRequirementType.MESO); - processData(data); - } - - @Override - public void processData(Data data) { - meso = DataTool.getInt(data); - } - - - @Override - public boolean check(Character chr, Integer npcid) { - if (chr.getMeso() >= meso) { - return true; - } else { - chr.dropMessage(5, "You don't have enough mesos to complete this quest."); - return false; - } - } + private int meso = 0; + + public MesoRequirement(Quest quest, Data data) { + super(QuestRequirementType.MESO); + processData(data); + } + + @Override + public void processData(Data data) { + meso = DataTool.getInt(data); + } + + + @Override + public boolean check(Character chr, Integer npcid) { + if (chr.getMeso() >= meso) { + return true; + } else { + chr.dropMessage(5, "You don't have enough mesos to complete this quest."); + return false; + } + } } diff --git a/src/main/java/server/quest/requirements/MinLevelRequirement.java b/src/main/java/server/quest/requirements/MinLevelRequirement.java index 427220f0fb..f8893b426b 100644 --- a/src/main/java/server/quest/requirements/MinLevelRequirement.java +++ b/src/main/java/server/quest/requirements/MinLevelRequirement.java @@ -28,27 +28,26 @@ import server.quest.Quest; import server.quest.QuestRequirementType; /** - * * @author Tyler (Twdtwd) */ public class MinLevelRequirement extends AbstractQuestRequirement { - private int minLevel; - - - public MinLevelRequirement(Quest quest, Data data) { - super(QuestRequirementType.MIN_LEVEL); - processData(data); - } - - - @Override - public void processData(Data data) { - minLevel = DataTool.getInt(data); - } - - - @Override - public boolean check(Character chr, Integer npcid) { - return chr.getLevel() >= minLevel; - } + private int minLevel; + + + public MinLevelRequirement(Quest quest, Data data) { + super(QuestRequirementType.MIN_LEVEL); + processData(data); + } + + + @Override + public void processData(Data data) { + minLevel = DataTool.getInt(data); + } + + + @Override + public boolean check(Character chr, Integer npcid) { + return chr.getLevel() >= minLevel; + } } diff --git a/src/main/java/server/quest/requirements/MinTamenessRequirement.java b/src/main/java/server/quest/requirements/MinTamenessRequirement.java index 8df82e76c4..708e4451ca 100644 --- a/src/main/java/server/quest/requirements/MinTamenessRequirement.java +++ b/src/main/java/server/quest/requirements/MinTamenessRequirement.java @@ -29,39 +29,40 @@ import server.quest.Quest; import server.quest.QuestRequirementType; /** - * * @author Tyler (Twdtwd) */ public class MinTamenessRequirement extends AbstractQuestRequirement { - private int minTameness; - - - public MinTamenessRequirement(Quest quest, Data data) { - super(QuestRequirementType.MIN_PET_TAMENESS); - processData(data); - } - - /** - * - * @param data - */ - @Override - public void processData(Data data) { - minTameness = DataTool.getInt(data); - } - - - @Override - public boolean check(Character chr, Integer npcid) { - int curCloseness = 0; - - for(Pet pet : chr.getPets()) { - if(pet == null) continue; - - if(pet.getCloseness() > curCloseness) - curCloseness = pet.getCloseness(); - } - - return curCloseness >= minTameness; - } + private int minTameness; + + + public MinTamenessRequirement(Quest quest, Data data) { + super(QuestRequirementType.MIN_PET_TAMENESS); + processData(data); + } + + /** + * @param data + */ + @Override + public void processData(Data data) { + minTameness = DataTool.getInt(data); + } + + + @Override + public boolean check(Character chr, Integer npcid) { + int curCloseness = 0; + + for (Pet pet : chr.getPets()) { + if (pet == null) { + continue; + } + + if (pet.getCloseness() > curCloseness) { + curCloseness = pet.getCloseness(); + } + } + + return curCloseness >= minTameness; + } } diff --git a/src/main/java/server/quest/requirements/MobRequirement.java b/src/main/java/server/quest/requirements/MobRequirement.java index bece175475..c5e9ca0ff2 100644 --- a/src/main/java/server/quest/requirements/MobRequirement.java +++ b/src/main/java/server/quest/requirements/MobRequirement.java @@ -33,57 +33,56 @@ import java.util.HashMap; import java.util.Map; /** - * * @author Tyler (Twdtwd) */ public class MobRequirement extends AbstractQuestRequirement { - Map mobs = new HashMap<>(); - private int questID; - - public MobRequirement(Quest quest, Data data) { - super(QuestRequirementType.MOB); - questID = quest.getId(); - processData(data); - } - - /** - * - * @param data - */ - @Override - public void processData(Data data) { - for (Data questEntry : data.getChildren()) { - int mobID = DataTool.getInt(questEntry.getChildByPath("id")); - int countReq = DataTool.getInt(questEntry.getChildByPath("count")); - mobs.put(mobID, countReq); - } - } - - - @Override - public boolean check(Character chr, Integer npcid) { - QuestStatus status = chr.getQuest(Quest.getInstance(questID)); - for(Integer mobID : mobs.keySet()) { - int countReq = mobs.get(mobID); - int progress; - - try { - progress = Integer.parseInt(status.getProgress(mobID)); - } catch (NumberFormatException ex) { - FilePrinter.printError(FilePrinter.EXCEPTION_CAUGHT, ex, "Mob: " + mobID + " Quest: " + questID + "CID: " + chr.getId() + " Progress: " + status.getProgress(mobID)); - return false; - } - - if(progress < countReq) - return false; - } - return true; - } - - public int getRequiredMobCount(int mobid) { - if(mobs.containsKey(mobid)) { - return mobs.get(mobid); - } - return 0; - } + Map mobs = new HashMap<>(); + private final int questID; + + public MobRequirement(Quest quest, Data data) { + super(QuestRequirementType.MOB); + questID = quest.getId(); + processData(data); + } + + /** + * @param data + */ + @Override + public void processData(Data data) { + for (Data questEntry : data.getChildren()) { + int mobID = DataTool.getInt(questEntry.getChildByPath("id")); + int countReq = DataTool.getInt(questEntry.getChildByPath("count")); + mobs.put(mobID, countReq); + } + } + + + @Override + public boolean check(Character chr, Integer npcid) { + QuestStatus status = chr.getQuest(Quest.getInstance(questID)); + for (Integer mobID : mobs.keySet()) { + int countReq = mobs.get(mobID); + int progress; + + try { + progress = Integer.parseInt(status.getProgress(mobID)); + } catch (NumberFormatException ex) { + FilePrinter.printError(FilePrinter.EXCEPTION_CAUGHT, ex, "Mob: " + mobID + " Quest: " + questID + "CID: " + chr.getId() + " Progress: " + status.getProgress(mobID)); + return false; + } + + if (progress < countReq) { + return false; + } + } + return true; + } + + public int getRequiredMobCount(int mobid) { + if (mobs.containsKey(mobid)) { + return mobs.get(mobid); + } + return 0; + } } diff --git a/src/main/java/server/quest/requirements/MonsterBookCountRequirement.java b/src/main/java/server/quest/requirements/MonsterBookCountRequirement.java index 59916b1c50..d71afc8045 100644 --- a/src/main/java/server/quest/requirements/MonsterBookCountRequirement.java +++ b/src/main/java/server/quest/requirements/MonsterBookCountRequirement.java @@ -28,26 +28,25 @@ import server.quest.Quest; import server.quest.QuestRequirementType; /** - * * @author Tyler (Twdtwd) */ public class MonsterBookCountRequirement extends AbstractQuestRequirement { - private int reqCards; - - - public MonsterBookCountRequirement(Quest quest, Data data) { - super(QuestRequirementType.MONSTER_BOOK); - processData(data); - } - - @Override - public void processData(Data data) { - reqCards = DataTool.getInt(data); - } - - - @Override - public boolean check(Character chr, Integer npcid) { - return chr.getMonsterBook().getTotalCards() >= reqCards; - } + private int reqCards; + + + public MonsterBookCountRequirement(Quest quest, Data data) { + super(QuestRequirementType.MONSTER_BOOK); + processData(data); + } + + @Override + public void processData(Data data) { + reqCards = DataTool.getInt(data); + } + + + @Override + public boolean check(Character chr, Integer npcid) { + return chr.getMonsterBook().getTotalCards() >= reqCards; + } } diff --git a/src/main/java/server/quest/requirements/NpcRequirement.java b/src/main/java/server/quest/requirements/NpcRequirement.java index 99f1a933c2..ea804d9e0e 100644 --- a/src/main/java/server/quest/requirements/NpcRequirement.java +++ b/src/main/java/server/quest/requirements/NpcRequirement.java @@ -28,29 +28,28 @@ import server.quest.Quest; import server.quest.QuestRequirementType; /** - * * @author Tyler (Twdtwd) */ public class NpcRequirement extends AbstractQuestRequirement { - private int reqNPC; - - public NpcRequirement(Quest quest, Data data) { - super(QuestRequirementType.NPC); - processData(data); - } - - @Override - public void processData(Data data) { - reqNPC = DataTool.getInt(data); - } - - - @Override - public boolean check(Character chr, Integer npcid) { - return npcid != null && npcid == reqNPC; - } - - public int get() { - return reqNPC; - } + private int reqNPC; + + public NpcRequirement(Quest quest, Data data) { + super(QuestRequirementType.NPC); + processData(data); + } + + @Override + public void processData(Data data) { + reqNPC = DataTool.getInt(data); + } + + + @Override + public boolean check(Character chr, Integer npcid) { + return npcid != null && npcid == reqNPC; + } + + public int get() { + return reqNPC; + } } diff --git a/src/main/java/server/quest/requirements/PetRequirement.java b/src/main/java/server/quest/requirements/PetRequirement.java index d1844377a3..4eb93f0b88 100644 --- a/src/main/java/server/quest/requirements/PetRequirement.java +++ b/src/main/java/server/quest/requirements/PetRequirement.java @@ -32,36 +32,38 @@ import java.util.ArrayList; import java.util.List; /** - * * @author Tyler (Twdtwd) */ public class PetRequirement extends AbstractQuestRequirement { - List petIDs = new ArrayList<>(); - - - public PetRequirement(Quest quest, Data data) { - super(QuestRequirementType.PET); - processData(data); - } - - - @Override - public void processData(Data data) { - for(Data petData : data.getChildren()) { - petIDs.add(DataTool.getInt(petData.getChildByPath("id"))); - } - } - - - @Override - public boolean check(Character chr, Integer npcid) { - for(Pet pet : chr.getPets()) { - if(pet == null) continue; // thanks Arufonsu for showing a NPE occurring here - - if(petIDs.contains(pet.getItemId())) - return true; - } - - return false; - } + List petIDs = new ArrayList<>(); + + + public PetRequirement(Quest quest, Data data) { + super(QuestRequirementType.PET); + processData(data); + } + + + @Override + public void processData(Data data) { + for (Data petData : data.getChildren()) { + petIDs.add(DataTool.getInt(petData.getChildByPath("id"))); + } + } + + + @Override + public boolean check(Character chr, Integer npcid) { + for (Pet pet : chr.getPets()) { + if (pet == null) { + continue; // thanks Arufonsu for showing a NPE occurring here + } + + if (petIDs.contains(pet.getItemId())) { + return true; + } + } + + return false; + } } diff --git a/src/main/java/server/quest/requirements/QuestRequirement.java b/src/main/java/server/quest/requirements/QuestRequirement.java index e141814a2b..60364fa184 100644 --- a/src/main/java/server/quest/requirements/QuestRequirement.java +++ b/src/main/java/server/quest/requirements/QuestRequirement.java @@ -29,45 +29,44 @@ import java.util.HashMap; import java.util.Map; /** - * * @author Tyler (Twdtwd) */ public class QuestRequirement extends AbstractQuestRequirement { - Map quests = new HashMap<>(); - - public QuestRequirement(Quest quest, Data data) { - super(QuestRequirementType.QUEST); - processData(data); - } - - /** - * - * @param data - */ - @Override - public void processData(Data data) { - for (Data questEntry : data.getChildren()) { - int questID = DataTool.getInt(questEntry.getChildByPath("id")); - int stateReq = DataTool.getInt(questEntry.getChildByPath("state")); - quests.put(questID, stateReq); - } - } - - - @Override - public boolean check(Character chr, Integer npcid) { - for(Integer questID : quests.keySet()) { - int stateReq = quests.get(questID); - QuestStatus qs = chr.getQuest(Quest.getInstance(questID)); - - if(qs == null && QuestStatus.Status.getById(stateReq).equals(QuestStatus.Status.NOT_STARTED)) - continue; - - if(qs == null || !qs.getStatus().equals(QuestStatus.Status.getById(stateReq))) { - return false; - } - - } - return true; - } + Map quests = new HashMap<>(); + + public QuestRequirement(Quest quest, Data data) { + super(QuestRequirementType.QUEST); + processData(data); + } + + /** + * @param data + */ + @Override + public void processData(Data data) { + for (Data questEntry : data.getChildren()) { + int questID = DataTool.getInt(questEntry.getChildByPath("id")); + int stateReq = DataTool.getInt(questEntry.getChildByPath("state")); + quests.put(questID, stateReq); + } + } + + + @Override + public boolean check(Character chr, Integer npcid) { + for (Integer questID : quests.keySet()) { + int stateReq = quests.get(questID); + QuestStatus qs = chr.getQuest(Quest.getInstance(questID)); + + if (qs == null && QuestStatus.Status.getById(stateReq).equals(QuestStatus.Status.NOT_STARTED)) { + continue; + } + + if (qs == null || !qs.getStatus().equals(QuestStatus.Status.getById(stateReq))) { + return false; + } + + } + return true; + } } diff --git a/src/main/java/server/quest/requirements/ScriptRequirement.java b/src/main/java/server/quest/requirements/ScriptRequirement.java index b486d2c146..0c93f4d098 100644 --- a/src/main/java/server/quest/requirements/ScriptRequirement.java +++ b/src/main/java/server/quest/requirements/ScriptRequirement.java @@ -26,28 +26,27 @@ import server.quest.Quest; import server.quest.QuestRequirementType; /** - * * @author Ronan */ public class ScriptRequirement extends AbstractQuestRequirement { - private boolean reqScript; - - public ScriptRequirement(Quest quest, Data data) { - super(QuestRequirementType.BUFF); - processData(data); - } - - @Override - public void processData(Data data) { - reqScript = !DataTool.getString(data, "").isEmpty(); - } - - @Override - public boolean check(Character chr, Integer npcid) { - return true; - } - - public boolean get() { - return reqScript; - } + private boolean reqScript; + + public ScriptRequirement(Quest quest, Data data) { + super(QuestRequirementType.BUFF); + processData(data); + } + + @Override + public void processData(Data data) { + reqScript = !DataTool.getString(data, "").isEmpty(); + } + + @Override + public boolean check(Character chr, Integer npcid) { + return true; + } + + public boolean get() { + return reqScript; + } }