Virt 7 Опубликовано 13 декабря, 2012 Здравствуйте. К сожалению, возникли трудности по коду, не могу найти нужный код=)) Сборка l2p epilogue Скил Day of Doom: кидаем купол, кто находится под ним получают отрицательный эффект, если во время действия купола я выхожу из под него, то отрицательный эффект пропадает. Вопрос: в какой класс нужно смотреть, что бы при выходе из под купола отрицательный не проподал? P.S. for(L2Character cha : L2World.getAroundCharacters(symbol, getSkill().getSkillRadius(), 200)) - не то. Спасибо. Если что-то даст, то вот код EffectSymbol.java package l2p.gameserver.skills.effects; import java.util.logging.Logger; import l2p.gameserver.ai.CtrlEvent; import l2p.gameserver.cache.Msg; import l2p.gameserver.geodata.GeoEngine; import l2p.gameserver.model.L2Character; import l2p.gameserver.model.L2Effect; import l2p.gameserver.model.L2Player; import l2p.gameserver.model.L2RoundTerritoryWithSkill; import l2p.gameserver.model.L2Skill; import l2p.gameserver.model.L2Spawn; import l2p.gameserver.model.L2World; import l2p.gameserver.model.instances.L2NpcInstance; import l2p.gameserver.serverpackets.MagicSkillLaunched; import l2p.gameserver.skills.Env; import l2p.gameserver.tables.NpcTable; import l2p.gameserver.templates.L2NpcTemplate; import l2p.util.GArray; import l2p.util.Location; public final class EffectSymbol extends L2Effect { private static final Logger log = Logger.getLogger(EffectSymbol.class.getName()); L2RoundTerritoryWithSkill _territory; L2NpcInstance _symbol; public EffectSymbol(Env env, EffectTemplate template) { super(env, template); } @Override public boolean checkCondition() { if(getSkill().getTargetType() != L2Skill.SkillTargetType.TARGET_SELF) { log.severe("Symbol skill with target != self, id = " + getSkill().getId()); return false; } L2Skill skill = getSkill().getFirstAddedSkill(); if(skill == null) { log.severe("Not implemented symbol skill, id = " + getSkill().getId()); return false; } return super.checkCondition(); } @Override public void onStart() { super.onStart(); L2Skill skill = getSkill().getFirstAddedSkill(); // Затычка, в клиенте они почему-то не совпадают. skill.setIsMagic(getSkill().isMagic()); Location loc = _effected.getLoc(); if(_effected.isPlayer() && ((L2Player) _effected).getGroundSkillLoc() != null) { loc = ((L2Player) _effected).getGroundSkillLoc(); ((L2Player) _effected).setGroundSkillLoc(null); } _territory = new L2RoundTerritoryWithSkill(_effected.getObjectId(), loc.x, loc.y, _skill.getSkillRadius(), loc.z - 200, loc.z + 200, _effector, skill); L2World.addTerritory(_territory); L2NpcTemplate template = NpcTable.getTemplate(_skill.getSymbolId()); try { L2Spawn spawn = new L2Spawn(template); spawn.setLoc(loc); spawn.setReflection(_effected.getReflection().getId()); spawn.setAmount(1); spawn.init(); spawn.stopRespawn(); _symbol = spawn.getLastSpawn(); } catch(Exception e) { e.printStackTrace(); } for(L2Character cha : L2World.getAroundCharacters(_symbol, _skill.getSkillRadius() + 200, 400)) cha.updateTerritories(); } @Override public void onExit() { //super.onExit(); L2World.removeTerritory(_territory); if(_symbol == null) return; for(L2Character cha : L2World.getAroundCharacters(_symbol, _skill.getSkillRadius() + 200, 400)) cha.updateTerritories(); _symbol.deleteMe(); _symbol = null; } @Override public boolean onActionTime() { if(_template._counter <= 1) return false; L2Character effector = getEffector(); L2Skill skill = getSkill().getFirstAddedSkill(); L2NpcInstance symbol = _symbol; double mpConsume = getSkill().getMpConsume(); if(effector == null || skill == null || symbol == null) return false; if(mpConsume > effector.getCurrentMp()) { effector.sendPacket(Msg.NOT_ENOUGH_MP); return false; } effector.reduceCurrentMp(mpConsume, effector); // Использовать разрешено только скиллы типа TARGET_ONE for(L2Character cha : L2World.getAroundCharacters(symbol, getSkill().getSkillRadius(), 200)) if(cha.getEffectList().getEffectsBySkill(skill) == null && skill.checkTarget(effector, cha, cha, false, false) == null) { if(skill.isOffensive() && !GeoEngine.canSeeTarget(symbol, cha, false)) continue; GArray targets = new GArray(1); targets.add(cha); effector.callSkill(skill, targets, false); effector.broadcastPacket(new MagicSkillLaunched(_symbol.getObjectId(), getSkill().getDisplayId(), getSkill().getDisplayLevel(), cha, true)); cha.getAI().notifyEvent(CtrlEvent.EVT_ATTACKED, effector, 1); } return true; } } xml скила <skill id="1422" levels="1" name="Day of Doom"> <set name="target" val="TARGET_SELF" /> <set name="operateType" val="OP_ACTIVE" /> <set name="skillType" val="BUFF" /> <set name="symbolId" val="13028" /> <set name="addSkills" val="5145;1" /> <set name="skillRadius" val="200" /> <set name="itemConsumeId" val="8876" /> <set name="itemConsumeCount" val="1" /> <set name="isReuseDelayPermanent" val="true" /> <set name="cancelable" val="false" /> <cond msg="You cannot use that skill in a Grand Olympiad Games match."> <not> <zone type="OlympiadStadia" /> </not> </cond> <for> <effect count="1" name="Symbol" time="7" val="0" /> </for> </skill> <skill id="5145" levels="1" name="Day of Doom"> <set name="target" val="TARGET_ONE" /> <set name="skillType" val="DEBUFF" /> <set name="operateType" val="OP_ACTIVE" /> <set name="isSaveable" val="true" /> <for> <effect count="1" name="Buff" time="120" val="0"> <mul order="0x30" stat="runSpd" val="0.8" /> <mul order="0x30" stat="pAtk" val="0.5" /> <mul order="0x30" stat="pDef" val="0.5" /> <mul order="0x30" stat="regHp" val="0.2" /> <mul order="0x30" stat="mpConsum" val="3.0" /> <mul order="0x30" stat="mpConsumePhysical" val="3.0" /> <mul order="0x30" stat="mpDanceConsume" val="3.0" /> </effect> </for> </skill> 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Rattyx 16 Опубликовано 27 декабря, 2012 у меня тоже много вопросов по ядру,) Походу брат тут все для себя знания держут и не делятся с нубами как мы(( Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Relvl 26 Опубликовано 28 декабря, 2012 1) Информация - это один из самых ценных товаров в мире. Если бы кто-то знал решение конкретной проблемы (под конкретные исходники) - то бесплатно мало кто помог бы, если бы Вы вои наработки и мысли не приложили. 2) Вы не указали ни исходников, не ревизию. 3) "Помогите разобраться" и "Сделайте за меня" - разные понятия. Бесплатно работать ни кто не будет. Думаю, теперь понятно? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
xblx 8 Опубликовано 2 января, 2013 (изменено) L2RoundTerritoryWithSkill - тут Изменено 2 января, 2013 пользователем xblx Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты