KATEKATE 10 Опубликовано 9 июля, 2019 Приветствую. Снова нужна ваша помощь. Есть квест, в конце которого вызывается РБ с охраной. Юзаем строчку вызвать РБ, он появляется на мгновение и сразу исчезает но охрана остаётся, спустя время и она исчезает. Но при этом запись в БД ушла о том, что у него будет респавн через N времени. т.е. он заспавнился и сразу умер. Пыталась заспавнить с админки - не получилось. Присумонить - тоже нет - ТП сделать, сообщение (not found). Полезла в скрипты (в спойлере), нашла строчку о записи для БД , т.е. идет выполнение записи - потом сам спавн. Я не сильно шарю в скриптах, но может ли быть проблема в этом? ServerVariables.set("HekatonPrimeRespawn", System.currentTimeMillis() + HekatonPrimeRespawn); NpcInstance boss = st.addSpawn(HekatonPrime, HekatonPrimeLoc.x, HekatonPrimeLoc.y, HekatonPrimeLoc.z, HekatonPrimeLoc.h, 0, 0); boss.getMinionList().spawnMinions(); Спойлер package quests; import l2p.gameserver.instancemanager.ServerVariables; import l2p.gameserver.model.instances.NpcInstance; import l2p.gameserver.model.quest.Quest; import l2p.gameserver.model.quest.QuestState; import l2p.gameserver.serverpackets.RadarControl; import l2p.gameserver.scripts.ScriptFile; import l2p.gameserver.utils.Location; /** * @author: pchayka * @date: 17.02.2011 */ public class _307_ControlDeviceoftheGiants extends Quest implements ScriptFile { private static final int Droph = 32711; private static final int HekatonPrime = 25687; private static final int DrophsSupportItems = 14850; private static final int CaveExplorationText1Sheet = 14851; private static final int CaveExplorationText2Sheet = 14852; private static final int CaveExplorationText3Sheet = 14853; private static final long HekatonPrimeRespawn = 12 * 3600 * 1000L; private static final Location GorgolosLoc = new Location(186096, 61501, -4075, 0); private static final Location LastTitanUtenusLoc = new Location(186730, 56456, -4555, 0); private static final Location GiantMarpanakLoc = new Location(194057, 53722, -4259, 0); private static final Location HekatonPrimeLoc = new Location(192328, 56120, -7651, 0); public _307_ControlDeviceoftheGiants() { super(true); addStartNpc(Droph); addTalkId(Droph); addKillId(HekatonPrime); } @Override public String onEvent(String event, QuestState st, NpcInstance npc) { String htmltext = event; if (event.equalsIgnoreCase("droph_q307_2.htm")) { st.setCond(1); st.setState(STARTED); } else if (event.equalsIgnoreCase("loc1")) { htmltext = "droph_q307_2a_1.htm"; RadarControl rc = new RadarControl(0, 1, GorgolosLoc); st.getPlayer().sendPacket(rc); } else if (event.equalsIgnoreCase("loc2")) { htmltext = "droph_q307_2a_2.htm"; RadarControl rc = new RadarControl(0, 1, LastTitanUtenusLoc); st.getPlayer().sendPacket(rc); } else if (event.equalsIgnoreCase("loc3")) { htmltext = "droph_q307_2a_3.htm"; RadarControl rc = new RadarControl(0, 1, GiantMarpanakLoc); st.getPlayer().sendPacket(rc); } else if (event.equalsIgnoreCase("summon_rb")) { if (ServerVariables.getLong("HekatonPrimeRespawn", 0) < System.currentTimeMillis() && st.getQuestItemsCount(CaveExplorationText1Sheet) >= 1 && st.getQuestItemsCount(CaveExplorationText2Sheet) >= 1 && st.getQuestItemsCount(CaveExplorationText3Sheet) >= 1) { st.takeItems(CaveExplorationText1Sheet, 1); st.takeItems(CaveExplorationText2Sheet, 1); st.takeItems(CaveExplorationText3Sheet, 1); ServerVariables.set("HekatonPrimeRespawn", System.currentTimeMillis() + HekatonPrimeRespawn); NpcInstance boss = st.addSpawn(HekatonPrime, HekatonPrimeLoc.x, HekatonPrimeLoc.y, HekatonPrimeLoc.z, HekatonPrimeLoc.h, 0, 0); boss.getMinionList().spawnMinions(); htmltext = "droph_q307_3a.htm"; } else { htmltext = "droph_q307_2b.htm"; } } return htmltext; } @Override public String onTalk(NpcInstance npc, QuestState st) { String htmltext = "noquest"; int npcId = npc.getNpcId(); int cond = st.getCond(); if (npcId == Droph) { if (cond == 0) { if (st.getPlayer().getLevel() >= 79) { htmltext = "droph_q307_1.htm"; } else { htmltext = "droph_q307_0.htm"; st.exitCurrentQuest(true); } } else if (cond == 1) { if (st.getQuestItemsCount(CaveExplorationText1Sheet) >= 1 && st.getQuestItemsCount(CaveExplorationText2Sheet) >= 1 && st.getQuestItemsCount(CaveExplorationText3Sheet) >= 1) { if (ServerVariables.getLong("HekatonPrimeRespawn", 0) < System.currentTimeMillis()) { htmltext = "droph_q307_3.htm"; } else { htmltext = "droph_q307_4.htm"; } } else { htmltext = "droph_q307_2a.htm"; } } else if (cond == 2) { htmltext = "droph_q307_5.htm"; st.giveItems(DrophsSupportItems, 1); st.playSound(SOUND_FINISH); st.exitCurrentQuest(true); } } return htmltext; } @Override public String onKill(NpcInstance npc, QuestState st) { int npcId = npc.getNpcId(); int cond = st.getCond(); if (cond == 1 && npcId == HekatonPrime) { st.setCond(2); } return null; } @Override public void onLoad() { } @Override public void onReload() { } @Override public void onShutdown() { } } Скрипт самого босса. В нём ничего не увидела. В ХМЛ на спавн есть, нпц есть. Спойлер package ai; import l2p.gameserver.ai.Fighter; import l2p.gameserver.model.Creature; import l2p.gameserver.model.instances.NpcInstance; public class HekatonPrime extends Fighter { private long _lastTimeAttacked; public HekatonPrime(NpcInstance actor) { super(actor); } @Override protected void onEvtSpawn() { super.onEvtSpawn(); _lastTimeAttacked = System.currentTimeMillis(); } @Override protected boolean thinkActive() { if (_lastTimeAttacked + 600000 < System.currentTimeMillis()) { if (getActor().getMinionList().hasMinions()) { getActor().getMinionList().deleteMinions(); } getActor().deleteMe(); return true; } return false; } @Override protected void onEvtAttacked(Creature attacker, int damage) { _lastTimeAttacked = System.currentTimeMillis(); super.onEvtAttacked(attacker, damage); } } Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
LordWinter 78 Опубликовано 10 июля, 2019 мож аи глючит не правильно калькулирует время последней атаки? if ((_lastTimeAttacked + 600000L) < System.currentTimeMillis()) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
KATEKATE 10 Опубликовано 10 июля, 2019 24 минуты назад, LordWinter сказал: мож аи глючит не правильно калькулирует время последней атаки? if ((_lastTimeAttacked + 600000L) < System.currentTimeMillis()) Последняя запись о нём : 1562718032325 т.е. это среда, 10 июля 2019 г., 3:20:32.325 т.е. 8 часов назад, собстна когда я проверяла Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
KATEKATE 10 Опубликовано 10 июля, 2019 2 часа назад, LordWinter сказал: мож аи глючит не правильно калькулирует время последней атаки? if ((_lastTimeAttacked + 600000L) < System.currentTimeMillis()) Не помогло ( Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Formatter 14 Опубликовано 10 июля, 2019 14 hours ago, KATEKATE said: В ХМЛ на спавн есть, нпц есть. В спавне(xml) его не должно быть. 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
KATEKATE 10 Опубликовано 10 июля, 2019 2 минуты назад, Formatter сказал: В спавне(xml) его не должно быть. Я его закоментировала. Тоже не помогло. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
LordWinter 78 Опубликовано 10 июля, 2019 вырежи для начала AI закомпилься без него и тестани, сразу станет ясно копать в AI или в квесте или ядре. Чудес не бывает. Команда на удаление я вижу ток в AI. Может еще где-то есть?? 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
KATEKATE 10 Опубликовано 10 июля, 2019 (изменено) 1 час назад, LordWinter сказал: вырежи для начала AI закомпилься без него и тестани, сразу станет ясно копать в AI или в квесте или ядре. Чудес не бывает. Команда на удаление я вижу ток в AI. Может еще где-то есть?? Спасибо, что помогаете Я забыла отписаться, что пробовала так . В ГС - [10.07.19 21:09:37:710] ERROR npc.NpcTemplate: Not found ai class for ai: HekatonPrime. NpcId: 25687 Призвать можно и он не удаляется. Сорри, что сразу не уточнила, думаю это бы облегчило помощь Не просто чудеса, это феерия! я не понимаю... Изменено 10 июля, 2019 пользователем KATEKATE Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
lvlkoo 190 Опубликовано 10 июля, 2019 Брейкпоинт на delete\unspawn и далее по стеку смотрите кто его деспавнит, а там уже можно будет разобраться почему 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
LordWinter 78 Опубликовано 10 июля, 2019 (изменено) 51 минуту назад, KATEKATE сказал: Спасибо, что помогаете Я забыла отписаться, что пробовала так . В ГС - [10.07.19 21:09:37:710] ERROR npc.NpcTemplate: Not found ai class for ai: HekatonPrime. NpcId: 25687 Призвать можно и он не удаляется. Сорри, что сразу не уточнила, думаю это бы облегчило помощь Не просто чудеса, это феерия! я не понимаю... Раз проблема точно в АЙ значит видимо не успевает время за калькулировать и удаляется могу предложить попробовать немного подкорректировать: @Override protected void onEvtSpawn() { _lastTimeAttacked = System.currentTimeMillis(); super.onEvtSpawn(); } Если не поможет то на крайняк можно ваще убрать функцию удаления босса удалив: @Override protected boolean thinkActive() { if (_lastTimeAttacked + 600000 < System.currentTimeMillis()) { if (getActor().getMinionList().hasMinions()) { getActor().getMinionList().deleteMinions(); } getActor().deleteMe(); return true; } return false; } но это как говорится крайняя мера Изменено 10 июля, 2019 пользователем LordWinter 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
KATEKATE 10 Опубликовано 10 июля, 2019 27 минут назад, lvlkoo сказал: Брейкпоинт на delete\unspawn и далее по стеку смотрите кто его деспавнит, а там уже можно будет разобраться почему Я к сожалению не пользуюсь эклипсом Можно как то по другому это делать? Или стоит выучить прогу? 9 минут назад, LordWinter сказал: Раз проблема точно в АЙ значит видимо не успевает время за калькулировать и удаляется могу предложить попробовать немного подкорректировать: @Override protected void onEvtSpawn() { _lastTimeAttacked = System.currentTimeMillis(); super.onEvtSpawn(); } Это помогло. Спасибо Вам. Всё работает как часы. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
LordWinter 78 Опубликовано 10 июля, 2019 всегда пожалуйста =) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты