base_config_global.go 39 KB

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