package gui; /* QQ327321366 */ import java.util.LinkedList; import java.util.HashMap; import client.inventory.IItem; import com.alibaba.fastjson.JSONObject; import gui.tw.AotuNpc; import gui.tw.BlConfig; import gui.tw.BsConfig; import gui.tw.diaoyu.DiaoyuConfig; import gui.tw.ZLConfig; import gui.tw.rw.XuanShangRenWu; import server.MapleInventoryManipulator; import client.inventory.Equip; import handling.world.World.Broadcast; import tools.MaplePacketCreator; import java.sql.ResultSet; import constants.tzjc; import ppSetting.Game; import client.LoginCrypto; import client.MapleCharacter; import gui.进阶BOSS.活动捉鬼任务; import server.ServerProperties; import client.inventory.OnlyID; import server.maps.MapleMapFactory; import server.life.PlayerNPC; import server.SpeedRunner; import server.ShutdownServer; import server.AutobanManager; import server.Timer.CheatTimer; import handling.cashshop.CashShopServer; import handling.channel.ChannelServer; import handling.login.LoginServer; import handling.world.family.MapleFamilyBuff; import handling.channel.MapleGuildRanking; import server.MapleCarnivalFactory; import client.SkillFactory; import constants.AuthServerNamecpu; import server.RandomRewards; import server.CashItemFactory; import server.PredictCardFactory; import server.MapleItemInformationProvider; import server.events.MapleOxQuizFactory; import server.life.MapleLifeFactory; import server.quest.MapleQuest; import server.FishingRewardFactory; import handling.login.LoginInformationProvider; import server.Timer.PingTimer; import server.Timer.BuffTimer; import server.Timer.EventTimer; import server.Timer.CloneTimer; import server.Timer.MobTimer; import server.Timer.MapTimer; import server.Timer.EtcTimer; import server.Timer.WorldTimer; import handling.world.World; import constants.ServerConfig; import java.sql.PreparedStatement; import java.sql.Connection; import java.sql.SQLException; import tools.FileoutputUtil; import database.DBConPool; import java.io.BufferedReader; import java.io.File; import java.io.FileWriter; import java.io.InputStreamReader; import java.util.Calendar; import server.shops.MaplePlayerShopItem; import server.SkillType; import server.BossInMap; import tools.Pair; import java.util.List; import java.util.ArrayList; import java.util.Map; import java.util.concurrent.ScheduledThreadPoolExecutor; import tools.MacAddressTool; public class Start { public static final Start instance; public static Map ConfigValuesMap; public static JSONObject ConfigValuesJson; public static Map> ConfigItemJson = new HashMap<>(); public static ScheduledThreadPoolExecutor executor =new ScheduledThreadPoolExecutor(10); public static int bossxw = 1; public static List BLlist = new ArrayList<>(); public static int blkg = 0; public static int bldj = 0; public static int bskg = 0; public static BsConfig bsConfig = null; public static List zlConfigs = new ArrayList<>(); public static int zlkg = 0; public static DiaoyuConfig diaoyuConfig = new DiaoyuConfig(); public static List aotuNpcs = new ArrayList<>(); public static Map xsRW = new HashMap<>(); public static String[] shxs= {"万", "亿", "兆", "京", "垓","秭", "穰", "沟", "涧", "正", "载", "极","恒河沙", "阿僧祇", "那由他", "不可思议", "无量", "古戈尔","频菠萝", "矜羯罗","不可说不可说转","超限数", "绝对无限","绝对无量","绝对小数","绝对大数","绝对超限数"}; public static ArrayList 公告列表; public static List> exptable; public static List> 经验加成表; public static List>>> 套装加成表; public static List 野外boss刷新; public static List 不参与叠加道具; public static List SkillType; public static List 子弹列表; public static List> 坐骑列表; public static List 特殊组队经验加成表; public static List mobmaptable; public static List 宠物不参与地图表; public static List 宠物吸金表; public static List 宠物吸物表; private static long lastCheckjyhtime; public static int 世界等级; private static boolean 活动事件每日自动启动开关; public static List jyhItem; public static Map jyhshu; public static boolean 交易行; public static Map jyhdq; private static Boolean isClearBossLog; private static int 记录在线时间; private static Calendar calendar; private static int 时; private static int 分; private static int 星期; private static int 年; private static int 月; private static int 日; private static int 秒; private static Boolean isClearZXSJ; public static int 捉鬼任务初始召唤时间; private static int 捉鬼任务初始化; private static int 回收内存; public static int 公告; public static int 公告数量; private static void resetAllLoginState() { final String name = null; final int id = 0; final int vip = 0; final int size = 0; Connection con = null; PreparedStatement ps = null; try { con = (Connection) DBConPool.getInstance().getDataSource().getConnection(); ps = con.prepareStatement("UPDATE accounts SET loggedin = 0"); ps.executeUpdate(); DBConPool.cleanUP(null, ps, con); } catch (SQLException ex) { FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex); DBConPool.cleanUP(null, ps, con); throw new RuntimeException("【错误】 请确认资料库是否正确连接"); } finally { DBConPool.cleanUP(null, ps, con); } } public static void 记录在线时间(final int time) { WorldTimer.getInstance().register((Runnable) new Runnable() { @Override public void run() { if (Start.记录在线时间 > 0) { final Calendar calendar = Calendar.getInstance(); final int 时 = Calendar.getInstance().get(11); final int 分 = Calendar.getInstance().get(12); final int 星期 = Calendar.getInstance().get(7); final int 日 = Calendar.getInstance().get(5); if (时 == 0 && !Start.isClearBossLog.booleanValue()) { try { try (final PreparedStatement ps = DBConPool.getInstance().getDataSource().getConnection().prepareStatement("UPDATE accounts_info SET gamePointspd = 0")) { ps.executeUpdate(); ps.close(); } try (final PreparedStatement ps = DBConPool.getInstance().getDataSource().getConnection().prepareStatement("UPDATE accounts_info SET gamePointsps = 0")) { ps.executeUpdate(); ps.close(); } try (final PreparedStatement ps = DBConPool.getInstance().getDataSource().getConnection().prepareStatement("UPDATE accounts_info SET gamePoints = 0")) { ps.executeUpdate(); ps.close(); } try (final PreparedStatement ps = DBConPool.getInstance().getDataSource().getConnection().prepareStatement("UPDATE bosslog SET sz1 = 0")) { ps.executeUpdate(); ps.close(); } try (final PreparedStatement ps = DBConPool.getInstance().getDataSource().getConnection().prepareStatement("UPDATE accountidbosslog SET sz1 = 0")) { ps.executeUpdate(); ps.close(); } try (final PreparedStatement ps = DBConPool.getInstance().getDataSource().getConnection().prepareStatement("UPDATE paymoney1 SET mrjf = 0")) { ps.executeUpdate(); ps.close(); } if (日 == 1) { try (final PreparedStatement ps = DBConPool.getInstance().getDataSource().getConnection().prepareStatement("UPDATE qiandao SET sz1 = 0")) { ps.executeUpdate(); ps.close(); } } if (星期 == 2) { try (final PreparedStatement ps = DBConPool.getInstance().getDataSource().getConnection().prepareStatement("UPDATE onetimelogd SET log = 0")) { ps.executeUpdate(); ps.close(); } } } catch (SQLException ex) { System.err.println("[服务端] : 服务端处理每日数据出错 × " + ex.getMessage()); } Start.isClearBossLog = Boolean.valueOf(true); } else if (时 == 23) { Start.isClearBossLog = Boolean.valueOf(false); } if (Boolean.parseBoolean(ServerProperties.getProperty("pp.捉鬼任务启动"))) { if (Start.捉鬼任务初始化 == 3) { 活动捉鬼任务.启动捉鬼任务(); Start.捉鬼任务初始化++; } else { Start.捉鬼任务初始化++; } } for (final ChannelServer chan : ChannelServer.getAllInstances()) { for (final MapleCharacter chr : chan.getPlayerStorage().getAllCharacters()) { if (chr == null) { continue; } chr.gainGamePoints(1); if (时 == 0 && !Start.isClearZXSJ.booleanValue()) { chr.resetGamePointsPS(); chr.resetGamePointsPD(); Start.isClearZXSJ = Boolean.valueOf(true); } else { if (时 != 23) { continue; } Start.isClearZXSJ = Boolean.valueOf(false); } } } } else { Start.记录在线时间++; } } }, (long) (60000 * time)); } public static void 在线存档(final int time) { WorldTimer.getInstance().register((Runnable) new Runnable() { @Override public void run() { int p = 0; for (final ChannelServer cserv : ChannelServer.getAllInstances()) { for (final MapleCharacter chr : cserv.getPlayerStorage().getAllCharacters()) { ++p; chr.saveToDB(true, true); } } System.out.println("[" + FileoutputUtil.CurrentReadable_Time() + "][信息]:保存数据每十分钟:" + p + "个玩家数据已经被正常储存"); } }, (long) (60000 * time)); } public static void 最高在线人数() { WorldTimer.getInstance().register((Runnable) new Runnable() { @Override public void run() { int p = 0; for (final ChannelServer cserv : ChannelServer.getAllInstances()) { for (final MapleCharacter chr : cserv.getPlayerStorage().getAllCharacters()) { ++p; } } ppms.人数更新(p); } }, 1000L); } public static String getCPUSerial() { String result = ""; try { File file = File.createTempFile("tmp", ".vbs"); file.deleteOnExit(); FileWriter fw = new FileWriter(file); String vbs = "Set objWMIService = GetObject(\"winmgmts:\\\\.\\root\\cimv2\")\nSet colItems = objWMIService.ExecQuery _ \n (\"Select * from Win32_Processor\") \nFor Each objItem in colItems \n Wscript.Echo objItem.ProcessorId \n exit for ' do the first cpu only! \nNext \n"; fw.write(vbs); fw.close(); Process p = Runtime.getRuntime().exec("cscript //NoLogo " + file.getPath()); BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream())); String line; while ((line = input.readLine()) != null) { result = result + line; } input.close(); file.delete(); } catch (Exception e) { e.fillInStackTrace(); } if ((result.trim().length() < 1) || (result == null)) { result = "无机器码被读取"; } return result.trim(); } public static String getHardDiskSerialNumber(String drive) { String result = ""; try { File file = File.createTempFile("realhowto", ".vbs"); file.deleteOnExit(); FileWriter fw = new FileWriter(file); String vbs = "Set objFSO = CreateObject(\"Scripting.FileSystemObject\")\nSet colDrives = objFSO.Drives\nSet objDrive = colDrives.item(\"" + drive + "\")\n" + "Wscript.Echo objDrive.SerialNumber"; fw.write(vbs); fw.close(); Process p = Runtime.getRuntime().exec("cscript //NoLogo " + file.getPath()); BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream())); String line; while ((line = input.readLine()) != null) { result = result + line; } input.close(); } catch (Exception e) { } return result.trim(); } public static String returnSerialNumber() { String cpu = getCPUSerial(); String disk = getHardDiskSerialNumber("C"); int newdisk = Integer.parseInt(disk); String s = cpu + newdisk; String newStr = s.substring(8, s.length()); return newStr; } public static boolean 授权验证() { String mac = MacAddressTool.getMacAddress(false); String num = returnSerialNumber(); String localMac = LoginCrypto.hexSha1(num + mac);//本机机器码 if (localMac != null) { for (AuthServerNamecpu auth : AuthServerNamecpu.values()) { if (auth.getMac().equals(localMac)) { return true; } } } else { } FileoutputUtil.outputFileKey(localMac); return false; } public static final void startServer(final String[] args) { System.out.println("[" + FileoutputUtil.CurrentReadable_Time() + "][========================================]"); System.out.println("[" + FileoutputUtil.CurrentReadable_Time() + "][信息]:初始化配置表内容"); 初始化配置表(); 初始化表单(); System.out.println("[" + FileoutputUtil.CurrentReadable_Time() + "][信息]:初始化加载配置表内容"); GetConfigValues(); System.out.println("[" + FileoutputUtil.CurrentReadable_Time() + "][信息]:初始化阶段经验表内容"); GetExpTable(); System.out.println("[" + FileoutputUtil.CurrentReadable_Time() + "][信息]:初始化多倍怪物地图表内容"); GetMobMapTable(); System.out.println("[" + FileoutputUtil.CurrentReadable_Time() + "][信息]:初始化宠吸无法使用地图列表内容"); GetPetNoMapTable(); System.out.println("[" + FileoutputUtil.CurrentReadable_Time() + "][信息]:初始化宠物吸物列表内容"); GetPetItemTable(); System.out.println("[" + FileoutputUtil.CurrentReadable_Time() + "][信息]:初始化宠物吸金列表内容"); GetPetMesoTable(); System.out.println("[" + FileoutputUtil.CurrentReadable_Time() + "][信息]:初始化不叠加道具表内容"); GetNoSlotMaxTable(); System.out.println("[" + FileoutputUtil.CurrentReadable_Time() + "][信息]:初始化子弹列表内容"); GetRechargeTable(); System.out.println("[" + FileoutputUtil.CurrentReadable_Time() + "][信息]:初始化组队职业经验加成内容"); GetSpecialJobTable(); System.out.println("[" + FileoutputUtil.CurrentReadable_Time() + "][信息]:初始化道具加成经验"); GetItemExpTable(); System.out.println("[" + FileoutputUtil.CurrentReadable_Time() + "][信息]:初始化套装加成经验"); GetSuitDamTable(); System.out.println("[" + FileoutputUtil.CurrentReadable_Time() + "][信息]:初始化坐骑列表"); GetRidMobTable(); System.out.println("[" + FileoutputUtil.CurrentReadable_Time() + "][信息]:初始化野外boss刷新"); GetMobInMapTable(); System.out.println("[" + FileoutputUtil.CurrentReadable_Time() + "][信息]:初始化技能检测信息"); GetSkillTable(); System.out.println("[" + FileoutputUtil.CurrentReadable_Time() + "][信息]:IP效验正在载入"); boolean ip验证 = false; for (int a = 0; a < ServerConfig.IP.length; ++a) { if (Game.初始ip.equals(ServerConfig.IP[a])) { ip验证 = true; ServerConfig.nub1 = 0; } } if (!ip验证) { System.out.println("[" + FileoutputUtil.CurrentReadable_Time() + "][信息]:当前IP不在允许使用范围"); } else { System.out.println("[" + FileoutputUtil.CurrentReadable_Time() + "][信息]:IP效验成功"); System.out.println("[" + FileoutputUtil.CurrentReadable_Time() + "][信息]:初始化所有玩家在线情况"); resetAllLoginState(); if (((Integer) Start.ConfigValuesMap.get("管理员独占登录")).intValue() > 0) { System.out.println("[" + FileoutputUtil.CurrentReadable_Time() + "][信息]:开启仅管理员登录游戏"); } if (((Integer) Start.ConfigValuesMap.get("是否开启自动注册")).intValue() > 0) { System.out.println("[" + FileoutputUtil.CurrentReadable_Time() + "][信息]:开启自动注冊"); } if (((Integer) Start.ConfigValuesMap.get("允许玩家使用管理员道具")).intValue() > 0) { System.out.println("[" + FileoutputUtil.CurrentReadable_Time() + "][信息]:开启允许玩家使用管理员物品"); } ServerConfig.loadSetting(); System.out.println("[" + FileoutputUtil.CurrentReadable_Time() + "][信息]:开启时间线程"); ServerConfig.loadSetting(); World.init(); WorldTimer.getInstance().start(); EtcTimer.getInstance().start(); MapTimer.getInstance().start(); MobTimer.getInstance().start(); CloneTimer.getInstance().start(); EventTimer.getInstance().start(); BuffTimer.getInstance().start(); PingTimer.getInstance().start(); 服务器状态监控(); 最高在线人数(); LoginInformationProvider.getInstance(); FishingRewardFactory.getInstance(); MapleQuest.initQuests(); MapleLifeFactory.loadQuestCounts(); MapleOxQuizFactory.getInstance().initialize(); MapleItemInformationProvider.getInstance().load(); System.out.println("[" + FileoutputUtil.CurrentReadable_Time() + "][信息]:初始化卡罗牌信息"); PredictCardFactory.getInstance().initialize(); CashItemFactory.getInstance().initialize(); RandomRewards.getInstance(); SkillFactory.LoadSkillInformaion(); MapleCarnivalFactory.getInstance(); MapleGuildRanking.getInstance().getGuildRank(); MapleGuildRanking.getInstance().getJobRank(1); MapleGuildRanking.getInstance().getJobRank(2); MapleGuildRanking.getInstance().getJobRank(3); MapleGuildRanking.getInstance().getJobRank(4); MapleGuildRanking.getInstance().getJobRank(5); MapleGuildRanking.getInstance().getJobRank(6); MapleFamilyBuff.getBuffEntry(); LoginServer.setup(); ChannelServer.startAllChannels(); CashShopServer.setup(); CheatTimer.getInstance().register((Runnable) AutobanManager.getInstance(), 60000L); Runtime.getRuntime().addShutdownHook(new Thread((Runnable) ShutdownServer.getInstance())); SpeedRunner.getInstance().loadSpeedRuns(); World.registerRespawn(); PlayerNPC.loadAll(); LoginServer.setOn(); MapleMapFactory.loadCustomLife(); 记录在线时间(1); 回收内存(120); 公告初始化(); 公告(((Integer) Start.ConfigValuesMap.get("公告间隔时间")).intValue()); World.isShutDown = false; OnlyID.getInstance(); Game.服务端启动中 = 1; ppms.配置同步到界面(); tzjc.sr_tz(); System.out.println("[" + FileoutputUtil.CurrentReadable_Time() + "][信息]服务器端已经启动完毕。"); System.out.println("[" + FileoutputUtil.CurrentReadable_Time() + "][========================================]"); } } public static void 回收内存(final int time) { WorldTimer.getInstance().register((Runnable) new Runnable() { @Override public void run() { if (回收内存 > 0) { System.gc(); System.err.println("○【内存回收】 " + FileoutputUtil.CurrentReadable_Time() + " : 回收服务端内存 √"); } else { 回收内存++; } } }, (long) (6000 * time)); } public static void 服务器状态监控() { WorldTimer.getInstance().register((Runnable) new Runnable() { @Override public void run() { ppms.UI信息更新(); } }, 1000L); } public static void GetConfigValues() { Connection con = null; PreparedStatement ps = null; ResultSet rs = null; try { con = (Connection) DBConPool.getInstance().getDataSource().getConnection(); ps = con.prepareStatement("SELECT name, val FROM ConfigValues"); rs = ps.executeQuery(); while (rs.next()) { final String name = rs.getString("name"); final int val = rs.getInt("val"); Start.ConfigValuesMap.put(name, Integer.valueOf(val)); } rs.close(); ps.close(); con.close(); } catch (SQLException ex) { System.err.println("读取动态数据库出错:" + ex.getMessage()); } finally { DBConPool.cleanUP(rs, ps, con); } } public static void GetExpTable() { Connection con = null; PreparedStatement ps = null; ResultSet rs = null; try { con = (Connection) DBConPool.getInstance().getDataSource().getConnection(); ps = con.prepareStatement("SELECT name, numb FROM exptable"); rs = ps.executeQuery(); while (rs.next()) { final String name = rs.getString("name"); final int val = rs.getInt("numb"); Start.exptable.add(new Pair(name, Integer.valueOf(val))); } rs.close(); ps.close(); con.close(); } catch (SQLException ex) { System.err.println("读取不同阶段经验表出错:" + ex.getMessage()); } finally { DBConPool.cleanUP(rs, ps, con); } } public static void GetSkillTable() { Connection con = null; PreparedStatement ps = null; ResultSet rs = null; try { con = (Connection) DBConPool.getInstance().getDataSource().getConnection(); ps = con.prepareStatement("select * from skilltest"); rs = ps.executeQuery(); while (rs.next()) { final int skillid = rs.getInt("skillid"); final int attackcount = rs.getInt("attackcount"); final int mobcount = rs.getInt("mobcount"); Start.SkillType.add(new SkillType(skillid, mobcount, attackcount)); } rs.close(); ps.close(); con.close(); } catch (SQLException ex) { System.err.println("读取技能表出错:" + ex.getMessage()); } finally { DBConPool.cleanUP(rs, ps, con); } } public static void GetMobInMapTable() { Connection con = null; PreparedStatement ps = null; ResultSet rs = null; try { con = (Connection) DBConPool.getInstance().getDataSource().getConnection(); ps = con.prepareStatement("SELECT mobid, map,x,y,msg,time FROM bossmobinmap"); rs = ps.executeQuery(); while (rs.next()) { final String msg = rs.getString("msg"); final int mobid = rs.getInt("mobid"); final int map = rs.getInt("map"); final int x = rs.getInt("x"); final int y = rs.getInt("y"); final int time = rs.getInt("time"); Start.野外boss刷新.add(new BossInMap(mobid, map, x, y, msg, time)); } rs.close(); ps.close(); con.close(); } catch (SQLException ex) { System.err.println("读取道具经验表出错:" + ex.getMessage()); } finally { DBConPool.cleanUP(rs, ps, con); } } public static void GetItemExpTable() { Connection con = null; PreparedStatement ps = null; ResultSet rs = null; try { con = (Connection) DBConPool.getInstance().getDataSource().getConnection(); ps = con.prepareStatement("SELECT name, numb FROM itemexptable"); rs = ps.executeQuery(); while (rs.next()) { final String name = rs.getString("name"); final int val = rs.getInt("numb"); Start.经验加成表.add(new Pair(name, Integer.valueOf(val))); } rs.close(); ps.close(); con.close(); } catch (SQLException ex) { System.err.println("读取道具经验表出错:" + ex.getMessage()); } finally { DBConPool.cleanUP(rs, ps, con); } } public static void GetSuitDamTable() { Connection con = null; PreparedStatement ps = null; ResultSet rs = null; try { con = (Connection) DBConPool.getInstance().getDataSource().getConnection(); ps = con.prepareStatement("SELECT name, numb,proportion,proname FROM suitdamtable"); rs = ps.executeQuery(); while (rs.next()) { final String name = rs.getString("name"); final String name2 = rs.getString("proname"); final int val = rs.getInt("numb"); final int vol = rs.getInt("proportion"); Start.套装加成表.add(new Pair(Integer.valueOf(vol), new Pair(name2, new Pair(name, Integer.valueOf(val))))); } rs.close(); ps.close(); con.close(); } catch (SQLException ex) { System.err.println("套装加成表出错:" + ex.getMessage()); } finally { DBConPool.cleanUP(rs, ps, con); } } public static void GetRidMobTable() { Connection con = null; PreparedStatement ps = null; ResultSet rs = null; try { con = (Connection) DBConPool.getInstance().getDataSource().getConnection(); ps = con.prepareStatement("SELECT characterid, numb FROM riddingmob"); rs = ps.executeQuery(); while (rs.next()) { final int id = rs.getInt("characterid"); final int val = rs.getInt("numb"); Start.坐骑列表.add(new Pair(Integer.valueOf(id), Integer.valueOf(val))); } rs.close(); ps.close(); con.close(); } catch (SQLException ex) { System.err.println("读取坐骑列表出错:" + ex.getMessage()); } finally { DBConPool.cleanUP(rs, ps, con); } } public static void GetMobMapTable() { Connection con = null; PreparedStatement ps = null; ResultSet rs = null; try { con = (Connection) DBConPool.getInstance().getDataSource().getConnection(); ps = con.prepareStatement("SELECT name FROM mobmaptable"); rs = ps.executeQuery(); while (rs.next()) { final String name = rs.getString("name"); Start.mobmaptable.add(name); } rs.close(); ps.close(); con.close(); } catch (SQLException ex) { System.err.println("读取多倍怪物地图列表出错:" + ex.getMessage()); } finally { DBConPool.cleanUP(rs, ps, con); } } public static void GetPetNoMapTable() { Connection con = null; PreparedStatement ps = null; ResultSet rs = null; try { con = (Connection) DBConPool.getInstance().getDataSource().getConnection(); ps = con.prepareStatement("SELECT name FROM petnomaptable"); rs = ps.executeQuery(); while (rs.next()) { final String name = rs.getString("name"); Start.宠物不参与地图表.add(name); } rs.close(); ps.close(); con.close(); } catch (SQLException ex) { System.err.println("读取宠物不参与吸取地图出错:" + ex.getMessage()); } finally { DBConPool.cleanUP(rs, ps, con); } } public static void GetPetMesoTable() { Connection con = null; PreparedStatement ps = null; ResultSet rs = null; try { con = (Connection) DBConPool.getInstance().getDataSource().getConnection(); ps = con.prepareStatement("SELECT name FROM petmesotable"); rs = ps.executeQuery(); while (rs.next()) { final String name = rs.getString("name"); Start.宠物吸金表.add(name); } rs.close(); ps.close(); con.close(); } catch (SQLException ex) { System.err.println("读取宠物吸金宠物列表出错:" + ex.getMessage()); } finally { DBConPool.cleanUP(rs, ps, con); } } public static void GetPetItemTable() { Connection con = null; PreparedStatement ps = null; ResultSet rs = null; try { con = (Connection) DBConPool.getInstance().getDataSource().getConnection(); ps = con.prepareStatement("SELECT name FROM petitemtable"); rs = ps.executeQuery(); while (rs.next()) { final String name = rs.getString("name"); Start.宠物吸物表.add(name); } rs.close(); ps.close(); con.close(); } catch (SQLException ex) { System.err.println("读取宠物吸物宠物列表出错:" + ex.getMessage()); } finally { DBConPool.cleanUP(rs, ps, con); } } public static void GetNoSlotMaxTable() { Connection con = null; PreparedStatement ps = null; ResultSet rs = null; try { con = (Connection) DBConPool.getInstance().getDataSource().getConnection(); ps = con.prepareStatement("SELECT name FROM noslotmax"); rs = ps.executeQuery(); while (rs.next()) { final String name = rs.getString("name"); Start.不参与叠加道具.add(name); } rs.close(); ps.close(); con.close(); } catch (SQLException ex) { System.err.println("读取不参与叠加列表出错:" + ex.getMessage()); } finally { DBConPool.cleanUP(rs, ps, con); } } public static void GetRechargeTable() { Connection con = null; PreparedStatement ps = null; ResultSet rs = null; try { con = (Connection) DBConPool.getInstance().getDataSource().getConnection(); ps = con.prepareStatement("SELECT name FROM rechargeableItems"); rs = ps.executeQuery(); while (rs.next()) { final String name = rs.getString("name"); Start.子弹列表.add(name); } rs.close(); ps.close(); con.close(); } catch (SQLException ex) { System.err.println("读取子弹列表出错:" + ex.getMessage()); } finally { DBConPool.cleanUP(rs, ps, con); } } public static void GetSpecialJobTable() { Connection con = null; PreparedStatement ps = null; ResultSet rs = null; try { con = (Connection) DBConPool.getInstance().getDataSource().getConnection(); ps = con.prepareStatement("SELECT name FROM specialjobtable"); rs = ps.executeQuery(); while (rs.next()) { final String name = rs.getString("name"); Start.特殊组队经验加成表.add(name); } rs.close(); ps.close(); con.close(); } catch (SQLException ex) { System.err.println("读取组队经验加成出错:" + ex.getMessage()); } finally { DBConPool.cleanUP(rs, ps, con); } } public static void 公告初始化() { Start.公告列表.clear(); Connection con = null; PreparedStatement ps = null; ResultSet rs = null; try { con = (Connection) DBConPool.getInstance().getDataSource().getConnection(); ps = con.prepareStatement("SELECT * FROM messages"); rs = ps.executeQuery(); while (rs.next()) { final String name = rs.getString("message"); Start.公告列表.add(name); } rs.close(); ps.close(); con.close(); } catch (SQLException ex) { System.err.println("读取动态数据库出错:" + ex.getMessage()); } finally { DBConPool.cleanUP(rs, ps, con); } } public static void 公告(final int time) { WorldTimer.getInstance().register((Runnable) new Runnable() { @Override public void run() { if (Start.公告列表.size() > 0) { String 公告信息 = null; 公告信息 = Start.输出公告((int) Math.floor(Math.random() * (double) Start.公告列表.size())); if (公告信息 != null) { Broadcast.broadcastMessage(MaplePacketCreator.yellowChat("[冒险岛ONLLNE 帮助]" + 公告信息)); } } else { Start.公告初始化(); } } }, (long) (time * 1000 * 60)); } public static String 输出公告(final int a) { return (String) Start.公告列表.get(a); } public static int getFZ9(final String log1) { int jf = 0; try { final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection(); final PreparedStatement ps = con.prepareStatement("select * from fz9 where log = ?"); ps.setString(1, log1); final ResultSet rs = ps.executeQuery(); if (rs.next()) { jf = rs.getInt("sz1"); } else { final PreparedStatement psu = con.prepareStatement("insert into fz9 (log, sz1) VALUES (?, ?)"); psu.setString(1, log1); jf = 50; psu.setInt(2, 50); psu.executeUpdate(); psu.close(); } rs.close(); ps.close(); con.close(); } catch (SQLException ex) { System.err.println("FZ9读取发生错误: " + ex); } return jf; } public static void 初始化配置表() { final String[] 内容 = {"仅允许管理员登录", "火热程度", "登录自动注册开关", "角色个数", "泡点时间间隔", "频道人数", "频道热度", "允许玩家使用管理员道具", "允许玩家进入商城", "角色最大等级", "允许创建冒险家", "允许创建骑士团", "允许创建战神", "同IP多开", "同MAC多开", "IP多开上限", "MAC多开上限", "是否打印雇佣记录", "是否打印喇叭聊天", "是否打印商城购买", "是否打印伤害修正", "是否打印普通聊天", "是否打印封包", "是否开启自动注册", "是否开启Debug模式", "雇佣持续时间", "雇佣自动回收", "泡点金币", "泡点经验", "泡点抵用", "泡点点券", "雇佣泡点时间间隔", "雇佣泡点金币", "雇佣泡点点券", "经验结婚加成", "经验网吧加成", "经验吊坠加成", "经验人气加成", "蓝蜗牛", "蘑菇仔", "绿水灵", "星精灵", "胖企鹅", "白雪人", "大海龟", "章鱼怪", "顽皮猴", "漂漂猪", "小青蛇", "管理员隐身", "红螃蟹", "石头人", "紫色猫", "大灰狼", "青鳄鱼", "花蘑菇", "火野猪", "小白兔", "喷火龙", "玩家登录", "管理员独占登录", "记录登录信息", "欢迎弹窗", "玩家交易", "丢出金币", "丢出物品", "上线提示", "升级提示", "领主提示", "游戏喇叭", "怪物BUFF", "越级打怪", "全服决斗", "雇佣商人", "整点重载", "地图名称", "玩家指令", "游戏仓库", "指令通知", "管理员加速", "商城检测", "段数检测", "攻速检测", "全屏检测", "吸怪检测", "吸物检测", "伤害检测", "丢失伤害", "伤害上限", "服务器容错范围", "击杀作弊者", "全服通告", "封停掉落", "封停账号", "封停IP", "封停MAC", "物品掉落持续时间", "物品地图数量上限", "怪物刷新频率", "魔族突袭", "魔族攻城", "OX答题", "幸运职业", "全服双倍", "野外通缉", "喜从天降", "神秘商人", "半价福利", "金银送货", "全局血量等级", "全局血量", "商城扩充价格", "MAC注册上限", "账号角色上限", "雇佣经验加成开关", "记录登录信息", "阶段经验开关", "雇佣经验加成比例", "泡点开关", "泡点等级开关", "泡点地图", "离线泡点金币", "离线泡点经验", "离线泡点等级开关", "离线泡点点券", "离线泡点抵用", "离线泡点开关", "离线泡点地图", "离线给在线时间开关", "怪物多倍地图倍率", "怪物刷新频率设定", "怪物多倍地图开关", "怪物地图多倍怪物开关", "爆物上线开关", "等级连升开关", "爆物上线数量", "等级范围", "自定义箱子代码", "所有显示开关", "突破显示开关", "伤害突破开关", "装备卡破功开关", "怪物血量显示开关", "怪物减伤开关", "世界等级开关", "金币重置", "战力修正", "宠物自动吃药开关", "坐骑恢复开关", "叠加开关", "叠加上线", "突破上线", "砍爆率", "出装备概率", "自动吃药道具", "坐骑恢复频率", "坐骑恢复道具", "不参与叠加开关", "上线喇叭", "升级群消息通知", "成就还原上卷记录开关", "成就上卷加七记录开关", "成就上卷加三记录开关", "道具经验开关", "野外boss击杀广播", "boss击杀记录", "击杀boss打开npc", "子弹扩充开关", "特殊组队经验加成", "原始组队经验加成", "修正组队经验加成", "玩家聊天", "金锤子使用开关", "金锤子使用概率", "GM固伤开关", "GM固伤伤害", "个数检测", "点券比例", "BOSS出装备概率", "金币全局砍数量", "金币砍全局倍率", "特殊宠物吸取开关", "特殊宠物吸物开关", "特殊宠物吸金开关", "特殊宠物吸物无法使用地图开关", "宠吸道具", "道具强行宠吸开关", "伤害修正", "重置技能范围开关", "重置技能总范围", "越级带人开关", "越级带人道具开关", "越级带人道具", "套装属性加成开关", "套装个数", "宠物不饥饿开关", "坐骑不饥饿开关", "特殊全宠物吸物开关", "修正队员分配经验", "表单卡破功开关", "玩家升级喇叭", "无限BUFF", "地图刷新频率", "自动刷钱道具", "克隆基础伤害", "邀请人百分比获取", "自定义伤害加成开关", "道具加成自定义伤害开关", "伤害高于次数值", "自定义伤害气泡显示", "自定义伤害段数显示", "自定义伤害加成道具代码", "自定义力量加成比例", "自定义敏捷加成比例", "自定义智力加成比例", "自定义运气加成比例", "自定义物攻加成比例", "自定义魔攻加成比例", "自定义物防加成比例", "自定义魔防加成比例", "自定义血量加成比例", "自定义魔量加成比例", "自定义伤害黄字喇叭显示", "扣除21E伤害", "公告间隔时间", "特殊全宠物吸金开关"}; for (int a = 0; a < 内容.length; ++a) { 数据库读取(内容[a]); } } public static void 初始化表单() { 表单读取("suitdamtable", "id INT PRIMARY KEY NOT NULL AUTO_INCREMENT, name varchar(255), numb int(15), proportion int(15), proname varchar(255)"); 表单读取("petitemtable", "id INT PRIMARY KEY NOT NULL AUTO_INCREMENT, name varchar(255)"); 表单读取("petmesotable", "id INT PRIMARY KEY NOT NULL AUTO_INCREMENT, name varchar(255)"); 表单读取("petnomaptable", "id INT PRIMARY KEY NOT NULL AUTO_INCREMENT, name varchar(255)"); } public static void 表单读取(final String a, final String b) { try { final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection(); final ResultSet rs = con.getMetaData().getTables(null, null, a, null); if (!rs.next()) { final PreparedStatement psu = con.prepareStatement("create table " + a + "(" + b + ")"); psu.execute(); psu.close(); } rs.close(); con.close(); } catch (SQLException ex) { System.err.println("新建表单出现异常读取发生错误: " + ex); } } public static void 数据库读取(final String a) { try { final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection(); final PreparedStatement ps = con.prepareStatement("select * from configvalues where name = ?"); ps.setString(1, a); final ResultSet rs = ps.executeQuery(); if (!rs.next()) { final PreparedStatement psu = con.prepareStatement("insert into configvalues (name, Val) VALUES (?, ?)"); psu.setString(1, a); psu.setInt(2, 0); psu.executeUpdate(); psu.close(); } rs.close(); ps.close(); con.close(); } catch (SQLException ex) { System.err.println("configvalues读取发生错误: " + ex); } } public static boolean canCheckjyh() { if (Start.lastCheckjyhtime + 600000L > System.currentTimeMillis()) { return false; } Start.lastCheckjyhtime = System.currentTimeMillis(); return true; } public static void jyhshucc(final int id, final int sl, final String beizhu, final int inventorytype) { if (Start.jyhshu.containsKey(Integer.valueOf(id))) { Start.jyhshu.put(Integer.valueOf(id), new gui.jyhss.jyhwpss(((gui.jyhss.jyhwpss) Start.jyhshu.get(Integer.valueOf(id))).getsl() + sl, beizhu, inventorytype)); if (((gui.jyhss.jyhwpss) Start.jyhshu.get(Integer.valueOf(id))).getsl() <= 0) { Start.jyhshu.remove(Integer.valueOf(id)); } } else if (sl > 0) { Start.jyhshu.put(Integer.valueOf(id), new gui.jyhss.jyhwpss(sl, beizhu, inventorytype)); } } public static boolean buyjyh(final MapleCharacter chr, final int 编号) { int moneyLX = -1; int moneyL = -1; if (编号 < 0) { chr.dropMessage(1, "装备编号不存在"); return false; } if (!chr.canHoldSlots(1)) { chr.dropMessage(1, "背包格子不足,不能操作"); return false; } for (final MaplePlayerShopItem itemss : Start.jyhItem) { if (itemss.jyhid == 编号) { moneyLX = itemss.lx; moneyL = itemss.price; break; } } switch (moneyLX) { case 0: { if (chr.getMeso() < moneyL) { chr.dropMessage(1, "a金币不足"); return false; } break; } case 1: { if (chr.getCSPoints(1) < moneyL) { chr.dropMessage(1, "a点卷不足"); return false; } break; } case 2: { if (chr.getCSPoints(2) < moneyL) { chr.dropMessage(1, "a抵用券不足"); return false; } } case 3: { if (chr.getCSPoints(5) < moneyL) { chr.dropMessage(1, "a交易币不足"); return false; } break; } } int itemid = 0; int quantity = 0; int inventorytype = -1; int charactersid = -1; Equip equip = null; try { final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection(); final PreparedStatement ps = con.prepareStatement("SELECT * FROM `jyh` WHERE `tid` = ?"); ps.setInt(1, 编号); final ResultSet rs = ps.executeQuery(); if (rs.next()) { inventorytype = rs.getInt("inventorytype"); charactersid = rs.getInt("charactersid"); moneyLX = rs.getInt("moneytype"); moneyL = rs.getInt("money"); itemid = rs.getInt("itemid"); quantity = rs.getInt("quantity"); if (inventorytype == 1) { equip = new Equip(rs.getInt("itemid"), (short) 0); equip.setQuantity((short) 1); equip.setOwner(rs.getString("owner")); equip.setExpiration(rs.getLong("expiredate")); equip.setUpgradeSlots(rs.getByte("upgradeslots")); equip.setLevel(rs.getByte("level")); equip.setStr(rs.getShort("str")); equip.setDex(rs.getShort("dex")); equip.setInt(rs.getShort("int")); equip.setLuk(rs.getShort("luk")); equip.setHp(rs.getShort("hp")); equip.setMp(rs.getShort("mp")); equip.setWatk(rs.getShort("watk")); equip.setMatk(rs.getShort("matk")); equip.setWdef(rs.getShort("wdef")); equip.setMdef(rs.getShort("mdef")); equip.setAcc(rs.getShort("acc")); equip.setAvoid(rs.getShort("avoid")); equip.setHands(rs.getShort("hands")); equip.setSpeed(rs.getShort("speed")); equip.setJump(rs.getShort("jump")); equip.setViciousHammer(rs.getByte("ViciousHammer")); equip.setItemEXP(rs.getInt("itemEXP")); equip.setGMLog(rs.getString("GM_Log")); equip.setDurability(rs.getInt("durability")); equip.setEnhance(rs.getByte("enhance")); equip.setPotential1(rs.getShort("potential1")); equip.setPotential2(rs.getShort("potential2")); equip.setPotential3(rs.getShort("potential3")); equip.setHpR(rs.getShort("hpR")); equip.setMpR(rs.getShort("mpR")); //equip.setdd(rs.getInt("dd")); equip.setGiftFrom(rs.getString("sender")); equip.setIncSkill(rs.getInt("incSkill")); equip.setPVPDamage(rs.getShort("pvpDamage")); equip.setCharmEXP(rs.getShort("charmEXP")); } else { itemid = rs.getInt("itemid"); quantity = rs.getInt("quantity"); } if (!deleitem(编号)) { chr.dropMessage(1, "购买失败,可能改物品已经售出"); return false; } switch (moneyLX) { case 0: { if (chr.getMeso() < moneyL) { chr.dropMessage(1, "b金币不足"); return false; } chr.gainMeso(-moneyL, true, true); chr.gainjyhyh(0, charactersid, moneyL); break; } case 1: { if (chr.getCSPoints(1) < moneyL) { chr.dropMessage(1, "b点卷不足"); return false; } chr.modifyCSPoints(1, -moneyL, true); chr.gainjyhyh(1, charactersid, moneyL); break; } case 2: { if (chr.getCSPoints(2) < moneyL) { chr.dropMessage(1, "b抵用券不足"); return false; } chr.modifyCSPoints(2, -moneyL, true); chr.gainjyhyh(2, charactersid, moneyL); break; } case 3: { if (chr.getCSPoints(5) < moneyL) { chr.dropMessage(1, "b交易币不足"); return false; } chr.modifyCSPoints(5, -moneyL, true); chr.gainjyhyh(3, charactersid, moneyL); break; } } if (inventorytype == 1) { MapleInventoryManipulator.addFromDrop(chr.getClient(), (IItem) equip, false); chr.dropMessage(6, "购买成功,东西已经塞进您的背包"); chr.killjyhitem(编号); FileoutputUtil.logToFile_chr(chr, "交易行购买.txt", " 物品id:" + itemid + " 数量:" + quantity + " 消费类型:" + moneyLX + " 金额:" + moneyL); return true; } chr.gainItem(itemid, (int) (short) quantity); chr.dropMessage(6, "购买成功,东西已经塞进您的背包"); chr.killjyhitem(编号); FileoutputUtil.logToFile_chr(chr, "交易行购买.txt", " 物品id:" + itemid + " 数量:" + quantity + " 消费类型:" + moneyLX + " 金额:" + moneyL); return true; } rs.close(); ps.close(); con.close(); } catch (Exception Ex) { System.out.println("jyh购买物品失败" + Ex); return false; } return false; } public static boolean deleitem(final int 编号) { try { final Connection con1 = (Connection) DBConPool.getInstance().getDataSource().getConnection(); final PreparedStatement ps = con1.prepareStatement("DELETE FROM `jyh` WHERE `tid` = ?"); ps.setInt(1, 编号); ps.executeUpdate(); ps.close(); con1.close(); return true; } catch (Exception Ex) { System.out.println("交易购买后删除物品"); return false; } } static { instance = new Start(); ConfigValuesMap = (Map) new HashMap(); 公告列表 = (ArrayList) new ArrayList(); exptable = (List>) new ArrayList(); 经验加成表 = (List>) new ArrayList(); 套装加成表 = (List>>>) new ArrayList(); 野外boss刷新 = (List) new ArrayList(); 不参与叠加道具 = (List) new ArrayList(); SkillType = (List) new ArrayList(); 子弹列表 = (List) new ArrayList(); 坐骑列表 = (List>) new ArrayList(); 特殊组队经验加成表 = (List) new ArrayList(); mobmaptable = (List) new ArrayList(); 宠物不参与地图表 = (List) new ArrayList(); 宠物吸金表 = (List) new ArrayList(); 宠物吸物表 = (List) new ArrayList(); lastCheckjyhtime = 0L; 世界等级 = getFZ9("世界等级"); 活动事件每日自动启动开关 = Boolean.parseBoolean(ServerProperties.getProperty("pp.活动事件每日自动启动开关")); jyhItem = (List) new LinkedList(); jyhshu = (Map) new HashMap(); 交易行 = true; jyhdq = (Map) new HashMap(); isClearBossLog = Boolean.valueOf(false); 记录在线时间 = 0; calendar = Calendar.getInstance(); 时 = Calendar.getInstance().get(11); 分 = Calendar.getInstance().get(12); 星期 = Calendar.getInstance().get(7); 年 = Calendar.getInstance().get(1); 月 = Calendar.getInstance().get(2) + 1; 日 = Calendar.getInstance().get(5); 秒 = Calendar.getInstance().get(13); isClearZXSJ = Boolean.valueOf(false); 捉鬼任务初始召唤时间 = Integer.parseInt(ServerProperties.getProperty("pp.捉鬼任务初始召唤时间")); 捉鬼任务初始化 = 0; 回收内存 = 0; 公告 = 0; 公告数量 = 0; 特殊控制台.initTWinfo(); } }