外观
商城与点券 · 技术实现
「玩家设定 →」
1. 代码位置
| 层 | 类 | 职责 |
|---|---|---|
| Controller | controller/ShopController(/api/shop) | overview / material-choice-box/buy / rainbow-stone/exchange / world-horn/exchange / naming-exclusive/buy / gold-exchange / mythic-stone/buy |
| Service | service/ShopService | 商城总览、神石兑换、材料自选箱、周限购 |
| Service | service/ShopMaterialChoiceService | 材料自选箱结算 |
| domain | domain/ShopBalanceRules | 点券/神石/卡片常量与额度公式 |
| domain | domain/MaterialChoiceBoxType、domain/MaterialChoiceType | 材料自选箱类型 |
| domain | domain/GoldExchangeRules | 打金兑换商品(灵金/黄金/元宝 → 神石) |
2. 数据表
| 表 | 关键列 | 说明 |
|---|---|---|
player_weekly_shop_purchase | player_id、week、product_id、quantity | 商城周限购(V31) |
inventory_item | player_id、item_id、quantity | 点券/神石持有(V1) |
player_privilege | player_id、vip_level、total_recharge | 额度公式输入(V8) |
3. 配置与常量
- 商城常量:
名称 数值 说明 welfareTicketIdWELFARE_TICKET_ID 4001L — rainbowStoneIdRAINBOW_STONE_ID 4002L — monthlyCardIdMONTHLY_CARD_ID 4003L — namingCardIdNAMING_CARD_ID 4004L — lifetimeCardIdLIFETIME_CARD_ID 4005L — welfareTicketNameWELFARE_TICKET_NAME "福利点券" — dailySignInRewardTicketsDAILY_SIGN_IN_REWARD_TICKETS 1_000 — rainbowStoneNameRAINBOW_STONE_NAME "五彩神石" — monthlyCardNameMONTHLY_CARD_NAME "月卡" — namingCardNameNAMING_CARD_NAME "冠名卡" — lifetimeCardNameLIFETIME_CARD_NAME "终身卡" — namingNameNAMING_NAME "冠名" — dailyWelfareChallengeLimitDAILY_WELFARE_CHALLENGE_LIMIT 100 — rainbowStonePriceRAINBOW_STONE_PRICE 100 — baseDailyStoneLimitBASE_DAILY_STONE_LIMIT 50 — monthlyCardExtraStoneLimitMONTHLY_CARD_EXTRA_STONE_LIMIT 50 — vipExtraStoneLimitPerLevelVIP_EXTRA_STONE_LIMIT_PER_LEVEL 20 — namingExtraStoneLimitNAMING_EXTRA_STONE_LIMIT 300 — serverDailyStoneLimitSERVER_DAILY_STONE_LIMIT 600 — worldHornLimitIdWORLD_HORN_LIMIT_ID 9501L 世界喇叭福利点券兑换(对齐 docs/33 §4.2) worldHornLimitNameWORLD_HORN_LIMIT_NAME "世界喇叭日限购" — worldHornPriceWORLD_HORN_PRICE 100 — dailyWorldHornLimitDAILY_WORLD_HORN_LIMIT 10 — rainbowStoneResonanceRatePerStoneRAINBOW_STONE_RESONANCE_RATE_PER_STONE 0.0004D 月卡/终身卡各提供 ×1.25,VIP5 提供 ×1.5,冠名提供 ×2.0 最终倍率;功法不再进入成长速率。 monthlyCardGrowthBaseContributionMONTHLY_CARD_GROWTH_BASE_CONTRIBUTION 1 — vip5GrowthBaseContributionVIP5_GROWTH_BASE_CONTRIBUTION 1 — vip5GrowthThresholdVIP5_GROWTH_THRESHOLD 5 — namingGrowthBaseContributionNAMING_GROWTH_BASE_CONTRIBUTION 1 — lifetimeCardGrowthBaseContributionLIFETIME_CARD_GROWTH_BASE_CONTRIBUTION 1 — monthlyCardFinalMultiplierMONTHLY_CARD_FINAL_MULTIPLIER 1.25D — lifetimeCardFinalMultiplierLIFETIME_CARD_FINAL_MULTIPLIER 1.25D — vip5FinalMultiplierVIP5_FINAL_MULTIPLIER 1.5D — namingFinalMultiplierNAMING_FINAL_MULTIPLIER 2.0D — baseGrowthRateBASE_GROWTH_RATE 5.0D — monthlyCardAttackSpeedBonusMONTHLY_CARD_ATTACK_SPEED_BONUS 2.0D — lifetimeCardAttackSpeedBonusLIFETIME_CARD_ATTACK_SPEED_BONUS 2.0D — vipAttackSpeedBonusPerLevelVIP_ATTACK_SPEED_BONUS_PER_LEVEL 0.2D — namingAttackSpeedBonusNAMING_ATTACK_SPEED_BONUS 3.0D — namingExtraTicketsNAMING_EXTRA_TICKETS 500 — mountDropRateMOUNT_DROP_RATE 0.001D 坐骑掉率,对齐进阶石 mountMaterialQtyEasyMOUNT_MATERIAL_QTY_EASY 50 坐骑/翅膀副本升级材料按怪物分级掉落(百次模型,NORMAL 100 颗/次) mountMaterialQtyNormalMOUNT_MATERIAL_QTY_NORMAL 100 — mountMaterialQtyHardMOUNT_MATERIAL_QTY_HARD 150 — mountMaterialQtyEliteMOUNT_MATERIAL_QTY_ELITE 200 — mountMaterialQtyBossMOUNT_MATERIAL_QTY_BOSS 250 — entryDungeonMaterialMultiplierENTRY_DUNGEON_MATERIAL_MULTIPLIER 0.40D — wingDropRateWING_DROP_RATE 0.001D 翅膀副本掉落与升级消耗(对齐 docs/翅膀玩法设计文档.md §5),数值镜像坐骑。 petDropRatePET_DROP_RATE 0.001D — welfareBaseTicketsWELFARE_BASE_TICKETS 10 福利怪掉落规则(加法模型,可叠加) monthlyCardExtraTicketsMONTHLY_CARD_EXTRA_TICKETS 100 — vipTicketBonusPerLevelVIP_TICKET_BONUS_PER_LEVEL 20 — maxVipLevelMAX_VIP_LEVEL 10 — vipThresholdsVIP_THRESHOLDS { 0, 100, 500, 1000, 3000, 5000, 10000, 20000, 50000, 100000, 500000 } VIP0 来源:emberfall-server/src/main/java/com/emberfall/domain/ShopBalanceRules.java· commit5916da43b88f343400acfdb20c97a5cc7927fdbd- 货币:
WELFARE_TICKET_ID=4001(福利点券)、RAINBOW_STONE_ID=4002(五彩神石)、RAINBOW_STONE_PRICE=100 - 福利怪掉落:基础 10 + VIP 每级 20 + 月卡 100 + 冠名 500(
ticketsPerChallenge),每日挑战上限 100(DAILY_WELFARE_CHALLENGE_LIMIT) - 每日神石额度:基础 50 + 月卡 50 + VIP 每级 20 + 冠名 300,封顶 600
- 神石共鸣:
RAINBOW_STONE_RESONANCE_RATE_PER_STONE=0.0004(每颗 +0.04% 成长速率)
- 货币:
- 兑换(
GoldExchangeRules):神话石点券直购 500、灵金 20 万、黄金/元宝各 2 万;五彩神石 2 万灵金(限购 7×10);材料包日限 10/30 - yml 键:无(注意
trial.v2.cycle.welfare-ticket-item-id: 4001共享福利点券)
4. 数据流简述
GET /api/shop/overview 按 PlayerPrivilege 计算各商品价格与每日/每周额度。POST /api/shop/rainbow-stone/exchange 以福利点券 4001 按 100 单价兑换五彩神石,扣减点券、校验 dailyStoneLimit(额度公式封顶 600)后发放。POST /api/shop/gold-exchange/buy 按 GoldExchangeRules 用灵金/黄金/元宝兑换神石与材料包,周限购写 player_weekly_shop_purchase。持有神石数量进入 GrowthPolicyService 共鸣计算(每颗 +0.04%)。
5. 已知差异
无
6. 相关代码
- VIP(
ShopBalanceRules:额度公式) - 打金(
GoldExchangeRules:兑换商品) - 交易行(
TradeRules.CURRENCY_ITEM_ID=4001:福利点券作货币) - 每日签到(
DAILY_SIGN_IN_REWARD_TICKETS=1000)