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

Скрипт зависает

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

Есть скрипт агументации. После покупки агумента скрипт останавливается и приходится заново открывать комьюнити, только после этого он срабатывает повторно. Как это можно пофиксить?

 

Сам скрипт:

 

 

package services.community;

 
import java.util.StringTokenizer;
import l2p.commons.dao.JdbcEntityState;
import l2p.gameserver.handler.bbs.CommunityBoardManager;
import l2p.gameserver.handler.bbs.ICommunityBoardHandler;
import l2p.gameserver.model.Player;
import l2p.gameserver.model.actor.instances.player.ShortCut;
import l2p.gameserver.model.items.ItemInstance;
import l2p.gameserver.scripts.Functions;
import l2p.gameserver.scripts.ScriptFile;
import l2p.gameserver.serverpackets.InventoryUpdate;
import l2p.gameserver.serverpackets.ShortCutRegister;
import l2p.gameserver.serverpackets.components.SystemMsg;
import l2p.gameserver.serverpackets.ShowBoard;
import l2p.gameserver.Config;
import l2p.gameserver.data.htm.HtmCache;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
 
/**
 *
 * @author dislike
 */
public class Augmentation extends Functions implements ScriptFile, ICommunityBoardHandler {
 
    private static final Logger _log = LoggerFactory.getLogger(Augmentation.class);
 
    private int PRICE_ID = 57; // id уплаты
    private int PRICE_COUNT = 1; // кол-во предметов
 
    @Override
    public void onLoad() {
        _log.info("CommunityBoard: ArgumManager loaded.");
        CommunityBoardManager.getInstance().registerHandler(this);
    }
 
    @Override
    public void onReload() {
        CommunityBoardManager.getInstance().removeHandler(this);
    }
 
    @Override
    public void onShutdown() {
    }
 
    @Override
    public String[] getBypassCommands() {
        return new String[]{
"_bbsaugm",
            "_bbsunaugm"
};
    }
 
    @Override
    public void onBypassCommand(Player player, String bypass) {
 
        if (bypass.startsWith("_bbsaugm")) {
 
            StringTokenizer st2 = new StringTokenizer(bypass, ";");
            String[] mBypass = st2.nextToken().split(":");
 
            ItemInstance item = player.getActiveWeaponInstance();
            int id = Integer.parseInt(mBypass[1]);
 
            if (item == null) {
player.sendMessage("Нет оружия для агументации! Оденьте оружие!");
player.sendPacket(new ShowBoard());
                return;
            }
 
if (item.isAugmented()) {
player.sendMessage("Это оружие уже аугментировано!");
player.sendPacket(new ShowBoard());
                return;
            }
 
if (!item.canBeAugmented(player, false)) {
player.sendMessage("Это оружие не может быть аугментировано!");
player.sendPacket(new ShowBoard());
                return;
            }
 
            if (!player.getInventory().destroyItemByItemId(PRICE_ID, PRICE_COUNT)) {
                if (PRICE_ID == 57) {
                    player.sendPacket(SystemMsg.YOU_DO_NOT_HAVE_ENOUGH_ADENA);
                } else {
                    player.sendPacket(SystemMsg.INCORRECT_ITEM_COUNT);
                }
                return;
            }
 
            boolean equipped = false;
            if (equipped = item.isEquipped()) {
                player.getInventory().unEquipItem(item);
            }
            item.setAugmentationId((id << 16) + 7191); //без прибавки к статам работает неверно
            item.setJdbcState(JdbcEntityState.UPDATED);
            item.update();
            if (equipped) {
                player.getInventory().equipItem(item);
            }
            player.sendPacket(new InventoryUpdate().addModifiedItem(item));
 
            for (ShortCut sc : player.getAllShortCuts()) {
                if (sc.getId() == item.getObjectId() && sc.getType() == ShortCut.TYPE_ITEM) {
                    player.sendPacket(new ShortCutRegister(player, sc));
                }
            }
            player.sendChanges();
player.sendMessage("Поздравляем, ваше оружие успешно аугментировано!");
String html = HtmCache.getInstance().getHtml(Config.BBS_HOME_DIR + "pages/services/augment.htm", player);
player.sendPacket(new ShowBoard());
            return;
        }
 
if (bypass.startsWith("_bbsunaugm")) {
 
            StringTokenizer st2 = new StringTokenizer(bypass, ";");
            String[] mBypass = st2.nextToken().split(":");
 
            ItemInstance item = player.getActiveWeaponInstance();
            int id = Integer.parseInt(mBypass[1]);
 
            boolean equipped = false;
            if (equipped = item.isEquipped()) {
                player.getInventory().unEquipItem(item);
            }
            item.setAugmentationId(id << 0);
            item.setJdbcState(JdbcEntityState.UPDATED);
            item.update();
            if (equipped) {
                player.getInventory().equipItem(item);
            }
            player.sendPacket(new InventoryUpdate().addModifiedItem(item));
 
            for (ShortCut sc : player.getAllShortCuts()) {
                if (sc.getId() == item.getObjectId() && sc.getType() == ShortCut.TYPE_ITEM) {
                    player.sendPacket(new ShortCutRegister(player, sc));
                }
            }
            player.sendChanges();
player.sendMessage("Поздравляем, аугментация снята!");
player.sendPacket(new ShowBoard());
            return;
        }
    }
 
    @Override
    public void onWriteCommand(Player player, String bypass, String arg1, String arg2, String arg3, String arg4, String arg5) {
    }
 
}
 
Кнопка 

 

 

<button value="Купить" action="bypass _bbsaugm:16336" width=50 height=18 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">

 

 

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


Ссылка на сообщение
Поделиться на другие сайты
player.sendMessage("Поздравляем, ваше оружие успешно аугментировано!");
String html = HtmCache.getInstance().getHtml(Config.BBS_HOME_DIR + "pages/services/augment.htm", player);
player.sendPacket(new ShowBoard());

player.sendPacket(new ShowBoard()); - это удалить везде, вообще не понимаю, зачем постоянно пакет отправлять.

 

String html = HtmCache.getInstance().getHtml(Config.BBS_HOME_DIR + "pages/services/augment.htm", player); - это вообще не используется, так же можно удалить.

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


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

 

player.sendMessage("Поздравляем, ваше оружие успешно аугментировано!");
String html = HtmCache.getInstance().getHtml(Config.BBS_HOME_DIR + "pages/services/augment.htm", player);
player.sendPacket(new ShowBoard());

player.sendPacket(new ShowBoard()); - это удалить везде, вообще не понимаю, зачем постоянно пакет отправлять.

 

Этот пакет закрывает комьюнити, пока это временное решение. Логов нет, были б логи самбы что-то придумал

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


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

Этот пакет закрывает комьюнити, пока это временное решение. Логов нет, были б логи самбы что-то придумал

Тогда отправляйте ему хтмл коммунки, а не закрывайте.

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


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

Тогда отправляйте ему хтмл коммунки, а не закрывайте.

Ммм..дай пример

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


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

Ммм..дай пример

String html = HtmCache.getInstance().getHtml(Config.BBS_HOME_DIR + "pages/services/augment.htm", player);
separateAndSend(html , player);
  • Upvote 1

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


Ссылка на сообщение
Поделиться на другие сайты
String html = HtmCache.getInstance().getHtml(Config.BBS_HOME_DIR + "pages/services/augment.htm", player);
separateAndSend(html , player);

Спасибо большое. Вот так будет правильней 

 

ShowBoard.separateAndSend(html, player);

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


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

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

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

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

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

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

Войти

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

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

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

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

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