Class CashItemFactory

java.lang.Object
server.CashItemFactory

public class CashItemFactory extends Object
現金商城商品目錄的全域工廠與快取,負責從 WZ 資料與資料庫載入所有可販售項目。

本類別為全域單例(getInstance()),於伺服器啟動或 reload=true 時呼叫 initialize(boolean)Etc.wz/Commodity.img 讀取 CashItem 基本屬性, 再合併資料庫 cashshop_modified_items 表中的 CashModItem 覆蓋記錄。

同時維護以下輔助映射:

  • 套裝組合(itemPackage):來自 CashPackage.img,一個序號對應多個子道具序號。
  • 開盒獎勵(openBox):特定箱子道具(如彩帽箱、武器箱)對應的可能序號清單。
  • 皇家/整型優惠券(unkCoupon/unkCoupon2/royaCoupon): 各種美髮券與整型券的可選造型清單(含男/女分組)。

協作者:CashShop(消費本工廠取得 CashItem 後轉換為背包道具); provider.MapleDataProviderFactory(讀取 WZ 資料); DatabaseConnection(讀取 cashshop_modified_items)。

  • Constructor Details

    • CashItemFactory

      public CashItemFactory()
  • Method Details

    • getInstance

      public static CashItemFactory getInstance()
    • initialize

      public void initialize(boolean reload)
    • getAllItems

      public final List<CashItem> getAllItems()
    • getHideAllDefaultItems

      public final List<CashItem> getHideAllDefaultItems()
    • getHideItems

      public final List<CashItem> getHideItems()
    • getAllModItems

      public final List<CashModItem> getAllModItems()
    • getMainItems

      public final List<CashModItem> getMainItems()
    • getSimpleItem

      public final CashItem getSimpleItem(int sn)
    • getItem

      public final CashItem getItem(int sn)
    • getPackageItems

      public final List<Integer> getPackageItems(int itemId)
    • getModItem

      public final CashModItem getModItem(int sn)
    • getAllModInfo

      public final Collection<CashModItem> getAllModInfo()
    • getRandomItemInfo

      public final Map<Integer, List<Integer>> getRandomItemInfo()
    • getUnkCoupon

      public final Map<Integer, List<Pair<Integer,Integer>>> getUnkCoupon()
    • getUnkCoupon2

      public final Map<Integer, List<List<Pair<Integer,Integer>>>> getUnkCoupon2()
    • getRoyaCoupon

      public final Map<Integer, Pair<List<Integer>, List<Integer>>> getRoyaCoupon()
    • getItemSN

      public final int getItemSN(int itemid)
    • addModItem

      public void addModItem(CashModItem cModItem)
    • updateModItem

      public void updateModItem(CashModItem cModItem)
    • deleteModItem

      public void deleteModItem(int sn)
    • saveModifiedItem

      public void saveModifiedItem(int serial, int itemid, int count, int price, int period, int gender, int mark, boolean showup, int priority)
      新增或更新 cashshop_modified_items 一筆現金商城商品(後台 GUI 使用), 並同步更新記憶體中的 itemMods 快取(免重啟即生效)。

      serial(SN)為主鍵 upsert:序號不存在則新增,存在則更新可編輯欄位 (售價/旗標/顯示/道具 ID/優先序/期限/性別/數量);packagemeso 等非 GUI 欄位僅於首次新增時設為預設值,更新時保留原值。

      Parameters:
      serial - 商品序號(SN,前 3 碼為分區)
      itemid - 道具 ID
      count - 數量
      price - 售價(楓葉點數/樂豆點數,對應 discount_price 欄)
      period - 有效天數(0=永久)
      gender - 適用性別(0=男 1=女 2=共用)
      mark - 旗標(對應 mark 欄,預設 -2)
      showup - 是否上架顯示
      priority - 排序優先序
    • removeModifiedItem

      public void removeModifiedItem(int serial)
      cashshop_modified_items 刪除一筆商品並同步移除記憶體快取。
      Parameters:
      serial - 商品序號(SN)
    • nextSerialForCategory

      public int nextSerialForCategory(int category)
      配發指定分區(SN 前 3 碼)下一個可用的序號。

      分區 category 對應的序號區間為 [category*100000, category*100000+100000), 例如 504(轉蛋)→ 50400000 起;回傳該分區目前最大序號 +1(無則回傳區間起點)。

      Parameters:
      category - 分區代碼(如 200=帽子、504=轉蛋)
      Returns:
      該分區下一個可用序號