.epic

  • Автор темы Автор темы accavit
  • Дата начала Дата начала

accavit

Пляшущий с бубном
Участник
Сообщения
133
Розыгрыши
0
Решения
2
Репутация
0
Реакции
22
Баллы
220
Хроники
  1. Interlude
Исходники
Отсутствуют
Сборка
Lucera 1.7
Доброго времени суток!
Столкнулся со следующим явлением:
ssd.webp
В .epic пишет точное время респа. Мне кажется, так быть не должно. Там должно быть написано, например, 22:00~23:00
Что и как поменять, подскажите, пожалуйста?

Java:
// Decompiled with: FernFlower
// Class Version: 8
package ru.catssoftware.gameserver.handler.voicedcommandhandlers;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;
import javolution.text.TextBuilder;
import ru.catssoftware.L2DatabaseFactory;
import ru.catssoftware.gameserver.handler.IVoicedCommandHandler;
import ru.catssoftware.gameserver.model.actor.instance.L2PcInstance;
import ru.catssoftware.gameserver.network.serverpackets.NpcHtmlMessage;

public class GrandBossSpawn implements IVoicedCommandHandler {
    private static final int[] BOSSES = new int[]{29001, 29006, 29014, 29019, 29020, 29022, 29028, 29045};
    private static final String[] VOICED_COMMANDS = new String[]{"epic"};

    public boolean useVoicedCommand(String command, L2PcInstance activeChar, String target) {
        if (activeChar == null) {
            return false;
        } else if (!command.startsWith("epic")) {
            return false;
        } else {
            NpcHtmlMessage epic = new NpcHtmlMessage(5);
            TextBuilder html = new TextBuilder("<html><body><br>");
            html.append("<html><title>Alltar.PRO [Respawn Epic]</title><body><br><center>");
            html.append("<img src=\"uniquepvp.logo\" width=256 height=85 align=left><br>");
            html.append("<center><img src=\"uniquepvp.rovno\" width=256 height=12 align=left></center>");
            html.append("<table width=256>");
            html.append("<tr><td width=120><font color=\"9CC300\">Name</font></td>");
            html.append("<td><font color=\"9CC300\">Status</font></td></tr>");
            int[] var6 = BOSSES;
            int var7 = var6.length;

            for(int var8 = 0; var8 < var7; ++var8) {
                int bossid = var6[var8];
                SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM в HH:mm");
                boolean sucess = false;
                Connection con = null;

                try {
                    con = L2DatabaseFactory.getInstance().getConnection();
                    con.setTransactionIsolation(1);
                    PreparedStatement st = con.prepareStatement("SELECT respawnDate, state FROM grandboss_intervallist WHERE bossId=?");
                    st.setInt(1, bossid);
                    ResultSet rs = st.executeQuery();
                    if (rs.next()) {
                        sucess = true;
                        int gstatus = rs.getInt("state");
                        long respawn = rs.getLong("respawnDate");
                        html.append("<tr><td><font color=\"969696\">" + BossName(bossid) + "</font></td>");
                        switch(gstatus) {
                        case 0:
                            html.append("<td><font color=\"500073\">Sleep/Not spawn</font><br1></td></tr>");
                            break;
                        case 1:
                            html.append("<td><font color=\"008000\">Is Alive</font><br1></td></tr>");
                            break;
                        default:
                            if (respawn <= System.currentTimeMillis()) {
                                if (respawn == 0L) {
                                }
                            } else {
                                html.append("<td><font color=\"FF0000\">" + dateFormat.format(new Date(respawn)) + "</font><br1></td></tr>");
                            }
                        }
                    }
                } catch (Exception var26) {
                    var26.printStackTrace();
                } finally {
                    try {
                        if (con != null) {
                            con.close();
                        }
                    } catch (SQLException var25) {
                        var25.printStackTrace();
                    }

                }
            }

            html.append("</table><img src=\"uniquepvp.rovno\" width=256 height=12 align=left></center><br>");
            html.append("</center></body></html>");
            epic.setHtml(html.toString());
            activeChar.sendPacket(epic);
            return true;
        }
    }

    public String getDescription(String command) {
        return command.equals("epic") ? "Показать статус Эпик Босов" : null;
    }

    public String[] getVoicedCommandList() {
        return VOICED_COMMANDS;
    }

    public static final String BossName(int id) {
        switch(id) {
        case 29001:
            return "QueenAnt:";
        case 29006:
            return "Core:";
        case 29014:
            return "Orfen:";
        case 29019:
            return "Antharas:";
        case 29020:
            return "Baium:";
        case 29022:
            return "Zaken:";
        case 29028:
            return "Valakas:";
        case 29045:
            return "Frintezza:";
        default:
            return "null";
        }
    }
}
 
Я не эксперт в явах, но вроде бы вот это место явно намекает:

SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM в HH:mm");
 
@default_npc,если вот так напишу, будет работать?
Java:
for(int var8 = 0; var8 < var7; ++var8) {
                int bossid = var6[var8];
                String EpicRespTime[] {
                    "19:00-21:00";
                    "Core Respawn Time";
                    "Orfen Respawn Time";
                    "19:00-21:00";
                    "21:00-23:00";
                    "18:00-20:00";
                    "20:00-22:00";
                    "20:00-22:00";
                }
                SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM - " + EpicRespTime[i]);
                boolean sucess = false;
                Connection con = null;
                EpicRespTime[i]++;
}
 
Имхо Челику проще сделать SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM с 20:00 до 00:00"); и подогнать респ через сборку.
Или же перепиливать SimpleDateFormat чтобы HH:mm отображались с +\- 4 часа. (ну или сколько ему там надо)
 
Доброго времени суток!
Столкнулся со следующим явлением:
Посмотреть вложение 37957
В .epic пишет точное время респа. Мне кажется, так быть не должно. Там должно быть написано, например, 22:00~23:00
Что и как поменять, подскажите, пожалуйста?

Java:
// Decompiled with: FernFlower
// Class Version: 8
package ru.catssoftware.gameserver.handler.voicedcommandhandlers;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;
import javolution.text.TextBuilder;
import ru.catssoftware.L2DatabaseFactory;
import ru.catssoftware.gameserver.handler.IVoicedCommandHandler;
import ru.catssoftware.gameserver.model.actor.instance.L2PcInstance;
import ru.catssoftware.gameserver.network.serverpackets.NpcHtmlMessage;

public class GrandBossSpawn implements IVoicedCommandHandler {
    private static final int[] BOSSES = new int[]{29001, 29006, 29014, 29019, 29020, 29022, 29028, 29045};
    private static final String[] VOICED_COMMANDS = new String[]{"epic"};

    public boolean useVoicedCommand(String command, L2PcInstance activeChar, String target) {
        if (activeChar == null) {
            return false;
        } else if (!command.startsWith("epic")) {
            return false;
        } else {
            NpcHtmlMessage epic = new NpcHtmlMessage(5);
            TextBuilder html = new TextBuilder("<html><body><br>");
            html.append("<html><title>Alltar.PRO [Respawn Epic]</title><body><br><center>");
            html.append("<img src=\"uniquepvp.logo\" width=256 height=85 align=left><br>");
            html.append("<center><img src=\"uniquepvp.rovno\" width=256 height=12 align=left></center>");
            html.append("<table width=256>");
            html.append("<tr><td width=120><font color=\"9CC300\">Name</font></td>");
            html.append("<td><font color=\"9CC300\">Status</font></td></tr>");
            int[] var6 = BOSSES;
            int var7 = var6.length;

            for(int var8 = 0; var8 < var7; ++var8) {
                int bossid = var6[var8];
                SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM в HH:mm");
                boolean sucess = false;
                Connection con = null;

                try {
                    con = L2DatabaseFactory.getInstance().getConnection();
                    con.setTransactionIsolation(1);
                    PreparedStatement st = con.prepareStatement("SELECT respawnDate, state FROM grandboss_intervallist WHERE bossId=?");
                    st.setInt(1, bossid);
                    ResultSet rs = st.executeQuery();
                    if (rs.next()) {
                        sucess = true;
                        int gstatus = rs.getInt("state");
                        long respawn = rs.getLong("respawnDate");
                        html.append("<tr><td><font color=\"969696\">" + BossName(bossid) + "</font></td>");
                        switch(gstatus) {
                        case 0:
                            html.append("<td><font color=\"500073\">Sleep/Not spawn</font><br1></td></tr>");
                            break;
                        case 1:
                            html.append("<td><font color=\"008000\">Is Alive</font><br1></td></tr>");
                            break;
                        default:
                            if (respawn <= System.currentTimeMillis()) {
                                if (respawn == 0L) {
                                }
                            } else {
                                html.append("<td><font color=\"FF0000\">" + dateFormat.format(new Date(respawn)) + "</font><br1></td></tr>");
                            }
                        }
                    }
                } catch (Exception var26) {
                    var26.printStackTrace();
                } finally {
                    try {
                        if (con != null) {
                            con.close();
                        }
                    } catch (SQLException var25) {
                        var25.printStackTrace();
                    }

                }
            }

            html.append("</table><img src=\"uniquepvp.rovno\" width=256 height=12 align=left></center><br>");
            html.append("</center></body></html>");
            epic.setHtml(html.toString());
            activeChar.sendPacket(epic);
            return true;
        }
    }

    public String getDescription(String command) {
        return command.equals("epic") ? "Показать статус Эпик Босов" : null;
    }

    public String[] getVoicedCommandList() {
        return VOICED_COMMANDS;
    }

    public static final String BossName(int id) {
        switch(id) {
        case 29001:
            return "QueenAnt:";
        case 29006:
            return "Core:";
        case 29014:
            return "Orfen:";
        case 29019:
            return "Antharas:";
        case 29020:
            return "Baium:";
        case 29022:
            return "Zaken:";
        case 29028:
            return "Valakas:";
        case 29045:
            return "Frintezza:";
        default:
            return "null";
        }
    }
}
Я бы на твоем месте вообще бы не стал использовать данные с базы для войс команды... Либо ставь откат на эту войс команду.
 
  • Мне нравится
Реакции: Rolo
Я бы на твоем месте вообще бы не стал использовать данные с базы для войс команды... Либо ставь откат на эту войс команду.
Кеширование которое будет чистится когда босса убивают или он респается.
 
  • Мне нравится
Реакции: Rolo
умеем переводить подобную инфу из страшной серверной хтмлки в полноценное gui-окно любого вида и формата, по средствам уи-пакета (логику сервера вы крутите сами, я только настраивают приём\парсинг пакета и внешний вид окна)

сюда, спасибо
1626248921500.png
 
Назад
Сверху Снизу