12-13-2012, 09:58 AM
Здравствуйте.
К сожалению, возникли трудности по коду, не могу найти нужный код=))
Сборка l2p epilogue
Скил Day of Doom: кидаем купол, кто находится под ним получают отрицательный эффект, если во время действия купола я выхожу из под него, то отрицательный эффект пропадает.
Вопрос: в какой класс нужно смотреть, что бы при выходе из под купола отрицательный не проподал?
Спасибо.
Если что-то даст, то вот код EffectSymbol
К сожалению, возникли трудности по коду, не могу найти нужный код=))
Сборка l2p epilogue
Скил Day of Doom: кидаем купол, кто находится под ним получают отрицательный эффект, если во время действия купола я выхожу из под него, то отрицательный эффект пропадает.
Вопрос: в какой класс нужно смотреть, что бы при выходе из под купола отрицательный не проподал?
Спасибо.
Если что-то даст, то вот код EffectSymbol
EffectSymbol.java
PHP код:
<?php
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 = null;
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();
if (_symbol != null && _symbol.isVisible())
_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<L2Character> targets = new GArray<L2Character>(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 скилов
PHP код:
<?php
<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>