MeRDox 60 Опубликовано 10 сентября, 2015 (изменено) PWSoft . При наличии определенного итема(итемов) выводит соответствующий HTML, при нажатии на NPC. Пример: собрал 5000 черепов скилетов, выводится HTML что вы можете отдать их, и забрать награду, собрал 300 перьеве ангелов тоже самое...типа как квест, только без взятие квеста. Где его прописать лучше? в Quest, AI, Item это java или же лучше на Питоне? может у кого-то что-то подобное есть? Изменено 10 сентября, 2015 пользователем Merdox Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
(D)uality 700 Опубликовано 10 сентября, 2015 В 10.09.2015 в 17:56, Merdox сказал: PWSoft . При наличии определенного итема(итемов) выводит соответствующий HTML, при нажатии на NPC. Пример: собрал 5000 черепов скилетов, выводится HTML что вы можете отдать их, и забрать награду, собрал 300 перьеве ангелов тоже самое...типа как квест, только без взятие квеста. Где его прописать лучше? в Quest, AI, Item это java или же лучше на Питоне? может у кого-то что-то подобное есть? Делается на чем удобнее, можно делать вообще любую папку. Подобное уже делали, где при нажатии проверяло и забирало итем. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Naik 419 Опубликовано 10 сентября, 2015 Если с определённых мобов падает итем, то я бы сделал АИ, в котором после убийства идет дроп, а потом проверка на количество итемов. Правда без ХТМЛ, т.к. особо не вижу смысла в нем для такой фичи. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
MeRDox 60 Опубликовано 10 сентября, 2015 В 10.09.2015 в 18:08, Naik сказал: Если с определённых мобов падает итем, то я бы сделал АИ, в котором после убийства идет дроп, а потом проверка на количество итемов. Правда без ХТМЛ, т.к. особо не вижу смысла в нем для такой фичи. Это я к примеру написал так, не обязательно нужно убийство моба, нужно именно с html. Вроде бы когда подумал об этом, думал та не тяжело, а потом запутался сам во всем этом. есть пример квеста на крылья, ну и там тоже запутался, чтобы убрать сам квест. Нужно это все без взятие квеста Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
MeRDox 60 Опубликовано 10 сентября, 2015 В 10.09.2015 в 18:04, (D)uality сказал: Делается на чем удобнее, можно делать вообще любую папку. Подобное уже делали, где при нажатии проверяло и забирало итем. тоже видел что-то похожее, ну не могу вспомнить где и когда. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
MeRDox 60 Опубликовано 10 сентября, 2015 может в кого-то похожее есть? или подскажет кто-то как сделать) буду очень благодарен) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Naik 419 Опубликовано 10 сентября, 2015 В 10.09.2015 в 21:02, Merdox сказал: может в кого-то похожее есть? или подскажет кто-то как сделать) буду очень благодарен) Написать новый инстанс для НПСа и засунуть в ядро. Самый легкий способ=) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
(D)uality 700 Опубликовано 10 сентября, 2015 В 10.09.2015 в 22:04, Naik сказал: Написать новый инстанс для НПСа и засунуть в ядро. Самый легкий способ=) Почему бы просто не сделать проверку на наличие итемов и запись в quest_global_data ? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Naik 419 Опубликовано 10 сентября, 2015 В 10.09.2015 в 22:10, (D)uality сказал: Почему бы просто не сделать проверку на наличие итемов и запись в quest_global_data ? Смысл? Сделать новый инстанс намного легче, удобнее и надёжнее. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
se1dhe 501 Опубликовано 10 сентября, 2015 Да все же просто. При обращении к НПСу проверяем itemIdCount, и если равен заданному - забираем и выдаем нужный итем. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Artur_xD 403 Опубликовано 10 сентября, 2015 ТС, если Вы хотите сделать чтобы люди не брали квест, тогда какой вообще смысл в этом? Напишите аи для дропа ( чтобы при превышению 300 или 5000 опр. итемов - не дропалось больше ), а награду в обычном мультиселле...Я один не понимаю зачем все усложнять? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
MeRDox 60 Опубликовано 11 сентября, 2015 Кто знает, как заставить его работать? а то уже голова болит от этого В 10.09.2015 в 22:25, Artur_xD сказал: 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 В 11.09.2015 в 09:19, Merdox сказал: Кто знает, как заставить его работать? а то уже голова болит от этого Он так то к NPC привязан. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
MeRDox 60 Опубликовано 11 сентября, 2015 В 11.09.2015 в 10:22, (D)uality сказал: Он так то к NPC привязан. в смысле, отвязать от НПЦ? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
(D)uality 700 Опубликовано 11 сентября, 2015 В 11.09.2015 в 14:42, Merdox сказал: в смысле, отвязать от НПЦ? По другому сам скрипт надо делать. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
MeRDox 60 Опубликовано 11 сентября, 2015 а что не так в нем? а то он вроде бы начал работать, но после нескольких изменений перестал работать Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
DonJuan 9 Опубликовано 11 сентября, 2015 В 11.09.2015 в 14:48, Merdox сказал: а что не так в нем? а то он вроде бы начал работать, но после нескольких изменений перестал работать Глянь ошибку в логе Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
MeRDox 60 Опубликовано 11 сентября, 2015 В 11.09.2015 в 14:55, Dotep сказал: Глянь ошибку в логе ошибок никаких нету, так как исправлял все ошибки по мере их появления. а так как недостаточно знаний имею в этой сфере, тому не могу особо разобраться в чем проблема. нету захвата этих формул if (event.equalsIgnoreCase("start")), else if (event.equalsIgnoreCase("sobral")), и тд то есть или самые формулы не правильные или как-то по другому написать надо. Может есть понимает в этом, тыкнет меня лицом на правильный путь. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
LifeGame32 312 Опубликовано 11 сентября, 2015 В 10.09.2015 в 17:56, Merdox сказал: 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 В 11.09.2015 в 15:11, LifeGame32 сказал: В квесте добавить событие 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 В 11.09.2015 в 16:59, Merdox сказал: Только вот как привязать одну часть с другой 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 (изменено) В 11.09.2015 в 23:05, LifeGame32 сказал: public String onEvent(String event, QuestState st) данный метод насколько я помню срабатывает на байпас (НазваниеКвеста -h байпас) добавить проверку в ontTalk и атоматом выдавать награду. что никак. а можно ещё поподробней) как связать, а то делал различные манипуляции и никак) Изменено 12 сентября, 2015 пользователем Merdox Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
MeRDox 60 Опубликовано 12 сентября, 2015 (изменено) В 11.09.2015 в 23:05, LifeGame32 сказал: 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 и байпасы должны работать Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты