base_config_global.go 39 KB

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