[help]Community close

avatar

Путник
Пользователь
Сообщения
6
Розыгрыши
0
Репутация
0
Реакции
1
Баллы
0
hello all ..
can i help one code plz..

creator custom i interface community design.. here is one problem.. no X(to close community) and i creator one code to close

if (bypass.startsWith ("_ bbsgetfav"))
{
here what to write ?
}
 
see GS logs
 
How to close the Community Board window?
I would like to know if there's a packet or something to close the Community Board window after x action.
 
ShowBoard packet. Struct:
Код:
writeC(opcode);
writeC(0x00); //this flag close ur CB wnd
 
  • Мне нравится
Реакции: Arty
прошу помощи в том же вопросе, нужен метод или команда, которую можно будет использовать в сервисах, например скрипте телепортера CB, что бы после телепорта CB закрывался, собственно реализация в ядре jts, пробовал по принципу реализации команды CLOSE l2j-dev
Код:
public static L2GameServerPacket CLOSE = new ShowBoard();
    private int _show = 1;
    private static final String[] DIRECT_BYPASS = {"bypass _bbshome", "bypass _bbsgetfav", "bypass _bbsloc", "bypass _bbsclan", "bypass _bbsmemo", "bypass _maillist_0_1_0_", "bypass _friendlist_0_"};
    private String _html;
    private String _fav;

    private ShowBoard(final String id, final String html, final String fav) {
        this._html = id + '\u0008';
        if (html != null) {
            this._html += html;
        }
        this._fav = fav;
    }

    private ShowBoard(final String id, final List<String> arg, final String fav) {
        this._html = id + '\u0008';
        for (final String a : arg) {
            this._html += a + " \u0008";
        }
    }

    public static void separateAndSend(String html, final Player player) {
        html = html.replace("\t", "");
        final String pathFileCommunity = CBasicConfig.BBS_PATH + "/";
        final Pattern p = Pattern.compile("\\%include\\(([^\\)]+)\\)\\%");
        final Matcher m = p.matcher(html);
        while (m.find()) {
            html = html.replace(m.group(0), HtmCache.getInstance().getHtml(pathFileCommunity + m.group(1), player));
        }
        String fav = "";
        if (player.getSessionVar("add_fav") != null) {
            fav = "bypass _bbsaddfav_List";
        }

        player.getBypassStorage().parseHtml(html, true);

        if (html.length() < 8180) {
            player.sendPacket(new ShowBoard("101", html, fav));
            player.sendPacket(new ShowBoard("102", "", fav));
            player.sendPacket(new ShowBoard("103", "", fav));
        } else if (html.length() < 8180 * 2) {
            player.sendPacket(new ShowBoard("101", html.substring(0, 8180), fav));
            player.sendPacket(new ShowBoard("102", html.substring(8180, html.length()), fav));
            player.sendPacket(new ShowBoard("103", "", fav));
        } else if (html.length() < 8180 * 3) {
            player.sendPacket(new ShowBoard("101", html.substring(0, 8180), fav));
            player.sendPacket(new ShowBoard("102", html.substring(8180, 8180 * 2), fav));
            player.sendPacket(new ShowBoard("103", html.substring(8180 * 2, html.length()), fav));
        } else {
            throw new IllegalArgumentException("Html is too long!");
        }
    }

    public static void separateAndSend(final String html, final List<String> arg, final Player player) {
        String fav = "";
        if (player.getSessionVar("add_fav") != null) {
            fav = "bypass _bbsaddfav_List";
        }

        player.getBypassStorage().parseHtml(html, true);

        if (html.length() < 8180) {
            player.sendPacket(new ShowBoard("1001", html, fav));
            player.sendPacket(new ShowBoard("1002", arg, fav));
        } else {
            throw new IllegalArgumentException("Html is too long!");
        }
    }

    private ShowBoard() {
        this._show = 0;
        this._html = "";
    }

    @Override
    protected final void writeData() {
        // writeC(0x01); //c4 1 to show community 00 to hide
        this.writeC(this._show);

        for (final String bbsBypass : DIRECT_BYPASS) {
            this.writeS(bbsBypass);
        }

        this.writeS(this._fav);
        this.writeS(this._html);
    }
}
теперь CB закрывается и тут же открывается, есть предположение, что в скрипте телепортера после команды закрыть, вызывается открыть индекс
Код:
@Override
public void onBypassCommand(final Player player, final String bypass) {
    if (!CTeleportConfig.allowTeleport) {
        player.sendMessage(new CustomMessage("scripts.services.off"));
        useCommand(player, "_bbshome");
        return;
    }
    String html = "";
    if (bypass.equals("_bbsteleport")) {
        html = getCache().getHtml(CBasicConfig.BBS_PATH + "/teleport/index.htm", player);
    } else if (bypass.startsWith("_bbsteleport:page")) {
        final String[] path = bypass.split(":");
        if (path.length > 3) {
            html = getCache().getHtml(CBasicConfig.BBS_PATH + "/teleport/" + path[2] + "/" + path[3] + ".htm", player);
        } else {
            html = getCache().getHtml(CBasicConfig.BBS_PATH + "/teleport/" + path[2] + ".htm", player);
        }
    } else {
        if (bypass.equals("_bbsteleport:save_page")) {
            showTeleportPoint(player);
            return;
        }
        if (bypass.startsWith("_bbsteleport:delete")) {
            dao.deleteTeleportPoint(player, Integer.parseInt(bypass.split(":")[2]));
            showTeleportPoint(player);
            return;
        }
        if (bypass.startsWith("_bbsteleport:save")) {
            String point = "";
            final String[] next = bypass.split(" ");
            if (next.length > 1) {
                for (int i = 1; i < next.length; i++) {
                    point += " " + next[i];
                }
            }
            if (point.length() > 0) {
                addTeleportPoint(player, point);
            }
            showTeleportPoint(player);
            return;
        }
        if (bypass.startsWith("_bbsteleport:go")) {
            html = getCache().getHtml(CBasicConfig.BBS_PATH + "/teleport/index.htm", player);
            final String[] cord = bypass.split(":");
            final int x = Integer.parseInt(cord[2]);
            final int y = Integer.parseInt(cord[3]);
            final int z = Integer.parseInt(cord[4]);
            goTeleportPoint(player, new Location(x, y, z));
// в этом методе добавлена команда закрыть
// возможно тут нужно сделать  return;

        } else if (bypass.startsWith("_bbsteleport:id")) {
            final int id = Integer.parseInt(bypass.split(":")[2]);
            final Optional<TeleportPoint> point = teleportHolder.getTeleportId(id);
            if (point.isPresent()) {
                goTeleportId(player, point.get()); // в этом методе добавлена команда закрыть
// возможно тут нужно сделать  return;
            } else {
                html = getCache().getHtml(CBasicConfig.BBS_PATH + "/teleport/index.htm", player);
            }
        }
    }
    separateAndSend(html, player); 
// возможно открывается повторно, потому что этот метод вызывается именно тут или закрывать нужно при определенных условиях
}

private void teleportByAsk(Player player, TeleportPoint tp, int priceId, int priceCount) {
    ConfirmDlg ask = new ConfirmDlg(SystemMsg.S1, 30000);
    String itemName = Util.getItemName(priceId);
    ask.addString(player.isLangRus() ? "Желаете ли вы телепортироваться за " + priceCount + " " + itemName + "?"
            : "Do you want to teleport for " + priceCount + " " + itemName + "?");
    player.ask(ask, new OnAnswerListener() {
        @Override
        public void sayYes() {
            if (getPay(player, priceId, priceCount, true)) {
                player.teleToLocation(tp.getLocation());
                player.sendMessage(new CustomMessage("teleport.point.success.location").addString(tp.getName()));
                player.sendPacket(ShowBoard.CLOSE);
            }
        }
    });
}

private void goTeleportPoint(final Player player, final Location location) {
    if (!checkFirstConditions(player)) {
        return;
    }
    player.teleToLocation(location);
    player.sendPacket(ShowBoard.CLOSE); // возможно после закрытия, нужно сделать  return;
}
пните в правильную сторону плз, туго понимаю вообще как работает это
Код:
@Override
    protected final void writeData() {
        // writeC(0x01); //c4 1 to show community 00 to hide
        this.writeC(this._show);

        for (final String bbsBypass : DIRECT_BYPASS) {
            this.writeS(bbsBypass);
        }

        this.writeS(this._fav);
        this.writeS(this._html);
    }
по этому от части делаю методом тыка :OnionHead:
 
уже решил, методом добавления return; после успешного телепорта и вызова команды закрыть CB
 
// writeC(0x01); //c4 1 to show community 00 to hide - Наверно нужно от этого отталкиваться.
jts любит после подобных действий(телепорт,бафф) открывать страницу кб повторно, что в принципе наверное правильно. Смотри в сторону кода телепорта.
 
// writeC(0x01); //c4 1 to show community 00 to hide - Наверно нужно от этого отталкиваться.
jts любит после подобных действий(телепорт,бафф) открывать страницу кб повторно, что в принципе наверное правильно. Смотри в сторону кода телепорта.
спасибо за ответ, все верно, по этому команда CLOSE вызывает метод
Код:
private ShowBoard() {
        this._show = 0;
        this._html = "";
    }
далее этот сдвиг 0 пишется в
Код:
@Override
    protected final void writeData() {
        // writeC(0x01); //c4 1 to show community 00 to hide
        this.writeC(this._show);
и в данном случае cb закрывается, т.к. this._show = 0;
но если не ставить return; то cb закрывается и открывается заново, но уже с пустой страницей, т.к. переменная this._html = "";
в итоге варианта 2:
1. закрывать страницу командой и не открывать заново страницу при условии успешного екшна тп \ бафа;
2. добавить просто return после успешного екшна
я выбрал 2ой вариант, может не совсем правильно, но работает))
 
Добавил конфиг в .cfg на автозакрытие CB, теперь при включенном конфиге закрывается CB после успешного телепорта или после успешного наложения набора бафа! Одиночные бафы, хилы и снятие не закрывают CB!
доволен как слон :Run:
 
Добавил конфиг в .cfg на автозакрытие CB, теперь при включенном конфиге закрывается CB после успешного телепорта или после успешного наложения набора бафа! Одиночные бафы, хилы и снятие не закрывают CB!
доволен как слон :Run:
А если захочется хильнуться после наложения набора бафа?
 
Назад
Сверху Снизу