1d3x 379 Опубликовано 10 июля, 2021 (изменено) Хай гайсня, понимаю что прошу многого(или нет), но сам я не осилил вопрос заключается в следующем - на моем проекте используются абсолютно все новые пассивные скиллы (учатся за определенную валюту) и порой есть нужда на переобучение пассивок (они очень сильно влияют на билды игроков) в общем - может ли ктонить помочь сделать простенький скрипт: нпц с удалением пассивок выборочно с наградой(предмет) при удалении скилла и желательно чтобы я мог сам вписывать ИДшники скиллов которые можно удалять. Мне не срочно, если вдруг кому нечего будет делать - прошу о помощи а да забыл - High Five / SunRise Изменено 10 июля, 2021 пользователем 1d3x Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Gaikotsu 620 Опубликовано 10 июля, 2021 (изменено) Ты даже не указал сборку. И вряд ли кто будет с подобным возиться за "спасибки", хотя в целом дело достаточно простое - под свою сборку, если бы вдруг такое потребовалось, я бы такое в принципе, в простейшем варианте набросал за пару часов. Изменено 10 июля, 2021 пользователем Gaikotsu Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
1d3x 379 Опубликовано 10 июля, 2021 Только что, Gaikotsu сказал: Ты даже не указал сборку. И вряд ли кто будет с подобным возиться за "спасибки", хотя в целом дело достаточно простое - под свою сборку, если бы вдруг такое потребовалось, я бы такое в принципе набросал за пару часов. c бабками райт нау туго, я же и написал об этом в первой строке. если бы было хотя бы чето похожее кроме админки - но я перерыл весь инет и нигде ниче нет, с нуля я не напишу, а адаптировать с админки там столько шабления что проще вручную админом заходить и скидывать пасивки игрокам Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
PidorSidor 0 Опубликовано 10 июля, 2021 Пиши в лс Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Gaikotsu 620 Опубликовано 10 июля, 2021 (изменено) Я ж говорю - простейшая реализация делается за кратчайшее время... Чисто для примера - набросано меньше чем за час, притом в этот час входит и проверка работоспособности и т.д. Спойлер Спойлер package handler.bypass; import org.apache.commons.lang3.ArrayUtils; import l2p.gameserver.model.Player; import l2p.gameserver.model.instances.NpcInstance; import l2p.gameserver.model.skills.Skill; import l2p.gameserver.network.components.SystemMsg; import l2p.gameserver.utils.HtmlUtils; import l2p.gameserver.utils.ItemUtils; import l2p.gameserver.utils.ParseUtils; import l2p.gameserver.utils.Strings; import l2p.gameserver.utils.Util; /** * @author Gaikotsu */ public class RemoveSkills extends ScriptBypassHandler { private static final String[] _commandList = new String[] { "showRemoveSkillList", "removeSkill" }; private static final int[] _removeItem = { 57, 1_000_000 }; // предмет, забираемый при удалении умения (выставить 0, если ничего не надо удалять) private static final int[] _rewardItem = { 5575, 1_000 }; // предмет, выдаваемый при удалении (выставить 0, если ничего не надо выдавать) private static final String _removeItemStr = _removeItem[0] > 0 ? Strings.concat(Util.formatPrice(_removeItem[1]), " ", HtmlUtils.getItemName(_removeItem[0])) : Strings.EMPTY; private static final String _rewardItemStr = _removeItem[0] > 0 ? Strings.concat(Util.formatPrice(_rewardItem[1]), " ", HtmlUtils.getItemName(_rewardItem[0])) : Strings.EMPTY; // список ид умений, которые можно удалять private static final int[] _skills = { 10001, 10002, 10003, 10004, 10005, }; @Override public void onBypassFeedback(NpcInstance npc, Player player, String command, String[] params) { if (command.equalsIgnoreCase("showRemoveSkillList")) { StringBuilder sb = Strings.start(0); Skill skill = null; for (int id : _skills) { skill = player.getKnownSkill(id); if (skill == null) continue; Strings.append(sb, "<a action=\"bypass -h npc_%objectId%_removeSkill " + id + "\">", skill.getName(), "</a><br1>"); } if (sb.length() < 1) Strings.append(sb, "<font color=FF0000>Нет умений для удаления</font>"); npc.showChatWindow(player, 1, "%skill_list%", sb.toString(), "%remove_item%", _removeItemStr, "%reward_item%", _rewardItemStr); Strings.recycle(sb); } else if (command.startsWith("removeSkill")) { if (params.length < 2) return; int id = ParseUtils.parseValue(params[1], -1); if (!ArrayUtils.contains(_skills, id)) return; Skill skill = player.getKnownSkill(id); if (skill == null) return; if (_removeItem[0] > 0) { if (ItemUtils.getItemCount(player, _removeItem[0]) < _removeItem[1]) { player.sendPacket(SystemMsg.YOU_DO_NOT_HAVE_ENOUGH_REQUIRED_ITEMS); return; } ItemUtils.removeItem(player, _removeItem[0], _removeItem[1]); } player.removeSkill(skill, true); if (_rewardItem[0] > 0) ItemUtils.addItem(player, _rewardItem[0], _rewardItem[1]); npc.showChatWindow(player, 2, "%skill_name%", skill.getName(), "%reward_item%", _rewardItemStr); } } @Override public String[] getBypasses() { return _commandList; } } Спойлер 0: --- %npcname%: Чего изволите? <a action="bypass -h npc_%objectId%_showRemoveSkillList">Хочу удалить умения</a> --- 1: --- %npcname%: Для удаления умения вам придется заплатить *%remove_item%*, но взамен вы получите *%reward_item%*. Итак, что конкретно вы хотите удалить? %skill_list% --- 2: --- %npcname%: Вы удалили *%skill_name%* и получаете за это *%reward_item%*. <a action="bypass -h npc_%objectId%_showRemoveSkillList">Удалить другое умение</a> Код под овероподобные сборки, под свое адаптировать надеюсь умений хватит - я помогать не буду. Мое дело было подсказать как это можно сделать, а дальше уж сам Изменено 10 июля, 2021 пользователем Gaikotsu 1 2 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Matey 229 Опубликовано 10 июля, 2021 как вариант можно реализовать по аналогии со сбросом умений саб класса Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты