Подскажите как сделать своего NPC работающий со складом?

Shtebon

Единомышленник
Пользователь
Сообщения
61
Розыгрыши
0
Репутация
0
Реакции
1
Баллы
115
Хроники
  1. Chaotic Throne: High Five
Исходники
Присутствуют
Сборка
Rebellion
Хочу сделать НПС как у гномов "Голем торговец", чтобы его можно было вызвать в любом месте и можно было класть и забирать предметы с ВХ и КВХ и чтобы была функция продажи предметов.

Суммон НПС я реализовал, и функция продажи вещей работает, а вот функция склада работать не хочет.



Подскажите как реализовать?
 
есть тип нпс. merchant, warehouse. где warehouse наследуется от merchant. и потом все работает как надо.
 
вариант взять рабочего нпц ВХ и сделать на его основе что нужно
не подойдёт?

например есть taurin
 
дело в том, что вызываю я нпс при помощи итема

НПС наследует MERCHANT и поэтому работает продажа. в ВХ не работает, ставлю <set name="summonType" val="Warehouse" />
он не призывается..

Хотя когда спавню НПС с <set name="type" value="Warehouse" /> он работает как ВХ. но не работает [npc_%objectId%_Sell|Продать предмет.]

 
:) парадокс. новый инстанс нпц в ядре создайте. реализуйте методы для warehouse и merchant. ну или правьте байпасы.
 
полноценно думаю нет.
так же как и в комунку не замутить? ALT+B наткнулся по запросу в гугле, но чёт не понял тут
.ru/topic/91442-%D1%81%D0%BA%D0%BB%D0%B0%D0%B4-%D0%B2-%D0%B0%D0%BB%D1%82-%D0%B1/
 
так же как и в комунку не замутить? ALT+B наткнулся по запросу в гугле, но чёт не понял тут
.ru/topic/91442-%D1%81%D0%BA%D0%BB%D0%B0%D0%B4-%D0%B2-%D0%B0%D0%BB%D1%82-%D0%B1/
Конечно можно, но вы уже ответили на ваш вопрос.
без вмешательства в ядро никак
 
смотри, я при рестарте обнаружил что какойто ВХ в комунке грузится. как его найти ? как реализовать в комунке?Посмотреть вложение 46056
тебе надо написать отдельный ай(скрипт) для этого нпс чтобы не трогать основное
сам warehouse находится в папке скрипт data\scripts\services\community ищи там
 
тебе надо написать отдельный ай(скрипт) для этого нпс чтобы не трогать основное
сам warehouse находится в папке скрипт data\scripts\services\community ищи там
так если оно реализованно, возможно что таже имеется? у меня комунка уже другая
 
так если оно реализованно, возможно что таже имеется? у меня комунка уже другая
зачем вы создает проблему ,если это можно делать отдельный ай для нпс ,и крутит его как хотите ,а не искать все это в ядре или скриптов ,просто смотрите по аналогу как делано в WarehouseInstance и делаете по аналогу с проверкой то и есть ваши задумки, или если нет знание то попросите кого не бут кто вам это делает (бесплатно или платно)
 
зачем вы создает проблему ,если это можно делать отдельный ай для нпс ,и крутит его как хотите ,а не искать все это в ядре или скриптов ,просто смотрите по аналогу как делано в WarehouseInstance и делаете по аналогу с проверкой то и есть ваши задумки, или если нет знание то попросите кого не бут кто вам это делает (бесплатно или платно)
тут копать?
 
WarehouseInstance там уже смотрите
нашёл этот скрипт, но незнаю как им воспользоваться
XML:
package services.community;

import l2r.gameserver.Config;
import l2r.gameserver.data.htm.HtmCache;
import l2r.gameserver.handler.bbs.CommunityBoardManager;
import l2r.gameserver.handler.bbs.ICommunityBoardHandler;
import l2r.gameserver.model.Player;
import l2r.gameserver.network.serverpackets.ShowBoard;
import l2r.gameserver.scripts.ScriptFile;
import l2r.gameserver.utils.WarehouseFunctions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.StringTokenizer;

/**
 * @author RuleZzz
 */
public class CommunityWarehouse implements ScriptFile, ICommunityBoardHandler {
    private static final Logger _log = LoggerFactory.getLogger(CommunityWarehouse.class);

    @Override
    public String[] getBypassCommands() {
        return new String[]{
                "_bbswarehouse",
        };
    }

    @Override
    public void onBypassCommand(Player player, String bypass) {
        if(!Config.ALLOW_BBS_WAREHOUSE) return;

        if (player == null) return;

        if (!Config.BBS_WAREHOUSE_ALLOW_PK && player.getKarma() > 0) {
            player.sendMessage(player.isLangRus() ? "PK нельзя использовать склад" : "PK can not use a warehouse");
            return;
        }

        StringTokenizer st = new StringTokenizer(bypass, ":");
        st.nextToken();
        String action = st.hasMoreTokens() ? st.nextToken() : "";
        if (action.equalsIgnoreCase("private_deposit"))
            WarehouseFunctions.showDepositWindow(player);
        else if (action.equalsIgnoreCase("private_retrieve"))
            WarehouseFunctions.showRetrieveWindow(player, getVal(st.nextToken()));
        else if (action.equalsIgnoreCase("clan_deposit"))
            WarehouseFunctions.showDepositWindowClan(player);
        else if (action.equalsIgnoreCase("clan_retrieve"))
            WarehouseFunctions.showWithdrawWindowClan(player, getVal(st.nextToken()));
        showMain(player);
    }
  
    private int getVal(String name) {
        name = name.trim();
        if (name.equalsIgnoreCase("Оружие") || name.equalsIgnoreCase("weapon") || name.equalsIgnoreCase("1"))
            return 1;
        else if (name.equalsIgnoreCase("Броня") || name.equalsIgnoreCase("armor") || name.equalsIgnoreCase("2"))
            return 2;
        else if (name.equalsIgnoreCase("Бижутерия") || name.equalsIgnoreCase("jewelry") || name.equalsIgnoreCase("3"))
            return 3;
        else if (name.equalsIgnoreCase("Украшения") || name.equalsIgnoreCase("ornamentation") || name.equalsIgnoreCase("4"))
            return 4;
        else if (name.equalsIgnoreCase("Предметы снабжения") || name.equalsIgnoreCase("supplies") || name.equalsIgnoreCase("5"))
            return 5;
        else if (name.equalsIgnoreCase("Материалы") || name.equalsIgnoreCase("materials") || name.equalsIgnoreCase("6"))
            return 6;
        else if (name.equalsIgnoreCase("Ключевые материалы") || name.equalsIgnoreCase("key materials") || name.equalsIgnoreCase("7"))
            return 7;
        else if (name.equalsIgnoreCase("Рецепты") || name.equalsIgnoreCase("recipes") || name.equalsIgnoreCase("8"))
            return 8;
        else if (name.equalsIgnoreCase("Книги") || name.equalsIgnoreCase("books") || name.equalsIgnoreCase("9"))
            return 9;
        else if (name.equalsIgnoreCase("Разное") || name.equalsIgnoreCase("Miscellaneous") || name.equalsIgnoreCase("10"))
            return 10;
        else if (name.equalsIgnoreCase("Прочее") || name.equalsIgnoreCase("Other") || name.equalsIgnoreCase("11"))
            return 11;

        return 0;
    }
  

    private void showMain(Player player) {
        if (player == null) return;
        String htm = HtmCache.getInstance().getNotNull("scripts/services/community/pages/warehouse.htm", player);
        StringBuilder sb = new StringBuilder();
        htm = htm.replace("<?content?>", sb.toString());
        ShowBoard.separateAndSend(htm, player);
    }

    @Override
    public void onWriteCommand(Player player, String bypass, String arg1, String arg2, String arg3, String arg4, String arg5) {}

    @Override
    public void onLoad() {
        if (Config.COMMUNITYBOARD_ENABLED) {
            _log.info("CommunityBoard: Warehouse loaded.");
            CommunityBoardManager.getInstance().registerHandler(this);
        }
    }


    @Override
    public void onReload() {
        if (Config.COMMUNITYBOARD_ENABLED)
            CommunityBoardManager.getInstance().removeHandler(this);
    }


    @Override
    public void onShutdown() {
    }


}

("scripts/services/community/pages/warehouse.htm" такой HTMLки у меня нет..

пробовал написать свою

XML:
    <table border=0 cellpadding=0 cellspacing=3>

    <tr><td height=35></td>

        <tr>
        <td align=center><button action="bypass _bbswarehouse:private_deposit" value="Склад" width=200 height=31 back="L2UI_CT1.OlympiadWnd_DF_Reward_Down" fore="L2UI_CT1.OlympiadWnd_DF_Reward"></td>
        </tr>
        <tr>
        <td align=center><button action="bypass _bbswarehouse:private_retrieve" value="Склад2" width=200 height=31 back="L2UI_CT1.OlympiadWnd_DF_Reward_Down" fore="L2UI_CT1.OlympiadWnd_DF_Reward"></td>
        </tr>
        <tr>
        <td align=center><button action="bypass _bbswarehouse:clan_deposit" value="Склад3" width=200 height=31 back="L2UI_CT1.OlympiadWnd_DF_Reward_Down" fore="L2UI_CT1.OlympiadWnd_DF_Reward"></td>
        </tr>
        <tr>
        <td align=center><button action="bypass _bbswarehouse:clan_retrieve" value="Склад4" width=200 height=31 back="L2UI_CT1.OlympiadWnd_DF_Reward_Down" fore="L2UI_CT1.OlympiadWnd_DF_Reward"></td>
        </tr>
    </table>

bypass _bbswarehouse: private_deposit на этот запрос открывается окно с депозитом, но в чате пишет "Хранилище находится слишком далеко"

на остальные байпасы ничего не происходит, но ошибка в консоле сервака:
 
то что открылось окно еще ничего не значит. есть еще в ядре SendWareHouseDepositList и SendWareHouseWithdrawList. где нужны правки.
 
Назад
Сверху Снизу