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

Nha

OVC-Dev
  • Публикаций

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

  • Посещение

  • Отзывы

    100%

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

  1. Может попробовать в combobox'e задать var без кавычек? var=profile
  2. может в L2SkillChargeDmg? В пакете gameserver.skills.l2skills
  3. Самым простым решением будет использовать LinkedHashMap Объявить как: public Map<Integer, Location> targetRecorder; Инициализировать: targetRecorder = new LinkedHashMap<>(); И вместо: int startMapPos = targetRecorder.head().getNext().getKey(); int lastMapPos = targetRecorder.tail().getPrevious().getKey(); Делать так: int startMapPos = targetRecorder.keySet().iterator().next(); int lastMapPos = startMapPos; for(int key : targetRecorder.keySet()) { lastMapPos = key; } Однако получается не самый лучший вариант по производительности, нам приходится пробегать по циклу каждый раз чтобы достать последний элемент коллекции. Есть вариант, при каждом добавлении элемента в targetRecorder сохранять "ключ" в какой-либо список, а при удалении элемента, соответственно, удалять, в таком случае не придется бегать по циклу каждый раз, для того чтобы достать последний элемент, необходимо будет просто обратится к последнему элементу списка для получения последнего ключа
  4. Something wrong with ZoneId, i think Make sure, that players teleporting in zone, whose id specified in your config file (NpcPtZoneID)
  5. + @Override + public void showChatWindow(L2PcInstance player) + { + final int npcId = Config.NPC_ID_PT_TELEPORTER; + if (npcId == npcid) + { + htmContent = "data/html/mods/PartyTeleporter/PartyTeleporter.htm"; + if (htmContent != null) + { + final NpcHtmlMessage npcHtmlMessage = new NpcHtmlMessage(getObjectId()); + npcHtmlMessage.setHtml(htmContent); + npcHtmlMessage.replace("%objectId%", String.valueOf(getObjectId())); + npcHtmlMessage.replace("%player%", player.getName());// Replaces %player% with player name on html + npcHtmlMessage.replace("%itemname%", ItemName);// Item name replace on html + npcHtmlMessage.replace("%price%", player.getParty() != null ? "" + (ItemConsumeNum * player.getParty().getMemberCount()) + "" : "0");// Price calculate replace + npcHtmlMessage.replace("%minmembers%", "" + MinPtMembers);// Mimum entry party members replace + npcHtmlMessage.replace("%allowed%", isAllowedEnter(player) ? "<font color=00FF00>allowed</font>" : "<font color=FF0000>not allowed</font>");// Condition checker replace on html + npcHtmlMessage.replace("%parties%", ShowPartiesInside ? "<font color=FFA500>Parties Inside: " + getPartiesInside(ZoneId) + "</font><br>" : "");// Parties inside + npcHtmlMessage.replace("%players%", ShowPlayersInside ? "<font color=FFA500>Players Inside: " + getPlayerInside(ZoneId) + "</font><br>" : "");// Players Inside + player.sendPacket(npcHtmlMessage); + } + + player.sendPacket(ActionFailed.STATIC_PACKET); + } + }
  6. Try setFile instead of setHtml in showChatWindow method
  7. Ах, ну да, вместо return - continue. Условие просто проверяет может ли быть скилл точен на 30 или нет. Смысл понятен
  8. Nha

    ошибка с нпц

    В скрипте DONATE_ITEM_ID следует изменить на ид предмета соответственно
  9. Просто player.isOnline() поменять на player.isOnline() == 1
  10. Насколько мне известно, точка скилла зависит от его уровня, т.е +30 Power = 130lvl, +30 Cost = 170lvl Например, по байпассу показываем список доступных для точки +30 Power for (L2Skill knownSkill : player.getAllSkills()) { if (knownSkill.getLevel() == 130) return; final L2Skill skill = SkillTable.getInstance().getInfo(knownSkill.getId(), 130); if (skill == null) return; // Показываем скилл в html или добавляем в какой-либо список // ... } И потом, просто учим player.addSkill(skill, true); Если нужно чтобы список выглядел как у НПС, смотреть в сторону пакета ExEnchantSkillList
  11. Я так понимаю, за основу брался пример обычных гвардов? По мимо создания knownList'a нужно вносить изменения еще в L2AttackableAI, т.к. у обычных гвардов, которые агрятся на мобов и пк по стандарту идет этот АИ. Также можно сделать этих гвардов на основе осадных (L2SiegeGuard), т.к. они используют свой АИ (L2SiegeGuardAI) который можно легко изменить под себя как угодно, не придется копаться в большом классе L2AttackableAI. Когда я занимался ГвЕ, выбирал 2ой вариант
  12. нужно сделать файл CapsuledItems.java (название совпадает с названием класса)
  13. эта ошибка возникает из-за того, что убран public модификатор, зачем его убирать, в смысле не запускался?
  14. Глянул сборку, набросал скрипт исходя от твоей реализации data/scripts/handler/items package handler.items; import org.apache.commons.lang3.ArrayUtils; import org.mmocore.commons.util.Rnd; import org.mmocore.gameserver.data.xml.holder.ItemHolder; import org.mmocore.gameserver.model.Playable; import org.mmocore.gameserver.model.Player; import org.mmocore.gameserver.model.items.ItemInstance; import org.mmocore.gameserver.network.l2.components.SystemMsg; import org.mmocore.gameserver.network.l2.s2c.SystemMessage; import org.mmocore.gameserver.templates.item.ItemTemplate; import org.mmocore.gameserver.templates.item.ItemTemplate.CapsuledItem; public class CapsuledItems extends ScriptItemHandler { @Override public boolean useItem(Playable playable, ItemInstance item, boolean ctrl) { if(playable == null || !playable.isPlayer()) return false; Player player = playable.getPlayer(); if(!player.getInventory().destroyItem(item, 1L)) { player.sendPacket(SystemMsg.INCORRECT_ITEM_COUNT); return false; } player.sendPacket(SystemMessage.removeItems(item.getItemId(), 1)); for (CapsuledItem ci : item.getTemplate().getCapsuledItems()) { if(Rnd.chance(ci.getChance())) { ItemInstance obtainItem = player.getInventory().addItem(ci.getItemId(), Rnd.get(ci.getMinCount(), ci.getMaxCount())); if (obtainItem != null) player.sendPacket(SystemMessage.obtainItems(obtainItem)); } } return true; } @Override public int[] getItemIds() { int[] items = new int[0]; for (ItemTemplate item : ItemHolder.getInstance().getAllTemplates()) if (item.getCapsuledItems().size() > 0) items = ArrayUtils.add(items, item.getItemId()); return items; } }
  15. Немного не то, нужен класс который реализует интерфейс IItemHandler, а ItemHandler.java это класс, который только регистрирует этот интерфейс. В общем, нужно искать/сделать класс CapsuledItem с интерфейсом IItemHandler. Что за сборка?
  16. Кинь сюда листинг, могу глянуть, если 100% уверенность, что отличий нет, может хендлер не регистрируется? или список ИД капсульных предметов в нем не полный?
  17. Ок, данные успешно считываются, но дальше? Должна быть реализация хендлера (ItemHandler), который отвечает за использование предмета, если он есть то ошибка там, а если нет, то написать его по примеру имеющихся хендлеров не сложно, если я правильно понимаю что такое "capsuled items"
  18. Видимо твой xml документ (17000-17099.xml) содержит DTD, объяви свои элементы capsuled_items, capsuled_item по аналогии, в самом начале файла в !DOCTYPE
  19. в метод onBypassFeedback надо это условие поставить, else { player.sendMessage("Локация не найдена, сообщите администратору."); } } else if (actualCommand.equalsIgnoreCase("show")) { showHtml(player, where); } else { super.onBypassFeedback(player, command); } как то вот так засунь
  20. ах, да, переменная такая уже есть private void showHtml(L2PcInstance player, String htm) { String file = "data/html/faction/" + htm + ".htm"; NpcHtmlMessage html = new NpcHtmlMessage(1); html.setFile(file); html.replace("%objectId%", String.valueOf(getObjectId())); html.replace("%charname%", player.getName()); player.sendPacket(html); }
  21. можно попробовать сделать метод по аналогии с имеющимися private void showHtml(L2PcInstance player, String html) { String file = "data/html/faction/" + html + ".htm"; NpcHtmlMessage html = new NpcHtmlMessage(1); html.setFile(file); html.replace("%objectId%", String.valueOf(getObjectId())); html.replace("%charname%", player.getName()); player.sendPacket(html); } И байпасс ловить, соответственно if (actualCommand.equalsIgnoreCase("show")) { showHtml(player, where); } И в html вызывать bypass -h npc_%objectId%_show HTML_NAME HTML_NAME - имя хтмлки в папке faction без расширения
  22. Титул меняется, а клиент об этом не знает в классе L2PcInstance должен быть метод broadcastUserInfo(), вызывай его, когда персонаж меняет/выбирает фракцию
  23. На самом деле не слишком запарно, как-то занимался подобным, чекни лс
  24. В чем смысл первого yсловия? откуда цифры 294846? Число не может быть больше 294846 и меньше 290000 boolean flag = false; public void reduceCurrentHp(double damage, L2Character attacker, boolean awake, boolean isDOT, L2Skill skill) { int min = 39000, max = 40000; if (getCurrentHp() >= min && getCurrentHp() <= max && !flag) { Announcements.getInstance().announceToAll(getName() + ": In Raid Boss to stay healthy " + (long) getCurrentHp()); flag = true; } else if (getCurrentHp() < 39000 && flag) flag = false; super.reduceCurrentHp(damage, attacker, awake, isDOT, skill); }
×
×
  • Создать...