Перейти к содержанию
Авторизация  
MeRDox

Скрипт с набором HTML

Рекомендуемые сообщения

PWSoft . При наличии определенного итема(итемов) выводит соответствующий HTML, при нажатии на NPC. 
Пример: собрал 5000 черепов скилетов, выводится HTML что вы можете отдать их, и забрать награду, собрал 300 перьеве ангелов тоже самое...типа как квест, только без взятие квеста. Где его прописать лучше? в Quest, AI, Item это java или же лучше на Питоне? может у кого-то  что-то подобное есть?

Изменено пользователем Merdox

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

PWSoft . При наличии определенного итема(итемов) выводит соответствующий HTML, при нажатии на NPC. 

Пример: собрал 5000 черепов скилетов, выводится HTML что вы можете отдать их, и забрать награду, собрал 300 перьеве ангелов тоже самое...типа как квест, только без взятие квеста. Где его прописать лучше? в Quest, AI, Item это java или же лучше на Питоне? может у кого-то  что-то подобное есть?

Делается на чем удобнее, можно делать вообще любую папку. Подобное уже делали, где при нажатии проверяло и забирало итем.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если с определённых мобов падает итем, то я бы сделал АИ, в котором после убийства идет дроп, а потом проверка на количество итемов. Правда без ХТМЛ, т.к. особо не вижу смысла в нем для такой фичи.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если с определённых мобов падает итем, то я бы сделал АИ, в котором после убийства идет дроп, а потом проверка на количество итемов. Правда без ХТМЛ, т.к. особо не вижу смысла в нем для такой фичи.

Это я к примеру написал так, не обязательно нужно убийство моба, нужно именно с html. Вроде бы когда подумал об этом, думал та не тяжело, а потом запутался сам во всем этом.

есть пример квеста на крылья, ну и там тоже запутался, чтобы убрать сам квест. Нужно это все без взятие квеста 8)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Делается на чем удобнее, можно делать вообще любую папку. Подобное уже делали, где при нажатии проверяло и забирало итем.

тоже видел что-то похожее, ну не могу вспомнить где и когда.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

может в кого-то похожее есть? или подскажет кто-то как сделать) 
буду очень благодарен)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

может в кого-то похожее есть? или подскажет кто-то как сделать) 

буду очень благодарен)

Написать новый инстанс для НПСа и засунуть в ядро. Самый легкий способ=)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Написать новый инстанс для НПСа и засунуть в ядро. Самый легкий способ=)

Почему бы просто не сделать проверку на наличие итемов и запись в quest_global_data ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Почему бы просто не сделать проверку на наличие итемов и запись в quest_global_data ?

Смысл? Сделать новый инстанс намного легче, удобнее и надёжнее.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да все же просто. При обращении к НПСу проверяем itemIdCount, и если равен заданному - забираем и выдаем нужный итем.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ТС, если Вы хотите сделать чтобы люди не брали квест, тогда какой вообще смысл в этом? Напишите аи для дропа ( чтобы при превышению 300 или 5000 опр. итемов - не дропалось больше ), а награду в обычном мультиселле...
Я один не понимаю зачем все усложнять?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кто знает, как заставить его работать? а то уже голова болит от этого

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");
}
}
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кто знает, как заставить его работать? а то уже голова болит от этого

Он так то к NPC привязан.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Он так то к NPC привязан.

в смысле, отвязать от НПЦ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а что не так в нем? а то он вроде бы начал работать, но после нескольких изменений перестал работать

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а что не так в нем? а то он вроде бы начал работать, но после нескольких изменений перестал работать

Глянь ошибку в логе

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Глянь ошибку в логе

ошибок никаких нету, так как исправлял все ошибки по мере их появления. 

а так как недостаточно знаний имею в этой сфере, тому не могу особо разобраться в чем проблема.

нету захвата этих формул if (event.equalsIgnoreCase("start")),  else if (event.equalsIgnoreCase("sobral")), и тд

то есть или самые формулы не правильные или как-то по другому написать надо. Может есть понимает в этом, тыкнет меня лицом на правильный путь. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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;

    }

 

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В квесте добавить событие 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;

    }

 

спасибо, нужная информация, будем работать))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Только вот как привязать одну часть с другой
public String onTalk(L2NpcInstance npc, L2PcInstance talker), с public String onEvent(String event, QuestState st)

 а то награду не дает, и нету вобще никакой проверки и выводки HTML.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Только вот как привязать одну часть с другой

public String onTalk(L2NpcInstance npc, L2PcInstance talker), с public String onEvent(String event, QuestState st)

 а то награду не дает, и нету вобще никакой проверки и выводки HTML.

public String onEvent(String event, QuestState st)  :)  данный метод насколько я помню срабатывает на байпас    (НазваниеКвеста -h байпас)

 

 добавить проверку в ontTalk и атоматом выдавать награду. что никак.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

public String onEvent(String event, QuestState st)  :)  данный метод насколько я помню срабатывает на байпас    (НазваниеКвеста -h байпас)

 

 добавить проверку в ontTalk и атоматом выдавать награду. что никак.

 

 

а можно ещё поподробней) как связать, а то делал различные манипуляции и никак)

Изменено пользователем Merdox

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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);
        }
Изменено пользователем Merdox

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

st.set("cond","1");
st.setState(STARTED);  убрать

 

ид квеста поставить -1 и байпасы должны работать

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...