Class LiveCharacterEditor

java.lang.Object
client.LiveCharacterEditor

public final class LiveCharacterEditor extends Object
將管理控制台(gui/)「角色詳情」頁的編輯即時套用到線上角色的工具。

GUI 的儲存端(server.gui.GuiApiServer.savePlayer)一律先把變更寫入資料庫; 但對正在線上的角色而言,記憶體中的 MapleCharacter 才是當前權威狀態——它會在玩家 登出/存檔時以 saveToDB 覆寫回資料庫,故若不同步更新記憶體,GUI 的修改會在玩家登出時被 舊值蓋掉。本類別負責把目標值寫入記憶體角色並刷新客戶端/地圖,達成「儲存即時生效」。

只套用有變更的欄位(以 olde 兩份快照逐欄比對),不整列重寫、不假重登: 核心能力(等級/職業/四維/HP/MP/AP/SP/經驗/人氣)有變更時經 MapleCharacter.updateStats() 一次推送至能力面板;臉型/髮型有變更時以 MapleCharacter.updateSingleStat(MapleStat, int) 刷新並 MapleCharacter.equipChanged() 廣播外觀;楓幣有變更時送 MapleStat.MESO;地圖有變更才 MapleCharacter.changeMap(int)

商城/MTS 情境(inCashShop):玩家在購物商城時不可送出頻道專用封包 (能力/外觀/換圖),否則商城客戶端會斷線。此時僅將變更寫入記憶體(離開商城存檔時持久化), 楓葉/樂豆點數變更則改以 MTSCSPacket.showNXMapleTokens(MapleCharacter)CS_UPDATE)即時刷新餘額(達成「在商城內即時更新且不斷線」)。

本類別刻意置於 client 套件:除了使用 MapleCharacter 的公開設定子,亦需直接寫入 兩個 package-private 欄位——levelremainingSp[0];GUI 套件無法存取這些欄位。

執行緒:由 GUI 的 HTTP 執行緒呼叫,與「GM 指令對其他玩家施作」屬同一既有模式; 呼叫端應以 try/catch 包覆,刷新失敗不影響已完成的資料庫寫入。

  • Nested Class Summary

    Nested Classes
    Modifier and Type
    Class
    Description
    static final record 
    角色詳情頁可即時套用的目標欄位快照(與 server.gui.GuiApiServer 的解析欄位對應)。
  • Method Summary

    Modifier and Type
    Method
    Description
    static void
    apply(MapleCharacter chr, LiveCharacterEditor.Edit old, LiveCharacterEditor.Edit e, boolean refreshVisuals, boolean inCashShop)
    e(目標值)相對於 old(套用前的現值)中有變更的欄位即時套用到線上角色: 先把變更欄位寫入記憶體(使其在下次存檔時持久化),再依情境刷新;未變更的欄位完全不動、不送封包。

    Methods inherited from class Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Method Details

    • apply

      public static void apply(MapleCharacter chr, LiveCharacterEditor.Edit old, LiveCharacterEditor.Edit e, boolean refreshVisuals, boolean inCashShop)
      e(目標值)相對於 old(套用前的現值)中有變更的欄位即時套用到線上角色: 先把變更欄位寫入記憶體(使其在下次存檔時持久化),再依情境刷新;未變更的欄位完全不動、不送封包。

      職業若變更,會在設定前先 MapleCharacter.cancelAllBuffs()(舊職業 buff 不應殘留到新職業)。 樂豆/楓葉點數以「目標值減目前值」的增減量透過 MapleCharacter.modifyCSPoints(int, int) 達成。

      Parameters:
      chr - 目標線上角色(不可為 null
      old - 套用前的現值快照(用於逐欄比對出「有變更」者)
      e - 欲套用的目標欄位
      refreshVisuals - 是否在套用後刷新客戶端;呼叫端若緊接著要踢線(如封鎖)可傳 false 以略過刷新(踢線時的 saveToDB 仍會持久化已寫入記憶體的新值)
      inCashShop - 角色是否位於購物商城/MTS;為 true 時不送頻道封包(避免商城客戶端斷線), 僅在點數變更時以 MTSCSPacket.getCSInfo(MapleClient) 刷新餘額、地圖變更時設定返回地圖