Commit 2820ba2093c7a43319f0a65fd31de4d78e1dd0fa

Authored by zhangqijia
2 parents e2e205be b2afd512

Merge remote-tracking branch 'origin/cn/develop' into cn/develop

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
@@ -1604,4 +1604,27 @@ function _M.runeBuyRpc(agent, data) @@ -1604,4 +1604,27 @@ function _M.runeBuyRpc(agent, data)
1604 return true 1604 return true
1605 end 1605 end
1606 1606
  1607 +function _M.setFriendTeamRpc(agent, data)
  1608 + local role = agent.role
  1609 + local msg = MsgPack.unpack(data)
  1610 + local team = msg.team
  1611 + local info = {}
  1612 + info.team = role:getTeamHerosInfo(team)
  1613 + info.bInfo = role:getTeamBattleInfo(team)
  1614 + info.v = role:getTeamBattleValue(team.heros)
  1615 + role:updateProperty({field="friendTeam", value=info})
  1616 +
  1617 + SendPacket(actionCodes.Role_setFriendTeamRpc, "")
  1618 + return true
  1619 +end
  1620 +
  1621 +function _M.setBgRpc(agent, data)
  1622 + local role = agent.role
  1623 + local msg = MsgPack.unpack(data)
  1624 + role:updateProperty({field="bgId", value=msg.id})
  1625 +
  1626 + SendPacket(actionCodes.Role_setBgRpc, "")
  1627 + return true
  1628 +end
  1629 +
1607 return _M 1630 return _M
1608 \ No newline at end of file 1631 \ 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
@@ -206,6 +207,10 @@ Role.schema = { @@ -206,6 +207,10 @@ Role.schema = {
206 roleIncre = {"table", {}}, -- 角色英雄,铭文,火花自增序列 {heroId = 1, runeId = 1, sparkId = 1} 207 roleIncre = {"table", {}}, -- 角色英雄,铭文,火花自增序列 {heroId = 1, runeId = 1, sparkId = 1}
207 208
208 unlockChap = {"table", {}}, -- 解锁的章节 209 unlockChap = {"table", {}}, -- 解锁的章节
  210 +
  211 + heroCnt = {"number", 0}, -- 英雄数量
  212 + friendTeam = {"table", {}}, -- 好友切磋队伍信息 {bInfo = {}, team = {}, v = 0}
  213 + bgId = {"number", 0}, -- 看板娘id
209 } 214 }
210 215
211 216
@@ -446,6 +451,8 @@ function Role:data() @@ -446,6 +451,8 @@ function Role:data()
446 returner = self:getProperty("returner"), 451 returner = self:getProperty("returner"),
447 452
448 unlockChap = self:getProperty("unlockChap"), -- 解锁的章节 453 unlockChap = self:getProperty("unlockChap"), -- 解锁的章节
  454 + friendTeam = self:getProperty("friendTeam"),
  455 + bgId = self:getProperty("bgId"),
449 } 456 }
450 end 457 end
451 458
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
@@ -604,6 +604,7 @@ function RolePlugin.bind(Role) @@ -604,6 +604,7 @@ function RolePlugin.bind(Role)
604 SendPacket(actionCodes.Hero_loadInfos, bin) 604 SendPacket(actionCodes.Hero_loadInfos, bin)
605 end 605 end
606 606
  607 + self:updateProperty({field = "heroCnt", value = #self.heros})
607 self:logItems(heroType + ItemStartId.Hero, 0, 1, params.log) 608 self:logItems(heroType + ItemStartId.Hero, 0, 1, params.log)
608 609
609 if params.log then 610 if params.log then
@@ -1930,10 +1931,15 @@ function RolePlugin.bind(Role) @@ -1930,10 +1931,15 @@ function RolePlugin.bind(Role)
1930 function Role:onRecoverTimer(now) 1931 function Role:onRecoverTimer(now)
1931 self:updateTimeReset(now, true) 1932 self:updateTimeReset(now, true)
1932 self:checkNewEvent(now) 1933 self:checkNewEvent(now)
1933 - self:saveRoleData() 1934 + self:saveRoleData(now)
1934 end 1935 end
1935 1936
1936 - function Role:saveRoleData() 1937 + local SAVE_DATA_INTERVAL = 3
  1938 + function Role:saveRoleData(now)
  1939 + if now - self._lastSaveTs < SAVE_DATA_INTERVAL then
  1940 + return
  1941 + end
  1942 + self._lastSaveTs = now
1937 self:update() 1943 self:update()
1938 local objs = {self.activity, self.dailyData, self.dinerData, self.storeData, self.roleIncre} 1944 local objs = {self.activity, self.dailyData, self.dinerData, self.storeData, self.roleIncre}
1939 for _, info in ipairs(objs) do 1945 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)