Commit e3c5cc5e58c9e9800943607438b817bcc8104802

Authored by zhouhaihai
1 parent 3e6433e1

跨服竞技场over

src/ProtocolCode.lua
@@ -5,8 +5,6 @@ actionCodes = { @@ -5,8 +5,6 @@ actionCodes = {
5 Sys_innerErrorMsg = 4, 5 Sys_innerErrorMsg = 4,
6 Sys_commonNotice = 5, 6 Sys_commonNotice = 5,
7 Sys_maintainNotice = 6, 7 Sys_maintainNotice = 6,
8 - Sys_kickdown = 7,  
9 - Sys_runningHorse = 8,  
10 8
11 Gm_clientRequest = 20, 9 Gm_clientRequest = 20,
12 Gm_receiveResponse = 21, 10 Gm_receiveResponse = 21,
@@ -162,6 +160,12 @@ actionCodes = { @@ -162,6 +160,12 @@ actionCodes = {
162 Pvp_endBattleHRpc = 511, 160 Pvp_endBattleHRpc = 511,
163 Pvp_highDivisionGiftRpc = 512, 161 Pvp_highDivisionGiftRpc = 512,
164 Pvp_shopBuyRpc = 513, 162 Pvp_shopBuyRpc = 513,
  163 + Pvp_crossInfoRpc = 514,
  164 + Pvp_crossRoleInfoRpc = 515,
  165 + Pvp_crossRoleInfoDetailRpc = 516,
  166 + Pvp_crossMatchRecordRpc = 517,
  167 + Pvp_crossBetInfoRpc = 518,
  168 + Pvp_crossBetRpc = 519,
165 169
166 170
167 Store_rechargeRpc = 550, 171 Store_rechargeRpc = 550,
src/actions/HttpAction.lua
@@ -189,7 +189,6 @@ function _M.broadcast(query) @@ -189,7 +189,6 @@ function _M.broadcast(query)
189 ["maintain"] = actionCodes.Sys_maintainNotice, 189 ["maintain"] = actionCodes.Sys_maintainNotice,
190 } 190 }
191 if not codes[query.cmd] then return "错误" end 191 if not codes[query.cmd] then return "错误" end
192 -  
193 mcast_util.pub_world(codes[query.cmd], bin) 192 mcast_util.pub_world(codes[query.cmd], bin)
194 return "广播成功" 193 return "广播成功"
195 end 194 end
src/actions/PvpAction.lua
@@ -97,6 +97,7 @@ function _M.formatHighRpc(agent , data) @@ -97,6 +97,7 @@ function _M.formatHighRpc(agent , data)
97 end 97 end
98 98
99 role:savePvpHTeam(pvpTH) 99 role:savePvpHTeam(pvpTH)
  100 + role:changeCrossServerPvpSelfInfo("format")
100 SendPacket(actionCodes.Pvp_formatHighRpc, '') 101 SendPacket(actionCodes.Pvp_formatHighRpc, '')
101 return true 102 return true
102 end 103 end
@@ -615,6 +616,7 @@ function _M.endBattleHRpc(agent, data) @@ -615,6 +616,7 @@ function _M.endBattleHRpc(agent, data)
615 -- 加入战斗记录 616 -- 加入战斗记录
616 local selfTeam = {} 617 local selfTeam = {}
617 local enemyTeam = {} 618 local enemyTeam = {}
  619 +
618 for _idx, info in ipairs(_pvpStartBattleCacheH.result) do 620 for _idx, info in ipairs(_pvpStartBattleCacheH.result) do
619 info.winId = info.isWin and roleId or match.id 621 info.winId = info.isWin and roleId or match.id
620 info.isWin = nil 622 info.isWin = nil
@@ -623,7 +625,10 @@ function _M.endBattleHRpc(agent, data) @@ -623,7 +625,10 @@ function _M.endBattleHRpc(agent, data)
623 battleV = role:getTeamBattleValue(_pvpStartBattleCacheH.pvpTH[_idx].heros) 625 battleV = role:getTeamBattleValue(_pvpStartBattleCacheH.pvpTH[_idx].heros)
624 } 626 }
625 if match.t == 1 and _pvpStartBattleCacheH.enemyT then 627 if match.t == 1 and _pvpStartBattleCacheH.enemyT then
626 - enemyTeam[_idx] = _pvpStartBattleCacheH.enemyT[_idx] 628 + enemyTeam[_idx] = {
  629 + heros = _pvpStartBattleCacheH.enemyT["heros"][_idx],
  630 + battleV = _pvpStartBattleCacheH.enemyT["battleV"][_idx]
  631 + }
627 end 632 end
628 end 633 end
629 local recordBattle = { 634 local recordBattle = {
@@ -864,4 +869,98 @@ function _M.shopBuyRpc(agent, data) @@ -864,4 +869,98 @@ function _M.shopBuyRpc(agent, data)
864 return true 869 return true
865 end 870 end
866 871
  872 +
  873 +----------------------------跨服竞技场----------------------------------
  874 +
  875 +function _M.crossInfoRpc(agent, data)
  876 + local role = agent.role
  877 + local roleId = role:getProperty("id")
  878 +
  879 + if not role:isTimeResetOpen(TimeReset.PvpCross) then return end
  880 +
  881 + local result = role:getCrossServerPvpMatchInfo()
  882 + if not result then return end
  883 +
  884 + SendPacket(actionCodes.Pvp_crossInfoRpc, MsgPack.pack(result))
  885 + return true
  886 +end
  887 +
  888 +function _M.crossRoleInfoRpc(agent, data)
  889 + local role = agent.role
  890 + local roleId = role:getProperty("id")
  891 +
  892 + if not role:isTimeResetOpen(TimeReset.PvpCross) then return end
  893 +
  894 + local result = role:getCrossServerPvpRoleInfo()
  895 + if not result then return end
  896 +
  897 + SendPacket(actionCodes.Pvp_crossRoleInfoRpc, MsgPack.pack({roleInfo = result}))
  898 + return true
  899 +end
  900 +
  901 +
  902 +function _M.crossRoleInfoDetailRpc(agent, data)
  903 + local role = agent.role
  904 + local roleId = role:getProperty("id")
  905 +
  906 + if not role:isTimeResetOpen(TimeReset.PvpCross) then return end
  907 + local msg = MsgPack.unpack(data)
  908 + if not msg.ids or not next(msg.ids) then return end
  909 +
  910 + local result = role:getCrossServerPvpRoleInfoDeatil(msg.ids)
  911 + if not result then return end
  912 +
  913 + SendPacket(actionCodes.Pvp_crossRoleInfoDetailRpc, MsgPack.pack(result))
  914 + return true
  915 +end
  916 +
  917 +
  918 +function _M.crossMatchRecordRpc(agent, data)
  919 + local role = agent.role
  920 + local roleId = role:getProperty("id")
  921 +
  922 + if not role:isTimeResetOpen(TimeReset.PvpCross) then return 1 end
  923 + local msg = MsgPack.unpack(data)
  924 + if not msg.round then return 2 end
  925 + if not msg.matchIdx then return 3 end
  926 +
  927 + local result = role:getCrossServerPvpMatchRecord(msg.round, msg.matchIdx)
  928 + if not result then return 4 end
  929 +
  930 + SendPacket(actionCodes.Pvp_crossMatchRecordRpc, MsgPack.pack(result))
  931 + return true
  932 +end
  933 +
  934 +function _M.crossBetInfoRpc(agent, data)
  935 + local role = agent.role
  936 + local roleId = role:getProperty("id")
  937 +
  938 + if not role:isTimeResetOpen(TimeReset.PvpCross) then return end
  939 +
  940 + local result = role:getCrossServerPvpBetInfo()
  941 + if not result then return end
  942 +
  943 +
  944 + SendPacket(actionCodes.Pvp_crossBetInfoRpc, MsgPack.pack(result))
  945 + return true
  946 +end
  947 +
  948 +function _M.crossBetRpc(agent, data)
  949 + local role = agent.role
  950 + local roleId = role:getProperty("id")
  951 + local msg = MsgPack.unpack(data)
  952 +
  953 + if not role:isTimeResetOpen(TimeReset.PvpCross) then return end
  954 + if msg.idx ~= 1 and msg.idx ~= 2 then return end
  955 +
  956 + local result = role:getCrossServerPvpBet(msg.idx)
  957 + if not result then return end
  958 +
  959 + SendPacket(actionCodes.Pvp_crossBetRpc, MsgPack.pack(result))
  960 + return true
  961 +end
  962 +
  963 +
  964 +
  965 +
867 return _M 966 return _M
868 \ No newline at end of file 967 \ No newline at end of file
src/actions/RoleAction.lua
@@ -54,11 +54,11 @@ local _M = {} @@ -54,11 +54,11 @@ local _M = {}
54 function _M.loginRpc( agent, data ) 54 function _M.loginRpc( agent, data )
55 local msg = MsgPack.unpack(data) 55 local msg = MsgPack.unpack(data)
56 local response = {} 56 local response = {}
57 - -- if msg.version ~= globalCsv.version then  
58 - -- response.result = "UPDATE_TIP"  
59 - -- SendPacket(actionCodes.Role_loginRpc, MsgPack.pack(response))  
60 - -- return true  
61 - -- end 57 + if msg.codeVersion ~= globalCsv.codeVersion then
  58 + response.result = "UPDATE_TIP"
  59 + SendPacket(actionCodes.Role_loginRpc, MsgPack.pack(response))
  60 + return true
  61 + end
62 62
63 -- 1. 63 -- 1.
64 local roleId = redisproxy:get(string_format("user:%s", string.upper(msg.name))) 64 local roleId = redisproxy:get(string_format("user:%s", string.upper(msg.name)))
@@ -345,6 +345,8 @@ function _M.changeNameRpc(agent, data) @@ -345,6 +345,8 @@ function _M.changeNameRpc(agent, data)
345 role:updateProperties({ 345 role:updateProperties({
346 ["name"] = newName, 346 ["name"] = newName,
347 }) 347 })
  348 +
  349 + role:changeCrossServerPvpSelfInfo("name")
348 SendPacket(actionCodes.Role_changeNameRpc, MsgPack.pack({result = 0})) 350 SendPacket(actionCodes.Role_changeNameRpc, MsgPack.pack({result = 0}))
349 return true 351 return true
350 end 352 end
@@ -938,6 +940,7 @@ function _M.changeHeadRpc(agent, data) @@ -938,6 +940,7 @@ function _M.changeHeadRpc(agent, data)
938 return 940 return
939 end 941 end
940 role:updateProperty({field = "headId" ,value = id}) 942 role:updateProperty({field = "headId" ,value = id})
  943 + role:changeCrossServerPvpSelfInfo("headId")
941 SendPacket(actionCodes.Role_changeHeadRpc, "") 944 SendPacket(actionCodes.Role_changeHeadRpc, "")
942 return true 945 return true
943 end 946 end
@@ -1563,11 +1563,12 @@ function Adv:mapItemChange(ctype) @@ -1563,11 +1563,12 @@ function Adv:mapItemChange(ctype)
1563 for blockId, block in pairs(room.blocks) do 1563 for blockId, block in pairs(room.blocks) do
1564 if block:getEventType() == AdvEventType.Drop and block.event.item then 1564 if block:getEventType() == AdvEventType.Drop and block.event.item then
1565 local id = block.event.item[1] 1565 local id = block.event.item[1]
  1566 + local count = block.event.item[2]
1566 local changeTo = nil 1567 local changeTo = nil
1567 if clist[id] then 1568 if clist[id] then
1568 - changeTo = {clist[id].toId, clist[id].num} 1569 + changeTo = {clist[id].toId, math.ceil(count * clist[id].num)}
1569 elseif clist[-1] then 1570 elseif clist[-1] then
1570 - changeTo = {clist[-1].toId, clist[-1].num} 1571 + changeTo = {clist[-1].toId, math.ceil(count * clist[-1].num)}
1571 end 1572 end
1572 if changeTo and changeTo[1] ~= 0 and changeTo[2] ~= 0 then 1573 if changeTo and changeTo[1] ~= 0 and changeTo[2] ~= 0 then
1573 block.event.item = changeTo 1574 block.event.item = changeTo
@@ -308,6 +308,7 @@ skynet.start(function() @@ -308,6 +308,7 @@ skynet.start(function()
308 cs = queue() 308 cs = queue()
309 309
310 csvdb = sharedata.query("csvdata") 310 csvdb = sharedata.query("csvdata")
  311 + pvpd = skynet.localname(".PVPCROSS")
311 -- 错误码特殊处理 312 -- 错误码特殊处理
312 -- todo 313 -- todo
313 -- for key, value in pairs(csvdb["sys_codesCsv"]) do 314 -- for key, value in pairs(csvdb["sys_codesCsv"]) do
@@ -8,6 +8,7 @@ logd = 0 -- 是否开启日志 @@ -8,6 +8,7 @@ logd = 0 -- 是否开启日志
8 servId = 1 8 servId = 1
9 baseId = 0 9 baseId = 0
10 codeurl = "120.26.43.151:9090" 10 codeurl = "120.26.43.151:9090"
  11 +cluster = "./src/nodenames.lua"
11 12
12 lua_path = root .."skynet/lualib/?.lua;"..root.."src/?.lua;"..root.."tools/?.lua" 13 lua_path = root .."skynet/lualib/?.lua;"..root.."src/?.lua;"..root.."tools/?.lua"
13 luaservice = root.."skynet/service/?.lua;"..root.."src/?.lua" 14 luaservice = root.."skynet/service/?.lua;"..root.."src/?.lua"
src/models/Pvpd.lua 0 → 100644
@@ -0,0 +1,14 @@ @@ -0,0 +1,14 @@
  1 +-- pvpd 需要的内容
  2 +local Pvpd = class("Pvpd", require("shared.ModelBase"))
  3 +
  4 +function Pvpd:ctor( properties )
  5 + Pvpd.super.ctor(self, properties)
  6 +end
  7 +
  8 +
  9 +Pvpd.schema = {
  10 + betInfo = {"table", {}}, -- 押注的场次信息 {[round] = matchIdx}
  11 + betNum = {"table", {}}, -- 押注[1]的人数
  12 +}
  13 +
  14 +return Pvpd
0 \ No newline at end of file 15 \ No newline at end of file
src/models/Role.lua
@@ -40,6 +40,7 @@ Role.schema = { @@ -40,6 +40,7 @@ Role.schema = {
40 device = {"string", ""}, 40 device = {"string", ""},
41 banTime = {"number", 0}, 41 banTime = {"number", 0},
42 banType = {"number", 0}, 42 banType = {"number", 0},
  43 + heartWarning = {"number", 0},
43 ltime = {"number", 0}, -- 最后登录时间 44 ltime = {"number", 0}, -- 最后登录时间
44 ctime = {"number", skynet.timex()}, -- 创建时间 45 ctime = {"number", skynet.timex()}, -- 创建时间
45 ignoreMt = {"number", 0}, -- 忽略维护拦截 46 ignoreMt = {"number", 0}, -- 忽略维护拦截
@@ -113,7 +114,7 @@ Role.schema = { @@ -113,7 +114,7 @@ Role.schema = {
113 pvpHGift = {"table", {}}, -- pvp 高级段位每小时奖励缓存 114 pvpHGift = {"table", {}}, -- pvp 高级段位每小时奖励缓存
114 pvpHGTime = {"number", 0}, -- pvp 高级段位上次奖励刷新时间 115 pvpHGTime = {"number", 0}, -- pvp 高级段位上次奖励刷新时间
115 pvpShop = {"table", {}}, -- pvp 商店{id = count} 对应商店id 购买次数 116 pvpShop = {"table", {}}, -- pvp 商店{id = count} 对应商店id 购买次数
116 - 117 + pvpBet = {"table", {}}, -- 跨服竞技场押注信息 {[round] = {1, 1000}}
117 118
118 potionBag = {"table", {}}, -- 营养剂背包 119 potionBag = {"table", {}}, -- 营养剂背包
119 120
src/models/RoleLog.lua
@@ -4,6 +4,7 @@ local LogType = { @@ -4,6 +4,7 @@ local LogType = {
4 create = "common", 4 create = "common",
5 login = "common", 5 login = "common",
6 logout = "common", 6 logout = "common",
  7 + gm = "common",
7 } 8 }
8 9
9 -- 如要修改 要提前修改 _template mapping -- 对应 mapping 为 gamelog-* 10 -- 如要修改 要提前修改 _template mapping -- 对应 mapping 为 gamelog-*
@@ -45,10 +46,10 @@ local function checkType(logType, field, value, ctype) @@ -45,10 +46,10 @@ local function checkType(logType, field, value, ctype)
45 --长度不超过256 46 --长度不超过256
46 if type(value) ~= "string" then 47 if type(value) ~= "string" then
47 value = tostring(value) 48 value = tostring(value)
48 - print(string.format("LOG ERROR: logType [%s] field [%s] isn't [keyword]", logType, field)) 49 + print(string.format("LOG ERROR: logType [%s] field [%s] isn't [keyword], value : %s", logType, field, value))
49 else 50 else
50 if #value > 256 then 51 if #value > 256 then
51 - print(string.format("LOG ERROR: logType [%s] field [%s] [keyword] type to long.", logType, field)) 52 + print(string.format("LOG ERROR: logType [%s] field [%s] [keyword] type to long. value : %s", logType, field, value))
52 end 53 end
53 end 54 end
54 return value 55 return value
@@ -56,26 +57,26 @@ local function checkType(logType, field, value, ctype) @@ -56,26 +57,26 @@ local function checkType(logType, field, value, ctype)
56 text = function() 57 text = function()
57 if type(value) ~= "string" then 58 if type(value) ~= "string" then
58 value = tostring(value) 59 value = tostring(value)
59 - print(string.format("LOG ERROR: logType [%s] field [%s] isn't [text]", logType, field)) 60 + print(string.format("LOG ERROR: logType [%s] field [%s] isn't [text], value : %s", logType, field, value))
60 end 61 end
61 return value 62 return value
62 end, 63 end,
63 integer = function() 64 integer = function()
64 if type(value) ~= "number" then 65 if type(value) ~= "number" then
65 value = tonumber(value) 66 value = tonumber(value)
66 - print(string.format("LOG ERROR: logType [%s] field [%s] isn't [integer]", logType, field)) 67 + print(string.format("LOG ERROR: logType [%s] field [%s] isn't [integer], value : %s", logType, field, value))
67 end 68 end
68 if value then 69 if value then
69 if math.type(value) ~= "integer" then 70 if math.type(value) ~= "integer" then
70 local oldValue = value 71 local oldValue = value
71 value = math.floor(value) 72 value = math.floor(value)
72 if value ~= oldValue then 73 if value ~= oldValue then
73 - print(string.format("LOG ERROR: logType [%s] field [%s] isn't [integer], is float", logType, field)) 74 + print(string.format("LOG ERROR: logType [%s] field [%s] isn't [integer], is float, value : %s", logType, field, value))
74 end 75 end
75 end 76 end
76 if -2147483648 > value or value > 2147483647 then 77 if -2147483648 > value or value > 2147483647 then
77 value = nil 78 value = nil
78 - print(string.format("LOG ERROR: logType [%s] field [%s] isn't [integer], too big", logType, field)) 79 + print(string.format("LOG ERROR: logType [%s] field [%s] isn't [integer], too big, value : %s", logType, field, value))
79 end 80 end
80 end 81 end
81 return value 82 return value
@@ -83,20 +84,20 @@ local function checkType(logType, field, value, ctype) @@ -83,20 +84,20 @@ local function checkType(logType, field, value, ctype)
83 short = function() 84 short = function()
84 if type(value) ~= "number" then 85 if type(value) ~= "number" then
85 value = tonumber(value) 86 value = tonumber(value)
86 - print(string.format("LOG ERROR: logType [%s] field [%s] isn't [short]", logType, field)) 87 + print(string.format("LOG ERROR: logType [%s] field [%s] isn't [short], value : %s", logType, field, value))
87 end 88 end
88 if value then 89 if value then
89 if math.type(value) ~= "integer" then 90 if math.type(value) ~= "integer" then
90 local oldValue = value 91 local oldValue = value
91 value = math.floor(value) 92 value = math.floor(value)
92 if value ~= oldValue then 93 if value ~= oldValue then
93 - print(string.format("LOG ERROR: logType [%s] field [%s] isn't [short], is float", logType, field)) 94 + print(string.format("LOG ERROR: logType [%s] field [%s] isn't [short], is float, value : %s", logType, field, value))
94 end 95 end
95 end 96 end
96 97
97 if -32768 > value or value > 32768 then 98 if -32768 > value or value > 32768 then
98 value = nil 99 value = nil
99 - print(string.format("LOG ERROR: logType [%s] field [%s] isn't [short], too big", logType, field)) 100 + print(string.format("LOG ERROR: logType [%s] field [%s] isn't [short], too big, value : %s", logType, field, value))
100 end 101 end
101 end 102 end
102 return value 103 return value
@@ -104,7 +105,7 @@ local function checkType(logType, field, value, ctype) @@ -104,7 +105,7 @@ local function checkType(logType, field, value, ctype)
104 long = function() 105 long = function()
105 if type(value) ~= "number" then 106 if type(value) ~= "number" then
106 value = tonumber(value) 107 value = tonumber(value)
107 - print(string.format("LOG ERROR: logType [%s] field [%s] isn't [long]", logType, field)) 108 + print(string.format("LOG ERROR: logType [%s] field [%s] isn't [long], value : %s", logType, field, value))
108 end 109 end
109 if value then 110 if value then
110 if math.type(value) ~= "integer" then 111 if math.type(value) ~= "integer" then
@@ -112,9 +113,9 @@ local function checkType(logType, field, value, ctype) @@ -112,9 +113,9 @@ local function checkType(logType, field, value, ctype)
112 value = math.floor(value) 113 value = math.floor(value)
113 if type(value) ~= "integer" then 114 if type(value) ~= "integer" then
114 value = nil 115 value = nil
115 - print(string.format("LOG ERROR: logType [%s] field [%s] isn't [long], too big", logType, field)) 116 + print(string.format("LOG ERROR: logType [%s] field [%s] isn't [long], too big, value : %s", logType, field, value))
116 elseif value ~= oldValue then 117 elseif value ~= oldValue then
117 - print(string.format("LOG ERROR: logType [%s] field [%s] isn't [long], is float", logType, field)) 118 + print(string.format("LOG ERROR: logType [%s] field [%s] isn't [long], is float, value : %s", logType, field, value))
118 end 119 end
119 end 120 end
120 end 121 end
@@ -123,7 +124,7 @@ local function checkType(logType, field, value, ctype) @@ -123,7 +124,7 @@ local function checkType(logType, field, value, ctype)
123 float = function() 124 float = function()
124 if type(value) ~= "number" then 125 if type(value) ~= "number" then
125 value = tonumber(value) 126 value = tonumber(value)
126 - print(string.format("LOG ERROR: logType [%s] field [%s] isn't [float]", logType, field)) 127 + print(string.format("LOG ERROR: logType [%s] field [%s] isn't [float], value : %s", logType, field, value))
127 end 128 end
128 return value 129 return value
129 end, 130 end,
src/models/RolePlugin.lua
@@ -156,6 +156,7 @@ function RolePlugin.bind(Role) @@ -156,6 +156,7 @@ function RolePlugin.bind(Role)
156 end 156 end
157 end 157 end
158 self:updateProperties({level = level, exp = newExp}) 158 self:updateProperties({level = level, exp = newExp})
  159 + self:changeCrossServerPvpSelfInfo("level")
159 end 160 end
160 161
161 function Role:addItem(params) 162 function Role:addItem(params)
@@ -528,19 +529,40 @@ function RolePlugin.bind(Role) @@ -528,19 +529,40 @@ function RolePlugin.bind(Role)
528 529
529 function Role:warningHeartTooQuick() 530 function Role:warningHeartTooQuick()
530 -- 加速器检测 531 -- 加速器检测
531 - -- local heartWarning = self:getProperty("heartWarning")  
532 - -- heartWarning = heartWarning + 1  
533 - -- self:setProperty("heartWarning", heartWarning)  
534 - -- if heartWarning == 50 then  
535 - -- self:setProperty("delete", 1)  
536 - -- self:sendGmMsg("系统检测到你多次使用加速器,已经将你封杀,请联系管理员。")  
537 - -- self:log("gmAction",{desc = "ban"})  
538 - -- return  
539 - -- end  
540 - -- if heartWarning < 50 and heartWarning % 5 == 0 then  
541 - -- self:sendGmMsg("警告!系统检测到你使用加速器,请立即停止使用!否则我们将封杀此账号!")  
542 - -- self:log("gmAction",{desc = "heartWarning", count = heartWarning})  
543 - -- end 532 + local heartWarning = self:getProperty("heartWarning")
  533 + heartWarning = heartWarning + 1
  534 + self:setProperty("heartWarning", heartWarning)
  535 + if heartWarning == 50 then
  536 + self:setProperty("delete", 1)
  537 + self:sendGmMsg("server_accountBanned_inGame_1")
  538 + self:log("gm",{desc = "ban"})
  539 + return
  540 + end
  541 + if heartWarning < 50 and heartWarning % 5 == 0 then
  542 + self:sendGmMsg("server_accountBanned_warning")
  543 + self:log("gm",{desc = "heartWarning", int1 = heartWarning})
  544 + end
  545 + end
  546 +
  547 + function Role:setBan(time, banType)
  548 + time = time or 0
  549 + banType = banType or 0
  550 + local now = skynet.timex()
  551 + if time == 0 then
  552 + self:setProperty("banTime", 0)
  553 + self:setProperty("banType", 0)
  554 + self:setProperty("heartWarning", 0)
  555 +
  556 + self:log("gm", {desc = "ban_rm"})
  557 + else
  558 + self:setProperty("banTime", now + 86400 * time)
  559 + self:setProperty("banType", banType)
  560 + self:log("gm",{desc = "ban", int1 = time, int2 = banType})
  561 + end
  562 + end
  563 +
  564 + function Role:sendGmMsg(text, isNotKey)
  565 + SendPacket(actionCodes.Sys_maintainNotice, MsgPack.pack({ body = text, iskey = not isNotKey}))
544 end 566 end
545 567
546 function Role:getHeroActiveRelationData(heros) 568 function Role:getHeroActiveRelationData(heros)
src/models/RolePvp.lua
@@ -352,6 +352,167 @@ end @@ -352,6 +352,167 @@ end
352 352
353 353
354 354
  355 +
  356 +
  357 +-------------------- 跨服竞技场相关 -----------------------
  358 +local serverId = tonumber(skynet.getenv("servId"))
  359 +-- 自己是否参赛 -- 更换头像 名字 队伍 需要上传
  360 +function Role:isCrossServerPvpPlayer()
  361 + if not self:isTimeResetOpen(TimeReset.PvpCross) then
  362 + self._isCrossServerPvpPlayer = nil
  363 + return false
  364 + end
  365 + if self._isCrossServerPvpPlayer == nil then
  366 + self:getCrossServerPvpMatchInfo()
  367 + end
  368 + return self._isCrossServerPvpPlayer
  369 +end
  370 +
  371 +function Role:changeCrossServerPvpSelfInfo(cType)
  372 + if not self:isCrossServerPvpPlayer() then return end
  373 + local change = {id = self:packPvpCrossRoleId(serverId, self:getProperty("id"))}
  374 + if cType == "name" or cType == "level" or cType == "headId" then
  375 + change[cType] = self:getProperty(cType)
  376 + elseif cType == "format" then
  377 + -- 是否过了时间
  378 + local crossTime = skynet.timex() - self:getTimeResetStartTime(TimeReset.PvpCross)
  379 + local aday = 3600 * 24
  380 + local day = math.ceil(crossTime / aday) -- 当前是第几个比赛日
  381 + local ctime = crossTime % aday -- 当前在本天 经过多少时间
  382 +
  383 + if day > globalCsv.pvp_cross_server_day or ctime >= globalCsv.pvp_cross_server_stop_format then
  384 + return
  385 + end
  386 + change.battleV = self:getProperty("pvpTBVH")
  387 + change.heros = self:getProperty("pvpTSH")
  388 + change.battleInfo = self:getProperty("pvpTBH")
  389 + end
  390 +
  391 + pcall(skynet.call, pvpd, "lua", "updateRoleInfo", change)
  392 +end
  393 +
  394 +-- 获取当前阵容信息
  395 +function Role:getCrossServerPvpMatchInfo()
  396 + if not self:isTimeResetOpen(TimeReset.PvpCross) then return end
  397 + local ok, result = pcall(skynet.call, pvpd, "lua", "getMatchInfo")
  398 + if ok then
  399 + local cur = result.roleInfo and result.roleInfo[self:packPvpCrossRoleId(serverId, self:getProperty("id"))]
  400 + self._isCrossServerPvpPlayer = cur and true or false
  401 + return result
  402 + else
  403 + print(result)
  404 + end
  405 +end
  406 +
  407 +-- 获取角色信息 简略
  408 +function Role:getCrossServerPvpRoleInfo()
  409 + if not self:isTimeResetOpen(TimeReset.PvpCross) then return end
  410 +
  411 + local ok, result = pcall(skynet.call, pvpd, "lua", "getRoleInfo")
  412 + if ok then
  413 + return result
  414 + else
  415 + print(result)
  416 + end
  417 +end
  418 +
  419 +function Role:getCrossServerPvpRoleInfoDeatil(pIds)
  420 + if not self:isTimeResetOpen(TimeReset.PvpCross) then return end
  421 +
  422 + local ok, result = pcall(skynet.call, pvpd, "lua", "getRoleDetail", pIds)
  423 + if ok then
  424 + return result
  425 + else
  426 + print(result)
  427 + end
  428 +end
  429 +
  430 +function Role:getCrossServerPvpMatchRecord(round, matchIdx)
  431 + if not self:isTimeResetOpen(TimeReset.PvpCross) then return end
  432 +
  433 + local ok, result = pcall(skynet.call, pvpd, "lua", "getMatchRecord", round, matchIdx)
  434 + if ok then
  435 + return result
  436 + else
  437 + print(result)
  438 + end
  439 +end
  440 +
  441 +function Role:getCrossServerPvpBetInfo()
  442 + if not self:isTimeResetOpen(TimeReset.PvpCross) then return end
  443 + local pvpBet = self:getProperty("pvpBet")
  444 + local back = {}
  445 +
  446 + local ok, result = pcall(skynet.call, pvpd, "lua", "getBetInfo")
  447 +
  448 + if ok then
  449 + if result.betInfo then
  450 + local maxRound = 0
  451 + for round, matchIdx in pairs(result.betInfo) do
  452 + if round > maxRound then
  453 + maxRound = round
  454 + end
  455 + back[round] = {
  456 + matchIdx = matchIdx,
  457 + bet = pvpBet[round]
  458 + }
  459 + end
  460 + if maxRound ~= 0 then
  461 + back[maxRound].betNum = result.betNum
  462 + end
  463 + end
  464 + return back
  465 + else
  466 + print(result)
  467 + end
  468 +end
  469 +
  470 +function Role:getCrossServerPvpBet(idx)
  471 + if not self:isTimeResetOpen(TimeReset.PvpCross) then return end
  472 + local crossTime = skynet.timex() - self:getTimeResetStartTime(TimeReset.PvpCross)
  473 + local aday = 3600 * 24
  474 + local day = math.ceil(crossTime / aday) -- 当前是第几个比赛日
  475 + local ctime = crossTime % aday -- 当前在本天 经过多少时间
  476 +
  477 + if day > globalCsv.pvp_cross_server_day or ctime >= globalCsv.pvp_cross_server_stop_stake then
  478 + return
  479 + end
  480 + local pvpBet = self:getProperty("pvpBet")
  481 + if pvpBet[day] then return end
  482 +
  483 + local cost = {[ItemId.Gold] = self:getProperty("level") * globalCsv.pvp_cross_bet_pre_level}
  484 + if not self:checkItemEnough(cost) then return end
  485 +
  486 + local ok, result = pcall(skynet.call, pvpd, "lua", "setBet", idx)
  487 + if ok then
  488 + if result then
  489 + self:costItems(cost)
  490 + pvpBet[day] = {idx, cost[ItemId.Gold]}
  491 + self:setProperty("pvpBet", pvpBet)
  492 + end
  493 + return result
  494 + else
  495 + print(result)
  496 + end
  497 +end
  498 +
  499 +
  500 +
  501 +function Role:packPvpCrossRoleId(servId, roleId)
  502 + return roleId * 1000 + servId
  503 +end
  504 +
  505 +function Role:unpackPvpCrossRoleId(tempId)
  506 + local servId = tempId % 1000
  507 + local roleId = math.floor(tempId / 1000)
  508 + return servId, roleId
  509 +end
  510 +
  511 +-- -- 获取参赛玩家详情
  512 +-- function Role:
  513 +
  514 +
  515 +
355 end 516 end
356 517
357 518
src/models/RoleTimeReset.lua
@@ -34,6 +34,10 @@ ResetFunc[&quot;PvpShop&quot;] = function(self, notify, response) @@ -34,6 +34,10 @@ ResetFunc[&quot;PvpShop&quot;] = function(self, notify, response)
34 response.pvpShop = {} 34 response.pvpShop = {}
35 end 35 end
36 36
  37 +ResetFunc["PvpCross"] = function(self, notify, response)
  38 + self:setProperty("pvpBet", {})
  39 +end
  40 +
37 41
38 function Role:updateTimeReset(now, notify) 42 function Role:updateTimeReset(now, notify)
39 local timeReset = self:getProperty("timeReset") 43 local timeReset = self:getProperty("timeReset")
src/models/Rune.lua
@@ -71,6 +71,9 @@ end @@ -71,6 +71,9 @@ end
71 71
72 function Rune:generateAttrs() 72 function Rune:generateAttrs()
73 local runeData = csvdb["runeCsv"][self:getProperty("type")][self:getProperty("id")] 73 local runeData = csvdb["runeCsv"][self:getProperty("type")][self:getProperty("id")]
  74 + if not runeData then
  75 + print(self:getProperty("type"), self:getProperty("id"))
  76 + end
74 local attrs = "" 77 local attrs = ""
75 local typ, value = getRandomValue(runeData.attr1,runeData.range1) 78 local typ, value = getRandomValue(runeData.attr1,runeData.range1)
76 attrs = attrs:setv(typ, value) 79 attrs = attrs:setv(typ, value)
src/services/httpweb.lua
@@ -94,6 +94,18 @@ local function start() @@ -94,6 +94,18 @@ local function start()
94 end 94 end
95 socket.close(id) 95 socket.close(id)
96 end) 96 end)
  97 +
  98 + -- 注册全服广播
  99 + local channels = {}
  100 + for i = 1, 10 do
  101 + local channel = datacenter.get("MC_W_CHANNEL" .. i)
  102 + if channel then
  103 + table.insert(channels, channel)
  104 + end
  105 + end
  106 + if #channels > 0 then
  107 + mcast_util.sub_worlds(channels)
  108 + end
97 end 109 end
98 110
99 local function __init__() 111 local function __init__()
src/services/logd.lua
@@ -75,7 +75,7 @@ function CMD.log(logType, doc, index_suffix) @@ -75,7 +75,7 @@ function CMD.log(logType, doc, index_suffix)
75 75
76 local now = skynet.timex() 76 local now = skynet.timex()
77 doc["timestamp"] = now 77 doc["timestamp"] = now
78 - doc["@timestamp"] = os.date("%Y-%m-%d %H:%M:%S", now) 78 + doc["timestamp_f"] = os.date("%Y-%m-%d %H:%M:%S", now)
79 doc["server"] = serverId 79 doc["server"] = serverId
80 80
81 -- 自己加好 index 81 -- 自己加好 index
src/services/pvpd.lua
1 -local skynet = require "skynet" 1 +skynet = require "skynet"
2 local json = require("shared.json") 2 local json = require("shared.json")
3 -local redisproxy = require("shared.redisproxy") 3 +redisproxy = require("shared.redisproxy")
4 local cluster = require "skynet.cluster" 4 local cluster = require "skynet.cluster"
5 - 5 +local serverId = tonumber(skynet.getenv("servId"))
  6 +local sharedata = require "skynet.sharedata"
  7 +datacenter = require "skynet.datacenter"
6 require "shared.init" 8 require "shared.init"
7 require "utils.init" 9 require "utils.init"
8 require "RedisKeys" 10 require "RedisKeys"
@@ -11,10 +13,32 @@ globalCsv = require &quot;csvdata/GlobalDefine&quot; @@ -11,10 +13,32 @@ globalCsv = require &quot;csvdata/GlobalDefine&quot;
11 require "GlobalVar" 13 require "GlobalVar"
12 14
13 15
  16 +local MatchCache = {} -- 比赛记录 缓存 { [roundIdx] = {{rolesId, rolesId, winId = roleId}, {rolesId, rolesId}}, ... }
  17 +local RoleInfo = {} -- 角色信息缓存 {[rolesId] = info}
  18 +local pvpInfo = nil
  19 +
  20 +local ROBOT_SERV_ID = 999
  21 +local function packRoleId(servId, roleId)
  22 + return roleId * 1000 + servId
  23 +end
  24 +
  25 +local function unpackRoleId(tempId)
  26 + local servId = tempId % 1000
  27 + local roleId = math.floor(tempId / 1000)
  28 + return servId, roleId
  29 +end
14 30
  31 +skynet.register_protocol {
  32 + name = "role",
  33 + id = 13,
  34 + pack = skynet.pack,
  35 + unpack = skynet.unpack,
  36 + dispatch = function(session, address, submethod, ...)
  37 + end,
  38 +}
15 39
16 40
17 -function rpcRole(roleId, funcName, ...) 41 +local function rpcRole(roleId, funcName, ...)
18 local fields = ... 42 local fields = ...
19 local agent = datacenter.get("agent", roleId) 43 local agent = datacenter.get("agent", roleId)
20 if agent and agent.serv then 44 if agent and agent.serv then
@@ -33,72 +57,203 @@ function rpcRole(roleId, funcName, ...) @@ -33,72 +57,203 @@ function rpcRole(roleId, funcName, ...)
33 end 57 end
34 end 58 end
35 59
36 -local function upLoadTeams()  
37 - local chatd = cluster.query("center", "chatd")  
38 - if not chatd then  
39 - return 60 +local function getDBKey()
  61 + local resetData = csvdb["time_resetCsv"][TimeReset.PvpCross]
  62 + local curRound = math.floor((skynet.timex() - START_RESET_TIME - resetData.start) / resetData.interval)
  63 + local idx = 1
  64 + if curRound % 2 == 1 then
  65 + idx = 2
40 end 66 end
41 - return pcall(cluster.call, "center", chatd, "test", {serverId = 123, hehe = "asd"}) 67 + return RANK_PVP_HIGHT_KEY[idx]
  68 +end
  69 +
  70 +
  71 +local function getStartTime()
  72 + local resetData = csvdb["time_resetCsv"][TimeReset.PvpCross]
  73 + local curRound = math.floor((skynet.timex() - START_RESET_TIME - resetData.start) / resetData.interval)
  74 + local startTime = START_RESET_TIME + curRound * resetData.interval + resetData.start
  75 + return startTime
42 end 76 end
43 77
44 78
  79 +local CMD = {}
  80 +
  81 +------------------- 角色调用 --------------------------
  82 +
45 83
  84 +function CMD.updateRoleInfo(change)
  85 + CMD.refreshRoleInfo(change)
  86 + local pvpd = cluster.query("center", "pvpd")
  87 + if pvpd then
  88 + pcall(cluster.call, "center", pvpd, "updateRoleInfo", change)
  89 + end
  90 +end
46 91
47 -local function update() 92 +local function getDayAndTime()
  93 + local startTime = getStartTime()
48 local now = skynet.timex() 94 local now = skynet.timex()
49 - local resetData = csvdb["time_resetCsv"][TimeReset.PvpCross]  
50 -  
51 - local oldRound = tonum(redisproxy:hget("pvp_cross", "round"), -100)  
52 -  
53 - local startTime = START_RESET_TIME + curRound * resetData.interval + resetData.start  
54 - local endTime = startTime + (resetData.duration == 0 and resetData.interval or math.min(resetData.interval, resetData.duration))  
55 - local nextStartTime = startTime + resetData.interval  
56 -  
57 - local updateTime = math.max((nextStartTime - now) / 2, CHECK_PVP_STATUS_INTERVAL)  
58 - -- 已经 上传过阵容了  
59 - if curRound ~= oldRound then  
60 - -- 跨服竞技场已经结束了  
61 - if now >= endTime then  
62 - redisproxy:hset("pvp_cross", "round", curRound)  
63 - else  
64 - -- 上传信息  
65 - local status, back = upLoadTeams()  
66 - if status and back == "success" then --上传成功  
67 - redisproxy:hset("pvp_cross", "round", curRound)  
68 - else  
69 - updateTime = CHECK_PVP_STATUS_INTERVAL 95 +
  96 + local crossTime = now - startTime
  97 + local aday = 3600 * 24
  98 + local day = math.ceil(crossTime / aday) -- 当前是第几个比赛日
  99 + local ctime = crossTime % aday -- 当前在本天 经过多少时间
  100 +
  101 + return day, ctime
  102 +end
  103 +
  104 +local function hideMatchInfo()
  105 + local day, ctime = getDayAndTime()
  106 + local tempMatchCache = {}
  107 + if day > globalCsv.pvp_cross_server_day then
  108 + return MatchCache
  109 + else
  110 + for round, tempData in pairs(MatchCache) do
  111 + if round == day and ctime < globalCsv.pvp_cross_server_show_result - 1 then
  112 + tempMatchCache[round] = {}
  113 + for idx, match in pairs(tempData) do
  114 + tempMatchCache[round][idx] = {
  115 + [1] = match[1],
  116 + [2] = match[2],
  117 + }
  118 + end
  119 + elseif round <= day then
  120 + tempMatchCache[round] = {}
  121 + for idx, match in pairs(tempData) do
  122 + tempMatchCache[round][idx] = {
  123 + [1] = match[1],
  124 + [2] = match[2],
  125 + win = match.win,
  126 + battleV = {
  127 + [match[1]] = (match.teams[match[1]] or {}).battleV,
  128 + [match[2]] = (match.teams[match[2]] or {}).battleV,
  129 + }
  130 + }
  131 + end
70 end 132 end
71 end 133 end
72 end 134 end
73 - return updateTime 135 + return tempMatchCache
74 end 136 end
75 137
  138 +local function hideRoleInfo()
  139 + local day, ctime = getDayAndTime()
  140 + local needInfo = {}
  141 + local tempRoleInfo = {}
  142 + for pId, roleInfo in pairs(RoleInfo) do
  143 + tempRoleInfo[pId] = {
  144 + name = roleInfo.name,
  145 + level = roleInfo.level,
  146 + headId = roleInfo.headId,
  147 + }
  148 + end
  149 + return tempRoleInfo
  150 +end
76 151
77 -local CMD = {} 152 +function CMD.getMatchInfo()
  153 + if not next(MatchCache) then
  154 + local pvpd = cluster.query("center", "pvpd")
  155 + if pvpd then
  156 + local status, result = pcall(cluster.call, "center", pvpd, "getMatchInfo", {serverId = serverId})
  157 + MatchCache = result.matchInfo or {}
  158 + RoleInfo = result.roleInfo or {}
  159 + end
  160 + end
78 161
79 -function CMD.start()  
80 - -- check_pvp_update() 162 + return {matchInfo = hideMatchInfo(), roleInfo = hideRoleInfo()}
81 end 163 end
82 164
83 -local function getDBKey()  
84 - local resetData = csvdb["time_resetCsv"][TimeReset.PvpCross]  
85 - local curRound = math.floor((skynet.timex() - START_RESET_TIME - resetData.start) / resetData.interval)  
86 - local idx = 1  
87 - if curRound % 2 == 1 then  
88 - idx = 2 165 +function CMD.getRoleInfo()
  166 + if not next(MatchCache) then
  167 + CMD.getMatchInfo()
89 end 168 end
90 - return RANK_PVP_HIGHT_KEY[idx] 169 + return hideRoleInfo()
  170 +end
  171 +
  172 +function CMD.getRoleDetail(pIds)
  173 + if not next(MatchCache) then
  174 + CMD.getMatchInfo()
  175 + end
  176 + local result = {}
  177 + for _, pId in ipairs(pIds) do
  178 + result[pId] = RoleInfo[pId]
  179 + end
  180 + return result
  181 +end
  182 +
  183 +function CMD.getMatchRecord(round, matchIdx)
  184 + if not next(MatchCache) then
  185 + CMD.getMatchInfo()
  186 + end
  187 + local day, ctime = getDayAndTime()
  188 + if round > day or (round == day and ctime < globalCsv.pvp_cross_server_show_result) then return end -- 还么结算
  189 + if not (MatchCache[round] or {})[matchIdx] then return end
  190 + return {
  191 + videos = MatchCache[round][matchIdx].video,
  192 + teams = MatchCache[round][matchIdx].teams,
  193 + }
91 end 194 end
92 195
93 -function CMD.loadRoleInfo(roleIds) 196 +function CMD.getBetInfo()
  197 + if not next(MatchCache) then
  198 + CMD.getMatchInfo()
  199 + end
  200 + local day, ctime = getDayAndTime()
  201 + local change = false
  202 + local lastDay = math.min(day, globalCsv.pvp_cross_server_day)
  203 + local betInfo = pvpInfo:getProperty("betInfo")
  204 + local betNum = pvpInfo:getProperty("betNum")
  205 + for cday = 1, lastDay do
  206 + if not betInfo[cday] then
  207 + change = true
  208 + betInfo[cday] = math.randomInt(1, #(MatchCache[cday] or {1}))
  209 + if cday == lastDay then
  210 + betNum = {}
  211 + end
  212 + end
  213 + end
  214 + if change then
  215 + pvpInfo:setProperties({
  216 + betInfo = betInfo,
  217 + betNum = betNum
  218 + })
  219 + end
  220 +
  221 + return pvpInfo:getProperties({"betInfo", "betNum"})
  222 +end
  223 +
  224 +function CMD.setBet(idx)
  225 + local day, ctime = getDayAndTime()
  226 + if day > globalCsv.pvp_cross_server_day or ctime >= globalCsv.pvp_cross_server_stop_stake then return end
  227 +
  228 + local betInfo = pvpInfo:getProperty("betInfo")
  229 + if not betInfo[day] then return end
  230 +
  231 + local betNum = pvpInfo:getProperty("betNum")
  232 + betNum[idx] = (betNum[idx] or 0) + 1
  233 + pvpInfo:setProperty("betNum", betNum)
  234 + return {betNum = betNum}
  235 +end
  236 +
  237 +
  238 +-------------------中心服务器 调用----------------------
  239 +function CMD.loadRoles(roleIds)
94 roleIds = roleIds or {} 240 roleIds = roleIds or {}
95 local infos = {} 241 local infos = {}
  242 + RoleInfo[serverId] = RoleInfo[serverId] or {}
96 for _, roleId in ipairs(roleIds) do 243 for _, roleId in ipairs(roleIds) do
97 infos[roleId] = rpcRole(roleId, "pvpHInfo") 244 infos[roleId] = rpcRole(roleId, "pvpHInfo")
  245 + local temp = {}
  246 + for _field, _v in pairs(infos[roleId]) do
  247 + if _field ~= "battleInfo" then
  248 + temp[_field] = _v
  249 + end
  250 + end
  251 + RoleInfo[packRoleId(serverId, roleId)] = temp
98 end 252 end
99 return infos 253 return infos
100 end 254 end
101 255
  256 +-- 新赛季了 清掉缓存
102 function CMD.loadTeams() 257 function CMD.loadTeams()
103 local dbKey = getDBKey() 258 local dbKey = getDBKey()
104 local redret = redisproxy:zrevrange(dbKey, 0, 15) 259 local redret = redisproxy:zrevrange(dbKey, 0, 15)
@@ -106,12 +261,43 @@ function CMD.loadTeams() @@ -106,12 +261,43 @@ function CMD.loadTeams()
106 for _, roleId in ipairs(redret) do 261 for _, roleId in ipairs(redret) do
107 table.insert(roleIds, tonumber(roleId)) 262 table.insert(roleIds, tonumber(roleId))
108 end 263 end
  264 + MatchCache = {}
  265 + RoleInfo = {}
  266 + local infos = CMD.loadRoles(roleIds)
  267 + pvpInfo:setProperties({
  268 + betInfo = {},
  269 + betNum = {},
  270 + })
  271 + return {roleIds = roleIds, infos = infos}
  272 +end
109 273
110 - local infos = CMD.loadRoleInfo(roleIds) 274 +-- 刷新缓存
  275 +function CMD.refreshMatchCache(info)
  276 + MatchCache = info.matchInfo
  277 + RoleInfo = info.roleInfo
  278 +end
111 279
112 - return {roleIds = roleIds, infos = infos} 280 +-- 刷新 玩家数据
  281 +function CMD.refreshRoleInfo(change)
  282 + if not next(RoleInfo) then return end
  283 + if RoleInfo[change.id] then
  284 + for field, value in pairs(change) do
  285 + if field ~= "id" then
  286 + RoleInfo[change.id][field] = value
  287 + end
  288 + end
  289 + end
113 end 290 end
114 291
  292 +------------------------------------------------------
  293 +function CMD.start()
  294 + redisd = skynet.localname(".REDIS")
  295 + pvpInfo = require("models.Pvpd").new({key = "cross:pvpInfo"})
  296 + pvpInfo:load()
  297 +end
  298 +
  299 +---------------------------------------------------------
  300 +
115 local function __init__() 301 local function __init__()
116 skynet.dispatch("lua", function(_, _, command, ...) 302 skynet.dispatch("lua", function(_, _, command, ...)
117 local f = CMD[command] 303 local f = CMD[command]
@@ -119,7 +305,8 @@ local function __init__() @@ -119,7 +305,8 @@ local function __init__()
119 skynet.ret(skynet.pack(f(...))) 305 skynet.ret(skynet.pack(f(...)))
120 end 306 end
121 end) 307 end)
122 - redisd = skynet.localname(".REDIS") 308 + csvdb = sharedata.query("csvdata")
  309 +
123 skynet.register(".PVPCROSS") 310 skynet.register(".PVPCROSS")
124 end 311 end
125 312
src/services/watchdog.lua
@@ -68,6 +68,7 @@ function CMD.start(conf) @@ -68,6 +68,7 @@ function CMD.start(conf)
68 if use_logd == 1 then 68 if use_logd == 1 then
69 skynet.call(logd, "lua", "open") 69 skynet.call(logd, "lua", "open")
70 end 70 end
  71 + skynet.call(pvpd, "lua", "start")
71 -- 开启agent状态检测定时器 72 -- 开启agent状态检测定时器
72 check_agent_status() 73 check_agent_status()
73 -- 创建广播服务 74 -- 创建广播服务
@@ -83,8 +84,6 @@ function CMD.start(conf) @@ -83,8 +84,6 @@ function CMD.start(conf)
83 globald = skynet.newservice("services/globald") 84 globald = skynet.newservice("services/globald")
84 skynet.call(globald, "lua", "start") 85 skynet.call(globald, "lua", "start")
85 86
86 - pvpd = skynet.newservice("services/pvpd")  
87 - cluster.register("pvpd", pvpd)  
88 local servId = tonumber(skynet.getenv("servId")) 87 local servId = tonumber(skynet.getenv("servId"))
89 cluster.open("server" .. servId) 88 cluster.open("server" .. servId)
90 end 89 end
@@ -120,6 +119,9 @@ skynet.start(function() @@ -120,6 +119,9 @@ skynet.start(function()
120 if use_logd == 1 then 119 if use_logd == 1 then
121 logd = skynet.newservice("services/logd") 120 logd = skynet.newservice("services/logd")
122 end 121 end
  122 + -- pvp 服务
  123 + pvpd = skynet.newservice("services/pvpd")
  124 + cluster.register("pvpd", pvpd)
123 125
124 local poold = skynet.newservice("services/poold") 126 local poold = skynet.newservice("services/poold")
125 local obj = skynet.call(poold, "lua", "start", pool_size) 127 local obj = skynet.call(poold, "lua", "start", pool_size)