CommonDB.lua 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355
  1. local DB = require("common.DB")
  2. local LuaMongo = _G.lua_mongo
  3. local Config = require("Config")
  4. local Util = require("common.Util")
  5. local ObjHuman = require("core.ObjHuman")
  6. local YunYingLogic = require("yunying.YunYingLogic")
  7. local OpenAct = require("present.OpenAct")
  8. local DBUpdate = {_id=nil} -- 更新
  9. local DBUpdateField = {} -- 更新域
  10. KEY_SERVER_START_TIME = "serverStartTime" -- 开服时间
  11. KEY_IDENTITY_MAX = "identityMax" -- 自增的最大的数字 从1开始
  12. KEY_UNION_IDENTITY_MAX = "unionIdentityMax" -- 自增的最大的数字 从1开始
  13. KEY_REWARD_INDEX = "rewardIndex" -- 好友排行榜奖励索引rewardIndex
  14. KEY_BAN_IP = "banIp" -- 被禁IP
  15. KEY_CHONGJI_ACT = "chongJiAct" -- 全服冲级活动 领取情况
  16. KEY_ACT_MONTH = "actMonth" -- 当前计算的真实月份
  17. KEY_UNION_WAR = "unionWar" -- 公会战
  18. KEY_ACT_MONTH_LIST = "actMonthList" -- 现实活动
  19. KEY_RESET_TIME = "resetTime"
  20. KEY_DRILL = "drill" -- 过关斩将信息(本期开始时间等)
  21. KEY_SHARE_PLATFORM_BOARD = "sharePlatformBoard" -- 分享排行
  22. KEY_BILLBOARD_AIM = "billboardAim" -- 排行榜达标记录
  23. KEY_JJC_LADDER = "jjcLadder" -- 天梯争霸信息
  24. KEY_VALLEY = "valley" -- 荣耀峡谷信息
  25. KEY_LIANYU = "lianyu" -- 绝望深渊信息
  26. KEY_MIDDLE_INFO = "middleInfo" -- 跨服链接信息
  27. KEY_CHAMPION_END_TIME = "championEndTime" -- 冠军竞技场本赛季结束时间
  28. KEY_DRAGON_NEST_CITIAO = "dragonNestCiTiao" -- 冰龙巢穴词条
  29. KEY_WORK_MAN = "workMan" -- 打工人活动
  30. KEY_OPEN_SERVER_TOPUP_TOP = "openServerTopupTop" -- 开服充值排名活动
  31. KEY_CIYUAN_MOZHU = "ciyuanMoZhu" -- 次元魔蛛
  32. KEY_YJ_TIME = "yjTreasureTime" -- 遗迹探险时间
  33. KEY_CDK_BATCH = "cdkBatchIdx" -- CDK批次序号
  34. db = db or {
  35. serverStartTime = nil, -- 开服时间
  36. zhuanpanRecord = nil, -- 转盘中奖记录
  37. identityMax = nil, -- 自增的最大的数字 从1开始
  38. rewardIndex = nil, -- 好友排行榜奖励索引rewardIndex
  39. unionIdentityMax = nil, -- 自增的最大的数字 从1开始
  40. mergeSvrIndex = nil, -- 合服之后对应的服务器索引 比如如果10001,10003,100004合服了 这里的数据结构是{10001,10003,10004}
  41. banIp = {}, -- 被禁IP
  42. chongJiAct = {}, -- 全服冲级活动 领取情况
  43. actMonth = nil, -- 当前计算的真实月份
  44. unionWarState = nil, -- 当前工会战状态
  45. actMonthList = nil, -- 现实活动
  46. resetTime = nil, -- 确认是否重置数据
  47. middleInfo = {}, -- 跨服链接信息
  48. championEndTime = nil, -- 冠军竞技场本赛季结束时间
  49. dragonNestCiTiao = {}, -- 冰龙巢穴词条
  50. workMan = {}, -- 打工人活动
  51. ciyuanMoZhu = nil, -- 次元魔蛛
  52. yjTreasureTime = nil, -- 遗迹探险时间
  53. cdkBatchIdx = nil,
  54. }
  55. function init()
  56. LuaMongo.find(DB.db_common)
  57. if not LuaMongo.next(db) then
  58. LuaMongo.insert(DB.db_common, db)
  59. end
  60. end
  61. -- 修改db单个字段
  62. function updateValue(key, value)
  63. if not key then return end
  64. if not db then return end
  65. if value then
  66. DBUpdateField["$set"] = {[key]=value}
  67. DBUpdateField["$unset"] = nil
  68. else
  69. DBUpdateField["$set"] = nil
  70. DBUpdateField["$unset"] = {[key]=1}
  71. end
  72. DBUpdate._id = db._id
  73. db[key] = value
  74. LuaMongo.update(DB.db_common, DBUpdate, DBUpdateField)
  75. end
  76. function getCDKBatch()
  77. if not db then
  78. return
  79. end
  80. return db[KEY_CDK_BATCH] or 0
  81. end
  82. function setCDKBatch(idx)
  83. idx = idx + 1
  84. updateValue(KEY_CDK_BATCH,idx)
  85. end
  86. function getValueByKey(key)
  87. if not db then return end
  88. return db[key]
  89. end
  90. -- 同步db内容
  91. function reset()
  92. LuaMongo.find(DB.db_common)
  93. if not LuaMongo.next(db) then
  94. db = {banIp = {},}
  95. end
  96. print("db.serverStartTime:",db.serverStartTime)
  97. end
  98. -- 设置开服时间
  99. function setServerOpenTime(time)
  100. db.serverStartTime = time
  101. updateValue(KEY_SERVER_START_TIME, time)
  102. YunYingLogic.onServerOpenTime()
  103. OpenAct.onServerOpenTime()
  104. end
  105. function getServerOpenTime()
  106. if not db.serverStartTime then
  107. local t = Util.getDayStartTime()
  108. setServerOpenTime(t)
  109. end
  110. return db.serverStartTime
  111. end
  112. -- 获得当前是开服第几天(如果是开服第一天返回1)
  113. function getServerOpenDay()
  114. local openTime = getServerOpenTime()
  115. if openTime == 0 then
  116. return
  117. end
  118. local startTime = Util.getDayStartTime(openTime)
  119. local now = os.time()
  120. return math.ceil((now - startTime + 1) / 24 / 3600)
  121. end
  122. function getIdentityMax()
  123. if db.identityMax == nil then
  124. db.identityMax = math.random(10001, 20000)
  125. setIdentityMax(db.identityMax)
  126. elseif db.identityMax < 10001 then
  127. db.identityMax = math.random(10001, 20000) -- 兼容老规则下数据
  128. setIdentityMax(db.identityMax)
  129. end
  130. return db.identityMax
  131. end
  132. -- 虚拟ID,假的
  133. function getFakeIdentityMax()
  134. return math.random(1, 9999)
  135. end
  136. function setIdentityMax(idMax)
  137. updateValue(KEY_IDENTITY_MAX, idMax)
  138. end
  139. function getUnionIdentityMax()
  140. if db.unionIdentityMax == nil then
  141. db.unionIdentityMax = math.random(10001, 20000)
  142. setUnionIdentityMax(db.unionIdentityMax)
  143. elseif db.unionIdentityMax < 10001 then
  144. db.unionIdentityMax = math.random(10001, 20000) -- 兼容老规则下数据
  145. setUnionIdentityMax(db.unionIdentityMax)
  146. end
  147. return db.unionIdentityMax
  148. end
  149. function setUnionIdentityMax(idMax)
  150. updateValue(KEY_UNION_IDENTITY_MAX, idMax)
  151. end
  152. function getRewardIndex()
  153. return db.rewardIndex or 0
  154. end
  155. function setRewardIndex(rewardIndex)
  156. updateValue(KEY_REWARD_INDEX, rewardIndex)
  157. end
  158. function getMergeSvrIndex()
  159. return db.mergeSvrIndex
  160. end
  161. cnt = 1
  162. function setBanIp(ip,time)
  163. db.banIp[cnt] =db.banIp[cnt] or {}
  164. db.banIp[cnt].ip = ip
  165. db.banIp[cnt].time = time
  166. cnt = cnt + 1
  167. updateValue(KEY_BAN_IP, db.banIp)
  168. end
  169. function getBanIp(ip)
  170. for k,v in pairs(db.banIp) do
  171. if v.ip == ip then
  172. return v.ip,v.time
  173. end
  174. end
  175. return
  176. end
  177. function delBanIp(ip)
  178. for k,v in pairs(db.banIp) do
  179. if v.ip == ip then
  180. db.banIp[k] = nil
  181. end
  182. end
  183. updateValue(KEY_BAN_IP, db.banIp)
  184. end
  185. -- 全服创号 冲级活动
  186. function getSvrChongJiGet(id)
  187. local num = 0
  188. if not db.chongJiAct then
  189. return num
  190. end
  191. if db.chongJiAct[id] then
  192. num = db.chongJiAct[id] or 0
  193. end
  194. return num
  195. end
  196. function addSvrChongJiGet(id)
  197. db.chongJiAct = db.chongJiAct or {}
  198. db.chongJiAct[id] = db.chongJiAct[id] or 0
  199. db.chongJiAct[id] = db.chongJiAct[id] + 1
  200. updateValue(KEY_CHONGJI_ACT, db.chongJiAct)
  201. end
  202. function getActMonth()
  203. return db.actMonth or 0
  204. end
  205. function setActMonth(month)
  206. updateValue(KEY_ACT_MONTH, month)
  207. end
  208. function getActMonthList(id)
  209. local act = nil
  210. if not db.actMonthList then
  211. return act
  212. end
  213. if db.actMonthList[id] then
  214. act = db.actMonthList[id] or 0
  215. end
  216. return act
  217. end
  218. function setActMonthList(id, endTime, month)
  219. db.actMonthList = db.actMonthList or {}
  220. db.actMonthList[id] = db.actMonthList[id] or {}
  221. db.actMonthList[id].endTime = endTime
  222. db.actMonthList[id].month = month
  223. updateValue(KEY_ACT_MONTH_LIST, db.actMonthList)
  224. end
  225. function getResetTime()
  226. return db.resetTime or 0
  227. end
  228. function setResetTime(time)
  229. updateValue(KEY_RESET_TIME, time)
  230. end
  231. function getMiddleInfo()
  232. return db.middleInfo
  233. end
  234. function setMiddleInfo(ip, port, host)
  235. db.middleInfo.ip = ip
  236. db.middleInfo.port = port
  237. db.middleInfo.host = host
  238. updateValue(KEY_MIDDLE_INFO, db.middleInfo)
  239. end
  240. function getChampionEndTime()
  241. return db.championEndTime or 0
  242. end
  243. function setChampionEndTime(time)
  244. updateValue(KEY_CHAMPION_END_TIME, time)
  245. end
  246. function getDragonNestCitiao()
  247. return db.dragonNestCiTiao
  248. end
  249. function setDragonNestCitiao(list, time)
  250. db.dragonNestCiTiao.citiao = Util.copyTable(list)
  251. db.dragonNestCiTiao.time = time
  252. updateValue(KEY_DRAGON_NEST_CITIAO, db.dragonNestCiTiao)
  253. end
  254. function setWorkManState(state)
  255. db.workMan.state = state
  256. updateValue(KEY_WORK_MAN, db.workMan)
  257. end
  258. function setWorkManGroup(group)
  259. db.workMan.group = group
  260. updateValue(KEY_WORK_MAN, db.workMan)
  261. end
  262. function setWorkManTs(ts)
  263. db.workMan.time = ts
  264. updateValue(KEY_WORK_MAN, db.workMan)
  265. end
  266. function getWorkMan()
  267. return db.workMan
  268. end
  269. -- 获取合服时间
  270. function getMergeServerTime()
  271. return db.mergeServerTime or 0
  272. end
  273. -- 获得当前是合服第几天(如果是合服第一天返回1)
  274. function getServerMergeDay()
  275. local mergeTime = getMergeServerTime()
  276. if mergeTime == 0 then
  277. return
  278. end
  279. local startTime = Util.getDayStartTime(mergeTime)
  280. local now = os.time()
  281. return math.ceil((now - startTime + 1) / 24 / 3600)
  282. end
  283. function setMergeTime(ts)
  284. db.mergeServerTime = ts
  285. updateValue("mergeServerTime", db.mergeServerTime)
  286. end
  287. function getYjTreasureEndTime()
  288. return db.yjTreasureTime or 0
  289. end
  290. function setYjTreasureEndTime(time)
  291. updateValue(KEY_YJ_TIME, time)
  292. end