Как проверить квестовый предмет при обмене.

Не пойму как сделать чтоб чекал Item без Consume

<ingredient id="10250" count="0"/>
<ingredient id="10187" count="200"/>
<production id="6861" count="1"/>

Игнорирует 10250
 
Не пойму как сделать чтоб чекал Item без Consume

<ingredient id="10250" count="0"/>
<ingredient id="10187" count="200"/>
<production id="6861" count="1"/>

Игнорирует 10250
<ingredient id="10187" count="0"/>
<ingredient id="10187" count="200"/>
<production id="6861" count="1"/>

Зачем тебе вообще тут <ingredient id="10250" count="0"/> если он у тебя вообще не используется.
Вверху же все описано, что да как.
Если у тебя требуется этот ингредиент
то ставишь
<ingredient id="10250" count="0"/> - Это нужно чисто для визуального отображения в списке, такая фишка клиента.
<ingredient id="10250" count="200"/> -допустим требует 200
<ingredient id="10187" count="200"/>
<production id="6861" count="1"/>
 
10250 квестовая вещь,
хочу чтоб проверял вещь, но естественно не потреблял ее!
Все ингредиенты это квест вещи
 
Как вот допустим с тем же Прем Баффом, идет чек itemid но Consume нету.
мне нужна аналогия в xml т.к. это нужно для моего квеста.
Квест работает, все ок, но вот "Обменник" игнорирует квест вещь.

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

Хотел соорудить такой а-ля "Костыль"!
 
private static void n(QuestState var0) {
if (var0.getCond() != 0) {
if (var0.getQuestItemsCount(10250) > 0L) {
var0.setCond(2);
} else {
var0.setCond(1);

может ?
Причем квестовый движок к квестовому предмету. Ты пишешь глупости!
Что бы проверять предмет, необходимо писать скрипт на выдачу или обмен и естественно это ни как не сделать через Multisell
 
Вот тебе элементарный скрипт который проверяет итем 10187 и итем 10250, потом забирает 10187 и дает 6861
ВСЕ! Зачем то квестом проверяешь итемы и т.д....

Java:
package services;

import l2.gameserver.model.Player;
import l2.gameserver.network.l2.components.SystemMsg;
import l2.gameserver.scripts.Functions;
import l2.gameserver.scripts.ScriptFile;
import l2.gameserver.utils.ItemFunctions;

public class ExchangeItemAndCheck extends Functions implements ScriptFile
{

  public void exchane_items_with_check()
  {
    Player player = getSelf();
    if(player == null || !CheckPlayerConditions(player))
      return;

    if(ItemFunctions.getItemCount(player, 10187) < 1 && ItemFunctions.getItemCount(player, 10250) < 1)
    {
      player.sendPacket(SystemMsg.INCORRECT_ITEM_COUNT);
      return;
    }
    ItemFunctions.removeItem(player,10187,1, true);
    ItemFunctions.addItem(player, 6861, 1, true);

  }

  @Override
  public void onLoad()
  {
  }
  @Override
  public void onReload()
  {
  }
  @Override
  public void onShutdown()
  {
  }
}

Потом в свой диалог ставишь кнопочку
<button width=100 height=27 action="bypass -h scripts_services.ExchangeItemAndCheck:exchane_items_with_check" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF" value="Give Me My Item">

Прокидываешь через API и получаешь профит
 
Last edited:
А как тогда сделать в круг? айтимов 40 штук.

Я ковыряюсь, пытаюсь прикрутить к НПЦ "вести диалог в случае если в инвентаре 10250 consume = 0"
 
Плюс конечно бы хотелось вызовом multisella. Предоставить "Конечному Юзеру" возможность выбирать!

Вот как написан Ketra Jumara? не найду никак.

Такого рода.
 
Last edited:
Плюс конечно бы хотелось вызовом multisella. Предоставить "Конечному Юзеру" возможность выбирать!

Вот как написан Ketra Jumara? не найду никак.

Такого рода.
Какую к черту возможность выбирать, если в мультиселле вообще такой функционал ни как не заложен и быть заложен в нем не может.

На скрине обычный мультиселл, они так и выглядят в ИТ xD Зайди на тестовый ИТ и посмотри. В левом верхнем углу предмет который покупаешь, внизу за сколько покупаешь, нет там ни каких "проверок" на наличие. Ты видимо вообще забыл как выглядит ИТ.
 
А как тогда сделать в круг? айтимов 40 штук.

Я ковыряюсь, пытаюсь прикрутить к НПЦ "вести диалог в случае если в инвентаре 10250 consume = 0"
Ну можно и так сделать, чисто на байпассе при обмене чекать предмет, есть или нет. Дальше пускать к трейду при наличии предмета.

Вообще в 3 строки:
Java:
package services;

import l2.gameserver.model.Player;
import l2.gameserver.network.l2.components.SystemMsg;
import l2.gameserver.scripts.Functions;
import l2.gameserver.scripts.ScriptFile;
import l2.gameserver.utils.ItemFunctions;

public class ExchangeItemAndCheck extends Functions implements ScriptFile
{
  public void exchane_items_with_check()
  {
    Player player = getSelf();
    if(player == null || !CheckPlayerConditions(player))
      return;

    if(ItemFunctions.getItemCount(player, 10250) < 1)
    {
      player.sendPacket(SystemMsg.INCORRECT_ITEM_COUNT);
      return;
    }
    else
      show("default/40099.htm", player);
  }

  @Override
  public void onLoad()
  {
  }
  @Override
  public void onReload()
  {
  }
  @Override
  public void onShutdown()
  {
  }
}
 
Last edited:
Хорош... че бомбишь то... я помощи прошу, а не повода ругаться...!
Я пытаюсь сделать на примере Ketra Jumara у него свиду самый обычный multisell
"[npc_%objectId%_Multisell 519|Я бы хотел кое-что из особенных вещей Кетры]"
Я делаю примерно тоже самое
[npc_%objectId%_multisell 50000|Покажи что есть на Рынке!]
Пробовал сначала брать за исходник multisell 519, понял что нету там чек квест айтима,
хотя если нету необходимой марки, Jumara показывает другой multisell.
Думал у тебя поинтересоваться, ты же вроде думаю должен "знать" на что ссылается Jumara при проверке ItemID для обмена.
Решил попросить у тебя помощи, а ты злишься будто я у тебя денег прошу в долг..
 
Ну можно и так сделать, чисто на байпассе при обмене чекать предмет, есть или нет. Дальше пускать к трейду при наличии предмета.

Вообще в 3 строки:
Java:
package services;

import l2.gameserver.model.Player;
import l2.gameserver.network.l2.components.SystemMsg;
import l2.gameserver.scripts.Functions;
import l2.gameserver.scripts.ScriptFile;
import l2.gameserver.utils.ItemFunctions;

public class ExchangeItemAndCheck extends Functions implements ScriptFile
{
  public void exchane_items_with_check()
  {
    Player player = getSelf();
    if(player == null || !CheckPlayerConditions(player))
      return;

    if(ItemFunctions.getItemCount(player, 10250) < 1)
    {
      player.sendPacket(SystemMsg.INCORRECT_ITEM_COUNT);
      return;
    }
    else
      show("default/40099.htm", player);
  }

  @Override
  public void onLoad()
  {
  }
  @Override
  public void onReload()
  {
  }
  @Override
  public void onShutdown()
  {
  }
}
Отлично! СПАСИБО! именно этого я и хотел от тебя "услышать" !
 
Хорош... че бомбишь то... я помощи прошу, а не повода ругаться...!
Я пытаюсь сделать на примере Ketra Jumara у него свиду самый обычный multisell
"[npc_%objectId%_Multisell 519|Я бы хотел кое-что из особенных вещей Кетры]"
Я делаю примерно тоже самое
[npc_%objectId%_multisell 50000|Покажи что есть на Рынке!]
Пробовал сначала брать за исходник multisell 519, понял что нету там чек квест айтима,
хотя если нету необходимой марки, Jumara показывает другой multisell.
Думал у тебя поинтересоваться, ты же вроде думаю должен "знать" на что ссылается Jumara при проверке ItemID для обмена.
Решил попросить у тебя помощи, а ты злишься будто я у тебя денег прошу в долг..
Ну ты глупости пишешь, по этому я и бомбл. Я тебе уже дал примеры, используй на здоровье
 
Можно сразу слать не диалог, а мультиселл. Вот так:

Java:
    if(ItemFunctions.getItemCount(player, 10250) < 1)
    {
      player.sendPacket(SystemMsg.INCORRECT_ITEM_COUNT);
      return;
    }
    else
      MultiSellHolder.getInstance().SeparateAndSend(100500, player, 0);
 
Значит ты его не загрузил.
Сам скрипт лоадится в методе onLoad, зачем тебе еще где то его наследовать я не понимаю ?
 
Last edited:
Значит ты его не загрузил.
Сам скрипт лоадится в методе onLoad, зачем тебе еще где то его наследовать я не понимаю ?
Я пытаюсь его вызвать через нпс, думал что так будет валидно, увидел то, что ты написал выше, решил что так будет работать.
 
Back
Top