TpaMjkee 128 Опубликовано 8 июля, 2013 Всем добрый день. Собственно пишу своего баффера, и тут появилась проблема. Реализую чтобы при нажатии на кнопку, баффались те иды баффоф, которые я прописал. Собственно сделал, но проблема в другом. В игре жму - баффнуть, баффает, но по 2-а раза. В начале: public static final int[] BUFF_ALL = {11520, 11521}; Код: else if(command.startsWith("allbuff")) { for(int skillid : BUFF_ALL) { Skill skill = SkillHolder.getInstance().getInfo(skillid, SkillHolder.getInstance().getMaxLevel(skillid)); skill.getEffects(player, player, false, false); for(EffectTemplate et : skill.getEffectTemplates()) { Env env = new Env(player, player, skill); Effect effect = et.getEffect(env); //Делаем время баффа на 1-н час. effect.setPeriod(60 * 60 * 1000); player.getEffectList().addEffect(effect); player.updateEffectIcons(); } } player.sendMessage("Вы баффнули себе все баффы!"); } Прописал 2-а баффа, каждый бафф баффается по 2-а раза, соответственно всего баффается 4-е раза, хотя должно быть 2-а. Т.е каждый по 1-му. Что не так сделал? Сборка L2Phoenix GoD. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Gaikotsu 620 Опубликовано 8 июля, 2013 ну так судя по коду ты сначала все эффекты из скилла накладываешь на цель, а потом пройдясь по списку эффектов в скилле, еще раз добавляешь эти эффекты на ту же цель. проще говоря - убери это skill.getEffects(player, player, false, false); Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
TpaMjkee 128 Опубликовано 8 июля, 2013 ну так судя по коду ты сначала все эффекты из скилла накладываешь на цель, а потом пройдясь по списку эффектов в скилле, еще раз добавляешь эти эффекты на ту же цель. проще говоря - убери это skill.getEffects(player, player, false, false); Если я уберу эту строчку, то вызова не будет. Пробывал. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Gaikotsu 620 Опубликовано 8 июля, 2013 (изменено) значит допиши getEffects так, чтобы можно было задавать модификатор времени действия, если хочется чтобы можно былол задавать время ну и дальше идущий цикл наложения эффектов можешь выкидывать за ненадобностью. вот я к примеру для подобного завел отдельный метод, когда мне потребовалось это в баффере: само наложение баффа на цель private static final void buffSkill(final Player player, final Skill skill, final double timeMod, final boolean broadcast) { skill.getEffectsSelf(player, skill, timeMod); if (broadcast) player.broadcastPacket(new MagicSkillUse(player, player, skill.getDisplayId(), skill.getDisplayLevel(), 0, 0)); if (player.getSummonList().getPet() != null) { PetInstance pet = player.getSummonList().getPet(); skill.getEffectsSelf(pet, skill, timeMod); if (broadcast) pet.broadcastPacketToOthers(new MagicSkillUse(pet, pet, skill.getDisplayId(), skill.getDisplayLevel(), 0, 0)); } if (!player.getSummonList().getServitors().isEmpty()) for (Summon summon : player.getSummonList().getServitors()) { skill.getEffectsSelf(summon, skill, timeMod); if (broadcast) summon.broadcastPacketToOthers(new MagicSkillUse(summon, summon, skill.getDisplayId(), skill.getDisplayLevel(), 0, 0)); } } метод, накладывающий эффект public void getEffectsSelf(final Creature effected, Skill skill, double timeMod) { for (EffectTemplate et : skill.getEffectTemplates()) { Env env = new Env(effected, effected, skill); Effect effect = et.getEffect(env); effect.setPeriod((long) (effect.getDuration() * timeMod)); effected.getEffectList().addEffect(effect); } } Изменено 8 июля, 2013 пользователем Gaikotsu Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
TpaMjkee 128 Опубликовано 8 июля, 2013 значит допиши getEffects так, чтобы можно было задавать модификатор времени действия, если хочется чтобы можно былол задавать время ну и дальше идущий цикл налоджения эффектов можешь выкидывать за ненадобностью. Пример можете дать если не сложно? А то не вдупляю )) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
TpaMjkee 128 Опубликовано 8 июля, 2013 а, вы имеете в виду что цикл for выкинуть? а как я сделаю вместо этого? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
TpaMjkee 128 Опубликовано 8 июля, 2013 У кого ещё есть варианты? Если убрать цикл for то все нормально, но мне надо чтобы баффалось несколько баффов одним запросом. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты