base_config_global.go 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994
  1. package model
  2. import (
  3. "rocommon/util"
  4. "roserver/serverproto"
  5. "strings"
  6. )
  7. var GlobalAttrPetNotInheritHeroList []serverproto.Attr //宠物不继承给玩家的属性列表
  8. var ChatWorldRoleLevel int32 = 0
  9. var ChatWorldMapLevel int32 = 0
  10. var ChatWorldTime uint64 = 0
  11. var ChatWorldTotalRecharge float32 = 30 //发言累计充值
  12. var GlobalRoleOriginalAttrPoint int32 = 0
  13. var GlobalDaoChangChallengeCount int32 = 0
  14. var GlobalDaoChangByCount int32 = 0
  15. var GlobalDaoChangRewardCount int32 = 0
  16. var GlobalDaoChangRankMinLevel int32 = 0
  17. var GlobalArenaByCountCost = map[int32]int32{}
  18. var GlobalMailIdArenaTopReward int32 = 0
  19. var GlobalMailIdArenaScoreLevelReward int32 = 0
  20. var GlobalMailIdBossOwnerReward int32 = 0
  21. var GlobalMailIdBossOtherReward int32 = 0
  22. var GlobalMailIdExpeditionReward int32 = 4
  23. var GlobalMailIdActivitiesReward int32 = 5
  24. var GlobalMailIdActivitiesCurRechargeReward int32 = 28
  25. var GlobalMailIdInvitationDelMember int32 = 6
  26. var GlobalMailIdVipLevelUp int32 = 7
  27. var GlobalMailIdPayReward int32 = 8
  28. var GlobalMailRuneExplore int32 = 22
  29. var GlobalMailBoliShop int32 = 33
  30. var GlobalMailSpecialPrivilegeCard int32 = 34
  31. var GlobalRuneGiftGoldShopResetVersion int32 = 0
  32. //var GlobalMailIdMormalMonthCard int32 = 9
  33. //var GlobalMailIdVipMonthCard int32 = 10
  34. var GlobalSystemMsgItemList = map[int32]struct{}{} //获得稀有道具播报系统公告
  35. var GlobalSocialSubNumLimit int32 = 99
  36. var GlobalSocialFansNumLimit int32 = 999
  37. var GlobalSocialBlackNumLimit int32 = 99
  38. var GlobalFemaleHead int32
  39. var GlobalMaleHead int32
  40. var GlobalWorldBossChallengeCount int32 = 0
  41. var GlobalIncomeTime int32 = 0
  42. var GlobalIncomeLimitTime int32 = 0
  43. // evil
  44. var GlobalEvilRefreshConsume = map[int32]int32{}
  45. var GlobalEviChallengeCost int32 = 0
  46. var GlobalEvilExpLimit int32 = 0
  47. // CreateItemList
  48. var GlobalCreateItemList = map[int32]int32{}
  49. var GlobalCreateRoleMailReward = map[int32]int32{}
  50. // SystemMessageType
  51. var GlobalSystemMessageTypeArenaWinStreak = 0
  52. // competition
  53. var GlobalCompetitionSectionFactor float32 = 0.75
  54. var GlobalCompetitionSectionTotal int64 = 750
  55. var GlobalCompetitionScoreItem = map[int32]*serverproto.KeyValueType{} //通缉令兑换积分
  56. var GlobalCompetitionScoreItemFactor []*serverproto.KeyValueTypeList //通缉令兑换积分权重
  57. // guild
  58. var GlobalGuildApplyListMax int32 = 0
  59. var GlobalGuildVicePreNum int32 = 0
  60. var GlobalGuildJoinLevel int32 = 0
  61. var GlobalGuildRoleApplyMax int32 = 0
  62. var GlobalGuildLogMaxCount int32 = 0
  63. var GlobalGuildBuildBadge int32 = 0
  64. var GlobalGuildMinNameStringLen int32 = 0
  65. var GlobalGuildMaxNameStringLen int32 = 0
  66. var GlobalGuildMinSearchStringLen int32 = 0
  67. var GlobalGuildMaxSearchStringLen int32 = 0
  68. var GlobalGuildHeadFrame int32 = 0
  69. // 公会战
  70. var GlobalGuildBattleRewardTime uint64 = 5 * 1000 //5s 公会战收益时间间隔(秒)
  71. var GlobalGuildBattleChallengeNum int32 = 10 //公会战单场挑战次数
  72. var GlobalGuildBattleBuyChallengeCost uint64 = 0
  73. var GlobalGuildBattleRebornCost uint64 = 0
  74. var GlobalGuildBattleFightPower int32 = 0
  75. var GlobalGuildBattleWinMaxScore int32 = 0
  76. var GlobalGuildBattleRebornCdTime uint64 = 60 * 1000 //虚弱时间
  77. // 宠物技能升级消耗(领悟消耗)
  78. var GlobalPetSkillUpConsume int32 = 0
  79. var GlobalPetAdvanceLimit []int32
  80. var GlobalPetDecomposeItemList = map[int32]*serverproto.KeyValueType{} //分解获得的道具
  81. var GlobalPetAssistCD int32 = 0 //援助设置CD时间
  82. var GlobalNormalPetDecompose int32 = 0
  83. var GlobalPet1LevelDecompose []*serverproto.KeyValueType
  84. var GlobalVipPetDecompose int32 = 0
  85. var GlobalPetDecomposeNormal = map[uint32]*serverproto.KeyValueType{} //
  86. var GlobalPetDecomposeMin = map[uint32]*serverproto.KeyValueType{} //
  87. var GlobalPetDecomposeMvp = map[uint32]*serverproto.KeyValueType{} //
  88. var GlobalPetQiyueUnlockCost []serverproto.KeyValueType //宠物觉醒槽位解析消耗
  89. var GlobalPetQiyueMaxSlotNum = 4 //宠物觉醒最大可解锁槽位
  90. var GlobalPetQiyueNatureRate int32 = 1000 //宠物契约相同属性额外继承属性比例
  91. // 远征之门
  92. var GlobalExpeditionGuildCallForHelpCDTime uint64 = 0
  93. var GlobalExpeditionGuildHelpNum int32 = 0
  94. var GlobalExpeditionGuildBeHelpedNum int32 = 0
  95. var GlobalExpeditionChallengeNum int32 = 0
  96. var GlobalExpeditionHelpRewardList = map[int32]int32{}
  97. var GlobalExpeditionResetRankScore int32 = 0
  98. // invitation
  99. var GlobalInvitationClickNum int32 = 10
  100. var GlobalInvitationClickMasterRes int32 = 10
  101. var GlobalInvitationClickMemberRes int32 = 10
  102. var GlobalQuickBattleTimes int32 = 0
  103. var GlobalRMBToVipExpRMB int32 = 0
  104. var GlobalRMBToVipExpVip int32 = 0
  105. // 冲榜 爬塔, 道场
  106. var GlobalMailIdRushTower int32 = 11
  107. var GlobalMailIdRushArena int32 = 12
  108. var GlobalRushTowerFightCount int32 = 0
  109. var GlobalRushDaoFightCount int32 = 0
  110. var GlobalMailRushPetBaseReward int32 = 25
  111. var GlobalMailRushPetRankReward int32 = 24
  112. var GlobalMailRushSkillBaseReward int32 = 30
  113. var GlobalMailRushSkillRankReward int32 = 29
  114. var GlobalMailIdRushMap int32 = 15
  115. var GlobalMailRushMapBaseReward int32 = 16
  116. // 冲榜邮件Rank奖励ID
  117. var GlobalRushTowerRewardList []*serverproto.KeyValueType //爬塔冲榜奖励
  118. var GlobalRushArenaRewardList []*serverproto.KeyValueType //英灵殿冲榜奖励
  119. // 冲榜邮件战斗次数奖励ID
  120. var GlobalMailRushTowerBaseReward int32 = 13
  121. var GlobalMailRushDaoBaseReward int32 = 14
  122. var GloablMailDivineReward int32 = 27
  123. var GloablMailIdolFansReward int32 = 32
  124. // 公会战会长奖励
  125. var GlobalMailGuildBattlePreReward int32 = 18
  126. // 公会战成员奖励
  127. var GlobalMailGuildBattleMemReward int32 = 19
  128. // 积分奖励
  129. var GlobalMailGuildBattleScoreReward int32 = 20
  130. // 击杀奖励
  131. var GlobalMailGuildBattleKillerReward int32 = 21
  132. // 公会魔王
  133. var GlobalMailGuildDemonReward int32 = 31
  134. // 14天连续登录补领需要金币
  135. var GlobalActivities14DaysLogin int32 = 0
  136. // 百人道场
  137. var GlobalDaoChang100RewardInterval uint64 = 5 * 60 * 1000
  138. var GlobalDaoChang100BaseRewardList = map[int32]int32{}
  139. var GlobalDaoChang100ChallengeCount int32 = 3
  140. var GlobalDaoChang100TotalRewardTime uint64 = 48 * 60 * 60 * 1000
  141. var GlobalDaoChangBuyCostList []*serverproto.KeyValueType
  142. var GlobalDaoChangUnlockMapLevelId int32 = 0
  143. var GlobalDaoChang100BattleCheck []float64 //百人道场最低战力校验配置参数(A1;A2;A3)
  144. var GlobalArenaBattleCheck []float64 //英灵殿最低战力校验配置参数(A1;A2;A3)
  145. var GlobalCrossYuanHangTrialBuyCount map[int32]int32
  146. var GlobalCrossYuanHangTrialRewardNumBuy int32 = 5
  147. var GlobalMailyuanhangRankAward int32 = 9
  148. // 问卷调查奖励
  149. var GlobalQuestionRewardList = map[int32]int32{}
  150. var GlobalKeepSakeCrystalToMaterial = map[int32]int32{}
  151. var GlobalKeepSakeMaterialToCrystal = map[int32]int32{}
  152. // 职业更换
  153. var GlobalReplaceJobMainHeroLevel = 30 //主角登记
  154. var GlobalReplaceJobHeroLevel = 30 //伙伴等级
  155. var GlobalReplaceJobConsumeList []*serverproto.KeyValueType //更换职业消耗
  156. // 作弊处理
  157. var GlobalCheatBanTime = map[int32]uint64{}
  158. var GlobalMaxCheatBanTime uint64 = 0
  159. var GlobalMaxCheatBanNum int32 = 0
  160. var GlobalCheatPersonalChat ConvertCheatMsgData
  161. var GlobalCheatPublicChat ConvertCheatMsgData
  162. var GlobalGuildKickMemberCount int32 = 0
  163. // 玩家累计充值档位
  164. var GlobalTotalRechargeList []*serverproto.KeyValueType
  165. var GlobalExchangeGuildPresident int32 = 7
  166. var GlobalCashShopReward []*serverproto.KeyValueType
  167. var GlobalCashShopCostId int32 = 40
  168. var GlobalCashShopCostCount int32 = 100
  169. var GlobalPetSkillUpCost int32 = 0
  170. var GlobalPetLevelScore int32 = 0
  171. var GlobalPetSkillScore int32 = 0
  172. var GlobalPetQualityScore []*serverproto.KeyValueType
  173. // 远航试炼
  174. var GlobalCrossYuanHangTrialMaxNum int32 = 0 //远航每日出发次数上限
  175. var GlobalCrossYuanHangTrialRewardNum int32 = 0 //远航打劫获得奖励有效次数(每日重置)
  176. var GlobalCrossYuanHangTrialViewMaxNum int32 = 0 //远航单次同屏所需显示人数上限
  177. var GlobalCrossYuanHangTrialRankListMaxNum int32 = 0 //远航抢夺排行榜记录数量上限
  178. var GlobalCrossYuanHangTrialOpenTimeBeginTime string
  179. var GlobalCrossYuanHangTrialOpenTimeEndTime string
  180. var GlobalCrossTopTowerOpenTimeBeginTime string
  181. var GlobalCrossTopTowerOpenTimeEndTime string
  182. var GlobalCrossMaxFightPowerRankVal int32
  183. var GlobalCrossMaxFightPowerFightInfoUpdateTime int32
  184. var GlobalGuildDemonBroadCastLevel int32 = 0
  185. // 技能装备(神器)重铸
  186. var GlobalSkillEquipReforgeMinStart int32
  187. var GlobalSkillEquipReforgePoolList []int32
  188. var GlobalSkillEquipShiftCost = map[int32]*serverproto.KeyValueType{}
  189. var GlobalCruiseMax int32 = 0
  190. var GlobalCompetitonDayRewardLevel int32 = 0
  191. var GlobalWishSlotMaxCnt int32 = 0
  192. var GlobalWishSlotCost = serverproto.KeyValueType{}
  193. // bt服务器常量处理
  194. // 充值钱包
  195. var GlobalCreditRechargeFactor float32 = 0 // 充值钱包 免费充值额度神域经验比例
  196. var GlobalCreditRechargeInitMax int32 = 0 // 充值钱包 初始化最大额度
  197. var GlobalRoCoinFactor float32 = 60 // rmb获得RO币比例系数
  198. var GlobalFastBattleTime []serverproto.KeyValueType // 特殊处理使用道具添加战斗倍数时间[道具id:持续时间]
  199. var GlobalClimbingTowerDayReward []serverproto.KeyValueType // 试炼馈赠(层数:免费充值额度数量)
  200. var GlobalRoCoinToExp = 1.0 // RO币兑换波利商城经验比例
  201. var GlobalWorldBossChallengeCost []serverproto.KeyValueType
  202. type IdolDayReward struct {
  203. Id int32
  204. StartTime string
  205. EndTime string
  206. ItemId int32
  207. ItemCount int32
  208. }
  209. var GlobalCompetitionIdolDayReward = map[int32]*IdolDayReward{}
  210. var GlobalCardLevelExchange = map[int32]*serverproto.KeyValueType{} //
  211. func ConvertOldRedisGlobalCfg() {
  212. convertGlobalCfg()
  213. }
  214. func convertGlobalCfg() {
  215. //宠物不继承给玩家的属性列表
  216. tmpAttrStrList := strings.Split(getGlobalCfgValS(230), ";")
  217. for idx := 0; idx < len(tmpAttrStrList); idx++ {
  218. tmpAttrId, _ := Str2Num(tmpAttrStrList[idx])
  219. if tmpAttrId > 0 {
  220. GlobalAttrPetNotInheritHeroList = append(GlobalAttrPetNotInheritHeroList, serverproto.Attr(tmpAttrId))
  221. }
  222. }
  223. GlobalCrossYuanHangTrialBuyCount = make(map[int32]int32, 0)
  224. for i := 1; i <= 5; i++ {
  225. GlobalCrossYuanHangTrialBuyCount[int32(i)] = int32(200 * i)
  226. }
  227. //玩家发言条件
  228. if cfgData, ok := serverproto.GlobalCfgLoader[int32(serverproto.GlobalType_Global_Chat_World_Role_Level)]; ok {
  229. strList := strings.Split(cfgData.SVal, ";")
  230. for idx := range strList {
  231. key, value := Str2Res(strList[idx])
  232. if key == int32(serverproto.TaskType_Base_Level) {
  233. ChatWorldRoleLevel = value
  234. } else if key == int32(serverproto.TaskType_Level_Battle_Count) {
  235. ChatWorldMapLevel = value
  236. } else if key == int32(serverproto.TaskType_Recharge_Num_Accu) {
  237. ChatWorldTotalRecharge = float32(value)
  238. }
  239. }
  240. }
  241. //玩家聊天发言间隔时长(S)
  242. if cfgData, ok := serverproto.GlobalCfgLoader[int32(serverproto.GlobalType_Global_Chat_World_Time)]; ok {
  243. ChatWorldTime = uint64(cfgData.IVal * 1000)
  244. }
  245. //初始化可添加的属性点
  246. GlobalRoleOriginalAttrPoint = getGlobalCfgValI(serverproto.GlobalType_Global_Role_Original_AddAttrPoint)
  247. //道场挑战次数
  248. GlobalDaoChangChallengeCount = getGlobalCfgValI(serverproto.GlobalType_Global_Arena_DaoChang_Challenge)
  249. //英灵殿可购买挑战次数
  250. GlobalDaoChangByCount = getGlobalCfgValI(serverproto.GlobalType_Global_Arena_DaoChang_Buy_Count)
  251. //道场胜利奖励次数
  252. GlobalDaoChangRewardCount = getGlobalCfgValI(serverproto.GlobalType_Global_Arena_DaoChang_Reward_count)
  253. //英灵殿匹配对象最低等级
  254. GlobalDaoChangRankMinLevel = getGlobalCfgValI(serverproto.GlobalType_Global_Arena_DaoChang_RankMin_Level)
  255. //英灵殿购买挑战次数消耗
  256. if cfgData, ok := serverproto.GlobalCfgLoader[int32(serverproto.GlobalType_Global_Arena_DaoChang_Buy_Cost)]; ok {
  257. costStrList := strings.Split(cfgData.SVal, ";")
  258. for idx := range costStrList {
  259. key, value := Str2Res(costStrList[idx])
  260. if key > 0 && value > 0 {
  261. GlobalArenaByCountCost[key] += value
  262. }
  263. }
  264. }
  265. //英灵殿排名奖励邮件ID
  266. GlobalMailIdArenaTopReward = getGlobalCfgValI(serverproto.GlobalType_Global_MailId_Arena_Top_Reward)
  267. //英灵殿段位奖励邮件ID
  268. GlobalMailIdArenaScoreLevelReward = getGlobalCfgValI(serverproto.GlobalType_Global_MailId_Arena_ScoreLevel_Reward)
  269. //枯树枝召唤奖励邮件ID
  270. GlobalMailIdBossOwnerReward = getGlobalCfgValI(serverproto.GlobalType_Global_MailId_Boss_Owner_Reward)
  271. //枯树枝参与奖励邮件ID
  272. GlobalMailIdBossOtherReward = getGlobalCfgValI(serverproto.GlobalType_Global_MailId_Boss_Other_Reward)
  273. //获得稀有道具播报系统公告
  274. tmpGlobalSystemMsgItemList := strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_SystemMsg_Item), ";")
  275. for idx := 0; idx < len(tmpGlobalSystemMsgItemList); idx++ {
  276. msgItemId, _ := Str2Num(tmpGlobalSystemMsgItemList[idx])
  277. if msgItemId > 0 {
  278. GlobalSystemMsgItemList[int32(msgItemId)] = struct{}{}
  279. }
  280. }
  281. //关注列表人数上限
  282. GlobalSocialSubNumLimit = getGlobalCfgValI(serverproto.GlobalType_Global_Social_SubNum_Limit)
  283. if GlobalSocialSubNumLimit <= 0 {
  284. GlobalSocialSubNumLimit = 99
  285. }
  286. //粉丝列表人数上限
  287. GlobalSocialFansNumLimit = getGlobalCfgValI(serverproto.GlobalType_Global_Social_FansNum_Limit)
  288. if GlobalSocialFansNumLimit <= 0 {
  289. GlobalSocialFansNumLimit = 999
  290. }
  291. //屏蔽列表人数上限
  292. GlobalSocialBlackNumLimit = getGlobalCfgValI(serverproto.GlobalType_Global_Social_BlackNum_Limit)
  293. if GlobalSocialBlackNumLimit <= 0 {
  294. GlobalSocialBlackNumLimit = 99
  295. }
  296. //init head
  297. if cfgData, ok := serverproto.GlobalCfgLoader[int32(serverproto.GlobalType_Global_Init_Head_Portrait)]; ok {
  298. strList := strings.Split(cfgData.SVal, ";")
  299. if len(strList) >= 2 {
  300. value, _ := Str2Num(strList[0])
  301. GlobalFemaleHead = int32(value)
  302. value2, _ := Str2Num(strList[1])
  303. GlobalMaleHead = int32(value2)
  304. } else {
  305. util.InfoF("load head failed %v", len(strList))
  306. }
  307. }
  308. //world boss challenge count
  309. GlobalWorldBossChallengeCount = getGlobalCfgValI(serverproto.GlobalType_Global_World_Boss_ChallengeNum_Limit)
  310. //income
  311. GlobalIncomeTime = getGlobalCfgValI(serverproto.GlobalType_Global_Battle_Income_Time)
  312. GlobalIncomeLimitTime = getGlobalCfgValI(serverproto.GlobalType_Global_Battle_Limit_Time)
  313. //evil
  314. GlobalEvilRefreshConsumeStrList := strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_Evil_Consume), ";")
  315. for idx := 0; idx < len(GlobalEvilRefreshConsumeStrList); idx++ {
  316. key, val := Str2Res(GlobalEvilRefreshConsumeStrList[idx])
  317. if key > 0 && val > 0 {
  318. GlobalEvilRefreshConsume[key] = val
  319. }
  320. }
  321. GlobalEviChallengeCost = getGlobalCfgValI(serverproto.GlobalType_Global_Evil_Challenge_Cost)
  322. GlobalEvilExpLimit = getGlobalCfgValI(serverproto.GlobalType_Global_Evil_Exp_Limit)
  323. //CreateItemList
  324. GlobalCreateItemListStr := strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_Create_Item_List), ";")
  325. for idx := 0; idx < len(GlobalCreateItemListStr); idx++ {
  326. key, val := Str2Res(GlobalCreateItemListStr[idx])
  327. if key > 0 && val > 0 {
  328. GlobalCreateItemList[key] = val
  329. }
  330. }
  331. GlobalCreateRoleMailStr := strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_Create_Role_Reward), ";")
  332. for idx := 0; idx < len(GlobalCreateRoleMailStr); idx++ {
  333. key, val := Str2Res(GlobalCreateRoleMailStr[idx])
  334. if key > 0 && val > 0 {
  335. GlobalCreateRoleMailReward[key] = val
  336. }
  337. }
  338. //GlobalSystemMessageTypeArenaWinStreak
  339. sysStr := getGlobalCfgValS(serverproto.GlobalType_Global_Competition_Streak_Win)
  340. GlobalSystemMessageTypeArenaWinStreak, _ = Str2Num(sysStr)
  341. //Competition
  342. //赛季公式计算参数
  343. competitionSectionStr := getGlobalCfgValS(serverproto.GlobalType_Global_Competition_Factor)
  344. factor, total := Str2Res(competitionSectionStr)
  345. if factor > 0 {
  346. GlobalCompetitionSectionFactor = float32(factor) / 10000
  347. }
  348. if total > 0 {
  349. GlobalCompetitionSectionTotal = int64(total)
  350. }
  351. //赛季获取积分道具
  352. var tmpFactor int32 = 0
  353. var tmpLeftScore int32 = 0
  354. tmpStrList := strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_Competition_ScoreItem), ";")
  355. for idx := 0; idx < len(tmpStrList); idx++ {
  356. key, v1, v2 := Str2Res_3(tmpStrList[idx])
  357. if key > 0 && v1 > 0 && v2 > 0 {
  358. tmpLeftScore = v1 //初始积分
  359. GlobalCompetitionScoreItem[key] = &serverproto.KeyValueType{Key: v1, Value: v2}
  360. } else {
  361. key, v1 = Str2Res(tmpStrList[idx])
  362. if key > 0 && v1 > 0 {
  363. GlobalCompetitionScoreItem[key] = &serverproto.KeyValueType{Key: v1, Value: 0}
  364. }
  365. }
  366. }
  367. GlobalCompetitionScoreItemFactor = []*serverproto.KeyValueTypeList{}
  368. tmpStrList = strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_Competition_ScoreItem_Factor), ";")
  369. for idx := 0; idx < len(tmpStrList); idx++ {
  370. v1, v2 := Str2Res(tmpStrList[idx])
  371. if v1 > 0 && v2 > 0 {
  372. tmpFactor += v2
  373. GlobalCompetitionScoreItemFactor = append(GlobalCompetitionScoreItemFactor, &serverproto.KeyValueTypeList{
  374. Key: tmpFactor, //权重
  375. ValueList: []int32{tmpLeftScore, v1},
  376. })
  377. tmpLeftScore = v1
  378. }
  379. }
  380. tmpLeftScore = 0
  381. GlobalGuildApplyListMax = getGlobalCfgValI(serverproto.GlobalType_Global_Guild_Apply_List_Max)
  382. GlobalGuildVicePreNum = getGlobalCfgValI(serverproto.GlobalType_Global_Guild_VicePre_Num)
  383. GlobalGuildJoinLevel = getGlobalCfgValI(serverproto.GlobalType_Global_Guild_Join_Level)
  384. GlobalGuildRoleApplyMax = getGlobalCfgValI(serverproto.GlobalType_Global_Guild_Role_Apply_Max)
  385. GlobalGuildLogMaxCount = getGlobalCfgValI(serverproto.GlobalType_Global_Guild_Log_Max_Count)
  386. GlobalGuildBuildBadge = getGlobalCfgValI(serverproto.GlobalType_Global_Guild_OnBuild_Badge)
  387. //公会名字
  388. guildNameStr := getGlobalCfgValS(serverproto.GlobalType_Global_Guild_Name_String_Len)
  389. guildNameMin, guildNameMax := Str2Res(guildNameStr)
  390. if guildNameMin > 0 {
  391. GlobalGuildMinNameStringLen = guildNameMin
  392. }
  393. if guildNameMax > 0 {
  394. GlobalGuildMaxNameStringLen = guildNameMax
  395. }
  396. guildSearchStr := getGlobalCfgValS(serverproto.GlobalType_Global_Guild_Search_String_Len)
  397. guildSearchMin, guildSearchMax := Str2Res(guildSearchStr)
  398. if guildSearchMin > 0 {
  399. GlobalGuildMinSearchStringLen = guildSearchMin
  400. }
  401. if guildSearchMax > 0 {
  402. GlobalGuildMaxSearchStringLen = guildSearchMax
  403. }
  404. //petskill
  405. GlobalPetSkillUpConsume = getGlobalCfgValI(serverproto.GlobalType_Global_Pet_SkillUp_Consume)
  406. GlobalPetAdvanceLimit = []int32{}
  407. GlobalPetAdvanceLimitStrList := strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_Pet_Advance_Limit), ";")
  408. for idx := 0; idx < len(GlobalPetAdvanceLimitStrList); idx++ {
  409. val, _ := Str2Num(GlobalPetAdvanceLimitStrList[idx])
  410. if val > 0 {
  411. GlobalPetAdvanceLimit = append(GlobalPetAdvanceLimit, int32(val))
  412. }
  413. }
  414. //宠物分解
  415. GlobalPetDecomposeMultiStr := strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_Decompose_Pet_Stone_Noraml), ";")
  416. for idx := 0; idx < len(GlobalPetDecomposeMultiStr); idx++ {
  417. level, itemId, itemNum := Str2Res_3(GlobalPetDecomposeMultiStr[idx])
  418. if itemNum > 0 {
  419. GlobalPetDecomposeNormal[uint32(level)] = &serverproto.KeyValueType{
  420. Key: itemId,
  421. Value: itemNum,
  422. }
  423. }
  424. }
  425. GlobalPetDecomposeMinStr := strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_Decompose_Pet_Stone_Min), ";")
  426. for idx := 0; idx < len(GlobalPetDecomposeMinStr); idx++ {
  427. level, itemId, itemNum := Str2Res_3(GlobalPetDecomposeMinStr[idx])
  428. if itemNum > 0 {
  429. GlobalPetDecomposeMin[uint32(level)] = &serverproto.KeyValueType{
  430. Key: itemId,
  431. Value: itemNum,
  432. }
  433. }
  434. }
  435. GlobalPetDecomposeMvpStr := strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_Decompose_Pet_Stone_Mvp), ";")
  436. for idx := 0; idx < len(GlobalPetDecomposeMvpStr); idx++ {
  437. level, itemId, itemNum := Str2Res_3(GlobalPetDecomposeMvpStr[idx])
  438. if itemNum > 0 {
  439. GlobalPetDecomposeMvp[uint32(level)] = &serverproto.KeyValueType{
  440. Key: itemId,
  441. Value: itemNum,
  442. }
  443. }
  444. }
  445. GlobalPetDecomposeItemListStr := strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_Pet_Decompose), ";")
  446. for idx := 0; idx < len(GlobalPetDecomposeItemListStr); idx++ {
  447. v1, v2, v3 := Str2Res_3(GlobalPetDecomposeItemListStr[idx])
  448. if v1 > 0 && v2 > 0 && v3 > 0 {
  449. GlobalPetDecomposeItemList[v1] = &serverproto.KeyValueType{Key: v2, Value: v3}
  450. }
  451. }
  452. //宠物契约
  453. qiyueListStr := strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_PetQiyue_Slot_Unlock_Cost), ";")
  454. for idx := 0; idx < len(qiyueListStr); idx++ {
  455. k, v := Str2Res(qiyueListStr[idx])
  456. if k > 0 && v > 0 {
  457. GlobalPetQiyueUnlockCost = append(GlobalPetQiyueUnlockCost, serverproto.KeyValueType{Key: k, Value: v})
  458. }
  459. }
  460. GlobalPetQiyueMaxSlotNum = len(GlobalPetQiyueUnlockCost)
  461. GlobalPetQiyueNatureRate = getGlobalCfgValI(serverproto.GlobalType_Global_PetQiyue_Nature_Attr)
  462. GlobalPetAssistCD = getGlobalCfgValI(serverproto.GlobalType_Global_Pet_Assist_CD)
  463. GlobalNormalPetDecompose = getGlobalCfgValI(serverproto.GlobalType_Global_Normal_Pet_Decomposed)
  464. GlobalVipPetDecompose = getGlobalCfgValI(serverproto.GlobalType_Global_Vip_Pet_Decomposed)
  465. GlobalPet1LevelDecompose = []*serverproto.KeyValueType{}
  466. tmpStrList = strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_Pet_1Level_Decompose_Res), ";")
  467. for idx := 0; idx < len(tmpStrList); idx++ {
  468. k, v := Str2Res(tmpStrList[idx])
  469. GlobalPet1LevelDecompose = append(GlobalPet1LevelDecompose,
  470. &serverproto.KeyValueType{Key: k, Value: v})
  471. }
  472. GlobalGuildHeadFrame = getGlobalCfgValI(serverproto.GlobalType_Global_Guild_Head_Frame)
  473. //expedition
  474. GlobalExpeditionGuildCallForHelpCDTime = uint64(getGlobalCfgValI(serverproto.GlobalType_Global_Expedition_GuildCallForHelpCDTime))
  475. GlobalExpeditionGuildCallForHelpCDTime *= 60 * 1000
  476. GlobalExpeditionGuildHelpNum = getGlobalCfgValI(serverproto.GlobalType_Global_Expedition_Help_Num)
  477. GlobalExpeditionGuildBeHelpedNum = getGlobalCfgValI(serverproto.GlobalType_Global_Expedition_Be_Help_Num)
  478. GlobalExpeditionChallengeNum = getGlobalCfgValI(serverproto.GlobalType_Global_Expedition_Challenge_Num)
  479. helpStr := strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_Expedition_Help_Reward), ";")
  480. for idx := 0; idx < len(helpStr); idx++ {
  481. key, val := Str2Res(helpStr[idx])
  482. if key > 0 && val > 0 {
  483. GlobalExpeditionHelpRewardList[key] += val
  484. }
  485. }
  486. //invitation
  487. GlobalInvitationClickNum = getGlobalCfgValI(serverproto.GlobalType_Global_Invitation_Click_Num)
  488. GlobalInvitationClickMasterRes = getGlobalCfgValI(serverproto.GlobalType_Global_Invitation_Click_Res_Master)
  489. GlobalInvitationClickMemberRes = getGlobalCfgValI(serverproto.GlobalType_Global_Invitation_Click_Res_Member)
  490. GlobalQuickBattleTimes = getGlobalCfgValI(serverproto.GlobalType_Global_Quick_Battle_Times)
  491. rmbToVipStr := strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_RMB_To_VipExp), ":")
  492. if len(rmbToVipStr) >= 2 {
  493. value, _ := Str2Num(rmbToVipStr[0])
  494. GlobalRMBToVipExpRMB = int32(value)
  495. value2, _ := Str2Num(rmbToVipStr[1])
  496. GlobalRMBToVipExpVip = int32(value2)
  497. }
  498. GlobalRushTowerFightCount = getGlobalCfgValI(serverproto.GlobalType_Global_Rush_Tower_Count_Reward)
  499. rushTowerStr := strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_Rush_Tower_Count_Reward), ";")
  500. for _, data := range rushTowerStr {
  501. strList := strings.Split(data, ":")
  502. if len(strList) >= 2 {
  503. key, _ := Str2Num(strList[0])
  504. value, _ := Str2Num(strList[1])
  505. GlobalRushTowerRewardList = append(GlobalRushTowerRewardList, &serverproto.KeyValueType{
  506. Key: int32(key),
  507. Value: int32(value),
  508. })
  509. }
  510. }
  511. GlobalRushDaoFightCount = getGlobalCfgValI(serverproto.GlobalType_Global_Rush_Arena_Count_Reward)
  512. rushArenaStr := strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_Rush_Arena_Count_Reward), ";")
  513. for _, data := range rushArenaStr {
  514. strList := strings.Split(data, ":")
  515. if len(strList) >= 2 {
  516. key, _ := Str2Num(strList[0])
  517. value, _ := Str2Num(strList[1])
  518. GlobalRushArenaRewardList = append(GlobalRushArenaRewardList, &serverproto.KeyValueType{
  519. Key: int32(key),
  520. Value: int32(value),
  521. })
  522. }
  523. }
  524. GlobalActivities14DaysLogin = getGlobalCfgValI(serverproto.GlobalType_Global_Activities_14DaysLogin)
  525. //百人道场
  526. GlobalDaoChang100RewardInterval = uint64(getGlobalCfgValI(serverproto.GlobalType_Global_DaoChang100_RewardInterval))
  527. GlobalDaoChang100RewardInterval = GlobalDaoChang100RewardInterval * 1000
  528. GlobalDaoChang100ChallengeCount = getGlobalCfgValI(serverproto.GlobalType_Global_DaoChang100_ChallengeCount)
  529. tmpRewardStrList := strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_DaoChang100_BaseRewardList), ";")
  530. for idx := 0; idx < len(tmpRewardStrList); idx++ {
  531. k, v := Str2Res(tmpRewardStrList[idx])
  532. if k > 0 && v > 0 {
  533. GlobalDaoChang100BaseRewardList[k] += v
  534. }
  535. }
  536. GlobalDaoChang100TotalRewardTime = uint64(getGlobalCfgValI(serverproto.GlobalType_Global_DaoChang100_TotalRewardTime))
  537. GlobalDaoChang100TotalRewardTime *= 60 * 60 * 1000
  538. tmpRewardStrList = strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_DaoChang100_ChallengeCountByCost), ";")
  539. for idx := 0; idx < len(tmpRewardStrList); idx++ {
  540. k, v := Str2Res(tmpRewardStrList[idx])
  541. if k > 0 && v > 0 {
  542. GlobalDaoChangBuyCostList = append(GlobalDaoChangBuyCostList, &serverproto.KeyValueType{Key: k, Value: v})
  543. }
  544. }
  545. //百人道场最低战力校验配置参数(A1;A2;A3)
  546. tmpStrList = strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_DaoChang100_Battle_Check), ";")
  547. for idx := 0; idx < len(tmpStrList); idx++ {
  548. f, err := Str2Float32(tmpStrList[idx])
  549. if err == nil {
  550. GlobalDaoChang100BattleCheck = append(GlobalDaoChang100BattleCheck, float64(f))
  551. }
  552. }
  553. //英灵殿最低战力校验配置参数(A1;A2;A3)
  554. tmpStrList = strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_Arena_Battle_Check), ";")
  555. for idx := 0; idx < len(tmpStrList); idx++ {
  556. f, err := Str2Float32(tmpStrList[idx])
  557. if err == nil {
  558. GlobalArenaBattleCheck = append(GlobalArenaBattleCheck, float64(f))
  559. }
  560. }
  561. //问卷礼包
  562. GlobalQuestionRewardList = map[int32]int32{}
  563. tmpRewardStrList = strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_Question_Reward), ";")
  564. for idx := 0; idx < len(tmpRewardStrList); idx++ {
  565. k, v := Str2Res(tmpRewardStrList[idx])
  566. if k > 0 && v > 0 {
  567. GlobalQuestionRewardList[k] += v
  568. }
  569. }
  570. tmpKeepSakeList := strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_KeepSake_Crystal_To_Material), ";")
  571. for _, keepSake := range tmpKeepSakeList {
  572. strList := strings.Split(keepSake, ":")
  573. if len(strList) >= 2 {
  574. key, _ := Str2Num(strList[0])
  575. value, _ := Str2Num(strList[1])
  576. GlobalKeepSakeCrystalToMaterial[int32(key)] += int32(value)
  577. }
  578. }
  579. tmpKeepSakePieceList := strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_KeepSake_Material_To_Crystal), ";")
  580. for _, keepSake := range tmpKeepSakePieceList {
  581. strList := strings.Split(keepSake, ":")
  582. if len(strList) >= 2 {
  583. key, _ := Str2Num(strList[0])
  584. value, _ := Str2Num(strList[1])
  585. GlobalKeepSakeMaterialToCrystal[int32(key)] += int32(value)
  586. }
  587. }
  588. //职业更换
  589. tmpStrList = strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_ReplaceJob_Level), ";")
  590. if len(tmpStrList) >= 2 {
  591. GlobalReplaceJobMainHeroLevel, _ = Str2Num(tmpStrList[0])
  592. GlobalReplaceJobHeroLevel, _ = Str2Num(tmpStrList[1])
  593. }
  594. tmpStrList = strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_ReplaceJob_Consume), ";")
  595. for idx := 0; idx < len(tmpStrList); idx++ {
  596. k, v := Str2Res(tmpStrList[idx])
  597. GlobalReplaceJobConsumeList = append(GlobalReplaceJobConsumeList,
  598. &serverproto.KeyValueType{Key: k, Value: v})
  599. }
  600. //作弊处理cheat
  601. tmpStrList = strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_Cheat_Ban_Time), ";")
  602. for idx := 0; idx < len(tmpStrList); idx++ {
  603. k, v := Str2Res(tmpStrList[idx])
  604. if k <= 0 || v <= 0 {
  605. continue
  606. }
  607. GlobalCheatBanTime[k] = uint64(v) * 60
  608. if GlobalMaxCheatBanNum < k {
  609. GlobalMaxCheatBanNum = k
  610. GlobalMaxCheatBanTime = GlobalCheatBanTime[k]
  611. }
  612. }
  613. tmpStrList = strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_Cheat_Chat_Personal), ";")
  614. if len(tmpStrList) >= 5 {
  615. valTime, _ := Str2Num(tmpStrList[0])
  616. valLevel, _ := Str2Num(tmpStrList[1])
  617. valNum, _ := Str2Num(tmpStrList[2])
  618. valContentNum, _ := Str2Num(tmpStrList[3])
  619. valRecharge, _ := Str2Num(tmpStrList[4])
  620. GlobalCheatPersonalChat.ChatDuration = uint64(valTime * 60 * 1000)
  621. GlobalCheatPersonalChat.Level = int32(valLevel)
  622. GlobalCheatPersonalChat.RechargeNum = int32(valRecharge)
  623. GlobalCheatPersonalChat.ParamList = append(GlobalCheatPersonalChat.ParamList, valNum, valContentNum)
  624. }
  625. tmpStrList = strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_Cheat_Chat_Public), ";")
  626. if len(tmpStrList) >= 5 {
  627. valTime, _ := Str2Num(tmpStrList[0])
  628. valLevel, _ := Str2Num(tmpStrList[1])
  629. valNum, _ := Str2Num(tmpStrList[2])
  630. valContentNum, _ := Str2Num(tmpStrList[3])
  631. valRecharge, _ := Str2Num(tmpStrList[4])
  632. GlobalCheatPublicChat.ChatDuration = uint64(valTime * 60 * 1000)
  633. GlobalCheatPublicChat.Level = int32(valLevel)
  634. GlobalCheatPublicChat.RechargeNum = int32(valRecharge)
  635. GlobalCheatPublicChat.ParamList = append(GlobalCheatPublicChat.ParamList, valNum, valContentNum)
  636. }
  637. GlobalGuildKickMemberCount = getGlobalCfgValI(serverproto.GlobalType_Global_Guild_Kick_Max_Count)
  638. // 0 ,299 ,19999 ,59999
  639. GlobalTotalRechargeList = []*serverproto.KeyValueType{}
  640. tmpStrList = strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_TotalRecharge_List), ";")
  641. for idx := 0; idx < len(tmpStrList); idx++ {
  642. tmpRecharge, err := Str2Num(tmpStrList[idx])
  643. if err != nil {
  644. continue
  645. }
  646. GlobalTotalRechargeList = append(GlobalTotalRechargeList, &serverproto.KeyValueType{
  647. Key: int32(idx + 1),
  648. Value: int32(tmpRecharge),
  649. })
  650. }
  651. GlobalGuildBattleFightPower = getGlobalCfgValI(serverproto.GlobalType_Global_Guild_Battle_FightPower)
  652. GlobalGuildBattleWinMaxScore = getGlobalCfgValI(serverproto.GlobalType_Global_Guild_Battle_WinScore)
  653. _, rebornPrice := Str2Res(getGlobalCfgValS(serverproto.GlobalType_Global_Guild_Battle_Buy_Reborn))
  654. GlobalGuildBattleRebornCost = uint64(rebornPrice)
  655. GlobalGuildBattleRebornCdTime = uint64(getGlobalCfgValI(serverproto.GlobalType_Global_Guild_Battle_Reborn_CD)) * 1000
  656. _, challengePrice := Str2Res(getGlobalCfgValS(serverproto.GlobalType_Global_Guild_Battle_Buy_challenge))
  657. GlobalGuildBattleBuyChallengeCost = uint64(challengePrice)
  658. GlobalExchangeGuildPresident = getGlobalCfgValI(serverproto.GlobalType_Global_Guild_Exchange_President)
  659. if cfgData, ok := serverproto.GlobalCfgLoader[int32(serverproto.GlobalType_Global_Cash_Shop_Exchange_Cost)]; ok {
  660. strList := strings.Split(cfgData.SVal, ":")
  661. if len(strList) >= 2 {
  662. itemId, _ := Str2Num(strList[0])
  663. GlobalCashShopCostId = int32(itemId)
  664. itemCount, _ := Str2Num(strList[1])
  665. GlobalCashShopCostCount = int32(itemCount)
  666. } else {
  667. util.InfoF("load cash shop config failed %v", len(strList))
  668. }
  669. }
  670. cashShopStrList := strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_Cash_Shop_Exchange_Reward), ";")
  671. for idx := 0; idx < len(cashShopStrList); idx++ {
  672. itemId, itemCount := Str2Res(cashShopStrList[idx])
  673. if itemId != 0 && itemCount != 0 {
  674. GlobalCashShopReward = append(GlobalCashShopReward, &serverproto.KeyValueType{
  675. Key: int32(itemId),
  676. Value: int32(itemCount),
  677. })
  678. }
  679. }
  680. GlobalPetSkillUpCost = getGlobalCfgValI(serverproto.GlobalType_Global_Pet_SkillUp_Cost_Pet)
  681. calcPetScore, okScore := serverproto.GlobalCfgLoader[int32(serverproto.GlobalType_Global_Rush_Pet_Calc_Score)]
  682. if okScore {
  683. strList := strings.Split(calcPetScore.SVal, ";")
  684. if len(strList) >= 2 {
  685. petLevelArg, _ := Str2Num(strList[0])
  686. GlobalPetLevelScore = int32(petLevelArg)
  687. petSkillArg, _ := Str2Num(strList[1])
  688. GlobalPetSkillScore = int32(petSkillArg)
  689. }
  690. }
  691. calcPetScoreList := strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_Pet_Quality_Calc_Score), ";")
  692. for idx := 0; idx < len(calcPetScoreList); idx++ {
  693. quality, score := Str2Res(calcPetScoreList[idx])
  694. if quality > 0 && score > 0 {
  695. GlobalPetQualityScore = append(GlobalPetQualityScore, &serverproto.KeyValueType{
  696. Key: int32(quality),
  697. Value: int32(score),
  698. })
  699. }
  700. }
  701. GlobalRuneGiftGoldShopResetVersion = getGlobalCfgValI(serverproto.GlobalType_Global_Rune_GiftBag_Label_4_Reset)
  702. //远航试炼
  703. GlobalCrossYuanHangTrialMaxNum = getGlobalCfgValI(serverproto.GlobalType_Global_YuanHangTrialMaxNum)
  704. GlobalCrossYuanHangTrialRewardNum = getGlobalCfgValI(serverproto.GlobalType_Global_CrossYuanHangTrialRewardNum)
  705. GlobalCrossYuanHangTrialViewMaxNum = getGlobalCfgValI(serverproto.GlobalType_Global_CrossYuanHangTrialViewMaxNum)
  706. GlobalCrossYuanHangTrialRankListMaxNum = getGlobalCfgValI(serverproto.GlobalType_Global_CrossYuanHangTrialRankListMaxNum)
  707. tmpStrList = strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_CrossYuanHangTrialOpenTime), ";")
  708. if len(tmpStrList) >= 2 {
  709. GlobalCrossYuanHangTrialOpenTimeBeginTime = tmpStrList[0]
  710. GlobalCrossYuanHangTrialOpenTimeEndTime = tmpStrList[1]
  711. //tmpStr1 := util.GetDayByTimeStr2(util.GetTimeMilliseconds())
  712. //tmpStartTimeStr := tmpStr1.Format(util.DATE_FORMAT1) + " " + tmpStrList[0]
  713. //tmpTime := util.GetTimeByStr(tmpStartTimeStr)
  714. //util.InfoF("CrossYuanHangTrial OpenTime=%v", tmpTime.String())
  715. //tmpEndTimeStr := tmpStr1.Format(util.DATE_FORMAT1) + " " + tmpStrList[1]
  716. //tmpTime = util.GetTimeByStr(tmpEndTimeStr)
  717. //util.InfoF("CrossYuanHangTrial endTime=%v", tmpTime.String())
  718. }
  719. //巅峰之塔
  720. tmpStrList = strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_CrossTopTowerOpenTime), ";")
  721. if len(tmpStrList) >= 2 {
  722. GlobalCrossTopTowerOpenTimeBeginTime = tmpStrList[0]
  723. GlobalCrossTopTowerOpenTimeEndTime = tmpStrList[1]
  724. //tmpStr1 := util.GetDayByTimeStr2(util.GetTimeMilliseconds())
  725. //tmpStartTimeStr := tmpStr1.Format(util.DATE_FORMAT1) + " " + tmpStrList[0]
  726. //tmpTime := util.GetTimeByStr(tmpStartTimeStr)
  727. //util.InfoF("TopTower OpenTime=%v", tmpTime.String())
  728. //tmpEndTimeStr := tmpStr1.Format(util.DATE_FORMAT1) + " " + tmpStrList[1]
  729. //tmpTime = util.GetTimeByStr(tmpEndTimeStr)
  730. //util.InfoF("TopTower endTime=%v", tmpTime.String())
  731. }
  732. GlobalCrossMaxFightPowerRankVal = getGlobalCfgValI(serverproto.GlobalType_Global_CrossMaxFightPowerRankVal)
  733. GlobalCrossMaxFightPowerFightInfoUpdateTime = getGlobalCfgValI(serverproto.GlobalType_Global_CrossMaxFightPowerFightInfoUpdateTime)
  734. GlobalGuildDemonBroadCastLevel = getGlobalCfgValI(serverproto.GlobalType_Global_GuildDemon_BroadCast_Level)
  735. GlobalSkillEquipReforgeMinStart = getGlobalCfgValI(serverproto.GlobalType_Global_SKillEquip_ReforgeCost)
  736. reforgePoolList := strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_SKillEquip_ReforgeCost), ":")
  737. for _, poolStr := range reforgePoolList {
  738. configId, err := Str2Num(poolStr)
  739. if err != nil {
  740. continue
  741. }
  742. GlobalSkillEquipReforgePoolList = append(GlobalSkillEquipReforgePoolList, int32(configId))
  743. }
  744. shiftCost := strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_SKillEquip_ShiftCost), ";")
  745. for _, Str := range shiftCost {
  746. v1, v2, v3 := Str2Res_3(Str)
  747. if v1 <= 0 || v2 <= 0 || v3 <= 0 {
  748. continue
  749. }
  750. GlobalSkillEquipShiftCost[v1] = &serverproto.KeyValueType{Key: v2, Value: v3}
  751. }
  752. idolDayReward := strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_Competition_Idol_Day_Reward), ";")
  753. for _, idolReward := range idolDayReward {
  754. convertIdol := &IdolDayReward{}
  755. detail := strings.Split(idolReward, ":")
  756. if len(detail) >= 9 {
  757. id, _ := Str2Num(detail[0])
  758. convertIdol.Id = int32(id)
  759. convertIdol.StartTime = detail[1] + ":" + detail[2] + ":" + detail[3]
  760. convertIdol.EndTime = detail[4] + ":" + detail[5] + ":" + detail[6]
  761. itemId, _ := Str2Num(detail[7])
  762. itemCount, _ := Str2Num(detail[8])
  763. convertIdol.ItemId = int32(itemId)
  764. convertIdol.ItemCount = int32(itemCount)
  765. }
  766. GlobalCompetitionIdolDayReward[convertIdol.Id] = convertIdol
  767. }
  768. globalCfg2, ok2 := serverproto.GlobalCfgLoader[int32(serverproto.GlobalType_Global_Cruise_Max)]
  769. if ok2 {
  770. GlobalCruiseMax = globalCfg2.IVal
  771. }
  772. GlobalCompetitonDayRewardLevel = getGlobalCfgValI(serverproto.GlobalType_Global_Competition_Idol_Day_Reward)
  773. GlobalWishSlotMaxCnt = getGlobalCfgValI(serverproto.GlobalType_Global_Unlock_WishBox_Slot)
  774. strCost := getGlobalCfgValS(serverproto.GlobalType_Global_Unlock_WishBox_Slot)
  775. itemId, itemCnt := Str2Res(strCost)
  776. GlobalWishSlotCost = serverproto.KeyValueType{Key: itemId, Value: itemCnt}
  777. cardLevelExchange := strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_Card_Level_Exchange), ";")
  778. for _, cardSourceStr := range cardLevelExchange {
  779. detail := strings.Split(cardSourceStr, ":")
  780. if len(detail) >= 3 {
  781. level, _ := Str2Num(detail[0])
  782. itemId, _ := Str2Num(detail[1])
  783. itemNum, _ := Str2Num(detail[2])
  784. GlobalCardLevelExchange[int32(level)] = &serverproto.KeyValueType{
  785. Key: int32(itemId),
  786. Value: int32(itemNum),
  787. }
  788. }
  789. }
  790. // bt服务器常量处理
  791. convertGlobalCfgBT()
  792. }
  793. func getGlobalCfgValI(idx serverproto.GlobalType) int32 {
  794. if cfgData, ok := serverproto.GlobalCfgLoader[int32(idx)]; ok {
  795. return cfgData.IVal
  796. }
  797. return 0
  798. }
  799. func getGlobalCfgValS(idx serverproto.GlobalType) string {
  800. if cfgData, ok := serverproto.GlobalCfgLoader[int32(idx)]; ok {
  801. return cfgData.SVal
  802. }
  803. return ""
  804. }
  805. // 恶意聊天
  806. type ConvertCheatMsgData struct {
  807. ChatDuration uint64 //ms
  808. Level int32
  809. //1,私聊对象数量,聊天字数大于3
  810. //2,相同聊天内容条数
  811. ParamList []int
  812. RechargeNum int32 //充值金额
  813. }
  814. func convertGlobalCfgBT() {
  815. // 充值钱包 免费充值额度神域经验比例
  816. GlobalCreditRechargeFactorStr := getGlobalCfgValS(serverproto.GlobalType_Global_CreditRechargeVip_Factor)
  817. f1, f2 := Str2Res(GlobalCreditRechargeFactorStr)
  818. // f1:rmb f2:res
  819. if f1 > 0 {
  820. GlobalCreditRechargeFactor = float32(f2) / float32(f1)
  821. }
  822. // 充值钱包 初始化最大额度
  823. GlobalCreditRechargeInitMax = getGlobalCfgValI(serverproto.GlobalType_Global_CreditRechargeInitMax)
  824. // rmb获得RO币比例系数
  825. //GlobalRoCoinFactor
  826. GlobalRMBTOROCoinFactorStr := getGlobalCfgValS(serverproto.GlobalType_Global_RmbToROCoinFactor)
  827. f1, f2 = Str2Res(GlobalRMBTOROCoinFactorStr)
  828. // f1:rmb f2:res
  829. if f1 > 0 {
  830. GlobalRoCoinFactor = float32(f2) / float32(f1)
  831. }
  832. // 特殊处理使用道具添加战斗倍数时间[道具id:持续时间]
  833. tmpStrList := strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_FastBattleTime), ";")
  834. for idx := 0; idx < len(tmpStrList); idx++ {
  835. k, v := Str2Res(tmpStrList[idx])
  836. if k > 0 && v > 0 {
  837. GlobalFastBattleTime = append(GlobalFastBattleTime, serverproto.KeyValueType{
  838. Key: k,
  839. Value: v,
  840. })
  841. }
  842. }
  843. // 试炼馈赠(层数:免费充值额度数量)
  844. tmpStrList = strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_ClimbingTowerDayReward), ";")
  845. for idx := 0; idx < len(tmpStrList); idx++ {
  846. k, v := Str2Res(tmpStrList[idx])
  847. if k <= 0 || v <= 0 {
  848. continue
  849. }
  850. GlobalClimbingTowerDayReward = append(GlobalClimbingTowerDayReward, serverproto.KeyValueType{
  851. Key: k,
  852. Value: v,
  853. })
  854. }
  855. // RO币兑换波利商城经验比例
  856. GlobalRoCoinToExpStr := getGlobalCfgValS(serverproto.GlobalType_Global_RoCoinToBoliExp_Factor)
  857. f1, f2 = Str2Res(GlobalRoCoinToExpStr)
  858. // f1:RoCoin f2:exp
  859. if f1 > 0 {
  860. GlobalRoCoinToExp = float64(f2) / float64(f1)
  861. }
  862. //挑战者大厅购买次数消耗
  863. tmpStrList = strings.Split(getGlobalCfgValS(serverproto.GlobalType_Global_WorldBossChallengeCost), ";")
  864. for idx := 0; idx < len(tmpStrList); idx++ {
  865. k, v := Str2Res(tmpStrList[idx])
  866. if k <= 0 || v <= 0 {
  867. continue
  868. }
  869. GlobalWorldBossChallengeCost = append(GlobalWorldBossChallengeCost, serverproto.KeyValueType{
  870. Key: k,
  871. Value: v,
  872. })
  873. }
  874. }