MeRDox 60 Опубликовано 10 сентября, 2015 (изменено) PWSoft . При наличии определенного итема(итемов) выводит соответствующий HTML, при нажатии на NPC. Пример: собрал 5000 черепов скилетов, выводится HTML что вы можете отдать их, и забрать награду, собрал 300 перьеве ангелов тоже самое...типа как квест, только без взятие квеста. Где его прописать лучше? в Quest, AI, Item это java или же лучше на Питоне? может у кого-то что-то подобное есть? Изменено 10 сентября, 2015 пользователем Merdox Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
(D)uality 700 Опубликовано 10 сентября, 2015 PWSoft . При наличии определенного итема(итемов) выводит соответствующий HTML, при нажатии на NPC. Пример: собрал 5000 черепов скилетов, выводится HTML что вы можете отдать их, и забрать награду, собрал 300 перьеве ангелов тоже самое...типа как квест, только без взятие квеста. Где его прописать лучше? в Quest, AI, Item это java или же лучше на Питоне? может у кого-то что-то подобное есть? Делается на чем удобнее, можно делать вообще любую папку. Подобное уже делали, где при нажатии проверяло и забирало итем. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Naik 419 Опубликовано 10 сентября, 2015 Если с определённых мобов падает итем, то я бы сделал АИ, в котором после убийства идет дроп, а потом проверка на количество итемов. Правда без ХТМЛ, т.к. особо не вижу смысла в нем для такой фичи. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
MeRDox 60 Опубликовано 10 сентября, 2015 Если с определённых мобов падает итем, то я бы сделал АИ, в котором после убийства идет дроп, а потом проверка на количество итемов. Правда без ХТМЛ, т.к. особо не вижу смысла в нем для такой фичи. Это я к примеру написал так, не обязательно нужно убийство моба, нужно именно с html. Вроде бы когда подумал об этом, думал та не тяжело, а потом запутался сам во всем этом. есть пример квеста на крылья, ну и там тоже запутался, чтобы убрать сам квест. Нужно это все без взятие квеста Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
MeRDox 60 Опубликовано 10 сентября, 2015 Делается на чем удобнее, можно делать вообще любую папку. Подобное уже делали, где при нажатии проверяло и забирало итем. тоже видел что-то похожее, ну не могу вспомнить где и когда. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
MeRDox 60 Опубликовано 10 сентября, 2015 может в кого-то похожее есть? или подскажет кто-то как сделать) буду очень благодарен) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Naik 419 Опубликовано 10 сентября, 2015 может в кого-то похожее есть? или подскажет кто-то как сделать) буду очень благодарен) Написать новый инстанс для НПСа и засунуть в ядро. Самый легкий способ=) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
(D)uality 700 Опубликовано 10 сентября, 2015 Написать новый инстанс для НПСа и засунуть в ядро. Самый легкий способ=) Почему бы просто не сделать проверку на наличие итемов и запись в quest_global_data ? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Naik 419 Опубликовано 10 сентября, 2015 Почему бы просто не сделать проверку на наличие итемов и запись в quest_global_data ? Смысл? Сделать новый инстанс намного легче, удобнее и надёжнее. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
se1dhe 501 Опубликовано 10 сентября, 2015 Да все же просто. При обращении к НПСу проверяем itemIdCount, и если равен заданному - забираем и выдаем нужный итем. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Artur_xD 403 Опубликовано 10 сентября, 2015 ТС, если Вы хотите сделать чтобы люди не брали квест, тогда какой вообще смысл в этом? Напишите аи для дропа ( чтобы при превышению 300 или 5000 опр. итемов - не дропалось больше ), а награду в обычном мультиселле...Я один не понимаю зачем все усложнять? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
MeRDox 60 Опубликовано 11 сентября, 2015 Кто знает, как заставить его работать? а то уже голова болит от этого package quests.Master; import net.sf.l2j.gameserver.model.actor.instance.L2NpcInstance; import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance; import net.sf.l2j.gameserver.model.quest.QuestState; import net.sf.l2j.gameserver.model.quest.jython.QuestJython; public class Master extends QuestJython { //NPC private final static int npcId = 77777; //Farm private final static int EPIC_COIN = 11030; private final static int MEGA_COIN = 10007; //Newbie private final static int NEWBIE = 11031; //Wings private final static int MASTER_1 = 7090; private final static int MASTER_2 = 7091; private final static int MASTER_3 = 7092; private final static int MASTER_4 = 7093; private final static int MASTER_5 = 7094; private int item0; private int item1; private int item2; private int item3; private int item4; private int item5; public Master(int questId, String name, String descr) { super(questId, name, descr, 1); addStartNpc(npcId); addTalkId(npcId); } public String onTalk(L2NpcInstance npc, L2PcInstance talker) { String htmltext = "<html><body>You are either not on a quest that involves this NPC, or you don't meet this NPC's minimum quest requirements.</body></html>"; int currNpcId = npc.getNpcId(); item0 = talker.getInventory().getInventoryItemCount(NEWBIE,0); item1 = talker.getInventory().getInventoryItemCount(MASTER_1,0); item2 = talker.getInventory().getInventoryItemCount(MASTER_2,0); item3 = talker.getInventory().getInventoryItemCount(MASTER_3,0); item4 = talker.getInventory().getInventoryItemCount(MASTER_4,0); item5 = talker.getInventory().getInventoryItemCount(MASTER_5,0); if(currNpcId == npcId) { if (item0 > 0) htmltext = "77777-3.htm"; else if (item1 > 0) htmltext = "77777-5.htm"; else if (item2 > 0) htmltext = "77777-7.htm"; else if (item3 > 0) htmltext = "77777-9.htm"; else if (item4 > 0) htmltext = "77777-11.htm"; else if (item5 > 0) htmltext = "77777-13.htm"; } return htmltext; } public String onEvent(String event, QuestState st) { L2PcInstance player = st.getPlayer(); if (event.equalsIgnoreCase("start")) { event = "77777-2.htm"; } else if (event.equalsIgnoreCase("sobral")) { item0 = player.getInventory().getInventoryItemCount(NEWBIE,0); item1 = player.getInventory().getInventoryItemCount(EPIC_COIN,0); if (item1 < 100 || item0 < 1) event = "77777-no1.htm"; else { st.takeItems(EPIC_COIN,500); st.takeItems(NEWBIE,1); st.giveItems(MASTER_1,1); event = "77777-4.htm"; } } if (event.equalsIgnoreCase("start_2")) { event = "77777-30.htm"; } else if (event.equalsIgnoreCase("sobral_2")) { item1 = player.getInventory().getInventoryItemCount(EPIC_COIN,0); item2 = player.getInventory().getInventoryItemCount(MASTER_1,0); if (item1 < 500 || item2 < 1) event = "77777-no1.htm"; else { st.takeItems(EPIC_COIN,2000); st.takeItems(MASTER_1,1); st.giveItems(MASTER_2,1); event = "77777-6.htm"; } } if (event.equalsIgnoreCase("start_3")) { event = "77777-31.htm"; } else if (event.equalsIgnoreCase("sobral_3")) { item1 = player.getInventory().getInventoryItemCount(EPIC_COIN,0); item2 = player.getInventory().getInventoryItemCount(MASTER_2,0); if (item1 < 2000 || item2 < 1) event = "77777-no1.htm"; else { st.takeItems(EPIC_COIN,5000); st.takeItems(MASTER_2,1); st.giveItems(MASTER_3,1); event = "77777-8.htm"; } } if (event.equalsIgnoreCase("start_4")) { event = "77777-32.htm"; } else if (event.equalsIgnoreCase("sobral_4")) { item1 = player.getInventory().getInventoryItemCount(EPIC_COIN,0); item2 = player.getInventory().getInventoryItemCount(MASTER_3,0); if (item1 < 5000 || item2 < 1) event = "77777-no1.htm"; else { st.takeItems(EPIC_COIN,10000); st.takeItems(MASTER_3,1); st.giveItems(MASTER_4,1); event = "77777-10.htm"; } } if (event.equalsIgnoreCase("start_5")) { event = "77777-33.htm"; } else if (event.equalsIgnoreCase("sobral_5")) { item2 = player.getInventory().getInventoryItemCount(MASTER_4,0); item3 = player.getInventory().getInventoryItemCount(MEGA_COIN,0); if (item2 < 1 || item3 < 1) event = "77777-no1.htm"; else { st.takeItems(MEGA_COIN,1); st.takeItems(MASTER_4,1); st.giveItems(MASTER_5,1); event = "77777-12.htm"; } } else if (event.equalsIgnoreCase("otmena")) { event = "77777-otmena.htm"; st.takeItems(MASTER_1,1); st.takeItems(MASTER_2,1); st.takeItems(MASTER_3,1); st.takeItems(MASTER_4,1); st.takeItems(MASTER_5,1); } return event; } public static void main(String[] args) { new Master(-1, "Master", "quests"); } } Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
(D)uality 700 Опубликовано 11 сентября, 2015 Кто знает, как заставить его работать? а то уже голова болит от этого Он так то к NPC привязан. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
MeRDox 60 Опубликовано 11 сентября, 2015 Он так то к NPC привязан. в смысле, отвязать от НПЦ? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
(D)uality 700 Опубликовано 11 сентября, 2015 в смысле, отвязать от НПЦ? По другому сам скрипт надо делать. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
MeRDox 60 Опубликовано 11 сентября, 2015 а что не так в нем? а то он вроде бы начал работать, но после нескольких изменений перестал работать Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
DonJuan 9 Опубликовано 11 сентября, 2015 а что не так в нем? а то он вроде бы начал работать, но после нескольких изменений перестал работать Глянь ошибку в логе Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
MeRDox 60 Опубликовано 11 сентября, 2015 Глянь ошибку в логе ошибок никаких нету, так как исправлял все ошибки по мере их появления. а так как недостаточно знаний имею в этой сфере, тому не могу особо разобраться в чем проблема. нету захвата этих формул if (event.equalsIgnoreCase("start")), else if (event.equalsIgnoreCase("sobral")), и тд то есть или самые формулы не правильные или как-то по другому написать надо. Может есть понимает в этом, тыкнет меня лицом на правильный путь. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
LifeGame32 312 Опубликовано 11 сентября, 2015 PWSoft . При наличии определенного итема(итемов) выводит соответствующий HTML, при нажатии на NPC. Пример: собрал 5000 черепов скилетов, выводится HTML что вы можете отдать их, и забрать награду, собрал 300 перьеве ангелов тоже самое...типа как квест, только без взятие квеста. Где его прописать лучше? в Quest, AI, Item это java или же лучше на Питоне? может у кого-то что-то подобное есть? В квесте добавить событие addFirstTalkId(int npcId) и переопределить метод onFirstTalk . Квест ид установить -1 кажется. /** * This function is called whenever a player talks to an NPC that is registered for the quest.<br> * That is, it is triggered from the very first click on the NPC, not via another dialog.<br> * <b>Note 1:</b><br> * Each NPC can be registered to at most one quest for triggering this function.<br> * In other words, the same one NPC cannot respond to an "onFirstTalk" request from two different quests.<br> * Attempting to register an NPC in two different quests for this function will result in one of the two registration being ignored.<br> * <b>Note 2:</b><br> * Since a Quest link isn't clicked in order to reach this, a quest state can be invalid within this function.<br> * The coder of the script may need to create a new quest state (if necessary).<br> * <b>Note 3:</b><br> * The returned value of onFirstTalk replaces the default HTML that would have otherwise been loaded from a sub-folder of DatapackRoot/game/data/html/.<br> * If you wish to show the default HTML, within onFirstTalk do npc.showChatWindow(player) and then return ""<br> * @param npc this parameter contains a reference to the exact instance of the NPC that the player is talking with. * @param player this parameter contains a reference to the exact instance of the player who is talking to the NPC. * @return the text returned by the event (may be {@code null}, a filename or just text) * @since <a href="http://trac.l2jserver.com/changeset/771">Jython AI support for "onFirstTalk"</a> */ public String onFirstTalk(L2Npc npc, L2PcInstance player) { return null; } 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
MeRDox 60 Опубликовано 11 сентября, 2015 В квесте добавить событие addFirstTalkId(int npcId) и переопределить метод onFirstTalk . Квест ид установить -1 кажется. /** * This function is called whenever a player talks to an NPC that is registered for the quest.<br> * That is, it is triggered from the very first click on the NPC, not via another dialog.<br> * <b>Note 1:</b><br> * Each NPC can be registered to at most one quest for triggering this function.<br> * In other words, the same one NPC cannot respond to an "onFirstTalk" request from two different quests.<br> * Attempting to register an NPC in two different quests for this function will result in one of the two registration being ignored.<br> * <b>Note 2:</b><br> * Since a Quest link isn't clicked in order to reach this, a quest state can be invalid within this function.<br> * The coder of the script may need to create a new quest state (if necessary).<br> * <b>Note 3:</b><br> * The returned value of onFirstTalk replaces the default HTML that would have otherwise been loaded from a sub-folder of DatapackRoot/game/data/html/.<br> * If you wish to show the default HTML, within onFirstTalk do npc.showChatWindow(player) and then return ""<br> * @param npc this parameter contains a reference to the exact instance of the NPC that the player is talking with. * @param player this parameter contains a reference to the exact instance of the player who is talking to the NPC. * @return the text returned by the event (may be {@code null}, a filename or just text) * @since <a href="http://trac.l2jserver.com/changeset/771">Jython AI support for "onFirstTalk"</a> */ public String onFirstTalk(L2Npc npc, L2PcInstance player) { return null; } спасибо, нужная информация, будем работать)) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
MeRDox 60 Опубликовано 11 сентября, 2015 Только вот как привязать одну часть с другойpublic String onTalk(L2NpcInstance npc, L2PcInstance talker), с public String onEvent(String event, QuestState st) а то награду не дает, и нету вобще никакой проверки и выводки HTML. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
LifeGame32 312 Опубликовано 11 сентября, 2015 Только вот как привязать одну часть с другой public String onTalk(L2NpcInstance npc, L2PcInstance talker), с public String onEvent(String event, QuestState st) а то награду не дает, и нету вобще никакой проверки и выводки HTML. public String onEvent(String event, QuestState st) данный метод насколько я помню срабатывает на байпас (НазваниеКвеста -h байпас) добавить проверку в ontTalk и атоматом выдавать награду. что никак. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
MeRDox 60 Опубликовано 12 сентября, 2015 (изменено) public String onEvent(String event, QuestState st) данный метод насколько я помню срабатывает на байпас (НазваниеКвеста -h байпас) добавить проверку в ontTalk и атоматом выдавать награду. что никак. а можно ещё поподробней) как связать, а то делал различные манипуляции и никак) Изменено 12 сентября, 2015 пользователем Merdox Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
MeRDox 60 Опубликовано 12 сентября, 2015 (изменено) public String onEvent(String event, QuestState st) данный метод насколько я помню срабатывает на байпас (НазваниеКвеста -h байпас) добавить проверку в ontTalk и атоматом выдавать награду. что никак. Насчет байпасов они прописаны, значит в квесте не правельно прописаны формулы для видачи награды и перевода на HTML страницу. когда нажимаю, ноль реакции... Подозреваю нужно как-то так сделать как в квесте. Только вот мне нужно без взятие квеста if (event.equalsIgnoreCase("start")) { st.set("cond","1"); event = "77777-2.htm"; st.setState(STARTED); } Изменено 12 сентября, 2015 пользователем Merdox Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
LifeGame32 312 Опубликовано 12 сентября, 2015 st.set("cond","1");st.setState(STARTED); убрать ид квеста поставить -1 и байпасы должны работать Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты