package constants; import client.MapleCharacter; import client.MapleClient; import client.MapleEquipStat; import client.PlayerStats; import client.Skill; import client.SkillFactory; import client.inventory.Equip; import client.inventory.Item; import client.inventory.MapleInventoryType; import client.inventory.MapleWeaponType; import client.status.MonsterStatus; import java.awt.Point; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; import java.util.Collections; import java.util.List; import java.util.Map; import server.MapleItemInformationProvider; import server.MapleStatEffect; import server.StructItemOption; import server.maps.MapleMapObjectType; import tools.FileoutputUtil; import tools.Pair; import tools.packet.CField; public class GameConstants { public static boolean GMS = true; public static final List<MapleMapObjectType> rangedMapobjectTypes = Collections.unmodifiableList(Arrays.asList(new MapleMapObjectType[]{MapleMapObjectType.ITEM, MapleMapObjectType.MONSTER, MapleMapObjectType.DOOR, MapleMapObjectType.REACTOR, MapleMapObjectType.SUMMON, MapleMapObjectType.NPC, MapleMapObjectType.MIST, MapleMapObjectType.FAMILIAR, MapleMapObjectType.EXTRACTOR})); private static final long[] exp = {0L, 15L, 35L, 57L, 92L, 135L, 372L, 560L, 840L, 1242L, 1242L, 1242L, 1242L, 1242L, 1242L, 1490L, 1788L, 2146L, 2575L, 3090L, 3708L, 4450L, 5340L, 6408L, 7690L, 9228L, 11074L, 13289L, 15947L, 19136L, 19136L, 19136L, 19136L, 19136L, 19136L, 22963L, 27556L, 33067L, 39681L, 47616L, 51425L, 55539L, 59982L, 64781L, 69963L, 75560L, 81605L, 88133L, 95184L, 102799L, 111023L, 119905L, 129497L, 139857L, 151046L, 163129L, 176180L, 190274L, 205496L, 221936L, 239691L, 258866L, 279575L, 301941L, 326097L, 352184L, 380359L, 410788L, 443651L, 479143L, 479143L, 479143L, 479143L, 479143L, 479143L, 512683L, 548571L, 586971L, 628059L, 672024L, 719065L, 769400L, 823258L, 880886L, 942548L, 1008526L, 1079123L, 1154662L, 1235488L, 1321972L, 1414511L, 1511357L, 1617151L, 1730351L, 1851475L, 1981078L, 2119753L, 2268135L, 2426904L, 2596787L, 2596787L, 2596787L, 2596787L, 2596787L, 2596787L, 2778526L, 2973061L, 3181175L, 3403857L, 3642126L, 3897074L, 4169869L, 4461795L, 4774082L, 5108267L, 5465845L, 5848485L, 6257845L, 6695894L, 7164606L, 7666128L, 8202756L, 8776948L, 9391334L, 10048727L, 10752137L, 11504786L, 12310121L, 13171829L, 14093857L, 15080426L, 16136055L, 17265578L, 18474168L, 19767359L, 21151074L, 22631649L, 24215864L, 25910974L, 27724727L, 29665473L, 31742056L, 33963999L, 36341478L, 38885381L, 41607357L, 44519871L, 47636261L, 50970799L, 54538754L, 58356466L, 62531364L, 66908559L, 71592158L, 76603609L, 81965862L, 87703472L, 93842715L, 100411706L, 107440525L, 113895024L, 120546524L, 127779315L, 135446073L, 143572873L, 152187207L, 161318439L, 170997545L, 181257397L, 192132840L, 203660810L, 215880458L, 228833285L, 242563282L, 257117078L, 272544102L, 288896748L, 306230552L, 324604385L, 344080648L, 364725486L, 386609015L, 409805555L, 434393888L, 460457521L, 488084972L, 517370070L, 548412274L, 581317010L, 616196030L, 653167791L, 692357858L, 733899329L, 777933288L, 824609285L, 874085842L, 926530992L, 982122851L, 1041050222L, 1103513235L, 2207026470L, 2648431764L, 3178118116L, 3813741739L, 4576490086L, 5491788103L, 6590145723L, 7908174867L, 9489809840L, 11387771808L, 24142076232L, 25590600805L, 27126036853L, 28753599064L, 30478815007L, 32307543907L, 34245996541L, 36300756333L, 38478801712L, 40787529814L, 84838062013L, 88231584493L, 91760847872L, 95431281786L, 99248533057L, 103218474379L, 107347213354L, 111641101888L, 116106745963L, 120751015801L, 246332072234L, 251258713678L, 256283887951L, 261409565710L, 266637757024L, 271970512164L, 277409922407L, 282958120855L, 288617283272L, 294389628937L, 594667050452L, 600613720956L, 606619858165L, 612686056746L, 618812917313L, 625001046486L, 631251056950L, 637563567519L, 643939203194L, 650378595225L, 650378595225L, 650378595225L, 650378595225L, 650378595225L, 650378595225L, 650378595225L}; private static final int[] closeness = {0, 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}; private static final int[] setScore = {0, 10, 100, 300, 600, 1000, 2000, 4000, 7000, 10000}; private static final int[] cumulativeTraitExp = {0, 20, 46, 80, 124, 181, 255, 351, 476, 639, 851, 1084, 1340, 1622, 1932, 2273, 2648, 3061, 3515, 4014, 4563, 5128, 5710, 6309, 6926, 7562, 8217, 8892, 9587, 10303, 11040, 11788, 12547, 13307, 14089, 14883, 15689, 16507, 17337, 18179, 19034, 19902, 20783, 21677, 22584, 23505, 24440, 25399, 26362, 27339, 28331, 29338, 30360, 31397, 32450, 33519, 34604, 35705, 36823, 37958, 39110, 40279, 41466, 32671, 43894, 45135, 46395, 47674, 48972, 50289, 51626, 52967, 54312, 55661, 57014, 58371, 59732, 61097, 62466, 63839, 65216, 66597, 67982, 69371, 70764, 72161, 73562, 74967, 76376, 77789, 79206, 80627, 82052, 83481, 84914, 86351, 87792, 89237, 90686, 92139, 93596, 96000}; 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}; private static final int[] pvpExp = {0, 3000, 6000, 12000, 24000, 48000, 960000, 192000, 384000, 768000}; private static final int[] guildexp = {0, 20000, 160000, 540000, 1280000, 2500000, 4320000, 6860000, 10240000, 14580000}; private static final int[] mountexp = {0, 6, 25, 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 final int[] mobBuff = {8210000, 8210001, 8210002, 8210003, 8210004, 8210005, 8210006}; public static final int[] itemBlock = {4001168, 5220013, 3993003, 2340000, 2049100, 4001129, 2040037, 2040006, 2040007, 2040303, 2040403, 2040506, 2040507, 2040603, 2040709, 2040710, 2040711, 2040806, 2040903, 2041024, 2041025, 2043003, 2043103, 2043203, 2043303, 2043703, 2043803, 2044003, 2044103, 2044203, 2044303, 2044403, 2044503, 2044603, 2044908, 2044815, 2044019, 2044703}; public static final int[] cashBlock = {5080001, 5080000, 5063000, 5064000, 5660000, 5660001, 5222027, 5530172, 5530173, 5530174, 5530175, 5530176, 5530177, 5251016, 5534000, 5152053, 5152058, 5150044, 5150040, 5220082, 5680021, 5150050, 5211091, 5211092, 5220087, 5220088, 5220089, 5220090, 5220085, 5220086, 5470000, 1002971, 1052202, 5060003, 5060004, 5680015, 5220082, 5530146, 5530147, 5530148, 5710000, 5500000, 5500001, 5500002, 5500002, 5500003, 5500004, 5500005, 5500006, 5050000, 5075000, 5075001, 5075002, 1122121, 5450000, 5190005, 5190007, 5600000, 5600001, 5350003, 2300002, 2300003, 5330000, 5062000, 5211073, 5211074, 5211075, 5211076, 5211077, 5211078, 5211079, 5650000, 5431000, 5431001, 5432000, 5450000, 5550000, 5550001, 5640000, 5530013, 5150039, 5150040, 5150046, 5150054, 5150052, 5150053, 5151035, 5151036, 5152053, 5152056, 5152057, 5152058, 1812006, 5650000, 5222000, 5221001, 5220014, 5220015, 5420007, 5451000, 5210000, 5210001, 5210002, 5210003, 5210004, 5210005, 5210006, 5210007, 5210008, 5210009, 5210010, 5210011, 5211000, 5211001, 5211002, 5211003, 5211004, 5211005, 5211006, 5211007, 5211008, 5211009, 5211010, 5211011, 5211012, 5211013, 5211014, 5211015, 5211016, 5211017, 5211018, 5211019, 5211020, 5211021, 5211022, 5211023, 5211024, 5211025, 5211026, 5211027, 5211028, 5211029, 5211030, 5211031, 5211032, 5211033, 5211034, 5211035, 5211036, 5211037, 5211038, 5211039, 5211040, 5211041, 5211042, 5211043, 5211044, 5211045, 5211046, 5211047, 5211048, 5211049, 5211050, 5211051, 5211052, 5211053, 5211054, 5211055, 5211056, 5211057, 5211058, 5211059, 5211060, 5211061, 5360000, 5360001, 5360002, 5360003, 5360004, 5360005, 5360006, 5360007, 5360008, 5360009, 5360010, 5360011, 5360012, 5360013, 5360014, 5360017, 5360050, 5211050, 5360042, 5360052, 5360053, 5360050, 1112810, 1112811, 5530013, 4001431, 4001432, 4032605, 5140000, 5140001, 5140002, 5140003, 5140004, 5140007, 5270000, 5270001, 5270002, 5270003, 5270004, 5270005, 5270006, 9102328, 9102329, 9102330, 9102331, 9102332, 9102333, 5211000, 5211048, 5211048, 5211014, 5211015, 5211016, 5211017, 5211018, 9102855, 9102541, 9102542, 9102584, 9102483, 9102484, 9102911, 9102912}; public static final int[] rankC = {70000000, 70000001, 70000002, 70000003, 70000004, 70000005, 70000006, 70000007, 70000008, 70000009, 70000010, 70000011, 70000012, 70000013}; public static final int[] rankB = {70000014, 70000015, 70000016, 70000017, 70000018, 70000021, 70000022, 70000023, 70000024, 70000025, 70000026}; public static final int[] rankA = {70000027, 70000028, 70000029, 70000030, 70000031, 70000032, 70000033, 70000034, 70000035, 70000036, 70000039, 70000040, 70000041, 70000042}; public static final int[] rankS = {70000043, 70000044, 70000045, 70000047, 70000048, 70000049, 70000050, 70000051, 70000052, 70000053, 70000054, 70000055, 70000056, 70000057, 70000058, 70000059, 70000060, 70000061, 70000062}; public static final int[] circulators = {2700000, 2700100, 2700200, 2700300, 2700400, 2700500, 2700600, 2700700, 2700800, 2700900, 2701000}; public static final int JAIL = 910310300; public static final int MAX_BUFFSTAT = 11; public static final int[] blockedSkills = {4341003}; public static final int[] crayons = {4001326, 4001327, 4001328, 4001329, 4001330, 4001331, 4001332}; public static final String[] RESERVED = {"Rental", "Donor", "MapleNews", "Chef"}; 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[] hyperTele = {310000000, 220000000, 100000000, 250000000, 240000000, 104000000, 103000000, 102000000, 101000000, 120000000, 260000000, 200000000, 230000000}; public static int isBeginnerJob; public static final int[] goldrewards = {2049400, 1, 2049401, 2, 2049301, 2, 2340000, 1, 2070007, 2, 2070016, 1, 2330007, 1, 2070018, 1, 1402037, 1, 2290096, 1, 2290049, 1, 2290041, 1, 2290047, 1, 2290095, 1, 2290017, 1, 2290075, 1, 2290085, 1, 2290116, 1, 1302059, 3, 2049100, 1, 1092049, 1, 1102041, 1, 1432018, 3, 1022047, 3, 3010051, 1, 3010020, 1, 2040914, 1, 1432011, 3, 1442020, 3, 1382035, 3, 1372010, 3, 1332027, 3, 1302056, 3, 1402005, 3, 1472053, 3, 1462018, 3, 1452017, 3, 1422013, 3, 1322029, 3, 1412010, 3, 1472051, 1, 1482013, 1, 1492013, 1, 1382049, 1, 1382050, 1, 1382051, 1, 1382052, 1, 1382045, 1, 1382047, 1, 1382048, 1, 1382046, 1, 1372035, 1, 1372036, 1, 1372037, 1, 1372038, 1, 1372039, 1, 1372040, 1, 1372041, 1, 1372042, 1, 1332032, 8, 1482025, 7, 4001011, 8, 4001010, 8, 4001009, 8, 2047000, 1, 2047001, 1, 2047002, 1, 2047100, 1, 2047101, 1, 2047102, 1, 2047200, 1, 2047201, 1, 2047202, 1, 2047203, 1, 2047204, 1, 2047205, 1, 2047206, 1, 2047207, 1, 2047208, 1, 2047300, 1, 2047301, 1, 2047302, 1, 2047303, 1, 2047304, 1, 2047305, 1, 2047306, 1, 2047307, 1, 2047308, 1, 2047309, 1, 2046004, 1, 2046005, 1, 2046104, 1, 2046105, 1, 2046208, 1, 2046209, 1, 2046210, 1, 2046211, 1, 2046212, 1, 1132014, 3, 1132015, 2, 1132016, 1, 1002801, 2, 1102205, 2, 1332079, 2, 1332080, 2, 1402048, 2, 1402049, 2, 1402050, 2, 1402051, 2, 1462052, 2, 1462054, 2, 1462055, 2, 1472074, 2, 1472075, 2, 1332077, 1, 1382082, 1, 1432063, 1, 1452087, 1, 1462053, 1, 1472072, 1, 1482048, 1, 1492047, 1, 2030008, 5, 1442018, 3, 2040900, 4, 2049100, 10, 2000005, 10, 2000004, 10, 4280000, 8, 2430144, 10, 2290285, 10, 2028061, 10, 2028062, 10, 2530000, 5, 2531000, 5}; public static final int[] silverrewards = {2049401, 2, 2049301, 2, 3010041, 1, 1002452, 6, 1002455, 6, 2290084, 1, 2290048, 1, 2290040, 1, 2290046, 1, 2290074, 1, 2290064, 1, 2290094, 1, 2290022, 1, 2290056, 1, 2290066, 1, 2290020, 1, 1102082, 1, 1302049, 1, 2340000, 1, 1102041, 1, 1452019, 2, 4001116, 3, 4001012, 3, 1022060, 2, 2430144, 5, 2290285, 5, 2028062, 5, 2028061, 5, 2530000, 1, 2531000, 1, 2041100, 1, 2041101, 1, 2041102, 1, 2041103, 1, 2041104, 1, 2041105, 1, 2041106, 1, 2041107, 1, 2041108, 1, 2041109, 1, 2041110, 1, 2041111, 1, 2041112, 1, 2041113, 1, 2041114, 1, 2041115, 1, 2041116, 1, 2041117, 1, 2041118, 1, 2041119, 1, 2041300, 1, 2041301, 1, 2041302, 1, 2041303, 1, 2041304, 1, 2041305, 1, 2041306, 1, 2041307, 1, 2041308, 1, 2041309, 1, 2041310, 1, 2041311, 1, 2041312, 1, 2041313, 1, 2041314, 1, 2041315, 1, 2041316, 1, 2041317, 1, 2041318, 1, 2041319, 1, 2049200, 1, 2049201, 1, 2049202, 1, 2049203, 1, 2049204, 1, 2049205, 1, 2049206, 1, 2049207, 1, 2049208, 1, 2049209, 1, 2049210, 1, 2049211, 1, 1432011, 3, 1442020, 3, 1382035, 3, 1372010, 3, 1332027, 3, 1302056, 3, 1402005, 3, 1472053, 3, 1462018, 3, 1452017, 3, 1422013, 3, 1322029, 3, 1412010, 3, 1002587, 3, 1402044, 1, 2101013, 4, 1442046, 1, 1422031, 1, 1332054, 3, 1012056, 3, 1022047, 3, 3012002, 1, 1442012, 3, 1442018, 3, 1432010, 3, 1432036, 1, 2000005, 10, 2049100, 10, 2000004, 10, 4280001, 8}; public static final int[] peanuts = {2430091, 200, 2430092, 200, 2430093, 200, 2430101, 200, 2430102, 200, 2430136, 200, 2430149, 200, 2340000, 1, 1152000, 5, 1152001, 5, 1152004, 5, 1152005, 5, 1152006, 5, 1152007, 5, 1152008, 5, 1152064, 5, 1152065, 5, 1152066, 5, 1152067, 5, 1152070, 5, 1152071, 5, 1152072, 5, 1152073, 5, 3010019, 2, 1001060, 10, 1002391, 10, 1102004, 10, 1050039, 10, 1102040, 10, 1102041, 10, 1102042, 10, 1102043, 10, 1082145, 5, 1082146, 5, 1082147, 5, 1082148, 5, 1082149, 5, 1082150, 5, 2043704, 10, 2040904, 10, 2040409, 10, 2040307, 10, 2041030, 10, 2040015, 10, 2040109, 10, 2041035, 10, 2041036, 10, 2040009, 10, 2040511, 10, 2040408, 10, 2043804, 10, 2044105, 10, 2044903, 10, 2044804, 10, 2043009, 10, 2043305, 10, 2040610, 10, 2040716, 10, 2041037, 10, 2043005, 10, 2041032, 10, 2040305, 10, 2040211, 5, 2040212, 5, 1022097, 10, 2049000, 10, 2049001, 10, 2049002, 10, 2049003, 10, 1012058, 5, 1012059, 5, 1012060, 5, 1012061, 5, 1332100, 10, 1382058, 10, 1402073, 10, 1432066, 10, 1442090, 10, 1452058, 10, 1462076, 10, 1472069, 10, 1482051, 10, 1492024, 10, 1342009, 10, 2049400, 1, 2049401, 2, 2049301, 2, 2049100, 10, 2430144, 10, 2290285, 10, 2028062, 10, 2028061, 10, 2530000, 5, 2531000, 5, 1032080, 5, 1032081, 4, 1032082, 3, 1032083, 2, 1032084, 1, 1112435, 5, 1112436, 4, 1112437, 3, 1112438, 2, 1112439, 1, 1122081, 5, 1122082, 4, 1122083, 3, 1122084, 2, 1122085, 1, 1132036, 5, 1132037, 4, 1132038, 3, 1132039, 2, 1132040, 1, 1092070, 5, 1092071, 4, 1092072, 3, 1092073, 2, 1092074, 1, 1092075, 5, 1092076, 4, 1092077, 3, 1092078, 2, 1092079, 1, 1092080, 5, 1092081, 4, 1092082, 3, 1092083, 2, 1092084, 1, 1092087, 1, 1092088, 1, 1092089, 1, 1302143, 5, 1302144, 4, 1302145, 3, 1302146, 2, 1302147, 1, 1312058, 5, 1312059, 4, 1312060, 3, 1312061, 2, 1312062, 1, 1322086, 5, 1322087, 4, 1322088, 3, 1322089, 2, 1322090, 1, 1332116, 5, 1332117, 4, 1332118, 3, 1332119, 2, 1332120, 1, 1332121, 5, 1332122, 4, 1332123, 3, 1332124, 2, 1332125, 1, 1342029, 5, 1342030, 4, 1342031, 3, 1342032, 2, 1342033, 1, 1372074, 5, 1372075, 4, 1372076, 3, 1372077, 2, 1372078, 1, 1382095, 5, 1382096, 4, 1382097, 3, 1382098, 2, 1392099, 1, 1402086, 5, 1402087, 4, 1402088, 3, 1402089, 2, 1402090, 1, 1412058, 5, 1412059, 4, 1412060, 3, 1412061, 2, 1412062, 1, 1422059, 5, 1422060, 4, 1422061, 3, 1422062, 2, 1422063, 1, 1432077, 5, 1432078, 4, 1432079, 3, 1432080, 2, 1432081, 1, 1442107, 5, 1442108, 4, 1442109, 3, 1442110, 2, 1442111, 1, 1452102, 5, 1452103, 4, 1452104, 3, 1452105, 2, 1452106, 1, 1462087, 5, 1462088, 4, 1462089, 3, 1462090, 2, 1462091, 1, 1472113, 5, 1472114, 4, 1472115, 3, 1472116, 2, 1472117, 1, 1482075, 5, 1482076, 4, 1482077, 3, 1482078, 2, 1482079, 1, 1492075, 5, 1492076, 4, 1492077, 3, 1492078, 2, 1492079, 1, 1132012, 2, 1132013, 1, 1942002, 2, 1952002, 2, 1962002, 2, 1972002, 2, 1612004, 2, 1622004, 2, 1632004, 2, 1642004, 2, 1652004, 2, 2047000, 1, 2047001, 1, 2047002, 1, 2047100, 1, 2047101, 1, 2047102, 1, 2047200, 1, 2047201, 1, 2047202, 1, 2047203, 1, 2047204, 1, 2047205, 1, 2047206, 1, 2047207, 1, 2047208, 1, 2047300, 1, 2047301, 1, 2047302, 1, 2047303, 1, 2047304, 1, 2047305, 1, 2047306, 1, 2047307, 1, 2047308, 1, 2047309, 1, 2046004, 1, 2046005, 1, 2046104, 1, 2046105, 1, 2046208, 1, 2046209, 1, 2046210, 1, 2046211, 1, 2046212, 1, 2049200, 1, 2049201, 1, 2049202, 1, 2049203, 1, 2049204, 1, 2049205, 1, 2049206, 1, 2049207, 1, 2049208, 1, 2049209, 1, 2049210, 1, 2049211, 1, 1372035, 1, 1372036, 1, 1372037, 1, 1372038, 1, 1382045, 1, 1382046, 1, 1382047, 1, 1382048, 1, 1382049, 1, 1382050, 1, 1382051, 1, 1382052, 1, 1372039, 1, 1372040, 1, 1372041, 1, 1372042, 1, 2070016, 1, 2070007, 2, 2330007, 1, 2070018, 1, 2330008, 1, 2070023, 1, 2070024, 1, 2028062, 5, 2028061, 5}; public static boolean isSaintSaverSkill(int skill) { switch (skill) { case 80001034: case 80001035: case 80001036: return true; } return false; } public static final int getLinkedBuffSkill(final int id) { switch (id) { case 61120008: return 61111008; case 11121011: case 11121012: return 11121005; } return id; } public static boolean isInnocence(int itemId) { return itemId == 2049600 || itemId == 2049601 || itemId == 2049604 || itemId == 2049605 || itemId == 2049606 || itemId == 2049607 || itemId == 2049608 || itemId == 2049609 || itemId == 2049610 || itemId == 2049611; } public static int[] eventCommonReward = {0, 10, 1, 10, 4, 5, 5060004, 25, 4170024, 25, 4280000, 5, 4280001, 6, 5490000, 5, 5490001, 6}; public static int[] eventUncommonReward = {1, 4, 2, 8, 3, 8, 2022179, 5, 5062000, 20, 2430082, 20, 2430092, 20, 2022459, 2, 2022460, 1, 2022462, 1, 2430103, 2, 2430117, 2, 2430118, 2, 2430201, 4, 2430228, 4, 2430229, 4, 2430283, 4, 2430136, 4, 2430476, 4, 2430511, 4, 2430206, 4, 2430199, 1, 1032062, 5, 5220000, 28, 2022459, 5, 2022460, 5, 2022461, 5, 2022462, 5, 2022463, 5, 5050000, 2, 4080100, 10, 4080000, 10, 2049100, 10, 2430144, 10, 2290285, 10, 2028062, 10, 2028061, 10, 2530000, 5, 2531000, 5, 2041100, 1, 2041101, 1, 2041102, 1, 2041103, 1, 2041104, 1, 2041105, 1, 2041106, 1, 2041107, 1, 2041108, 1, 2041109, 1, 2041110, 1, 2041111, 1, 2041112, 1, 2041113, 1, 2041114, 1, 2041115, 1, 2041116, 1, 2041117, 1, 2041118, 1, 2041119, 1, 2041300, 1, 2041301, 1, 2041302, 1, 2041303, 1, 2041304, 1, 2041305, 1, 2041306, 1, 2041307, 1, 2041308, 1, 2041309, 1, 2041310, 1, 2041311, 1, 2041312, 1, 2041313, 1, 2041314, 1, 2041315, 1, 2041316, 1, 2041317, 1, 2041318, 1, 2041319, 1, 2049200, 1, 2049201, 1, 2049202, 1, 2049203, 1, 2049204, 1, 2049205, 1, 2049206, 1, 2049207, 1, 2049208, 1, 2049209, 1, 2049210, 1, 2049211, 1}; public static int[] eventRareReward = {2049100, 5, 2430144, 5, 2290285, 5, 2028062, 5, 2028061, 5, 2530000, 2, 2531000, 2, 2049116, 1, 2049401, 10, 2049301, 20, 2049400, 3, 2340000, 1, 3010130, 5, 3010131, 5, 3010132, 5, 3010133, 5, 3010136, 5, 3010116, 5, 3010117, 5, 3010118, 5, 1112405, 1, 1112445, 1, 1022097, 1, 2040211, 1, 2040212, 1, 2049000, 2, 2049001, 2, 2049002, 2, 2049003, 2, 1012058, 2, 1012059, 2, 1012060, 2, 1012061, 2, 2022460, 4, 2022461, 3, 2022462, 4, 2022463, 3, 2040041, 1, 2040042, 1, 2040334, 1, 2040430, 1, 2040538, 1, 2040539, 1, 2040630, 1, 2040740, 1, 2040741, 1, 2040742, 1, 2040829, 1, 2040830, 1, 2040936, 1, 2041066, 1, 2041067, 1, 2043023, 1, 2043117, 1, 2043217, 1, 2043312, 1, 2043712, 1, 2043812, 1, 2044025, 1, 2044117, 1, 2044217, 1, 2044317, 1, 2044417, 1, 2044512, 1, 2044612, 1, 2044712, 1, 2046000, 1, 2046001, 1, 2046004, 1, 2046005, 1, 2046100, 1, 2046101, 1, 2046104, 1, 2046105, 1, 2046200, 1, 2046201, 1, 2046202, 1, 2046203, 1, 2046208, 1, 2046209, 1, 2046210, 1, 2046211, 1, 2046212, 1, 2046300, 1, 2046301, 1, 2046302, 1, 2046303, 1, 2047000, 1, 2047001, 1, 2047002, 1, 2047100, 1, 2047101, 1, 2047102, 1, 2047200, 1, 2047201, 1, 2047202, 1, 2047203, 1, 2047204, 1, 2047205, 1, 2047206, 1, 2047207, 1, 2047208, 1, 2047300, 1, 2047301, 1, 2047302, 1, 2047303, 1, 2047304, 1, 2047305, 1, 2047306, 1, 2047307, 1, 2047308, 1, 2047309, 1, 1112427, 5, 1112428, 5, 1112429, 5, 1012240, 10, 1022117, 10, 1032095, 10, 1112659, 10, 2070007, 10, 2330007, 5, 2070016, 5, 2070018, 5, 1152038, 1, 1152039, 1, 1152040, 1, 1152041, 1, 1122090, 1, 1122094, 1, 1122098, 1, 1122102, 1, 1012213, 1, 1012219, 1, 1012225, 1, 1012231, 1, 1012237, 1, 2070023, 5, 2070024, 5, 2330008, 5, 2003516, 5, 2003517, 1, 1132052, 1, 1132062, 1, 1132072, 1, 1132082, 1, 1112585, 1, 1072502, 1, 1072503, 1, 1072504, 1, 1072505, 1, 1072506, 1, 1052333, 1, 1052334, 1, 1052335, 1, 1052336, 1, 1052337, 1, 1082305, 1, 1082306, 1, 1082307, 1, 1082308, 1, 1082309, 1, 1003197, 1, 1003198, 1, 1003199, 1, 1003200, 1, 1003201, 1, 1662000, 1, 1662001, 1, 1672000, 1, 1672001, 1, 1672002, 1, 1112583, 1, 1032092, 1, 1132084, 1, 2430290, 1, 2430292, 1, 2430294, 1, 2430296, 1, 2430298, 1, 2430300, 1, 2430302, 1, 2430304, 1, 2430306, 1, 2430308, 1, 2430310, 1, 2430312, 1, 2430314, 1, 2430316, 1, 2430318, 1, 2430320, 1, 2430322, 1, 2430324, 1, 2430326, 1, 2430328, 1, 2430330, 1, 2430332, 1, 2430334, 1, 2430336, 1, 2430338, 1, 2430340, 1, 2430342, 1, 2430344, 1, 2430347, 1, 2430349, 1, 2430351, 1, 2430353, 1, 2430355, 1, 2430357, 1, 2430359, 1, 2430361, 1, 2430392, 1, 2430512, 1, 2430536, 1, 2430477, 1, 2430146, 1, 2430148, 1, 2430137, 1}; public static int[] eventSuperReward = {2022121, 10, 4031307, 50, 3010127, 10, 3010128, 10, 3010137, 10, 3010157, 10, 2049300, 10, 2040758, 10, 1442057, 10, 2049402, 10, 2049304, 1, 2049305, 1, 2040759, 7, 2040760, 5, 2040125, 10, 2040126, 10, 1012191, 5, 1112514, 1, 1112531, 1, 1112629, 1, 1112646, 1, 1112515, 1, 1112532, 1, 1112630, 1, 1112647, 1, 1112516, 1, 1112533, 1, 1112631, 1, 1112648, 1, 2040045, 10, 2040046, 10, 2040333, 10, 2040429, 10, 2040542, 10, 2040543, 10, 2040629, 10, 2040755, 10, 2040756, 10, 2040757, 10, 2040833, 10, 2040834, 10, 2041068, 10, 2041069, 10, 2043022, 12, 2043120, 12, 2043220, 12, 2043313, 12, 2043713, 12, 2043813, 12, 2044028, 12, 2044120, 12, 2044220, 12, 2044320, 12, 2044520, 12, 2044513, 12, 2044613, 12, 2044713, 12, 2044817, 12, 2044910, 12, 2046002, 5, 2046003, 5, 2046102, 5, 2046103, 5, 2046204, 10, 2046205, 10, 2046206, 10, 2046207, 10, 2046304, 10, 2046305, 10, 2046306, 10, 2046307, 10, 2040006, 2, 2040007, 2, 2040303, 2, 2040403, 2, 2040506, 2, 2040507, 2, 2040603, 2, 2040709, 2, 2040710, 2, 2040711, 2, 2040806, 2, 2040903, 2, 2040913, 2, 2041024, 2, 2041025, 2, 2044815, 2, 2044908, 2, 1152046, 1, 1152047, 1, 1152048, 1, 1152049, 1, 1122091, 1, 1122095, 1, 1122099, 1, 1122103, 1, 1012214, 1, 1012220, 1, 1012226, 1, 1012232, 1, 1012238, 1, 1032088, 1, 1032089, 1, 1032090, 1, 1032091, 1, 1132053, 1, 1132063, 1, 1132073, 1, 1132083, 1, 1112586, 1, 1112593, 1, 1112597, 1, 1662002, 1, 1662003, 1, 1672003, 1, 1672004, 1, 1672005, 1, 1092088, 1, 1092089, 1, 1092087, 1, 1102275, 1, 1102276, 1, 1102277, 1, 1102278, 1, 1102279, 1, 1102280, 1, 1102281, 1, 1102282, 1, 1102283, 1, 1102284, 1, 1082295, 1, 1082296, 1, 1082297, 1, 1082298, 1, 1082299, 1, 1082300, 1, 1082301, 1, 1082302, 1, 1082303, 1, 1082304, 1, 1072485, 1, 1072486, 1, 1072487, 1, 1072488, 1, 1072489, 1, 1072490, 1, 1072491, 1, 1072492, 1, 1072493, 1, 1072494, 1, 1052314, 1, 1052315, 1, 1052316, 1, 1052317, 1, 1052318, 1, 1052319, 1, 1052329, 1, 1052321, 1, 1052322, 1, 1052323, 1, 1003172, 1, 1003173, 1, 1003174, 1, 1003175, 1, 1003176, 1, 1003177, 1, 1003178, 1, 1003179, 1, 1003180, 1, 1003181, 1, 1302152, 1, 1302153, 1, 1312065, 1, 1312066, 1, 1322096, 1, 1322097, 1, 1332130, 1, 1332131, 1, 1342035, 1, 1342036, 1, 1372084, 1, 1372085, 1, 1382104, 1, 1382105, 1, 1402095, 1, 1402096, 1, 1412065, 1, 1412066, 1, 1422066, 1, 1422067, 1, 1432086, 1, 1432087, 1, 1442116, 1, 1442117, 1, 1452111, 1, 1452112, 1, 1462099, 1, 1462100, 1, 1472122, 1, 1472123, 1, 1482084, 1, 1482085, 1, 1492085, 1, 1492086, 1, 1532017, 1, 1532018, 1, 2430291, 1, 2430293, 1, 2430295, 1, 2430297, 1, 2430299, 1, 2430301, 1, 2430303, 1, 2430305, 1, 2430307, 1, 2430309, 1, 2430311, 1, 2430313, 1, 2430315, 1, 2430317, 1, 2430319, 1, 2430321, 1, 2430323, 1, 2430325, 1, 2430327, 1, 2430329, 1, 2430331, 1, 2430333, 1, 2430335, 1, 2430337, 1, 2430339, 1, 2430341, 1, 2430343, 1, 2430345, 1, 2430348, 1, 2430350, 1, 2430352, 1, 2430354, 1, 2430356, 1, 2430358, 1, 2430360, 1, 2430362, 1, 1012239, 1, 1122104, 1, 1112584, 1, 1032093, 1, 1132085, 1}; public static int[] tenPercent = {2040002, 2040005, 2040026, 2040031, 2040100, 2040105, 2040200, 2040205, 2040302, 2040310, 2040318, 2040323, 2040328, 2040329, 2040330, 2040331, 2040402, 2040412, 2040419, 2040422, 2040427, 2040502, 2040505, 2040514, 2040517, 2040534, 2040602, 2040612, 2040619, 2040622, 2040627, 2040702, 2040705, 2040708, 2040727, 2040802, 2040805, 2040816, 2040825, 2040902, 2040915, 2040920, 2040925, 2040928, 2040933, 2041002, 2041005, 2041008, 2041011, 2041014, 2041017, 2041020, 2041023, 2041058, 2041102, 2041105, 2041108, 2041111, 2041302, 2041305, 2041308, 2041311, 2043002, 2043008, 2043019, 2043102, 2043114, 2043202, 2043214, 2043302, 2043402, 2043702, 2043802, 2044002, 2044014, 2044015, 2044102, 2044114, 2044202, 2044214, 2044302, 2044314, 2044402, 2044414, 2044502, 2044602, 2044702, 2044802, 2044809, 2044902, 2045302, 2048002, 2048005}; public static int[] fishingReward = {0, 100, 1, 100, 2022179, 1, 1302021, 5, 1072238, 1, 1072239, 1, 2049100, 2, 2430144, 1, 2290285, 1, 2028062, 1, 2028061, 1, 2049301, 1, 2049401, 1, 1302000, 3, 1442011, 1, 4000517, 8, 4000518, 10, 4031627, 2, 4031628, 1, 4031630, 1, 4031631, 1, 4031632, 1, 4031633, 2, 4031634, 1, 4031635, 1, 4031636, 1, 4031637, 2, 4031638, 2, 4031639, 1, 4031640, 1, 4031641, 2, 4031642, 2, 4031643, 1, 4031644, 1, 4031645, 2, 4031646, 2, 4031647, 1, 4031648, 1, 4001187, 20, 4001188, 20, 4001189, 20, 4031629, 1}; public static int[] Equipments_Bonus = {1122017}; public static int[] blockedMaps = {910310300, 180000001, 180000002, 109050000, 280030000, 240060200, 280090000, 280030001, 240060201, 950101100, 950101010}; public static final int[] normalDrops = {4001009, 4001010, 4001011, 4001012, 4001013, 4001014, 4001021, 4001038, 4001039, 4001040, 4001041, 4001042, 4001043, 4001038, 4001039, 4001040, 4001041, 4001042, 4001043, 4001038, 4001039, 4001040, 4001041, 4001042, 4001043, 4000164, 2000000, 2000003, 2000004, 2000005, 4000019, 4000000, 4000016, 4000006, 2100121, 4000029, 4000064, 5110000, 4000306, 4032181, 4006001, 4006000, 2050004, 3994102, 3994103, 3994104, 3994105, 2430007, 4000164, 2000000, 2000003, 2000004, 2000005, 4000019, 4000000, 4000016, 4000006, 2100121, 4000029, 4000064, 5110000, 4000306, 4032181, 4006001, 4006000, 2050004, 3994102, 3994103, 3994104, 3994105, 2430007, 4000164, 2000000, 2000003, 2000004, 2000005, 4000019, 4000000, 4000016, 4000006, 2100121, 4000029, 4000064, 5110000, 4000306, 4032181, 4006001, 4006000, 2050004, 3994102, 3994103, 3994104, 3994105, 2430007}; public static final int[] rareDrops = {2022179, 2049100, 2049100, 2430144, 2028062, 2028061, 2290285, 2049301, 2049401, 2022326, 2022193, 2049000, 2049001, 2049002}; public static final int[] superDrops = {2040804, 2049400, 2028062, 2028061, 2430144, 2430144, 2430144, 2430144, 2290285, 2049100, 2049100, 2049100, 2049100}; public static int[] owlItems = {1082002, 2070005, 2070006, 1022047, 1102041, 2044705, 2340000, 2040017, 1092030, 2040804}; public static int getOptionType(final int itemId) { int id = itemId / 10000; if (isWeapon(itemId) || ((int) (itemId / 1000)) == 1099) { return 10; //���� } else if (id == 109 || id == 110 || id == 113) { return 20; //���� & ���� & ��Ʈ } else if (isAccessory(itemId)) { return 40; //�Ǽ��縮 } else if (id == 100) { return 51; //���� } else if (id == 104 || id == 106) { return 52; //����, �ѹ�� } else if (id == 105) { return 53; //���� } else if (id == 108) { return 54; //�尩 } else if (id == 107) { return 55; } return 0; } public static final List<Pair<Integer, String>> SCRIPTABLE_NPCS = new ArrayList(); public static final int[] publicNpcIds = {9071006, 9901540}; public static final String[] publicNpcs = {"#cBoss PQ#", "Use donation #cUnits#"}; public static final int OMOK_SCORE = 122200; public static final int MATCH_SCORE = 122210; public static final int HP_ITEM = 122221; public static final int MP_ITEM = 122223; public static final int JAIL_TIME = 123455; public static final int JAIL_QUEST = 123456; public static final int REPORT_QUEST = 123457; public static final int ULT_EXPLORER = 111111; public static final int ENERGY_DRINK = 122500; public static final int HARVEST_TIME = 122501; public static final int PENDANT_SLOT = 122700; public static final int CURRENT_SET = 122800; public static final int BOSS_PQ = 150001; public static final int JAGUAR = 111112; public static final int DOJO = 150100; public static final int DOJO_RECORD = 150101; public static final int PARTY_REQUEST = 122900; public static final int PARTY_INVITE = 122901; public static final int QUICK_SLOT = 123000; public static final int ITEM_TITLE = 124000; public static Item setitemstat(Equip items) { items.getstat().clear(); if (items.getUpgradeSlots() > 0) { items.setstat(MapleEquipStat.SLOTS, items.getUpgradeSlots()); } if (items.getLevel() > 0) { items.setstat(MapleEquipStat.Level, items.getLevel()); } if (items.getStr() > 0) { items.setstat(MapleEquipStat.STR, items.getStr()); } if (items.getDex() > 0) { items.setstat(MapleEquipStat.DEX, items.getDex()); } if (items.getInt() > 0) { items.setstat(MapleEquipStat.INT, items.getInt()); } if (items.getLuk() > 0) { items.setstat(MapleEquipStat.LUK, items.getLuk()); } if (items.getHp() > 0) { items.setstat(MapleEquipStat.maxHp, items.getHp()); } if (items.getMp() > 0) { items.setstat(MapleEquipStat.maxMp, items.getMp()); } if (items.getWatk() > 0) { items.setstat(MapleEquipStat.WATK, items.getWatk()); } if (items.getMatk() > 0) { items.setstat(MapleEquipStat.MATK, items.getMatk()); } if (items.getWdef() > 0) { items.setstat(MapleEquipStat.WDEF, items.getWdef()); } if (items.getMdef() > 0) { items.setstat(MapleEquipStat.MDEF, items.getMdef()); } if (items.getAcc() > 0) { items.setstat(MapleEquipStat.ACC, items.getAcc()); } if (items.getAvoid() > 0) { items.setstat(MapleEquipStat.AVOID, items.getAvoid()); } if (items.getHands() > 0) { items.setstat(MapleEquipStat.Hands, items.getHands()); } if (items.getSpeed() > 0) { items.setstat(MapleEquipStat.SPEED, items.getSpeed()); } if (items.getJump() > 0) { items.setstat(MapleEquipStat.JUMP, items.getJump()); } if (items.getFlag() > 0) { items.setstat(MapleEquipStat.flag, items.getFlag()); } if (items.getViciousHammer() > 0) { items.setstat(MapleEquipStat.Hammer, items.getViciousHammer()); } return items.copy(); } public static Long getExpNeededForLevel(int level) { if ((level < 0) || (level >= exp.length)) { return Long.valueOf(9223372036854775807L); } return Long.valueOf(exp[level]); } public static int getGuildExpNeededForLevel(int level) { if ((level < 0) || (level >= guildexp.length)) { return 2147483647; } return guildexp[level]; } public static int getPVPExpNeededForLevel(int level) { if ((level < 0) || (level >= pvpExp.length)) { return 2147483647; } return pvpExp[level]; } public static int getClosenessNeededForLevel(int level) { return closeness[(level - 1)]; } public static int getMountExpNeededForLevel(int level) { return mountexp[(level - 1)]; } public static int getTraitExpNeededForLevel(int level) { if ((level < 0) || (level >= cumulativeTraitExp.length)) { return 2147483647; } return cumulativeTraitExp[level]; } public static int getSetExpNeededForLevel(int level) { if ((level < 0) || (level >= setScore.length)) { return 2147483647; } return setScore[level]; } public static int getMonsterHP(int level) { if ((level < 0) || (level >= mobHpVal.length)) { return 2147483647; } return mobHpVal[level]; } public static int getBookLevel(int level) { return 5 * level * (level + 1); } public static int getTimelessRequiredEXP(int level) { return 70 + level * 10; } public static int getReverseRequiredEXP(int level) { return 60 + level * 5; } public static int getProfessionEXP(int level) { return (100 * level * level + level * 400) / 2; } public static boolean isHarvesting(int itemId) { return (itemId >= 1500000) && (itemId < 1520000); } public static int maxViewRangeSq() { return 1000000; } public static int maxViewRangeSq_Half() { return 500000; } public static boolean isJobFamily(int baseJob, int currentJob) { return (currentJob >= baseJob) && (currentJob / 100 == baseJob / 100); } public static boolean isKOC(int job) { return (job >= 1000) && (job < 2000); } public static boolean isDawnWarrior(int job) { return (job == 1100) || ((job >= 1110) && (job <= 1112)); } public static boolean isWindArcher(int job) { return (job == 1300) || ((job >= 1310) && (job <= 1312)); } public static boolean isThunderBreaker(int job) { return (job == 1500) || ((job >= 1510) && (job <= 1512)); } public static boolean isEvan(int job) { return (job == 2001) || (job / 100 == 22); } public static boolean isMercedes(int job) { return (job == 2002) || (job / 100 == 23); } public static boolean isJett(int job) { return (job == 508) || (job / 10 == 57); } public static boolean isPhantom(int job) { return (job == 2003) || (job / 100 == 24); } public static boolean isluminous(int job) { return (job == 2004) || (job / 100 == 27); } public static boolean isWildHunter(int job) { return (job == 3000) || ((job >= 3300) && (job <= 3312)); } public static boolean isSeparatedSp(int job) { return job == 1000 || isZero(job) ||isAdventurer(job) || isThunderBreaker(job) || (isWindArcher(job)) || (isDawnWarrior(job)) || (isEvan(job)) || (isResist(job)) || (isMercedes(job)) || (isJett(job)) || (isPhantom(job)) || (isMihile(job)) || (luminous(job)) || (kanna(job)) || (hayato(job)) || (kaiser(job)) || (xenon(job)) || (demon_AV(job)) || (angelic(job)); } public static boolean luminous(int job) { return (job == 2004) || ((job >= 2700) && (job <= 2712)); } public static boolean hayato(int job) { return (job == 4001) || ((job >= 4100) && (job <= 4112)); } public static boolean kanna(int job) { return (job == 4002) || ((job >= 4200) && (job <= 4212)); } public static boolean kaiser(int job) { return (job == 6000) || ((job >= 6100) && (job <= 6112)); } public static boolean angelic(int job) { return (job == 6001) || ((job >= 6500) && (job <= 6512)); } public static boolean xenon(int job) { return (job == 3002) || ((job >= 3600) && (job <= 3612)); } public static boolean demon_AV(int job) { return (job >= 3121 && job <= 3122); } public static boolean isDemon(int job) { return (job >= 3110 && job <= 3112); } public static boolean isAran(int job) { return (job >= 2000) && (job <= 2112) && (job != 2001) && (job != 2002) && (job != 2003); } public static boolean isResist(int job) { return job / 1000 == 3; } public static boolean isAdventurer(int job) { return (job >= 0) && (job < 1000); } public static boolean isCannon(int job) { return (job == 1) || (job == 501) || ((job >= 530) && (job <= 532)); } public static boolean isDualBlade(int job) { return (job >= 430) && (job <= 434); } public static boolean isMihile(int job) { return (job == 5000) || ((job >= 5100) && (job <= 5112)); } public static boolean isZero(int job) { return job == 10000 || (job >= 10100 && job <= 10112); } public static boolean isRecoveryIncSkill(int id) { switch (id) { case 1110000: case 1210000: case 2000000: case 4100002: case 4200001: case 11110000: return true; } return false; } public static boolean iskaiser_Transfiguration_Skill(int id) { Skill skill = SkillFactory.getSkill(getLinkedAranSkill(id)); if ((skill.getName().contains("(Transfiguration)")) || (skill.getId() == 61111114) || (skill.getId() == 61121015) || (skill.getId() == 61121116) || (skill.getId() == 61120018) || (skill.getId() == 61001004) || (skill.getId() == 61001005) || (skill.getId() == 61110009) || (skill.getId() == 61111113) || (skill.getId() == 61120008)) { return true; } return false; } public static boolean isLinkedAranSkill(int id) { return getLinkedAranSkill(id) != id; } // public static int getLinkedAranSkill(int id) { // switch (id) { // case 21110007: // case 21110008: // return 21110002; // case 21120009: // case 21120010: // return 21120002; // case 4321001: // return 4321000; // case 33101006: // case 33101007: // return 33101005; // case 33101008: // return 33101004; // case 35101009: // case 35101010: // return 35100008; // case 35111009: // case 35111010: // return 35111001; // case 35121013: // return 35111004; // case 35121011: // return 35121009; // case 32001007: // case 32001008: // case 32001009: // case 32001010: // case 32001011: // return 32001001; // case 5300007: // return 5301001; // case 5320011: // return 5321004; // case 23101007: // return 23101001; // case 23111009: // case 23111010: // return 23111008; // case 31001006: // case 31001007: // case 31001008: // return 31000004; // case 30010183: // case 30010184: // case 30010186: // return 30010110; // case 5710012: // return 5711002; // case 31121010: // return 31121000; // case 5211015: // case 5211016: // return 5211011; // case 24111008: // return 24111006; // case 24121010: // return 24121003; // case 5001008: // return 5200010; // case 5001009: // return 5101004; // case 2121055: // return 2121052; // } // return id; // } public static final int getLinkedAranSkill(final int id) { switch (id) { case 21110007: case 21110008: return 21110002; case 21120009: case 21120010: return 21120002; case 4321001: return 4321000; case 33101006: case 33101007: return 33101005; case 33101008: return 33101004; case 35101009: case 35101010: return 35100008; case 35121013: return 35111004; case 35121011: return 35121009; case 35111009: case 35111010: // return 35111001; case 35100004: return 35101004; case 35001001: return 35101009; case 32001007: case 32001008: case 32001009: case 32001010: case 32001011: return 32001001; case 5300007: return 5301001; case 5320011: return 5321004; case 23101007: return 23101001; case 23111010: case 23111009: return 23111008; case 31001006: case 31001007: case 31001008: return 31000004; //�Ʒ����ͷ�̳ʽ� case 27120211: return 27121201; //��� ��Ÿ�� //��������̳ʽ� //�Ʒ�����ī���� //case 60000220: //case 60000221: // return 60000219; case 61001004: case 61001005: case 61110212: case 61120219: return 61001000; //�巡�ス���� case 61110211: case 61120007: case 61121217: return 61101002; //������ҵ� case 61111113: return 61111100; //����Ʈ - Ŀ�ǵ� case 61121201: return 61121100; //�Ⱑ������ case 61121203: return 61121102; //��罺Ʈ�� case 61110009: return 61111003; //������ ��Ʈ���� /*case 61121217: return 61120007; //���꽺�� �����ҵ�*/ case 61121116: return 61121104; //�ҵ彺Ʈ����ũ - ���� case 65101006: return 65101106; case 65121007: case 65121008: return 65121101; //case 61120018: // return 61121105; //ī���� case 65111007: //�ҿ� ��Ŀ return 65111100; case 24121010: return 24121003; case 24111008: return 24111006; case 5001008: return 5001005; case 61120008: return 61111008; case 51100006: return 51101006; case 31011004: case 31011005: case 31011006: case 31011007: return 31011000; case 31201007: case 31201008: case 31201009: case 31201010: return 31201000; case 31211007: case 31211008: case 31211009: case 31211010: return 31211000; case 31221009: case 31221010: case 31221011: case 31221012: return 31221000; case 31211011: return 31211002; case 31221014: return 31221001; case 36101008: case 36101009: return 36101000; case 36111009: case 36111010: return 36111000; case 36121011: case 36121012: return 36121001; case 35100009: return 35100009; case 2121055: return 2121052; case 11121055: return 11121052; case 3120019: return 3111009; } return id; } public static final boolean isForceIncrease(int skillid) { switch (skillid) { case 24100003: case 24120002: case 30010166: case 30011167: case 30011168: case 30011169: case 30011170: case 31000004: case 31001006: case 31001007: case 31001008: return true; } return false; } public static int getBOF_ForJob(int job) { return PlayerStats.getSkillByJob(12, job); } public static int getEmpress_ForJob(int job) { return PlayerStats.getSkillByJob(73, job); } public static boolean isElementAmp_Skill(int skill) { switch (skill) { case 2110001: case 2210001: case 12110001: case 22150000: return true; } return false; } public static int getMPEaterForJob(int job) { switch (job) { case 210: case 211: case 212: return 2100000; case 220: case 221: case 222: return 2200000; case 230: case 231: case 232: return 2300000; case 213: case 214: case 215: case 216: case 217: case 218: case 219: case 223: case 224: case 225: case 226: case 227: case 228: case 229: } return 2100000; } public static int getJobShortValue(int job) { if (job >= 1000) { job -= job / 1000 * 1000; } job /= 100; if (job == 4) { job *= 2; } else if (job == 3) { job++; } else if (job == 5) { job += 11; } return job; } public static boolean isPyramidSkill(int skill) { return (isBeginnerJob(skill / 10000)) && (skill % 10000 == 1020); } public static boolean isInflationSkill(int skill) { return (isBeginnerJob(skill / 10000)) && (skill % 10000 == 1092); } public static boolean isMulungSkill(int skill) { return (isBeginnerJob(skill / 10000)) && ((skill % 10000 == 1009) || (skill % 10000 == 1010) || (skill % 10000 == 1011)); } public static boolean isIceKnightSkill(int skill) { return (isBeginnerJob(skill / 10000)) && ((skill % 10000 == 1098) || (skill % 10000 == 99) || (skill % 10000 == 100) || (skill % 10000 == 103) || (skill % 10000 == 104) || (skill % 10000 == 1105)); } public static boolean isThrowingStar(int itemId) { return itemId / 10000 == 207; } public static boolean isBullet(int itemId) { return itemId / 10000 == 233; } public static boolean isRechargable(int itemId) { return (isThrowingStar(itemId)) || (isBullet(itemId)); } public static boolean isOverall(int itemId) { return itemId / 10000 == 105; } public static boolean isPet(int itemId) { return itemId / 10000 == 500; } public static boolean isArrowForCrossBow(int itemId) { return (itemId >= 2061000) && (itemId < 2062000); } public static boolean isArrowForBow(int itemId) { return (itemId >= 2060000) && (itemId < 2061000); } public static boolean isMagicWeapon(int itemId) { int s = itemId / 10000; return (s == 137) || (s == 138); } public static boolean isWeapon(int itemId) { return (itemId >= 1200000) && (itemId < 1600000); } public static MapleInventoryType getInventoryType(int itemId) { byte type = (byte) (itemId / 1000000); if ((type < 1) || (type > 5)) { return MapleInventoryType.UNDEFINED; } return MapleInventoryType.getByType(type); } public static boolean isInBag(int slot, byte type) { return (slot >= 101) && (slot <= 512) && (type == MapleInventoryType.ETC.getType()); } public static MapleWeaponType getWeaponType(int itemId) { int cat = itemId / 10000; cat %= 100; switch (cat) { case 21: return MapleWeaponType.SHINING_ROD; case 23: return MapleWeaponType.DESPERADO; case 24: return MapleWeaponType.ENERGYSWORD; case 22: return MapleWeaponType.SOULSHOOTER; case 30: return MapleWeaponType.SWORD1H; case 31: return MapleWeaponType.AXE1H; case 32: return MapleWeaponType.BLUNT1H; case 33: return MapleWeaponType.DAGGER; case 34: return MapleWeaponType.KATARA; case 35: return MapleWeaponType.MAGIC_ARROW; case 36: return MapleWeaponType.CANE; case 37: return MapleWeaponType.WAND; case 38: return MapleWeaponType.STAFF; case 40: return MapleWeaponType.SWORD2H; case 41: return MapleWeaponType.AXE2H; case 42: return MapleWeaponType.BLUNT2H; case 43: return MapleWeaponType.SPEAR; case 44: return MapleWeaponType.POLE_ARM; case 45: return MapleWeaponType.BOW; case 46: return MapleWeaponType.CROSSBOW; case 47: return MapleWeaponType.CLAW; case 48: return MapleWeaponType.KNUCKLE; case 49: return MapleWeaponType.GUN; case 52: return MapleWeaponType.DUAL_BOW; case 53: return MapleWeaponType.CANNON; case 25: case 26: case 27: case 28: case 29: case 39: case 50: case 51: case 54: return MapleWeaponType.KATANA; case 55: return MapleWeaponType.FAN; } return MapleWeaponType.NOT_A_WEAPON; } public static boolean isShield(int itemId) { int cat = itemId / 10000; cat %= 100; return cat == 9; } public static boolean isEquip(int itemId) { return itemId / 1000000 == 1; } public static boolean isCleanSlate(int itemId) { return itemId / 100 == 20490; } public static boolean isAccessoryScroll(int itemId) { return itemId / 100 == 20492; } public static boolean isChaosScroll(int itemId) { if ((itemId >= 2049105) && (itemId <= 2049110)) { return false; } return (itemId / 100 == 20491) || (itemId == 2040126); } public static int getChaosNumber(int itemId) { return itemId == 2049116 ? 10 : 5; } public static boolean isEquipScroll(int scrollId) { return scrollId / 100 == 20493; } public static boolean isPotentialScroll(int scrollId) { return (scrollId / 100 == 20494) || (scrollId / 100 == 20497) || (scrollId == 5534000); } public static boolean isSpecialScroll(int scrollId) { switch (scrollId) { case 2040727: case 2041058: case 2530000: case 2530001: case 2531000: case 5063000: case 5064000: case 5064003: case 5064004: case 5064002: case 5064100: case 5064101: return true; } return false; } public static boolean is2ndWep(int itemId) { switch (getWeaponType(itemId)) { case MAGIC_ARROW: return true; } return false; } public static boolean isTwoHanded(int itemId) { switch (getWeaponType(itemId)) { case AXE2H: case GUN: case KNUCKLE: case BLUNT2H: case BOW: case FAN: case KATANA: case CLAW: case CROSSBOW: case POLE_ARM: case SPEAR: case SWORD2H: case CANNON: return true; } return false; } public static boolean isTownScroll(int id) { return (id >= 2030000) && (id < 2040000); } public static boolean isUpgradeScroll(int id) { return (id >= 2040000) && (id < 2050000); } public static boolean isGun(int id) { return (id >= 1492000) && (id < 1500000); } public static boolean isUse(int id) { return (id >= 2000000) && (id < 3000000); } public static boolean isSummonSack(int id) { return id / 10000 == 210; } public static boolean isMonsterCard(int id) { return id / 10000 == 238; } public static boolean isSpecialCard(int id) { return id / 1000 >= 2388; } public static int getCardShortId(int id) { return id % 10000; } public static boolean isGem(int id) { return (id >= 4250000) && (id <= 4251402); } public static boolean isOtherGem(int id) { switch (id) { case 1032062: case 1142156: case 1142157: case 2040727: case 2041058: case 4001174: case 4001175: case 4001176: case 4001177: case 4001178: case 4001179: case 4001180: case 4001181: case 4001182: case 4001183: case 4001184: case 4001185: case 4001186: case 4031980: case 4032312: case 4032334: return true; } return false; } public static boolean isCustomQuest(int id) { return id > 99999; } public static int getTaxAmount(int meso) { if (meso >= 100000000) { return (int) Math.round(0.06D * meso); } if (meso >= 25000000) { return (int) Math.round(0.05D * meso); } if (meso >= 10000000) { return (int) Math.round(0.04D * meso); } if (meso >= 5000000) { return (int) Math.round(0.03D * meso); } if (meso >= 1000000) { return (int) Math.round(0.018D * meso); } if (meso >= 100000) { return (int) Math.round(0.008D * meso); } return 0; } public static int EntrustedStoreTax(int meso) { if (meso >= 100000000) { return (int) Math.round(0.03D * meso); } if (meso >= 25000000) { return (int) Math.round(0.025D * meso); } if (meso >= 10000000) { return (int) Math.round(0.02D * meso); } if (meso >= 5000000) { return (int) Math.round(0.015D * meso); } if (meso >= 1000000) { return (int) Math.round(0.008999999999999999D * meso); } if (meso >= 100000) { return (int) Math.round(0.004D * meso); } return 0; } public static int getAttackDelay(int id, Skill skill) { switch (id) { case 3121004: case 5201006: case 5221004: case 5721001: case 13111002: case 23121000: case 24100003: case 24120002: case 24121000: case 24121005: case 31121005: case 33121009: case 35111004: case 35121005: case 35121013: return 40; case 4121007: case 4121013: case 5221007: case 14111005: return 99; case 0: return 570; } if ((skill != null) && (skill.getSkillType() == 3)) { return 0; } if ((skill != null) && (skill.getDelay() > 0) && (!isNoDelaySkill(id))) { return skill.getDelay(); } return 330; } public static byte gachaponRareItem(int id) { switch (id) { case 2040006: case 2040007: case 2040303: case 2040403: case 2040506: case 2040507: case 2040603: case 2040709: case 2040710: case 2040711: case 2040806: case 2040903: case 2041024: case 2041025: case 2043003: case 2043103: case 2043203: case 2043303: case 2043703: case 2043803: case 2044003: case 2044019: case 2044103: case 2044203: case 2044303: case 2044403: case 2044503: case 2044603: case 2044703: case 2044815: case 2044908: case 2049000: case 2049001: case 2049002: case 2049100: case 2340000: return 2; } return 0; } public static boolean isReverseItem(int itemId) { switch (itemId) { case 1002790: case 1002791: case 1002792: case 1002793: case 1002794: case 1052160: case 1052161: case 1052162: case 1052163: case 1052164: case 1072361: case 1072362: case 1072363: case 1072364: case 1072365: case 1082239: case 1082240: case 1082241: case 1082242: case 1082243: case 1302086: case 1312038: case 1322061: case 1332075: case 1332076: case 1342012: case 1372045: case 1382059: case 1402047: case 1412034: case 1422038: case 1432049: case 1442067: case 1452059: case 1462051: case 1472071: case 1482024: case 1492025: case 1522017: case 1532016: case 1942002: case 1952002: case 1962002: case 1972002: return true; } return false; } public static boolean isTimelessItem(int itemId) { switch (itemId) { case 1002776: case 1002777: case 1002778: case 1002779: case 1002780: case 1032031: case 1052155: case 1052156: case 1052157: case 1052158: case 1052159: case 1072355: case 1072356: case 1072357: case 1072358: case 1072359: case 1082234: case 1082235: case 1082236: case 1082237: case 1082238: case 1092057: case 1092058: case 1092059: case 1102172: case 1122011: case 1122012: case 1302081: case 1312037: case 1322060: case 1332073: case 1332074: case 1342011: case 1372044: case 1382057: case 1402046: case 1412033: case 1422037: case 1432047: case 1442063: case 1452057: case 1462050: case 1472068: case 1482023: case 1492023: case 1522016: case 1532015: return true; } return false; } public static boolean isRing(int itemId) { return (itemId >= 1112000) && (itemId < 1113000); } public static boolean isEffectRing(int itemid) { return (isFriendshipRing(itemid)) || (isCrushRing(itemid)) || (isMarriageRing(itemid)); } public static boolean isMarriageRing(int itemId) { switch (itemId) { case 1112803: case 1112806: case 1112807: case 1112809: return true; case 1112804: case 1112805: case 1112808: } return false; } public static boolean isFriendshipRing(int itemId) { switch (itemId) { case 1049000: case 1112800: case 1112801: case 1112802: case 1112810: case 1112811: case 1112812: case 1112816: case 1112817: return true; } return false; } public static boolean isCrushRing(int itemId) { switch (itemId) { case 1048000: case 1048001: case 1048002: case 1112001: case 1112002: case 1112003: case 1112005: case 1112006: case 1112007: case 1112012: case 1112015: return true; } return false; } public static int Equipment_Bonus_EXP(int itemid) { switch (itemid) { case 1122017: return 10; } return 0; } public static int getExpForLevel(int i, int itemId) { if (isReverseItem(itemId)) { return getReverseRequiredEXP(i); } if (getMaxLevel(itemId) > 0) { return getTimelessRequiredEXP(i); } return 0; } public static int getMaxLevel(int itemId) { Map inc = MapleItemInformationProvider.getInstance().getEquipIncrements(itemId); return inc != null ? inc.size() : 0; } public static int getStatChance() { return 25; } public static MonsterStatus getStatFromWeapon(int itemid) { switch (itemid) { case 1302109: case 1312041: case 1322067: case 1332083: case 1372048: case 1382064: case 1402055: case 1412037: case 1422041: case 1432052: case 1442073: case 1452064: case 1462058: case 1472079: case 1482035: return MonsterStatus.DARKNESS; case 1302108: case 1312040: case 1322066: case 1332082: case 1372047: case 1382063: case 1402054: case 1412036: case 1422040: case 1432051: case 1442072: case 1452063: case 1462057: case 1472078: case 1482036: return MonsterStatus.SPEED; } return null; } public static int getXForStat(MonsterStatus stat) { switch (stat) { case DARKNESS: return -70; case SPEED: return -50; } return 0; } public static int getSkillForStat(MonsterStatus stat) { switch (stat) { case DARKNESS: return 1111003; case SPEED: return 3121007; } return 0; } public static int getSkillBook(int job) { if ((job >= 2210) && (job <= 2218)) { return job - 2209; } switch (job) { case 110: case 120: case 130: case 210: case 220: case 230: case 310: case 320: case 410: case 420: case 430: case 530: case 510: case 520: case 570: case 2310: case 2410: case 2710: case 3110: case 3210: case 3310: case 3610: case 3510: case 5110: case 6110: case 6510: case 1310: case 1110: case 1510: return 1; case 111: case 121: case 131: case 211: case 221: case 231: case 311: case 321: case 411: case 421: case 431: case 511: case 521: case 531: case 571: case 2311: case 2411: case 2711: case 3111: case 3211: case 3311: case 3511: case 5111: case 3611: case 6111: case 6511: case 1111: case 1311: case 1511: return 2; case 112: case 122: case 132: case 212: case 222: case 232: case 312: case 322: case 412: case 422: case 432: case 512: case 522: case 532: case 572: case 2312: case 2412: case 3612: case 2712: case 3112: case 3212: case 3312: case 3512: case 5112: case 6112: case 6512: case 1512: case 1112: case 1312: return 3; case 433: return 4; case 434: return 5; } return 0; } public static int getSkillBook(int job, int level) { if ((job >= 2210) && (job <= 2218)) { return job - 2209; } else if (isKOC(job) && !isDawnWarrior(job) && !isThunderBreaker(job) && !isWindArcher(job)) { return 0; } else if (isDualBlade(job)) { return level >= 101 ? 5 : (level >= 61) && (level <= 100) ? 4 : (level >= 46) && (level <=60) ? 3 : (level >= 31) && (level <= 45) ? 2 : (level >= 21) && (level <=30) ? 1 : 0; } else { return level >= 101 ? 3 : (level >= 61) && (level <= 100) ? 2 : (level >= 31) && (level <= 60) ? 1 : level <= 30 ? 0 : 0; } } public static int getSkillBookForSkill(int skillid) { return getSkillBook(skillid / 10000); } public static int getLinkedMountItem(int sourceid) { switch (sourceid % 10000) { case 1003: return 1932006; case 1004: return 1932007; case 1005: return 1932008; case 1006: return 1932009; case 1007: return 1932011; case 1008: return 1932010; case 1009: return 1932013; case 1010: return 1932014; case 1011: return 1932012; case 1012: return 1932022; case 1013: return 1932023; case 1014: return 1932025; case 1046: return 1932018; case 1015: return 1932026; case 1048: return 1932020; case 1016: return 1932027; case 1017: return 1932028; case 1027: return 1932049; case 1018: return 1932034; case 1019: return 1932035; case 1020: return 1932041; case 1021: return 1932043; case 1022: return 1932044; case 1023: return 1932048; case 1025: return 1932004; case 1026: return 1932005; case 1028: return 1932050; case 1029: return 1932053; case 1030: return 1932054; case 1031: return 1932055; case 1032: return 1932056; case 1033: return 1932057; case 1034: return 1932014; case 1035: return 1932012; case 1036: return 1932017; case 1037: return 1932084; case 1038: return 1932088; case 1039: return 1932089; case 1045: return 1932017; //wth? helicopter? i didnt see one, so we use hog case 1047: return 1932019; case 1049: return 1932021; case 1050: return 1932029; case 1051: return 1932038; case 1052: return 1932039; case 1053: return 1932040; case 1054: return 1932045; case 1055: return 1932046; case 1056: return 1932061; case 1057: return 1932052; case 1058: return 1932060; case 1059: return 1932063; case 1060: return 1932064; case 1061: return 1932071; case 1062: return 1932081; case 1063: return 1992000; case 1064: return 1992001; case 1065: return 1992002; case 1066: return 1992003; case 1067: return 1992004; case 1068: return 1992005; case 1069: return 1992006; case 1070: return 1992007; case 1071: return 1992008; case 1072: return 1992009; case 1073: return 1992010; case 1074: return 1992011; case 1075: return 1992012; case 1076: return 1992013; case 1077: return 1992014; case 1078: return 1932083; case 1082: return 1932093; case 1083: return 1932094; case 1084: return 1932095; case 1088: return 1932037; case 1090: return 1932096; case 1111: return 1932078; case 1112: return 1932097; case 1113: return 1932098; case 1114: return 1932099; case 1121: return 1932092; case 1124: return 1932105; case 1127: return 1932108; case 1131: return 1932109; case 1137: return 1932110; //FLYING case 1144: return 1932113; case 1148: return 1932114; case 1149: return 1932115; case 1153: return 1932112; case 1156: return 1932116; case 1157: return 1932117; case 1163: return 1932118; case 1166: return 1932119; case 1173: return 1932120; case 1174: return 1932121; case 1175: return 1932122; case 1179: return 1932123; case 1180: return 1932124; case 1182: return 1932125; case 1183: return 1932126; case 1184: return 1932127; case 1185: return 1932128; case 1187: return 1932130; case 1188: return 1932131; case 1189: return 1932132; case 1190: return 1932133; case 1191: return 1932134; case 1192: return 1932135; case 1193: return 1932136; case 1194: return 1932137; case 1195: return 1932138; case 1196: return 1932139; case 1198: return 1932140; case 1208: return 1932142; case 1220: return 1932146; case 1221: return 1932144; case 1222: return 1932140; case 1225: return 1932104; case 1257: return 1932161; case 1258: return 1932162; } return 0; } public static int getMountItem(int sourceid, MapleCharacter chr) { switch (sourceid) { case 5221006: return 1932000; case 33001001: //temp. if (chr == null) { return 1932015; } switch (chr.getIntNoRecord(JAGUAR)) { case 20: return 1932030; case 30: return 1932031; case 40: return 1932032; case 50: return 1932033; case 60: return 1932036; } return 1932015; case 35001002: case 35120000: return 1932016; //case 30011109: // return 1932085; } if (!isBeginnerJob(sourceid / 10000)) { if (sourceid / 10000 == 8000 && sourceid != 80001000) { //todoo clean up Skill skil = SkillFactory.getSkill(sourceid); if (skil != null && skil.getTamingMob() > 0) { return skil.getTamingMob(); } else { int link = getLinkedMountItem(sourceid); if (link > 0) { if (link < 10000) { return getMountItem(link, chr); } else { return link; } } } } return 0; } if (!isBeginnerJob(sourceid / 10000)) { switch (sourceid % 10000) { case 1003: return 1932006; case 1004: return 1932007; case 1005: return 1932008; case 1006: return 1932009; case 1007: return 1932011; case 1008: return 1932010; case 1009: return 1932013; case 1010: return 1932014; case 1011: return 1932012; case 1012: return 1932022; case 1013: return 1932023; case 1014: return 1932025; case 1046: return 1932018; case 1015: return 1932026; case 1048: return 1932020; case 1016: return 1932027; case 1017: return 1932028; case 1027: return 1932049; case 1018: return 1932034; case 1019: return 1932035; case 1020: return 1932041; case 1021: return 1932043; case 1022: return 1932044; case 1023: return 1932048; case 1025: return 1932004; case 1026: return 1932005; case 1028: return 1932050; case 1029: return 1932053; case 1030: return 1932054; case 1031: return 1932055; case 1032: return 1932056; case 1033: return 1932057; case 1034: return 1932014; case 1035: return 1932012; case 1036: return 1932017; case 1037: return 1932084; case 1038: return 1932088; case 1039: return 1932089; case 1045: return 1932017; //wth? helicopter? i didnt see one, so we use hog case 1047: return 1932019; case 1049: return 1932021; case 1050: return 1932029; case 1051: return 1932038; case 1052: return 1932039; case 1053: return 1932040; case 1054: return 1932045; case 1055: return 1932046; case 1056: return 1932061; case 1057: return 1932052; case 1058: return 1932060; case 1059: return 1932063; case 1060: return 1932064; case 1061: return 1932071; case 1062: return 1932081; case 1063: return 1992000; case 1064: return 1992001; case 1065: return 1992002; case 1066: return 1992003; case 1067: return 1992004; case 1068: return 1992005; case 1069: return 1992006; case 1070: return 1992007; case 1071: return 1992008; case 1072: return 1992009; case 1073: return 1992010; case 1074: return 1992011; case 1075: return 1992012; case 1076: return 1992013; case 1077: return 1992014; case 1078: return 1932083; case 1082: return 1932093; case 1083: return 1932094; case 1084: return 1932095; case 1088: return 1932037; case 1090: return 1932096; case 1111: return 1932078; case 1112: return 1932097; case 1113: return 1932098; case 1114: return 1932099; case 1121: return 1932092; case 1124: return 1932105; case 1127: return 1932108; case 1131: return 1932109; case 1137: return 1932110; //FLYING case 1144: return 1932113; case 1148: return 1932114; case 1149: return 1932115; case 1153: return 1932112; case 1156: return 1932116; case 1157: return 1932117; case 1163: return 1932118; case 1166: return 1932119; case 1173: return 1932120; case 1174: return 1932121; case 1175: return 1932122; case 1179: return 1932123; case 1180: return 1932124; case 1182: return 1932125; case 1183: return 1932126; case 1184: return 1932127; case 1185: return 1932128; case 1187: return 1932130; case 1188: return 1932131; case 1189: return 1932132; case 1190: return 1932133; case 1191: return 1932134; case 1192: return 1932135; case 1193: return 1932136; case 1194: return 1932137; case 1195: return 1932138; case 1196: return 1932139; case 1198: return 1932140; case 1208: return 1932142; case 1220: return 1932146; case 1221: return 1932144; case 1222: return 1932140; case 1225: return 1932104; case 1257: return 1932161; case 1258: return 1932162; default: return 0; } } return 0; } public static boolean isKatara(int itemId) { return itemId / 10000 == 134; } public static boolean isDagger(int itemId) { return itemId / 10000 == 133; } public static boolean isApplicableSkill(int skil) { return ((skil < 70000000) && ((skil % 10000 < 8000) || (skil % 10000 > 8006)) && (!isAngel(skil))) || (skil >= 92000000) || ((skil >= 80000000) && (skil < 80010000)) ; } public static boolean isRidingSKill(int skil) { return (skil >= 80001000 && skil < 80010000); } public static boolean canuseskill(int skil) { for (int i : PlayerStats.hpskills) { if (skil == i) { return false; } } return true; } public static boolean isApplicableSkill_(int skil) { for (int i : PlayerStats.pvpSkills) { if (skil == i) { return true; } } return ((skil >= 90000000) && (skil < 92000000)) || ((skil % 10000 >= 8000) && (skil % 10000 <= 8003)) || (isAngel(skil)) || (skil > 100000000); } public static boolean isTablet(int itemId) { return itemId / 1000 == 2047; } public static boolean isGeneralScroll(int itemId) { return itemId / 1000 == 2046; } public static int getSuccessTablet(int scrollId, int level) { if (scrollId % 1000 / 100 == 2) { switch (level) { case 0: return 70; case 1: return 55; case 2: return 43; case 3: return 33; case 4: return 26; case 5: return 20; case 6: return 16; case 7: return 12; case 8: return 10; } return 7; } if (scrollId % 1000 / 100 == 3) { switch (level) { case 0: return 70; case 1: return 35; case 2: return 18; case 3: return 12; } return 7; } switch (level) { case 0: return 70; case 1: return 50; case 2: return 36; case 3: return 26; case 4: return 19; case 5: return 14; case 6: return 10; } return 7; } public static int getCurseTablet(int scrollId, int level) { if (scrollId % 1000 / 100 == 2) { switch (level) { case 0: return 10; case 1: return 12; case 2: return 16; case 3: return 20; case 4: return 26; case 5: return 33; case 6: return 43; case 7: return 55; case 8: return 70; } return 100; } if (scrollId % 1000 / 100 == 3) { switch (level) { case 0: return 12; case 1: return 18; case 2: return 35; case 3: return 70; } return 100; } switch (level) { case 0: return 10; case 1: return 14; case 2: return 19; case 3: return 26; case 4: return 36; case 5: return 50; case 6: return 70; } return 100; } public static boolean isAccessory(int itemId) { return ((itemId >= 1010000) && (itemId < 1040000)) || ((itemId >= 1122000) && (itemId < 1153000)) || ((itemId >= 1112000) && (itemId < 1113000)); } public static boolean potentialIDFits(int potentialID, int newstate, int i) { if (newstate == 20) { return potentialID >= 40000; } if (newstate == 19) { return potentialID >= 30000; } if (newstate == 18) { return (potentialID >= 20000) && (potentialID < 30000); } if (newstate == 17) { return (potentialID >= 10000) && (potentialID < 20000); } return false; } public static boolean optionTypeFits(int optionType, int itemId) { switch (optionType) { case 10: return isWeapon(itemId); case 11: return !isWeapon(itemId); case 20: return (!isAccessory(itemId)) && (!isWeapon(itemId)); case 40: return isAccessory(itemId); case 51: return itemId / 10000 == 100; case 52: return (itemId / 10000 == 104) || (itemId / 10000 == 105); case 53: return (itemId / 10000 == 106) || (itemId / 10000 == 105); case 54: return itemId / 10000 == 108; case 55: return itemId / 10000 == 107; } return true; } public static int getNebuliteGrade(int id) { if (id / 10000 != 306) { return -1; } if ((id >= 3060000) && (id < 3061000)) { return 0; } if ((id >= 3061000) && (id < 3062000)) { return 1; } if ((id >= 3062000) && (id < 3063000)) { return 2; } if ((id >= 3063000) && (id < 3064000)) { return 3; } return 4; } public static final boolean isMountItemAvailable(int mountid, int jobid) { if ((jobid != 900) && (mountid / 10000 == 190)) { switch (mountid) { case 1902000: case 1902001: case 1902002: return isAdventurer(jobid); case 1902005: case 1902006: case 1902007: return isKOC(jobid); case 1902015: case 1902016: case 1902017: case 1902018: return isAran(jobid); case 1902040: case 1902041: case 1902042: return isEvan(jobid); case 1902003: case 1902004: case 1902008: case 1902009: case 1902010: case 1902011: case 1902012: case 1902013: case 1902014: case 1902019: case 1902020: case 1902021: case 1902022: case 1902023: case 1902024: case 1902025: case 1902026: case 1902027: case 1902028: case 1902029: case 1902030: case 1902031: case 1902032: case 1902033: case 1902034: case 1902035: case 1902036: case 1902037: case 1902038: case 1902039: } if (isResist(jobid)) { return false; } } if (mountid / 10000 != 190) { return false; } return true; } public static boolean isMechanicItem(int itemId) { return (itemId >= 1610000) && (itemId < 1660000); } public static boolean isEvanDragonItem(int itemId) { return (itemId >= 1940000) && (itemId < 1980000); } public static boolean canScroll(int itemId) { return (itemId / 100000 != 19) && (itemId / 100000 != 16); } public static boolean canHammer(int itemId) { switch (itemId) { case 1122000: case 1122076: return false; } if (!canScroll(itemId)) { return false; } return true; } public static int getMasterySkill(int job) { if ((job >= 1410) && (job <= 1412)) { return 14100000; } if ((job >= 410) && (job <= 412)) { return 4100000; } if ((job >= 520) && (job <= 522)) { return 5200000; } return 0; } public static int getExpRate_Below10(int job) { if (isEvan(job)) { return 1; } if ((isAran(job)) || (isKOC(job)) || (isResist(job))) { return 5; } return 10; } public static int getExpRate_Quest(int level) { return level >= 30 ? 2 : level >= 70 ? 5 : level >= 120 ? 10 : 1; } public static final String getCommandBlockedMsg() { return "You may not use this command here."; } public static int getCustomReactItem(int rid, int original) { if (rid == 2008006) { return Calendar.getInstance().get(7) + 4001055; } return original; } public static int getJobNumber(int jobz) { int job = jobz % 1000; if ((job / 100 == 0) || (isBeginnerJob(jobz))) { return 0; } if ((job / 10 % 10 == 0) || (job == 501)) { return 1; } return 2 + job % 10; } public static boolean isBeginnerJob(int job) { return (job == 0) || (job == 1) || (job == 1000) || (job == 2000) || (job == 2001) || (job == 2002) || (job == 2003) || (job == 2004) || (job == 3000) || (job == 3001) || (job == 3002) || (job == 4000) || (job == 4001) || (job == 4002) || (job == 5000) || (job == 6000) || (job == 6001); } public static boolean isForceRespawn(int mapid) { switch (mapid) { case 103000800: case 925100100: case 100010000: return true; } return (mapid / 100000 == 9800) && ((mapid % 10 == 1) || (mapid % 1000 == 100)); } public static int getFishingTime(boolean vip, boolean gm) { return vip ? 30000 : gm ? 1000 : 60000; } public static int getCustomSpawnID(int summoner, int def) { switch (summoner) { case 9400589: case 9400748: return 9400706; } return def; } public static boolean canForfeit(int questid) { switch (questid) { case 20000: case 20010: case 20015: case 20020: return false; } return true; } public static double getAttackRange(MapleStatEffect def, int rangeInc) { double defRange = (400.0D + rangeInc) * (400.0D + rangeInc); if (def != null) { defRange += def.getMaxDistanceSq() + def.getRange() * def.getRange(); } return defRange + 120000.0D; } public static double getAttackRange(Point lt, Point rb) { double defRange = 160000.0D; int maxX = Math.max(Math.abs(lt == null ? 0 : lt.x), Math.abs(rb == null ? 0 : rb.x)); int maxY = Math.max(Math.abs(lt == null ? 0 : lt.y), Math.abs(rb == null ? 0 : rb.y)); defRange += maxX * maxX + maxY * maxY; return defRange + 120000.0D; } public static int getLowestPrice(int itemId) { switch (itemId) { case 2340000: case 2530000: case 2531000: return 50000000; } return -1; } public static boolean isNoDelaySkill(int skillId) { return (skillId == 5110001) || (skillId == 21101003) || (skillId == 15100004) || (skillId == 33101004) || (skillId == 32111010) || (skillId == 2111007) || (skillId == 2211007) || (skillId == 2311007) || (skillId == 32121003) || (skillId == 35121005) || (skillId == 35111004) || (skillId == 35121013) || (skillId == 35121003) || (skillId == 22150004) || (skillId == 22181004) || (skillId == 11101002) || (skillId == 13101002) || (skillId == 24121000) || (skillId == 22161005) || (skillId == 22161005); } public static boolean isNoSpawn(int mapID) { return (mapID == 809040100) || (mapID == 925020010) || (mapID == 925020011) || (mapID == 925020012) || (mapID == 925020013) || (mapID == 925020014) || (mapID == 980010000) || (mapID == 980010100) || (mapID == 980010200) || (mapID == 980010300) || (mapID == 980010020); } public static int getExpRate(int job, int def) { return def; } public static int getModifier(int itemId, int up) { if (up <= 0) { return 0; } switch (itemId) { case 2022459: case 2860179: case 2860193: case 2860207: return 130; case 2022460: case 2022462: case 2022730: return 150; case 2860181: case 2860195: case 2860209: return 200; } if (itemId / 10000 == 286) { return 150; } return 200; } public static short getSlotMax(int itemId) { switch (itemId) { case 4030003: case 4030004: case 4030005: return 1; case 3993000: case 3993002: case 3993003: case 4001168: case 4031306: case 4031307: return 100; case 5220010: case 5220013: return 1000; case 5220020: return 2000; } return 0; } public static boolean isDropRestricted(int itemId) { return (itemId == 3012000) || (itemId == 4030004) || (itemId == 1052098) || (itemId == 1052202); } public static boolean isPickupRestricted(int itemId) { return (itemId == 4030003) || (itemId == 4030004); } public static short getStat(int itemId, int def) { switch (itemId) { case 1002419: return 5; case 1002959: return 25; case 1142002: return 10; case 1122121: return 7; } return (short) def; } public static short getHpMp(int itemId, int def) { switch (itemId) { case 1122121: return 500; case 1002959: case 1142002: return 1000; } return (short) def; } public static short getATK(int itemId, int def) { switch (itemId) { case 1122121: return 3; case 1002959: return 4; case 1142002: return 9; } return (short) def; } public static short getDEF(int itemId, int def) { switch (itemId) { case 1122121: return 250; case 1002959: return 500; } return (short) def; } public static boolean isDojo(int mapId) { return (mapId >= 925020100) && (mapId <= 925023814); } public static int getPartyPlayHP(int mobID) { switch (mobID) { case 4250000: return 836000; case 4250001: return 924000; case 5250000: return 1100000; case 5250001: return 1276000; case 5250002: return 1452000; case 9400661: return 15000000; case 9400660: return 30000000; case 9400659: return 45000000; case 9400658: return 20000000; } return 0; } public static int getPartyPlayEXP(int mobID) { switch (mobID) { case 4250000: return 5770; case 4250001: return 6160; case 5250000: return 7100; case 5250001: return 7975; case 5250002: return 8800; case 9400661: return 40000; case 9400660: return 70000; case 9400659: return 90000; case 9400658: return 50000; } return 0; } public static int getPartyPlay(int mapId) { switch (mapId) { case 300010000: case 300010100: case 300010200: case 300010300: case 300010400: case 300020000: case 300020100: case 300020200: case 300030000: case 683070400: case 683070401: case 683070402: return 25; } return 0; } public static int getPartyPlay(int mapId, int def) { int dd = getPartyPlay(mapId); if (dd > 0) { return dd; } return def / 2; } public static boolean isHyperTeleMap(int mapId) { for (int i : hyperTele) { if (i == mapId) { return true; } } return false; } public static int getCurrentDate() { String time = FileoutputUtil.CurrentReadable_Time(); return Integer.parseInt(time.substring(0, 4) + time.substring(5, 7) + time.substring(8, 10) + time.substring(11, 13)); } public static int getCurrentDate_NoTime() { String time = FileoutputUtil.CurrentReadable_Time(); return Integer.parseInt(time.substring(0, 4) + time.substring(5, 7) + time.substring(8, 10)); } public static void achievementRatio(MapleClient c) { switch (c.getPlayer().getMapId()) { case 240080600: case 910010000: case 910340100: case 920010000: case 921120005: case 921160100: case 922010100: case 923040100: case 925100000: case 926100000: case 926110000: case 930000000: case 930000100: case 932000100: c.getSession().write(CField.achievementRatio(0)); break; case 921160200: case 922010200: case 922010300: case 922010400: case 922010401: case 922010402: case 922010403: case 922010404: case 922010405: case 925100100: case 926100001: case 926110001: case 930000200: c.getSession().write(CField.achievementRatio(10)); break; case 910340200: case 921120100: case 921160300: case 921160310: case 921160320: case 921160330: case 921160340: case 921160350: case 922010500: case 922010600: case 923040200: case 925100200: case 925100201: case 925100202: case 926100100: case 926110100: case 930000300: case 932000200: c.getSession().write(CField.achievementRatio(25)); break; case 921160400: case 926100200: case 926100201: case 926100202: case 926110200: case 926110201: case 926110202: case 930000400: c.getSession().write(CField.achievementRatio(35)); break; case 240080700: case 240080800: case 910340300: case 921120200: case 921160500: case 922010700: case 923040300: case 925100300: case 925100301: case 925100302: case 926100203: case 926110203: case 930000500: case 932000300: c.getSession().write(CField.achievementRatio(50)); break; case 910340400: case 921120300: case 921160600: case 922010800: case 923040400: case 925100400: case 926100300: case 926100301: case 926100302: case 926100303: case 926100304: case 926110300: case 926110301: case 926110302: case 926110303: case 926110304: case 930000600: case 932000400: c.getSession().write(CField.achievementRatio(70)); break; case 910340500: case 920010800: case 921120400: case 921160700: case 922010900: case 925100500: case 926100400: case 926100401: case 926110400: case 926110401: case 930000700: c.getSession().write(CField.achievementRatio(85)); break; case 920011000: case 920011100: case 920011200: case 920011300: case 921120500: case 921120600: case 922011000: case 922011100: case 925100600: case 926100500: case 926100600: case 926110500: case 926110600: case 930000800: c.getSession().write(CField.achievementRatio(100)); } } public static boolean isAngel(int sourceid) { return (isBeginnerJob(sourceid / 10000)) && ((sourceid % 10000 == 1085) || sourceid % 10000 == 1062 || sourceid % 10000 == 1262 || sourceid % 10000 == 86 || (sourceid % 10000 == 1087) || (sourceid % 10000 == 1090) || (sourceid % 10000 == 1179)); } public static boolean isFishingMap(int mapid) { return (mapid == 749050500) || (mapid == 749050501) || (mapid == 749050502) || (mapid == 970020000) || (mapid == 970020005); } public static int getRewardPot(int itemid, int closeness) { switch (itemid) { case 2440000: switch (closeness / 10) { case 0: case 1: case 2: return 2028041 + closeness / 10; case 3: case 4: case 5: return 2028046 + closeness / 10; case 6: case 7: case 8: return 2028049 + closeness / 10; } return 2028057; case 2440001: switch (closeness / 10) { case 0: case 1: case 2: return 2028044 + closeness / 10; case 3: case 4: case 5: return 2028049 + closeness / 10; case 6: case 7: case 8: return 2028052 + closeness / 10; } return 2028060; case 2440002: return 2028069; case 2440003: return 2430278; case 2440004: return 2430381; case 2440005: return 2430393; } return 0; } public static boolean isEventMap(int mapid) { return ((mapid >= 109010000) && (mapid < 109050000)) || ((mapid > 109050001) && (mapid < 109090000)) || ((mapid >= 809040000) && (mapid <= 809040100)); } public static boolean isMagicChargeSkill(int skillid) { switch (skillid) { case 2121001: case 2221001: case 42121000: case 2221052: case 2321001: return true; } return false; } public static boolean isTeamMap(int mapid) { return (mapid == 109080000) || (mapid == 109080001) || (mapid == 109080002) || (mapid == 109080003) || (mapid == 109080010) || (mapid == 109080011) || (mapid == 109080012) || (mapid == 109090300) || (mapid == 109090301) || (mapid == 109090302) || (mapid == 109090303) || (mapid == 109090304) || (mapid == 910040100) || (mapid == 960020100) || (mapid == 960020101) || (mapid == 960020102) || (mapid == 960020103) || (mapid == 960030100) || (mapid == 689000000) || (mapid == 689000010); } public static int getStatDice(int stat) { switch (stat) { case 2: return 30; case 3: return 20; case 4: return 15; case 5: return 20; case 6: return 30; } return 0; } public static String getCashBlockedMsg(int id) { switch (id) { case 5211014: case 5211015: case 5211016: case 5211017: case 5211018: case 5211019: case 5211039: case 5211042: case 5211045: return "This item is blocked."; case 5211020: case 5211021: case 5211022: case 5211023: case 5211024: case 5211025: case 5211026: case 5211027: case 5211028: case 5211029: case 5211030: case 5211031: case 5211032: case 5211033: case 5211034: case 5211035: case 5211036: case 5211037: case 5211038: case 5211040: case 5211041: case 5211043: case 5211044: } return "This item is blocked from the Cash Shop."; } public static int getDiceStat(int buffid, int stat) { if ((buffid == stat) || (buffid % 10 == stat) || (buffid / 10 == stat)) { return getStatDice(stat); } if (buffid == stat * 100) { return getStatDice(stat) + 10; } return 0; } public static int getMPByJob(int job) { switch (job) { case 3100: return 30; case 3110: return 60; case 3111: return 100; case 3112: return 120; } return 30; } public static int getSkillLevel(int level) { if ((level >= 70) && (level < 120)) { return 2; } if ((level >= 120) && (level < 200)) { return 3; } if (level == 200) { return 4; } return 1; } public static int[] getInnerSkillbyRank(int rank) { if (rank == 0) { return rankC; } if (rank == 1) { return rankB; } if (rank == 2) { return rankA; } if (rank == 3) { return rankS; } return null; } public static final boolean isStealSkill(int skillId) { switch (skillId) { case 24001001: case 24101001: case 24111001: case 24121001: return true; } return false; } public static final int getStealSkill(int job) { switch (job) { case 1: return 24001001; case 2: return 24101001; case 3: return 24111001; case 4: return 24121001; } return 0; } public static final int getNumSteal(int jobNum) { switch (jobNum) { case 1: return 4; case 2: return 4; case 3: return 3; case 4: return 2; } return 0; } public static final boolean canSteal(Skill skil) { return (skil != null) && (!skil.isMovement()) && (!isLinkedAranSkill(skil.getId())) && (skil.getId() % 10000 >= 1000) && (getJobNumber(skil.getId() / 10000) > 0) && (!isDualBlade(skil.getId() / 10000)) && (!isCannon(skil.getId() / 10000)) && (!isJett(skil.getId() / 10000)) && (skil.getId() < 8000000) && (skil.getEffect(1) != null) && (skil.getEffect(1).getSummonMovementType() == null) && (!skil.getEffect(1).isUnstealable()); } public static String resolvePotentialID(final int itemID, final int potID) { final MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance(); int eqLevel = ii.getReqLevel(itemID); //TODO: Check for invalid itemID int potLevel; final List<StructItemOption> potInfo = MapleItemInformationProvider.getInstance().getPotentialInfo(potID); //gets the "real potential level" if (eqLevel == 0) { potLevel = 1; } else { potLevel = (eqLevel + 1) / 10; potLevel++; } if (potID == 0) { return "No potential"; } else if (potID < 0) { return "Hidden potential"; } StructItemOption st = potInfo.get(potLevel - 1); String sb = st.opString; for (int i = 0; i < st.opString.length(); i++) { if (st.opString.charAt(i) == '#') { int j = i + 2; while ((j < st.opString.length()) && st.opString.substring(i + 1, j).matches("^[a-zA-Z]+$")) { j++; } String curParam = st.opString.substring(i, j); String curParamStripped; if (j != st.opString.length() || st.opString.charAt(st.opString.length() - 1) == '%') { //hacky curParamStripped = curParam.substring(1, curParam.length() - 1); } else { curParamStripped = curParam.substring(1); } String paramValue = Integer.toString(st.get(curParamStripped)); if (curParam.charAt(curParam.length() - 1) == '%') { paramValue = paramValue.concat("%"); } sb = sb.replace(curParam, paramValue); } } return sb; } static { SCRIPTABLE_NPCS.add(new Pair(Integer.valueOf(2183000), "")); } public static boolean isEpicScroll(int scrollId) { return scrollId / 100 == 20497; } }