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]