Switch to Maven file structure

This commit is contained in:
P0nk
2021-03-30 21:07:35 +02:00
parent 4acc5675d6
commit 813643036b
817 changed files with 16 additions and 0 deletions

View File

@@ -0,0 +1,45 @@
/*
This file is part of the OdinMS Maple Story Server
Copyright (C) 2008 Patrick Huy <patrick.huy@frz.cc>
Matthias Butz <matze@odinms.de>
Jan Christian Meyer <vimes@odinms.de>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation version 3 as published by
the Free Software Foundation. You may not use, modify or distribute
this program under any other version of the GNU Affero General Public
License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package constants.game;
public final class ExpTable {
private static final int[] exp = {15, 15, 34, 57, 92, 135, 372, 560, 840, 1144, 1242, 1573, 2144, 2800, 3640, 4700, 5893, 7360, 9144, 11120, 13477, 16268, 19320, 22880, 27008, 31477, 36600, 42444, 48720, 55813, 63800, 86784, 98208, 110932, 124432, 139372, 155865, 173280, 192400, 213345, 235372, 259392, 285532, 312928, 342624, 374760, 408336, 445544, 483532, 524160, 567772, 598886, 631704, 666321, 702836, 741351, 781976, 824828, 870028, 917625, 967995, 1021041, 1076994, 1136013, 1198266, 1263930, 1333194, 1406252, 1483314, 1564600, 1650340, 1740778, 1836173, 1936794, 2042930, 2154882, 2272970, 2397528, 2528912, 2667496, 2813674, 2967863, 3130502, 3302053, 3483005, 3673873, 3875201, 4087562, 4311559, 4547832, 4797053, 5059931, 5337215, 5629694, 5938202, 6263614, 6606860, 6968915, 7350811, 7753635, 8178534, 8626718, 9099462, 9598112, 10124088, 10678888, 11264090, 11881362, 12532461, 13219239, 13943653, 14707765, 15513750, 16363902, 17260644, 18206527, 19204245, 20256637, 21366700, 22537594, 23772654, 25075395, 26449526, 27898960, 29427822, 31040466, 32741483, 34535716, 36428273, 38424542, 40530206, 42751262, 45094030, 47565183, 50171755, 52921167, 55821246, 58880250, 62106888, 65510344, 69100311, 72887008, 76881216, 81094306, 85594273, 90225770, 95170142, 100385466, 105886589, 111689174, 117809740, 124265714, 131075474, 138258410, 145834970, 153826726, 162256430, 171148082, 180526997, 190419876, 200854885, 211861732, 223471711, 223471711, 248635353, 262260570, 276632449, 291791906, 307782102, 324648562, 342439302, 361204976, 380999008, 401877754, 423900654, 447130410, 471633156, 497478653, 524740482, 553496261, 583827855, 615821622, 649568646, 685165008, 722712050, 762316670, 804091623, 848155844, 894634784, 943660770, 995373379, 1049919840, 1107455447, 1168144006, 1232158297, 1299680571, 1370903066, 1446028554, 1525246918, 1608855764, 1697021059};
private static final int[] equip = {1, 15, 19, 23, 35, 43, 98, 188, 237, 280, 304, 331, 571, 656, 840, 1060, 1193, 1467, 1784, 1976, 2357, 2791, 3052, 3560, 4128, 4469, 5123, 5844, 6276, 7093, 10000};
private static final int[] pet = {1, 1, 3, 6, 14, 31, 60, 108, 181, 287, 434, 632, 891, 1224, 1642, 2161, 2793, 3557, 4467, 5542, 6801, 8263, 9950, 11882, 14084, 16578, 19391, 22547, 26074, 30000, 2147483647};
private static final int[] mount = {1, 24, 50, 105, 134, 196, 254, 263, 315, 367, 430, 543, 587, 679, 725, 897, 1146, 1394, 1701, 2247, 2543, 2898, 3156, 3313, 3584, 3923, 4150, 4305, 4550};
public static int getExpNeededForLevel(int level) {
return level > 200 ? 2000000000 : exp[level];
}
public static int getClosenessNeededForLevel(int level) {
return pet[level];
}
public static int getMountExpNeededForLevel(int level) {
return mount[level];
}
public static int getEquipExpNeededForLevel(int level) {
return equip[level];
}
}

View File

@@ -0,0 +1,713 @@
package constants.game;
import client.MapleDisease;
import java.util.ArrayList;
import java.util.List;
import java.util.HashMap;
import java.util.Map;
import client.MapleJob;
import config.YamlConfig;
import constants.skills.Aran;
import java.io.File;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;
import provider.MapleData;
import provider.MapleDataDirectoryEntry;
import provider.MapleDataFileEntry;
import provider.MapleDataProvider;
import provider.MapleDataProviderFactory;
import provider.MapleDataTool;
import server.maps.MapleMap;
import server.maps.FieldLimit;
import server.quest.MapleQuest;
/*
* @author kevintjuh93
* @author Ronan
*/
public class GameConstants {
public static String[] WORLD_NAMES = {"Scania", "Bera", "Broa", "Windia", "Khaini", "Bellocan", "Mardia", "Kradia", "Yellonde", "Demethos", "Galicia", "El Nido", "Zenith", "Arcenia", "Kastia", "Judis", "Plana", "Kalluna", "Stius", "Croa", "Medere"};
public static final int[] OWL_DATA = new int[]{1082002, 2070005, 2070006, 1022047, 1102041, 2044705, 2340000, 2040017, 1092030, 2040804};
public static final String[] stats = {"tuc", "reqLevel", "reqJob", "reqSTR", "reqDEX", "reqINT", "reqLUK", "reqPOP", "cash", "cursed", "success", "setItemID", "equipTradeBlock", "durability", "randOption", "randStat", "masterLevel", "reqSkillLevel", "elemDefault", "incRMAS", "incRMAF", "incRMAI", "incRMAL", "canLevel", "skill", "charmEXP"};
public static final int[] CASH_DATA = new int[]{50200004, 50200069, 50200117, 50100008, 50000047};
// Ronan's rates upgrade system
private static final int[] DROP_RATE_GAIN = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14};
private static final int[] MESO_RATE_GAIN = {1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 66, 78, 91, 105};
private static final int[] EXP_RATE_GAIN = {1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610}; //fibonacci :3
private static final int[] jobUpgradeBlob = {1, 20, 60, 110, 190};
private static final int[] jobUpgradeSpUp = {0, 1, 2, 3, 6};
private final static Map<Integer, String> jobNames = new HashMap<>();
private final static NumberFormat nfFormatter = new DecimalFormat("#,###,###,###");
private final static NumberFormat nfParser = NumberFormat.getInstance(YamlConfig.config.server.USE_UNITPRICE_WITH_COMMA ? Locale.FRANCE : Locale.UK);
public static final MapleDisease[] CPQ_DISEASES = {MapleDisease.SLOW, MapleDisease.SEDUCE, MapleDisease.STUN, MapleDisease.POISON,
MapleDisease.SEAL, MapleDisease.DARKNESS, MapleDisease.WEAKEN, MapleDisease.CURSE};
public static final int MAX_FIELD_MOB_DAMAGE = getMaxObstacleMobDamageFromWz() * 2;
public static int getPlayerBonusDropRate(int slot) {
return(DROP_RATE_GAIN[slot]);
}
public static int getPlayerBonusMesoRate(int slot) {
return(MESO_RATE_GAIN[slot]);
}
public static int getPlayerBonusExpRate(int slot) {
return(EXP_RATE_GAIN[slot]);
}
// "goto" command for players
public static final HashMap<String, Integer> GOTO_TOWNS = new HashMap<String, Integer>() {{
put("southperry", 60000);
put("amherst", 1000000);
put("henesys", 100000000);
put("ellinia", 101000000);
put("perion", 102000000);
put("kerning", 103000000);
put("lith", 104000000);
put("sleepywood", 105040300);
put("florina", 110000000);
put("nautilus", 120000000);
put("ereve", 130000000);
put("rien", 140000000);
put("orbis", 200000000);
put("happy", 209000000);
put("elnath", 211000000);
put("ludi", 220000000);
put("aqua", 230000000);
put("leafre", 240000000);
put("mulung", 250000000);
put("herb", 251000000);
put("omega", 221000000);
put("korean", 222000000);
put("ellin", 300000000);
put("nlc", 600000000);
put("showa", 801000000);
put("shrine", 800000000);
put("ariant", 260000000);
put("magatia", 261000000);
put("singapore", 540000000);
put("quay", 541000000);
put("kampung", 551000000);
put("amoria", 680000000);
put("temple", 270000100);
put("square", 103040000);
put("neo", 240070000);
put("mushking", 106020000);
}};
// "goto" command for only-GMs
public static final HashMap<String, Integer> GOTO_AREAS = new HashMap<String, Integer>() {{
put("gmmap", 180000000);
put("excavation", 990000000);
put("mushmom", 100000005);
put("griffey", 240020101);
put("manon", 240020401);
put("horseman", 682000001);
put("balrog", 105090900);
put("zakum", 211042300);
put("papu", 220080001);
put("guild", 200000301);
put("skelegon", 240040511);
put("hpq", 100000200);
put("pianus", 230040420);
put("horntail", 240050400);
put("pinkbean", 270050000);
put("keep", 610020006);
put("dojo", 925020001);
put("bosspq", 970030000);
put("fm", 910000000);
}};
public static final List<String> GAME_SONGS = new ArrayList<String>(170) {{
add("Jukebox/Congratulation");
add("Bgm00/SleepyWood");
add("Bgm00/FloralLife");
add("Bgm00/GoPicnic");
add("Bgm00/Nightmare");
add("Bgm00/RestNPeace");
add("Bgm01/AncientMove");
add("Bgm01/MoonlightShadow");
add("Bgm01/WhereTheBarlogFrom");
add("Bgm01/CavaBien");
add("Bgm01/HighlandStar");
add("Bgm01/BadGuys");
add("Bgm02/MissingYou");
add("Bgm02/WhenTheMorningComes");
add("Bgm02/EvilEyes");
add("Bgm02/JungleBook");
add("Bgm02/AboveTheTreetops");
add("Bgm03/Subway");
add("Bgm03/Elfwood");
add("Bgm03/BlueSky");
add("Bgm03/Beachway");
add("Bgm03/SnowyVillage");
add("Bgm04/PlayWithMe");
add("Bgm04/WhiteChristmas");
add("Bgm04/UponTheSky");
add("Bgm04/ArabPirate");
add("Bgm04/Shinin'Harbor");
add("Bgm04/WarmRegard");
add("Bgm05/WolfWood");
add("Bgm05/DownToTheCave");
add("Bgm05/AbandonedMine");
add("Bgm05/MineQuest");
add("Bgm05/HellGate");
add("Bgm06/FinalFight");
add("Bgm06/WelcomeToTheHell");
add("Bgm06/ComeWithMe");
add("Bgm06/FlyingInABlueDream");
add("Bgm06/FantasticThinking");
add("Bgm07/WaltzForWork");
add("Bgm07/WhereverYouAre");
add("Bgm07/FunnyTimeMaker");
add("Bgm07/HighEnough");
add("Bgm07/Fantasia");
add("Bgm08/LetsMarch");
add("Bgm08/ForTheGlory");
add("Bgm08/FindingForest");
add("Bgm08/LetsHuntAliens");
add("Bgm08/PlotOfPixie");
add("Bgm09/DarkShadow");
add("Bgm09/TheyMenacingYou");
add("Bgm09/FairyTale");
add("Bgm09/FairyTalediffvers");
add("Bgm09/TimeAttack");
add("Bgm10/Timeless");
add("Bgm10/TimelessB");
add("Bgm10/BizarreTales");
add("Bgm10/TheWayGrotesque");
add("Bgm10/Eregos");
add("Bgm11/BlueWorld");
add("Bgm11/Aquarium");
add("Bgm11/ShiningSea");
add("Bgm11/DownTown");
add("Bgm11/DarkMountain");
add("Bgm12/AquaCave");
add("Bgm12/DeepSee");
add("Bgm12/WaterWay");
add("Bgm12/AcientRemain");
add("Bgm12/RuinCastle");
add("Bgm12/Dispute");
add("Bgm13/CokeTown");
add("Bgm13/Leafre");
add("Bgm13/Minar'sDream");
add("Bgm13/AcientForest");
add("Bgm13/TowerOfGoddess");
add("Bgm14/DragonLoad");
add("Bgm14/HonTale");
add("Bgm14/CaveOfHontale");
add("Bgm14/DragonNest");
add("Bgm14/Ariant");
add("Bgm14/HotDesert");
add("Bgm15/MureungHill");
add("Bgm15/MureungForest");
add("Bgm15/WhiteHerb");
add("Bgm15/Pirate");
add("Bgm15/SunsetDesert");
add("Bgm16/Duskofgod");
add("Bgm16/FightingPinkBeen");
add("Bgm16/Forgetfulness");
add("Bgm16/Remembrance");
add("Bgm16/Repentance");
add("Bgm16/TimeTemple");
add("Bgm17/MureungSchool1");
add("Bgm17/MureungSchool2");
add("Bgm17/MureungSchool3");
add("Bgm17/MureungSchool4");
add("Bgm18/BlackWing");
add("Bgm18/DrillHall");
add("Bgm18/QueensGarden");
add("Bgm18/RaindropFlower");
add("Bgm18/WolfAndSheep");
add("Bgm19/BambooGym");
add("Bgm19/CrystalCave");
add("Bgm19/MushCatle");
add("Bgm19/RienVillage");
add("Bgm19/SnowDrop");
add("Bgm20/GhostShip");
add("Bgm20/NetsPiramid");
add("Bgm20/UnderSubway");
add("Bgm21/2021year");
add("Bgm21/2099year");
add("Bgm21/2215year");
add("Bgm21/2230year");
add("Bgm21/2503year");
add("Bgm21/KerningSquare");
add("Bgm21/KerningSquareField");
add("Bgm21/KerningSquareSubway");
add("Bgm21/TeraForest");
add("BgmEvent/FunnyRabbit");
add("BgmEvent/FunnyRabbitFaster");
add("BgmEvent/wedding");
add("BgmEvent/weddingDance");
add("BgmEvent/wichTower");
add("BgmGL/amoria");
add("BgmGL/Amorianchallenge");
add("BgmGL/chapel");
add("BgmGL/cathedral");
add("BgmGL/Courtyard");
add("BgmGL/CrimsonwoodKeep");
add("BgmGL/CrimsonwoodKeepInterior");
add("BgmGL/GrandmastersGauntlet");
add("BgmGL/HauntedHouse");
add("BgmGL/NLChunt");
add("BgmGL/NLCtown");
add("BgmGL/NLCupbeat");
add("BgmGL/PartyQuestGL");
add("BgmGL/PhantomForest");
add("BgmJp/Feeling");
add("BgmJp/BizarreForest");
add("BgmJp/Hana");
add("BgmJp/Yume");
add("BgmJp/Bathroom");
add("BgmJp/BattleField");
add("BgmJp/FirstStepMaster");
add("BgmMY/Highland");
add("BgmMY/KualaLumpur");
add("BgmSG/BoatQuay_field");
add("BgmSG/BoatQuay_town");
add("BgmSG/CBD_field");
add("BgmSG/CBD_town");
add("BgmSG/Ghostship");
add("BgmUI/ShopBgm");
add("BgmUI/Title");
}};
// MapleStory default keyset
private static final int[] DEFAULT_KEY = {18, 65, 2, 23, 3, 4, 5, 6, 16, 17, 19, 25, 26, 27, 31, 34, 35, 37, 38, 40, 43, 44, 45, 46, 50, 56, 59, 60, 61, 62, 63, 64, 57, 48, 29, 7, 24, 33, 41, 39};
private static final int[] DEFAULT_TYPE = {4, 6, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 4, 4, 5, 6, 6, 6, 6, 6, 6, 5, 4, 5, 4, 4, 4, 4, 4};
private static final int[] DEFAULT_ACTION = {0, 106, 10, 1, 12, 13, 18, 24, 8, 5, 4, 19, 14, 15, 2, 17, 11, 3, 20, 16, 9, 50, 51, 6, 7, 53, 100, 101, 102, 103, 104, 105, 54, 22, 52, 21, 25, 26, 23, 27};
// HeavenMS custom keyset
private static final int[] CUSTOM_KEY = {2, 3, 4, 5, 31, 56, 59, 32, 42, 6, 17, 29, 30, 41, 50, 60, 61, 62, 63, 64, 65, 16, 7, 9, 13, 8};
private static final int[] CUSTOM_TYPE = {4, 4, 4, 4, 5, 5, 6, 5, 5, 4, 4, 4, 5, 4, 4, 6, 6, 6, 6, 6, 6, 4, 4, 4, 4, 4};
private static final int[] CUSTOM_ACTION = {1, 0, 3, 2, 53, 54, 100, 52, 51, 19, 5, 9, 50, 7, 22, 101, 102, 103, 104, 105, 106, 8, 17, 26, 20, 4};
public static int[] getCustomKey(boolean customKeyset) {
return(customKeyset ? CUSTOM_KEY : DEFAULT_KEY);
}
public static int[] getCustomType(boolean customKeyset) {
return(customKeyset ? CUSTOM_TYPE : DEFAULT_TYPE);
}
public static int[] getCustomAction(boolean customKeyset) {
return(customKeyset ? CUSTOM_ACTION : DEFAULT_ACTION);
}
private static final int[] mobHpVal = {0, 15, 20, 25, 35, 50, 65, 80, 95, 110, 125, 150, 175, 200, 225, 250, 275, 300, 325, 350,
375, 405, 435, 465, 495, 525, 580, 650, 720, 790, 900, 990, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800,
1900, 2000, 2100, 2200, 2300, 2400, 2520, 2640, 2760, 2880, 3000, 3200, 3400, 3600, 3800, 4000, 4300, 4600, 4900, 5200,
5500, 5900, 6300, 6700, 7100, 7500, 8000, 8500, 9000, 9500, 10000, 11000, 12000, 13000, 14000, 15000, 17000, 19000, 21000, 23000,
25000, 27000, 29000, 31000, 33000, 35000, 37000, 39000, 41000, 43000, 45000, 47000, 49000, 51000, 53000, 55000, 57000, 59000, 61000, 63000,
65000, 67000, 69000, 71000, 73000, 75000, 77000, 79000, 81000, 83000, 85000, 89000, 91000, 93000, 95000, 97000, 99000, 101000, 103000,
105000, 107000, 109000, 111000, 113000, 115000, 118000, 120000, 125000, 130000, 135000, 140000, 145000, 150000, 155000, 160000, 165000, 170000, 175000, 180000,
185000, 190000, 195000, 200000, 205000, 210000, 215000, 220000, 225000, 230000, 235000, 240000, 250000, 260000, 270000, 280000, 290000, 300000, 310000, 320000,
330000, 340000, 350000, 360000, 370000, 380000, 390000, 400000, 410000, 420000, 430000, 440000, 450000, 460000, 470000, 480000, 490000, 500000, 510000, 520000,
530000, 550000, 570000, 590000, 610000, 630000, 650000, 670000, 690000, 710000, 730000, 750000, 770000, 790000, 810000, 830000, 850000, 870000, 890000, 910000};
public static String getJobName(int jobid) {
String name = jobNames.get(jobid);
if(name == null) {
MapleJob job = MapleJob.getById(jobid);
if(job != null) {
name = job.name().toLowerCase();
name = name.replaceAll("[*0-9]", "");
name = name.substring(0, 1).toUpperCase() + name.substring(1);
} else {
name = "";
}
jobNames.put(jobid, name);
}
return name;
}
public static int getJobUpgradeLevelRange(int jobbranch) {
return jobUpgradeBlob[jobbranch];
}
public static int getChangeJobSpUpgrade(int jobbranch) {
return jobUpgradeSpUp[jobbranch];
}
public static boolean isHallOfFameMap(int mapid) {
switch(mapid) {
case 102000004: // warrior
case 101000004: // magician
case 100000204: // bowman
case 103000008: // thief
case 120000105: // pirate
case 130000100: // cygnus
case 130000101: // other cygnus
case 130000110: // cygnus 2nd floor
case 130000120: // cygnus 3rd floor (beginners)
case 140010110: // aran
return true;
default:
return false;
}
}
public static boolean isPodiumHallOfFameMap(int mapid) {
switch(mapid) {
case 102000004: // warrior
case 101000004: // magician
case 100000204: // bowman
case 103000008: // thief
case 120000105: // pirate
return true;
default:
return false;
}
}
public static byte getHallOfFameBranch(MapleJob job, int mapid) {
if(!isHallOfFameMap(mapid)) {
return (byte) (26 + 4 * (mapid / 100000000)); // custom, 400 pnpcs available per continent
}
if(job.isA(MapleJob.WARRIOR)) {
return 10;
} else if(job.isA(MapleJob.MAGICIAN)) {
return 11;
} else if(job.isA(MapleJob.BOWMAN)) {
return 12;
} else if(job.isA(MapleJob.THIEF)) {
return 13;
} else if(job.isA(MapleJob.PIRATE)) {
return 14;
} else if(job.isA(MapleJob.DAWNWARRIOR1)) {
return 15;
} else if(job.isA(MapleJob.BLAZEWIZARD1)) {
return 16;
} else if(job.isA(MapleJob.WINDARCHER1)) {
return 17;
} else if(job.isA(MapleJob.NIGHTWALKER1)) {
return 18;
} else if(job.isA(MapleJob.THUNDERBREAKER1)) {
return 19;
} else if(job.isA(MapleJob.ARAN1)) {
return 20;
} else if(job.isA(MapleJob.EVAN1)) {
return 21;
} else if(job.isA(MapleJob.BEGINNER)) {
return 22;
} else if(job.isA(MapleJob.NOBLESSE)) {
return 23;
} else if(job.isA(MapleJob.LEGEND)) {
return 24;
} else {
return 25;
}
}
public static int getOverallJobRankByScriptId(int scriptId) {
int branch = (scriptId / 100) % 100;
if(branch < 26) {
return (scriptId % 100) + 1;
} else {
return ((scriptId - 2600) % 400) + 1;
}
}
public static boolean canPnpcBranchUseScriptId(byte branch, int scriptId) {
scriptId /= 100;
scriptId %= 100;
if(branch < 26) {
return branch == scriptId;
} else {
return scriptId >= branch && scriptId < branch + 4;
}
}
public static int getHallOfFameMapid(MapleJob job) {
int jobid = job.getId();
if(isCygnus(jobid)) {
return 130000100;
} else if(isAran(jobid)) {
return 140010110;
} else {
if(job.isA(MapleJob.WARRIOR)) {
return 102000004;
} else if(job.isA(MapleJob.MAGICIAN)) {
return 101000004;
} else if(job.isA(MapleJob.BOWMAN)) {
return 100000204;
} else if(job.isA(MapleJob.THIEF)) {
return 103000008;
} else if(job.isA(MapleJob.PIRATE)) {
return 120000105;
} else {
return 130000110; // beginner explorers are allotted with the Cygnus, available map lul
}
}
}
public static int getJobBranch(MapleJob job) {
int jobid = job.getId();
if(jobid % 1000 == 0) {
return 0;
} else if(jobid % 100 == 0) {
return 1;
} else {
return 2 + (jobid % 10);
}
}
public static int getJobMaxLevel(MapleJob job) {
int jobBranch = getJobBranch(job);
switch(jobBranch) {
case 0:
return 10; // beginner
case 1:
return 30; // 1st job
case 2:
return 70; // 2nd job
case 3:
return 120; // 3rd job
default:
return (job.getId() / 1000 == 1) ? 120 : 200; // 4th job: cygnus is 120, rest is 200
}
}
public static int getSkillBook(final int job) {
if (job >= 2210 && job <= 2218) {
return job - 2209;
}
return 0;
}
public static boolean isAranSkills(final int skill) {
return Aran.FULL_SWING == skill || Aran.OVER_SWING == skill || Aran.COMBO_TEMPEST == skill || Aran.COMBO_FENRIR == skill || Aran.COMBO_DRAIN == skill
|| Aran.HIDDEN_FULL_DOUBLE == skill || Aran.HIDDEN_FULL_TRIPLE == skill || Aran.HIDDEN_OVER_DOUBLE == skill || Aran.HIDDEN_OVER_TRIPLE == skill
|| Aran.COMBO_SMASH == skill || Aran.DOUBLE_SWING == skill || Aran.TRIPLE_SWING == skill;
}
public static boolean isHiddenSkills(final int skill) {
return Aran.HIDDEN_FULL_DOUBLE == skill || Aran.HIDDEN_FULL_TRIPLE == skill || Aran.HIDDEN_OVER_DOUBLE == skill || Aran.HIDDEN_OVER_TRIPLE == skill;
}
public static boolean isCygnus(final int job) {
return job / 1000 == 1;
}
public static boolean isAran(final int job) {
return job == 2000 || (job >= 2100 && job <= 2112);
}
private static boolean isInBranchJobTree(int skillJobId, int jobId, int branchType) {
int branch = (int)(Math.pow(10, branchType));
int skillBranch = (int)(skillJobId / branch) * branch;
int jobBranch = (int)(jobId / branch) * branch;
return skillBranch == jobBranch;
}
private static boolean hasDivergedBranchJobTree(int skillJobId, int jobId, int branchType) {
int branch = (int)(Math.pow(10, branchType));
int skillBranch = (int)(skillJobId / branch);
int jobBranch = (int)(jobId / branch);
return skillBranch != jobBranch && skillBranch % 10 != 0;
}
public static boolean isInJobTree(int skillId, int jobId) {
int skillJob = skillId / 10000;
if(!isInBranchJobTree(skillJob, jobId, 0)) {
for(int i = 1; i <= 3; i++) {
if(hasDivergedBranchJobTree(skillJob, jobId, i)) return false;
if(isInBranchJobTree(skillJob, jobId, i)) return (skillJob <= jobId);
}
} else {
return (skillJob <= jobId);
}
return false;
}
public static boolean isPqSkill(final int skill) {
return (skill >= 20000014 && skill <= 20000018) || skill == 10000013 || skill == 20001013 || (skill % 10000000 >= 1009 && skill % 10000000 <= 1011) || skill % 10000000 == 1020;
}
public static boolean bannedBindSkills(final int skill) {
return isAranSkills(skill) || isPqSkill(skill);
}
public static boolean isGMSkills(final int skill) {
return skill >= 9001000 && skill <= 9101008 || skill >= 8001000 && skill <= 8001001;
}
public static boolean isFreeMarketRoom(int mapid) {
return mapid / 1000000 == 910 && mapid > 910000000; // FM rooms subset, thanks to shavitush (shavit)
}
public static boolean isMerchantLocked(MapleMap map) {
if(FieldLimit.CANNOTMIGRATE.check(map.getFieldLimit())) { // maps that cannot access cash shop cannot access merchants too (except FM rooms).
return true;
}
switch(map.getId()) {
case 910000000:
return true;
}
return false;
}
public static boolean isBossRush(int mapid) {
return mapid >= 970030100 && mapid <= 970042711;
}
public static boolean isDojo(int mapid) {
return mapid >= 925020000 && mapid < 925040000;
}
public static boolean isDojoPartyArea(int mapid) {
return mapid >= 925030100 && mapid < 925040000;
}
public static boolean isDojoBoss(int mobid) {
return mobid >= 9300184 && mobid < 9300216;
}
public static boolean isDojoBossArea(int mapid) {
return isDojo(mapid) && (((mapid / 100) % 100) % 6) > 0;
}
public static boolean isPyramid(int mapid) {
return mapid >= 926010010 & mapid <= 930010000;
}
public static boolean isAriantColiseumLobby(int mapid) {
int mapbranch = mapid / 1000;
return mapbranch == 980010 && mapid % 10 == 0;
}
public static boolean isAriantColiseumArena(int mapid) {
int mapbranch = mapid / 1000;
return mapbranch == 980010 && mapid % 10 == 1;
}
public static boolean isPqSkillMap(int mapid) {
return isDojo(mapid) || isPyramid(mapid);
}
public static boolean isFishingArea(int mapid) {
return mapid == 120010000 || mapid == 251000100 || mapid == 541010110;
}
public static boolean isFinisherSkill(int skillId) {
return skillId > 1111002 && skillId < 1111007 || skillId == 11111002 || skillId == 11111003;
}
public static boolean isMedalQuest(short questid) {
return MapleQuest.getInstance(questid).getMedalRequirement() != -1;
}
public static boolean hasSPTable(MapleJob job) {
switch (job) {
case EVAN:
case EVAN1:
case EVAN2:
case EVAN3:
case EVAN4:
case EVAN5:
case EVAN6:
case EVAN7:
case EVAN8:
case EVAN9:
case EVAN10:
return true;
default:
return false;
}
}
public static int getMonsterHP(final int level) {
if (level < 0 || level >= mobHpVal.length) {
return Integer.MAX_VALUE;
}
return mobHpVal[level];
}
public static String ordinal(int i) {
String[] sufixes = new String[] { "th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th" };
switch (i % 100) {
case 11:
case 12:
case 13:
return i + "th";
default:
return i + sufixes[i % 10];
}
}
public synchronized static String numberWithCommas(int i) {
if(!YamlConfig.config.server.USE_DISPLAY_NUMBERS_WITH_COMMA) {
return nfFormatter.format(i); // will display number on whatever locale is currently assigned on NumberFormat
} else {
return NumberFormat.getNumberInstance(Locale.UK).format(i);
}
}
public synchronized static Number parseNumber(String value) {
try {
return nfParser.parse(value);
} catch(Exception e) {
e.printStackTrace();
return 0.0f;
}
}
private static int getMaxObstacleMobDamageFromWz() {
MapleDataProvider mapSource = MapleDataProviderFactory.getDataProvider(new File(System.getProperty("wzpath") + "/Map.wz"));
int maxMobDmg = 0;
MapleDataDirectoryEntry root = mapSource.getRoot();
for (MapleDataDirectoryEntry objData : root.getSubdirectories()) {
if (!objData.getName().contentEquals("Obj")) {
continue;
}
for (MapleDataFileEntry obj : objData.getFiles()) {
for (MapleData l0 : mapSource.getData(objData.getName() + "/" + obj.getName()).getChildren()) {
for (MapleData l1 : l0.getChildren()) {
for (MapleData l2 : l1.getChildren()) {
int objDmg = MapleDataTool.getIntConvert("s1/mobdamage", l2, 0);
if (maxMobDmg < objDmg) {
maxMobDmg = objDmg;
}
}
}
}
}
}
return maxMobDmg;
}
}

View File

@@ -0,0 +1,24 @@
package constants.game;
/**
* @brief ScriptableNPCConstants
* @author GabrielSin <gabrielsin@playellin.net>
* @date 16/09/2018
*
* Adaptations to use Pair and Set, in order to suit a one-packet marshall.
* Adapted by Ronan
*/
import java.util.HashSet;
import java.util.Set;
import tools.Pair;
public class ScriptableNPCConstants {
public static final Set<Pair<Integer, String>> SCRIPTABLE_NPCS = new HashSet<Pair<Integer, String>>(){{
//add(new Pair<>(9200000, "Cody"));
add(new Pair<>(9001105, "Grandpa Moon Bunny"));
}};
}