combine_service.go 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747
  1. package model
  2. import (
  3. "os"
  4. "rocommon/service"
  5. "rocommon/util"
  6. "roserver/baseserver/model"
  7. "roserver/baseserver/set"
  8. model3 "roserver/battleboss/model"
  9. model5 "roserver/cross_rank/model"
  10. model6 "roserver/cross_server/model"
  11. model2 "roserver/db/model"
  12. model4 "roserver/game/model"
  13. model7 "roserver/guild/model"
  14. "roserver/serverproto"
  15. "strconv"
  16. "strings"
  17. )
  18. var typeServerActsList = set.New(set.NonThreadSafe)
  19. //合服数据处理
  20. func ConvertOldRedis() {
  21. err := util.InitLog(1, 0, "./log", "test", "")
  22. if err != nil {
  23. return
  24. }
  25. err = service.ServerCmd.Parse(os.Args[1:])
  26. if err != nil {
  27. util.InfoF("param parse err=%v", err)
  28. return
  29. }
  30. //加载活动配置表,查看哪些活动类型是开服时间活动
  31. path := "./config/csv/"
  32. serverproto.ItemCfgLoad(path)
  33. serverproto.ActivitiesCfgLoad(path)
  34. serverproto.GlobalCfgLoad(path)
  35. serverproto.RuneShopGiftsCfgLoad(path)
  36. serverproto.GuildBossCfgLoad(path)
  37. model.ConvertOldRedisGlobalCfg()
  38. model.ConvertOldRedisRuneCfg()
  39. for _, cfgData := range serverproto.ActivitiesCfgLoader {
  40. startDataList := strings.Split(cfgData.StartTime, ";")
  41. endDataList := strings.Split(cfgData.EndTime, ";")
  42. if len(startDataList) > 0 && len(endDataList) > 0 {
  43. tmpTimeType, _ := model.Str2Num(startDataList[0])
  44. if tmpTimeType == model.ActivitiesTime_Type_Server {
  45. typeServerActsList.Add(cfgData.Id)
  46. }
  47. }
  48. }
  49. typeServerActsList.Add(int32(4)) //每日累充必须重置
  50. util.InfoF("typeServerActsList=%v", typeServerActsList.List())
  51. //合并redis进程监听地址
  52. tmpIpStr := ""
  53. if *service.IPParam != "" {
  54. tmpIpStr = *service.IPParam
  55. }
  56. tmpPortStr := ""
  57. if *service.TempParam != "" {
  58. tmpPortStr = *service.TempParam
  59. }
  60. tmpPortStrList := strings.Split(tmpPortStr, ",")
  61. for idx := 0; idx < len(tmpPortStrList); idx++ {
  62. ipStr := tmpIpStr + ":" + tmpPortStrList[idx]
  63. if idx == len(tmpPortStrList)-1 {
  64. convertOldRedis(ipStr, true)
  65. } else {
  66. convertOldRedis(ipStr, false)
  67. }
  68. util.InfoF("convert finish ipStr=%v", ipStr)
  69. }
  70. //var ipStrList = []string{
  71. // "127.0.0.1:6379",
  72. //}
  73. //for idx := 0; idx < len(ipStrList); idx++ {
  74. // convertOldRedis(ipStrList[idx])
  75. //}
  76. }
  77. func convertOldRedis(redisIpStr string, lastOne bool) {
  78. //直接获取远端redis数据,调用db接口
  79. //redisIpStr = "127.0.0.1:6379"
  80. cli := service.NewNetRedisConnector([]string{redisIpStr}, "", 0, 0)
  81. service.SetRedis(cli)
  82. //0.获取角色uid列表
  83. uidList := getUidListFromRedis()
  84. util.InfoF("uidListSize=%v", len(uidList))
  85. ////1.清除当前数据库中不需要的数据(数据清除分个人数据/共用数据)
  86. for idx := 0; idx < len(uidList); idx++ {
  87. uid := uidList[idx]
  88. //1.1活动数据处理 role_activity.go
  89. convertActivityOldRedis(typeServerActsList, uid)
  90. //1.2英灵殿 role_arena.go
  91. convertArenaOldRedis(uid)
  92. //1.3地图 role_battle.go
  93. convertRoleBattleOldRedis(uid)
  94. //1.4赛季 role_competition.go
  95. convertRoleCompetitionOldRedis(uid)
  96. //1.5百人道场 role_daochang100.go
  97. convertRoleDaochang100OldRedis(uid)
  98. //1.6公会 role_guild.go
  99. convertRoleGuildOldRedis(uid)
  100. //1.7邮件 role_mail.go
  101. convertRoleMailOldRedis(uid)
  102. //1.8世界boss role_map.go
  103. convertRoleMapOldRedis(uid)
  104. //1.9卢恩商店 role_rune.go
  105. convertRoleRuneOldRedis(uid)
  106. //1.10冲榜 role_rush.go
  107. convertRoleRushOldRedis(uid)
  108. //1.11爬塔 role_tower.go
  109. convertRoleTowerOldRedis(uid)
  110. //1.12背包数据删除(背包内的活动数据)
  111. convertRoleBagOldRedis(uid)
  112. }
  113. //系统共用数据部分
  114. //1.1.1 role_activity.go
  115. service.GetRedis().Del(model.ActivitiesCollectionDataPrefix) //活动全局数据
  116. //1.2.1 role_arena.go
  117. convertArenaOldCommonRedis()
  118. //1.3.1 role_battle.go 远征之门积分排行榜
  119. //service.GetRedis().Del(model.ExpeditionScoreRankPrefix) //合并数据后数据自动重排
  120. //1.3.2 推图冲榜(冒险盛典)排行榜
  121. service.GetRedis().Del(model.RushMapScorePrefix)
  122. service.GetRedis().Del(model.RushMapPrefix)
  123. service.GetRedis().Del(model.RushMapRankPrefix)
  124. tmpList, _ := service.GetRedis().Keys(model.RushMapRankPrefix + "*").Result()
  125. for idx := 0; idx < len(tmpList); idx++ {
  126. service.GetRedis().Del(tmpList[idx])
  127. }
  128. //1.4.1 role_competition.go
  129. convertRoleCompetitionOldCommonRedis()
  130. //1.5.1 role_daochang100.go
  131. convertRoleDaochang100OldCommonRedis()
  132. //1.6.1 role_guild.go
  133. convertRoleGuildOldCommonRedis()
  134. //1.7.1 role_mail.go
  135. convertRoleMailOldCommonRedis()
  136. //1.8.1 role_map.go
  137. convertRoleMapOldCommonRedis()
  138. //1.10.1 role_rush.go
  139. //宠物盛典 ,技能盛典
  140. convertRoleRushOldCommonRedis()
  141. //1.11.1 role_tower.go
  142. convertRoleTowerOldCommonRedis()
  143. //1.12.1跨服玩法 巅峰爬塔/远航试炼
  144. convertRoleCrossOldRedisCommon()
  145. //战斗记录数据清除
  146. service.GetRedis().Del(model.BattleRecordMapPrefix)
  147. service.GetRedis().Del(model.BattleRecordDetailPrefix)
  148. service.GetRedis().Del(model.BattleRecordDetailCheckPrefix)
  149. //卡片收集rank清除
  150. service.GetRedis().Del(model.CardCollectRankPrefix)
  151. //信物收集
  152. service.GetRedis().Del(model.KeepSakeCollectRankPrefix)
  153. //推图排行榜和历史最大战力排行榜(aof启动后会自动合并zset中的排行榜数据)
  154. ////2.导入数据到新redis数据库中
  155. //开启aof
  156. service.GetRedis().ConfigSet("appendonly", "yes")
  157. //service.GetRedis().ConfigSet("aof-use-rdb-preamble", "no")
  158. service.GetRedis().BgSave()
  159. service.GetRedis().BgRewriteAOF()
  160. }
  161. func getUidListFromRedis() []uint64 {
  162. var uidList []uint64
  163. tmpUidList, err := service.GetRedis().Keys("account_*").Result()
  164. if err != nil {
  165. return uidList
  166. }
  167. for idx := 0; idx < len(tmpUidList); idx++ {
  168. tmpMsg := &serverproto.SSAccountGetRoleListAck{}
  169. err := model.GetMessageFromRedis(tmpUidList[idx], "", tmpMsg)
  170. if err != nil || len(tmpMsg.Roles) <= 0 {
  171. util.ErrorF("account=%v getUidListFromRedis err=%v", tmpUidList[idx], err)
  172. continue
  173. }
  174. uidList = append(uidList, tmpMsg.Roles[0].Uid)
  175. }
  176. return uidList
  177. }
  178. //role_activity.go
  179. func convertActivityOldRedis(typeServerActsList set.Interface, uid uint64) {
  180. uidStr := strconv.FormatUint(uid, 10)
  181. tmpRoleActivity := &serverproto.RoleActivity{}
  182. err := model2.GetSystemDataFromRedis(model2.RoleActivityDataSignPrefix, uid, tmpRoleActivity)
  183. if err != nil && err != service.NIL {
  184. util.ErrorF("uid=%v [convertActivityOldRedis] Get RoleActivitySign err=%v", uid, err)
  185. return
  186. }
  187. //1.过期列表中保留着以往开过的所有过期活动 ->清除根据开服时间的活动id
  188. var tmpExpiredActivityList []int32
  189. for idx := 0; idx < len(tmpRoleActivity.ExpiredActivityList); idx++ {
  190. expiredActivityId := tmpRoleActivity.ExpiredActivityList[idx]
  191. if !typeServerActsList.Has(expiredActivityId) {
  192. tmpExpiredActivityList = append(tmpExpiredActivityList, expiredActivityId)
  193. continue
  194. }
  195. activityIdStr := strconv.Itoa(int(expiredActivityId))
  196. tmpKeyStr := model2.RoleActivityDataPrefix + uidStr + ":" + activityIdStr
  197. service.GetRedis().Del(tmpKeyStr)
  198. }
  199. //2.已经开启的列表中清除根据开服时间的id
  200. retList := service.GetRedis().SMembers(model2.RoleActivityDataOpenListPrefix + uidStr).Val()
  201. for idx := 0; idx < len(retList); idx++ {
  202. openActivityId, _ := strconv.Atoi(retList[idx])
  203. if openActivityId <= 0 {
  204. service.GetRedis().SRem(model2.RoleActivityDataOpenListPrefix+uidStr, retList[idx])
  205. continue
  206. }
  207. if typeServerActsList.Has(int32(openActivityId)) {
  208. service.GetRedis().SRem(model2.RoleActivityDataOpenListPrefix+uidStr, retList[idx])
  209. tmpKeyStr := model2.RoleActivityDataPrefix + uidStr + ":" + retList[idx]
  210. service.GetRedis().Del(tmpKeyStr)
  211. }
  212. }
  213. //3.签到数据重置
  214. tmpRoleActivity.SignInfo = &serverproto.SignUp{
  215. SignRound: 1,
  216. CurDay: 0,
  217. CurSignInfo: &serverproto.CurRoundSign{
  218. LastSign: 0,
  219. },
  220. }
  221. //重新保存
  222. tmpRoleActivity.ExpiredActivityList = tmpExpiredActivityList
  223. err = model2.SetSystemDataToRedis(model2.RoleActivityDataSignPrefix, uid, tmpRoleActivity)
  224. if err != nil {
  225. util.ErrorF("uid=%v [convertActivityOldRedis] save err=%v", uid, err)
  226. }
  227. }
  228. //roleanera
  229. func convertArenaOldRedis(uid uint64) {
  230. //uidStr := strconv.FormatUint(uid, 10)
  231. //1.竞技场赛季个人数据重置
  232. tmpRoleArena := &serverproto.RoleArena{}
  233. err := model2.GetSystemDataFromRedis(model2.RoleArenaDataPrefix, uid, tmpRoleArena)
  234. if err != nil && err != service.NIL {
  235. util.ErrorF("uid=%v [convertArenaOldRedis] Get RoleArena err=%v", uid, err)
  236. return
  237. }
  238. if tmpRoleArena.Arena == nil {
  239. return
  240. }
  241. //重置剩余挑战次数/剩余购买次数
  242. tmpRoleArena.Arena.ChallengeCount = model.GlobalDaoChangChallengeCount
  243. tmpRoleArena.Arena.BuyCount = model.GlobalDaoChangByCount
  244. //重置段位/积分
  245. tmpRoleArena.Arena.ArenaSeasonId = 0
  246. tmpRoleArena.Arena.LastArenaSeasonTime = 0
  247. tmpRoleArena.Arena.RecordWinCount = 0
  248. tmpRoleArena.Arena.RecordTotalCount = 0
  249. tmpRoleArena.Arena.ArenaSeasonIdReduce = 0
  250. tmpRoleArena.Arena.Score = 0
  251. tmpRoleArena.Arena.OldScore = 0
  252. tmpRoleArena.Arena.RushArena = nil
  253. err = model2.SetSystemDataToRedis(model2.RoleArenaDataPrefix, uid, tmpRoleArena)
  254. if err != nil {
  255. util.ErrorF("uid=%v [convertArenaOldRedis] Set RoleArena err=%v", uid, err)
  256. }
  257. }
  258. func convertArenaOldCommonRedis() {
  259. //2.匹配数据处理
  260. //英灵殿积分排行榜,只用来match使用
  261. service.GetRedis().Del(model.ArenaRankMatchPrefix)
  262. //3.积分排行榜清除
  263. service.GetRedis().Del(model.ArenaRankPrefix)
  264. service.GetRedis().Del(model.ArenaPreRankPrefix)
  265. service.GetRedis().Del(model.ArenaTopRankPrefix)
  266. tmpTopList, _ := service.GetRedis().Keys(model.ArenaTopRankPrefix + "*").Result()
  267. for idx := 0; idx < len(tmpTopList); idx++ {
  268. if tmpTopList[idx] != model.ArenaTopRankPrefix {
  269. service.GetRedis().Del(tmpTopList[idx])
  270. }
  271. }
  272. //4.冲榜相关处理
  273. service.GetRedis().Del(model.RushArenaRankPrefix) //冲榜相关
  274. tmpTopList, _ = service.GetRedis().Keys(model.RushArenaRankPrefix + "*").Result()
  275. for idx := 0; idx < len(tmpTopList); idx++ {
  276. service.GetRedis().Del(tmpTopList[idx])
  277. }
  278. service.GetRedis().Del(model.RushArenaPrefix) //最终排行
  279. }
  280. //rolebattle
  281. func convertRoleBattleOldRedis(uid uint64) {
  282. //uidStr := strconv.FormatUint(uid, 10)
  283. tmpRoleBattle := &serverproto.RoleBattle{}
  284. err := model2.GetSystemDataFromRedis(model2.RoleBattleDataPrefix, uid, tmpRoleBattle)
  285. if err != nil && err != service.NIL {
  286. util.ErrorF("uid=%v [convertRoleBattleOldRedis] Get RoleBattle err=%v", uid, err)
  287. return
  288. }
  289. //1.时光之力
  290. if tmpRoleBattle.QuickBattle != nil {
  291. tmpRoleBattle.QuickBattle.DayTimes = 0
  292. }
  293. //2.远征之门积分排行榜 共用数据部分
  294. //service.GetRedis().Del(model.ExpeditionScoreRankPrefix)
  295. //3.推图冲榜(冒险盛典)
  296. tmpRoleBattle.RushMap = &serverproto.RushMap{}
  297. err = model2.SetSystemDataToRedis(model2.RoleBattleDataPrefix, uid, tmpRoleBattle)
  298. if err != nil {
  299. util.ErrorF("uid=%v [convertRoleBattleOldRedis] save err=%v", uid, err)
  300. }
  301. }
  302. //rolecompetition
  303. func convertRoleCompetitionOldRedis(uid uint64) {
  304. uidStr := strconv.FormatUint(uid, 10)
  305. service.GetRedis().Del(model2.RoleCompetitionDataPrefix + uidStr)
  306. //1.招募季,地图排行榜(需要清空地图排行榜)
  307. //夺宝数据清空(在道场数据中)
  308. }
  309. func convertRoleCompetitionOldCommonRedis() {
  310. //历史进行到的赛季数据伤处
  311. service.GetRedis().Del(model.ServerCompetitionPrefix)
  312. //1.招募季赛季信息删除
  313. service.GetRedis().Del(model.CompetitionMapRankPrefix)
  314. tmpList, _ := service.GetRedis().Keys(model.CompetitionMapRankPrefix + "*").Result()
  315. for idx := 0; idx < len(tmpList); idx++ {
  316. service.GetRedis().Del(tmpList[idx])
  317. }
  318. //2.选拔季
  319. service.GetRedis().Del(model.CompetitionScoreRankPrefix)
  320. tmpList, _ = service.GetRedis().Keys(model.CompetitionScoreRankPrefix + "*").Result()
  321. for idx := 0; idx < len(tmpList); idx++ {
  322. service.GetRedis().Del(tmpList[idx])
  323. }
  324. //3.夺宝赛季:道场轮盘/活动转盘
  325. service.GetRedis().Del(model.CompetitionDuoBaoScoreRankPrefix)
  326. tmpList, _ = service.GetRedis().Keys(model.CompetitionDuoBaoScoreRankPrefix + "*").Result()
  327. for idx := 0; idx < len(tmpList); idx++ {
  328. service.GetRedis().Del(tmpList[idx])
  329. }
  330. //大奖日志数据
  331. service.GetRedis().Del(model.RoleDaoChang100WheeLogPrefix)
  332. //4.占星数据
  333. service.GetRedis().Del(model.CompetitionZhanBuScoreRankPrefix)
  334. tmpList, _ = service.GetRedis().Keys(model.CompetitionZhanBuScoreRankPrefix + "*").Result()
  335. for idx := 0; idx < len(tmpList); idx++ {
  336. service.GetRedis().Del(tmpList[idx])
  337. }
  338. //4.偶像季数据
  339. service.GetRedis().Del(model.CompetitionIdolScoreRankPrefix)
  340. tmpList, _ = service.GetRedis().Keys(model.CompetitionIdolScoreRankPrefix + "*").Result()
  341. for idx := 0; idx < len(tmpList); idx++ {
  342. service.GetRedis().Del(tmpList[idx])
  343. }
  344. }
  345. //roleguild
  346. func convertRoleGuildOldRedis(uid uint64) {
  347. //serverproto.SSGuildBossRefreshNtf
  348. //公会个人数据清楚
  349. tmpRoleGuild := &serverproto.RoleGuild{}
  350. err := model2.GetSystemDataFromRedis(model2.RoleGuildDataPrefix, uid, tmpRoleGuild)
  351. if err != nil && err != service.NIL {
  352. util.InfoF("uid=%v [convertRolegGuildOldRedis] err%v", uid, err)
  353. return
  354. }
  355. tmpRoleGuild.BossFight = tmpRoleGuild.BossFight[:0]
  356. tmpRoleGuild.GuildBattle = nil
  357. tmpRoleGuild.DemonInfo = nil
  358. tmpRoleGuild.EliteBossCd = 0
  359. err = model2.SetSystemDataToRedis(model2.RoleGuildDataPrefix, uid, tmpRoleGuild)
  360. if err != nil {
  361. util.ErrorF("uid=%v [convertRolegGuildOldRedis] err=%v", uid, err)
  362. }
  363. }
  364. func convertRoleGuildOldCommonRedis() {
  365. //1.公会狩猎-公会boss数据
  366. service.GetRedis().Del(model.GuildBossPrefix)
  367. tmpList, _ := service.GetRedis().Keys(model.GuildBossPrefix + "*").Result()
  368. //重新初始化公会狩猎boss
  369. for idx := 0; idx < len(tmpList); idx++ {
  370. for _, data := range serverproto.GuildBossCfgLoader {
  371. bossInfo := &serverproto.GuildBossInfo{}
  372. if data.BossType == model7.Guild_Boss_Type_Normal {
  373. nowTime := util.GetCurrentTimeNow()
  374. if nowTime.Hour() == 4 {
  375. bossInfo.BossState = model7.Guild_Boss_State_Wait_Summon
  376. } else {
  377. bossInfo.BossState = model7.Guild_Boss_State_Fight
  378. }
  379. bossInfo.RefreshTime = uint64(util.GetCurrentTime())
  380. bossInfo.MaxDam = &serverproto.GuildFight{}
  381. } else if data.BossType == model7.Guild_Boss_Type_Elite {
  382. bossInfo.BossState = model7.Guild_Boss_State_Wait_Summon
  383. }
  384. fieldStr := strconv.FormatUint(uint64(data.Id), 10)
  385. err, msgStr := model.GetEncodeMessage(bossInfo)
  386. if err == nil {
  387. ret, err := service.GetRedis().HSet(tmpList[idx], fieldStr, msgStr).Result()
  388. if err != nil {
  389. util.InfoF("[SaveGuildBoss] err:%v %v", err, ret)
  390. return
  391. }
  392. }
  393. }
  394. //service.GetRedis().Del(tmpList[idx])
  395. }
  396. //2.公会魔王
  397. service.GetRedis().Del(model.GuildDemonPrefix)
  398. service.GetRedis().Del(model.GuildDemonRewardPrefix)
  399. tmpList, _ = service.GetRedis().Keys(model.GuildDemonRewardPrefix + "*").Result()
  400. for idx := 0; idx < len(tmpList); idx++ {
  401. service.GetRedis().Del(tmpList[idx])
  402. }
  403. service.GetRedis().Del(model.GuildDemonGuildPrefix)
  404. service.GetRedis().Del(model.GuildDemonMVPPrefix)
  405. //3.公会战排行榜(百人道场积分排行榜)
  406. //已经在百人道场中清除RoleDaoChang100GuildRankPrefix
  407. //4.公会战
  408. service.GetRedis().Del(model7.GuildBattlePrefix)
  409. tmpList, _ = service.GetRedis().Keys(model7.GuildBattlePrefix + "*").Result()
  410. for idx := 0; idx < len(tmpList); idx++ {
  411. service.GetRedis().Del(tmpList[idx])
  412. }
  413. service.GetRedis().Del(model7.GuildBattleRankPrefix)
  414. tmpList, _ = service.GetRedis().Keys(model7.GuildBattleRankPrefix + "*").Result()
  415. for idx := 0; idx < len(tmpList); idx++ {
  416. service.GetRedis().Del(tmpList[idx])
  417. }
  418. service.GetRedis().Del(model7.GuildBattleLogPrefix)
  419. tmpList, _ = service.GetRedis().Keys(model7.GuildBattleLogPrefix + "*").Result()
  420. for idx := 0; idx < len(tmpList); idx++ {
  421. service.GetRedis().Del(tmpList[idx])
  422. }
  423. service.GetRedis().Del(model7.GuildBattleBasePrefix)
  424. service.GetRedis().Del(model7.GuildBattleTablePrefix)
  425. }
  426. //roledaochang100
  427. func convertRoleDaochang100OldRedis(uid uint64) {
  428. uidStr := strconv.FormatUint(uid, 10)
  429. //1.log状态重置
  430. service.GetRedis().HSet(model.RoleDaoChang100Prefix+uidStr, "log", 0)
  431. tmpRoleDaochang100 := &serverproto.RoleDaoChang100{}
  432. if !model2.GetRoleDaoChang100FromRedis(uid, tmpRoleDaochang100) {
  433. //util.ErrorF("uid=%v [convertRoleDaochang100OldRedis] load", uid)
  434. return
  435. }
  436. //2.重置挑战次数
  437. tmpRoleDaochang100.LogState = false
  438. tmpRoleDaochang100.ChallengeCount = model.GlobalDaoChang100ChallengeCount
  439. //4.道场转盘数据清空(赛季相关)
  440. tmpRoleDaochang100.WheelRewardItemList = nil
  441. tmpRoleDaochang100.WheelOpen = false
  442. tmpRoleDaochang100.WheelRefreshNum = 0
  443. tmpRoleDaochang100.TemplateIdx = 0
  444. tmpRoleDaochang100.WheelNum = 0
  445. tmpRoleDaochang100.WheelIdx = 0
  446. model2.SetRoleDaoChang100ToRedis(uid, tmpRoleDaochang100)
  447. //3.占位奖励列表清空
  448. service.GetRedis().Del(model.DaoChang100RewardPrefix + uidStr)
  449. }
  450. func convertRoleDaochang100OldCommonRedis() {
  451. //4.占位数据初始化为机器人数据
  452. service.GetRedis().Del(model.DaoChang100Prefix)
  453. //5.百人道场公会贡献点排行榜
  454. //占位获取奖励中包含积分
  455. service.GetRedis().Del(model.RoleDaoChang100GuildRankPrefix)
  456. tmpList, _ := service.GetRedis().Keys(model.RoleDaoChang100GuildRankPrefix + "*").Result()
  457. for idx := 0; idx < len(tmpList); idx++ {
  458. service.GetRedis().Del(tmpList[idx])
  459. }
  460. }
  461. //rolemail
  462. func convertRoleMailOldRedis(uid uint64) {
  463. uidStr := strconv.FormatUint(uid, 10)
  464. keyStr := model2.RoleMailDataPrefix + uidStr
  465. //1.个人身上的全局邮件ID重置
  466. service.GetRedis().HDel(keyStr, "gMaxId")
  467. }
  468. func convertRoleMailOldCommonRedis() {
  469. //1.删除全局邮件
  470. service.GetRedis().Del(model2.RoleGlobalMailListPrefix) //列表
  471. service.GetRedis().Del(model2.RoleGlobalMailPrefix)
  472. tmpList, _ := service.GetRedis().Keys(model2.RoleGlobalMailPrefix + "*").Result()
  473. for idx := 0; idx < len(tmpList); idx++ {
  474. service.GetRedis().Del(tmpList[idx])
  475. }
  476. }
  477. //rolemap
  478. func convertRoleMapOldRedis(uid uint64) {
  479. //uidStr := strconv.FormatUint(uid, 10)
  480. tmpRoleMap := &serverproto.RoleMap{}
  481. err := model2.GetSystemDataFromRedis(model2.RoleMapDataPrefix, uid, tmpRoleMap)
  482. if err != nil && err != service.NIL {
  483. util.InfoF("uid=%v [convertRoleMapOldRedis] RoleMap err=%v", uid, err)
  484. return
  485. }
  486. tmpRoleMap.WorldBossCount = 0
  487. tmpRoleMap.WorldBossChallengeList = []int32{}
  488. err = model2.SetSystemDataToRedis(model2.RoleMapDataPrefix, uid, tmpRoleMap)
  489. if err != nil {
  490. util.ErrorF("uid=%v [convertRoleMapOldRedis] save err=%v", uid, err)
  491. }
  492. }
  493. func convertRoleMapOldCommonRedis() {
  494. //重置世界boss数据
  495. //1.世界boss列表数据
  496. service.GetRedis().Del(model3.WorldBossStatePrefix)
  497. //2.挑战过世界boss的玩家列表
  498. tmpList, _ := service.GetRedis().Keys(model3.WorldBossStateUidListPrefix + "*").Result()
  499. for idx := 0; idx < len(tmpList); idx++ {
  500. service.GetRedis().Del(tmpList[idx])
  501. }
  502. }
  503. //rolerune
  504. func convertRoleRuneOldRedis(uid uint64) {
  505. uidStr := strconv.FormatUint(uid, 10)
  506. keyStr := model2.RoleRuneDataPrefix + uidStr
  507. valList, err := service.GetRedis().HGetAll(keyStr).Result()
  508. if err != nil {
  509. util.InfoF("uid=%v [convertRoleRuneOldRedis] err=%v", uid, err)
  510. return
  511. }
  512. //1.重置日礼包/周礼包/月礼包 购买限制
  513. //2.重置飞艇探索数据
  514. for k, v := range valList {
  515. if k == "runeBase" {
  516. //todo
  517. } else if k == "runeExplore" {
  518. service.GetRedis().HDel(keyStr, k)
  519. } else {
  520. shopData := &serverproto.RuneShop{}
  521. err = model.GetDecodeMessage(shopData, v)
  522. if err != nil {
  523. continue
  524. }
  525. //检查是否是日礼包/周礼包/月礼包 商品数据
  526. if shopData.ShopId == model4.Rune_Shop_Type_Bag {
  527. service.GetRedis().HDel(keyStr, k)
  528. }
  529. }
  530. }
  531. }
  532. //rolerush
  533. func convertRoleRushOldRedis(uid uint64) {
  534. //1.技能盛典个人数据清除
  535. uidStr := strconv.FormatUint(uid, 10)
  536. service.GetRedis().Del(model2.RoleRushDataPrefix + uidStr)
  537. //2.宠物盛典个人数据清除
  538. baseStr, err := service.GetRedis().HGet(model2.RolePetDataPrefix+uidStr, model2.RolePetDataFieldPrefix_base).Result()
  539. if err != nil {
  540. if err != service.NIL {
  541. util.InfoF("uid=%v [convertRoleRushOldRedis] pet err=%v", uid, err)
  542. }
  543. return
  544. }
  545. tmpRolePet := &serverproto.RolePet{}
  546. err = model.GetDecodeMessage(tmpRolePet, baseStr)
  547. if err == nil {
  548. tmpRolePet.RushPet = nil
  549. err1, msgData := model.GetEncodeMessage(tmpRolePet)
  550. if err1 == nil {
  551. service.GetRedis().HSet(model2.RolePetDataPrefix+uidStr,
  552. model2.RolePetDataFieldPrefix_base, msgData)
  553. }
  554. }
  555. //3.其他盛典个人数据在对应不同系统中做清除
  556. }
  557. func convertRoleRushOldCommonRedis() {
  558. //宠物盛典
  559. service.GetRedis().Del(model.RushPetScorePrefix)
  560. service.GetRedis().Del(model.RushPetPrefix)
  561. service.GetRedis().Del(model.RushPetRankPrefix)
  562. tmpList, _ := service.GetRedis().Keys(model.RushPetRankPrefix + "*").Result()
  563. for idx := 0; idx < len(tmpList); idx++ {
  564. service.GetRedis().Del(tmpList[idx])
  565. }
  566. service.GetRedis().Del(model.RushPetDataPrefix)
  567. tmpList, _ = service.GetRedis().Keys(model.RushPetDataPrefix + "*").Result()
  568. for idx := 0; idx < len(tmpList); idx++ {
  569. service.GetRedis().Del(tmpList[idx])
  570. }
  571. //技能盛典
  572. service.GetRedis().Del(model.RushSkillScorePrefix)
  573. service.GetRedis().Del(model.RushSkillPrefix)
  574. service.GetRedis().Del(model.RushSkillRankPrefix)
  575. tmpList, _ = service.GetRedis().Keys(model.RushSkillRankPrefix + "*").Result()
  576. for idx := 0; idx < len(tmpList); idx++ {
  577. service.GetRedis().Del(tmpList[idx])
  578. }
  579. }
  580. //rolecross
  581. func convertRoleCrossOldRedisCommon() {
  582. //1.巅峰之塔
  583. service.GetRedis().Del(model5.CrossMaxFightPowerRankPrefix)
  584. service.GetRedis().Del(model5.CrossMaxFightPowerRankOldPrefix)
  585. service.GetRedis().Del(model5.TopTowerWinRankPrefix)
  586. service.GetRedis().Del(model5.FightInfoPrefix)
  587. service.GetRedis().Del(model5.CommonInfoPrefix)
  588. //2.远航试炼
  589. service.GetRedis().Del(model6.YuanHangTrialFightInfoPrefix)
  590. service.GetRedis().Del(model6.YuanHangTrialItemPrefix)
  591. service.GetRedis().Del(model6.YuanHangTrialRankPrefix)
  592. }
  593. //roletower
  594. func convertRoleTowerOldRedis(uid uint64) {
  595. //个人冲榜数据清除
  596. tmpRoleTower := &serverproto.RoleTower{}
  597. err := model2.GetSystemDataFromRedis(model2.RoleTowerDataPrefix, uid, tmpRoleTower)
  598. if err != nil && err != service.NIL {
  599. util.InfoF("uid=%v [convertRoleTowerOldRedis] err=%v", uid, err)
  600. return
  601. }
  602. tmpRoleTower.RushTower = nil
  603. err = model2.SetSystemDataToRedis(model2.RoleTowerDataPrefix, uid, tmpRoleTower)
  604. if err != nil {
  605. util.ErrorF("uid=%v [convertRoleTowerOldRedis] save err=%v", uid, err)
  606. }
  607. }
  608. //1.12背包数据删除(背包内的活动数据)
  609. func convertRoleBagOldRedis(uid uint64) {
  610. tmpRoleBag := &serverproto.RoleBag{}
  611. err := model2.GetSystemDataFromRedis(model2.RoleBagDataPrefix, uid, tmpRoleBag)
  612. if err != nil && err != service.NIL {
  613. util.ErrorF("uid=%v del bag activity itemlist err=%v", uid, err)
  614. return
  615. }
  616. bSave := false
  617. var newItemList []*serverproto.ItemData
  618. for idx := 0; idx < len(tmpRoleBag.ItemList); idx++ {
  619. tmpItem := tmpRoleBag.ItemList[idx]
  620. cfgData := model4.GetItemCfg(tmpItem.ConfigId)
  621. if cfgData == nil {
  622. bSave = true
  623. continue
  624. }
  625. //删除活动类型道具
  626. if cfgData.ItemTime == model4.Item_Time_Type_Competition_2 ||
  627. cfgData.ItemTime == model4.Item_Time_Type_Competition_4 ||
  628. cfgData.ItemTime == model4.Item_Time_Type_Activities ||
  629. cfgData.ItemTime == model4.Item_Time_Type_Likability {
  630. bSave = true
  631. continue
  632. }
  633. newItemList = append(newItemList, tmpItem)
  634. }
  635. if bSave {
  636. tmpRoleBag.ItemList = newItemList
  637. err = model2.SetSystemDataToRedis(model2.RoleBagDataPrefix, uid, tmpRoleBag)
  638. if err != nil {
  639. util.ErrorF("uid=%v save bag item list err=%v", uid, err)
  640. }
  641. }
  642. }
  643. func convertRoleTowerOldCommonRedis() {
  644. //试炼盛典-爬塔数据清除
  645. service.GetRedis().Del(model.RushTowerPrefix)
  646. service.GetRedis().Del(model.RushTowerRankPrefix)
  647. tmpList, _ := service.GetRedis().Keys(model.RushTowerRankPrefix + "*").Result()
  648. for idx := 0; idx < len(tmpList); idx++ {
  649. service.GetRedis().Del(tmpList[idx])
  650. }
  651. //爬塔排行榜清除
  652. //service.GetRedis().Del(model.TowerLevelRankPrefix) 合并数据后数据自动重排
  653. service.GetRedis().Del(model.TowerFightpowerRankPrefix)
  654. }
  655. /*
  656. 注意:下面操作需要在同一个redis版本中操作,即需要在外网使用的redis版本下进行操作
  657. 1.获取外网rdb文件,并重新修改启动该rdb文件的redis*.conf文件
  658. 修改conf文件如下:
  659. 1.在675行添加(表示生成的aof文件中不包行rdb文件,只有aof格式文件内容):aof-use-rdb-preamble no
  660. 2.port修改成当前外网的redis*.conf文件一致
  661. 3.appendfilename修改成appendonly[端口号].aof,appendonly7001.aof
  662. 4.修改appendonly为no(关闭appendonly,为了启动redis时直接读取rdb文件)
  663. 2.第1步的修改完成后,按照外网的方式利用获取到的外网rdb启动(需改后的redis*.conf文件和对应的rdb文件)
  664. 3.用命令行启动合服处理进程,格式如下:
  665. test.exe -ip 127.0.0.1 -diff 7001,7002,7003
  666. 1.test.exe为合服处理进程(负责清空redis中需要清空的数据)
  667. 2.-ip为第2步中redis启动时监听的ip地址
  668. 3.-diff为redis启动时坚挺的端口,多个端口中间用逗号隔开,例如:7001,7002,7003
  669. 4.合并第3步操作后生成的appendonly[端口号].aof文件,如下:
  670. cat appendonly7001.aof appendonly7002.aof appendonly7003.aof > new.aof
  671. 5.第4步生成的new.aof文件就是合服后的数据,需要转换成rdb文件
  672. 获取1步骤的redis*.conf文件修改如下:
  673. 1.appendonly修改为yes
  674. 2.删除之前添加的aof-use-rdb-preamble no
  675. 3.appendfilename修改成new.aof
  676. 4.启动端口修改成没有使用过的端口,例如6379
  677. 6.利用第4不生成的new.aof文件和第5不修改后的redis*.conf文件启动一个新的redis进程,并执行redis命令bgsave(或
  678. 者等待一段时间会自动生成对应的rdb文件),查看目录下是否生成dump.rdb文件,如果生成说明合服数据库已经成功生成
  679. 7.第6不生成的rdb文件即为合服后的数据库,把该rdb文件copy到外网然后根据外网的配置启动即可
  680. */