![]() |
![]() |
|
Тех-документация Статьи по редактированию, компиляции и настройки ява серверов Lineage 2
Описание темы: ![]() |
![]() |
Опции темы |
![]() |
#11 |
Супергерой
Регистрация: 09.11.2010
Адрес: Россия, г. Краснодар
Возраст: 31
Сообщений: 3,965
Отблагодарили 2,760 раз(а)
Рейтинг мнений:
248
|
![]()
Делал для шайтановской сборки, а подходит для любой феневской сборки. Мелочи жизни, но приятные
![]() Что и с чем едят смотрим на скрине. ![]() ./data/html/admin/itemcreation.htm:Свернуть ↑
Свернуть ↑Развернуть ↓
Код HTML:
<html><title>Items</title><body> <table width=260> <tr> <td width=40><button value="Main" action="bypass -h admin_admin" width=40 height=20 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td> <td width=180><center>Item Creation Menu</center></td> <td width=40><button value="Back" action="bypass -h admin_admin" width=40 height=20 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td> </tr> </table><br><br> <table width=270> <tr><td>Введите ID предмета и кол-во для создания.</td></tr> <tr><td></td></tr> <tr><td><font color=LEVEL>(*)</font>Опционально в поле "Кому", можете указать ник персонажа, которому будет выдан предмет.</td></tr> </table> <center> <table> <tr> <td width=60>ID-Item:</td> <td width=60>Кол-во:</td> <td width=60>Кому(*):</td> </tr> <tr> <td width=60><edit var="itemid" width=60></td> <td width=60><edit var="itemnum" width=60></td> <td width=60><edit var="player" width=60></td> </tr> </table> <table><tr> <td><button value="Создать предмет(*)" action="bypass -h admin_create_item $itemid $itemnum $player" width=195 height=25 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td> </tr> <tr> <td><button value="Создать предмет всем игрокам" action="bypass -h admin_create_item_all $itemid $itemnum" width=195 height=25 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td> </tr></table> </center><br> <center> <table> <tr><td><center>Assets: <edit var="asset" width=70 height=11></center></td></tr> </table><br> <table> <tr> <td><button value="GM Shop" action="bypass -h admin_gmshop" width=95 height=23 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td> </tr> </table> <table> <tr> <td><button value="Adena" action="bypass -h admin_create_item 57 $asset" width=95 height=23 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td> <td><button value="Ancient Adena" action="bypass -h admin_create_item 5575 $asset" width=95 height=23 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td> </tr> </table> <table> <tr> <td><button value="Blue Seal Stones" action="bypass -h admin_create_item 6360 $asset" width=95 height=23 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td> <td><button value="Green Seal Stones" action="bypass -h admin_create_item 6361 $asset" width=95 height=23 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td> <td><button value="Red Seal Stones" action="bypass -h admin_create_item 6362 $asset" width=95 height=23 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td> </tr> </table> </center> </body></html> data\scripts\commands\admin\AdminCreateItem.java:Свернуть ↑
Свернуть ↑Развернуть ↓
Код:
package commands.admin; import l2p.extensions.scripts.ScriptFile; import l2p.gameserver.handler.AdminCommandHandler; import l2p.gameserver.handler.IAdminCommandHandler; import l2p.gameserver.model.L2Player; import l2p.gameserver.model.items.L2ItemInstance; import l2p.gameserver.serverpackets.ItemList; import l2p.gameserver.serverpackets.NpcHtmlMessage; import l2p.gameserver.serverpackets.SystemMessage; import l2p.gameserver.tables.ItemTable; import l2p.util.Log; import l2p.util.Rnd; import l2p.util.Util; import l2p.gameserver.model.L2ObjectsStorage; public class AdminCreateItem implements IAdminCommandHandler, ScriptFile { private static enum Commands { admin_itemcreate, admin_create_item, admin_create_item_all, admin_spreaditem } public boolean useAdminCommand(Enum comm, String[] wordList, String fullString, L2Player activeChar) { Commands command = (Commands) comm; if(!activeChar.getPlayerAccess().UseGMShop) { return false; } switch(command) { case admin_itemcreate: activeChar.sendPacket(new NpcHtmlMessage(5).setFile("data/html/admin/itemcreation.htm")); break; case admin_create_item: try { if(wordList.length < 2) { activeChar.sendMessage("USAGE: create_item [id] [count]"); return false; } L2Player player; int item_id = Integer.parseInt(wordList[1]); long item_count = wordList.length < 3 ? 1 : Long.parseLong(wordList[2]); if (wordList.length == 4) { String name = Util.joinStrings(" ", wordList, 3); player = L2ObjectsStorage.getPlayer(name); if (player==null) { activeChar.sendMessage("Персонаж, " + name + ", не был найден в игре."); return false; } } else player=activeChar; createItem(player,activeChar, item_id, item_count); } catch(NumberFormatException nfe) { activeChar.sendMessage("USAGE: create_item id [count]"); } activeChar.sendPacket(new NpcHtmlMessage(5).setFile("data/html/admin/itemcreation.htm")); break; case admin_create_item_all: try { if(wordList.length < 2) { activeChar.sendMessage("USAGE: create_item [id] [count]"); return false; } int item_id = Integer.parseInt(wordList[1]); long item_count = wordList.length < 3 ? 1 : Long.parseLong(wordList[2]); int count = 0; for(L2Player player : L2ObjectsStorage.getAllPlayers()) { if (player!=null) if (player.isOnline()) createItem(player, player, item_id, item_count); count++; } activeChar.sendMessage("Предметы выданы: " + count + " игрокам."); } catch(NumberFormatException nfe) { activeChar.sendMessage("USAGE: create_item [id] [count]"); } activeChar.sendPacket(new NpcHtmlMessage(5).setFile("data/html/admin/itemcreation.htm")); break; case admin_spreaditem: try { int id = Integer.parseInt(wordList[1]); int num = wordList.length > 2 ? Integer.parseInt(wordList[2]) : 1; long count = wordList.length > 3 ? Long.parseLong(wordList[3]) : 1; for(int i = 0; i < num; i++) { L2ItemInstance createditem = ItemTable.getInstance().createItem(id); createditem.setCount(count); createditem.dropToTheGround(activeChar, Rnd.coordsRandomize(activeChar, 100)); } } catch(NumberFormatException nfe) { activeChar.sendMessage("Specify a valid number."); } catch(StringIndexOutOfBoundsException e) { activeChar.sendMessage("Can't create this item."); } break; } return true; } public Enum[] getAdminCommandEnum() { return Commands.values(); } private void createItem(L2Player activeChar, L2Player player, int id, long num) { L2ItemInstance createditem = ItemTable.getInstance().createItem(id); createditem.setCount(num); activeChar.getInventory().addItem(createditem); Log.LogItem(activeChar, Log.Adm_AddItem, createditem); if(!createditem.isStackable()) { for(long i = 0; i < num - 1; i++) { createditem = ItemTable.getInstance().createItem(id); activeChar.getInventory().addItem(createditem); Log.LogItem(activeChar, Log.Adm_AddItem, createditem); } } if (activeChar != player) player.sendMessage("Персонажу, " + activeChar.getName() + " было успешно добавленно " + num + " " + createditem.getName()+"."); activeChar.sendPacket(new ItemList(activeChar, true), SystemMessage.obtainItems(id, num, 0)); } public void onLoad() { AdminCommandHandler.getInstance().registerAdminCommandHandler(this); } public void onReload() { } public void onShutdown() { } } Добавлено через 6 минут Делал для Фреи, тоже Феникса, потом переделал под сборку шайтана, подходит под любой Эпилог феникса. ![]() .\data\html\admin\attribute.htm:Свернуть ↑
Свернуть ↑Развернуть ↓
Код HTML:
<html> <table width=260> <tr> <td width=40><button value="Main" action="bypass -h admin_admin" width=40 height=21 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td> <td width=180><center>Enchant Menu</center></td> <td width=40><button value="Back" action="bypass -h admin_admin" width=40 height=21 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td> </tr> </table> <center> <br> <font color="LEVEL">Enchant Enhancement:</font><br> <table width=300> <tr> <td width=150>Enchant Value 0-300 :</td> <td><edit var="qbox" width=80 height=15></td> </tr> <tr> <td width=150>Target Element:</td> <td><combobox width=80 var="element" list="Fire;Water;Wind;Earth;Holy;Dark"></td> </tr> </table> <br> <table width=260> <tr> <td><button value="Helmet" action="bypass -h admin_setatreh $qbox $element" width=85 height=20 back="L2UI_ct1.button_df_down" fore="L2UI_ct1.button_df"></td> <td><button value="Upper Earring" action="bypass -h admin_setatrle $qbox $element" width=85 height=20 back="L2UI_ct1.button_df_down" fore="L2UI_ct1.button_df"></td> </tr> <tr> <td><button value="Chest" action="bypass -h admin_setatrec $qbox $element" width=85 height=20 back="L2UI_ct1.button_df_down" fore="L2UI_ct1.button_df"></td> <td><button value="Lower Earring" action="bypass -h admin_setatrre $qbox $element" width=85 height=20 back="L2UI_ct1.button_df_down" fore="L2UI_ct1.button_df"></td> </tr> <tr> <td><button value="Leggings" action="bypass -h admin_setatrel $qbox $element" width=85 height=20 back="L2UI_ct1.button_df_down" fore="L2UI_ct1.button_df"></td> <td><button value="Necklace" action="bypass -h admin_setatren $qbox $element" width=85 height=20 back="L2UI_ct1.button_df_down" fore="L2UI_ct1.button_df"></td> </tr> <tr> <td><button value="Gloves" action="bypass -h admin_setatreg $qbox $element" width=85 height=20 back="L2UI_ct1.button_df_down" fore="L2UI_ct1.button_df"></td> <td><button value="Upper Ring" action="bypass -h admin_setatrlf $qbox $element" width=85 height=20 back="L2UI_ct1.button_df_down" fore="L2UI_ct1.button_df"></td> </tr> <tr> <td><button value="Boots" action="bypass -h admin_setatreb $qbox $element" width=85 height=20 back="L2UI_ct1.button_df_down" fore="L2UI_ct1.button_df"></td> <td><button value="Lower Ring" action="bypass -h admin_setatrrf $qbox $element" width=85 height=20 back="L2UI_ct1.button_df_down" fore="L2UI_ct1.button_df"></td> </tr> <tr> <td><button value="Cloak" action="bypass -h admin_setatrba $qbox $element" width=85 height=20 back="L2UI_ct1.button_df_down" fore="L2UI_ct1.button_df"></td> </tr> <tr> <td><button value="Shirt" action="bypass -h admin_setatrun $qbox $element" width=85 height=20 back="L2UI_ct1.button_df_down" fore="L2UI_ct1.button_df"></td> <td><button value="Belt" action="bypass -h admin_setatrbe $qbox $element" width=85 height=20 back="L2UI_ct1.button_df_down" fore="L2UI_ct1.button_df"></td> </tr> <tr> <td><button value="Weapon" action="bypass -h admin_setatrew $qbox $element" width=85 height=20 back="L2UI_ct1.button_df_down" fore="L2UI_ct1.button_df"></td> <td><button value="Shield / Sigil" action="bypass -h admin_setatres $qbox $element" width=85 height=20 back="L2UI_ct1.button_df_down" fore="L2UI_ct1.button_df"></td> </tr> </table> </center> </body></html> .\data\scripts\commands\admin\AdminAttribute.java:Свернуть ↑
Свернуть ↑Развернуть ↓
Код:
package commands.admin; import javolution.text.TextBuilder; import l2p.extensions.scripts.ScriptFile; import l2p.gameserver.handler.AdminCommandHandler; import l2p.gameserver.handler.IAdminCommandHandler; import l2p.gameserver.model.L2Object; import l2p.gameserver.model.L2Player; import l2p.gameserver.model.items.Inventory; import l2p.gameserver.model.items.L2ItemInstance; import l2p.gameserver.serverpackets.InventoryUpdate; import l2p.gameserver.serverpackets.NpcHtmlMessage; import l2p.util.Log; public class AdminAttribute implements IAdminCommandHandler, ScriptFile { private static enum Commands { admin_setatreh, // 6 admin_setatrec, // 10 admin_setatreg, // 9 admin_setatrel, // 11 admin_setatreb, // 12 admin_setatrew, // 7 admin_setatres, // 8 admin_setatrle, // 1 admin_setatrre, // 2 admin_setatrlf, // 4 admin_setatrrf, // 5 admin_setatren, // 3 admin_setatrun, // 0 admin_setatrbl, // 24 admin_attribute } public boolean useAdminCommand(Enum comm, String[] wordList, String fullString, L2Player activeChar) { Commands command = (Commands) comm; if(!activeChar.getPlayerAccess().CanEditChar) return false; int armorType = -1; switch(command) { case admin_attribute: showMainPage(activeChar); return true; case admin_setatreh: armorType = Inventory.PAPERDOLL_HEAD; break; case admin_setatrec: armorType = Inventory.PAPERDOLL_CHEST; break; case admin_setatreg: armorType = Inventory.PAPERDOLL_GLOVES; break; case admin_setatreb: armorType = Inventory.PAPERDOLL_FEET; break; case admin_setatrel: armorType = Inventory.PAPERDOLL_LEGS; break; case admin_setatrew: armorType = Inventory.PAPERDOLL_RHAND; break; case admin_setatres: armorType = Inventory.PAPERDOLL_LHAND; break; case admin_setatrle: armorType = Inventory.PAPERDOLL_LEAR; break; case admin_setatrre: armorType = Inventory.PAPERDOLL_REAR; break; case admin_setatrlf: armorType = Inventory.PAPERDOLL_LFINGER; break; case admin_setatrrf: armorType = Inventory.PAPERDOLL_RFINGER; break; case admin_setatren: armorType = Inventory.PAPERDOLL_NECK; break; case admin_setatrun: armorType = Inventory.PAPERDOLL_UNDER; break; case admin_setatrbl: armorType = Inventory.PAPERDOLL_BELT; break; } if(armorType == -1 || wordList.length < 2 || activeChar.getInventory().getPaperdollItem(armorType)==null) { showMainPage(activeChar); return true; } try { int ench = Integer.parseInt(wordList[1]); byte element = -2; if (wordList[2].equals("Fire")) element=0; if (wordList[2].equals("Water")) element=1; if (wordList[2].equals("Wind")) element=2; if (wordList[2].equals("Earth")) element=3; if (wordList[2].equals("Holy")) element=4; if (wordList[2].equals("Dark")) element=5; if (ench < 0 || ench > 450) activeChar.sendMessage("You must set the enchant level for ARMOR to be between 0-300."); else setEnchant(activeChar, ench, element, armorType); } catch(StringIndexOutOfBoundsException e) { activeChar.sendMessage("Please specify a new enchant value."); } catch(NumberFormatException e) { activeChar.sendMessage("Please specify a valid new enchant value."); } // show the enchant menu after an action showMainPage(activeChar); return true; } private void setEnchant(L2Player activeChar, int value, byte element , int armorType) { L2Object target = activeChar.getTarget(); if(target == null) target = activeChar; if(!target.isPlayer()) { activeChar.sendMessage("Wrong target type."); return; } L2Player player = (L2Player) target; L2ItemInstance item = player.getInventory().getPaperdollItem(armorType); if(item != null) { item.setAttributeElement(element, value, true); player.getInventory().refreshListeners(); player.sendPacket(new InventoryUpdate().addModifiedItem(item)); player.sendChanges(); } } private void showMainPage(L2Player activeChar) { activeChar.sendPacket(new NpcHtmlMessage(5).setFile("data/html/admin/attribute.htm")); } public Enum[] getAdminCommandEnum() { return Commands.values(); } public void onLoad() { AdminCommandHandler.getInstance().registerAdminCommandHandler(this); } public void onReload() {} public void onShutdown() {} } Последний раз редактировалось Ro_0TT; 06.02.2011 в 08:08. Причина: Добавлено сообщение |
![]() ![]() ![]() |
![]() |
![]() |
#12 |
Пользователь
|
![]()
Shutdown.java
На фениксах Мб по нубски, но зато красивее чем было...! Код HTML:
public void abort(L2Player activeChar) { _log.warning("GM: " + activeChar.getName() + "(" + activeChar.getObjectId() + ") issued shutdown ABORT. " + _modeText[shutdownMode] + " has been stopped!"); if(this.shutdownMode == 1) { announce("Выключение сервера прервано!", 10000, ScreenMessageAlign.TOP_CENTER); } if(this.shutdownMode == 2) { announce("Перезагрузка сервера прервана!", 10000, ScreenMessageAlign.TOP_CENTER); } if(_counterInstance != null) { _counterInstance._abort(); } } Код HTML:
private void countdown() { if (this.shutdownMode == 1) { while(secondsShut > 0) try { switch(secondsShut) { case 120: announce("Внимание!!!Сервер будет выключен через 2 минуты!Покиньте игру!", 10000, ScreenMessageAlign.BOTTOM_RIGHT); break; case 60: System.out.println(l2p.gameserver.model.L2ObjectsStorage.getStats()); System.out.println(); System.out.println(l2p.gameserver.geodata.PathFindBuffers.getStats()); System.out.println(); if(Config.PROTECT_ENABLE && Config.PROTECT_COMPRESSION > 0) { System.out.println(SelectorThread.getStats()); System.out.println(); } announce("Внимание!!!Сервер будет выключен через 1 минуту!Покиньте игру!", 10000, ScreenMessageAlign.TOP_CENTER); if(!Config.DONTLOADSPAWN) try { L2World.deleteVisibleNpcSpawns(); } catch(Throwable t) { System.out.println("Error while unspawn Npcs!"); t.printStackTrace(); } break; case 30: announce("Внимание!!!Сервер будет выключен через 30 секунд!Покиньте игру!", 10000, ScreenMessageAlign.TOP_CENTER); break; case 15: announce("Сервер будет выключен через 15 секунд!", 10000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER); break; case 10: announce("Сервер будет выключен через 10 секунд!", 10000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER); break; case 5: announce("Сервер будет выключен через 5 секунд!", 10000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER); break; case 4: announce("Сервер будет выключен через 4 секунды!", 10000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER); break; case 3: announce("Сервер будет выключен через 3 секунды!", 10000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER); break; case 2: announce("Сервер будет выключен через 2 секунды!", 10000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER); break; case 1: announce("Сервер будет выключен через 1 секунду!", 10000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER); break; } this.secondsShut -= 1; int delay = 1000; Thread.sleep(delay); if (this.shutdownMode == 3) { return; } } catch (Exception e) { e.printStackTrace(); } } if (this.shutdownMode == 2) { while(secondsShut > 0) try { switch(secondsShut) { case 120: announce("Внимание!!!Перезагрузка сервера начнется через 2 минуты!Покиньте игру!", 10000, ScreenMessageAlign.BOTTOM_RIGHT); break; case 60: System.out.println(l2p.gameserver.model.L2ObjectsStorage.getStats()); System.out.println(); System.out.println(l2p.gameserver.geodata.PathFindBuffers.getStats()); System.out.println(); if(Config.PROTECT_ENABLE && Config.PROTECT_COMPRESSION > 0) { System.out.println(SelectorThread.getStats()); System.out.println(); } announce("Внимание!!!Перезагрузка сервера начнется через 1 минуту!Покиньте игру!", 10000, ScreenMessageAlign.TOP_CENTER); if(!Config.DONTLOADSPAWN) try { L2World.deleteVisibleNpcSpawns(); } catch(Throwable t) { System.out.println("Error while unspawn Npcs!"); t.printStackTrace(); } break; case 30: announce("Внимание!!!Перезагрузка сервера начнется через 30 секунд!Покиньте игру!", 10000, ScreenMessageAlign.TOP_CENTER); break; case 15: announce("Сервер будет перезагружен через 15 секунд!", 10000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER); break; case 10: announce("Сервер будет перезагружен через 10 секунд!", 10000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER); break; case 5: announce("Сервер будет перезагружен через 5 секунд!", 10000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER); break; case 4: announce("Сервер будет перезагружен через 4 секунды!", 10000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER); break; case 3: announce("Сервер будет перезагружен через 3 секунды!", 10000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER); break; case 2: announce("Сервер будет перезагружен через 2 секунды!", 10000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER); break; case 1: announce("Сервер будет перезагружен через 1 секунду!", 10000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER); break; } this.secondsShut -= 1; int delay = 1000; Thread.sleep(delay); if (this.shutdownMode == 3) { return; } } catch (Exception e) { e.printStackTrace(); } } } |
![]() ![]() ![]() |
![]() |
![]() |
#13 | |
Супергерой
Регистрация: 09.11.2010
Адрес: Россия, г. Краснодар
Возраст: 31
Сообщений: 3,965
Отблагодарили 2,760 раз(а)
Рейтинг мнений:
248
|
![]() Цитата:
![]() Код:
if (secondsShut / 60 > 0) text = "Сервер будет выключен через " + (int) (secondsShut / 60) + " минут."; else if (secondsShut > 0) text = "Сервер будет выключен через " + secondsShut + " секунд."; else text = "Сервер отключен."; announce(text, 10000, ScreenMessageAlign.TOP_CENTER); |
|
![]() ![]() ![]() |
![]() |
Сказали спасибо: |
![]() |
#14 |
Пользователь
|
![]()
Дайте плиз фикс 2.22... и баг с ВХ на фениксе, кому не в лом, а то чет лень напрягатся
![]() |
![]() ![]() ![]() |
![]() |
![]() |
#17 |
Пользователь
|
![]()
нынче не дешевое это занятие, программистов нанимать
![]() Подскажи плиз почему твои наработки не пахают? Я просто начинающий копипастер как бэ ![]() ![]() Uploaded with ImageShack.us ![]() |
![]() ![]() ![]() |
![]() |
![]() |
#18 |
Забанен за кидаловo/обман/развод
Регистрация: 09.04.2008
Адрес: Ростов-на-Дону
Возраст: 36
Сообщений: 2,100
Отблагодарили 911 раз(а)
Рейтинг мнений:
79
|
![]()
Amorph1s м.б надо сохранять всё в utf-8 ?
![]() ---- Ну раз пошло про фениксов, то кину свою горе наработку (в буквальном смысле слова ![]() Войс команда на вызов хтмля с инфой по ХБ (Траст поинты и доступность) ---- Для начала ходим в scripts/services/Caravan.java Код:
private static long getConfidence() Код:
public static long getConfidence() Код:
package commands.voiced; import services.Caravan; import l2p.Config; import l2p.extensions.scripts.Functions; import l2p.extensions.scripts.ScriptFile; import l2p.gameserver.handler.IVoicedCommandHandler; import l2p.gameserver.handler.VoicedCommandHandler; import l2p.gameserver.model.L2Player; import l2p.util.Files; /** * User: KilRoy * Команда .hellbound * Выводит инфу о доступности острова и уровне доверия */ public class HellBound extends Functions implements IVoicedCommandHandler, ScriptFile { private String[] _commandList = new String[]{"hellbound"}; public boolean useVoicedCommand(String command, L2Player activeChar, String args) { if (command.equals("hellbound")){ Long Trust = Caravan.getConfidence(); long curr = Caravan.getConfidence(); String dialog = Files.read("data/scripts/commands/voiced/hellbound.htm", activeChar); String status = ""; if (curr >= 1) status = "Open."; else status = "Closed."; dialog = dialog.replaceFirst("%status%", status); dialog = dialog.replaceFirst("%trust%", Trust.toString()); show(dialog, activeChar); return true; } return true; } public String[] getVoicedCommandList(){ return _commandList; } public void onLoad(){ VoicedCommandHandler.getInstance().registerVoicedCommandHandler(this); } public void onReload() {} public void onShutdown() {} } Код:
<html> <body>HellBound Status<br><br> <table> <tr> <td width=5></td> <td width=100>State: <font color="LEVEL">%status%</font></td> </tr> <tr> <td width=5></td> <td width=100>Current Trust-level:</td> <td width=30><font color="LEVEL">%trust%</font></td> </tr> </table> </body></html> Ну до кучи ещё с камаель ребы вам подарочек "ClassMaster Spawn/UnSpawn" Для любителей делать всё кагнаоффе ![]() Следовательно фишка работает через евент (вкл\выкл через админку, удобно, практично ![]() Первое что делаем, это делетим нахер классмастеров из базы спавн-листа (spawnlist) ID 31860 Ищем всех и выносим их оттуда (их там 17шт) Ну и далее начинаем копипастить ![]() scripts/events/ClassMaster/ClassMaster.java ( Ясен бок папку и файл создаём ![]() Код:
package events.ClassMaster; import l2p.Config; import l2p.gameserver.cache.Msg; import l2p.extensions.scripts.Functions; import l2p.extensions.scripts.ScriptFile; import l2p.extensions.multilang.CustomMessage; import l2p.gameserver.Announcements; import l2p.gameserver.model.L2ObjectsStorage; import l2p.gameserver.model.L2Player; import l2p.gameserver.model.L2Spawn; import l2p.gameserver.model.instances.L2NpcInstance; import l2p.util.Files; import l2p.util.GArray; import l2p.util.Util; // User: KilRoy // Спавн Class Master по основным городам ( Предварительно включать // Класс Мастера в настройках сервера (events.properties) // Удобно для так называемого "всё как на оффе" :) public class ClassMaster extends Functions implements ScriptFile { private static int EVENT_MANAGER_ID = 31860; private static GArray<L2Spawn> _spawns = new GArray<L2Spawn>(); private static boolean _active = false; /** * Спавнит эвент менеджеров */ private void spawnEventManagers() { final int EVENT_MANAGERS[][] = { { -84522, 243213, -3731, 21481 }, // Talking Island Village { 45911, 49912, -3086, 6626 }, // Elven Village { 11862, 17641, -4576, 43758 }, // Dark Elven Village { 115634, -178033, -914, 39597 }, // Dwarven Village { -44801, -113031, -241, 15800 }, // Orc Village { -116592, 44984, 341, 16277 }, // Kamael Village { -14022, 123829, -3118, 39678 }, // 1 (Unknow) { -81637, 150251, -3130, 16277 }, // 2 (Unknow) { 82651, 54338, -1551, 10558 }, // Oren { 18012, 145166, -3075, 64469 }, // Dion { 83199, 147870, -3495, 37217 }, // Giran { 111705, 219449, -3697, 10970 }, // Heine { 116236, 76957, -2752, 337 }, // Hunter Village { 147866, 26615, -2231, 16167 }, // Aden { 148923, -55829, -2807, 39721 }, // Goddard { 86161, -142903, -1368, 7038 }, // Schuttgart { 44251, -47640, -823, 49152 } // Rune }; SpawnNPCs(EVENT_MANAGER_ID, EVENT_MANAGERS, _spawns); } /** * Удаляет спавн эвент менеджеров */ private void unSpawnEventManagers() { deSpawnNPCs(_spawns); } /** * Читает статус эвента из базы. * @return */ private static boolean isActive() { return IsActive("ClassMaster"); } /** * Запускает эвент */ public void startEvent() { L2Player player = (L2Player) getSelf(); if(!player.getPlayerAccess().IsEventGm) { return; } if(SetActive("ClassMaster", true)) { spawnEventManagers(); System.out.println("EventCMS: ClassMaster spawned."); Announcements.getInstance().announceByCustomMessage("scripts.events.ClassMaster.AnnounceEventStarted", null); } else { player.sendMessage("EventCMS 'ClassMaster' already spawned."); } _active = true; show(Files.read("data/html/admin/events/events.htm", player), player); } /** * Останавливает эвент */ public void stopEvent() { L2Player player = (L2Player) getSelf(); if(!player.getPlayerAccess().IsEventGm) { return; } if(SetActive("ClassMaster", false)) { unSpawnEventManagers(); System.out.println("EventCMS: ClassMaster unspawned."); Announcements.getInstance().announceByCustomMessage("scripts.events.ClassMaster.AnnounceEventStoped", null); } else { player.sendMessage("EventCMS 'ClassMaster' not spawned."); } _active = false; show(Files.read("data/html/admin/events/events.htm", player), player); } public void onLoad() { if(isActive()) { _active = true; spawnEventManagers(); System.out.println("Loaded EventCMS: ClassMaster [state: spawned]"); } else { System.out.println("Loaded EventCMS: ClassMaster [state: unspawned]"); } } public void onReload() { unSpawnEventManagers(); } public void onShutdown() { unSpawnEventManagers(); } public static void OnPlayerEnter(int objectId) { if(_active) { L2Player player = L2ObjectsStorage.getPlayer(objectId); Announcements.getInstance().announceToPlayerByCustomMessage(player, "scripts.events.ClassMaster.AnnounceEventStarted", null); } } } Код:
scripts.events.ClassMaster.AnnounceEventStarted=The event 'Class Master' started. Class Master spawned to town. scripts.events.ClassMaster.AnnounceEventStoped=The event 'Class Master' stopped. Class Master unspawned. ![]() Код:
<td width=140>Class Master S/UnS</td> <td width=45><button value="Spawn" action="bypass -h scripts_events.ClassMaster.ClassMaster:startEvent" width=40 height=20 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td> <td width=45><button value="UnSpawn" action="bypass -h scripts_events.ClassMaster.ClassMaster:stopEvent" width=40 height=20 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td> <td width=45></td> </tr><tr> |
![]() ![]() ![]() |
![]() |
![]() |
#19 |
Пользователь
|
![]()
Кто сможет вот в это
Код:
package l2p.gameserver.clientpackets; import java.util.logging.Logger; import l2p.Config; import l2p.extensions.multilang.CustomMessage; import l2p.gameserver.cache.Msg; import l2p.gameserver.model.L2Player; import l2p.gameserver.model.items.L2ItemInstance; import l2p.gameserver.model.items.PcInventory; import l2p.gameserver.serverpackets.EnchantResult; import l2p.gameserver.serverpackets.InventoryUpdate; import l2p.gameserver.serverpackets.SystemMessage; import l2p.gameserver.tables.ItemTable; import l2p.gameserver.tables.SkillTable; import l2p.gameserver.templates.L2Item; import l2p.util.Log; import l2p.util.Rnd; public class RequestEnchantItem extends L2GameClientPacket { protected static Logger _log = Logger.getLogger(RequestEnchantItem.class.getName()); // Format: cd private int _objectId, _catalystObjId; @Override public void readImpl() { _objectId = readD(); _catalystObjId = readD(); } @Override public void runImpl() { L2Player activeChar = getClient().getActiveChar(); if(activeChar == null) return; if(activeChar.isOutOfControl() || activeChar.isActionsDisabled()) { activeChar.sendActionFailed(); return; } PcInventory inventory = activeChar.getInventory(); L2ItemInstance itemToEnchant = inventory.getItemByObjectId(_objectId); L2ItemInstance catalyst = _catalystObjId > 0 ? inventory.getItemByObjectId(_catalystObjId) : null; L2ItemInstance scroll = activeChar.getEnchantScroll(); activeChar.setEnchantScroll(null); if(itemToEnchant == null || scroll == null) { activeChar.sendActionFailed(); return; } // Затычка, ибо клиент криво обрабатывает RequestExTryToPutEnchantSupportItem if(!RequestExTryToPutEnchantSupportItem.checkCatalyst(itemToEnchant, catalyst)) catalyst = null; // С помощью Master Yogi's Scroll: Enchant Weapon можно точить только Staff of Master Yogi if(scroll.getItemId() == 13540 && itemToEnchant.getItemId() != 13539 || itemToEnchant.getItemId() == 13539 && scroll.getItemId() != 13540) { activeChar.sendPacket(EnchantResult.CANCEL); activeChar.sendPacket(Msg.INAPPROPRIATE_ENCHANT_CONDITIONS); activeChar.sendActionFailed(); return; } Log.add(activeChar.getName() + "|Trying to enchant|" + itemToEnchant.getItemId() + "|+" + itemToEnchant.getEnchantLevel() + "|" + itemToEnchant.getObjectId(), "enchants"); // Затычка, разрешающая точить Staff of Master Yogi if(!itemToEnchant.canBeEnchanted() && !isYogiStaffEnchanting(scroll, itemToEnchant)) { activeChar.sendPacket(EnchantResult.CANCEL); activeChar.sendPacket(Msg.INAPPROPRIATE_ENCHANT_CONDITIONS); activeChar.sendActionFailed(); return; } if(itemToEnchant.getLocation() != L2ItemInstance.ItemLocation.INVENTORY && itemToEnchant.getLocation() != L2ItemInstance.ItemLocation.PAPERDOLL) { activeChar.sendPacket(EnchantResult.CANCEL); activeChar.sendPacket(Msg.INAPPROPRIATE_ENCHANT_CONDITIONS); activeChar.sendActionFailed(); return; } if(activeChar.getPrivateStoreType() != L2Player.STORE_PRIVATE_NONE) { activeChar.sendPacket(EnchantResult.CANCEL); activeChar.sendPacket(Msg.YOU_CANNOT_PRACTICE_ENCHANTING_WHILE_OPERATING_A_PRIVATE_STORE_OR_PRIVATE_MANUFACTURING_WORKSHOP); activeChar.sendActionFailed(); return; } if(itemToEnchant.isStackable() || (scroll = inventory.getItemByObjectId(scroll.getObjectId())) == null) { activeChar.sendPacket(EnchantResult.CANCEL); activeChar.sendActionFailed(); return; } int crystalId = itemToEnchant.getEnchantCrystalId(scroll, catalyst); // Затычка, разрешающая точить Staff of Master Yogi if(crystalId == 0 && !isYogiStaffEnchanting(scroll, itemToEnchant)) { activeChar.sendPacket(EnchantResult.CANCEL); activeChar.sendPacket(Msg.INAPPROPRIATE_ENCHANT_CONDITIONS); activeChar.sendActionFailed(); return; } // Staff of Master Yogi можно точить до 23 if(!isYogiStaffEnchanting(scroll, itemToEnchant) && itemToEnchant.getEnchantLevel() >= Config.ENCHANT_MAX || isYogiStaffEnchanting(scroll, itemToEnchant) && itemToEnchant.getEnchantLevel() >= 23) { activeChar.sendPacket(EnchantResult.CANCEL); activeChar.sendMessage(new CustomMessage("l2p.gameserver.clientpackets.RequestEnchantItem.MaxLevel", activeChar)); activeChar.sendActionFailed(); return; } // Запрет на заточку чужих вещей, баг может вылезти на серверных лагах if(itemToEnchant.getOwnerId() != activeChar.getObjectId()) { activeChar.sendPacket(EnchantResult.CANCEL); activeChar.sendPacket(Msg.INAPPROPRIATE_ENCHANT_CONDITIONS); activeChar.sendActionFailed(); return; } L2ItemInstance removedScroll, removedCatalyst = null; synchronized (inventory) { removedScroll = inventory.destroyItem(scroll.getObjectId(), 1, true); if(catalyst != null) removedCatalyst = inventory.destroyItem(catalyst.getObjectId(), 1, true); } //tries enchant without scrolls if(removedScroll == null || catalyst != null && removedCatalyst == null) { activeChar.sendPacket(EnchantResult.CANCEL); activeChar.sendActionFailed(); return; } int itemType = itemToEnchant.getItem().getType2(); int safeEnchantLevel = itemToEnchant.getItem().getBodyPart() == L2Item.SLOT_FULL_ARMOR ? Config.SAFE_ENCHANT_FULL_BODY : Config.SAFE_ENCHANT_COMMON; double chance; if(itemToEnchant.getEnchantLevel() < safeEnchantLevel) chance = 100; else if(itemType == L2Item.TYPE2_WEAPON) chance = removedScroll.isCrystallEnchantScroll() ? Config.ENCHANT_CHANCE_CRYSTAL_WEAPON : Config.ENCHANT_CHANCE_WEAPON; else if(itemType == L2Item.TYPE2_SHIELD_ARMOR) chance = removedScroll.isCrystallEnchantScroll() ? Config.ENCHANT_CHANCE_CRYSTAL_ARMOR : Config.ENCHANT_CHANCE_ARMOR; else if(itemType == L2Item.TYPE2_ACCESSORY) chance = removedScroll.isCrystallEnchantScroll() ? Config.ENCHANT_CHANCE_CRYSTAL_ACCESSORY : Config.ENCHANT_CHANCE_ACCESSORY; else { System.out.println("WTF? Request to enchant " + itemToEnchant.getItemId()); activeChar.sendPacket(EnchantResult.CANCEL); activeChar.sendActionFailed(); activeChar.sendPacket(Msg.SYSTEM_ERROR); inventory.addItem(removedScroll); return; } if(scroll.isDivineEnchantScroll()) // Item Mall divine chance = 100; else if(scroll.isItemMallEnchantScroll()) // Item Mall normal/ancient chance += 10; if(removedCatalyst != null) chance += removedCatalyst.getCatalystPower(); if(Rnd.chance(chance)) { itemToEnchant.setEnchantLevel(itemToEnchant.getEnchantLevel() + 1); itemToEnchant.updateDatabase(); activeChar.sendPacket(new InventoryUpdate().addModifiedItem(itemToEnchant)); Log.add(activeChar.getName() + "|Successfully enchanted|" + itemToEnchant.getItemId() + "|to+" + itemToEnchant.getEnchantLevel() + "|" + chance, "enchants"); Log.LogItem(activeChar, Log.EnchantItem, itemToEnchant); activeChar.sendPacket(EnchantResult.SUCESS); if(itemToEnchant.getEnchantLevel() >= (itemType == L2Item.TYPE2_WEAPON ? 6 : 5)) { activeChar.altUseSkill(SkillTable.getInstance().getInfo(21006, 1), activeChar); activeChar.broadcastPacket(new SystemMessage(SystemMessage.C1_HAS_SUCCESSFULY_ENCHANTED_A__S2_S3).addName(activeChar).addNumber(itemToEnchant.getEnchantLevel()).addItemName(itemToEnchant.getItemId())); } } else { Log.add(activeChar.getName() + "|Failed to enchant|" + itemToEnchant.getItemId() + "|+" + itemToEnchant.getEnchantLevel() + "|" + chance, "enchants"); if(scroll.isBlessedEnchantScroll()) // фейл, но заточка блесед { itemToEnchant.setEnchantLevel(0); activeChar.sendPacket(new InventoryUpdate().addModifiedItem(itemToEnchant)); activeChar.sendPacket(Msg.FAILED_IN_BLESSED_ENCHANT_THE_ENCHANT_VALUE_OF_THE_ITEM_BECAME_0); activeChar.sendPacket(EnchantResult.BLESSED_FAILED); } else if(scroll.isAncientEnchantScroll()) // фейл, но заточка ancient activeChar.sendPacket(EnchantResult.ANCIENT_FAILED); else // фейл, разбиваем вещь { if(itemToEnchant.isEquipped()) inventory.unEquipItemInSlot(itemToEnchant.getEquipSlot()); L2ItemInstance destroyedItem = inventory.destroyItem(itemToEnchant.getObjectId(), 1, true); if(destroyedItem == null) { _log.warning("failed to destroy " + itemToEnchant.getObjectId() + " after unsuccessful enchant attempt by char " + activeChar.getName()); activeChar.sendActionFailed(); return; } Log.LogItem(activeChar, Log.EnchantItemFail, itemToEnchant); if(crystalId > 0) { L2ItemInstance crystalsToAdd = ItemTable.getInstance().createItem(crystalId); int count = (int) (itemToEnchant.getItem().getCrystalCount() * 0.87); if(destroyedItem.getEnchantLevel() > 3) count += itemToEnchant.getItem().getCrystalCount() * 0.25 * (destroyedItem.getEnchantLevel() - 3); if(count < 1) count = 1; crystalsToAdd.setCount(count); inventory.addItem(crystalsToAdd); Log.LogItem(activeChar, Log.Sys_GetItem, crystalsToAdd); activeChar.sendPacket(new EnchantResult(1, crystalsToAdd.getItemId(), count), SystemMessage.obtainItems(crystalId, count, 0)); } else activeChar.sendPacket(EnchantResult.FAILED_NO_CRYSTALS); activeChar.refreshExpertisePenalty(); } } activeChar.refreshOverloaded(); activeChar.setEnchantScroll(null); activeChar.sendChanges(); } private static boolean isYogiStaffEnchanting(L2ItemInstance scroll, L2ItemInstance itemToEnchant) { if(scroll.getItemId() == 13540 && itemToEnchant.getItemId() == 13539) return true; return false; } } Код:
private static boolean checkEnchant(L2ItemInstance itemToEnchant) { int itemType = itemToEnchant.getItem().getType2(); int maxWep = 0, maxArmJew = 0; // инициализация(оружие,арм/бижа) switch(itemToEnchant.getCrystalType()) { case C: maxWep = 25; maxArmJew = 15; break; case B: maxWep = 20; maxArmJew = 10; break; case A: maxWep = 16; maxArmJew = 8; break; case S: maxWep = 13; break; case S80: maxWep = 8; break; case S84: maxWep = 7; break; default: maxArmJew = 6; break; } if(itemType == L2Item.TYPE2_WEAPON && itemToEnchant.getEnchantLevel() >= maxWep) return true; else if((itemType == L2Item.TYPE1_SHIELD_ARMOR || itemType == L2Item.TYPE2_ACCESSORY) && itemToEnchant.getEnchantLevel() >= maxArmJew) return true; return false; } Суть в том, что этот код ставит ограничение заточек по грейду, через клиентпакет. Добавлено через 13 часов 20 минут собственно так и делаю. в том то и трабл. ![]() Последний раз редактировалось Amorph1s; 25.02.2011 в 12:01. Причина: Добавлено сообщение |
![]() ![]() ![]() |
![]() |
![]() |
#20 | |
Пользователь
|
![]() Цитата:
![]() |
|
![]() ![]() |
![]() |
![]() |
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
Опции темы | |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
SVN ссылки Java серверов. | PROGRAMMATOR | Lineage II | 284 | 19.11.2020 20:50 |
Компилятор java серверов Lineage 2 | PROGRAMMATOR | Инструменты | 102 | 08.02.2011 22:34 |
[help]Модификации Java сервера | RuleZzz | Lineage II | 4 | 09.10.2009 18:58 |