Class FishingRewardFactory

java.lang.Object
server.FishingRewardFactory

public class FishingRewardFactory extends Object
釣魚加權獎勵工廠(單例)。讀取 fishing_rewards 資料表,把每一列當成一個「加權獎勵」, 於玩家每次釣魚時以單一加權抽樣抽出一筆 FishingRewardFactory.FishingReward,再由 client.MapleCharacter 依其 FishingRewardFactory.RewardType 發放(經驗 / 楓幣 / GASH / 楓點 / 裝備 / 道具)。

本類別取代舊版「先在 {40,40,20} 內決定楓幣/經驗/道具,再於道具池內抽」的兩段式設計,改為所有獎勵型別 共用同一張權重表,完全由後台「釣魚系統」頁設定。資料表結構見 database.DatabaseBootstrapFISHING_REWARDS_DDL;改表後以 !reloadfishing 或後台「刷新」鈕呼叫 reloadItems() 生效。

  • Field Details

    • CASH_CAP

      public static final long CASH_CAP
      金額型獎勵(楓幣 / GASH / 楓點)的上限:21 億,避免超過 int 範圍造成溢位成負值。
      See Also:
  • Constructor Details

    • FishingRewardFactory

      public FishingRewardFactory()
  • Method Details

    • getInstance

      public static FishingRewardFactory getInstance()
    • drawReward

      以單一加權抽樣抽出一筆獎勵(權重 = 各列 chance)。無任何獎勵列時回傳 null (呼叫端視為「本次沒釣到東西」)。
      Returns:
      抽中的獎勵;無獎勵時為 null
    • reloadItems

      public void reloadItems()
    • rollAmount

      public static int rollAmount(long min, long max)
      [min,max] 抽一個金額/數量,並夾在 [0, 21億] 內(避免 int 溢位)。
      Parameters:
      min - 區間下界
      max - 區間上界
      Returns:
      介於兩界(含)的值,且不超過 CASH_CAP
    • buildEquip

      public static Equip buildEquip(FishingRewardFactory.FishingReward r)
      依獎勵設定建立一件裝備:先取 WZ 基礎屬性,若啟用自訂屬性則全歸零後只填 STR/DEX/INT/LUK/AD(watk)/AP(matk), 若啟用浮動則對相關屬性套用 ±floatRange 的隨機浮動(僅浮動目前 >0 的屬性;自訂模式只浮動該六項)。
      Parameters:
      r - 釣魚獎勵(型別須為 FishingRewardFactory.RewardType.EQUIP)
      Returns:
      建好的裝備