TowerAction.lua
2.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
local ipairs = ipairs
local table = table
local math = math
local redisproxy = redisproxy
local MsgPack = MsgPack
local _M = {}
function _M.roleFormatRpc(agent , data)
local role = agent.role
local msg = MsgPack.unpack(data)
local towerTeam = role:getProperty("towerF")
for slot, heroId in pairs(msg.heros) do
if not role.heros[heroId] then
return
end
end
table.clear(towerTeam)
towerTeam.heros = {}
for slot, heroId in pairs(msg.heros) do
towerTeam.heros[slot] = heroId
end
towerTeam.leader = msg.leader
role:updateProperty({field = "towerF", value = towerTeam})
SendPacket(actionCodes.Tower_roleFormatRpc, '')
return true
end
local function getUpdateTime(lastCount, lastTime)
local nextCount, nextTime = lastCount, skynet.timex()
if lastTime then
local addCount = math.floor((skynet.timex() - lastTime) / (globalCsv.tower_count_up * 60))
nextCount = math.min(lastCount + addCount, globalCsv.tower_count_limit)
nextTime = lastTime + addCount * (globalCsv.tower_count_up * 60)
end
return nextCount, nextTime
end
function _M.startBattleRpc(agent, data)
local role = agent.role
local msg = MsgPack.unpack(data)
local id = msg.id
local towerInfo = role:getProperty("towerInfo")
if towerInfo.l ~= id then return end -- 层数不对
if not csvdb["tower_battleCsv"][id] then return end
local curCount, nextTime = getUpdateTime(towerInfo.c, towerInfo.t)
if curCount < 1 then return end -- 没有次数返回
--搞起来
towerInfo.c = curCount - 1
towerInfo.t = nextTime
local key = tostring(math.random())
towerInfo.k = key
role:updateProperty({field = "towerInfo", value = towerInfo})
SendPacket(actionCodes.Tower_startBattleRpc, '')
return true
end
function _M.endBattleRpc(agent, data)
local role = agent.role
local msg = MsgPack.unpack(data)
local id = msg.id
local key = msg.key
local passTime = msg.passTime
local towerInfo = role:getProperty("towerInfo")
if towerInfo.l ~= id or not towerInfo.k or towerInfo.k ~= key then return end
local curTower = csvdb["tower_battleCsv"][id]
if not curTower then return end
local curCount, nextTime = getUpdateTime(towerInfo.c, towerInfo.t)
local reward
if msg.starNum and msg.starNum > 0 then --win
curCount = math.min(curCount + 1, globalCsv.tower_count_limit) -- 返还次数
towerInfo.l = towerInfo.l + 1
reward = role:award(curTower.reward)
end
towerInfo.c = curCount
towerInfo.t = nextTime
towerInfo.k = nil
role:updateProperty({field = "towerInfo", value = towerInfo})
SendPacket(actionCodes.Tower_endBattleRpc, MsgPack.pack({reward = reward}))
return true
end
function _M.rankRpc(agent , data)
local role = agent.role
local rankList = {}
SendPacket(actionCodes.Tower_rankRpc, MsgPack.pack({rankList = rankList}))
return true
end
return _M