Перейти к содержанию

SoFace

Постоялец
  • Публикаций

    892
  • Зарегистрирован

  • Посещение

  • Победитель дней

    4
  • Отзывы

    100%

Весь контент SoFace

  1. И еще раз здравствуйте. В прошлый раз я выложил скрипт Donate Scroll'а. В этот раз скрипт Teleport'а.) Суть скрипта такова, персонаж юзает одну из команд представленных в скрипте, и телепортируется в определенное место (Координаты которого указаны в скрипте). Покажу как использовать: TELEPORTS.put("название команды", new TelePoint(координаты x,координаты y,координаты z)); Так же можно сделать платный телепорт (Т.е. за него будет требоваться определенный предмет): TELEPORTS.put("название команды", new TelePoint(координаты x,координаты y,координаты z, ID предмета который будет требоваться за телепорт, количество предмета)); Создаем класс Teleport.java в scripts\commands\voice. package commands.voice; import javolution.util.FastMap; import net.sf.l2j.gameserver.cache.Static; import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance; import net.sf.l2j.util.Location; import scripts.commands.IVoicedCommandHandler; import scripts.commands.VoicedCommandHandler; public class Teleport implements IVoicedCommandHandler { private final static FastMap<String, TelePoint> TELEPORTS = new FastMap<String, TelePoint>().shared("Teleport.TELEPORTS"); private static String[] VOICED_COMMANDS = null; class TelePoint { public Location loc; public int coin = 0; public int price = 0; public TelePoint(int x, int y, int z) { this.loc = new Location(x, y, z); } public TelePoint(int x, int y, int z, int itemId, int price) { this.loc = new Location(x, y, z); this.coin = itemId; this.price = price; } } public Teleport() { TELEPORTS.put("pvp", new TelePoint(183549,20233,-3173)); VOICED_COMMANDS = TELEPORTS.keySet().toArray(new String[TELEPORTS.size()]); VoicedCommandHandler.getInstance().registerVoicedCommandHandler(this); } public boolean useVoicedCommand(String command, L2PcInstance player, String target) { if (player == null) return false; if (player.isCursedWeaponEquiped() || player.getKarma() > 0 || player.getPvpFlag() > 0) { player.sendMessage("Игрокам с кармой запрещено телепортироваться."); player.sendPacket(Static.NO_KARRMA_TELE); return false; } TelePoint tp = TELEPORTS.get(command); if (tp == null) return false; // tp.coin.id > 0 платный телепорт if (tp.coin > 0 && !player.destroyItemByItemId("voiced.Teleport", tp.coin, tp.price, player, true)) return false; player.teleToLocation(tp.loc.x, tp.loc.y, tp.loc.z); return true; } public String[] getVoicedCommandList() { return VOICED_COMMANDS; } public static void main (String... arguments ) { new Teleport(); } }
  2. Доброго времени суток. Суть скрипта такова, персонаж использует предмет (который будет указан в скрипте) и на него вешается бафф. Так же можно поставить в виде Хиро предмета. Все, что угодно можно сделать, главное мозги.) Кстати говоря, постараюсь помочь вам в ваших пожеланиях по этому скрипту. Покажу как использовать: SCROLLS.put(ID вашего предмета который будет использоваться в качестве скролла, new Integer[] { ID баффа который будет вешаться на персонажа при юзе этого скролла, уровень вашего баффа, ID скилла анимации которая будет показана при юзе этого скролла, продолжительность анимации, кушать ли скролл при юзе ? (1 - да, 0 - нет) }); package items; import javolution.util.FastMap; import net.sf.l2j.gameserver.datatables.SkillTable; import net.sf.l2j.gameserver.cache.Static; import net.sf.l2j.gameserver.model.L2ItemInstance; import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance; import net.sf.l2j.gameserver.model.actor.instance.L2PlayableInstance; import net.sf.l2j.gameserver.network.serverpackets.MagicSkillUser; import scripts.items.ItemHandler; import scripts.items.IItemHandler; public class DonateScrolls implements IItemHandler { private final static FastMap<Integer, Integer[]> SCROLLS = new FastMap<Integer, Integer[]>().shared("DonateScrolls.SCROLLS"); private static int[] ITEM_IDS = null; public DonateScrolls() { SCROLLS.put(4355, new Integer[] { 1204, 2, 2036, 1, 0 }); // Integer[] tmp_ids = (Integer[]) SCROLLS.keySet().toArray(new Integer[sCROLLS.size()]); ITEM_IDS = toIntArray(tmp_ids); tmp_ids = null; ItemHandler.getInstance().registerItemHandler(this); } public static void main (String... arguments ) { new DonateScrolls(); } public void useItem(L2PlayableInstance playable, L2ItemInstance item) { if (!playable.isPlayer()) return; L2PcInstance player = (L2PcInstance) playable; if (player.isAllSkillsDisabled()) { player.sendActionFailed(); return; } if (player.isInOlympiadMode()) { player.sendPacket(Static.THIS_ITEM_IS_NOT_AVAILABLE_FOR_THE_OLYMPIAD_EVENT); player.sendActionFailed(); return; } Integer[] data = SCROLLS.get(item.getItemId()); if(data != null) { player.stopSkillEffects(data[0]); SkillTable.getInstance().getInfo(data[0], data[1]).getEffects(player, player); player.broadcastPacket(new MagicSkillUser(player, player, data[2], 1, data[3], 0)); if (data[4] == 1) player.destroyItem("Consume", item.getObjectId(), 1, null, false); } } private int[] toIntArray(Integer[] arr) { int[] ret = new int[arr.length]; int i = 0; for (Integer e : arr) ret[i++] = e.intValue(); return ret; } public int[] getItemIds() { return ITEM_IDS; } }
  3. Было залито на яднекс диск же. Читайте ту тему ниже.
  4. Как вариант: http://forummaxi.ru/index.php?showtopic=39380
  5. Причем тут патч ? Если человек использует Английский патч, то да.
  6. Поставьте кодировку ANSI. Совет: Посмотрел код вашего NPC. Советую сделать так: 1. Убрать полностью javolution с кода: import javolution.text.TextBuilder; 2. Все TextBuilder заменить на StringBuilder. На пример: TextBuilder replyMSG = new TextBuilder(""); Меняем на: StringBuilder replyMSG = new StringBuilder();
  7. Вы не сможете просто так добавить CatsGuard в исходный код RT, т.к. структура вообще другая. Придется исправлять код.
  8. Все люцеры, которые используют синхронизацию с сервером lucera.ru. Исключения: L2-Dream, Lucera 2. В этом коде я полностью вырезал код апдейта. Хотя можно было просто поставить токен false.
  9. Очень даже не плохо. Еще добавить несколько живых эффектов, и будет как у Unsimple. Ярослав, вы молодец.
  10. SoFace

    Выбор Сборки

    Самый лучший вариант это aCis.
  11. Aвтоматическая генерация pathnode Собственно понадобилось сгенерировать пачнод для всей гео, пришлось допилить L2j GeoEditor В аттаче скомпиленая версия и исходники (включая исходники L2j GeoEditor). мануал: скидываем в папку geodata вашу гео запускаем geo2pn.bat ждем profit Скрытый текст требуется (100 сообщение(ий), сейчас у вас --): geo2PN.zip geo2PN - src.zip
  12. SoFace

    Ошибка Catsguard

    При включенном CatsGuard у меня отлично все запускается.
  13. SoFace

    Stdout.log

    Дебаг выключите.
  14. На все ваши вопросы, есть ответы тут: IPBZona
  15. Могу поделиться только компилом от 312 ревизии.
  16. Совет. Если будете добавлять всякие фичи в сборку. Не используйте библиотеку javolution и ее классы. Т.к. лишняя нагрузка на ЦП. Лучше лишний раз спросить. В aCis: FastMap -> HashMap FastList -> ArrayList TextBuilder -> StringBuilder и т.д. )
  17. SoFace

    Ошибка Gs

    Ага -> http://forummaxi.ru/index.php?showtopic=40998 Так же отправил жалобу за мат.
  18. Доброго времени суток. За сегодня уже пожаловались 2 пользователя на эту проблему. У них не запускается шарная люцера. Это все из за того, что сервера с которых запускалась сборка, перекрыли. Теперь вы ее никак не запустите. Ошибка при запуске GameServer: Замените библиотеку lucera.jar (папка game). Скачать lucera.jar
  19. SoFace

    Ошибка Gs

    Сейчас посмотрим, что и как. Если получится, то ожидайте дополнение для шаровой Lucera.
  20. SoFace

    Ошибка Gs

    Поэтому и советую ТС'у переписать BootManager.
  21. SoFace

    Баффер

    Ну тогда хорошая работа. Желаю вам удачи в ваших следующих продажах.
  22. + это добавить в код. - это удалить из кода. И так делаем следующее: Сначала открываем DocumentBase.java: @@ -26,6 +26,7 @@ import javolution.util.FastList; import javolution.util.FastMap; +import net.sf.l2j.Config; import net.sf.l2j.gameserver.datatables.ItemTable; import net.sf.l2j.gameserver.model.ChanceCondition; import net.sf.l2j.gameserver.model.L2Skill; @@ -239,7 +240,28 @@ count = Integer.decode(getValue(attrs.getNamedItem("count").getNodeValue(), template)); if (attrs.getNamedItem("time") != null) + { time = Integer.decode(getValue(attrs.getNamedItem("time").getNodeValue(), template)); + if(Config.ENABLE_MODIFY_SKILL_DURATION) + { + if(Config.SKILL_DURATION_LIST.containsKey(((L2Skill) template).getId())) + { + if(((L2Skill) template).getLevel() < 100) + { + time = Config.SKILL_DURATION_LIST.get(((L2Skill) template).getId()); + } + else if(((L2Skill) template).getLevel() >= 100 && ((L2Skill) template).getLevel() < 140) + { + time += Config.SKILL_DURATION_LIST.get(((L2Skill) template).getId()); + } + else if(((L2Skill) template).getLevel() > 140) + { + time = Config.SKILL_DURATION_LIST.get(((L2Skill) template).getId()); + } + } + } + + } else if (((L2Skill) template).getBuffDuration() > 0) time = ((L2Skill) template).getBuffDuration() / 1000 / count; Далее Config.java: @@ -30,6 +30,8 @@ import java.util.StringTokenizer; import java.util.logging.Logger; +import javolution.util.FastMap; + import net.sf.l2j.gameserver.util.FloodProtectorConfig; import net.sf.l2j.util.StringUtil; @@ -485,6 +487,8 @@ /** Buffs */ public static boolean STORE_SKILL_COOLTIME; public static byte BUFFS_MAX_AMOUNT; + public static boolean ENABLE_MODIFY_SKILL_DURATION; + public static FastMap<Integer, Integer> SKILL_DURATION_LIST; // -------------------------------------------------- // Server @@ -1247,6 +1251,39 @@ BUFFS_MAX_AMOUNT = Byte.parseByte(players.getProperty("MaxBuffsAmount", "20")); STORE_SKILL_COOLTIME = Boolean.parseBoolean(players.getProperty("StoreSkillCooltime", "true")); + ENABLE_MODIFY_SKILL_DURATION = Boolean.parseBoolean(players.getProperty("EnableModifySkillDuration", "false")); + if(ENABLE_MODIFY_SKILL_DURATION) + { + SKILL_DURATION_LIST = new FastMap<Integer, Integer>(); + + String[] propertySplit; + propertySplit = players.getProperty("SkillDurationList", "").split(";"); + + for(String skill : propertySplit) + { + String[] skillSplit = skill.split(","); + if(skillSplit.length != 2) + { + System.out.println("[skillDurationList]: invalid config property -> SkillDurationList \"" + skill + "\""); + } + else + { + try + { + SKILL_DURATION_LIST.put(Integer.parseInt(skillSplit[0]), Integer.parseInt(skillSplit[1])); + } + catch(NumberFormatException nfe) + { + nfe.printStackTrace(); + + if(!skill.equals("")) + { + System.out.println("[skillDurationList]: invalid config property -> SkillList \"" + skillSplit[0] + "\"" + skillSplit[1]); + } + } + } + } + } } catch (Exception e) { И players.properties: +# -------------------------------------- +# Alternative time buffs - +# -------------------------------------- +# When the reads, buff, and their duration. +# Format: id_skill time; id_skill2, time2 ;.... +# Example: +# SkillDurationList = 264,3600; 265,3600; 266,3600; 267,3600; 268,3600; \ +# 269.3600, 270.3600, 304.3600, 305.1200, 306.3600, 308.3600, 349.3600; \ +# 363.3600, 364.3600 +# Default: false +EnableModifySkillDuration = False +SkillDurationList = Позже сделаю мануал. Сразу: Где бьет ошибку на javolution.util.FastMap; , меняем на java.util.HashMap; Ну и соответственно в коде FastMap меняем на HashMap.
  23. Немного подождите пожалуйста. У меня сейчас плохое интернет соединение. Поэтому так долго все загружает.
×
×
  • Создать...