Всем привет. Исходники - эпилог, l2p.
В общем появилось желание сделать не большой данж из эпидоса. За основу взял закена. В л2п подобных исходах спавн в рефлекшене сделан через xml, т.е. там указываешь id отражения и id моба с локацией. Так вот, взял я значит кролика (25604, при убийстве которого запускается эпидос сам) и прописал в xml, все отлично, кролик появляется в отражении, после смерти запускает эпидоса, но сам эпидос стартует уже не в отражении, а в обычном своем месте, и как следствие - персонаж остается в отражении, а споры ползти начинуют по стандарту без отражения)
Как заставить спавнить этих спор именно в том отражении, где был убит кролик?
Аи кролика слишком простое:
public class MutatedElpy extends Fighter
{
public MutatedElpy(L2Character actor)
{
super(actor);
}
@Override
protected void onEvtDead(L2Character killer)
{
EpidosManager.getInstance().tryStartEpidos();
super.onEvtDead(killer);
}
}
А вот сам tryStartEpidos:
public void tryStartEpidos(final L2NpcInstance elpy)
{
final GArray<L2Player> players = core_naia_zone.getInsidePlayers();
if(players.size() < 1)
return;
DoorTable.getInstance().getDoor(NAIA_DOOR).closeMe();
core_naia_zone.setActive(true);
if(mutated_elpy != null)
{
mutated_elpy.despawnAll();
mutated_elpy.stopRespawn();
}
L2NpcInstance npc;
for(int i = 0; i < 10; i++)
{
npc = sporesSpawn[4].spawnOne();
npc.getAI().startAITask();
}
}
На сколько я понял ,мне нужно ковырять sporesSpawn :
public EpidosManager()
{
sporesSpawn = new L2Spawn[SPORES_IDS.length];
_state = new EpicBossState(25609);
if(!_state.isNotSpawn())
startIntervalEndTask();
_log.info("EpicBossManager: Epidos state - " + _state.getState() + ".");
if(_state.isInterval())
_log.info("EpicBossManager: Epidos next spawn - " + Util.datetimeFormatter.format(_state.getRespawnDate()) + ".");
L2NpcTemplate template;
L2Spawn spawn;
for(byte index = 0; index < SPORES_IDS.length; index++)
try
{
template = NpcTable.getTemplate(SPORES_IDS[index]);
if(template == null)
{
_log.warning("EpidosManager: mob with ID = " + SPORES_IDS[index] + " can't be spawned!");
return;
}
spawn = new L2Spawn(template);
spawn.setAmount(1);
spawn.setLoc(SPAWN_LOCATION);
spawn.setRespawnDelay(0);
spawn.stopRespawn();
sporesSpawn[index] = spawn;
}
catch(final Exception e)
{
_log.log(Level.WARNING, "EpidosManager: error spawn ", e);
}
template = NpcTable.getTemplate(25604);
try
{
mutated_elpy = new L2Spawn(template);
mutated_elpy.setAmount(1);
mutated_elpy.setLoc(MUTATED_ELPY_LOCATIONS[Rnd.get(MUTATED_ELPY_LOCATIONS.length)]);
mutated_elpy.setRespawnDelay(120, 60);
mutated_elpy.setRespawnTime(0);
}
catch(final Exception e)
{
_log.log(Level.WARNING, "EpidosManager: fail spawn Mutated Elpy: ", e);
}
}
Сделал в ReflectionTable новое отражение - EPIDOS, пытался в спавне добавить : spawn.setReflection(ReflectionTable.EPIDOS); но без результатно. Подскажите, как передать от элпи (кролика) отражение, в котором он находится и как потом заспавнить эти споры в этом же отражении? Буду очень благодарен.