Сервис аккаунт менеджер Код: package services; import tenjs.config.ConfigValue; import tenjs.database.*; import tenjs.extensions.scripts.Functions; import tenjs.extensions.scripts.ScriptFile; import tenjs.gameserver.model.L2Player; import tenjs.gameserver.xml.ItemTemplates; import tenjs.util.Log; import java.sql.ResultSet; public class Account extends Functions implements ScriptFile { public void CharToAcc() { L2Player player = (L2Player) getSelf(); if(player == null) return; String append = "Перенос персонажей между аккаунтами.<br>"; append += "Цена: " + ConfigValue.CharToAccPrice + " " + ItemTemplates.getInstance().getTemplate(ConfigValue.CharToAccItem).getName() + ".<br>"; append += "Внимание !!! При переносе персонажа на другой аккаунт, убедитесь что персонажей там меньше чем 7, иначе могут возникнуть непредвиденные ситуации за которые Администрация не отвечает.<br>"; append += "Внимательно вводите логин куда переносите, администрация не возвращает персонажей."; append += "Вы переносите персонажа " + player.getName() + ", на какой аккаунт его перенести ?"; append += "<edit var=\"new_acc\" width=150>"; append += "<button value=\"Перенести\" action=\"bypass -h scripts_services.Account:NewAccount $new_acc\" width=150 height=15><br>"; show(append, player, null); } public void NewAccount(String[] name) { L2Player player = (L2Player) getSelf(); if(player == null) return; if(player.getInventory().getCountOf(ConfigValue.CharToAccItem) < ConfigValue.CharToAccPrice) { player.sendMessage("У вас нету " + ConfigValue.CharToAccPrice + " " + ItemTemplates.getInstance().getTemplate(ConfigValue.CharToAccItem)); CharToAcc(); return; } String _name = name[0]; ThreadConnection con = null; ThreadConnection conGS = null; FiltredPreparedStatement offline = null; FiltredStatement statement = null; ResultSet rs = null; try { con = L2DatabaseFactory.getInstanceLogin().getConnection(); offline = con.prepareStatement("SELECT `login` FROM `accounts` WHERE `login` = ?"); offline.setString(1, _name); rs = offline.executeQuery(); if(rs.next()) { removeItem(player, ConfigValue.CharToAccItem, ConfigValue.CharToAccPrice); conGS = L2DatabaseFactory.getInstance().getConnection(); statement = conGS.createStatement(); statement.executeUpdate("UPDATE `characters` SET `account_name` = '" + _name + "' WHERE `char_name` = '" + player.getName() + "'"); player.sendMessage("Персонаж успешно перенесен."); Log.add("Персонаж " + player.getName() + " перенесён на акаунт " + _name + " с акаунта " + player.getAccountName(), "services"); player.logout(false, false, false, true); } else { player.sendMessage("Введенный аккаунт не найден."); CharToAcc(); } } catch(Exception e) { e.printStackTrace(); return; } finally { DatabaseUtils.closeDatabaseCSR(con, offline, rs); DatabaseUtils.closeDatabaseCS(conGS, statement); } } public void onLoad() {} public void onReload() {} public void onShutdown() {} }
И что тут уникального? Другие импорты и вывод сообщения в лог ГСа? P.S. шара first-team за 2013-2014 год: Код: package services; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Statement; import l2ft.commons.dbutils.DbUtils; import l2ft.gameserver.Config; import l2ft.gameserver.data.xml.holder.ItemHolder; import l2ft.gameserver.database.DatabaseFactory; import l2ft.gameserver.model.Player; import l2ft.gameserver.scripts.Functions; import l2ft.gameserver.scripts.ScriptFile; public class Account extends Functions implements ScriptFile { public void Show() { Player player = (Player) getSelf(); if(player == null) return; if (!Config.SERVICES_ACC_MOVE_ENABLED) { show(player.isLangRus() ? "Сервис отключен.":"Service is disabled.", player); return; } String append = player.isLangRus() ? "Перенос персонажей между аккаунтами.<br>":"Transfer characters between accounts.<br>"; append += player.isLangRus() ? "Цена: " + Config.SERVICES_ACC_MOVE_PRICE + " " + ItemHolder.getInstance().getTemplate(Config.SERVICES_ACC_MOVE_ITEM).getName() + ".<br>":"Price: " + Config.SERVICES_ACC_MOVE_PRICE + " " + ItemHolder.getInstance().getTemplate(Config.SERVICES_ACC_MOVE_ITEM).getName() + ".<br>"; append += player.isLangRus() ? "Внимание !!! При переносе персонажа на другой аккаунт, убедитесь что персонажей там меньше чем 7, иначе могут возникнуть непредвиденные ситуации за которые Администрация не отвечает.<br>":"Attention! When you transfer a character to another account, make sure that the characters there is less than 7, or there might be unforeseen situations for which the Administration is not responsible.<br>"; append += player.isLangRus() ? "Внимательно вводите логин куда переносите, администрация не возвращает персонажей.":"Carefully enter the username to transfer, the administration does not return characters."; append += player.isLangRus() ? "Внимание !!! После успешного переноса персонажа на другой аккаунт клиент закроется!!!!.":"Attention! After a successful migration character to another customer's account will be closed!!."; append += player.isLangRus() ? "Вы переносите персонажа " + player.getName() + ", на какой аккаунт его перенести ?":"You transfer your character " + player.getName() + ", on which account to transfer it?"; append += "<edit var=\"new_acc\" width=150>"; append += player.isLangRus() ? "<button value=\"Перенести\" action=\"bypass -h scripts_services.Account:NewAccount $new_acc\" width=150 height=15><br>":"<button value=\"Transfer\" action=\"bypass -h scripts_services.Account:NewAccount $new_acc\" width=150 height=15><br>"; show(append, player, null); } public void NewAccount(String[] name) { Player player = (Player) getSelf(); if(player == null) return; if (!Config.SERVICES_ACC_MOVE_ENABLED) { show(player.isLangRus() ? "Сервис отключен.":"Service is disabled.", player); return; } if(player.getInventory().getCountOf(Config.SERVICES_ACC_MOVE_ITEM) < Config.SERVICES_ACC_MOVE_PRICE) { player.sendMessage(player.isLangRus() ? "У вас нету " + Config.SERVICES_ACC_MOVE_PRICE + " " + ItemHolder.getInstance().getTemplate(Config.SERVICES_ACC_MOVE_ITEM):"You have no " + Config.SERVICES_ACC_MOVE_PRICE + " " + ItemHolder.getInstance().getTemplate(Config.SERVICES_ACC_MOVE_ITEM)); Show(); return; } String _name = name[0]; Connection con = null; Connection conGS = null; PreparedStatement offline = null; Statement statement = null; ResultSet rs = null; try { con = DatabaseFactory.getInstance().getConnection(); offline = con.prepareStatement("SELECT `login` FROM `accounts` WHERE `login` = ?"); offline.setString(1, _name); rs = offline.executeQuery(); if(rs.next()) { removeItem(player, Config.SERVICES_ACC_MOVE_ITEM, Config.SERVICES_ACC_MOVE_PRICE); conGS = DatabaseFactory.getInstance().getConnection(); statement = conGS.createStatement(); statement.executeUpdate("UPDATE `characters` SET `account_name` = '" + _name + "' WHERE `char_name` = '" + player.getName() + "'"); player.sendMessage(player.isLangRus() ? "Персонаж успешно перенесен.":"Character is successfully transferred."); player.logout(); } else { player.sendMessage(player.isLangRus() ? "Введенный аккаунт не найден.":"The entered account is not found."); Show(); } } catch(Exception e) { e.printStackTrace(); return; } finally { DbUtils.closeQuietly(con, offline, rs); DbUtils.closeQuietly(conGS, statement); } } public void onLoad() {} public void onReload() {} public void onShutdown() {} } P.S.S. русские символы нормально в логах пишет? Код: Log.add("Персонаж " + player.getName() + " перенесён на акаунт " + _name + " с акаунта " + player.getAccountName(), "services");
Open team - тот же фт, я большой разницы в них не увидел, почище разве что сурс немного ,а так косяки все те же в пакетке например