BorlandC 0 Опубликовано 23 июля, 2015 Всем привет. Исходники - эпилог, 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);но без результатно. Подскажите, как передать от элпи (кролика) отражение, в котором он находится и как потом заспавнить эти споры в этом же отражении? Буду очень благодарен. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Naik 419 Опубликовано 24 июля, 2015 Перед нпс.гетАи, нпсу и присваивать рефлекшон, а затем спаунить. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Gaikotsu 620 Опубликовано 24 июля, 2015 (изменено) или спавнить через текущий рефлекшн, методом addSpawnWithoutRespawn или addSpawnWithRespawn - зависит от того, нужен ли респ моба после его смерти правда не помнб - были ли уже в фениксе эти методы в Reflection иил нет. Изменено 24 июля, 2015 пользователем Gaikotsu Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты