package model import ( "rocommon/util" "roserver/serverproto" "strings" ) var GlobalAttrPetNotInheritHeroList []serverproto.Attr //宠物不继承给玩家的属性列表 var ChatWorldRoleLevel int32 = 0 var ChatWorldMapLevel int32 = 0 var ChatWorldTime uint64 = 0 var ChatWorldTotalRecharge float32 = 30 //发言累计充值 var GlobalRoleOriginalAttrPoint int32 = 0 var GlobalDaoChangChallengeCount int32 = 0 var GlobalDaoChangByCount int32 = 0 var GlobalDaoChangRewardCount int32 = 0 var GlobalDaoChangRankMinLevel int32 = 0 var GlobalArenaByCountCost = map[int32]int32{} var GlobalMailIdArenaTopReward int32 = 0 var GlobalMailIdArenaScoreLevelReward int32 = 0 var GlobalMailIdBossOwnerReward int32 = 0 var GlobalMailIdBossOtherReward int32 = 0 var GlobalMailIdExpeditionReward int32 = 4 var GlobalMailIdActivitiesReward int32 = 5 var GlobalMailIdActivitiesCurRechargeReward int32 = 28 var GlobalMailIdInvitationDelMember int32 = 6 var GlobalMailIdVipLevelUp int32 = 7 var GlobalMailIdPayReward int32 = 8 var GlobalMailRuneExplore int32 = 22 var GlobalMailBoliShop int32 = 33 var GlobalMailSpecialPrivilegeCard int32 = 34 var GlobalRuneGiftGoldShopResetVersion int32 = 0 //var GlobalMailIdMormalMonthCard int32 = 9 //var GlobalMailIdVipMonthCard int32 = 10 var GlobalSystemMsgItemList = map[int32]struct{}{} //获得稀有道具播报系统公告 var GlobalSocialSubNumLimit int32 = 99 var GlobalSocialFansNumLimit int32 = 999 var GlobalSocialBlackNumLimit int32 = 99 var GlobalFemaleHead int32 var GlobalMaleHead int32 var GlobalWorldBossChallengeCount int32 = 0 var GlobalIncomeTime int32 = 0 var GlobalIncomeLimitTime int32 = 0 // evil var GlobalEvilRefreshConsume = map[int32]int32{} var GlobalEviChallengeCost int32 = 0 var GlobalEvilExpLimit int32 = 0 // CreateItemList var GlobalCreateItemList = map[int32]int32{} var GlobalCreateRoleMailReward = map[int32]int32{} // SystemMessageType var GlobalSystemMessageTypeArenaWinStreak = 0 // competition var GlobalCompetitionSectionFactor float32 = 0.75 var GlobalCompetitionSectionTotal int64 = 750 var GlobalCompetitionScoreItem = map[int32]*serverproto.KeyValueType{} //通缉令兑换积分 var GlobalCompetitionScoreItemFactor []*serverproto.KeyValueTypeList //通缉令兑换积分权重 // guild var GlobalGuildApplyListMax int32 = 0 var GlobalGuildVicePreNum int32 = 0 var GlobalGuildJoinLevel int32 = 0 var GlobalGuildRoleApplyMax int32 = 0 var GlobalGuildLogMaxCount int32 = 0 var GlobalGuildBuildBadge int32 = 0 var GlobalGuildMinNameStringLen int32 = 0 var GlobalGuildMaxNameStringLen int32 = 0 var GlobalGuildMinSearchStringLen int32 = 0 var GlobalGuildMaxSearchStringLen int32 = 0 var GlobalGuildHeadFrame int32 = 0 // 公会战 var GlobalGuildBattleRewardTime uint64 = 5 * 1000 //5s 公会战收益时间间隔(秒) var GlobalGuildBattleChallengeNum int32 = 10 //公会战单场挑战次数 var GlobalGuildBattleBuyChallengeCost uint64 = 0 var GlobalGuildBattleRebornCost uint64 = 0 var GlobalGuildBattleFightPower int32 = 0 var GlobalGuildBattleWinMaxScore int32 = 0 var GlobalGuildBattleRebornCdTime uint64 = 60 * 1000 //虚弱时间 // 宠物技能升级消耗(领悟消耗) var GlobalPetSkillUpConsume int32 = 0 var GlobalPetAdvanceLimit []int32 var GlobalPetDecomposeItemList = map[int32]*serverproto.KeyValueType{} //分解获得的道具 var GlobalPetAssistCD int32 = 0 //援助设置CD时间 var GlobalNormalPetDecompose int32 = 0 var GlobalPet1LevelDecompose []*serverproto.KeyValueType var GlobalVipPetDecompose int32 = 0 var GlobalPetDecomposeNormal = map[uint32]*serverproto.KeyValueType{} // var GlobalPetDecomposeMin = map[uint32]*serverproto.KeyValueType{} // var GlobalPetDecomposeMvp = map[uint32]*serverproto.KeyValueType{} // var GlobalPetQiyueUnlockCost []serverproto.KeyValueType //宠物觉醒槽位解析消耗 var GlobalPetQiyueMaxSlotNum = 4 //宠物觉醒最大可解锁槽位 var GlobalPetQiyueNatureRate int32 = 1000 //宠物契约相同属性额外继承属性比例 // 远征之门 var GlobalExpeditionGuildCallForHelpCDTime uint64 = 0 var GlobalExpeditionGuildHelpNum int32 = 0 var GlobalExpeditionGuildBeHelpedNum int32 = 0 var GlobalExpeditionChallengeNum int32 = 0 var GlobalExpeditionHelpRewardList = map[int32]int32{} var GlobalExpeditionResetRankScore int32 = 0 // invitation var GlobalInvitationClickNum int32 = 10 var GlobalInvitationClickMasterRes int32 = 10 var GlobalInvitationClickMemberRes int32 = 10 var GlobalQuickBattleTimes int32 = 0 var GlobalRMBToVipExpRMB int32 = 0 var GlobalRMBToVipExpVip int32 = 0 // 冲榜 爬塔, 道场 var GlobalMailIdRushTower int32 = 11 var GlobalMailIdRushArena int32 = 12 var GlobalRushTowerFightCount int32 = 0 var GlobalRushDaoFightCount int32 = 0 var GlobalMailRushPetBaseReward int32 = 25 var GlobalMailRushPetRankReward int32 = 24 var GlobalMailRushSkillBaseReward int32 = 30 var GlobalMailRushSkillRankReward int32 = 29 var GlobalMailIdRushMap int32 = 15 var GlobalMailRushMapBaseReward int32 = 16 // 冲榜邮件Rank奖励ID var GlobalRushTowerRewardList []*serverproto.KeyValueType //爬塔冲榜奖励 var GlobalRushArenaRewardList []*serverproto.KeyValueType //英灵殿冲榜奖励 // 冲榜邮件战斗次数奖励ID var GlobalMailRushTowerBaseReward int32 = 13 var GlobalMailRushDaoBaseReward int32 = 14 var GloablMailDivineReward int32 = 27 var GloablMailIdolFansReward int32 = 32 // 公会战会长奖励 var GlobalMailGuildBattlePreReward int32 = 18 // 公会战成员奖励 var GlobalMailGuildBattleMemReward int32 = 19 // 积分奖励 var GlobalMailGuildBattleScoreReward int32 = 20 // 击杀奖励 var GlobalMailGuildBattleKillerReward int32 = 21 // 公会魔王 var GlobalMailGuildDemonReward int32 = 31 // 14天连续登录补领需要金币 var GlobalActivities14DaysLogin int32 = 0 // 百人道场 var GlobalDaoChang100RewardInterval uint64 = 5 * 60 * 1000 var GlobalDaoChang100BaseRewardList = map[int32]int32{} var GlobalDaoChang100ChallengeCount int32 = 3 var GlobalDaoChang100TotalRewardTime uint64 = 48 * 60 * 60 * 1000 var GlobalDaoChangBuyCostList []*serverproto.KeyValueType var GlobalDaoChangUnlockMapLevelId int32 = 0 var GlobalDaoChang100BattleCheck []float64 //百人道场最低战力校验配置参数(A1;A2;A3) var GlobalArenaBattleCheck []float64 //英灵殿最低战力校验配置参数(A1;A2;A3) // 问卷调查奖励 var GlobalQuestionRewardList = map[int32]int32{} var GlobalKeepSakeCrystalToMaterial = map[int32]int32{} var GlobalKeepSakeMaterialToCrystal = map[int32]int32{} // 职业更换 var GlobalReplaceJobMainHeroLevel = 30 //主角登记 var GlobalReplaceJobHeroLevel = 30 //伙伴等级 var GlobalReplaceJobConsumeList []*serverproto.KeyValueType //更换职业消耗 // 作弊处理 var GlobalCheatBanTime = map[int32]uint64{} var GlobalMaxCheatBanTime uint64 = 0 var GlobalMaxCheatBanNum int32 = 0 var GlobalCheatPersonalChat ConvertCheatMsgData var GlobalCheatPublicChat ConvertCheatMsgData var GlobalGuildKickMemberCount int32 = 0 // 玩家累计充值档位 var GlobalTotalRechargeList []*serverproto.KeyValueType var GlobalExchangeGuildPresident int32 = 7 var GlobalCashShopReward []*serverproto.KeyValueType var GlobalCashShopCostId int32 = 40 var GlobalCashShopCostCount int32 = 100 var GlobalPetSkillUpCost int32 = 0 var GlobalPetLevelScore int32 = 0 var GlobalPetSkillScore int32 = 0 var GlobalPetQualityScore []*serverproto.KeyValueType // 远航试炼 var GlobalCrossYuanHangTrialMaxNum int32 = 0 //远航每日出发次数上限 var GlobalCrossYuanHangTrialRewardNum int32 = 0 //远航打劫获得奖励有效次数(每日重置) var GlobalCrossYuanHangTrialViewMaxNum int32 = 0 //远航单次同屏所需显示人数上限 var GlobalCrossYuanHangTrialRankListMaxNum int32 = 0 //远航抢夺排行榜记录数量上限 var GlobalCrossYuanHangTrialOpenTimeBeginTime string var GlobalCrossYuanHangTrialOpenTimeEndTime string var GlobalCrossTopTowerOpenTimeBeginTime string var GlobalCrossTopTowerOpenTimeEndTime string var GlobalCrossMaxFightPowerRankVal int32 var GlobalCrossMaxFightPowerFightInfoUpdateTime int32 var GlobalGuildDemonBroadCastLevel int32 = 0 // 技能装备(神器)重铸 var GlobalSkillEquipReforgeMinStart int32 var GlobalSkillEquipReforgePoolList []int32 var GlobalSkillEquipShiftCost = map[int32]*serverproto.KeyValueType{} var GlobalCruiseMax int32 = 0 var GlobalCompetitonDayRewardLevel int32 = 0 var GlobalWishSlotMaxCnt int32 = 0 var GlobalWishSlotCost = serverproto.KeyValueType{} // bt服务器常量处理 // 充值钱包 var GlobalCreditRechargeFactor float32 = 0 // 充值钱包 免费充值额度神域经验比例 var GlobalCreditRechargeInitMax int32 = 0 // 充值钱包 初始化最大额度 var GlobalRoCoinFactor float32 = 10 // rmb获得RO币比例系数 var GlobalFastBattleTime []serverproto.KeyValueType // 特殊处理使用道具添加战斗倍数时间[道具id:持续时间] var GlobalClimbingTowerDayReward []serverproto.KeyValueType // 试炼馈赠(层数:免费充值额度数量) var GlobalRoCoinToExp = 1.0 // RO币兑换波利商城经验比例 var GlobalWorldBossChallengeCost []serverproto.KeyValueType type IdolDayReward struct { Id int32 StartTime string EndTime string ItemId int32 ItemCount int32 } var GlobalCompetitionIdolDayReward = map[int32]*IdolDayReward{} var GlobalCardLevelExchange = map[int32]*serverproto.KeyValueType{} // func ConvertOldRedisGlobalCfg() { convertGlobalCfg() } func convertGlobalCfg() { //宠物不继承给玩家的属性列表 tmpAttrStrList := strings.Split(getGlobalCfgValS(230), ";") for idx := 0; idx < len(tmpAttrStrList); idx++ { tmpAttrId, _ := Str2Num(tmpAttrStrList[idx]) if tmpAttrId > 0 { GlobalAttrPetNotInheritHeroList = append(GlobalAttrPetNotInheritHeroList, serverproto.Attr(tmpAttrId)) } } //玩家发言条件 if cfgData, ok := serverproto.GlobalCfgLoader[int32(serverproto.GlobalType_Global_Chat_World_Role_Level)]; ok { strList := strings.Split(cfgData.SVal, ";") for idx := range strList { key, value := Str2Res(strList[idx]) if key == int32(serverproto.TaskType_Base_Level) { ChatWorldRoleLevel = value } else if key == int32(serverproto.TaskType_Level_Battle_Count) { ChatWorldMapLevel = value } else if key == int32(serverproto.TaskType_Recharge_Num_Accu) { ChatWorldTotalRecharge = float32(value) } } } //玩家聊天发言间隔时长(S) if cfgData, ok := serverproto.GlobalCfgLoader[int32(serverproto.GlobalType_Global_Chat_World_Time)]; ok { ChatWorldTime = uint64(cfgData.IVal * 1000) } //初始化可添加的属性点 GlobalRoleOriginalAttrPoint = getGlobalCfgValI(serverproto.GlobalType_Global_Role_Original_AddAttrPoint) //道场挑战次数 GlobalDaoChangChallengeCount = getGlobalCfgValI(serverproto.GlobalType_Global_Arena_DaoChang_Challenge) //英灵殿可购买挑战次数 GlobalDaoChangByCount = getGlobalCfgValI(serverproto.GlobalType_Global_Arena_DaoChang_Buy_Count) //道场胜利奖励次数 GlobalDaoChangRewardCount = getGlobalCfgValI(serverproto.GlobalType_Global_Arena_DaoChang_Reward_count) //英灵殿匹配对象最低等级 GlobalDaoChangRankMinLevel = getGlobalCfgValI(serverproto.GlobalType_Global_Arena_DaoChang_RankMin_Level) //英灵殿购买挑战次数消耗 if cfgData, ok := serverproto.GlobalCfgLoader[int32(serverproto.GlobalType_Global_Arena_DaoChang_Buy_Cost)]; ok { costStrList := strings.Split(cfgData.SVal, ";") for idx := range costStrList { key, value := Str2Res(costStrList[idx]) if key > 0 && value > 0 { GlobalArenaByCountCost[key] += value } } } //英灵殿排名奖励邮件ID GlobalMailIdArenaTopReward = getGlobalCfgValI(serverproto.GlobalType_Global_MailId_Arena_Top_Reward) //英灵殿段位奖励邮件ID GlobalMailIdArenaScoreLevelReward = getGlobalCfgValI(serverproto.GlobalType_Global_MailId_Arena_ScoreLevel_Reward) //枯树枝召唤奖励邮件ID GlobalMailIdBossOwnerReward = getGlobalCfgValI(serverproto.GlobalType_Global_MailId_Boss_Owner_Reward) //枯树枝参与奖励邮件ID GlobalMailIdBossOtherReward = getGlobalCfgValI(serverproto.GlobalType_Global_MailId_Boss_Other_Reward) //获得稀有道具播报系统公告 tmpGlobalSystemMsgItemList := strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_SystemMsg_Item), ";") for idx := 0; idx < len(tmpGlobalSystemMsgItemList); idx++ { msgItemId, _ := Str2Num(tmpGlobalSystemMsgItemList[idx]) if msgItemId > 0 { GlobalSystemMsgItemList[int32(msgItemId)] = struct{}{} } } //关注列表人数上限 GlobalSocialSubNumLimit = getGlobalCfgValI(serverproto.GlobalType_Global_Social_SubNum_Limit) if GlobalSocialSubNumLimit <= 0 { GlobalSocialSubNumLimit = 99 } //粉丝列表人数上限 GlobalSocialFansNumLimit = getGlobalCfgValI(serverproto.GlobalType_Global_Social_FansNum_Limit) if GlobalSocialFansNumLimit <= 0 { GlobalSocialFansNumLimit = 999 } //屏蔽列表人数上限 GlobalSocialBlackNumLimit = getGlobalCfgValI(serverproto.GlobalType_Global_Social_BlackNum_Limit) if GlobalSocialBlackNumLimit <= 0 { GlobalSocialBlackNumLimit = 99 } //init head if cfgData, ok := serverproto.GlobalCfgLoader[int32(serverproto.GlobalType_Global_Init_Head_Portrait)]; ok { strList := strings.Split(cfgData.SVal, ";") if len(strList) >= 2 { value, _ := Str2Num(strList[0]) GlobalFemaleHead = int32(value) value2, _ := Str2Num(strList[1]) GlobalMaleHead = int32(value2) } else { util.InfoF("load head failed %v", len(strList)) } } //world boss challenge count GlobalWorldBossChallengeCount = getGlobalCfgValI(serverproto.GlobalType_Global_World_Boss_ChallengeNum_Limit) //income GlobalIncomeTime = getGlobalCfgValI(serverproto.GlobalType_Global_Battle_Income_Time) GlobalIncomeLimitTime = getGlobalCfgValI(serverproto.GlobalType_Global_Battle_Limit_Time) //evil GlobalEvilRefreshConsumeStrList := strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_Evil_Consume), ";") for idx := 0; idx < len(GlobalEvilRefreshConsumeStrList); idx++ { key, val := Str2Res(GlobalEvilRefreshConsumeStrList[idx]) if key > 0 && val > 0 { GlobalEvilRefreshConsume[key] = val } } GlobalEviChallengeCost = getGlobalCfgValI(serverproto.GlobalType_Global_Evil_Challenge_Cost) GlobalEvilExpLimit = getGlobalCfgValI(serverproto.GlobalType_Global_Evil_Exp_Limit) //CreateItemList GlobalCreateItemListStr := strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_Create_Item_List), ";") for idx := 0; idx < len(GlobalCreateItemListStr); idx++ { key, val := Str2Res(GlobalCreateItemListStr[idx]) if key > 0 && val > 0 { GlobalCreateItemList[key] = val } } GlobalCreateRoleMailStr := strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_Create_Role_Reward), ";") for idx := 0; idx < len(GlobalCreateRoleMailStr); idx++ { key, val := Str2Res(GlobalCreateRoleMailStr[idx]) if key > 0 && val > 0 { GlobalCreateRoleMailReward[key] = val } } //GlobalSystemMessageTypeArenaWinStreak sysStr := getGlobalCfgValS(serverproto.GlobalType_Global_Competition_Streak_Win) GlobalSystemMessageTypeArenaWinStreak, _ = Str2Num(sysStr) //Competition //赛季公式计算参数 competitionSectionStr := getGlobalCfgValS(serverproto.GlobalType_Global_Competition_Factor) factor, total := Str2Res(competitionSectionStr) if factor > 0 { GlobalCompetitionSectionFactor = float32(factor) / 10000 } if total > 0 { GlobalCompetitionSectionTotal = int64(total) } //赛季获取积分道具 var tmpFactor int32 = 0 var tmpLeftScore int32 = 0 tmpStrList := strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_Competition_ScoreItem), ";") for idx := 0; idx < len(tmpStrList); idx++ { key, v1, v2 := Str2Res_3(tmpStrList[idx]) if key > 0 && v1 > 0 && v2 > 0 { tmpLeftScore = v1 //初始积分 GlobalCompetitionScoreItem[key] = &serverproto.KeyValueType{Key: v1, Value: v2} } else { key, v1 = Str2Res(tmpStrList[idx]) if key > 0 && v1 > 0 { GlobalCompetitionScoreItem[key] = &serverproto.KeyValueType{Key: v1, Value: 0} } } } GlobalCompetitionScoreItemFactor = []*serverproto.KeyValueTypeList{} tmpStrList = strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_Competition_ScoreItem_Factor), ";") for idx := 0; idx < len(tmpStrList); idx++ { v1, v2 := Str2Res(tmpStrList[idx]) if v1 > 0 && v2 > 0 { tmpFactor += v2 GlobalCompetitionScoreItemFactor = append(GlobalCompetitionScoreItemFactor, &serverproto.KeyValueTypeList{ Key: tmpFactor, //权重 ValueList: []int32{tmpLeftScore, v1}, }) tmpLeftScore = v1 } } tmpLeftScore = 0 GlobalGuildApplyListMax = getGlobalCfgValI(serverproto.GlobalType_Global_Guild_Apply_List_Max) GlobalGuildVicePreNum = getGlobalCfgValI(serverproto.GlobalType_Global_Guild_VicePre_Num) GlobalGuildJoinLevel = getGlobalCfgValI(serverproto.GlobalType_Global_Guild_Join_Level) GlobalGuildRoleApplyMax = getGlobalCfgValI(serverproto.GlobalType_Global_Guild_Role_Apply_Max) GlobalGuildLogMaxCount = getGlobalCfgValI(serverproto.GlobalType_Global_Guild_Log_Max_Count) GlobalGuildBuildBadge = getGlobalCfgValI(serverproto.GlobalType_Global_Guild_OnBuild_Badge) //公会名字 guildNameStr := getGlobalCfgValS(serverproto.GlobalType_Global_Guild_Name_String_Len) guildNameMin, guildNameMax := Str2Res(guildNameStr) if guildNameMin > 0 { GlobalGuildMinNameStringLen = guildNameMin } if guildNameMax > 0 { GlobalGuildMaxNameStringLen = guildNameMax } guildSearchStr := getGlobalCfgValS(serverproto.GlobalType_Global_Guild_Search_String_Len) guildSearchMin, guildSearchMax := Str2Res(guildSearchStr) if guildSearchMin > 0 { GlobalGuildMinSearchStringLen = guildSearchMin } if guildSearchMax > 0 { GlobalGuildMaxSearchStringLen = guildSearchMax } //petskill GlobalPetSkillUpConsume = getGlobalCfgValI(serverproto.GlobalType_Global_Pet_SkillUp_Consume) GlobalPetAdvanceLimit = []int32{} GlobalPetAdvanceLimitStrList := strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_Pet_Advance_Limit), ";") for idx := 0; idx < len(GlobalPetAdvanceLimitStrList); idx++ { val, _ := Str2Num(GlobalPetAdvanceLimitStrList[idx]) if val > 0 { GlobalPetAdvanceLimit = append(GlobalPetAdvanceLimit, int32(val)) } } //宠物分解 GlobalPetDecomposeMultiStr := strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_Decompose_Pet_Stone_Noraml), ";") for idx := 0; idx < len(GlobalPetDecomposeMultiStr); idx++ { level, itemId, itemNum := Str2Res_3(GlobalPetDecomposeMultiStr[idx]) if itemNum > 0 { GlobalPetDecomposeNormal[uint32(level)] = &serverproto.KeyValueType{ Key: itemId, Value: itemNum, } } } GlobalPetDecomposeMinStr := strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_Decompose_Pet_Stone_Min), ";") for idx := 0; idx < len(GlobalPetDecomposeMinStr); idx++ { level, itemId, itemNum := Str2Res_3(GlobalPetDecomposeMinStr[idx]) if itemNum > 0 { GlobalPetDecomposeMin[uint32(level)] = &serverproto.KeyValueType{ Key: itemId, Value: itemNum, } } } GlobalPetDecomposeMvpStr := strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_Decompose_Pet_Stone_Mvp), ";") for idx := 0; idx < len(GlobalPetDecomposeMvpStr); idx++ { level, itemId, itemNum := Str2Res_3(GlobalPetDecomposeMvpStr[idx]) if itemNum > 0 { GlobalPetDecomposeMvp[uint32(level)] = &serverproto.KeyValueType{ Key: itemId, Value: itemNum, } } } GlobalPetDecomposeItemListStr := strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_Pet_Decompose), ";") for idx := 0; idx < len(GlobalPetDecomposeItemListStr); idx++ { v1, v2, v3 := Str2Res_3(GlobalPetDecomposeItemListStr[idx]) if v1 > 0 && v2 > 0 && v3 > 0 { GlobalPetDecomposeItemList[v1] = &serverproto.KeyValueType{Key: v2, Value: v3} } } //宠物契约 qiyueListStr := strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_PetQiyue_Slot_Unlock_Cost), ";") for idx := 0; idx < len(qiyueListStr); idx++ { k, v := Str2Res(qiyueListStr[idx]) if k > 0 && v > 0 { GlobalPetQiyueUnlockCost = append(GlobalPetQiyueUnlockCost, serverproto.KeyValueType{Key: k, Value: v}) } } GlobalPetQiyueMaxSlotNum = len(GlobalPetQiyueUnlockCost) GlobalPetQiyueNatureRate = getGlobalCfgValI(serverproto.GlobalType_Global_PetQiyue_Nature_Attr) GlobalPetAssistCD = getGlobalCfgValI(serverproto.GlobalType_Global_Pet_Assist_CD) GlobalNormalPetDecompose = getGlobalCfgValI(serverproto.GlobalType_Global_Normal_Pet_Decomposed) GlobalVipPetDecompose = getGlobalCfgValI(serverproto.GlobalType_Global_Vip_Pet_Decomposed) GlobalPet1LevelDecompose = []*serverproto.KeyValueType{} tmpStrList = strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_Pet_1Level_Decompose_Res), ";") for idx := 0; idx < len(tmpStrList); idx++ { k, v := Str2Res(tmpStrList[idx]) GlobalPet1LevelDecompose = append(GlobalPet1LevelDecompose, &serverproto.KeyValueType{Key: k, Value: v}) } GlobalGuildHeadFrame = getGlobalCfgValI(serverproto.GlobalType_Global_Guild_Head_Frame) //expedition GlobalExpeditionGuildCallForHelpCDTime = uint64(getGlobalCfgValI(serverproto.GlobalType_Global_Expedition_GuildCallForHelpCDTime)) GlobalExpeditionGuildCallForHelpCDTime *= 60 * 1000 GlobalExpeditionGuildHelpNum = getGlobalCfgValI(serverproto.GlobalType_Global_Expedition_Help_Num) GlobalExpeditionGuildBeHelpedNum = getGlobalCfgValI(serverproto.GlobalType_Global_Expedition_Be_Help_Num) GlobalExpeditionChallengeNum = getGlobalCfgValI(serverproto.GlobalType_Global_Expedition_Challenge_Num) helpStr := strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_Expedition_Help_Reward), ";") for idx := 0; idx < len(helpStr); idx++ { key, val := Str2Res(helpStr[idx]) if key > 0 && val > 0 { GlobalExpeditionHelpRewardList[key] += val } } //invitation GlobalInvitationClickNum = getGlobalCfgValI(serverproto.GlobalType_Global_Invitation_Click_Num) GlobalInvitationClickMasterRes = getGlobalCfgValI(serverproto.GlobalType_Global_Invitation_Click_Res_Master) GlobalInvitationClickMemberRes = getGlobalCfgValI(serverproto.GlobalType_Global_Invitation_Click_Res_Member) GlobalQuickBattleTimes = getGlobalCfgValI(serverproto.GlobalType_Global_Quick_Battle_Times) rmbToVipStr := strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_RMB_To_VipExp), ":") if len(rmbToVipStr) >= 2 { value, _ := Str2Num(rmbToVipStr[0]) GlobalRMBToVipExpRMB = int32(value) value2, _ := Str2Num(rmbToVipStr[1]) GlobalRMBToVipExpVip = int32(value2) } GlobalRushTowerFightCount = getGlobalCfgValI(serverproto.GlobalType_Global_Rush_Tower_Count_Reward) rushTowerStr := strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_Rush_Tower_Count_Reward), ";") for _, data := range rushTowerStr { strList := strings.Split(data, ":") if len(strList) >= 2 { key, _ := Str2Num(strList[0]) value, _ := Str2Num(strList[1]) GlobalRushTowerRewardList = append(GlobalRushTowerRewardList, &serverproto.KeyValueType{ Key: int32(key), Value: int32(value), }) } } GlobalRushDaoFightCount = getGlobalCfgValI(serverproto.GlobalType_Global_Rush_Arena_Count_Reward) rushArenaStr := strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_Rush_Arena_Count_Reward), ";") for _, data := range rushArenaStr { strList := strings.Split(data, ":") if len(strList) >= 2 { key, _ := Str2Num(strList[0]) value, _ := Str2Num(strList[1]) GlobalRushArenaRewardList = append(GlobalRushArenaRewardList, &serverproto.KeyValueType{ Key: int32(key), Value: int32(value), }) } } GlobalActivities14DaysLogin = getGlobalCfgValI(serverproto.GlobalType_Global_Activities_14DaysLogin) //百人道场 GlobalDaoChang100RewardInterval = uint64(getGlobalCfgValI(serverproto.GlobalType_Global_DaoChang100_RewardInterval)) GlobalDaoChang100RewardInterval = GlobalDaoChang100RewardInterval * 1000 GlobalDaoChang100ChallengeCount = getGlobalCfgValI(serverproto.GlobalType_Global_DaoChang100_ChallengeCount) tmpRewardStrList := strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_DaoChang100_BaseRewardList), ";") for idx := 0; idx < len(tmpRewardStrList); idx++ { k, v := Str2Res(tmpRewardStrList[idx]) if k > 0 && v > 0 { GlobalDaoChang100BaseRewardList[k] += v } } GlobalDaoChang100TotalRewardTime = uint64(getGlobalCfgValI(serverproto.GlobalType_Global_DaoChang100_TotalRewardTime)) GlobalDaoChang100TotalRewardTime *= 60 * 60 * 1000 tmpRewardStrList = strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_DaoChang100_ChallengeCountByCost), ";") for idx := 0; idx < len(tmpRewardStrList); idx++ { k, v := Str2Res(tmpRewardStrList[idx]) if k > 0 && v > 0 { GlobalDaoChangBuyCostList = append(GlobalDaoChangBuyCostList, &serverproto.KeyValueType{Key: k, Value: v}) } } //百人道场最低战力校验配置参数(A1;A2;A3) tmpStrList = strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_DaoChang100_Battle_Check), ";") for idx := 0; idx < len(tmpStrList); idx++ { f, err := Str2Float32(tmpStrList[idx]) if err == nil { GlobalDaoChang100BattleCheck = append(GlobalDaoChang100BattleCheck, float64(f)) } } //英灵殿最低战力校验配置参数(A1;A2;A3) tmpStrList = strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_Arena_Battle_Check), ";") for idx := 0; idx < len(tmpStrList); idx++ { f, err := Str2Float32(tmpStrList[idx]) if err == nil { GlobalArenaBattleCheck = append(GlobalArenaBattleCheck, float64(f)) } } //问卷礼包 GlobalQuestionRewardList = map[int32]int32{} tmpRewardStrList = strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_Question_Reward), ";") for idx := 0; idx < len(tmpRewardStrList); idx++ { k, v := Str2Res(tmpRewardStrList[idx]) if k > 0 && v > 0 { GlobalQuestionRewardList[k] += v } } tmpKeepSakeList := strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_KeepSake_Crystal_To_Material), ";") for _, keepSake := range tmpKeepSakeList { strList := strings.Split(keepSake, ":") if len(strList) >= 2 { key, _ := Str2Num(strList[0]) value, _ := Str2Num(strList[1]) GlobalKeepSakeCrystalToMaterial[int32(key)] += int32(value) } } tmpKeepSakePieceList := strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_KeepSake_Material_To_Crystal), ";") for _, keepSake := range tmpKeepSakePieceList { strList := strings.Split(keepSake, ":") if len(strList) >= 2 { key, _ := Str2Num(strList[0]) value, _ := Str2Num(strList[1]) GlobalKeepSakeMaterialToCrystal[int32(key)] += int32(value) } } //职业更换 tmpStrList = strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_ReplaceJob_Level), ";") if len(tmpStrList) >= 2 { GlobalReplaceJobMainHeroLevel, _ = Str2Num(tmpStrList[0]) GlobalReplaceJobHeroLevel, _ = Str2Num(tmpStrList[1]) } tmpStrList = strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_ReplaceJob_Consume), ";") for idx := 0; idx < len(tmpStrList); idx++ { k, v := Str2Res(tmpStrList[idx]) GlobalReplaceJobConsumeList = append(GlobalReplaceJobConsumeList, &serverproto.KeyValueType{Key: k, Value: v}) } //作弊处理cheat tmpStrList = strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_Cheat_Ban_Time), ";") for idx := 0; idx < len(tmpStrList); idx++ { k, v := Str2Res(tmpStrList[idx]) if k <= 0 || v <= 0 { continue } GlobalCheatBanTime[k] = uint64(v) * 60 if GlobalMaxCheatBanNum < k { GlobalMaxCheatBanNum = k GlobalMaxCheatBanTime = GlobalCheatBanTime[k] } } tmpStrList = strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_Cheat_Chat_Personal), ";") if len(tmpStrList) >= 5 { valTime, _ := Str2Num(tmpStrList[0]) valLevel, _ := Str2Num(tmpStrList[1]) valNum, _ := Str2Num(tmpStrList[2]) valContentNum, _ := Str2Num(tmpStrList[3]) valRecharge, _ := Str2Num(tmpStrList[4]) GlobalCheatPersonalChat.ChatDuration = uint64(valTime * 60 * 1000) GlobalCheatPersonalChat.Level = int32(valLevel) GlobalCheatPersonalChat.RechargeNum = int32(valRecharge) GlobalCheatPersonalChat.ParamList = append(GlobalCheatPersonalChat.ParamList, valNum, valContentNum) } tmpStrList = strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_Cheat_Chat_Public), ";") if len(tmpStrList) >= 5 { valTime, _ := Str2Num(tmpStrList[0]) valLevel, _ := Str2Num(tmpStrList[1]) valNum, _ := Str2Num(tmpStrList[2]) valContentNum, _ := Str2Num(tmpStrList[3]) valRecharge, _ := Str2Num(tmpStrList[4]) GlobalCheatPublicChat.ChatDuration = uint64(valTime * 60 * 1000) GlobalCheatPublicChat.Level = int32(valLevel) GlobalCheatPublicChat.RechargeNum = int32(valRecharge) GlobalCheatPublicChat.ParamList = append(GlobalCheatPublicChat.ParamList, valNum, valContentNum) } GlobalGuildKickMemberCount = getGlobalCfgValI(serverproto.GlobalType_Global_Guild_Kick_Max_Count) GlobalTotalRechargeList = []*serverproto.KeyValueType{} tmpStrList = strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_TotalRecharge_List), ";") for idx := 0; idx < len(tmpStrList); idx++ { tmpRecharge, err := Str2Num(tmpStrList[idx]) if err != nil { continue } GlobalTotalRechargeList = append(GlobalTotalRechargeList, &serverproto.KeyValueType{ Key: int32(idx + 1), Value: int32(tmpRecharge), }) } GlobalGuildBattleFightPower = getGlobalCfgValI(serverproto.GlobalType_Global_Guild_Battle_FightPower) GlobalGuildBattleWinMaxScore = getGlobalCfgValI(serverproto.GlobalType_Global_Guild_Battle_WinScore) _, rebornPrice := Str2Res(getGlobalCfgValS(serverproto.GlobalType_Global_Guild_Battle_Buy_Reborn)) GlobalGuildBattleRebornCost = uint64(rebornPrice) GlobalGuildBattleRebornCdTime = uint64(getGlobalCfgValI(serverproto.GlobalType_Global_Guild_Battle_Reborn_CD)) * 1000 _, challengePrice := Str2Res(getGlobalCfgValS(serverproto.GlobalType_Global_Guild_Battle_Buy_challenge)) GlobalGuildBattleBuyChallengeCost = uint64(challengePrice) GlobalExchangeGuildPresident = getGlobalCfgValI(serverproto.GlobalType_Global_Guild_Exchange_President) if cfgData, ok := serverproto.GlobalCfgLoader[int32(serverproto.GlobalType_Global_Cash_Shop_Exchange_Cost)]; ok { strList := strings.Split(cfgData.SVal, ":") if len(strList) >= 2 { itemId, _ := Str2Num(strList[0]) GlobalCashShopCostId = int32(itemId) itemCount, _ := Str2Num(strList[1]) GlobalCashShopCostCount = int32(itemCount) } else { util.InfoF("load cash shop config failed %v", len(strList)) } } cashShopStrList := strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_Cash_Shop_Exchange_Reward), ";") for idx := 0; idx < len(cashShopStrList); idx++ { itemId, itemCount := Str2Res(cashShopStrList[idx]) if itemId != 0 && itemCount != 0 { GlobalCashShopReward = append(GlobalCashShopReward, &serverproto.KeyValueType{ Key: int32(itemId), Value: int32(itemCount), }) } } GlobalPetSkillUpCost = getGlobalCfgValI(serverproto.GlobalType_Global_Pet_SkillUp_Cost_Pet) calcPetScore, okScore := serverproto.GlobalCfgLoader[int32(serverproto.GlobalType_Global_Rush_Pet_Calc_Score)] if okScore { strList := strings.Split(calcPetScore.SVal, ";") if len(strList) >= 2 { petLevelArg, _ := Str2Num(strList[0]) GlobalPetLevelScore = int32(petLevelArg) petSkillArg, _ := Str2Num(strList[1]) GlobalPetSkillScore = int32(petSkillArg) } } calcPetScoreList := strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_Pet_Quality_Calc_Score), ";") for idx := 0; idx < len(calcPetScoreList); idx++ { quality, score := Str2Res(calcPetScoreList[idx]) if quality > 0 && score > 0 { GlobalPetQualityScore = append(GlobalPetQualityScore, &serverproto.KeyValueType{ Key: int32(quality), Value: int32(score), }) } } GlobalRuneGiftGoldShopResetVersion = getGlobalCfgValI(serverproto.GlobalType_Global_Rune_GiftBag_Label_4_Reset) //远航试炼 GlobalCrossYuanHangTrialMaxNum = getGlobalCfgValI(serverproto.GlobalType_Global_YuanHangTrialMaxNum) GlobalCrossYuanHangTrialRewardNum = getGlobalCfgValI(serverproto.GlobalType_Global_CrossYuanHangTrialRewardNum) GlobalCrossYuanHangTrialViewMaxNum = getGlobalCfgValI(serverproto.GlobalType_Global_CrossYuanHangTrialViewMaxNum) GlobalCrossYuanHangTrialRankListMaxNum = getGlobalCfgValI(serverproto.GlobalType_Global_CrossYuanHangTrialRankListMaxNum) tmpStrList = strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_CrossYuanHangTrialOpenTime), ";") if len(tmpStrList) >= 2 { GlobalCrossYuanHangTrialOpenTimeBeginTime = tmpStrList[0] GlobalCrossYuanHangTrialOpenTimeEndTime = tmpStrList[1] //tmpStr1 := util.GetDayByTimeStr2(util.GetTimeMilliseconds()) //tmpStartTimeStr := tmpStr1.Format(util.DATE_FORMAT1) + " " + tmpStrList[0] //tmpTime := util.GetTimeByStr(tmpStartTimeStr) //util.InfoF("CrossYuanHangTrial OpenTime=%v", tmpTime.String()) //tmpEndTimeStr := tmpStr1.Format(util.DATE_FORMAT1) + " " + tmpStrList[1] //tmpTime = util.GetTimeByStr(tmpEndTimeStr) //util.InfoF("CrossYuanHangTrial endTime=%v", tmpTime.String()) } //巅峰之塔 tmpStrList = strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_CrossTopTowerOpenTime), ";") if len(tmpStrList) >= 2 { GlobalCrossTopTowerOpenTimeBeginTime = tmpStrList[0] GlobalCrossTopTowerOpenTimeEndTime = tmpStrList[1] //tmpStr1 := util.GetDayByTimeStr2(util.GetTimeMilliseconds()) //tmpStartTimeStr := tmpStr1.Format(util.DATE_FORMAT1) + " " + tmpStrList[0] //tmpTime := util.GetTimeByStr(tmpStartTimeStr) //util.InfoF("TopTower OpenTime=%v", tmpTime.String()) //tmpEndTimeStr := tmpStr1.Format(util.DATE_FORMAT1) + " " + tmpStrList[1] //tmpTime = util.GetTimeByStr(tmpEndTimeStr) //util.InfoF("TopTower endTime=%v", tmpTime.String()) } GlobalCrossMaxFightPowerRankVal = getGlobalCfgValI(serverproto.GlobalType_Global_CrossMaxFightPowerRankVal) GlobalCrossMaxFightPowerFightInfoUpdateTime = getGlobalCfgValI(serverproto.GlobalType_Global_CrossMaxFightPowerFightInfoUpdateTime) GlobalGuildDemonBroadCastLevel = getGlobalCfgValI(serverproto.GlobalType_Global_GuildDemon_BroadCast_Level) GlobalSkillEquipReforgeMinStart = getGlobalCfgValI(serverproto.GlobalType_Global_SKillEquip_ReforgeCost) reforgePoolList := strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_SKillEquip_ReforgeCost), ":") for _, poolStr := range reforgePoolList { configId, err := Str2Num(poolStr) if err != nil { continue } GlobalSkillEquipReforgePoolList = append(GlobalSkillEquipReforgePoolList, int32(configId)) } shiftCost := strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_SKillEquip_ShiftCost), ";") for _, Str := range shiftCost { v1, v2, v3 := Str2Res_3(Str) if v1 <= 0 || v2 <= 0 || v3 <= 0 { continue } GlobalSkillEquipShiftCost[v1] = &serverproto.KeyValueType{Key: v2, Value: v3} } idolDayReward := strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_Competition_Idol_Day_Reward), ";") for _, idolReward := range idolDayReward { convertIdol := &IdolDayReward{} detail := strings.Split(idolReward, ":") if len(detail) >= 9 { id, _ := Str2Num(detail[0]) convertIdol.Id = int32(id) convertIdol.StartTime = detail[1] + ":" + detail[2] + ":" + detail[3] convertIdol.EndTime = detail[4] + ":" + detail[5] + ":" + detail[6] itemId, _ := Str2Num(detail[7]) itemCount, _ := Str2Num(detail[8]) convertIdol.ItemId = int32(itemId) convertIdol.ItemCount = int32(itemCount) } GlobalCompetitionIdolDayReward[convertIdol.Id] = convertIdol } globalCfg2, ok2 := serverproto.GlobalCfgLoader[int32(serverproto.GlobalType_Global_Cruise_Max)] if ok2 { GlobalCruiseMax = globalCfg2.IVal } GlobalCompetitonDayRewardLevel = getGlobalCfgValI(serverproto.GlobalType_Global_Competition_Idol_Day_Reward) GlobalWishSlotMaxCnt = getGlobalCfgValI(serverproto.GlobalType_Global_Unlock_WishBox_Slot) strCost := getGlobalCfgValS(serverproto.GlobalType_Global_Unlock_WishBox_Slot) itemId, itemCnt := Str2Res(strCost) GlobalWishSlotCost = serverproto.KeyValueType{Key: itemId, Value: itemCnt} cardLevelExchange := strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_Card_Level_Exchange), ";") for _, cardSourceStr := range cardLevelExchange { detail := strings.Split(cardSourceStr, ":") if len(detail) >= 3 { level, _ := Str2Num(detail[0]) itemId, _ := Str2Num(detail[1]) itemNum, _ := Str2Num(detail[2]) GlobalCardLevelExchange[int32(level)] = &serverproto.KeyValueType{ Key: int32(itemId), Value: int32(itemNum), } } } // bt服务器常量处理 convertGlobalCfgBT() } func getGlobalCfgValI(idx serverproto.GlobalType) int32 { if cfgData, ok := serverproto.GlobalCfgLoader[int32(idx)]; ok { return cfgData.IVal } return 0 } func getGlobalCfgValS(idx serverproto.GlobalType) string { if cfgData, ok := serverproto.GlobalCfgLoader[int32(idx)]; ok { return cfgData.SVal } return "" } // 恶意聊天 type ConvertCheatMsgData struct { ChatDuration uint64 //ms Level int32 //1,私聊对象数量,聊天字数大于3 //2,相同聊天内容条数 ParamList []int RechargeNum int32 //充值金额 } func convertGlobalCfgBT() { // 充值钱包 免费充值额度神域经验比例 GlobalCreditRechargeFactorStr := getGlobalCfgValS(serverproto.GlobalType_Global_CreditRechargeVip_Factor) f1, f2 := Str2Res(GlobalCreditRechargeFactorStr) // f1:rmb f2:res if f1 > 0 { GlobalCreditRechargeFactor = float32(f2) / float32(f1) } // 充值钱包 初始化最大额度 GlobalCreditRechargeInitMax = getGlobalCfgValI(serverproto.GlobalType_Global_CreditRechargeInitMax) // rmb获得RO币比例系数 //GlobalRoCoinFactor GlobalRMBTOROCoinFactorStr := getGlobalCfgValS(serverproto.GlobalType_Global_RmbToROCoinFactor) f1, f2 = Str2Res(GlobalRMBTOROCoinFactorStr) // f1:rmb f2:res if f1 > 0 { GlobalRoCoinFactor = float32(f2) / float32(f1) } // 特殊处理使用道具添加战斗倍数时间[道具id:持续时间] tmpStrList := strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_FastBattleTime), ";") for idx := 0; idx < len(tmpStrList); idx++ { k, v := Str2Res(tmpStrList[idx]) if k > 0 && v > 0 { GlobalFastBattleTime = append(GlobalFastBattleTime, serverproto.KeyValueType{ Key: k, Value: v, }) } } // 试炼馈赠(层数:免费充值额度数量) tmpStrList = strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_ClimbingTowerDayReward), ";") for idx := 0; idx < len(tmpStrList); idx++ { k, v := Str2Res(tmpStrList[idx]) if k <= 0 || v <= 0 { continue } GlobalClimbingTowerDayReward = append(GlobalClimbingTowerDayReward, serverproto.KeyValueType{ Key: k, Value: v, }) } // RO币兑换波利商城经验比例 GlobalRoCoinToExpStr := getGlobalCfgValS(serverproto.GlobalType_Global_RoCoinToBoliExp_Factor) f1, f2 = Str2Res(GlobalRoCoinToExpStr) // f1:RoCoin f2:exp if f1 > 0 { GlobalRoCoinToExp = float64(f2) / float64(f1) } //挑战者大厅购买次数消耗 tmpStrList = strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_WorldBossChallengeCost), ";") for idx := 0; idx < len(tmpStrList); idx++ { k, v := Str2Res(tmpStrList[idx]) if k <= 0 || v <= 0 { continue } GlobalWorldBossChallengeCost = append(GlobalWorldBossChallengeCost, serverproto.KeyValueType{ Key: k, Value: v, }) } }