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. func ConvertOldRedis() {
  20. err := util.InitLog(1, 0, "./log", "test", "")
  21. if err != nil {
  22. return
  23. }
  24. err = service.ServerCmd.Parse(os.Args[1:])
  25. if err != nil {
  26. util.InfoF("param parse err=%v", err)
  27. return
  28. }
  29. //加载活动配置表,查看哪些活动类型是开服时间活动
  30. path := "./config/csv/"
  31. serverproto.ItemCfgLoad(path)
  32. serverproto.ActivitiesCfgLoad(path)
  33. serverproto.GlobalCfgLoad(path)
  34. serverproto.RuneShopGiftsCfgLoad(path)
  35. serverproto.GuildBossCfgLoad(path)
  36. model.ConvertOldRedisGlobalCfg()
  37. model.ConvertOldRedisRuneCfg()
  38. for _, cfgData := range serverproto.ActivitiesCfgLoader {
  39. startDataList := strings.Split(cfgData.StartTime, ";")
  40. endDataList := strings.Split(cfgData.EndTime, ";")
  41. if len(startDataList) > 0 && len(endDataList) > 0 {
  42. tmpTimeType, _ := model.Str2Num(startDataList[0])
  43. if tmpTimeType == model.ActivitiesTime_Type_Server {
  44. typeServerActsList.Add(cfgData.Id)
  45. }
  46. }
  47. }
  48. typeServerActsList.Add(int32(4)) //每日累充必须重置
  49. util.InfoF("typeServerActsList=%v", typeServerActsList.List())
  50. //合并redis进程监听地址
  51. tmpIpStr := ""
  52. if *service.IPParam != "" {
  53. tmpIpStr = *service.IPParam
  54. }
  55. tmpPortStr := ""
  56. if *service.TempParam != "" {
  57. tmpPortStr = *service.TempParam
  58. }
  59. tmpPortStrList := strings.Split(tmpPortStr, ",")
  60. for idx := 0; idx < len(tmpPortStrList); idx++ {
  61. ipStr := tmpIpStr + ":" + tmpPortStrList[idx]
  62. if idx == len(tmpPortStrList)-1 {
  63. convertOldRedis(ipStr, true)
  64. } else {
  65. convertOldRedis(ipStr, false)
  66. }
  67. util.InfoF("convert finish ipStr=%v", ipStr)
  68. }
  69. //var ipStrList = []string{
  70. // "127.0.0.1:6379",
  71. //}
  72. //for idx := 0; idx < len(ipStrList); idx++ {
  73. // convertOldRedis(ipStrList[idx])
  74. //}
  75. }
  76. func convertOldRedis(redisIpStr string, lastOne bool) {
  77. //直接获取远端redis数据,调用db接口
  78. //redisIpStr = "127.0.0.1:6379"
  79. cli := service.NewNetRedisConnector([]string{redisIpStr}, "", 0, 0)
  80. service.SetRedis(cli)
  81. //0.获取角色uid列表
  82. uidList := getUidListFromRedis()
  83. util.InfoF("uidListSize=%v", len(uidList))
  84. ////1.清除当前数据库中不需要的数据(数据清除分个人数据/共用数据)
  85. for idx := 0; idx < len(uidList); idx++ {
  86. uid := uidList[idx]
  87. //1.1活动数据处理 role_activity.go
  88. convertActivityOldRedis(typeServerActsList, uid)
  89. //1.2英灵殿 role_arena.go
  90. convertArenaOldRedis(uid)
  91. //1.3地图 role_battle.go
  92. convertRoleBattleOldRedis(uid)
  93. //1.4赛季 role_competition.go
  94. convertRoleCompetitionOldRedis(uid)
  95. //1.5百人道场 role_daochang100.go
  96. convertRoleDaochang100OldRedis(uid)
  97. //1.6公会 role_guild.go
  98. convertRoleGuildOldRedis(uid)
  99. //1.7邮件 role_mail.go
  100. convertRoleMailOldRedis(uid)
  101. //1.8世界boss role_map.go
  102. convertRoleMapOldRedis(uid)
  103. //1.9卢恩商店 role_rune.go
  104. convertRoleRuneOldRedis(uid)
  105. //1.10冲榜 role_rush.go
  106. convertRoleRushOldRedis(uid)
  107. //1.11爬塔 role_tower.go
  108. convertRoleTowerOldRedis(uid)
  109. //1.12背包数据删除(背包内的活动数据)
  110. convertRoleBagOldRedis(uid)
  111. }
  112. //系统共用数据部分
  113. //1.1.1 role_activity.go
  114. service.GetRedis().Del(model.ActivitiesCollectionDataPrefix) //活动全局数据
  115. //1.2.1 role_arena.go
  116. convertArenaOldCommonRedis()
  117. //1.3.1 role_battle.go 远征之门积分排行榜
  118. service.GetRedis().Del(model.ExpeditionScoreRankPrefix) //合并数据后数据自动重排
  119. //1.3.2 推图冲榜(冒险盛典)排行榜
  120. service.GetRedis().Del(model.RushMapScorePrefix)
  121. service.GetRedis().Del(model.RushMapPrefix)
  122. service.GetRedis().Del(model.RushMapRankPrefix)
  123. tmpList, _ := service.GetRedis().Keys(model.RushMapRankPrefix + "*").Result()
  124. for idx := 0; idx < len(tmpList); idx++ {
  125. service.GetRedis().Del(tmpList[idx])
  126. }
  127. //1.4.1 role_competition.go
  128. convertRoleCompetitionOldCommonRedis()
  129. //1.5.1 role_daochang100.go
  130. convertRoleDaochang100OldCommonRedis()
  131. //1.6.1 role_guild.go
  132. convertRoleGuildOldCommonRedis()
  133. //1.7.1 role_mail.go
  134. convertRoleMailOldCommonRedis()
  135. //1.8.1 role_map.go
  136. convertRoleMapOldCommonRedis()
  137. //1.10.1 role_rush.go
  138. //宠物盛典 ,技能盛典
  139. convertRoleRushOldCommonRedis()
  140. //1.11.1 role_tower.go
  141. convertRoleTowerOldCommonRedis()
  142. //1.12.1跨服玩法 巅峰爬塔/远航试炼
  143. convertRoleCrossOldRedisCommon()
  144. //战斗记录数据清除
  145. service.GetRedis().Del(model.BattleRecordMapPrefix)
  146. service.GetRedis().Del(model.BattleRecordDetailPrefix)
  147. service.GetRedis().Del(model.BattleRecordDetailCheckPrefix)
  148. //卡片收集rank清除
  149. service.GetRedis().Del(model.CardCollectRankPrefix)
  150. //信物收集
  151. service.GetRedis().Del(model.KeepSakeCollectRankPrefix)
  152. //推图排行榜和历史最大战力排行榜(aof启动后会自动合并zset中的排行榜数据)
  153. ////2.导入数据到新redis数据库中
  154. //开启aof
  155. service.GetRedis().ConfigSet("appendonly", "yes")
  156. //service.GetRedis().ConfigSet("aof-use-rdb-preamble", "no")
  157. service.GetRedis().BgSave()
  158. service.GetRedis().BgRewriteAOF()
  159. }
  160. func getUidListFromRedis() []uint64 {
  161. var uidList []uint64
  162. tmpUidList, err := service.GetRedis().Keys("account_*").Result()
  163. if err != nil {
  164. return uidList
  165. }
  166. for idx := 0; idx < len(tmpUidList); idx++ {
  167. tmpMsg := &serverproto.SSAccountGetRoleListAck{}
  168. err := model.GetMessageFromRedis(tmpUidList[idx], "", tmpMsg)
  169. if err != nil || len(tmpMsg.Roles) <= 0 {
  170. util.ErrorF("account=%v getUidListFromRedis err=%v", tmpUidList[idx], err)
  171. continue
  172. }
  173. uidList = append(uidList, tmpMsg.Roles[0].Uid)
  174. }
  175. return uidList
  176. }
  177. // role_activity.go
  178. func convertActivityOldRedis(typeServerActsList set.Interface, uid uint64) {
  179. uidStr := strconv.FormatUint(uid, 10)
  180. tmpRoleActivity := &serverproto.RoleActivity{}
  181. err := model2.GetSystemDataFromRedis(model2.RoleActivityDataSignPrefix, uid, tmpRoleActivity)
  182. if err != nil && err != service.NIL {
  183. util.ErrorF("uid=%v [convertActivityOldRedis] Get RoleActivitySign err=%v", uid, err)
  184. return
  185. }
  186. //1.过期列表中保留着以往开过的所有过期活动 ->清除根据开服时间的活动id
  187. var tmpExpiredActivityList []int32
  188. for idx := 0; idx < len(tmpRoleActivity.ExpiredActivityList); idx++ {
  189. expiredActivityId := tmpRoleActivity.ExpiredActivityList[idx]
  190. if !typeServerActsList.Has(expiredActivityId) {
  191. tmpExpiredActivityList = append(tmpExpiredActivityList, expiredActivityId)
  192. continue
  193. }
  194. activityIdStr := strconv.Itoa(int(expiredActivityId))
  195. tmpKeyStr := model2.RoleActivityDataPrefix + uidStr + ":" + activityIdStr
  196. service.GetRedis().Del(tmpKeyStr)
  197. }
  198. //2.已经开启的列表中清除根据开服时间的id
  199. retList := service.GetRedis().SMembers(model2.RoleActivityDataOpenListPrefix + uidStr).Val()
  200. for idx := 0; idx < len(retList); idx++ {
  201. openActivityId, _ := strconv.Atoi(retList[idx])
  202. if openActivityId <= 0 {
  203. service.GetRedis().SRem(model2.RoleActivityDataOpenListPrefix+uidStr, retList[idx])
  204. continue
  205. }
  206. if typeServerActsList.Has(int32(openActivityId)) {
  207. service.GetRedis().SRem(model2.RoleActivityDataOpenListPrefix+uidStr, retList[idx])
  208. tmpKeyStr := model2.RoleActivityDataPrefix + uidStr + ":" + retList[idx]
  209. service.GetRedis().Del(tmpKeyStr)
  210. }
  211. }
  212. //3.签到数据重置
  213. tmpRoleActivity.SignInfo = &serverproto.SignUp{
  214. SignRound: 1,
  215. CurDay: 0,
  216. CurSignInfo: &serverproto.CurRoundSign{
  217. LastSign: 0,
  218. },
  219. }
  220. //重新保存
  221. tmpRoleActivity.ExpiredActivityList = tmpExpiredActivityList
  222. err = model2.SetSystemDataToRedis(model2.RoleActivityDataSignPrefix, uid, tmpRoleActivity)
  223. if err != nil {
  224. util.ErrorF("uid=%v [convertActivityOldRedis] save err=%v", uid, err)
  225. }
  226. }
  227. // roleanera
  228. func convertArenaOldRedis(uid uint64) {
  229. //uidStr := strconv.FormatUint(uid, 10)
  230. //1.竞技场赛季个人数据重置
  231. tmpRoleArena := &serverproto.RoleArena{}
  232. err := model2.GetSystemDataFromRedis(model2.RoleArenaDataPrefix, uid, tmpRoleArena)
  233. if err != nil && err != service.NIL {
  234. util.ErrorF("uid=%v [convertArenaOldRedis] Get RoleArena err=%v", uid, err)
  235. return
  236. }
  237. if tmpRoleArena.Arena == nil {
  238. return
  239. }
  240. //重置剩余挑战次数/剩余购买次数
  241. tmpRoleArena.Arena.ChallengeCount = model.GlobalDaoChangChallengeCount
  242. tmpRoleArena.Arena.BuyCount = model.GlobalDaoChangByCount
  243. //重置段位/积分
  244. tmpRoleArena.Arena.ArenaSeasonId = 0
  245. tmpRoleArena.Arena.LastArenaSeasonTime = 0
  246. tmpRoleArena.Arena.RecordWinCount = 0
  247. tmpRoleArena.Arena.RecordTotalCount = 0
  248. tmpRoleArena.Arena.ArenaSeasonIdReduce = 0
  249. tmpRoleArena.Arena.Score = 0
  250. tmpRoleArena.Arena.OldScore = 0
  251. tmpRoleArena.Arena.RushArena = nil
  252. err = model2.SetSystemDataToRedis(model2.RoleArenaDataPrefix, uid, tmpRoleArena)
  253. if err != nil {
  254. util.ErrorF("uid=%v [convertArenaOldRedis] Set RoleArena err=%v", uid, err)
  255. }
  256. }
  257. func convertArenaOldCommonRedis() {
  258. //2.匹配数据处理
  259. //英灵殿积分排行榜,只用来match使用
  260. service.GetRedis().Del(model.ArenaRankMatchPrefix)
  261. //3.积分排行榜清除
  262. service.GetRedis().Del(model.ArenaRankPrefix)
  263. service.GetRedis().Del(model.ArenaPreRankPrefix)
  264. service.GetRedis().Del(model.ArenaTopRankPrefix)
  265. tmpTopList, _ := service.GetRedis().Keys(model.ArenaTopRankPrefix + "*").Result()
  266. for idx := 0; idx < len(tmpTopList); idx++ {
  267. if tmpTopList[idx] != model.ArenaTopRankPrefix {
  268. service.GetRedis().Del(tmpTopList[idx])
  269. }
  270. }
  271. //4.冲榜相关处理
  272. service.GetRedis().Del(model.RushArenaRankPrefix) //冲榜相关
  273. tmpTopList, _ = service.GetRedis().Keys(model.RushArenaRankPrefix + "*").Result()
  274. for idx := 0; idx < len(tmpTopList); idx++ {
  275. service.GetRedis().Del(tmpTopList[idx])
  276. }
  277. service.GetRedis().Del(model.RushArenaPrefix) //最终排行
  278. }
  279. // rolebattle
  280. func convertRoleBattleOldRedis(uid uint64) {
  281. //uidStr := strconv.FormatUint(uid, 10)
  282. tmpRoleBattle := &serverproto.RoleBattle{}
  283. err := model2.GetSystemDataFromRedis(model2.RoleBattleDataPrefix, uid, tmpRoleBattle)
  284. if err != nil && err != service.NIL {
  285. util.ErrorF("uid=%v [convertRoleBattleOldRedis] Get RoleBattle err=%v", uid, err)
  286. return
  287. }
  288. //1.时光之力
  289. if tmpRoleBattle.QuickBattle != nil {
  290. tmpRoleBattle.QuickBattle.DayTimes = 0
  291. }
  292. //2.远征之门积分排行榜 共用数据部分
  293. //service.GetRedis().Del(model.ExpeditionScoreRankPrefix)
  294. //3.推图冲榜(冒险盛典)
  295. tmpRoleBattle.RushMap = &serverproto.RushMap{}
  296. err = model2.SetSystemDataToRedis(model2.RoleBattleDataPrefix, uid, tmpRoleBattle)
  297. if err != nil {
  298. util.ErrorF("uid=%v [convertRoleBattleOldRedis] save err=%v", uid, err)
  299. }
  300. }
  301. // rolecompetition
  302. func convertRoleCompetitionOldRedis(uid uint64) {
  303. uidStr := strconv.FormatUint(uid, 10)
  304. service.GetRedis().Del(model2.RoleCompetitionDataPrefix + uidStr)
  305. //1.招募季,地图排行榜(需要清空地图排行榜)
  306. //夺宝数据清空(在道场数据中)
  307. }
  308. func convertRoleCompetitionOldCommonRedis() {
  309. //历史进行到的赛季数据伤处
  310. service.GetRedis().Del(model.ServerCompetitionPrefix)
  311. //1.招募季赛季信息删除
  312. service.GetRedis().Del(model.CompetitionMapRankPrefix)
  313. tmpList, _ := service.GetRedis().Keys(model.CompetitionMapRankPrefix + "*").Result()
  314. for idx := 0; idx < len(tmpList); idx++ {
  315. service.GetRedis().Del(tmpList[idx])
  316. }
  317. //2.选拔季
  318. service.GetRedis().Del(model.CompetitionScoreRankPrefix)
  319. tmpList, _ = service.GetRedis().Keys(model.CompetitionScoreRankPrefix + "*").Result()
  320. for idx := 0; idx < len(tmpList); idx++ {
  321. service.GetRedis().Del(tmpList[idx])
  322. }
  323. //3.夺宝赛季:道场轮盘/活动转盘
  324. service.GetRedis().Del(model.CompetitionDuoBaoScoreRankPrefix)
  325. tmpList, _ = service.GetRedis().Keys(model.CompetitionDuoBaoScoreRankPrefix + "*").Result()
  326. for idx := 0; idx < len(tmpList); idx++ {
  327. service.GetRedis().Del(tmpList[idx])
  328. }
  329. //大奖日志数据
  330. service.GetRedis().Del(model.RoleDaoChang100WheeLogPrefix)
  331. //4.占星数据
  332. service.GetRedis().Del(model.CompetitionZhanBuScoreRankPrefix)
  333. tmpList, _ = service.GetRedis().Keys(model.CompetitionZhanBuScoreRankPrefix + "*").Result()
  334. for idx := 0; idx < len(tmpList); idx++ {
  335. service.GetRedis().Del(tmpList[idx])
  336. }
  337. //4.偶像季数据
  338. service.GetRedis().Del(model.CompetitionIdolScoreRankPrefix)
  339. tmpList, _ = service.GetRedis().Keys(model.CompetitionIdolScoreRankPrefix + "*").Result()
  340. for idx := 0; idx < len(tmpList); idx++ {
  341. service.GetRedis().Del(tmpList[idx])
  342. }
  343. }
  344. // roleguild
  345. func convertRoleGuildOldRedis(uid uint64) {
  346. //serverproto.SSGuildBossRefreshNtf
  347. //公会个人数据清楚
  348. tmpRoleGuild := &serverproto.RoleGuild{}
  349. err := model2.GetSystemDataFromRedis(model2.RoleGuildDataPrefix, uid, tmpRoleGuild)
  350. if err != nil && err != service.NIL {
  351. util.InfoF("uid=%v [convertRolegGuildOldRedis] err%v", uid, err)
  352. return
  353. }
  354. tmpRoleGuild.BossFight = tmpRoleGuild.BossFight[:0]
  355. tmpRoleGuild.GuildBattle = nil
  356. tmpRoleGuild.DemonInfo = nil
  357. tmpRoleGuild.EliteBossCd = 0
  358. err = model2.SetSystemDataToRedis(model2.RoleGuildDataPrefix, uid, tmpRoleGuild)
  359. if err != nil {
  360. util.ErrorF("uid=%v [convertRolegGuildOldRedis] err=%v", uid, err)
  361. }
  362. }
  363. func convertRoleGuildOldCommonRedis() {
  364. //1.公会狩猎-公会boss数据
  365. service.GetRedis().Del(model.GuildBossPrefix)
  366. tmpList, _ := service.GetRedis().Keys(model.GuildBossPrefix + "*").Result()
  367. //重新初始化公会狩猎boss
  368. for idx := 0; idx < len(tmpList); idx++ {
  369. for _, data := range serverproto.GuildBossCfgLoader {
  370. bossInfo := &serverproto.GuildBossInfo{}
  371. if data.BossType == model7.Guild_Boss_Type_Normal {
  372. nowTime := util.GetCurrentTimeNow()
  373. if nowTime.Hour() == 4 {
  374. bossInfo.BossState = model7.Guild_Boss_State_Wait_Summon
  375. } else {
  376. bossInfo.BossState = model7.Guild_Boss_State_Fight
  377. }
  378. bossInfo.RefreshTime = uint64(util.GetCurrentTime())
  379. bossInfo.MaxDam = &serverproto.GuildFight{}
  380. } else if data.BossType == model7.Guild_Boss_Type_Elite {
  381. bossInfo.BossState = model7.Guild_Boss_State_Wait_Summon
  382. }
  383. fieldStr := strconv.FormatUint(uint64(data.Id), 10)
  384. err, msgStr := model.GetEncodeMessage(bossInfo)
  385. if err == nil {
  386. ret, err := service.GetRedis().HSet(tmpList[idx], fieldStr, msgStr).Result()
  387. if err != nil {
  388. util.InfoF("[SaveGuildBoss] err:%v %v", err, ret)
  389. return
  390. }
  391. }
  392. }
  393. //service.GetRedis().Del(tmpList[idx])
  394. }
  395. //2.公会魔王
  396. service.GetRedis().Del(model.GuildDemonPrefix)
  397. service.GetRedis().Del(model.GuildDemonRewardPrefix)
  398. tmpList, _ = service.GetRedis().Keys(model.GuildDemonRewardPrefix + "*").Result()
  399. for idx := 0; idx < len(tmpList); idx++ {
  400. service.GetRedis().Del(tmpList[idx])
  401. }
  402. service.GetRedis().Del(model.GuildDemonGuildPrefix)
  403. service.GetRedis().Del(model.GuildDemonMVPPrefix)
  404. //3.公会战排行榜(百人道场积分排行榜)
  405. //已经在百人道场中清除RoleDaoChang100GuildRankPrefix
  406. //4.公会战
  407. service.GetRedis().Del(model7.GuildBattlePrefix)
  408. tmpList, _ = service.GetRedis().Keys(model7.GuildBattlePrefix + "*").Result()
  409. for idx := 0; idx < len(tmpList); idx++ {
  410. service.GetRedis().Del(tmpList[idx])
  411. }
  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. */