bodyan2011 49 Опубликовано 18 июля, 2013 (изменено) Есть эффект DispelEffects(кенсел): public class EffectDispelEffects extends Effect{private final String _dispelType;private final int _cancelRate;private final String[] _stackTypes;private final int _negateCount;/** cancelRate is skill dependant constant: Cancel - 25 Touch of Death/Insane Crusher - 25 Mage/Warrior Bane - 80 Mass Mage/Warrior Bane - 40* Infinity Spear - 10*/public EffectDispelEffects(Env env, EffectTemplate template){super(env, template);_dispelType = template.getParam().getString("dispelType", "");_cancelRate = template.getParam().getInteger("cancelRate", 0);_negateCount = template.getParam().getInteger("negateCount", 5);_stackTypes = template.getParam().getString("negateStackTypes", "").split(";");}@Overridepublic void onStart(){List<Effect> _musicList = new ArrayList<Effect>();List<Effect> _buffList = new ArrayList<Effect>();// H5 - triggerable skills go first// Getting effect listsfor (Effect e : _effected.getEffectList().getAllEffects())if (_dispelType.equals("cancellation")){if (!e.isOffensive() && !e.getSkill().isToggle() && e.isCancelable())if (e.getSkill().isMusic())_musicList.add(e);else_buffList.add(e);}else if (_dispelType.equals("bane")){if (!e.isOffensive() && ArrayUtils.contains(_stackTypes, e.getStackType()) && e.isCancelable())_buffList.add(e);}else if (_dispelType.equals("cleanse"))if (e.isOffensive() && e.isCancelable())_buffList.add(e);// Reversing lists and adding to a new listList<Effect> _effectList = new ArrayList<Effect>();Collections.reverse(_musicList);Collections.reverse(_buffList);_effectList.addAll(_musicList);_effectList.addAll(_buffList);if (_effectList.isEmpty())return;double prelimChance, eml, dml, cancel_res_multiplier = _effected.calcStat(Stats.CANCEL_RESIST, 0, null, null); // constant// resistance// is// applied// for// whole// cycle// of// cancellationint buffTime, negated = 0;for (Effect e : _effectList)if (negated < _negateCount){eml = e.getSkill().getMagicLevel();dml = getSkill().getMagicLevel() - (eml == 0 ? _effected.getLevel() : eml); // FIXME:// no// effect// can// have// have// mLevel// ==// 0.// Tofix// in// skilldatabuffTime = e.getTimeLeft();cancel_res_multiplier = 1 - cancel_res_multiplier * .01;prelimChance = (2. * dml + _cancelRate + buffTime / 120) * cancel_res_multiplier; // retail// formulaif (Rnd.chance(calcSkillChanceLimits(prelimChance, _effector.isPlayable()))){negated++;_effected.sendPacket(new SystemMessage2(SystemMsg.THE_EFFECT_OF_S1_HAS_BEEN_REMOVED).addSkillName(e.getSkill().getId(), e.getSkill().getLevel()));e.exit();}}}private double calcSkillChanceLimits(double prelimChance, boolean isPlayable){if (_dispelType.equals("bane")){if (prelimChance < 40)return 40;else if (prelimChance > 90)return 90;}else if (_dispelType.equals("cancellation")){if (prelimChance < 25)return 25;else if (prelimChance > 75)return 75;}else if (_dispelType.equals("cleanse"))return _cancelRate;return prelimChance;}@Overrideprotected boolean onActionTime(){return false;}} Подскажите, как сделать аналогичный эффект, только чтобы кенселило не все скиллы, а скиллы, у которых присутствует определенный эффект? Изменено 18 июля, 2013 пользователем bodyan2011 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Evolution 243 Опубликовано 18 июля, 2013 а проверкой никак? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ewantesse 15 Опубликовано 18 июля, 2013 Попробуй скопировать скилл "Cancel WindWalk" и т.п. Там в xml должны быть указаны эффекты и тд. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
bodyan2011 49 Опубликовано 18 июля, 2013 Попробуй скопировать скилл "Cancel WindWalk" и т.п. Там в xml должны быть указаны эффекты и тд. какой ID? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
bodyan2011 49 Опубликовано 18 июля, 2013 клоуз тему, решили. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты