Files
lunar-tear/server/internal/masterdata/config.go
T
Ilya Groshev 02f511f40c Initial commit
2026-04-14 09:28:26 +03:00

90 lines
2.9 KiB
Go

package masterdata
import (
"fmt"
"strconv"
"lunar-tear/server/internal/utils"
)
type configRow struct {
ConfigKey string `json:"ConfigKey"`
Value string `json:"Value"`
}
type GameConfig struct {
ConsumableItemIdForGold int32
ConsumableItemIdForMedal int32
ConsumableItemIdForRareMedal int32
ConsumableItemIdForArenaCoin int32
ConsumableItemIdForExploreTicket int32
ConsumableItemIdForMomPoint int32
ConsumableItemIdForPremiumGachaTicket int32
ConsumableItemIdForQuestSkipTicket int32
CharacterRebirthAvailableCount int32
CharacterRebirthConsumeGold int32
CostumeAwakenAvailableCount int32
CostumeLimitBreakAvailableCount int32
MaterialSameWeaponExpCoefficientPermil int32
UserStaminaRecoverySecond int32
RewardGachaDailyMaxCount int32
QuestSkipMaxCountAtOnce int32
WeaponLimitBreakAvailableCount int32
}
func LoadGameConfig() (*GameConfig, error) {
rows, err := utils.ReadJSON[configRow]("EntityMConfigTable.json")
if err != nil {
return nil, fmt.Errorf("load config table: %w", err)
}
kv := make(map[string]string, len(rows))
for _, r := range rows {
kv[r.ConfigKey] = r.Value
}
cfg := &GameConfig{}
cfg.ConsumableItemIdForGold = parseInt32(kv, "CONSUMABLE_ITEM_ID_FOR_GOLD")
cfg.ConsumableItemIdForMedal = parseInt32(kv, "CONSUMABLE_ITEM_ID_FOR_MEDAL")
cfg.ConsumableItemIdForRareMedal = parseInt32(kv, "CONSUMABLE_ITEM_ID_FOR_RARE_MEDAL")
cfg.ConsumableItemIdForArenaCoin = parseInt32(kv, "CONSUMABLE_ITEM_ID_FOR_ARENA_COIN")
cfg.ConsumableItemIdForExploreTicket = parseInt32(kv, "CONSUMABLE_ITEM_ID_FOR_EXPLORE_TICKET")
cfg.ConsumableItemIdForMomPoint = parseInt32(kv, "CONSUMABLE_ITEM_ID_FOR_MOM_POINT")
cfg.ConsumableItemIdForPremiumGachaTicket = parseInt32(kv, "CONSUMABLE_ITEM_ID_FOR_PREMIUM_GACHA_TICKET")
cfg.ConsumableItemIdForQuestSkipTicket = parseInt32(kv, "CONSUMABLE_ITEM_ID_FOR_QUEST_SKIP_TICKET")
cfg.CharacterRebirthAvailableCount = parseInt32(kv, "CHARACTER_REBIRTH_AVAILABLE_COUNT")
cfg.CharacterRebirthConsumeGold = parseInt32(kv, "CHARACTER_REBIRTH_CONSUME_GOLD")
cfg.CostumeAwakenAvailableCount = parseInt32(kv, "COSTUME_AWAKEN_AVAILABLE_COUNT")
cfg.CostumeLimitBreakAvailableCount = parseInt32(kv, "COSTUME_LIMIT_BREAK_AVAILABLE_COUNT")
cfg.MaterialSameWeaponExpCoefficientPermil = parseInt32(kv, "MATERIAL_SAME_WEAPON_EXP_COEFFICIENT_PERMIL")
cfg.UserStaminaRecoverySecond = parseInt32(kv, "USER_STAMINA_RECOVERY_SECOND")
cfg.RewardGachaDailyMaxCount = parseInt32(kv, "REWARD_GACHA_DAILY_MAX_COUNT")
cfg.QuestSkipMaxCountAtOnce = parseInt32(kv, "QUEST_SKIP_MAX_COUNT_AT_ONCE")
cfg.WeaponLimitBreakAvailableCount = parseInt32(kv, "WEAPON_LIMIT_BREAK_AVAILABLE_COUNT")
return cfg, nil
}
func parseInt32(kv map[string]string, key string) int32 {
s, ok := kv[key]
if !ok {
return 0
}
v, err := strconv.ParseInt(s, 10, 32)
if err != nil {
return 0
}
return int32(v)
}