Mizuwokiru 181 Posted May 23, 2014 ERROR Scripts: Failed running quests.Dominion_KillSpecialUnitQuest.onLoad() java.lang.InstantiationException Если загружаеться через джарку ошибка есть, если через откритый .java то проблемы нет Кинь исходник класса сюда. Share this post Link to post Share on other sites
gigilo1968 46 Posted May 23, 2014 вот весь класс public abstract class Dominion_KillSpecialUnitQuest extends Quest implements ScriptFile { private final ClassId[] _classIds; public Dominion_KillSpecialUnitQuest() { super(PARTY_ALL); _classIds = getTargetClassIds(); DominionSiegeRunnerEvent runnerEvent = EventHolder.getInstance().getEvent(EventType.MAIN_EVENT, 1); for(ClassId c : _classIds) runnerEvent.addClassQuest(c, this); } protected abstract NpcString startNpcString(); protected abstract NpcString progressNpcString(); protected abstract NpcString doneNpcString(); protected abstract int getRandomMin(); protected abstract int getRandomMax(); protected abstract ClassId[] getTargetClassIds(); @Override public String onKill(Player killed, QuestState qs) { Player player = qs.getPlayer(); if(player == null) return null; DominionSiegeEvent event1 = player.getEvent(DominionSiegeEvent.class); if(event1 == null) return null; DominionSiegeEvent event2 = killed.getEvent(DominionSiegeEvent.class); if(event2 == null || event2 == event1) return null; player.sendMessage("Dominion_KillSpecialUnitQuest"); if(!ArrayUtils.contains(_classIds, killed.getClassId())) return null; player.sendMessage("Dominion_KillSpecialUnitQuest"); int max_kills = qs.getInt("max_kills"); Party party = player.getParty(); try { if(party != null) { for(Player member : party.getPartyMembers()) { QuestState st = member.getQuestState(getClass()); if(max_kills == 0) { st.setState(STARTED); st.setCond(1); max_kills = Rnd.get(getRandomMin(), getRandomMax()); st.set("max_kills", max_kills); st.set("current_kills", 1); member.sendPacket(new ExShowScreenMessage(startNpcString(), 2000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER, true, false, String.valueOf(max_kills))); } else { if(st != null) { int current_kills; if(st.getInt("current_kills") > 0) current_kills = st.getInt("current_kills") + 1; else current_kills = 1; if(current_kills >= max_kills) { event1.addReward(member, DominionSiegeEvent.STATIC_BADGES, 15); st.setState(COMPLETED); st.addExpAndSp(2670000, 105000); st.exitCurrentQuest(true); member.sendPacket(new ExShowScreenMessage(doneNpcString(), 2000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER, true, false)); } else { st.set("current_kills", current_kills); member.sendPacket(new ExShowScreenMessage(progressNpcString(), 2000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER, true, false, String.valueOf(max_kills), String.valueOf(current_kills))); } } } } } else { if(max_kills == 0) { qs.setState(STARTED); qs.setCond(1); max_kills = Rnd.get(getRandomMin(), getRandomMax()); qs.set("max_kills", max_kills); qs.set("current_kills", 1); player.sendPacket(new ExShowScreenMessage(startNpcString(), 2000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER, true, false, String.valueOf(max_kills))); } else { int current_kills = qs.getInt("current_kills") + 1; if(current_kills >= max_kills) { event1.addReward(player, DominionSiegeEvent.STATIC_BADGES, 15); qs.setState(COMPLETED); qs.addExpAndSp(534000, 51000); qs.exitCurrentQuest(true); player.sendPacket(new ExShowScreenMessage(doneNpcString(), 2000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER, true, false)); } else { qs.set("current_kills", current_kills); player.sendPacket(new ExShowScreenMessage(progressNpcString(), 2000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER, true, false, String.valueOf(max_kills), String.valueOf(current_kills))); } } } } catch(Exception e) { } return null; } @Override public boolean canAbortByPacket() { return false; } @Override public void onLoad() { } @Override public void onReload() { } @Override public void onShutdown() { } } Share this post Link to post Share on other sites
Mizuwokiru 181 Posted May 23, 2014 (edited) вот весь класс public abstract class Dominion_KillSpecialUnitQuest extends Quest implements ScriptFile { private final ClassId[] _classIds; public Dominion_KillSpecialUnitQuest() { super(PARTY_ALL); _classIds = getTargetClassIds(); DominionSiegeRunnerEvent runnerEvent = EventHolder.getInstance().getEvent(EventType.MAIN_EVENT, 1); for(ClassId c : _classIds) runnerEvent.addClassQuest(c, this); } protected abstract NpcString startNpcString(); protected abstract NpcString progressNpcString(); protected abstract NpcString doneNpcString(); protected abstract int getRandomMin(); protected abstract int getRandomMax(); protected abstract ClassId[] getTargetClassIds(); @Override public String onKill(Player killed, QuestState qs) { Player player = qs.getPlayer(); if(player == null) return null; DominionSiegeEvent event1 = player.getEvent(DominionSiegeEvent.class); if(event1 == null) return null; DominionSiegeEvent event2 = killed.getEvent(DominionSiegeEvent.class); if(event2 == null || event2 == event1) return null; player.sendMessage("Dominion_KillSpecialUnitQuest"); if(!ArrayUtils.contains(_classIds, killed.getClassId())) return null; player.sendMessage("Dominion_KillSpecialUnitQuest"); int max_kills = qs.getInt("max_kills"); Party party = player.getParty(); try { if(party != null) { for(Player member : party.getPartyMembers()) { QuestState st = member.getQuestState(getClass()); if(max_kills == 0) { st.setState(STARTED); st.setCond(1); max_kills = Rnd.get(getRandomMin(), getRandomMax()); st.set("max_kills", max_kills); st.set("current_kills", 1); member.sendPacket(new ExShowScreenMessage(startNpcString(), 2000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER, true, false, String.valueOf(max_kills))); } else { if(st != null) { int current_kills; if(st.getInt("current_kills") > 0) current_kills = st.getInt("current_kills") + 1; else current_kills = 1; if(current_kills >= max_kills) { event1.addReward(member, DominionSiegeEvent.STATIC_BADGES, 15); st.setState(COMPLETED); st.addExpAndSp(2670000, 105000); st.exitCurrentQuest(true); member.sendPacket(new ExShowScreenMessage(doneNpcString(), 2000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER, true, false)); } else { st.set("current_kills", current_kills); member.sendPacket(new ExShowScreenMessage(progressNpcString(), 2000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER, true, false, String.valueOf(max_kills), String.valueOf(current_kills))); } } } } } else { if(max_kills == 0) { qs.setState(STARTED); qs.setCond(1); max_kills = Rnd.get(getRandomMin(), getRandomMax()); qs.set("max_kills", max_kills); qs.set("current_kills", 1); player.sendPacket(new ExShowScreenMessage(startNpcString(), 2000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER, true, false, String.valueOf(max_kills))); } else { int current_kills = qs.getInt("current_kills") + 1; if(current_kills >= max_kills) { event1.addReward(player, DominionSiegeEvent.STATIC_BADGES, 15); qs.setState(COMPLETED); qs.addExpAndSp(534000, 51000); qs.exitCurrentQuest(true); player.sendPacket(new ExShowScreenMessage(doneNpcString(), 2000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER, true, false)); } else { qs.set("current_kills", current_kills); player.sendPacket(new ExShowScreenMessage(progressNpcString(), 2000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER, true, false, String.valueOf(max_kills), String.valueOf(current_kills))); } } } } catch(Exception e) { } return null; } @Override public boolean canAbortByPacket() { return false; } @Override public void onLoad() { } @Override public void onReload() { } @Override public void onShutdown() { } } Хм, найдите класс, в котором загружаются все скрипты (геймсервер.ява по идее), найдите там метод с их загрузкой и выводом исключения InstantiationException, ну и вывода его в консоль, типа System.out.println("ERROR " + path + ": Scripts: Failed running " + meth + "\n" + exception); А дальше по логике - смотрите на что ссылается данный эксепшн (блок try). Edited May 23, 2014 by DiQuero Share this post Link to post Share on other sites
Дмитрий_Романов 1 Posted July 22, 2017 UP есть решение ? Share this post Link to post Share on other sites
triny 0 Posted May 17 Все так же, как то перестал обращать внимание на ошибку и просто играл, дальше, мучился менял, в скрипте, писал удалял, выходит там весь скрипт неправильный, сам квест с нуля надо переписывать, а это уже к тому кто его писал, понимаю, что чужой труд тыбзить нельзя Share this post Link to post Share on other sites