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

Сундук-Героя

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

Привет =)
Ребята подскажите пожалуйста как сделать сундук героя на aCIs
конкретней: 1 итем при нажатие которого будет появляться в инвентаре определенное количество итемов!
пример фул плейт сет + ц пушка + бижа ц.
для чего нужно. для того что бы давать подарочный сундук героя при смене 1-2 профы. с определенными итемами.
P.s пробывал пример сундука рыбалки. но там шансово дает какойто 1 итем. а мне надо 100% и несколько итемов

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


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

Привет =)

Ребята подскажите пожалуйста как сделать сундук героя на aCIs

конкретней: 1 итем при нажатие которого будет появляться в инвентаре определенное количество итемов!

пример фул плейт сет + ц пушка + бижа ц.

для чего нужно. для того что бы давать подарочный сундук героя при смене 1-2 профы. с определенными итемами.

P.s пробывал пример сундука рыбалки. но там шансово дает какойто 1 итем. а мне надо 100% и несколько итемов

Ищи метод onUseItem, по идеи должен быть вынесен в ивент двиг, для запила через скрипт. Регистрируем и уже небходимое прописываем для выдачи

 

На ПВ у меня сделано по такому принципу

 

 

	public void giveItems(L2PcInstance player, int boxId, int[][] itemList)
	{
		for (int[] items : itemList)
		{
			int itemId = items[0];
			int itemCount = items[1];
			
			player.giveItem(itemId, itemCount);
		}
		
		player.destroyItemByItemId("StartBox", boxId, 1, player, true);
		
	}
  • Upvote 1

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


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

 

Ищи метод onUseItem, по идеи должен быть вынесен в ивент двиг, для запила через скрипт. Регистрируем и уже небходимое прописываем для выдачи

 

На ПВ у меня сделано по такому принципу

 

 

Спасибо за уделеное время. сейчас буду пробывать..

Еще есть у кого то предложения ?

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


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

 

Ищи метод onUseItem, по идеи должен быть вынесен в ивент двиг, для запила через скрипт. Регистрируем и уже небходимое прописываем для выдачи

 

На ПВ у меня сделано по такому принципу

 

 

	public void giveItems(L2PcInstance player, int boxId, int[][] itemList)
	{
		for (int[] items : itemList)
		{
			int itemId = items[0];
			int itemCount = items[1];
			
			player.giveItem(itemId, itemCount);
		}
		
		player.destroyItemByItemId("StartBox", boxId, 1, player, true);
		
	}

увы такого метода нету... 

 

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


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

увы такого метода нету... 

 

Этот метод я сам написал для выдачи предметов, я говорил искать onUseItem или схожий с ним, читайте внимательней

  • Upvote 1

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


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

Привет =)

Ребята подскажите пожалуйста как сделать сундук героя на aCIs

конкретней: 1 итем при нажатие которого будет появляться в инвентаре определенное количество итемов!

пример фул плейт сет + ц пушка + бижа ц.

для чего нужно. для того что бы давать подарочный сундук героя при смене 1-2 профы. с определенными итемами.

P.s пробывал пример сундука рыбалки. но там шансово дает какойто 1 итем. а мне надо 100% и несколько итемов

 
public class YouClassName implements IItemHandler
{
	@Override
	public void useItem(L2Playable playable, ItemInstance item, boolean forceUse)
	{
        // выдача итемов
    }
    
    
	public static void main(String[] args)
	{
		ItemHandler.getInstance().registerItemHandler(new YouClassName());
	}
}

к "сундуку" дописываем:

 <set name="handler" val="YouClassName" />

В scripts.xml прописываем путь к скрипту:

<script path="scripts.blabla.YouClassName"/>
Изменено пользователем CalypsoToolz

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


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

пример

не для акиса, но по аналогии написать не проблема

package handler.items;

import l2p.gameserver.enums.ClassLevel;
import l2p.gameserver.model.Player;
import l2p.gameserver.model.items.ItemInstance;
import l2p.gameserver.utils.ItemUtils;

public class FatedSupportBox extends SimpleItemHandler
{
	private static final int[] _itemIds = new int[] { 37314 };

	@Override
	protected boolean useItemImpl(Player player, ItemInstance item, boolean ctrl)
	{
		if (player.getLevel() < 38 || player.getClassId().getClassLevel() == ClassLevel.FIRST)
		{
			player.sendMessage("Доступно только для персонажей 38 и выше уровня, прошедших 1-ю смену профессии или 1-е освобождение.");
			return false;
		}

		int[] list = new int[0];

		if (player.getLevel() < 85)
		{
			switch (player.getClassId())
			{
				case KNIGHT:
				case PALADIN:
				case DARK_AVENGER:
				case ELVEN_KNIGHT:
				case TEMPLE_KNIGHT:
				case SWORDSINGER:
				case PALUS_KNIGHT:
				case SHILLIEN_KNIGHT:
				case BLADEDANCER:
				case PHOENIX_KNIGHT:
				case HELL_KNIGHT:
				case EVAS_TEMPLAR:
				case SWORD_MUSE:
				case SHILLIEN_TEMPLAR:
				case SPECTRAL_DANCER:
					list = new int[] { 37315, 37322, 37329, 37336, 37343 };
					break;

				case WIZARD:
				case SORCERER:
				case NECROMANCER:
				case WARLOCK:
				case CLERIC:
				case BISHOP:
				case PROPHET:
				case ELVEN_WIZARD:
				case SPELLSINGER:
				case ELEMENTAL_SUMMONER:
				case ORACLE:
				case ELDER:
				case DARK_WIZARD:
				case SPELLHOWLER:
				case PHANTOM_SUMMONER:
				case SHILLIEN_ORACLE:
				case SHILLIEN_ELDER:
				case ARCHMAGE:
				case SOULTAKER:
				case ARCANA_LORD:
				case CARDINAL:
				case HIEROPHANT:
				case MYSTIC_MUSE:
				case ELEMENTAL_MASTER:
				case EVAS_SAINT:
				case STORM_SCREAMER:
				case SPECTRAL_MASTER:
				case SHILLIEN_SAINT:
					list = new int[] { 37316, 37323, 37330, 37337, 37344 };
					break;

				case WARRIOR:
				case GLADIATOR:
				case WARLORD:
				case ARTISAN:
				case WARSMITH:
				case DUELIST:
				case DREADNOUGHT:
				case MAESTRO:
					list = new int[] { 37317, 37324, 37331, 37338, 37345 };
					break;

				case ROGUE:
				case TREASURE_HUNTER:
				case HAWKEYE:
				case ELVEN_SCOUT:
				case PLAIN_WALKER:
				case SILVER_RANGER:
				case ASSASSIN:
				case ABYSS_WALKER:
				case PHANTOM_RANGER:
				case SCAVENGER:
				case BOUNTY_HUNTER:
				case SAGITTARIUS:
				case ADVENTURER:
				case WIND_RIDER:
				case MOONLIGHT_SENTINEL:
				case GHOST_HUNTER:
				case GHOST_SENTINEL:
				case FORTUNE_SEEKER:
					list = new int[] { 37318, 37325, 37332, 37339, 37346 };
					break;

				case TROOPER:
				case WARDER:
				case BERSERKER:
				case M_SOUL_BREAKER:
				case F_SOUL_BREAKER:
				case ARBALESTER:
				case DOOMBRINGER:
				case M_SOUL_HOUND:
				case F_SOUL_HOUND:
				case TRICKSTER:
				case INSPECTOR:
				case JUDICATOR:
					list = new int[] { 37319, 37326, 37333, 37340, 37347 };
					break;

				case ORC_RAIDER:
				case DESTROYER:
				case ORC_MONK:
				case TYRANT:
				case TITAN:
				case GRAND_KHAVATARI:
					list = new int[] { 37320, 37327, 37334, 37341, 37348 };
					break;

				case ORC_SHAMAN:
				case OVERLORD:
				case WARCRYER:
				case DOMINATOR:
				case DOOMCRYER:
					list = new int[] { 37321, 37328, 37335, 37342, 37349 };
					break;

				case CLOUD_BREAKER:
				case STRATOMANCER:
					list = new int[] { 26229, 26231, 26233, 26235, 26237 };
					break;

				case MARAUDER:
				case RIPPER:
					list = new int[] { 26230, 26232, 26234, 26236, 26238 };
					break;
			}
		}
		else
		{
			switch (player.getClassId())
			{
				case SIGEL_KNIGHT:
				case SIGEL_PHOENIX_KNIGHT:
				case SIGEL_HELL_KNIGHT:
				case SIGEL_EVAS_TEMPLAR:
				case SIGEL_SHILLIEN_TEMPLAR:
					list = new int[] { 37350 };
					break;

				case TYRR_WARRIOR:
				case TYRR_DUELIST:
				case TYRR_DREADNOUGHT:
				case TYRR_TITAN:
				case TYRR_GRAND_KHAVATARI:
				case TYRR_MAESTRO:
				case TYRR_DOOMBRINGER:
					list = new int[] { 37351 };
					break;

				case OTHELL_ROGUE:
				case OTHELL_ADVENTURER:
				case OTHELL_WIND_RIDER:
				case OTHELL_GHOST_HUNTER:
				case OTHELL_FORTUNE_SEEKER:
					list = new int[] { 37352 };
					break;

				case YUL_ARCHER:
				case YUL_SAGITTARIUS:
				case YUL_MOONLIGHT_SENTINEL:
				case YUL_GHOST_SENTINEL:
				case YUL_TRICKSTER:
					list = new int[] { 37353 };
					break;

				case FEOH_WIZARD:
				case FEOH_ARCHMAGE:
				case FEOH_SOULTAKER:
				case FEOH_MYSTIC_MUSE:
				case FEOH_STORM_SCREAMER:
				case FEOH_SOUL_HOUND:
					list = new int[] { 37354 };
					break;

				case WYNN_SUMMONER:
				case WYNN_ARCANA_LORD:
				case WYNN_ELEMENTAL_MASTER:
				case WYNN_SPECTRAL_MASTER:
					list = new int[] { 37355 };
					break;

				case AEORE_HEALER:
				case AEORE_CARDINAL:
				case AEORE_EVAS_SAINT:
				case AEORE_SHILLIEN_SAINT:
					list = new int[] { 37356 };
					break;

				case ISS_ENCHANTER:
				case ISS_HIEROPHANT:
				case ISS_SWORD_MUSE:
				case ISS_SPECTRAL_DANCER:
				case ISS_DOMINATOR:
				case ISS_DOOMCRYER:
					list = new int[] { 37357 };
					break;

				case SAYHA_SEER:
					list = new int[] { 26239 };
					break;

				case EVISCERATOR:
					list = new int[] { 26240 };
					break;
			}
		}

		if (list.length == 0)
		{
			player.sendMessage("Для вашего уровня и текущей профессии не нашлось подходящего набора экипировки. Получите следующую профессию и попробуйте после этого снова.");
			return false;
		}

		if (!useItem(player, item, 1))
			return false;

		for (int itemId : list)
			ItemUtils.addItem(player, itemId, 1, true);

		return true;
	}

	@Override
	public int[] getItemIds()
	{
		return _itemIds;
	}
}

 

  • Upvote 1

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


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

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

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

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

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

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

Войти

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

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

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

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

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