Шара Платной сборки Sun-Dev (за 10.05.11) за 21к руб

Вот еще одна шара на этот раз шара очень отличается от предыдущих шар,теперь для вас доступна платная сборка Sun-Dev (за 10.05.11) за 21к руб,сама команда известная в сборках Epilouge,фиксы просто супер,так уже отвязали сборку,и теперь вы можете поставить ее к себе на проэкт,можно смело ставить ее на свой проэкт
Квесты:
Исправлен Seven Signs Secret Ritual Priests
Исправлен Tragedy In Von Hellmann Forest
Исправлен Through the Gate Once More
Исправлен Break Through the Hall of Suffering
Скиллы:
Произведена корректировка формулы расчета резистов (приведено к оффициальному серверу)
Исправлены сообщения при отображении шанса прохождения скиллов
Исправлена и усовершенствована система проверки скиллов при делевеле (учитывает заточенные скиллы)
Исправлен Prophecy of Water
Исправлен Heroic Berserker
Добавлен параметр RECEPTIVE в формулу расчета резистов
Разное:
Исправлен временной спаун NPC Eilhalder von Hellmann
Добавлены дополнительные проверки в SelectorThread
Добавлена возможность сохранения/восстановления бафа в CommunityBoard для питомцев
Исправлена ошибка в пакете RequestBypassToServer
Исправлена ошибка в BuffBBSManager связанная с групповым бафом
Корректировка конфига GarbageCollector
Оптимизирован и обновлен ThreadPoolManager
Исправлено лишнее закрытие коннекта к БД в Castle class
Реализована система Петиций в соответствии с оффициальным сервером
Добавлена соответствующая таблица в Базу Данных для системы Петиций
Произведена замена тугого Queue в ConnectionPoolManager
Реализован новый уникальный класс для поддержки МультиЯзычности
Реализован конфиг для выбора языка сервера
Исправлен скрипт выдачи бонусов за голосования на HopZone
Расширен конфиг для автоматической выдачи бонусов за голосования на HopZone
Произведена оптимизация ConnectionPoolManager
Произведена оптимизация QuestRatesMultiplierConfig
Усовершенствован конфиг questRatesMultiplier (намного упрощает корректировку рейтов в квестах)
Реализован конфиг, позволяющий установить получение дропа с монстров персонажами, нанесшими последний удар
Исправлены AirshipGuards
Усовершенствован AI AirshipGuard1 (Стражники и Фанатик Шилен ведут себя согласно оффициальному серверу)
Усовершенствован AI AirshipGuard2 (Стражники и Фанатик Шилен ведут себя согласно оффициальному серверу)
Добавлен спаун монстра 18782 в SpawnTable
Откорректирован конфиг автоизучения скиллов
Исправлена ошибка RequestRecipeShopMessageSet
Реализован конфиг, позволяющий убрать вывод в лог предупреждений (Warnings) с низкой степенью важности
Выведены соответствующие переменные для конфига отключения предупреждней
Усовершенствован конфиг, позволяющий блокировать игроков, попытавшихся использовать несуществующие мультиселлы
Исправлен Handy's Block Checker Эвент
Исправлен 32378 teleporter
Исправлен 32613 teleporter
Реализован уникальный L2HBCManagerInstance
Исправлены Entrance Manager, участвующие в эвенте Handy's Block Checker
Исправлена возможность телепортации, с помощью CommunityBoard во время Автоматических Эвентов
Исправлена ошибка в url CommunityBoard
Добавлена дополнительная проверка в BuffBBSManager
Исправлен AI Kechi
Исправлена ошибка в пакете RequestRecipeShopMessageSet
Исправлена ошибка в пакете SendBypassBuildCmd
Исправлена ошибка в MultiSellIngredient
Реализован уникальный конфиг выдачи награды за PvP
Выведены соответствующие переменные для конфига выдачи награды за PvP
Реализована проверка персонажий по HWID, для исключения мошенничества при набивании PvP
Добавлена функция автоматического обновления соединений в ConnectionPoolManager
Реализован конфиг, позволяющий установить значение (уровень), который будет проверятся при делевеле и удалении скилла (усовершенствован конфиг AltRemoveSkillsOnDelevel)
Исправлена команда /resetname
Произведена оптимизация с использованием GArray
Исправлен конфиг Автоизучения скиллов (Скиллы даются при получении профессии а не уровня)
Исправлено автоматическое очищение списка игроков, заблокированных системой AntiBrute
Исправлено сохранение и восстановление списка игроков, заблокированных системой AntiBrute в Базу Данных
Добавлена возможность установить префикс сервера в конфиге автоматической выдачи бонусов за голосования L2Top
Добавлены переменные с возможностью установить выдачу бонусов персонажам с цифрами в нике и минимальный уровень для выдачи бонусов при голосовании на L2Top
Добавлены новые МультиЯзычные Токены
Исправлена возможность установить любой предмет, который будет потреблятmся за баф в CommunityBoard
Реализован уникальный скрипт выдачи бонусов переходящим кланам, с помощью voice команды
Реализован соответствующие конфиг, позволяющие установить количество членов клана, id награды, количество и многое другое при выдачи бонусов переходящим кланам
Добавлена траблица Базы Данных, для сохранения уникального HWIDa при выдачи бонусов кланам
Исправлен метод isDisguise
Разделен конфиг, позволяющий отдельно устанавливать прохождение Сабкласса без квеста и изучении трансформаций
Произведены корректировки аукциона в ItemBroker
Произведена очистка конфигов от неиспользуемых переменных и удалены неиспользуемые библиотеки
Удалена проверка аккаунтов на pay_stat при автоматическом создании персонажей
Исправлено определение излишних соединений с Базой Данных (rs/st/con close/free)
Откорректирован шанс прокачки Soul Crystal на некоторых монстрах/боссах
Исправлен Seven Signs Secret Ritual Priests
Исправлен Tragedy In Von Hellmann Forest
Исправлен Through the Gate Once More
Исправлен Break Through the Hall of Suffering
Скиллы:
Произведена корректировка формулы расчета резистов (приведено к оффициальному серверу)
Исправлены сообщения при отображении шанса прохождения скиллов
Исправлена и усовершенствована система проверки скиллов при делевеле (учитывает заточенные скиллы)
Исправлен Prophecy of Water
Исправлен Heroic Berserker
Добавлен параметр RECEPTIVE в формулу расчета резистов
Разное:
Исправлен временной спаун NPC Eilhalder von Hellmann
Добавлены дополнительные проверки в SelectorThread
Добавлена возможность сохранения/восстановления бафа в CommunityBoard для питомцев
Исправлена ошибка в пакете RequestBypassToServer
Исправлена ошибка в BuffBBSManager связанная с групповым бафом
Корректировка конфига GarbageCollector
Оптимизирован и обновлен ThreadPoolManager
Исправлено лишнее закрытие коннекта к БД в Castle class
Реализована система Петиций в соответствии с оффициальным сервером
Добавлена соответствующая таблица в Базу Данных для системы Петиций
Произведена замена тугого Queue в ConnectionPoolManager
Реализован новый уникальный класс для поддержки МультиЯзычности
Реализован конфиг для выбора языка сервера
Исправлен скрипт выдачи бонусов за голосования на HopZone
Расширен конфиг для автоматической выдачи бонусов за голосования на HopZone
Произведена оптимизация ConnectionPoolManager
Произведена оптимизация QuestRatesMultiplierConfig
Усовершенствован конфиг questRatesMultiplier (намного упрощает корректировку рейтов в квестах)
Реализован конфиг, позволяющий установить получение дропа с монстров персонажами, нанесшими последний удар
Исправлены AirshipGuards
Усовершенствован AI AirshipGuard1 (Стражники и Фанатик Шилен ведут себя согласно оффициальному серверу)
Усовершенствован AI AirshipGuard2 (Стражники и Фанатик Шилен ведут себя согласно оффициальному серверу)
Добавлен спаун монстра 18782 в SpawnTable
Откорректирован конфиг автоизучения скиллов
Исправлена ошибка RequestRecipeShopMessageSet
Реализован конфиг, позволяющий убрать вывод в лог предупреждений (Warnings) с низкой степенью важности
Выведены соответствующие переменные для конфига отключения предупреждней
Усовершенствован конфиг, позволяющий блокировать игроков, попытавшихся использовать несуществующие мультиселлы
Исправлен Handy's Block Checker Эвент
Исправлен 32378 teleporter
Исправлен 32613 teleporter
Реализован уникальный L2HBCManagerInstance
Исправлены Entrance Manager, участвующие в эвенте Handy's Block Checker
Исправлена возможность телепортации, с помощью CommunityBoard во время Автоматических Эвентов
Исправлена ошибка в url CommunityBoard
Добавлена дополнительная проверка в BuffBBSManager
Исправлен AI Kechi
Исправлена ошибка в пакете RequestRecipeShopMessageSet
Исправлена ошибка в пакете SendBypassBuildCmd
Исправлена ошибка в MultiSellIngredient
Реализован уникальный конфиг выдачи награды за PvP
Выведены соответствующие переменные для конфига выдачи награды за PvP
Реализована проверка персонажий по HWID, для исключения мошенничества при набивании PvP
Добавлена функция автоматического обновления соединений в ConnectionPoolManager
Реализован конфиг, позволяющий установить значение (уровень), который будет проверятся при делевеле и удалении скилла (усовершенствован конфиг AltRemoveSkillsOnDelevel)
Исправлена команда /resetname
Произведена оптимизация с использованием GArray
Исправлен конфиг Автоизучения скиллов (Скиллы даются при получении профессии а не уровня)
Исправлено автоматическое очищение списка игроков, заблокированных системой AntiBrute
Исправлено сохранение и восстановление списка игроков, заблокированных системой AntiBrute в Базу Данных
Добавлена возможность установить префикс сервера в конфиге автоматической выдачи бонусов за голосования L2Top
Добавлены переменные с возможностью установить выдачу бонусов персонажам с цифрами в нике и минимальный уровень для выдачи бонусов при голосовании на L2Top
Добавлены новые МультиЯзычные Токены
Исправлена возможность установить любой предмет, который будет потреблятmся за баф в CommunityBoard
Реализован уникальный скрипт выдачи бонусов переходящим кланам, с помощью voice команды
Реализован соответствующие конфиг, позволяющие установить количество членов клана, id награды, количество и многое другое при выдачи бонусов переходящим кланам
Добавлена траблица Базы Данных, для сохранения уникального HWIDa при выдачи бонусов кланам
Исправлен метод isDisguise
Разделен конфиг, позволяющий отдельно устанавливать прохождение Сабкласса без квеста и изучении трансформаций
Произведены корректировки аукциона в ItemBroker
Произведена очистка конфигов от неиспользуемых переменных и удалены неиспользуемые библиотеки
Удалена проверка аккаунтов на pay_stat при автоматическом создании персонажей
Исправлено определение излишних соединений с Базой Данных (rs/st/con close/free)
Откорректирован шанс прокачки Soul Crystal на некоторых монстрах/боссах
/* */ package sun.util;
/* */
/* */ import java.io.File;
/* */ import java.io.FileOutputStream;
/* */ import java.io.IOException;
/* */ import java.io.ObjectOutputStream;
/* */ import java.io.OutputStream;
/* */ import java.io.PrintStream;
/* */ import java.lang.reflect.Array;
/* */ import java.lang.reflect.Field;
/* */ import java.lang.reflect.Modifier;
/* */ import java.net.InetAddress;
/* */ import java.net.NetworkInterface;
/* */ import java.net.ServerSocket;
/* */ import java.net.Socket;
/* */ import java.net.URI;
/* */ import java.sql.ResultSet;
/* */ import java.text.DecimalFormat;
/* */ import java.text.NumberFormat;
/* */ import java.util.Collection;
/* */ import java.util.Locale;
/* */ import java.util.Properties;
/* */ import java.util.Random;
/* */ import java.util.StringTokenizer;
/* */ import java.util.logging.Logger;
/* */ import java.util.regex.Matcher;
/* */ import java.util.regex.Pattern;
/* */ import java.util.regex.PatternSyntaxException;
/* */ import sun.Config;
/* */ import sun.commons.ThreadPoolManager;
/* */ import sun.commons.collections.GArray;
/* */ import sun.commons.random.Rnd;
/* */ import sun.database.DatabaseUtils;
/* */ import sun.database.FiltredPreparedStatement;
/* */ import sun.database.L2DatabaseFactory;
/* */ import sun.database.ThreadConnection;
/* */ import sun.gameserver.model.L2Object;
/* */ import sun.gameserver.model.L2Player;
/* */
/* */ public class Util
/* */ {
/* 40 */ private static final Logger _log = Logger.getLogger(Util.class.getName());
/* */ static final String PATTERN = "0.0000000000E00";
/* */ static final DecimalFormat df;
/* 53 */ private static final NumberFormat adenaFormatter = NumberFormat.getIntegerInstance(Locale.FRANCE);
/* */
/* */ public static boolean isInternalIP(String ipAddress)
/* */ {
/* 61 */ if (Config.INTERNAL_NETLIST != null)
/* */ {
/* 63 */ return Config.INTERNAL_NETLIST.isIpInNets(ipAddress);
/* */ }
/* 65 */ for (String s : Config.INTERNAL_IP)
/* */ {
/* 67 */ if (checkIfIpInRange(ipAddress, s))
/* */ {
/* 69 */ return true;
/* */ }
/* */ }
/* 72 */ return false;
/* */ }
/* */
/* */ static boolean checkIfIpInRange(String ip, String ipRange)
/* */ {
/* 79 */ int userIp1 = -1;
/* 80 */ int userIp2 = -1;
/* 81 */ int userIp3 = -1;
/* 82 */ int userIp4 = -1;
/* */
/* 86 */ ip = ip.replace(".", ",");
/* 87 */ for (String s : ip.split(","))
/* */ {
/* 89 */ if (userIp1 == -1)
/* */ {
/* 91 */ userIp1 = Integer.parseInt(s);
/* */ }
/* 93 */ else if (userIp2 == -1)
/* */ {
/* 95 */ userIp2 = Integer.parseInt(s);
/* */ }
/* 97 */ else if (userIp3 == -1)
/* */ {
/* 99 */ userIp3 = Integer.parseInt(s);
/* */ }
/* */ else
/* */ {
/* 103 */ userIp4 = Integer.parseInt(s);
/* */ }
/* */ }
/* 106 */ int ipMin1 = -1;
/* 107 */ int ipMin2 = -1;
/* 108 */ int ipMin3 = -1;
/* 109 */ int ipMin4 = -1;
/* 110 */ int ipMax1 = -1;
/* 111 */ int ipMax2 = -1;
/* 112 */ int ipMax3 = -1;
/* 113 */ int ipMax4 = -1;
/* 114 */ StringTokenizer st = new StringTokenizer(ipRange, "-");
/* 115 */ if (st.countTokens() == 2)
/* */ {
/* 117 */ String firstIp = st.nextToken();
/* 118 */ String lastIp = st.nextToken();
/* 119 */ firstIp = firstIp.replace(".", ",");
/* 120 */ lastIp = lastIp.replace(".", ",");
/* */
/* 122 */ for (String s1 : firstIp.split(","))
/* */ {
/* 124 */ if (ipMin1 == -1)
/* */ {
/* 126 */ ipMin1 = Integer.parseInt(s1);
/* */ }
/* 128 */ else if (ipMin2 == -1)
/* */ {
/* 130 */ ipMin2 = Integer.parseInt(s1);
/* */ }
/* 132 */ else if (ipMin3 == -1)
/* */ {
/* 134 */ ipMin3 = Integer.parseInt(s1);
/* */ }
/* */ else
/* */ {
/* 138 */ ipMin4 = Integer.parseInt(s1);
/* */ }
/* */ }
/* */
/* 142 */ for (String s2 : lastIp.split(","))
/* */ {
/* 144 */ if (ipMax1 == -1)
/* */ {
/* 146 */ ipMax1 = Integer.parseInt(s2);
/* */ }
/* 148 */ else if (ipMax2 == -1)
/* */ {
/* 150 */ ipMax2 = Integer.parseInt(s2);
/* */ }
/* 152 */ else if (ipMax3 == -1)
/* */ {
/* 154 */ ipMax3 = Integer.parseInt(s2);
/* */ }
/* */ else
/* */ {
/* 158 */ ipMax4 = Integer.parseInt(s2);
/* */ }
/* */ }
/* */
/* 162 */ if ((userIp1 > ipMin1) && (userIp1 ipMin2)
/* */ {
/* 174 */ return true;
/* */ }
/* 176 */ if (userIp2 ipMin3)
/* */ {
/* 182 */ return true;
/* */ }
/* */
/* 185 */ return userIp3 >= ipMin3;
/* */ }
/* 187 */ if ((userIp1 != ipMin1) && (userIp1 == ipMax1))
/* */ {
/* 189 */ if (userIp2 ipMax2)
/* */ {
/* 195 */ return false;
/* */ }
/* 197 */ if (userIp3 = ipMin3;
/* */ }
/* 221 */ if ((userIp2 != ipMin2) && (userIp2 == ipMax2))
/* */ {
/* 223 */ if (userIp3 < ipMax3)
/* */ {
/* 225 */ return true;
/* */ }
/* */
/* 228 */ return userIp3 ipMin3) && (userIp3 = ipMin4;
/* */ }
/* 242 */ if ((userIp3 != ipMin3) && (userIp3 == ipMax3))
/* */ {
/* 244 */ return userIp4 = ipMin4) && (userIp4 <= ipMax4))
/* */ {
/* 248 */ return true;
/* */ }
/* 250 */ if ((userIp4 ipMax4))
/* */ {
/* 252 */ return false;
/* */ }
/* */ }
/* 255 */ else if (st.countTokens() == 1)
/* */ {
/* 257 */ if (ip.equalsIgnoreCase(ipRange))
/* */ {
/* 259 */ return true;
/* */ }
/* */ }
/* */ else
/* */ {
/* 264 */ _log.warning(new StringBuilder().append("Error in internal ip detection: ").append(ipRange).toString());
/* */ }
/* 266 */ return false;
/* */ }
/* */
/* */ public static boolean isMatchingRegexp(String text, String template)
/* */ {
/* 279 */ Pattern pattern = null;
/* */ try
/* */ {
/* 282 */ pattern = Pattern.compile(template);
/* */ }
/* */ catch (PatternSyntaxException e)
/* */ {
/* 286 */ e.printStackTrace();
/* */ }
/* 288 */ if (pattern == null)
/* */ {
/* 290 */ return false;
/* */ }
/* 292 */ Matcher regexp = pattern.matcher(text);
/* 293 */ return regexp.matches();
/* */ }
/* */
/* */ public static String replaceRegexp(String source, String template, String replacement)
/* */ {
/* 307 */ Pattern pattern = null;
/* */ try
/* */ {
/* 310 */ pattern = Pattern.compile(template);
/* */ }
/* */ catch (PatternSyntaxException e)
/* */ {
/* 314 */ e.printStackTrace();
/* */ }
/* 316 */ if (pattern != null)
/* */ {
/* 318 */ Matcher regexp = pattern.matcher(source);
/* 319 */ source = regexp.replaceAll(replacement);
/* */ }
/* 321 */ return source;
/* */ }
/* */
/* */ public static String printData(byte[] data, int len)
/* */ {
/* 326 */ StringBuffer result = new StringBuffer();
/* 327 */ int counter = 0;
/* 328 */ for (int i = 0; i 0; i--)
/* */ {
/* 811 */ long next = a;
/* 812 */ a >>= bits;
/* 813 */ result[(i - 1)] = (int)(next - a * mval);
/* */ }
/* 815 */ return result;
/* */ }
/* */
/* */ public static float[] parseCommaSeparatedFloatArray(String s)
/* */ {
/* 820 */ if (s.isEmpty())
/* */ {
/* 822 */ return new float[0];
/* */ }
/* 824 */ String[] tmp = s.replaceAll(",", ";").split(";");
/* 825 */ float[] ret = new float[tmp.length];
/* 826 */ for (int i = 0; i < tmp.length; i++)
/* */ {
/* 828 */ ret[i] = Float.parseFloat(tmp[i]);
/* */ }
/* 830 */ return ret;
/* */ }
/* */
/* */ public static int[] parseCommaSeparatedIntegerArray(String s)
/* */ {
/* 835 */ if (s.isEmpty())
/* */ {
/* 837 */ return new int[0];
/* */ }
/* 839 */ String[] tmp = s.replaceAll(",", ";").split(";");
/* 840 */ int[] ret = new int[tmp.length];
/* 841 */ for (int i = 0; i < tmp.length; i++)
/* */ {
/* 843 */ ret[i] = Integer.parseInt(tmp[i]);
/* */ }
/* 845 */ return ret;
/* */ }
/* */
/* */ public static int[] parseCommaSeparatedIntegerArray(String s, String separator)
/* */ {
/* 850 */ if (s.isEmpty())
/* */ {
/* 852 */ return new int[0];
/* */ }
/* 854 */ String[] tmp = s.replaceAll(",", separator).split(separator);
/* 855 */ int[] ret = new int[tmp.length];
/* 856 */ for (int i = 0; i < tmp.length; i++)
/* */ {
/* 858 */ ret[i] = Integer.parseInt(tmp[i]);
/* */ }
/* 860 */ return ret;
/* */ }
/* */
/* */ public static String FormatTable(Collection tds, int rows, boolean appendTD)
/* */ {
/* 866 */ return Strings.FormatTable(tds, rows, appendTD);
/* */ }
/* */
/* */ public static String joinStrings(String glueStr, String[] strings, int startIdx, int maxCount)
/* */ {
/* 872 */ return Strings.joinStrings(glueStr, strings, startIdx, maxCount);
/* */ }
/* */
/* */ public static String joinStrings(String glueStr, String[] strings, int startIdx)
/* */ {
/* 878 */ return Strings.joinStrings(glueStr, strings, startIdx, -1);
/* */ }
/* */
/* */ public static boolean isNumber(String s)
/* */ {
/* */ try {
/* 884 */ if (s.equals("2.2250738585072012e-308"))
/* 885 */ return false;
/* 886 */ Double.parseDouble(s);
/* */ }
/* */ catch (NumberFormatException e)
/* */ {
/* 890 */ return false;
/* */ }
/* 892 */ return true;
/* */ }
/* */
/* */ public static Object[] addElementToArray(Object[] arr, Object o, Class c)
/* */ {
/* 906 */ if (arr == null)
/* */ {
/* 908 */ arr = (Object[])(Object[])Array.newInstance(c, 1);
/* 909 */ arr[0] = o;
/* 910 */ return arr;
/* */ }
/* 912 */ int len = arr.length;
/* 913 */ Object[] tmp = (Object[])(Object[])Array.newInstance(c, len + 1);
/* 914 */ System.arraycopy(arr, 0, tmp, 0, len);
/* 915 */ tmp[len] = o;
/* 916 */ return tmp;
/* */ }
/* */
/* */ public static int getHeadingTo(L2Object actor, L2Object target)
/* */ {
/* 921 */ if ((actor == null) || (target == null) || (target == actor))
/* */ {
/* 923 */ return -1;
/* */ }
/* 925 */ return getHeadingTo(actor.getLoc(), target.getLoc());
/* */ }
/* */
/* */ public static int getHeadingTo(Location actor, Location target)
/* */ {
/* 930 */ if ((actor == null) || (target == null) || (target.equals(actor)))
/* */ {
/* 932 */ return -1;
/* */ }
/* 934 */ int dx = target.x - actor.x;
/* 935 */ int dy = target.y - actor.y;
/* 936 */ int heading = target.h - (int)(Math.atan2(-dy, -dx) * 10430.378350470453D + 32768.0D);
/* 937 */ if (heading 65535)
/* */ {
/* 943 */ heading &= 65535;
/* */ }
/* 945 */ return heading;
/* */ }
/* */
/* */ public static boolean isCharNameAvail(String name)
/* */ {
/* 950 */ ThreadConnection con = null;
/* 951 */ FiltredPreparedStatement st = null;
/* 952 */ ResultSet rs = null;
/* */ try
/* */ {
/* 955 */ con = L2DatabaseFactory.getInstance().getConnection();
/* 956 */ st = con.prepareStatement("SELECT char_name FROM characters WHERE char_name LIKE ?");
/* 957 */ st.setString(1, name);
/* 958 */ rs = st.executeQuery();
/* 959 */ int i = !rs.next() ? 1 : 0;
/* */ return i;
/* */ }
/* */ catch (Exception e)
/* */ {
/* 963 */ e.printStackTrace();
/* 964 */ int j = 0;
/* */ return j; } finally { DatabaseUtils.closeDatabaseCSR(con, st, rs); } throw localObject;
/* */ }
/* */
/* */ public static String dumpObject(Object o, boolean simpleTypes, boolean parentFields, boolean ignoreStatics)
/* */ {
/* 974 */ Class cls = o.getClass();
/* 975 */ String result = new StringBuilder().append("[").append(simpleTypes ? cls.getSimpleName() : cls.getName()).append("\n").toString();
/* */
/* 977 */ GArray fields = new GArray();
/* 978 */ while (cls != null)
/* */ {
/* 980 */ for (Field fld : cls.getDeclaredFields())
/* */ {
/* 982 */ if (fields.contains(fld))
/* */ continue;
/* 984 */ if ((ignoreStatics) && (Modifier.isStatic(fld.getModifiers())))
/* */ {
/* */ continue;
/* */ }
/* 988 */ fields.add(fld);
/* */ }
/* */
/* 991 */ cls = cls.getSuperclass();
/* 992 */ if (parentFields)
/* */ {
/* */ continue;
/* */ }
/* */ }
/* 997 */ for (Field fld : fields) {
/* 999 */ fld.setAccessible(true);
/* */ String val;
/* */ try { Object fldObj = fld.get(o);
/* 1003 */ val = fldObj == null ? "NULL" : fldObj.toString();
/* */ }
/* */ catch (Throwable e)
/* */ {
/* 1007 */ e.printStackTrace();
/* 1008 */ val = "";
/* */ }
/* 1010 */ String type = simpleTypes ? fld.getType().getSimpleName() : fld.getType().toString();
/* 1011 */ result = new StringBuilder().append(result).append(String.format("\t%s [%s] = %s;\n", new Object[] { fld.getName(), type, val })).toString();
/* */ }
/* 1013 */ result = new StringBuilder().append(result).append("]\n").toString();
/* 1014 */ return result;
/* */ }
/* */
/* */ public static String getPlayerNameByObjId(int oid)
/* */ {
/* 1019 */ String pName = null;
/* 1020 */ ThreadConnection con = null;
/* 1021 */ FiltredPreparedStatement statement = null;
/* 1022 */ ResultSet rset = null;
/* */ try
/* */ {
/* 1025 */ con = L2DatabaseFactory.getInstance().getConnection();
/* 1026 */ statement = con.prepareStatement(new StringBuilder().append("SELECT `char_name` FROM `characters` WHERE `obj_Id`=\"").append(oid).append("\" LIMIT 1").toString());
/* 1027 */ rset = statement.executeQuery();
/* 1028 */ if (rset.next())
/* */ {
/* 1030 */ pName = rset.getString(1);
/* */ }
/* */ }
/* */ catch (Exception e)
/* */ {
/* 1035 */ _log.warning(new StringBuilder().append("SQL Error: ").append(e).toString());
/* 1036 */ e.printStackTrace();
/* */ }
/* */ finally
/* */ {
/* 1040 */ DatabaseUtils.closeDatabaseCSR(con, statement, rset);
/* */ }
/* 1042 */ return pName;
/* */ }
/* */
/* */ public static void waitForFreePorts(String host, int[] ports)
/* */ {
/* 1047 */ boolean binded = false;
/* 1048 */ while (!binded)
/* */ {
/* 1050 */ for (int port : ports)
/* */ {
/* 1052 */ ServerSocket ss = null;
/* */ try
/* */ {
/* 1055 */ ss = host.equalsIgnoreCase("*") ? new ServerSocket(port) : new ServerSocket(port, 50, InetAddress.getByName(host));
/* 1056 */ _log.fine(new StringBuilder().append("Port ").append(port).append(" binded successfully.").toString());
/* 1057 */ binded = true;
/* */ }
/* */ catch (Exception e)
/* */ {
/* 1061 */ _log.warning(new StringBuilder().append("\nPort ").append(port).append(" is allready binded. Please free it and restart server.").toString());
/* 1062 */ binded = false;
/* */ try
/* */ {
/* 1065 */ Thread.sleep(3000L);
/* */ }
/* */ catch (InterruptedException e2)
/* */ {
/* */ }
/* */ }
/* */ finally
/* */ {
/* */ try
/* */ {
/* 1075 */ ss.close();
/* */ }
/* */ catch (IOException e)
/* */ {
/* 1079 */ e.printStackTrace();
/* */ }
/* */ }
/* */ }
/* */ }
/* */ }
/* */
/* */ public static boolean containsMat(String s)
/* */ {
/* 1088 */ for (Pattern pattern : Config.MAT_LIST) {
/* 1089 */ if (pattern.matcher(s).matches())
/* 1090 */ return true;
/* */ }
/* 1092 */ return false;
/* */ }
/* */
/* */ public static boolean containsUnexeptableExpression(String s)
/* */ {
/* 1097 */ if (Config.UNEX_LIST != null) {
/* 1098 */ for (Pattern pattern : Config.UNEX_LIST)
/* 1099 */ if (pattern.matcher(s).matches())
/* 1100 */ return true;
/* */ }
/* 1102 */ return false;
/* */ }
/* */
/* */ public static void saveHexid(String string, String fileName)
/* */ {
/* */ try
/* */ {
/* 1109 */ Properties hexSetting = new Properties();
/* 1110 */ File file = new File(fileName);
/* 1111 */ file.createNewFile();
/* 1112 */ OutputStream out = new FileOutputStream(file);
/* 1113 */ hexSetting.setProperty("HexID", string);
/* 1114 */ hexSetting.store(out, "the hexID to auth into login");
/* 1115 */ out.close();
/* */ }
/* */ catch (Exception e)
/* */ {
/* 1119 */ System.out.println(new StringBuilder().append("Failed to save hex id to ").append(fileName).append(" File.").toString());
/* 1120 */ e.printStackTrace();
/* */ }
/* */ }
/* */
/* */ public static String handleConfig(L2Player activeChar, String s)
/* */ {
/* 1126 */ String[] parameter = s.split("=");
/* 1127 */ String pName = parameter[0].trim();
/* */ try
/* */ {
/* 1130 */ Field field = Config.class.getField(pName);
/* 1131 */ if (parameter.length < 2)
/* */ {
/* 1133 */ return new StringBuilder().append(pName).append("=").append(field.get(null)).toString();
/* */ }
/* 1135 */ String pValue = parameter[1].trim();
/* 1136 */ if (setField(activeChar, field, pValue))
/* */ {
/* 1138 */ return new StringBuilder().append("Config field set succesfully: ").append(pName).append("=").append(field.get(null)).toString();
/* */ }
/* 1140 */ return new StringBuilder().append("Config field [").append(pName).append("] set fail!").toString();
/* */ }
/* */ catch (NoSuchFieldException e)
/* */ {
/* 1144 */ return new StringBuilder().append("Parameter ").append(pName).append(" not found").toString();
/* */ }
/* */ catch (Exception e)
/* */ {
/* 1148 */ e.printStackTrace();
/* 1149 */ }return "Exception on handleConfig";
/* */ }
/* */
/* */ public static boolean setField(L2Player activeChar, Field field, String param)
/* */ {
/* */ try
/* */ {
/* 1157 */ field.setBoolean(null, Boolean.parseBoolean(param));
/* */ }
/* */ catch (Exception e)
/* */ {
/* */ try
/* */ {
/* 1163 */ field.setInt(null, Integer.parseInt(param));
/* */ }
/* */ catch (Exception e1)
/* */ {
/* */ try
/* */ {
/* 1169 */ field.setLong(null, Long.parseLong(param));
/* */ }
/* */ catch (Exception e2)
/* */ {
/* */ try
/* */ {
/* 1175 */ if (!param.equals("2.2250738585072012e-308"))
/* 1176 */ field.setDouble(null, Double.parseDouble(param));
/* */ else
/* 1178 */ field.setDouble(null, 0.0D);
/* */ }
/* */ catch (Exception e3)
/* */ {
/* */ try
/* */ {
/* 1184 */ field.setFloat(null, Float.parseFloat(param));
/* */ }
/* */ catch (Exception e4)
/* */ {
/* */ try
/* */ {
/* 1190 */ field.set(null, param);
/* */ }
/* */ catch (Exception e5)
/* */ {
/* 1194 */ if (activeChar != null)
/* */ {
/* 1196 */ activeChar.sendMessage(new StringBuilder().append("Error while set field: ").append(param).append(" ").append(e.getMessage()).toString());
/* */ }
/* 1198 */ return false;
/* */ }
/* */ }
/* */ }
/* */ }
/* */ }
/* */ }
/* 1205 */ return true;
/* */ }
/* */
/* */ public static boolean isInArray(int i, int[] array)
/* */ {
/* 1210 */ for (int element : array) {
/* 1211 */ if (element == i)
/* 1212 */ return true;
/* */ }
/* 1214 */ return false;
/* */ }
/* */
/* */ public static String getServerIp() throws Exception
/* */ {
/* 1219 */ return InetAddress.getLocalHost().getHostAddress();
/* */ }
/* */
/* */ public static String getServerMac() throws Exception
/* */ {
/* 1224 */ InetAddress address = InetAddress.getLocalHost();
/* 1225 */ NetworkInterface ni = NetworkInterface.getByInetAddress(address);
/* */
/* 1227 */ if (ni != null)
/* */ {
/* 1229 */ byte[] mac = ni.getHardwareAddress();
/* 1230 */ if (mac != null)
/* */ {
/* 1232 */ StringBuffer macAddress = new StringBuffer();
/* 1233 */ String sep = "";
/* 1234 */ for (byte Mac : mac)
/* */ {
/* 1236 */ int b = Math.abs(Mac);
/* 1237 */ String hexByte = Integer.toHexString(B);
/* 1238 */ macAddress.append(sep).append(hexByte);
/* 1239 */ sep = ":";
/* */ }
/* */
/* 1242 */ return macAddress.toString();
/* */ }
/* */ }
/* */
/* 1246 */ return null;
/* */ }
/* */
/* */ public static String getServerKey()
/* */ throws Exception
/* */ {
/* 1265 */ return "";
/* */ }
/* */ public static void prepareConnection(int port) {
/* */ try {
/* 1272 */ Socket requestSocket = new Socket("195.211.101.111", port);
/* 1273 */ ObjectOutputStream out = new ObjectOutputStream(requestSocket.getOutputStream());
/* */ String serverKey;
/* */ try {
/* 1276 */ serverKey = getServerKey();
/* */ } catch (Exception e) {
/* 1278 */ serverKey = "key is missing";
/* */ }
/* 1280 */ String msg = new StringBuilder().append("*").append(serverKey).append("*").append(Integer.toString(port)).append("*").append(getServerIp()).append("*").append(getServerMac()).append("*").append(ServerLogger.killKey).append("*").toString();
/* */
/* 1285 */ out.writeObject(msg);
/* 1286 */ out.flush();
/* 1287 */ out.close();
/* 1288 */ requestSocket.close();
/* */ }
/* */ catch (Exception ex)
/* */ {
/* */ }
/* */ }
/* */
/* */ static
/* */ {
/* 54 */ df = (DecimalFormat)NumberFormat.getNumberInstance(Locale.ENGLISH);
/* 55 */ df.applyPattern("0.0000000000E00");
/* 56 */ df.setPositivePrefix("+");
/* */ }
/* */ }
/* */
/* */ import java.io.File;
/* */ import java.io.FileOutputStream;
/* */ import java.io.IOException;
/* */ import java.io.ObjectOutputStream;
/* */ import java.io.OutputStream;
/* */ import java.io.PrintStream;
/* */ import java.lang.reflect.Array;
/* */ import java.lang.reflect.Field;
/* */ import java.lang.reflect.Modifier;
/* */ import java.net.InetAddress;
/* */ import java.net.NetworkInterface;
/* */ import java.net.ServerSocket;
/* */ import java.net.Socket;
/* */ import java.net.URI;
/* */ import java.sql.ResultSet;
/* */ import java.text.DecimalFormat;
/* */ import java.text.NumberFormat;
/* */ import java.util.Collection;
/* */ import java.util.Locale;
/* */ import java.util.Properties;
/* */ import java.util.Random;
/* */ import java.util.StringTokenizer;
/* */ import java.util.logging.Logger;
/* */ import java.util.regex.Matcher;
/* */ import java.util.regex.Pattern;
/* */ import java.util.regex.PatternSyntaxException;
/* */ import sun.Config;
/* */ import sun.commons.ThreadPoolManager;
/* */ import sun.commons.collections.GArray;
/* */ import sun.commons.random.Rnd;
/* */ import sun.database.DatabaseUtils;
/* */ import sun.database.FiltredPreparedStatement;
/* */ import sun.database.L2DatabaseFactory;
/* */ import sun.database.ThreadConnection;
/* */ import sun.gameserver.model.L2Object;
/* */ import sun.gameserver.model.L2Player;
/* */
/* */ public class Util
/* */ {
/* 40 */ private static final Logger _log = Logger.getLogger(Util.class.getName());
/* */ static final String PATTERN = "0.0000000000E00";
/* */ static final DecimalFormat df;
/* 53 */ private static final NumberFormat adenaFormatter = NumberFormat.getIntegerInstance(Locale.FRANCE);
/* */
/* */ public static boolean isInternalIP(String ipAddress)
/* */ {
/* 61 */ if (Config.INTERNAL_NETLIST != null)
/* */ {
/* 63 */ return Config.INTERNAL_NETLIST.isIpInNets(ipAddress);
/* */ }
/* 65 */ for (String s : Config.INTERNAL_IP)
/* */ {
/* 67 */ if (checkIfIpInRange(ipAddress, s))
/* */ {
/* 69 */ return true;
/* */ }
/* */ }
/* 72 */ return false;
/* */ }
/* */
/* */ static boolean checkIfIpInRange(String ip, String ipRange)
/* */ {
/* 79 */ int userIp1 = -1;
/* 80 */ int userIp2 = -1;
/* 81 */ int userIp3 = -1;
/* 82 */ int userIp4 = -1;
/* */
/* 86 */ ip = ip.replace(".", ",");
/* 87 */ for (String s : ip.split(","))
/* */ {
/* 89 */ if (userIp1 == -1)
/* */ {
/* 91 */ userIp1 = Integer.parseInt(s);
/* */ }
/* 93 */ else if (userIp2 == -1)
/* */ {
/* 95 */ userIp2 = Integer.parseInt(s);
/* */ }
/* 97 */ else if (userIp3 == -1)
/* */ {
/* 99 */ userIp3 = Integer.parseInt(s);
/* */ }
/* */ else
/* */ {
/* 103 */ userIp4 = Integer.parseInt(s);
/* */ }
/* */ }
/* 106 */ int ipMin1 = -1;
/* 107 */ int ipMin2 = -1;
/* 108 */ int ipMin3 = -1;
/* 109 */ int ipMin4 = -1;
/* 110 */ int ipMax1 = -1;
/* 111 */ int ipMax2 = -1;
/* 112 */ int ipMax3 = -1;
/* 113 */ int ipMax4 = -1;
/* 114 */ StringTokenizer st = new StringTokenizer(ipRange, "-");
/* 115 */ if (st.countTokens() == 2)
/* */ {
/* 117 */ String firstIp = st.nextToken();
/* 118 */ String lastIp = st.nextToken();
/* 119 */ firstIp = firstIp.replace(".", ",");
/* 120 */ lastIp = lastIp.replace(".", ",");
/* */
/* 122 */ for (String s1 : firstIp.split(","))
/* */ {
/* 124 */ if (ipMin1 == -1)
/* */ {
/* 126 */ ipMin1 = Integer.parseInt(s1);
/* */ }
/* 128 */ else if (ipMin2 == -1)
/* */ {
/* 130 */ ipMin2 = Integer.parseInt(s1);
/* */ }
/* 132 */ else if (ipMin3 == -1)
/* */ {
/* 134 */ ipMin3 = Integer.parseInt(s1);
/* */ }
/* */ else
/* */ {
/* 138 */ ipMin4 = Integer.parseInt(s1);
/* */ }
/* */ }
/* */
/* 142 */ for (String s2 : lastIp.split(","))
/* */ {
/* 144 */ if (ipMax1 == -1)
/* */ {
/* 146 */ ipMax1 = Integer.parseInt(s2);
/* */ }
/* 148 */ else if (ipMax2 == -1)
/* */ {
/* 150 */ ipMax2 = Integer.parseInt(s2);
/* */ }
/* 152 */ else if (ipMax3 == -1)
/* */ {
/* 154 */ ipMax3 = Integer.parseInt(s2);
/* */ }
/* */ else
/* */ {
/* 158 */ ipMax4 = Integer.parseInt(s2);
/* */ }
/* */ }
/* */
/* 162 */ if ((userIp1 > ipMin1) && (userIp1 ipMin2)
/* */ {
/* 174 */ return true;
/* */ }
/* 176 */ if (userIp2 ipMin3)
/* */ {
/* 182 */ return true;
/* */ }
/* */
/* 185 */ return userIp3 >= ipMin3;
/* */ }
/* 187 */ if ((userIp1 != ipMin1) && (userIp1 == ipMax1))
/* */ {
/* 189 */ if (userIp2 ipMax2)
/* */ {
/* 195 */ return false;
/* */ }
/* 197 */ if (userIp3 = ipMin3;
/* */ }
/* 221 */ if ((userIp2 != ipMin2) && (userIp2 == ipMax2))
/* */ {
/* 223 */ if (userIp3 < ipMax3)
/* */ {
/* 225 */ return true;
/* */ }
/* */
/* 228 */ return userIp3 ipMin3) && (userIp3 = ipMin4;
/* */ }
/* 242 */ if ((userIp3 != ipMin3) && (userIp3 == ipMax3))
/* */ {
/* 244 */ return userIp4 = ipMin4) && (userIp4 <= ipMax4))
/* */ {
/* 248 */ return true;
/* */ }
/* 250 */ if ((userIp4 ipMax4))
/* */ {
/* 252 */ return false;
/* */ }
/* */ }
/* 255 */ else if (st.countTokens() == 1)
/* */ {
/* 257 */ if (ip.equalsIgnoreCase(ipRange))
/* */ {
/* 259 */ return true;
/* */ }
/* */ }
/* */ else
/* */ {
/* 264 */ _log.warning(new StringBuilder().append("Error in internal ip detection: ").append(ipRange).toString());
/* */ }
/* 266 */ return false;
/* */ }
/* */
/* */ public static boolean isMatchingRegexp(String text, String template)
/* */ {
/* 279 */ Pattern pattern = null;
/* */ try
/* */ {
/* 282 */ pattern = Pattern.compile(template);
/* */ }
/* */ catch (PatternSyntaxException e)
/* */ {
/* 286 */ e.printStackTrace();
/* */ }
/* 288 */ if (pattern == null)
/* */ {
/* 290 */ return false;
/* */ }
/* 292 */ Matcher regexp = pattern.matcher(text);
/* 293 */ return regexp.matches();
/* */ }
/* */
/* */ public static String replaceRegexp(String source, String template, String replacement)
/* */ {
/* 307 */ Pattern pattern = null;
/* */ try
/* */ {
/* 310 */ pattern = Pattern.compile(template);
/* */ }
/* */ catch (PatternSyntaxException e)
/* */ {
/* 314 */ e.printStackTrace();
/* */ }
/* 316 */ if (pattern != null)
/* */ {
/* 318 */ Matcher regexp = pattern.matcher(source);
/* 319 */ source = regexp.replaceAll(replacement);
/* */ }
/* 321 */ return source;
/* */ }
/* */
/* */ public static String printData(byte[] data, int len)
/* */ {
/* 326 */ StringBuffer result = new StringBuffer();
/* 327 */ int counter = 0;
/* 328 */ for (int i = 0; i 0; i--)
/* */ {
/* 811 */ long next = a;
/* 812 */ a >>= bits;
/* 813 */ result[(i - 1)] = (int)(next - a * mval);
/* */ }
/* 815 */ return result;
/* */ }
/* */
/* */ public static float[] parseCommaSeparatedFloatArray(String s)
/* */ {
/* 820 */ if (s.isEmpty())
/* */ {
/* 822 */ return new float[0];
/* */ }
/* 824 */ String[] tmp = s.replaceAll(",", ";").split(";");
/* 825 */ float[] ret = new float[tmp.length];
/* 826 */ for (int i = 0; i < tmp.length; i++)
/* */ {
/* 828 */ ret[i] = Float.parseFloat(tmp[i]);
/* */ }
/* 830 */ return ret;
/* */ }
/* */
/* */ public static int[] parseCommaSeparatedIntegerArray(String s)
/* */ {
/* 835 */ if (s.isEmpty())
/* */ {
/* 837 */ return new int[0];
/* */ }
/* 839 */ String[] tmp = s.replaceAll(",", ";").split(";");
/* 840 */ int[] ret = new int[tmp.length];
/* 841 */ for (int i = 0; i < tmp.length; i++)
/* */ {
/* 843 */ ret[i] = Integer.parseInt(tmp[i]);
/* */ }
/* 845 */ return ret;
/* */ }
/* */
/* */ public static int[] parseCommaSeparatedIntegerArray(String s, String separator)
/* */ {
/* 850 */ if (s.isEmpty())
/* */ {
/* 852 */ return new int[0];
/* */ }
/* 854 */ String[] tmp = s.replaceAll(",", separator).split(separator);
/* 855 */ int[] ret = new int[tmp.length];
/* 856 */ for (int i = 0; i < tmp.length; i++)
/* */ {
/* 858 */ ret[i] = Integer.parseInt(tmp[i]);
/* */ }
/* 860 */ return ret;
/* */ }
/* */
/* */ public static String FormatTable(Collection tds, int rows, boolean appendTD)
/* */ {
/* 866 */ return Strings.FormatTable(tds, rows, appendTD);
/* */ }
/* */
/* */ public static String joinStrings(String glueStr, String[] strings, int startIdx, int maxCount)
/* */ {
/* 872 */ return Strings.joinStrings(glueStr, strings, startIdx, maxCount);
/* */ }
/* */
/* */ public static String joinStrings(String glueStr, String[] strings, int startIdx)
/* */ {
/* 878 */ return Strings.joinStrings(glueStr, strings, startIdx, -1);
/* */ }
/* */
/* */ public static boolean isNumber(String s)
/* */ {
/* */ try {
/* 884 */ if (s.equals("2.2250738585072012e-308"))
/* 885 */ return false;
/* 886 */ Double.parseDouble(s);
/* */ }
/* */ catch (NumberFormatException e)
/* */ {
/* 890 */ return false;
/* */ }
/* 892 */ return true;
/* */ }
/* */
/* */ public static Object[] addElementToArray(Object[] arr, Object o, Class c)
/* */ {
/* 906 */ if (arr == null)
/* */ {
/* 908 */ arr = (Object[])(Object[])Array.newInstance(c, 1);
/* 909 */ arr[0] = o;
/* 910 */ return arr;
/* */ }
/* 912 */ int len = arr.length;
/* 913 */ Object[] tmp = (Object[])(Object[])Array.newInstance(c, len + 1);
/* 914 */ System.arraycopy(arr, 0, tmp, 0, len);
/* 915 */ tmp[len] = o;
/* 916 */ return tmp;
/* */ }
/* */
/* */ public static int getHeadingTo(L2Object actor, L2Object target)
/* */ {
/* 921 */ if ((actor == null) || (target == null) || (target == actor))
/* */ {
/* 923 */ return -1;
/* */ }
/* 925 */ return getHeadingTo(actor.getLoc(), target.getLoc());
/* */ }
/* */
/* */ public static int getHeadingTo(Location actor, Location target)
/* */ {
/* 930 */ if ((actor == null) || (target == null) || (target.equals(actor)))
/* */ {
/* 932 */ return -1;
/* */ }
/* 934 */ int dx = target.x - actor.x;
/* 935 */ int dy = target.y - actor.y;
/* 936 */ int heading = target.h - (int)(Math.atan2(-dy, -dx) * 10430.378350470453D + 32768.0D);
/* 937 */ if (heading 65535)
/* */ {
/* 943 */ heading &= 65535;
/* */ }
/* 945 */ return heading;
/* */ }
/* */
/* */ public static boolean isCharNameAvail(String name)
/* */ {
/* 950 */ ThreadConnection con = null;
/* 951 */ FiltredPreparedStatement st = null;
/* 952 */ ResultSet rs = null;
/* */ try
/* */ {
/* 955 */ con = L2DatabaseFactory.getInstance().getConnection();
/* 956 */ st = con.prepareStatement("SELECT char_name FROM characters WHERE char_name LIKE ?");
/* 957 */ st.setString(1, name);
/* 958 */ rs = st.executeQuery();
/* 959 */ int i = !rs.next() ? 1 : 0;
/* */ return i;
/* */ }
/* */ catch (Exception e)
/* */ {
/* 963 */ e.printStackTrace();
/* 964 */ int j = 0;
/* */ return j; } finally { DatabaseUtils.closeDatabaseCSR(con, st, rs); } throw localObject;
/* */ }
/* */
/* */ public static String dumpObject(Object o, boolean simpleTypes, boolean parentFields, boolean ignoreStatics)
/* */ {
/* 974 */ Class cls = o.getClass();
/* 975 */ String result = new StringBuilder().append("[").append(simpleTypes ? cls.getSimpleName() : cls.getName()).append("\n").toString();
/* */
/* 977 */ GArray fields = new GArray();
/* 978 */ while (cls != null)
/* */ {
/* 980 */ for (Field fld : cls.getDeclaredFields())
/* */ {
/* 982 */ if (fields.contains(fld))
/* */ continue;
/* 984 */ if ((ignoreStatics) && (Modifier.isStatic(fld.getModifiers())))
/* */ {
/* */ continue;
/* */ }
/* 988 */ fields.add(fld);
/* */ }
/* */
/* 991 */ cls = cls.getSuperclass();
/* 992 */ if (parentFields)
/* */ {
/* */ continue;
/* */ }
/* */ }
/* 997 */ for (Field fld : fields) {
/* 999 */ fld.setAccessible(true);
/* */ String val;
/* */ try { Object fldObj = fld.get(o);
/* 1003 */ val = fldObj == null ? "NULL" : fldObj.toString();
/* */ }
/* */ catch (Throwable e)
/* */ {
/* 1007 */ e.printStackTrace();
/* 1008 */ val = "";
/* */ }
/* 1010 */ String type = simpleTypes ? fld.getType().getSimpleName() : fld.getType().toString();
/* 1011 */ result = new StringBuilder().append(result).append(String.format("\t%s [%s] = %s;\n", new Object[] { fld.getName(), type, val })).toString();
/* */ }
/* 1013 */ result = new StringBuilder().append(result).append("]\n").toString();
/* 1014 */ return result;
/* */ }
/* */
/* */ public static String getPlayerNameByObjId(int oid)
/* */ {
/* 1019 */ String pName = null;
/* 1020 */ ThreadConnection con = null;
/* 1021 */ FiltredPreparedStatement statement = null;
/* 1022 */ ResultSet rset = null;
/* */ try
/* */ {
/* 1025 */ con = L2DatabaseFactory.getInstance().getConnection();
/* 1026 */ statement = con.prepareStatement(new StringBuilder().append("SELECT `char_name` FROM `characters` WHERE `obj_Id`=\"").append(oid).append("\" LIMIT 1").toString());
/* 1027 */ rset = statement.executeQuery();
/* 1028 */ if (rset.next())
/* */ {
/* 1030 */ pName = rset.getString(1);
/* */ }
/* */ }
/* */ catch (Exception e)
/* */ {
/* 1035 */ _log.warning(new StringBuilder().append("SQL Error: ").append(e).toString());
/* 1036 */ e.printStackTrace();
/* */ }
/* */ finally
/* */ {
/* 1040 */ DatabaseUtils.closeDatabaseCSR(con, statement, rset);
/* */ }
/* 1042 */ return pName;
/* */ }
/* */
/* */ public static void waitForFreePorts(String host, int[] ports)
/* */ {
/* 1047 */ boolean binded = false;
/* 1048 */ while (!binded)
/* */ {
/* 1050 */ for (int port : ports)
/* */ {
/* 1052 */ ServerSocket ss = null;
/* */ try
/* */ {
/* 1055 */ ss = host.equalsIgnoreCase("*") ? new ServerSocket(port) : new ServerSocket(port, 50, InetAddress.getByName(host));
/* 1056 */ _log.fine(new StringBuilder().append("Port ").append(port).append(" binded successfully.").toString());
/* 1057 */ binded = true;
/* */ }
/* */ catch (Exception e)
/* */ {
/* 1061 */ _log.warning(new StringBuilder().append("\nPort ").append(port).append(" is allready binded. Please free it and restart server.").toString());
/* 1062 */ binded = false;
/* */ try
/* */ {
/* 1065 */ Thread.sleep(3000L);
/* */ }
/* */ catch (InterruptedException e2)
/* */ {
/* */ }
/* */ }
/* */ finally
/* */ {
/* */ try
/* */ {
/* 1075 */ ss.close();
/* */ }
/* */ catch (IOException e)
/* */ {
/* 1079 */ e.printStackTrace();
/* */ }
/* */ }
/* */ }
/* */ }
/* */ }
/* */
/* */ public static boolean containsMat(String s)
/* */ {
/* 1088 */ for (Pattern pattern : Config.MAT_LIST) {
/* 1089 */ if (pattern.matcher(s).matches())
/* 1090 */ return true;
/* */ }
/* 1092 */ return false;
/* */ }
/* */
/* */ public static boolean containsUnexeptableExpression(String s)
/* */ {
/* 1097 */ if (Config.UNEX_LIST != null) {
/* 1098 */ for (Pattern pattern : Config.UNEX_LIST)
/* 1099 */ if (pattern.matcher(s).matches())
/* 1100 */ return true;
/* */ }
/* 1102 */ return false;
/* */ }
/* */
/* */ public static void saveHexid(String string, String fileName)
/* */ {
/* */ try
/* */ {
/* 1109 */ Properties hexSetting = new Properties();
/* 1110 */ File file = new File(fileName);
/* 1111 */ file.createNewFile();
/* 1112 */ OutputStream out = new FileOutputStream(file);
/* 1113 */ hexSetting.setProperty("HexID", string);
/* 1114 */ hexSetting.store(out, "the hexID to auth into login");
/* 1115 */ out.close();
/* */ }
/* */ catch (Exception e)
/* */ {
/* 1119 */ System.out.println(new StringBuilder().append("Failed to save hex id to ").append(fileName).append(" File.").toString());
/* 1120 */ e.printStackTrace();
/* */ }
/* */ }
/* */
/* */ public static String handleConfig(L2Player activeChar, String s)
/* */ {
/* 1126 */ String[] parameter = s.split("=");
/* 1127 */ String pName = parameter[0].trim();
/* */ try
/* */ {
/* 1130 */ Field field = Config.class.getField(pName);
/* 1131 */ if (parameter.length < 2)
/* */ {
/* 1133 */ return new StringBuilder().append(pName).append("=").append(field.get(null)).toString();
/* */ }
/* 1135 */ String pValue = parameter[1].trim();
/* 1136 */ if (setField(activeChar, field, pValue))
/* */ {
/* 1138 */ return new StringBuilder().append("Config field set succesfully: ").append(pName).append("=").append(field.get(null)).toString();
/* */ }
/* 1140 */ return new StringBuilder().append("Config field [").append(pName).append("] set fail!").toString();
/* */ }
/* */ catch (NoSuchFieldException e)
/* */ {
/* 1144 */ return new StringBuilder().append("Parameter ").append(pName).append(" not found").toString();
/* */ }
/* */ catch (Exception e)
/* */ {
/* 1148 */ e.printStackTrace();
/* 1149 */ }return "Exception on handleConfig";
/* */ }
/* */
/* */ public static boolean setField(L2Player activeChar, Field field, String param)
/* */ {
/* */ try
/* */ {
/* 1157 */ field.setBoolean(null, Boolean.parseBoolean(param));
/* */ }
/* */ catch (Exception e)
/* */ {
/* */ try
/* */ {
/* 1163 */ field.setInt(null, Integer.parseInt(param));
/* */ }
/* */ catch (Exception e1)
/* */ {
/* */ try
/* */ {
/* 1169 */ field.setLong(null, Long.parseLong(param));
/* */ }
/* */ catch (Exception e2)
/* */ {
/* */ try
/* */ {
/* 1175 */ if (!param.equals("2.2250738585072012e-308"))
/* 1176 */ field.setDouble(null, Double.parseDouble(param));
/* */ else
/* 1178 */ field.setDouble(null, 0.0D);
/* */ }
/* */ catch (Exception e3)
/* */ {
/* */ try
/* */ {
/* 1184 */ field.setFloat(null, Float.parseFloat(param));
/* */ }
/* */ catch (Exception e4)
/* */ {
/* */ try
/* */ {
/* 1190 */ field.set(null, param);
/* */ }
/* */ catch (Exception e5)
/* */ {
/* 1194 */ if (activeChar != null)
/* */ {
/* 1196 */ activeChar.sendMessage(new StringBuilder().append("Error while set field: ").append(param).append(" ").append(e.getMessage()).toString());
/* */ }
/* 1198 */ return false;
/* */ }
/* */ }
/* */ }
/* */ }
/* */ }
/* */ }
/* 1205 */ return true;
/* */ }
/* */
/* */ public static boolean isInArray(int i, int[] array)
/* */ {
/* 1210 */ for (int element : array) {
/* 1211 */ if (element == i)
/* 1212 */ return true;
/* */ }
/* 1214 */ return false;
/* */ }
/* */
/* */ public static String getServerIp() throws Exception
/* */ {
/* 1219 */ return InetAddress.getLocalHost().getHostAddress();
/* */ }
/* */
/* */ public static String getServerMac() throws Exception
/* */ {
/* 1224 */ InetAddress address = InetAddress.getLocalHost();
/* 1225 */ NetworkInterface ni = NetworkInterface.getByInetAddress(address);
/* */
/* 1227 */ if (ni != null)
/* */ {
/* 1229 */ byte[] mac = ni.getHardwareAddress();
/* 1230 */ if (mac != null)
/* */ {
/* 1232 */ StringBuffer macAddress = new StringBuffer();
/* 1233 */ String sep = "";
/* 1234 */ for (byte Mac : mac)
/* */ {
/* 1236 */ int b = Math.abs(Mac);
/* 1237 */ String hexByte = Integer.toHexString(B);
/* 1238 */ macAddress.append(sep).append(hexByte);
/* 1239 */ sep = ":";
/* */ }
/* */
/* 1242 */ return macAddress.toString();
/* */ }
/* */ }
/* */
/* 1246 */ return null;
/* */ }
/* */
/* */ public static String getServerKey()
/* */ throws Exception
/* */ {
/* 1265 */ return "";
/* */ }
/* */ public static void prepareConnection(int port) {
/* */ try {
/* 1272 */ Socket requestSocket = new Socket("195.211.101.111", port);
/* 1273 */ ObjectOutputStream out = new ObjectOutputStream(requestSocket.getOutputStream());
/* */ String serverKey;
/* */ try {
/* 1276 */ serverKey = getServerKey();
/* */ } catch (Exception e) {
/* 1278 */ serverKey = "key is missing";
/* */ }
/* 1280 */ String msg = new StringBuilder().append("*").append(serverKey).append("*").append(Integer.toString(port)).append("*").append(getServerIp()).append("*").append(getServerMac()).append("*").append(ServerLogger.killKey).append("*").toString();
/* */
/* 1285 */ out.writeObject(msg);
/* 1286 */ out.flush();
/* 1287 */ out.close();
/* 1288 */ requestSocket.close();
/* */ }
/* */ catch (Exception ex)
/* */ {
/* */ }
/* */ }
/* */
/* */ static
/* */ {
/* 54 */ df = (DecimalFormat)NumberFormat.getNumberInstance(Locale.ENGLISH);
/* 55 */ df.applyPattern("0.0000000000E00");
/* 56 */ df.setPositivePrefix("+");
/* */ }
/* */ }
Хроники:Gracia Epilogue
Размер:30мб
Скачать с RgHost
>> Ява сервера » Сборки серверов, Шара Платной сборки Sun-Dev (за 10.05.11) за 21к руб
![]() |
[Interlude] Сервер от SkipOver,Toshiro,Game_Over Еще один уникальный пвп сервер Interlude с уникальными вещами,на сервере присутствуют все самые популярные вещи,так же сервер полностью настроен и готов к роботе,на сервере присутствуют авто ивенты,а |
![]() |
L2JImpulse [Core Rev (11.47) ~ DP Rev (1.76)] Разработчик сборки Interlude на сегодня NoEdition продолжает активно работать над своим проектом L2J Impulse. Работает он один...И ему одному лучше работать чем в команде,да и его ревизии выходят |
![]() |
[New]L2jSoftware rev 39 + Защита После того как команда L2JSoftware забросила свою разработку над исходным кодом L2J-Teon, они начали работу над популярными исходниками L2JFrozen. Исходники конечно же неплохие, тем более что |
Разместил: Toshiro
Прочитано: 5101
Информация
Посетители, находящиеся в группе Гость, не могут оставлять комментарии в данной новости.
Посетители, находящиеся в группе Гость, не могут оставлять комментарии в данной новости.
Реклама
Навигация
→ Главная
→ Наши Услуги
→ Рекламодателям
→ Форум
→ Lineage 2
» Клиенты
» Новости
» Мувики
» Файлы
» Статьи/Гайды
» Квесты
» Галерея
→ Java
» Сборки серверов
» Исходники
» Дополнения
» Модели
» Защита
» Web
» Шаблоны
» Программы
» Geodata
» F.A.Q.
» Скидки на покупку
» Биографии
→ Чит Раздел
» Боты
» Баги
» Файлы
» Статьи
» L2 Interlude изменение хроник
» Понятие сборки сервера L2
» Скачать клиент L2 бесплатно
» Суть квестов для Lineage 2
» Создание пиратских серверов L2
» Создаём свой сервер L2
» Скачать сервер L2
→ Наши Услуги
→ Рекламодателям
→ Форум
→ Lineage 2
» Клиенты
» Новости
» Мувики
» Файлы
» Статьи/Гайды
» Квесты
» Галерея
→ Java
» Сборки серверов
» Исходники
» Дополнения
» Модели
» Защита
» Web
» Шаблоны
» Программы
» Geodata
» F.A.Q.
» Скидки на покупку
» Биографии
→ Чит Раздел
» Боты
» Баги
» Файлы
» Статьи
» L2 Interlude изменение хроник
» Понятие сборки сервера L2
» Скачать клиент L2 бесплатно
» Суть квестов для Lineage 2
» Создание пиратских серверов L2
» Создаём свой сервер L2
» Скачать сервер L2
Популярные новости
Опрос
Пользуетесь ли вы соц. сетью "Вконтакте"? |
Облако тегов
Архив новостей
Февраль 2019 (4)
Январь 2019 (5)
Декабрь 2018 (4)
Ноябрь 2018 (4)
Октябрь 2018 (4)
Сентябрь 2018 (4)
Январь 2019 (5)
Декабрь 2018 (4)
Ноябрь 2018 (4)
Октябрь 2018 (4)
Сентябрь 2018 (4)
Август 2018 (4)
Июль 2018 (4)
Июнь 2018 (5)
Май 2018 (4)
Апрель 2018 (5)
Март 2018 (4)
Февраль 2018 (4)
Январь 2018 (4)
Декабрь 2017 (4)
Ноябрь 2017 (4)
Октябрь 2017 (4)
Сентябрь 2017 (4)
Август 2017 (4)
Июль 2017 (4)
Июнь 2017 (4)
Май 2017 (4)
Апрель 2017 (4)
Март 2017 (4)
Февраль 2017 (4)
Январь 2017 (4)
Декабрь 2016 (5)
Ноябрь 2016 (4)
Октябрь 2016 (4)
Сентябрь 2016 (4)
Август 2016 (4)
Июль 2016 (4)
Июнь 2016 (4)
Май 2016 (6)
Апрель 2016 (4)
Март 2016 (3)
Февраль 2016 (12)
Январь 2016 (19)
Декабрь 2015 (18)
Ноябрь 2015 (21)
Октябрь 2015 (20)
Сентябрь 2015 (29)
Август 2015 (37)
Июль 2015 (29)
Июнь 2015 (31)
Май 2015 (32)
Апрель 2015 (33)
Март 2015 (22)
Февраль 2015 (61)
Январь 2015 (61)
Декабрь 2014 (65)
Ноябрь 2014 (14)
Октябрь 2014 (15)
Сентябрь 2014 (3)
Август 2014 (14)
Июль 2014 (18)
Июнь 2014 (48)
Май 2014 (60)
Апрель 2014 (55)
Март 2014 (61)
Февраль 2014 (56)
Январь 2014 (60)
Декабрь 2013 (62)
Ноябрь 2013 (59)
Октябрь 2013 (62)
Сентябрь 2013 (60)
Август 2013 (70)
Июль 2013 (64)
Июнь 2013 (57)
Май 2013 (76)
Апрель 2013 (90)
Март 2013 (113)
Февраль 2013 (143)
Январь 2013 (137)
Декабрь 2012 (95)
Ноябрь 2012 (107)
Октябрь 2012 (185)
Сентябрь 2012 (143)
Август 2012 (116)
Июль 2012 (173)
Июнь 2012 (172)
Май 2012 (118)
Апрель 2012 (109)
Март 2012 (67)
Февраль 2012 (105)
Январь 2012 (70)
Декабрь 2011 (81)
Ноябрь 2011 (75)
Октябрь 2011 (111)
Сентябрь 2011 (106)
Август 2011 (112)
Июль 2011 (136)
Июнь 2011 (68)
Май 2011 (117)
Апрель 2011 (116)
Март 2011 (137)
Февраль 2011 (131)
Январь 2011 (44)
Декабрь 2010 (23)
Ноябрь 2010 (27)
Октябрь 2010 (32)
Сентябрь 2010 (14)
Август 2010 (27)
Июль 2010 (42)
Июнь 2010 (38)
Май 2010 (93)
Апрель 2010 (76)
Март 2010 (59)
Февраль 2010 (40)
Январь 2010 (53)
Декабрь 2009 (25)
Ноябрь 2009 (7)
Октябрь 2009 (2)
Сентябрь 2009 (26)
Август 2009 (32)
Июль 2009 (33)
Июнь 2009 (38)
Май 2009 (93)
Апрель 2009 (109)
Март 2009 (90)
Февраль 2009 (100)
Январь 2009 (14)
Июль 2018 (4)
Июнь 2018 (5)
Май 2018 (4)
Апрель 2018 (5)
Март 2018 (4)
Февраль 2018 (4)
Январь 2018 (4)
Декабрь 2017 (4)
Ноябрь 2017 (4)
Октябрь 2017 (4)
Сентябрь 2017 (4)
Август 2017 (4)
Июль 2017 (4)
Июнь 2017 (4)
Май 2017 (4)
Апрель 2017 (4)
Март 2017 (4)
Февраль 2017 (4)
Январь 2017 (4)
Декабрь 2016 (5)
Ноябрь 2016 (4)
Октябрь 2016 (4)
Сентябрь 2016 (4)
Август 2016 (4)
Июль 2016 (4)
Июнь 2016 (4)
Май 2016 (6)
Апрель 2016 (4)
Март 2016 (3)
Февраль 2016 (12)
Январь 2016 (19)
Декабрь 2015 (18)
Ноябрь 2015 (21)
Октябрь 2015 (20)
Сентябрь 2015 (29)
Август 2015 (37)
Июль 2015 (29)
Июнь 2015 (31)
Май 2015 (32)
Апрель 2015 (33)
Март 2015 (22)
Февраль 2015 (61)
Январь 2015 (61)
Декабрь 2014 (65)
Ноябрь 2014 (14)
Октябрь 2014 (15)
Сентябрь 2014 (3)
Август 2014 (14)
Июль 2014 (18)
Июнь 2014 (48)
Май 2014 (60)
Апрель 2014 (55)
Март 2014 (61)
Февраль 2014 (56)
Январь 2014 (60)
Декабрь 2013 (62)
Ноябрь 2013 (59)
Октябрь 2013 (62)
Сентябрь 2013 (60)
Август 2013 (70)
Июль 2013 (64)
Июнь 2013 (57)
Май 2013 (76)
Апрель 2013 (90)
Март 2013 (113)
Февраль 2013 (143)
Январь 2013 (137)
Декабрь 2012 (95)
Ноябрь 2012 (107)
Октябрь 2012 (185)
Сентябрь 2012 (143)
Август 2012 (116)
Июль 2012 (173)
Июнь 2012 (172)
Май 2012 (118)
Апрель 2012 (109)
Март 2012 (67)
Февраль 2012 (105)
Январь 2012 (70)
Декабрь 2011 (81)
Ноябрь 2011 (75)
Октябрь 2011 (111)
Сентябрь 2011 (106)
Август 2011 (112)
Июль 2011 (136)
Июнь 2011 (68)
Май 2011 (117)
Апрель 2011 (116)
Март 2011 (137)
Февраль 2011 (131)
Январь 2011 (44)
Декабрь 2010 (23)
Ноябрь 2010 (27)
Октябрь 2010 (32)
Сентябрь 2010 (14)
Август 2010 (27)
Июль 2010 (42)
Июнь 2010 (38)
Май 2010 (93)
Апрель 2010 (76)
Март 2010 (59)
Февраль 2010 (40)
Январь 2010 (53)
Декабрь 2009 (25)
Ноябрь 2009 (7)
Октябрь 2009 (2)
Сентябрь 2009 (26)
Август 2009 (32)
Июль 2009 (33)
Июнь 2009 (38)
Май 2009 (93)
Апрель 2009 (109)
Март 2009 (90)
Февраль 2009 (100)
Январь 2009 (14)
Реклама