skyalcon 發表於 2026-2-7 15:51

BOSS

實作計畫:BOSS資訊查看道具1. 修改 BossSpawnTable.java新增靜態快取,儲存所有 BOSS 生成實例:private static final List<L1BossSpawn> _bossSpawns = new ArrayList<>();// 在 fillSpawnTable() 中添加_bossSpawns.add(spawnDat);public static List<L1BossSpawn> getAllBossSpawns() {    return Collections.unmodifiableList(_bossSpawns);}
2. 新增 BossInfoManager.java建立管理器類別:
[*]收集所有 BOSS 資訊
[*]格式化 HTML 內容
[*]計算下次出生時間
3. 修改 C_ItemUse.java添加道具處理邏輯:if (itemId == 49998) { // BOSS雷達道具ID    String html = BossInfoManager.generateBossInfoHtml();    pc.sendPackets(new S_GMHtml(pc.getId(), html));    return; // 不消耗道具}
4. HTML 內容範例<html><body bgcolor="000000"><font color="FF0000"><center>★ BOSS 資訊 ★</center></font><br><font color="AAAAAA">■ 死亡騎士 <br>下次出生: 03:30:00<br>位置: 奇岩地監 3F (Map:4) 32799,32804<br><hr>■ 安塔瑞斯 [龍]<br>下次出生: 18:00:00<br>位置: 龍之谷 (Map:78) 32697,32823<br></font></body></html>
5. 資料庫設定在 itemname / etcitem 表新增道具:
[*]item_id: 49998
[*]name: BOSS雷達
[*]item_type: 0
預估檔案變更
檔案變更類型
BossSpawnTable.java修改
BossInfoManager.java新增
C_ItemUse.java修改
是否需要我開始實作?








出生位置請參照mapids表





我已經找到 mapids 表的結構:mapids 表結構
欄位說明
mapid地圖ID
locationname地圖名稱
更新後的實作計畫1. 新增 MapIdsTable.java用於查詢地圖名稱:package l1j.server.server.datatables;import java.sql.*;import java.util.*;public class MapIdsTable {    private static final Map<Integer, String> _mapNames = new HashMap<>();      public static void load() {      // 從資料庫載入 mapid -> locationname 對應    }      public static String getMapName(int mapId) {      return _mapNames.getOrDefault(mapId, "未知地圖(" + mapId + ")");    }}
2. 修改 BossSpawnTable.java新增靜態快取:private static final List<L1BossSpawn> _bossSpawns = Collections.synchronizedList(new ArrayList<>());public static List<L1BossSpawn> getAllBossSpawns() {    return Collections.unmodifiableList(_bossSpawns);}
3. 新增 BossInfoManager.javapublic class BossInfoManager {    public static String generateBossInfoHtml() {      StringBuilder html = new StringBuilder();      html.append("<html><body bgcolor=\"000000\"><font color=\"FF0000\"><center>★ BOSS 資訊 ★</center></font><br>");                for (L1BossSpawn spawn : BossSpawnTable.getAllBossSpawns()) {            String mapName = MapIdsTable.getMapName(spawn.getMapId());            Calendar nextSpawn = spawn.getNextSpawnTime(); // 需要新增此方法                        html.append(String.format("■ %s [%s]<br>", spawn.getName(), spawn.getCycleType()));            html.append(String.format("下次出生: %s<br>", formatTime(nextSpawn)));            html.append(String.format("位置: %s (Map:%d) %d,%d<br><br>",               mapName, spawn.getMapId(), spawn.getLocX(), spawn.getLocY()));      }      html.append("</body></html>");      return html.toString();    }}
4. 修改 L1BossSpawn.java新增公開方法供查詢:public Calendar getNextSpawnTime() {    return _activeSpawnTime;}
5. 修改 C_ItemUse.javaif (itemId == 49998) { // BOSS雷達    String html = BossInfoManager.generateBossInfoHtml();    pc.sendPackets(new S_GMHtml(pc.getId(), html));    return; // 不消耗}
檔案變更清單
檔案變更
MapIdsTable.java新增 - 地圖名稱查詢
BossSpawnTable.java修改 - 新增快取
L1BossSpawn.java修改 - 新增 getNextSpawnTime()
BossInfoManager.java新增 - HTML生成
C_ItemUse.java修改 - 道具處理
l1jtw_*.sql修改 - 新增道具










頁: [1]
查看完整版本: BOSS