Перейти к содержанию
Авторизация  
1d3x

НПЦ Удаление пассивных скиллов

Рекомендуемые сообщения

Хай гайсня, понимаю что прошу многого(или нет), но сам я не осилил

вопрос заключается в следующем - на моем проекте используются абсолютно все новые пассивные скиллы (учатся за определенную валюту) и порой есть нужда на переобучение пассивок (они очень сильно влияют на билды игроков) 

в общем - может ли ктонить помочь сделать простенький скрипт: нпц с удалением пассивок выборочно с наградой(предмет) при удалении скилла и желательно чтобы я мог сам вписывать ИДшники скиллов которые можно удалять. Мне не срочно, если вдруг кому нечего будет делать - прошу о помощи :yahoo:

а да забыл - High Five / SunRise

Изменено пользователем 1d3x

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ты даже не указал сборку.

И вряд ли кто будет с подобным возиться за "спасибки", хотя в целом дело достаточно простое - под свою сборку, если бы вдруг такое потребовалось, я бы такое в принципе, в простейшем варианте набросал за пару часов.

Изменено пользователем Gaikotsu

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Только что, Gaikotsu сказал:

Ты даже не указал сборку.

И вряд ли кто будет с подобным возиться за "спасибки", хотя в целом дело достаточно простое - под свою сборку, если бы вдруг такое потребовалось, я бы такое в принципе набросал за пару часов.

c бабками райт нау туго, я же и написал об этом в первой строке. если бы было хотя бы чето похожее кроме админки - но я перерыл весь инет и нигде ниче нет, с нуля я не напишу, а адаптировать с админки там столько шабления что проще вручную админом заходить и скидывать пасивки игрокам

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я ж говорю - простейшая реализация делается за кратчайшее время...

Чисто для примера - набросано меньше чем за час, притом в этот час входит и проверка работоспособности и т.д. :)

Спойлер

122872617153d431d4cca6ea824ce4e5.jpg

9d3504ce86253a66399c1c8405229ab0.jpg

964c0d204829bc8a6fca1cd92e22481a.jpg

Спойлер

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>

 

Код под овероподобные сборки, под свое адаптировать надеюсь умений хватит - я помогать не буду. Мое дело было подсказать как это можно сделать, а дальше уж сам :)

Изменено пользователем Gaikotsu
  • Like 1
  • Upvote 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

как вариант можно реализовать по аналогии со сбросом умений  саб класса

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...