package constants; import client.MapleCharacter; import client.MapleClient; import client.PlayerStats; import client.Skill; import client.SkillFactory; import client.inventory.Equip; import client.inventory.MapleInventoryType; import client.status.MonsterStatus; import database.DatabaseConnection; import java.awt.Point; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Arrays; import java.util.Calendar; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import server.MapleItemInformationProvider; import server.MapleStatEffect; import server.maps.MapleMapObjectType; import tools.FileoutputUtil; import tools.MaplePacketCreator; import tools.Pair; public class GameConstants { public static boolean GMS = false; public static final Map<Integer, Integer> advanceskill = new HashMap<>(); 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})); public static final int[] CygnusLink = {80000066, 80000067, 80000068, 80000069, 80000070}; 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}; private static final int[] professionExp = {0, 250, 600, 1050, 1600, 2250, 3000, 3850, 4900, 5850, 45000, 160000}; public static final int[] itemBlock = {2430112, 4001168, 3993003, 2340000, 2049100, 4001129, 2040727, 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 JAIL = 180000001; public static final int MAX_BUFFSTAT = 1; public static final int MAX_MONSTERSTATUS = 1; public static final String[] RESERVED = {"Rental", "Donor"}; 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", "limitBreak","imdR","bdR", "limitedLv", "superiorEqp", "maxSuperiorEqp"}; public static final int[] hyperTele = {310000000, 220000000, 100000000, 250000000, 240000000, 104000000, 103000000, 102000000, 101000000, 120000000, 260000000, 200000000, 230000000}; public static final int[] goldrewards = {2049400, 1, 2049401, 2, 2049301, 2, 2340000, 1, 2070007, 2, 2070016, 1, 2330007, 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, 1382046, 1, 1382047, 1, 1382048, 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, 1002801, 2, 1102205, 2, 1402046, 2, 1402047, 2, 1462054, 2, 1462055, 2, 1472074, 2, 1332077, 1, 1402049, 1, 1462053, 1, 1472072, 1, 1492047, 1, 1032080, 20, 1032081, 15, 1032082, 10, 1032083, 5, 1032084, 1, 1112435, 20, 1112436, 15, 1112437, 10, 1112438, 5, 1112439, 1, 1122081, 20, 1122082, 15, 1122083, 10, 1122084, 5, 1122085, 1, 1132036, 20, 1132037, 15, 1132038, 10, 1132039, 5, 1132040, 1, 1092070, 40, 1092071, 30, 1092072, 20, 1092073, 10, 1092074, 1, 1092075, 40, 1092076, 30, 1092077, 20, 1092078, 10, 1092079, 1, 1092080, 40, 1092081, 30, 1092082, 20, 1092083, 10, 1092084, 1, 1092087, 1, 1092088, 1, 1302143, 40, 1302144, 30, 1302145, 20, 1302146, 10, 1302147, 1, 1312058, 40, 1312059, 30, 1312060, 20, 1312061, 10, 1312062, 1, 1322086, 40, 1322087, 30, 1322088, 20, 1322089, 10, 1322090, 1, 1332116, 40, 1332117, 30, 1332118, 20, 1332119, 10, 1332120, 1, 1332121, 40, 1332122, 30, 1332123, 20, 1332124, 10, 1332125, 1, 1342029, 40, 1342030, 30, 1342031, 20, 1342032, 10, 1342033, 1, 1372074, 40, 1372075, 30, 1372076, 20, 1372077, 10, 1372078, 1, 1382095, 40, 1382096, 30, 1382097, 20, 1382098, 10, 1392099, 1, 1402086, 40, 1402087, 30, 1402088, 20, 1402089, 10, 1402090, 1, 1412058, 40, 1412059, 30, 1412060, 20, 1412061, 10, 1412062, 1, 1422059, 40, 1422060, 30, 1422061, 20, 1422062, 10, 1422063, 1, 1432077, 40, 1432078, 30, 1432079, 20, 1432080, 10, 1432081, 1, 1442107, 40, 1442108, 30, 1442109, 20, 1442110, 10, 1442111, 1, 1452102, 40, 1452103, 30, 1452104, 20, 1452105, 10, 1452106, 1, 1462087, 40, 1462088, 30, 1462089, 20, 1462090, 10, 1462091, 1, 1472113, 40, 1472114, 30, 1472115, 20, 1472116, 10, 1472117, 1, 1482075, 40, 1482076, 30, 1482077, 20, 1482078, 10, 1482079, 1, 1492075, 40, 1492076, 30, 1492077, 20, 1492078, 10, 1492079, 1, 1132012, 2, 1132013, 1, 1032031, 1, 1102172, 1, 1002776, 1, 1002777, 1, 1002778, 1, 1002779, 1, 1002780, 1, 1082234, 1, 1082235, 1, 1082236, 1, 1082237, 1, 1082238, 1, 1052155, 1, 1052156, 1, 1052157, 1, 1052158, 1, 1052159, 1, 1072355, 1, 1072356, 1, 1072357, 1, 1072358, 1, 1072359, 1, 1092057, 1, 1092058, 1, 1092059, 1, 1122012, 1, 1302081, 1, 1312037, 1, 1322060, 1, 1332073, 1, 1332074, 1, 1372044, 1, 1382057, 1, 1402046, 1, 1412033, 1, 1422037, 1, 1432047, 1, 1442063, 1, 1452057, 1, 1462050, 1, 1472068, 1, 1482023, 1, 1492023, 1, 1342011, 1, 1522015, 1, 1532015, 1, 1003280, 1, 1003281, 1, 1003282, 1, 1003283, 1, 1003284, 1, 1052374, 1, 1052375, 1, 1052376, 1, 1052377, 1, 1052378, 1, 1072544, 1, 1072545, 1, 1072546, 1, 1072547, 1, 1072548, 1, 1082328, 1, 1082329, 1, 1082330, 1, 1082331, 1, 1082332, 1, 1302173, 1, 1312072, 1, 1322107, 1, 1332148, 1, 1332149, 1, 1342040, 1, 1372100, 1, 1382124, 1, 1402111, 1, 1412071, 1, 1422073, 1, 1432099, 1, 1442136, 1, 1452129, 1, 1462118, 1, 1472141, 1, 1482102, 1, 1492101, 1, 1522020, 1, 1532037, 1, 1942004, 1, 1952004, 1, 1962004, 1, 1972004, 1, 2030008, 5, 1442018, 3, 2040900, 4, 2049100, 10, 2000005, 10, 2000004, 10, 2430144, 10, 2290285, 10, 2028061, 10, 2028062, 10, 2530000, 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, 1102041, 1, 1452019, 2, 4001116, 3, 4001012, 3, 1022060, 2, 2430144, 5, 2290285, 5, 2028062, 5, 2028061, 5, 2530000, 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, 1032080, 20, 1032081, 15, 1032082, 10, 1032083, 5, 1032084, 1, 1112435, 20, 1112436, 15, 1112437, 10, 1112438, 5, 1112439, 1, 1122081, 20, 1122082, 15, 1122083, 10, 1122084, 5, 1122085, 1, 1132036, 20, 1132037, 15, 1132038, 10, 1132039, 5, 1132040, 1, 1092070, 40, 1092071, 30, 1092072, 20, 1092073, 10, 1092074, 1, 1092075, 40, 1092076, 30, 1092077, 20, 1092078, 10, 1092079, 1, 1092080, 40, 1092081, 30, 1092082, 20, 1092083, 10, 1092084, 1, 1092087, 1, 1092088, 1, 1302143, 40, 1302144, 30, 1302145, 20, 1302146, 10, 1302147, 1, 1312058, 40, 1312059, 30, 1312060, 20, 1312061, 10, 1312062, 1, 1322086, 40, 1322087, 30, 1322088, 20, 1322089, 10, 1322090, 1, 1332116, 40, 1332117, 30, 1332118, 20, 1332119, 10, 1332120, 1, 1332121, 40, 1332122, 30, 1332123, 20, 1332124, 10, 1332125, 1, 1342029, 40, 1342030, 30, 1342031, 20, 1342032, 10, 1342033, 1, 1372074, 40, 1372075, 30, 1372076, 20, 1372077, 10, 1372078, 1, 1382095, 40, 1382096, 30, 1382097, 20, 1382098, 10, 1392099, 1, 1402086, 40, 1402087, 30, 1402088, 20, 1402089, 10, 1402090, 1, 1412058, 40, 1412059, 30, 1412060, 20, 1412061, 10, 1412062, 1, 1422059, 40, 1422060, 30, 1422061, 20, 1422062, 10, 1422063, 1, 1432077, 40, 1432078, 30, 1432079, 20, 1432080, 10, 1432081, 1, 1442107, 40, 1442108, 30, 1442109, 20, 1442110, 10, 1442111, 1, 1452102, 40, 1452103, 30, 1452104, 20, 1452105, 10, 1452106, 1, 1462087, 40, 1462088, 30, 1462089, 20, 1462090, 10, 1462091, 1, 1472113, 40, 1472114, 30, 1472115, 20, 1472116, 10, 1472117, 1, 1482075, 40, 1482076, 30, 1482077, 20, 1482078, 10, 1482079, 1, 1492075, 40, 1492076, 30, 1492077, 20, 1492078, 10, 1492079, 1, 1132012, 2, 1132013, 1, 1002790, 1, 1002791, 1, 1002792, 1, 1002793, 1, 1002794, 1, 1082239, 1, 1082240, 1, 1082241, 1, 1082242, 1, 1082243, 1, 1052160, 1, 1052161, 1, 1052162, 1, 1052163, 1, 1052164, 1, 1072361, 1, 1072362, 1, 1072363, 1, 1072364, 1, 1072365, 1, 1302086, 1, 1312038, 1, 1322061, 1, 1332075, 1, 1332076, 1, 1372045, 1, 1382059, 1, 1402047, 1, 1412034, 1, 1422038, 1, 1432049, 1, 1442067, 1, 1452059, 1, 1462051, 1, 1472071, 1, 1482024, 1, 1492025, 1, 1342012, 1, 1942002, 1, 1952002, 1, 1962002, 1, 1972002, 1, 1522016, 1, 1532016, 1, 1002587, 3, 1402044, 1, 2101013, 4, 1442046, 1, 1422031, 1, 1332054, 3, 1012056, 3, 1022047, 3, 3012002, 1, 1442012, 3, 1442018, 3, 1432010, 3, 2000005, 10, 2049100, 10, 2000004, 10}; public static final int[] peanuts = {1152000, 30, 1152001, 10, 1152060, 10, 1152061, 10, 3010019, 10, 2040211, 30, 2040212, 10, 1022097, 20, 2049000, 30, 2049001, 30, 2049002, 30, 1332100, 100, 1382058, 100, 1402073, 100, 1432066, 100, 1442090, 100, 1452058, 100, 1462076, 100, 1472069, 100, 1482051, 100, 1492024, 100, 2028062, 50, 2028061, 50, 2530000, 20, 1032083, 50, 1032084, 20, 1112439, 20, 1122084, 50, 1122085, 20, 1132039, 50, 1132040, 20, 1092073, 50, 1092074, 20, 1092078, 40, 1092079, 20, 1092083, 40, 1092084, 20, 1092087, 50, 1092088, 50, 1302146, 40, 1302147, 20, 1312059, 30, 1312060, 20, 1312061, 10, 1312062, 1, 1322087, 30, 1322088, 20, 1322089, 10, 1322090, 1, 1332117, 30, 1332118, 20, 1332119, 10, 1332120, 1, 1332122, 30, 1332123, 20, 1332124, 10, 1332125, 1, 1342030, 30, 1342031, 20, 1342032, 10, 1342033, 1, 1372075, 30, 1372076, 20, 1372077, 10, 1372078, 1, 1382096, 30, 1382097, 20, 1382098, 10, 1392099, 1, 1402087, 30, 1402088, 20, 1402089, 10, 1402090, 1, 1412059, 30, 1412060, 20, 1412061, 10, 1412062, 1, 1422060, 30, 1422061, 20, 1422062, 10, 1422063, 1, 1432078, 30, 1432079, 20, 1432080, 10, 1432081, 1, 1442108, 30, 1442109, 20, 1442110, 10, 1442111, 1, 1452103, 30, 1452104, 20, 1452105, 10, 1452106, 1, 1462088, 30, 1462089, 20, 1462090, 10, 1462091, 1, 1472114, 30, 1472115, 20, 1472116, 10, 1472117, 1, 1482076, 30, 1482077, 20, 1482078, 10, 1482079, 1, 1492076, 30, 1492077, 20, 1492078, 10, 1492079, 1, 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, 1382049, 100, 1382050, 150, 1382051, 100, 1382052, 150, 2040006, 20, 2040007, 20, 2040403, 20, 2040506, 2, 2040507, 2, 2040603, 20, 2040507, 20, 2040603, 20, 2040709, 2, 2040710, 2, 2040711, 2, 2040806, 2, 2040903, 20, 2040507, 20, 2040603, 20, 2041024, 20, 2041025, 20, 2043003, 2, 2044019, 2, 2044019, 2, 2043103, 2, 2043203, 2, 2043303, 2, 2043703, 2, 2043803, 2, 2044003, 2, 2044019, 2, 2044103, 2, 2040903, 20, 2040903, 20, 2044203, 2, 2044303, 2, 2044403, 2, 2044503, 2, 2044603, 2, 2044703, 2, 2044815, 2, 2044908, 2, 2340000, 2, 2049406, 10, 2049303, 10, 3010070, 1, 3010073, 1, 3010073, 1, 1402014, 1, 1003172, 2, 1102275, 2, 1082295, 2, 1052314, 2, 1072485, 2, 1003173, 2, 1102276, 2, 1082296, 2, 1052315, 2, 1072486, 2, 1003174, 2, 1102277, 2, 1082297, 2, 1052316, 2, 1072487, 2, 1003175, 2, 1102278, 2, 1082298, 2, 1052317, 2, 1072488, 2, 1003176, 2, 1102279, 2, 1082299, 2, 1052318, 2, 1072489, 2, 1432086, 2, 1442116, 2, 1322096, 2, 1422066, 2, 1402095, 2, 1412065, 2, 1302152, 2, 1312065, 2, 1372084, 2, 1382104, 2, 1452111, 2, 1462099, 2, 1332130, 2, 1472122, 2, 1342036, 2, 1492085, 2, 1532018, 2, 1302016, 2, 3010000, 10, 3010001, 10, 3010002, 10, 3010003, 10, 3010004, 10, 3010005, 10, 3010006, 10, 3010209, 10, 3010210, 10, 3010007, 10, 3010008, 10, 3010009, 10, 3010010, 10, 3010012, 10, 3010013, 10, 3010014, 10, 3010016, 10, 3010294, 10, 3010017, 10, 3010295, 10, 3010018, 10, 3010019, 10, 3010021, 10, 3010024, 10, 3010025, 10, 3010028, 10, 3010029, 10, 3010030, 10, 3010031, 10, 3010032, 10, 3010033, 10, 3010034, 10, 3010035, 10, 3010036, 10, 3010037, 10, 3010038, 10, 3010039, 10, 3010040, 10, 3010041, 10, 3010043, 10, 3010044, 10, 3010045, 10, 3010046, 10, 3010047, 10, 3010048, 10, 3010049, 10, 3010199, 10, 3010050, 10, 3010051, 10, 3010052, 10}; public static int[] eventCommonReward = {0, 10, 1, 10, 4, 5, 4170024, 25, 4280000, 5, 4280001, 6, 5490000, 5, 5490001, 6}; public static int[] eventUncommonReward = {1, 4, 2, 8, 3, 8, 5062000, 20, 2430082, 20, 2430092, 20, 2022459, 2, 2022460, 1, 2022462, 1, 2430117, 2, 2430118, 2, 2430201, 4, 2430228, 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, 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, 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[] blockedMaps = {180000001, 180000002, 109050000, 280030000, 280030100, 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, 4032181, 4006001, 4006000, 2050004, 3994102, 3994103, 3994104, 3994105, 2430007, 4000164, 2000000, 2000003, 2000004, 2000005, 4000019, 4000000, 4000016, 4000006, 2100121, 4000029, 4000064, 5110000, 4032181, 4006001, 4006000, 2050004, 3994102, 3994103, 3994104, 3994105, 2430007}; public static final int[] rareDrops = {2049100, 2430144, 2028062, 2028061, 2290285, 2049301, 2049401, 2022326, 2049000, 2049001, 2049002}; public static final int[] superDrops = {2040804, 2049400, 2028062, 2028061, 2430144, 2290285, 2049100}; public static int[] owlItems = {1332052, 2043301, 2040804, 2049100, 1402016, 1382060, 1082002, 2070006, 2290272, 2049301}; public static final int[] publicNpcIds = {9270035, 9070004, 9010022, 9071003, 9000087, 9000088, 9010000, 9000085, 9000018, 9000000}; public static final String[] publicNpcs = {"#cUniversal NPC#", "Move to the #cBattle Square# to fight other players", "Move to a variety of #cparty quests#.", "Move to #cMonster Park# to team up to defeat monsters.", "Move to #cFree Market# to trade items with players.", "Move to #cArdentmill#, the crafting town.", "Check #cdrops# of any monster in the map.", "Review #cPokedex#.", "Review #cPokemon#.", "Join an #cevent# in progress."}; 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 BUFF_SKILL = 122224; 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 POKEMON_WINS = 122400; 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 ALLOW_PET_LOOT = 122902; public static final int QUICK_SLOT = 123000; public static final int 称号 = 124000; public static final int 申请公ID = 26011; public static final int 申请公会名 = 26015; public static final int MAX_HP = 30000; public static final int MAX_MP = 30000; public static final int DROP_ITEM_PER = 99999; // 掉落比随机数控制 private static final long[] exp = new long[201]; public static void LoadExp() { for (int i = 1; i<=50;i++) { if (i <= 5) { exp[i] = i*(i*i/2+15); } else if (i > 5 && i <= 50) { exp[i] = i*i/3*(i*i/3+19); } } for (int i = 51; i<=200;i++) { exp[i] = (long)((exp[i-1])*1.0548); } } public static long getExpNeededForLevel(final int level) { if (level < 1 || level >= exp.length) { return Long.MAX_VALUE; } return exp[level]; } public static int getGuildExpNeededForLevel(int level) { if ((level < 0) || (level >= guildExp.length)) { return 2147483647; } return guildExp[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) { if ((level < 0) || (level >= professionExp.length)) { return 2147483647; } return professionExp[level]; } public static Double maxViewRangeSq() { return /*1366 * 768 * 2*/ Double.POSITIVE_INFINITY; } public static Double maxViewRangeSq_Half() { return /*1366 * 768*/ Double.POSITIVE_INFINITY; } public static boolean isThrowingStar(final int itemId) { return itemId / 10000 == 207; } public static boolean isBullet(final int itemId) { return itemId / 10000 == 233; } public static boolean isJobFamily(int baseJob, int currentJob) { return (currentJob >= baseJob) && (currentJob / 100 == baseJob / 100); } public static boolean is冒险家(int job) { return (job >= 0) && (job < 1000); } public static boolean is管理员(int job) { return (job == 900) || (job == 910) || (job == 800); } public static boolean isRecoveryIncSkill(int skillId) { switch (skillId) { case 1110000: case 5700005: 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 skillId) { switch (skillId) { case 2110001: case 2210001: 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 (is新手职业(skill / 10000)) && (skill % 10000 == 1020); } public static boolean isInflationSkill(int skill) { return (is新手职业(skill / 10000)) && (skill % 10000 == 1092); } public static boolean isMulungSkill(int skill) { return (is新手职业(skill / 10000)) && ((skill % 10000 == 1009) || (skill % 10000 == 1010) || (skill % 10000 == 1011)); } public static boolean isIceKnightSkill(int skill) { return (is新手职业(skill / 10000)) && ((skill % 10000 == 1098) || (skill % 10000 == 99) || (skill % 10000 == 100) || (skill % 10000 == 103) || (skill % 10000 == 104) || (skill % 10000 == 1105)); } public static boolean is骑兽技能(int skill) { return (is新手职业(skill / 10000)) && (skill % 10000 == 1004); } public static int getTaxAmount(long 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(long 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 skillId, Skill skill) { switch (skillId) { case 2111003: return 0; case 1311011: case 3111009: case 3120019: case 3121013: case 5220023: case 5221022: return 40; case 4111010: return 99; case 13111020: case 13121001: return 120; case 4100012: case 4120019: return 30; case 2221012: return 180; case 0: return 330; } if ((skill != null) && (skill.getSkillType() == 3)) { return 0; } if ((skill != null) && (skill.getDelay() > 0) && (!isNoDelaySkill(skillId))) { return skill.getDelay(); } return 330; } public static byte gachaponRareItem(int id) { switch (id) { case 1002776: case 1002777: case 1002778: case 1002779: case 1002780: case 1002790: case 1002791: case 1002792: case 1002793: case 1002794: case 1003280: case 1003281: case 1003282: case 1003283: case 1003284: case 1032031: case 1032084: case 1052155: case 1052156: case 1052157: case 1052158: case 1052159: case 1052160: case 1052161: case 1052162: case 1052163: case 1052164: case 1052374: case 1052375: case 1052376: case 1052377: case 1052378: case 1072355: case 1072356: case 1072357: case 1072358: case 1072359: case 1072361: case 1072362: case 1072363: case 1072364: case 1072365: case 1072544: case 1072545: case 1072546: case 1072547: case 1072548: case 1082234: case 1082235: case 1082236: case 1082237: case 1082238: case 1082239: case 1082240: case 1082241: case 1082242: case 1082243: case 1082328: case 1082329: case 1082330: case 1082331: case 1082332: case 1092057: case 1092058: case 1092059: case 1092074: case 1092079: case 1092084: case 1092087: case 1092088: case 1102172: case 1112439: case 1122011: case 1122012: case 1122085: case 1132012: case 1132013: case 1132040: case 1302081: case 1302086: case 1302147: case 1302173: case 1312037: case 1312038: case 1312062: case 1312072: case 1322060: case 1322061: case 1322090: case 1322107: case 1332073: case 1332074: case 1332075: case 1332076: case 1332120: case 1332125: case 1332148: case 1332149: case 1342011: case 1342012: case 1342033: case 1342040: case 1372044: case 1372045: case 1372078: case 1372100: case 1382057: case 1382059: case 1382099: case 1382124: case 1402037: case 1402046: case 1402047: case 1402090: case 1402111: case 1412033: case 1412034: case 1412062: case 1412071: case 1422037: case 1422038: case 1422063: case 1422073: case 1432047: case 1432049: case 1432081: case 1432099: case 1442063: case 1442067: case 1442111: case 1442136: case 1452057: case 1452059: case 1452106: case 1452129: case 1462050: case 1462051: case 1462091: case 1462118: case 1472068: case 1472071: case 1472117: case 1472141: case 1482023: case 1482024: case 1482079: case 1482102: case 1492023: case 1492025: case 1492079: case 1492101: case 1522015: case 1522016: case 1522020: case 1532015: case 1532016: case 1532037: case 1942002: case 1942004: case 1952002: case 1952004: case 1962002: case 1962004: case 1972002: case 1972004: 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 2290096: case 2340000: return 2; } return 1; } 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 1522016: 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 1522015: case 1532015: return true; } return false; } 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.恐慌; 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.速度; } return null; } public static int getXForStat(MonsterStatus stat) { switch (stat) { case 恐慌: return -70; case 速度: return -50; } return 0; } public static int getSkillForStat(MonsterStatus stat) { switch (stat) { case 恐慌: return 1111003; case 速度: return 3121007; } return 0; } public static int getSkillBookBySkill(int skillId) { return getSkillBookByJob(skillId / 10000, skillId); } public static int getSkillBookByJob(int job) { return getSkillBookByJob(job, 0); } public static int getSkillBookByJob(int job, int skillId) { if ((job >= 430) && (job <= 434)) { return job - 429; } switch (job) { case 110: case 120: case 130: case 210: case 220: case 230: case 310: case 320: case 410: case 420: case 510: case 520: case 530: return 1; case 111: case 121: case 131: case 211: case 221: case 231: case 311: case 321: case 411: case 421: case 511: case 521: case 531: return 2; case 112: case 122: case 132: case 212: case 222: case 232: case 312: case 322: case 412: case 422: case 512: case 522: case 532: return 3; } return 0; } public static int getJobNumber(int jobz) { int job = jobz % 1000; if ((job / 100 == 0) || (is新手职业(jobz))) { return 0; } if ((job / 10 % 10 == 0) || (job == 501)) { return 1; } return 2 + job % 10; } public static boolean is新手职业(int job) { switch (job) { case 0: return true; } return false; } /** * 是否为投掷攻击类职业 * @param job * @return */ public static boolean isCastJob(int job){ switch (job) { case 300: // 弓箭手 case 310: case 311: case 320: case 321: case 400: case 410: case 411: case 420: case 421: return true; default: return false; } } public static int getLinkedMountItem(int sourceid) { switch (sourceid % 1000) { case 1: case 24: case 25: return 1018; case 2: case 26: return 1019; case 3: return 1025; case 4: case 5: case 6: case 7: case 8: return sourceid % 1000 + 1023; case 9: case 10: case 11: return sourceid % 1000 + 1024; case 12: return 1042; case 13: return 1044; case 14: return 1049; case 15: case 16: case 17: return sourceid % 1000 + 1036; case 18: case 19: return sourceid % 1000 + 1045; case 20: return 1072; case 21: return 1084; case 22: return 1089; case 23: return 1106; case 29: return 1151; case 30: case 50: return 1054; case 31: case 51: return 1069; case 32: return 1138; case 45: case 46: case 47: case 48: case 49: return sourceid % 1000 + 1009; case 52: return 1070; case 53: return 1071; case 54: return 1096; case 55: return 1101; case 56: return 1102; case 58: return 1118; case 59: return 1121; case 60: return 1122; case 61: return 1129; case 62: return 1139; case 63: case 64: case 65: case 66: case 67: case 68: case 69: case 70: case 71: case 72: case 73: case 74: case 75: case 76: case 77: case 78: return sourceid % 1000 + 1080; case 82: return 1932093; case 83: return 1932094; case 84: return 1932095; case 85: case 86: case 87: return sourceid % 1000 + 928; case 88: return 1065; case 90: return 1932096; case 27: return 1932049; case 28: return 1932050; case 111: return 1932038; case 112: return 1932097; case 113: return 1932098; case 114: return 1932099; case 115: return 1932065; case 116: return 1932066; case 117: return 1932072; case 118: return 1932078; case 119: return 1932080; case 120: return 1992015; case 121: return 1932092; case 124: return 1932105; case 142: return 1932112; case 181: return 1932091; case 33: return 1932057; case 38: return 1932088; case 34: case 35: case 36: case 37: case 39: case 40: case 41: case 42: case 43: case 44: case 57: case 79: case 80: case 81: case 89: case 91: case 92: case 93: case 94: case 95: case 96: case 97: case 98: case 99: case 100: case 101: case 102: case 103: case 104: case 105: case 106: case 107: case 108: case 109: case 110: case 122: case 123: case 125: case 126: case 127: case 128: case 129: case 130: case 131: case 132: case 133: case 134: case 135: case 136: case 137: case 138: case 139: case 140: case 141: case 143: case 144: case 145: case 146: case 147: case 148: case 149: case 150: case 151: case 152: case 153: case 154: case 155: case 156: case 157: case 158: case 159: case 160: case 161: case 162: case 163: case 164: case 165: case 166: case 167: case 168: case 169: case 170: case 171: case 172: case 173: case 174: case 175: case 176: case 177: case 178: case 179: case 180: } return 0; } public static int getMountItem(int sourceid, MapleCharacter chr) { switch (sourceid) { case 33001001: if (chr == null) { return 1932015; } switch (chr.getIntNoRecord(111112)) { case 20: return 1932030; case 30: return 1932031; case 40: return 1932032; case 50: return 1932033; case 60: return 1932036; case 70: return 1932100; } return 1932015; } if (!is新手职业(sourceid / 10000)) { if ((sourceid / 10000 == 8000) && (sourceid != 80001000)) { Skill skil = SkillFactory.getSkill(sourceid); if ((skil != null) && (skil.getTamingMob() > 0)) { return skil.getTamingMob(); } if ((skil != null) && (skil.getvehicleID() > 0)) { return skil.getvehicleID(); } int link = getLinkedMountItem(sourceid); if (link > 0) { if (link < 10000) { return getMountItem(link, chr); } return link; } } return 0; } switch (sourceid % 10000) { case 1013: case 1046: return 1932001; case 1015: case 1048: return 1932002; case 1016: case 1017: case 1027: return 1932007; case 1018: return 1932003; case 1019: return 1932005; case 1025: return 1932006; case 1028: return 1932008; case 1029: return 1932009; case 1030: return 1932011; case 1031: return 1932010; case 1033: return 1932013; case 1034: return 1932014; case 1035: return 1932012; case 1036: return 1932017; case 1037: return 1932018; case 1038: return 1932019; case 1039: return 1932020; case 1040: return 1932021; case 1042: return 1932022; case 1044: return 1932023; case 1049: return 1932025; case 1050: return 1932004; case 1051: return 1932026; case 1052: return 1932027; case 1053: return 1932028; case 1054: return 1932029; case 1063: return 1932034; case 1064: return 1932035; case 1065: return 1932037; case 1069: return 1932038; case 1070: return 1932039; case 1071: return 1932040; case 1072: return 1932041; case 1084: return 1932043; case 1089: return 1932044; case 1096: return 1932045; case 1101: return 1932046; case 1102: return 1932047; case 1106: return 1932048; case 1115: return 1932052; case 1118: return 1932060; case 1121: return 1932063; case 1122: return 1932064; case 1123: return 1932065; case 1124: return 1932066; case 1129: return 1932071; case 1130: return 1932072; case 1136: return 1932078; case 1138: return 1932080; case 1139: return 1932081; case 1143: case 1144: case 1145: case 1146: case 1147: case 1148: case 1149: case 1150: case 1151: case 1152: case 1153: case 1154: case 1155: case 1156: case 1157: return 1992000 + sourceid % 10000 - 1143; case 1014: case 1020: case 1021: case 1022: case 1023: case 1024: case 1026: case 1032: case 1041: case 1043: case 1045: case 1047: case 1055: case 1056: case 1057: case 1058: case 1059: case 1060: case 1061: case 1062: case 1066: case 1067: case 1068: case 1073: case 1074: case 1075: case 1076: case 1077: case 1078: case 1079: case 1080: case 1081: case 1082: case 1083: case 1085: case 1086: case 1087: case 1088: case 1090: case 1091: case 1092: case 1093: case 1094: case 1095: case 1097: case 1098: case 1099: case 1100: case 1103: case 1104: case 1105: case 1107: case 1108: case 1109: case 1110: case 1111: case 1112: case 1113: case 1114: case 1116: case 1117: case 1119: case 1120: case 1125: case 1126: case 1127: case 1128: case 1131: case 1132: case 1133: case 1134: case 1135: case 1137: case 1140: case 1141: case 1142: } return 0; } public static boolean isAdminSkill(int skillId) { int jobId = skillId / 10000; return (jobId == 800) || (jobId == 900); } public static boolean isSpecialSkill(int skillId) { int jobId = skillId / 10000; return (jobId == 7000) || (jobId == 7100) || (jobId == 8000) || (jobId == 9000) || (jobId == 9100) || (jobId == 9200) || (jobId == 9201) || (jobId == 9202) || (jobId == 9203) || (jobId == 9204); } public static boolean isApplicableSkill_(int skillId) { return ((skillId >= 90000000) && (skillId < 92000000)) || ((skillId % 10000 >= 8000) && (skillId % 10000 <= 8003)); } public static boolean SSpotentialID(int potentialID) { if (potentialID > 60000) { return true; } int[] s = {42656, 42650, 42556, 42551, 42501, 42661, 42801, 42602, 42601, 42292, 42291, 42116, 42106, 42087, 42086, 42071, 42070, 42066, 42065, 42064, 42063, 42061, 42059, 42057, 42056, 42055, 42053, 42051, 42048, 42047, 42046, 42045, 42044, 42043, 42042, 42041, 41007, 41006, 41005, 40703, 40656, 40650, 40603, 40602, 40601, 40557, 40556, 40551, 40502, 40501, 40377, 40376, 40371, 40366, 4035, 40356, 40292, 40291, 40116, 40111, 40107, 40106, 40086, 40081, 40070, 40057, 40056, 40055, 40054, 40053, 40052, 40051, 40048, 40047, 40046, 40045, 40044, 40043, 40042, 40041}; for (Integer i : s) { if (potentialID == i) { return true; } } return false; } public static boolean potentialIDFits(int potentialID, int newstate, int i) { if (newstate == 20) { return SSpotentialID(potentialID); } if (newstate == 19) { return potentialID >= 30000 && potentialID < 40000; } 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 ItemConstants.isWeapon(itemId); case 11://除了武器的全部装备 return !ItemConstants.isWeapon(itemId); case 20://盾牌 return ItemConstants.isShield(itemId) || ItemConstants.isSpecialShield(itemId); case 21://宠物装备? return ItemConstants.isPetEquip(itemId); case 40://配饰 return ItemConstants.isAccessory(itemId); case 51://帽子 return itemId / 10000 == 100; case 52://披风 return itemId / 10000 == 110; case 53://上衣、裤子和套服 return itemId / 10000 == 104 || ItemConstants.isOverall(itemId) || itemId / 10000 == 106; case 54://手套 return itemId / 10000 == 108; case 55://鞋子 return itemId / 10000 == 107; case 90: return false; } return true; } public static boolean isBlockedPotential(int potentialID) { return (potentialID > 50000) || (potentialID < 10001); } public static boolean optionTypeFitsX(int potentialID, int itemId) { /*switch (potentialID) { case 60001: case 60003: return ItemConstants.isWeapon(itemId) || itemId / 10000 == 109 || itemId / 10000 == 135; case 60002: return true; }*/ if (potentialID > 60000) { return ItemConstants.isWeapon(itemId) || ItemConstants.isShield(itemId) || ItemConstants.isSpecialShield(itemId) || ItemConstants.is符号(itemId); } else { return true; } } public static boolean isMountItemAvailable(int mountid, int jobid) { if ((jobid != 900) && (mountid / 10000 == 190)) { switch (mountid) { case 1902000: case 1902001: case 1902002: return is冒险家(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: } } return mountid / 10000 == 190; } public static int getMasterySkill(int job) { if (job >= 410 && job <= 412) { return 4100000; } else if (job >= 520 && job <= 522) { return 5200000; } return 0; } public static int getExpRate_Quest(int level) { return 1; } public static int getCustomReactItem(int rid, int original) { if (rid == 2008006) { return Calendar.getInstance().get(7) + 4001055; } return original; } public static boolean isForceRespawn(int mapid) { switch (mapid) { case 103000800: case 925100100: 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 boolean is不检测范围(int skillId) { switch (skillId) { case 1321052: case 65111007: case 36110004: case 2211010: case 2221006: case 2221012: case 3101005: case 4100012: case 4120019: case 5101012: case 5300007: case 5301001: case 27120211: case 27121100: case 27121201: case 31101002: case 61111100: case 61111113: return true; } return false; } public static boolean is不检测次数(int skillId) { switch (skillId) { case 1321052: case 65111007: case 36110004: case 4211006: case 3221007: case 23121003: case 24100003: case 24120002: case 4120019: case 4100012: case 1201012: case 1201011: case 1211008: case 1221009: case 1221004: case 27111100: case 3120017: case 4210014: return true; } return false; } public static boolean isNoDelaySkill(int skillId) { return (skillId == 5100015) || (skillId == 21101003) || (skillId == 33101004) || (skillId == 32111010) || (skillId == 2111007) || (skillId == 2211007) || (skillId == 2311007) || (skillId == 22161005) || (skillId == 12111007) || (skillId == 32121003) || (skillId == 35121005) || (skillId == 35111004) || (skillId == 35121013) || (skillId == 35121003) || (skillId == 22150004) || (skillId == 22181004); } 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 boolean isFishingMap(int mapid) { return (mapid == 749050500) || (mapid == 749050501) || (mapid == 749050502) || (mapid == 970020000) || (mapid == 970020005); } 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 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 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 3001: return 30; case 3100: return 90; case 3110: return 150; case 3111: return 300; case 3112: return 360; } return 0; } public static int getHpApByJob(int jobId) { if (jobId % 1000 / 100 > 5) { jobId -= 500; } if (jobId % 1000 / 100 == 5) { switch (jobId / 10) { case 51: return 68; case 53: return 28; } } switch (jobId / 100) { case 21: return 30; case 22: return 12; case 31: return 38; case 32: return 20; } switch (jobId % 1000 / 100) { case 0: return 8; case 1: return 50; case 2: return 6; case 3: case 4: return 16; case 5: return 18; } return 8; } public static int getMpApByJob(int jobId) { if ((jobId / 100 == 31) || (jobId / 100 == 65) || (jobId / 100 == 100) || (jobId / 100 == 101)) { return 0; } if (jobId % 1000 / 100 > 5) { jobId -= 500; } switch (jobId / 100) { case 22: return 72; case 32: return 69; } switch (jobId % 1000 / 100) { case 0: return 57; case 1: return 53; case 2: return 79; case 3: case 4: return 61; case 5: return 65; } return 57; } public static Pair<Integer, Integer> getDefaultFaceAndHair(int job, int gender) { int face = gender == 0 ? 20100 : 21700; int hair = gender == 0 ? 30030 : 31002; return new Pair(face, hair); } public static MapleInventoryType getInventoryType(final int itemId) { final byte type = (byte) (itemId / 1000000); if (type < 1 || type > 5) { return MapleInventoryType.UNDEFINED; } return MapleInventoryType.getByType(type); } public static boolean isOverPoweredEquip(MapleClient c, int itemId, short slot) { Equip source = (Equip) c.getPlayer().getInventory(MapleInventoryType.EQUIP).getItem(slot); return source.getAcc() > 600 || source.getAvoid() > 600 || source.getDex() > 200 || source.getEnhance() > 15 || source.getHands() > 100 || source.getHp() > 5000 || source.getInt() > 200 || source.getJump() > 100 || source.getSpeed() > 100 || source.getLuk() > 200 || source.getMatk() > 500 || source.getMdef() > 1500 || source.getMp() > 1000 || source.getStr() > 200 || source.getUpgradeSlots() > 32 || source.getWatk() > 500 || source.getWdef() > 1500 /*|| source.getLevel() > 32*/; } }