Nha
OVC-Dev-
Публикаций
47 -
Зарегистрирован
-
Посещение
-
Отзывы
100%
-
Может попробовать в combobox'e задать var без кавычек? var=profile
-
может в L2SkillChargeDmg? В пакете gameserver.skills.l2skills
- 1 ответ
-
- 1
-
Самым простым решением будет использовать 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 сохранять "ключ" в какой-либо список, а при удалении элемента, соответственно, удалять, в таком случае не придется бегать по циклу каждый раз, для того чтобы достать последний элемент, необходимо будет просто обратится к последнему элементу списка для получения последнего ключа
- 3 ответа
-
- 1
-
Something wrong with ZoneId, i think Make sure, that players teleporting in zone, whose id specified in your config file (NpcPtZoneID)
-
+ @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); + } + }
-
Try setFile instead of setHtml in showChatWindow method
-
Abstragetic left Positive feedback for Nha
-
Ах, ну да, вместо return - continue. Условие просто проверяет может ли быть скилл точен на 30 или нет. Смысл понятен
-
В скрипте DONATE_ITEM_ID следует изменить на ид предмета соответственно
- 2 ответа
-
- 1
-
Просто player.isOnline() поменять на player.isOnline() == 1
-
Насколько мне известно, точка скилла зависит от его уровня, т.е +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
-
Я так понимаю, за основу брался пример обычных гвардов? По мимо создания knownList'a нужно вносить изменения еще в L2AttackableAI, т.к. у обычных гвардов, которые агрятся на мобов и пк по стандарту идет этот АИ. Также можно сделать этих гвардов на основе осадных (L2SiegeGuard), т.к. они используют свой АИ (L2SiegeGuardAI) который можно легко изменить под себя как угодно, не придется копаться в большом классе L2AttackableAI. Когда я занимался ГвЕ, выбирал 2ой вариант
-
нужно сделать файл CapsuledItems.java (название совпадает с названием класса)
-
эта ошибка возникает из-за того, что убран public модификатор, зачем его убирать, в смысле не запускался?
-
Глянул сборку, набросал скрипт исходя от твоей реализации 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; } }
-
Немного не то, нужен класс который реализует интерфейс IItemHandler, а ItemHandler.java это класс, который только регистрирует этот интерфейс. В общем, нужно искать/сделать класс CapsuledItem с интерфейсом IItemHandler. Что за сборка?