Не работает PremiumBuff.page

Статус
В этой теме нельзя размещать новые ответы.

EXCLUSIVE

Свой человек
Участник
Старожил I степени
Сообщения
317
Розыгрыши
0
Решения
1
Репутация
17
Реакции
90
Баллы
503
Хроники
  1. Chaotic Throne: High Five
Исходники
Присутствуют
Сборка
HF
Изменил логику баффера (ALT+B) добавил premium buff. и создал сервис PremiumbuffService. не открывает страницу сервиса. Пустой екран SCRIPT отправляет туда premium-buffer.html на правильном месте создал же
\gameserver\data\html-ru\community\services

JavaScript:
package handler.bbs.custom.service;

import handler.bbs.ScriptBbsHandler;
import org.mmocore.gameserver.configuration.config.community.CBasicConfig;
import org.mmocore.gameserver.object.Player;

import java.util.StringTokenizer;

public class PremiumBuffService extends ScriptBbsHandler
{
    @Override
    public String[] getBypassCommands()
    {
        return new String[] {
                "_bbspremiumbuffer",
                "_bbspremiumservicebuy"
        };
    }

    @Override
    public void onBypassCommand(Player player, String bypass)
    {
        if(!PremiumBuffCBConfig.ENABLED)
        {
            player.sendMessage("Premium Buffer service is disabled.");
            useCommand(player, "_bbshome");
            return;
        }

        if(bypass.startsWith("_bbspremiumbuffer"))
        {
            showHtml(player);
            return;
        }

        if(bypass.startsWith("_bbspremiumservicebuy"))
        {
            String raw = trimBypass(bypass);

            StringTokenizer st = new StringTokenizer(raw, ":");
            st.nextToken();

            int days = 0;
            String page = "services/premium-buffer";

            if(st.hasMoreTokens())
            {
                days = Integer.parseInt(st.nextToken());
            }

            if(st.hasMoreTokens())
            {
                page = st.nextToken();
            }

            long price = PremiumBuffCBConfig.getPrice(days);
            int premiumItemId = PremiumBuffCBConfig.getPremiumItemId(days);

            if(days <= 0 || price <= 0 || premiumItemId <= 0)
            {
                player.sendMessage("Wrong premium buffer config.");
                showPage(player, page);
                return;
            }

            if(player.getInventory().getCountOf(PremiumBuffCBConfig.CURRENCY_ITEM_ID) < price)
            {
                player.sendMessage("Недостаточное количество предметов.");
                showPage(player, page);
                return;
            }

            if(!getPay(player, PremiumBuffCBConfig.CURRENCY_ITEM_ID, price, true))
            {
                player.sendMessage("Недостаточное количество предметов.");
                showPage(player, page);
                return;
            }

            player.getInventory().addItem(premiumItemId, 1L);

            showThanksHtml(player);
            return;
        }

        player.sendMessage("Error");
    }

    private String trimBypass(String bypass)
    {
        if(bypass.contains(";"))
        {
            return bypass.substring(0, bypass.indexOf(';'));
        }
        return bypass;
    }

    private void showHtml(Player player)
{
    showPage(player, PremiumBuffCBConfig.HTML_FILE);
}

private void showPage(Player player, String page)
{
    String fullPath = CBasicConfig.BBS_PATH + "/" + page + ".htm";
    String html = getCache().getHtml(fullPath, player);

    if(html == null || html.trim().isEmpty())
    {
        player.sendMessage("HTML not found: " + fullPath);
        html = "<html><body><center>HTML NOT FOUND<br1>" + fullPath + "</center></body></html>";
        separateAndSend(html, player);
        return;
    }

    html = html.replace("%premium_status%", getRemainingText(player));
    html = html.replace("%day3_price%", String.valueOf(PremiumBuffCBConfig.DAY3_PRICE));
    html = html.replace("%day7_price%", String.valueOf(PremiumBuffCBConfig.DAY7_PRICE));
    html = html.replace("%day21_price%", String.valueOf(PremiumBuffCBConfig.DAY21_PRICE));
    html = html.replace("%day60_price%", String.valueOf(PremiumBuffCBConfig.DAY60_PRICE));

    html = html.replace("%day3_item%", String.valueOf(PremiumBuffCBConfig.DAY3_ITEM_ID));
    html = html.replace("%day7_item%", String.valueOf(PremiumBuffCBConfig.DAY7_ITEM_ID));
    html = html.replace("%day21_item%", String.valueOf(PremiumBuffCBConfig.DAY21_ITEM_ID));
    html = html.replace("%day60_item%", String.valueOf(PremiumBuffCBConfig.DAY60_ITEM_ID));

    player.sendMessage("OPEN HTML: " + fullPath); // debug
    separateAndSend(html, player); // ENG MUHIM JOY
}

    private void showThanksHtml(Player player)
    {
        String fullPath = CBasicConfig.BBS_PATH + "/services/thanks.htm";
        String html = getCache().getHtml(fullPath, player);

        if(html == null || html.trim().isEmpty())
        {
            player.sendMessage("HTML not found: " + fullPath);
            html = "<html><body><center>THANKS HTML NOT FOUND<br1>" + fullPath + "</center></body></html>";
            separateAndSend(html, player);
            return;
        }

        html = html.replace("%premium_status%", getRemainingText(player));
        separateAndSend(html, player);
    }

    @Override
    public void onInit()
    {
        super.onInit();
        PremiumBuffCBConfig.load();
    }

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

    public static boolean isActive(Player player)
    {
        return hasPremiumItem(player);
    }

    public static boolean hasPremiumItem(Player player)
    {
        return hasItem(player, PremiumBuffCBConfig.DAY3_ITEM_ID)
                || hasItem(player, PremiumBuffCBConfig.DAY7_ITEM_ID)
                || hasItem(player, PremiumBuffCBConfig.DAY21_ITEM_ID)
                || hasItem(player, PremiumBuffCBConfig.DAY60_ITEM_ID);
    }

    private static boolean hasItem(Player player, int itemId)
    {
        return itemId > 0 && player.getInventory().getCountOf(itemId) > 0;
    }

    public static String getRemainingText(Player player)
    {
        if(hasPremiumItem(player))
        {
            return "Active";
        }
        return "Inactive";
    }
}
JavaScript:
package handler.bbs.custom.service;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.Properties;

public class PremiumBuffCBConfig
{
    private static final Logger log = LoggerFactory.getLogger(PremiumBuffCBConfig.class);

    public static boolean ENABLED = true;
    public static String HTML_FILE = "./gameserver/data/html-ru/community/services/premium-buffer.html";

    public static int CURRENCY_ITEM_ID = 4037;

    public static long DAY3_PRICE = 199L;
    public static long DAY7_PRICE = 299L;
    public static long DAY21_PRICE = 399L;
    public static long DAY60_PRICE = 499L;

    public static int DAY3_ITEM_ID = 4357;
    public static int DAY7_ITEM_ID = 20604;
    public static int DAY21_ITEM_ID = 20605;
    public static int DAY60_ITEM_ID = 20606;

    public static void load()
    {
        Properties p = new Properties();

        File file = new File("./configuration/PremiumbuffCB.properties");
        if(!file.exists())
        {
            file = new File("./gameserver/configuration/PremiumbuffCB.properties");
        }

        try(InputStreamReader reader = new InputStreamReader(
                new FileInputStream(file),
                StandardCharsets.UTF_8))
        {
            p.load(reader);

            ENABLED = Boolean.parseBoolean(p.getProperty("Enabled", "true"));
            HTML_FILE = p.getProperty("HtmlFile", "services/premium-buffer");

            CURRENCY_ITEM_ID = Integer.parseInt(p.getProperty("CurrencyItemId", "57"));

            DAY3_PRICE = Long.parseLong(p.getProperty("Day3Price", "1000000"));
            DAY7_PRICE = Long.parseLong(p.getProperty("Day7Price", "2000000"));
            DAY21_PRICE = Long.parseLong(p.getProperty("Day21Price", "5000000"));
            DAY60_PRICE = Long.parseLong(p.getProperty("Day60Price", "10000000"));

            DAY3_ITEM_ID = Integer.parseInt(p.getProperty("Day3ItemId", "4357"));
            DAY7_ITEM_ID = Integer.parseInt(p.getProperty("Day7ItemId", "20604"));
            DAY21_ITEM_ID = Integer.parseInt(p.getProperty("Day21ItemId", "20605"));
            DAY60_ITEM_ID = Integer.parseInt(p.getProperty("Day60ItemId", "20606"));

            log.info("PremiumBuffCBConfig loaded from: {}", file.getAbsolutePath());
        }
        catch(Exception e)
        {
            log.warn("PremiumBuffCBConfig load failed, using defaults. Checked path: {}", file.getAbsolutePath(), e);
        }
    }

    public static long getPrice(int days)
    {
        switch(days)
        {
            case 3:
                return DAY3_PRICE;
            case 7:
                return DAY7_PRICE;
            case 21:
                return DAY21_PRICE;
            case 60:
                return DAY60_PRICE;
            default:
                return 0L;
        }
    }

    public static int getPremiumItemId(int days)
    {
        switch(days)
        {
            case 3:
                return DAY3_ITEM_ID;
            case 7:
                return DAY7_ITEM_ID;
            case 21:
                return DAY21_ITEM_ID;
            case 60:
                return DAY60_ITEM_ID;
            default:
                return 0;
        }
    }
}
 

Вложения

Решение
происходит конфликт путей и расширений файлов
переменная HTML_FILE по умолчанию сейчас содержит абсолютный путь с расширением. Поскольку CBasicConfig.BBS_PATH уже задает корневую папку, а метод showPage() добавляет расширение, путь задваивается.
Замени: public static String HTML_FILE = "./gameserver/data/html-ru/community/services/premium-buffer.html";
на: public static String HTML_FILE = "services/premium-buffer";
Так же ты пишешь, что создал html файл, но метод на htm завязан, возможно ты опечатался, но все же
ну и проверь структуру htm файла

ну и логи было бы не плохо
помогите плиз (
 
Не смотрел внимательно, но первой что бросилось в глаза, это твой путь, .html не читается в коде, должно быть .htm
Не могу утверждать что это 100% причина, но думаю точно 1 из пунктов.
 
В таких случаях обычно в логи ошибки падают. Что там написано?
 
происходит конфликт путей и расширений файлов
переменная HTML_FILE по умолчанию сейчас содержит абсолютный путь с расширением. Поскольку CBasicConfig.BBS_PATH уже задает корневую папку, а метод showPage() добавляет расширение, путь задваивается.
Замени: public static String HTML_FILE = "./gameserver/data/html-ru/community/services/premium-buffer.html";
на: public static String HTML_FILE = "services/premium-buffer";
Так же ты пишешь, что создал html файл, но метод на htm завязан, возможно ты опечатался, но все же
ну и проверь структуру htm файла

ну и логи было бы не плохо
 
Решение
происходит конфликт путей и расширений файлов
переменная HTML_FILE по умолчанию сейчас содержит абсолютный путь с расширением. Поскольку CBasicConfig.BBS_PATH уже задает корневую папку, а метод showPage() добавляет расширение, путь задваивается.
Замени: public static String HTML_FILE = "./gameserver/data/html-ru/community/services/premium-buffer.html";
на: public static String HTML_FILE = "services/premium-buffer";
Так же ты пишешь, что создал html файл, но метод на htm завязан, возможно ты опечатался, но все же
ну и проверь структуру htm файла

ну и логи было бы не плохо
все спасибо большое за работала ))
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху Снизу