Commit e9bfa7a2819114b91443ea2bbc63d5f2b9d1f30d

Authored by liuzujun
1 parent ae0d3358

其他玩家展示界面数据支持, 更新sql版本管理

src/ProtocolCode.lua
@@ -56,6 +56,8 @@ actionCodes = { @@ -56,6 +56,8 @@ actionCodes = {
56 Role_diamondConvertRpc = 140, -- 钻石兑换成别的物品 56 Role_diamondConvertRpc = 140, -- 钻石兑换成别的物品
57 Role_getTimeGiftRpc = 141, 57 Role_getTimeGiftRpc = 141,
58 Role_runeBuyRpc = 142, -- 铭文购买 58 Role_runeBuyRpc = 142, -- 铭文购买
  59 + Role_setFriendTeamRpc = 143, -- 设置好友切磋队伍
  60 + Role_setBgRpc = 144, -- 设置看板娘
59 61
60 Adv_startAdvRpc = 151, 62 Adv_startAdvRpc = 151,
61 Adv_startHangRpc = 152, 63 Adv_startHangRpc = 152,
src/actions/EmailAction.lua
@@ -14,19 +14,25 @@ local function loadEmails(roleId) @@ -14,19 +14,25 @@ local function loadEmails(roleId)
14 end 14 end
15 15
16 local function delExpireEmails(roleId) 16 local function delExpireEmails(roleId)
17 - local sql = [[  
18 - DELETE FROM Email  
19 - WHERE id IN (  
20 - SELECT id FROM (  
21 - SELECT id  
22 - FROM Email WHERE roleId=%s  
23 - ORDER BY createtime DESC, id desc  
24 - LIMIT %s, 100000  
25 - ) a  
26 - );  
27 - ]] 17 + --local sql = [[
  18 + -- DELETE FROM Email
  19 + -- WHERE id IN (
  20 + -- SELECT id FROM (
  21 + -- SELECT id
  22 + -- FROM Email WHERE roleId=%s
  23 + -- ORDER BY createtime DESC, id desc
  24 + -- LIMIT %s, 100000
  25 + -- ) a
  26 + -- );
  27 + --]]
  28 + local sql = "SELECT id FROM Email WHERE roleId=%s ORDER BY createtime DESC, id desc LIMIT %s, 100000"
28 sql = string.format(sql, roleId, EMAIL_LIMIT) 29 sql = string.format(sql, roleId, EMAIL_LIMIT)
29 - mysqlproxy:query(sql) 30 + local res = mysqlproxy:query(sql)
  31 + local tmp = {}
  32 + for _, v in ipairs(res) do
  33 + table.insert(tmp, v.id)
  34 + end
  35 + mysqlproxy:query(string.format("DELETE FROM Email WHERE id IN (%s)", table.concat(tmp, ",")))
30 end 36 end
31 37
32 function _M.listRpc(agent, data) 38 function _M.listRpc(agent, data)
src/actions/RoleAction.lua
@@ -1583,4 +1583,27 @@ function _M.runeBuyRpc(agent, data) @@ -1583,4 +1583,27 @@ function _M.runeBuyRpc(agent, data)
1583 return true 1583 return true
1584 end 1584 end
1585 1585
  1586 +function _M.setFriendTeamRpc(agent, data)
  1587 + local role = agent.role
  1588 + local msg = MsgPack.unpack(data)
  1589 + local team = msg.team
  1590 + local info = {}
  1591 + info.team = role:getTeamHerosInfo(team)
  1592 + info.bInfo = role:getTeamBattleInfo(team)
  1593 + info.v = role:getTeamBattleValue(team.heros)
  1594 + role:updateProperty({field="friendTeam", value=info})
  1595 +
  1596 + SendPacket(actionCodes.Role_setFriendTeamRpc, "")
  1597 + return true
  1598 +end
  1599 +
  1600 +function _M.setBgRpc(agent, data)
  1601 + local role = agent.role
  1602 + local msg = MsgPack.unpack(data)
  1603 + role:updateProperty({field="bgId", value=msg.id})
  1604 +
  1605 + SendPacket(actionCodes.Role_setBgRpc, "")
  1606 + return true
  1607 +end
  1608 +
1586 return _M 1609 return _M
1587 \ No newline at end of file 1610 \ No newline at end of file
src/models/Role.lua
@@ -30,6 +30,7 @@ function Role:ctor( properties ) @@ -30,6 +30,7 @@ function Role:ctor( properties )
30 self.advData = nil 30 self.advData = nil
31 self.activity = nil 31 self.activity = nil
32 self._pushToken = nil 32 self._pushToken = nil
  33 + self._lastSaveTs = skynet.timex()
33 self.advElChapter = tonum(redisproxy:hget("adv_season", "chapter"), globalCsv.adv_endless_default_chapter) -- 无尽模式记录的赛季对应章节 34 self.advElChapter = tonum(redisproxy:hget("adv_season", "chapter"), globalCsv.adv_endless_default_chapter) -- 无尽模式记录的赛季对应章节
34 self.advOverTime = tonum(redisproxy:hget("adv_season", "overTime")) -- 无尽模式关闭时间戳 35 self.advOverTime = tonum(redisproxy:hget("adv_season", "overTime")) -- 无尽模式关闭时间戳
35 if self.advOverTime == 0 then 36 if self.advOverTime == 0 then
@@ -205,6 +206,10 @@ Role.schema = { @@ -205,6 +206,10 @@ Role.schema = {
205 roleIncre = {"table", {}}, -- 角色英雄,铭文,火花自增序列 {heroId = 1, runeId = 1, sparkId = 1} 206 roleIncre = {"table", {}}, -- 角色英雄,铭文,火花自增序列 {heroId = 1, runeId = 1, sparkId = 1}
206 207
207 unlockChap = {"table", {}}, -- 解锁的章节 208 unlockChap = {"table", {}}, -- 解锁的章节
  209 +
  210 + heroCnt = {"number", 0}, -- 英雄数量
  211 + friendTeam = {"table", {}}, -- 好友切磋队伍信息 {bInfo = {}, team = {}, v = 0}
  212 + bgId = {"number", 0}, -- 看板娘id
208 } 213 }
209 214
210 215
@@ -444,6 +449,8 @@ function Role:data() @@ -444,6 +449,8 @@ function Role:data()
444 returner = self:getProperty("returner"), 449 returner = self:getProperty("returner"),
445 450
446 unlockChap = self:getProperty("unlockChap"), -- 解锁的章节 451 unlockChap = self:getProperty("unlockChap"), -- 解锁的章节
  452 + friendTeam = self:getProperty("friendTeam"),
  453 + bgId = self:getProperty("bgId"),
447 } 454 }
448 end 455 end
449 456
src/models/RoleCross.lua
@@ -11,7 +11,9 @@ RoleCross.bind = function (Role) @@ -11,7 +11,9 @@ RoleCross.bind = function (Role)
11 level = self:getProperty("level"), 11 level = self:getProperty("level"),
12 headId = self:getProperty("headId"), 12 headId = self:getProperty("headId"),
13 ltime = self:getProperty("ltime"), 13 ltime = self:getProperty("ltime"),
14 - battleV = self:getProperty("pvpTBVC") ~= 0 and self:getProperty("pvpTBVC") or self:getProperty("hangTBV") 14 +
  15 + battleV = self.getProperty("friendTeam").v or 0,
  16 + --battleV = self:getProperty("pvpTBVC") ~= 0 and self:getProperty("pvpTBVC") or self:getProperty("hangTBV")
15 } 17 }
16 return info 18 return info
17 end 19 end
@@ -19,8 +21,13 @@ RoleCross.bind = function (Role) @@ -19,8 +21,13 @@ RoleCross.bind = function (Role)
19 -- 好友详细队伍信息 21 -- 好友详细队伍信息
20 function Role:friendInfo() 22 function Role:friendInfo()
21 local info = self:friendSInfo() 23 local info = self:friendSInfo()
22 - local team = self:getProperty("pvpTBVC") ~= 0 and self:getProperty("pvpTSC") or self:getProperty("hangTS")  
23 - info.team = team 24 + --local team = self:getProperty("pvpTBVC") ~= 0 and self:getProperty("pvpTSC") or self:getProperty("hangTS")
  25 + --info.team = team
  26 + info.team = self:getProperty("friendTeam").team or {}
  27 + info.heroCnt = self:getProperty("heroCnt")
  28 + info.achieveCnt = table.numbers(self:getProperty("achiveV"))
  29 + info.bgId = self:getProperty("bgId")
  30 + info.hangPass = self:getProperty("hangPass")
24 return info 31 return info
25 end 32 end
26 33
@@ -274,31 +281,42 @@ function CMD.getProperties(roleId, fields) @@ -274,31 +281,42 @@ function CMD.getProperties(roleId, fields)
274 end 281 end
275 282
276 function CMD.friendSInfo(roleId) 283 function CMD.friendSInfo(roleId)
277 - local info = CMD.getProperties(roleId, {"name", "level", "headId", "ltime", "pvpTBVC", "hangTBV"}) 284 + --local info = CMD.getProperties(roleId, {"name", "level", "headId", "ltime", "pvpTBVC", "hangTBV"})
  285 + local info = CMD.getProperties(roleId, {"name", "level", "headId", "ltime", "friendTeam"})
278 return { 286 return {
279 name = info.name, 287 name = info.name,
280 level = info.level, 288 level = info.level,
281 headId = info.headId, 289 headId = info.headId,
282 ltime = info.ltime, 290 ltime = info.ltime,
283 - battleV = info.pvpTBVC ~= 0 and info.pvpTBVC or info.hangTBV, 291 + --battleV = info.pvpTBVC ~= 0 and info.pvpTBVC or info.hangTBV,
  292 + battleV = info.friendTeam.v or 0,
284 } 293 }
285 end 294 end
286 295
287 function CMD.friendInfo(roleId) 296 function CMD.friendInfo(roleId)
288 - local info = CMD.getProperties(roleId, {"name", "level", "headId", "ltime", "pvpTBVC", "hangTBV", "pvpTSC", "hangTS"}) 297 + --local info = CMD.getProperties(roleId, {"name", "level", "headId", "ltime", "pvpTBVC", "hangTBV", "pvpTSC", "hangTS"})
  298 + local info = CMD.getProperties(roleId, {"name", "level", "headId", "ltime", "friendTeam", "heroCnt", "achiveV", "bgId", "hangPass"})
289 return { 299 return {
290 name = info.name, 300 name = info.name,
291 level = info.level, 301 level = info.level,
292 headId = info.headId, 302 headId = info.headId,
293 ltime = info.ltime, 303 ltime = info.ltime,
294 - battleV = info.pvpTBVC ~= 0 and info.pvpTBVC or info.hangTBV,  
295 - team = info.pvpTBVC ~= 0 and info.pvpTSC or info.hangTS 304 + --battleV = info.pvpTBVC ~= 0 and info.pvpTBVC or info.hangTBV,
  305 + --team = info.pvpTBVC ~= 0 and info.pvpTSC or info.hangTS
  306 + battleV = info.friendTeam.v or 0,
  307 + team = info.friendTeam.team or {},
  308 + heroCnt = info.heroCnt,
  309 + achieveCnt = table.numbers(info.achiveV),
  310 + bgId = info.bgId,
  311 + hangPass = info.hangPass,
296 } 312 }
297 end 313 end
298 314
299 function CMD.friendBattleInfo(roleId) 315 function CMD.friendBattleInfo(roleId)
300 - local info = CMD.getProperties(roleId, {"pvpTBC", "hangTB"})  
301 - return (next(info.pvpTBC) and next(info.pvpTBC.heros)) and info.pvpTBC or info.hangTB 316 + --local info = CMD.getProperties(roleId, {"pvpTBC", "hangTB"})
  317 + local info = CMD.getProperties(roleId, {"friendTeam"})
  318 + --return (next(info.pvpTBC) and next(info.pvpTBC.heros)) and info.pvpTBC or info.hangTB
  319 + return info.friendTeam.bInfo or {}
302 end 320 end
303 321
304 function CMD.pvpCInfo(roleId) 322 function CMD.pvpCInfo(roleId)
src/models/RolePlugin.lua
@@ -603,6 +603,7 @@ function RolePlugin.bind(Role) @@ -603,6 +603,7 @@ function RolePlugin.bind(Role)
603 SendPacket(actionCodes.Hero_loadInfos, bin) 603 SendPacket(actionCodes.Hero_loadInfos, bin)
604 end 604 end
605 605
  606 + self:updateProperty({field = "heroCnt", value = #self.heros})
606 self:logItems(heroType + ItemStartId.Hero, 0, 1, params.log) 607 self:logItems(heroType + ItemStartId.Hero, 0, 1, params.log)
607 608
608 if params.log then 609 if params.log then
@@ -1929,10 +1930,15 @@ function RolePlugin.bind(Role) @@ -1929,10 +1930,15 @@ function RolePlugin.bind(Role)
1929 function Role:onRecoverTimer(now) 1930 function Role:onRecoverTimer(now)
1930 self:updateTimeReset(now, true) 1931 self:updateTimeReset(now, true)
1931 self:checkNewEvent(now) 1932 self:checkNewEvent(now)
1932 - self:saveRoleData() 1933 + self:saveRoleData(now)
1933 end 1934 end
1934 1935
1935 - function Role:saveRoleData() 1936 + local SAVE_DATA_INTERVAL = 3
  1937 + function Role:saveRoleData(now)
  1938 + if now - self._lastSaveTs < SAVE_DATA_INTERVAL then
  1939 + return
  1940 + end
  1941 + self._lastSaveTs = now
1936 self:update() 1942 self:update()
1937 local objs = {self.activity, self.dailyData, self.dinerData, self.storeData, self.roleIncre} 1943 local objs = {self.activity, self.dailyData, self.dinerData, self.storeData, self.roleIncre}
1938 for _, info in ipairs(objs) do 1944 for _, info in ipairs(objs) do
src/services/dbseed.lua
@@ -100,6 +100,9 @@ local function initAutoIncreUidTable() @@ -100,6 +100,9 @@ local function initAutoIncreUidTable()
100 mysqlproxy:query(string.format(tpl, "seaportTime0", 0)) 100 mysqlproxy:query(string.format(tpl, "seaportTime0", 0))
101 mysqlproxy:query(string.format(tpl, "seaportTime1", 0)) 101 mysqlproxy:query(string.format(tpl, "seaportTime1", 0))
102 mysqlproxy:query(string.format(tpl, "seaportTime2", 0)) 102 mysqlproxy:query(string.format(tpl, "seaportTime2", 0))
  103 +
  104 + -- 记录当前更新版本
  105 + mysqlproxy:query(string.format(tpl, "db_ver", 0))
103 end 106 end
104 end 107 end
105 108
@@ -255,6 +258,31 @@ local function selectDb() @@ -255,6 +258,31 @@ local function selectDb()
255 end 258 end
256 end 259 end
257 260
  261 +local function doUpdateSql()
  262 + local updates = {
  263 + [1] = {
  264 + "ALTER TABLE `Email` ADD INDEX roleid_createtime_id(`roleId`,`createtime`,`id`),DROP INDEX roleId_Index",
  265 + "ALTER TABLE `Role` ADD INDEX uid_Index(`uid`)",
  266 + },
  267 + }
  268 + -- 更新记录表
  269 + local res = mysqlproxy:query("SELECT `value` FROM `autoincrement_set` WHERE `key` = 'db_ver';")
  270 + local ver = res[1].value
  271 + for k, sqls in ipairs(updates) do
  272 + if ver < k then
  273 + skynet.error("do update sql, version:"..k)
  274 + for _, sql in ipairs(sqls) do
  275 + local r = mysqlproxy:query(sql)
  276 + if r["errno"] then
  277 + skynet.error(string.format("%s, err:%s",sql, r["err"]))
  278 + return
  279 + end
  280 + end
  281 + mysqlproxy:query(string.format("UPDATE `autoincrement_set` SET `value` = %d WHERE `key` = 'db_ver';", k))
  282 + end
  283 + end
  284 +end
  285 +
258 skynet.start(function () 286 skynet.start(function ()
259 --local new = redisproxy:hsetnx("autoincrement_set", "server_start", os.date("%Y%m%d", skynet.timex())) == 1 287 --local new = redisproxy:hsetnx("autoincrement_set", "server_start", os.date("%Y%m%d", skynet.timex())) == 1
260 --if not new then 288 --if not new then
@@ -273,6 +301,7 @@ skynet.start(function () @@ -273,6 +301,7 @@ skynet.start(function ()
273 initRedisDb() 301 initRedisDb()
274 initSeaportTask() -- 海港任务数据初始化 302 initSeaportTask() -- 海港任务数据初始化
275 loadAllUserInfo() 303 loadAllUserInfo()
  304 + doUpdateSql() -- 执行更新sql
276 selectDb() 305 selectDb()
277 skynet.exit() 306 skynet.exit()
278 end) 307 end)
279 \ No newline at end of file 308 \ No newline at end of file
src/utils/MysqlUtil.lua
@@ -34,7 +34,6 @@ function addFriend(roleId, friendId) @@ -34,7 +34,6 @@ function addFriend(roleId, friendId)
34 rpcRole(roleId, "addFriend", friendId) 34 rpcRole(roleId, "addFriend", friendId)
35 rpcRole(friendId, "addFriend", roleId) 35 rpcRole(friendId, "addFriend", roleId)
36 end 36 end
37 - dump(r)  
38 end 37 end
39 38
40 function delFriend(roleId, friendId) 39 function delFriend(roleId, friendId)
@@ -44,7 +43,6 @@ function delFriend(roleId, friendId) @@ -44,7 +43,6 @@ function delFriend(roleId, friendId)
44 rpcRole(roleId, "delFriend", friendId) 43 rpcRole(roleId, "delFriend", friendId)
45 rpcRole(friendId, "delFriend", roleId) 44 rpcRole(friendId, "delFriend", roleId)
46 end 45 end
47 - dump(r)  
48 end 46 end
49 47
50 function roleExists(roleId) 48 function roleExists(roleId)