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

Buff Summon При Появление

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

Доброй ночи.

 

Сейчас думаю как реализовать, стартовый баф у вызванных суммонов.

 

Кто нибудь это уже делал?

 

У кого нибудь есть предположения по этому поводу?

 

Я думаю это сделать через L2SkillSpawn , либо через doSpawn(boolean isSummonSpawn).

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


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

я ничего не понял, что вы хотите сдела...

Вам нужно что бы начальный баф давался и самонам?

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


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

Всегда нравятся такие посты. Хотя бы под какую сборку и с описанием поподробней. З.Ы. Реализовывал уже.

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


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

Примерно так ?

 

if (Config.NEW_PET_BUFFS)
{
for (Integer skillid : Config.PET_BUFF_LIST.keySet())
{
int skilllvl = Config.PET_BUFF_LIST.get(skillid);
L2Skill skill = SkillTable.getInstance().getInfo(skillid, skilllvl);
if (skill != null)
{
skill.getEffects(caster.getPet(), caster.getPet());
}
}
}
}

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

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


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

А, сорри, не о том подумал, я думал передача баффа хозяин<->пет.

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


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

Если при появление пет принимает баф чара?

 

Такое то же бы мне подошло :)

Был бы очень признателен

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


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

Всё равно переделать надо будет.

 

Effect[] effects = _owner.getEffectList().getAllFirstEffects();// Получаем массив эффектов хозяина.

for(Effect ef : effects)//Используем foreach для инициализации каждого эффекта из массива

{

getEffectList().addEffect(ef);//Добавляем, с использованием foreach, каждый баф из массива хозяина, в новый лист эффектов питомца.

}

_owner.sendPacket(new PetInfo(summon));//До кучи обновляем информацию о питомце.

  • Upvote 1

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


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

и все это в public L2Npc doSpawn(boolean isSummonSpawn) ?

 

Большое спасибо:)

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

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


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

именно. ну саму механику описал, надо только адаптировать под свою сборку.

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


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

Да ,еще раз спасибо. Думаю разберусь :)

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


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

Всё равно переделать надо будет.

 

Effect[] effects = _owner.getEffectList().getAllFirstEffects();// Получаем массив эффектов хозяина.

for(Effect ef : effects)//Используем foreach для инициализации каждого эффекта из массива

{

getEffectList().addEffect(ef);//Добавляем, с использованием foreach, каждый баф из массива хозяина, в новый лист эффектов питомца.

}

_owner.sendPacket(new PetInfo(summon));//До кучи обновляем информацию о питомце.

не совсем корректно

 

1. скопируются только первые эффекты из скиллов.

2. скопируются не только баффы, но и к примеру дебаффы.

3. при копировании у эффекта выставится полная продолжительность, а не текущая.

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

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


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

более корректное

 

private void cloneOwnerEffect(Effect ef)
{
	Skill skill = ef.getSkill();

	if (skill.isOffensive() || skill.isToggle() || skill.isCubicSkill())
		return;

	for (EffectTemplate et : skill.getEffectTemplates())
	{
		if (!et._applyOnSummon || et._applyOnCaster || et.isOffensive(skill.isOffensive()))
			continue;

		Effect effect = et.getEffect(new Env(this, this, skill));

		if (effect != null)
		{
			effect.setCount(ef.getCount());
			effect.setPeriod(ef.getCount() == 1 ? ef.getPeriod() - ef.getTime() : ef.getPeriod());
			getEffectList().addEffect(effect);
		}
	}
}

а в onSpawn класса Summon добавить

if (owner != null)
	for (Effect ef : owner.getEffectList().getAllEffects())
		cloneOwnerEffect(ef);

  • Upvote 1

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


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

более корректное

 

private void cloneOwnerEffect(Effect ef)
{
	Skill skill = ef.getSkill();

	if (skill.isOffensive() || skill.isToggle() || skill.isCubicSkill())
		return;

	for (EffectTemplate et : skill.getEffectTemplates())
	{
		if (!et._applyOnSummon || et._applyOnCaster || et.isOffensive(skill.isOffensive()))
			continue;

		Effect effect = et.getEffect(new Env(this, this, skill));

		if (effect != null)
		{
			effect.setCount(ef.getCount());
			effect.setPeriod(ef.getCount() == 1 ? ef.getPeriod() - ef.getTime() : ef.getPeriod());
			getEffectList().addEffect(effect);
		}
	}
}

а в onSpawn класса Summon добавить

if (owner != null)
	for (Effect ef : owner.getEffectList().getAllEffects())
		cloneOwnerEffect(ef);

 

Спасибо. Но я уже реализовал, как и хотел ранее. Что бы при появление пет получал список бафов

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


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

не совсем корректно

 

1. скопируются только первые эффекты из скиллов.

2. скопируются не только баффы, но и к примеру дебаффы.

3. при копировании у эффекта выставится полная продолжительность, а не текущая.

 

Я очень ивиняъсь, но :

1) Я дал саму идею для реализации.

2)Я не говорил списывать 1 в 1 как у меня.

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


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

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

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

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

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

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

Войти

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

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

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

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

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