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

(c4) Enchant Effect Armor - как поменять эффект?

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

Доброе утро!:)

На данный момент эта штука дает визуальных эффект на персонаже (такой как на новогодней елки)

package main.engine.mods;

import l2j.gameserver.data.ArmorSetsData;
import l2j.gameserver.model.actor.instance.L2PcInstance;
import l2j.gameserver.model.holder.ArmorSetHolder;
import l2j.gameserver.model.items.enums.ParpedollType;
import l2j.gameserver.network.external.server.MagicSkillUse;
import main.data.ConfigData;
import main.engine.AbstractMod;
import main.holders.objects.CharacterHolder;
import main.holders.objects.NpcHolder;
import main.holders.objects.PlayerHolder;
import main.util.Util;

/**
 * Class responsible for giving the character a "custom" effect by having all their set enchanted to xxx
 * @author fissban
 */
public class EnchantAbnormalEffectArmor extends AbstractMod
{
	/**
	 * Constructor
	 */
	public EnchantAbnormalEffectArmor()
	{
		registerMod(ConfigData.ENABLE_EnchantAbnormalEffectArmor);
	}
	
	@Override
	public void onModState()
	{
		//
	}
	
	@Override
	public void onEnchant(PlayerHolder ph)
	{
		checkSetEffect(ph);
	}
	
	@Override
	public void onEquip(CharacterHolder ph)
	{
		checkSetEffect(ph);
	}
	
	@Override
	public void onUnequip(CharacterHolder ph)
	{
		checkSetEffect(ph);
	}
	
	@Override
	public boolean onExitWorld(PlayerHolder ph)
	{
		cancelTimer("customEffectSkill", null, ph);
		
		return super.onExitWorld(ph);
	}
	
	@Override
	public void onTimer(String timerName, NpcHolder npc, PlayerHolder ph)
	{
		switch (timerName)
		{
			case "customEffectSkill":
			{
				if (ph != null)
				{
					ph.getInstance().broadcastPacket(new MagicSkillUse(ph.getInstance(), ph.getInstance(), 7029, 1, 1000, 1000));
				}
				break;
			}
		}
	}
	
	/** MISC --------------------------------------------------------------------------------------------- */
	
	private void checkSetEffect(CharacterHolder character)
	{
		if (!Util.areObjectType(L2PcInstance.class, character))
		{
			return;
		}
		
		var ph = (PlayerHolder) character;
		
		// We review the positions of the set of the character.
		if (checkItems(ph))
		{
			startTimer("customEffectSkill", 4000, null, ph, true);
		}
		else
		{
			// if the character has the effect would Cancelled
			cancelTimer("customEffectSkill", null, ph);
		}
	}
	
	/**
	 * It checks the character:<br>
	 * <li>Keep all equipment + ENCHANT_EFFECT_LVL except the coat and jewelry</li>
	 * <li>You have equipped a complete set according to "ArmorSetsTable"</li> <br>
	 * @param  ph
	 * @param  paperdoll
	 * @return
	 */
	private boolean checkItems(PlayerHolder ph)
	{
		var inv = ph.getInstance().getInventory();
		
		// Checks if player is wearing a chest item
		var chestItem = inv.getPaperdollItem(ParpedollType.CHEST);
		if (chestItem == null)
		{
			return false;
		}
		
		// checks if there is armorset for chest item that player worns
		var armorSet = ArmorSetsData.getInstance().getArmorSets(chestItem.getId());
		if (armorSet == null)
		{
			return false;
		}
		
		if (!armorSet.containAll(ph.getInstance()))
		{
			return false;
		}
		
		// check enchant lvl
		if (!checkEnchant(ph, ParpedollType.CHEST, armorSet))
		{
			return false;
		}
		if (!checkEnchant(ph, ParpedollType.LEGS, armorSet))
		{
			return false;
		}
		if (!checkEnchant(ph, ParpedollType.HEAD, armorSet))
		{
			return false;
		}
		if (!checkEnchant(ph, ParpedollType.GLOVES, armorSet))
		{
			return false;
		}
		if (!checkEnchant(ph, ParpedollType.FEET, armorSet))
		{
			return false;
		}
		if (!checkEnchant(ph, ParpedollType.HEAD, armorSet))
		{
			return false;
		}
		
		return true;
	}
	
	private static boolean checkEnchant(PlayerHolder ph, ParpedollType type, ArmorSetHolder armorSet)
	{
		var item = ph.getInstance().getInventory().getPaperdollItem(type);
		
		if (item == null)
		{
			return true;
		}
		if (armorSet.containItem(type, item.getId()) && item.getEnchantLevel() >= ConfigData.ENCHANT_EFFECT_LVL)
		{
			return true;
		}
		
		return false;
	}
}

Можете пожалуйста подсказать как за мест этого эффекта сделать прибавку +1 к DEX\STR  ?)

 Что то типа этого... 

     <add order="0x40" stat="STAT_DEX" val="1"/>
     <add order="0x40" stat="STAT_STR" val="1"/>

только я не знаю как это в java делается.. методом "тыка" за 4 часа ничегошеньки не получилось :unknw:

*делается для L2jAdmins r131

 

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

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


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

вот же изврат - я многое видел, но такое...

З.Ы. ТС и не поулчится у тебя ничего - тут у тебя чисто показывает анимацию каста скилла игроку и окружающим, но не вызывает сам скилл. хочешь доп бонусов за заточку сета - давай/забирай нужную пассивку персонажу

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

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


Ссылка на сообщение
Поделиться на другие сайты
7 minutes ago, Gaikotsu said:

хочешь доп бонусов за заточку сета - давай/забирай нужную пассивку персонажу

Хорошо, спасибо!

А такое реализовано уже где-то? можно "подхватить" от куда-то?) или нужно самому с нуля делать? 

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


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

Хорошо, спасибо!

А такое реализовано уже где-то? можно "подхватить" от куда-то?) или нужно самому с нуля делать? 

Добавляеш сету скил, а уже самому скилу, даеш стати. Все очень просто.

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


Ссылка на сообщение
Поделиться на другие сайты
20 minutes ago, LetsVirt said:

Добавляеш сету скил, а уже самому скилу, даеш стати. Все очень просто.

А можно подробней пожалуйста, как скил будет взаимодействовать с точкой сета? чет я не могу сообразить..

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


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

А можно подробней пожалуйста, как скил будет взаимодействовать с точкой сета? чет я не могу сообразить..

пример:

 

<item id='350' name="Dwarven Scale Mail">
<for>
<add val='95' order='0x10' stat='pDef'/>
<enchant val='0' order='0x0C' stat='pDef'/>
<enchantadd val='10' order='0x0C' stat='runSpd'/>
</for>
</item>

за каждий ап точки на +1, добавляет +10 к бегу 

  • Like 1

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


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

и на кой ему твой пример, если ему требуется давать бонусы от заточки всего сета, а не от отдельных частей брони

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

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


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

и на кой ему твой пример, если ему требуется давать бонусы от заточки всего сета, а не от отдельных частей брони

дает целому сету скил, и скилу дает знаячение ето. 

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


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

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

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

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

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


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

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

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

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

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

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

Войти

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

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

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

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

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