Commit e459a5fc804fd15a045a6b4036fcc8cbf75bd8e9
1 parent
ae20365b
战斗回合检查同步以及回合数据缓存
Showing
3 changed files
with
30 additions
and
7 deletions
Show diff stats
src/actions/AdvAction.lua
@@ -102,8 +102,11 @@ function _M.nextTurnRpc(agent, data) | @@ -102,8 +102,11 @@ function _M.nextTurnRpc(agent, data) | ||
102 | local role = agent.role | 102 | local role = agent.role |
103 | local msg = MsgPack.unpack(data) | 103 | local msg = MsgPack.unpack(data) |
104 | local adv = role:getAdvData() | 104 | local adv = role:getAdvData() |
105 | - local status = adv:nextBattleTurn() | ||
106 | - if not status then return end | 105 | + local status = adv:nextBattleTurn(msg.turn) |
106 | + if not status then -- 数据不同步则发送缓存数据 | ||
107 | + SendPacket(actionCodes.Adv_nextTurnRpc, MsgPack.pack({events = adv.tempBackEvents})) | ||
108 | + return true | ||
109 | + end | ||
107 | SendPacket(actionCodes.Adv_nextTurnRpc, MsgPack.pack({events = adv:popBackEvents()})) | 110 | SendPacket(actionCodes.Adv_nextTurnRpc, MsgPack.pack({events = adv:popBackEvents()})) |
108 | return true | 111 | return true |
109 | end | 112 | end |
src/adv/Adv.lua
@@ -442,6 +442,7 @@ function Adv:ctor(owner) | @@ -442,6 +442,7 @@ function Adv:ctor(owner) | ||
442 | self.advTeam = self.owner:getProperty("advTeam") --这个变量置空使用 table.clear | 442 | self.advTeam = self.owner:getProperty("advTeam") --这个变量置空使用 table.clear |
443 | self:clear() | 443 | self:clear() |
444 | self.backEvents = {} --发给客户端的事件组 | 444 | self.backEvents = {} --发给客户端的事件组 |
445 | + self.tempBackEvents = {} --发给客户端的事件组(缓存) | ||
445 | end | 446 | end |
446 | 447 | ||
447 | -- 清空自己组织的数据 | 448 | -- 清空自己组织的数据 |
@@ -899,9 +900,9 @@ function Adv:clickBlock(roomId, blockId, params) | @@ -899,9 +900,9 @@ function Adv:clickBlock(roomId, blockId, params) | ||
899 | end | 900 | end |
900 | 901 | ||
901 | --继续战斗 | 902 | --继续战斗 |
902 | -function Adv:nextBattleTurn() | 903 | +function Adv:nextBattleTurn(turn) |
903 | local enemy = self.battle.enemy | 904 | local enemy = self.battle.enemy |
904 | - if not enemy then | 905 | + if not enemy or self.battle:checkTurn(turn) then |
905 | return | 906 | return |
906 | end | 907 | end |
907 | local roomId, blockId = self.battle:getRBByEnemyId(enemy.id) | 908 | local roomId, blockId = self.battle:getRBByEnemyId(enemy.id) |
@@ -1120,6 +1121,8 @@ end | @@ -1120,6 +1121,8 @@ end | ||
1120 | 1121 | ||
1121 | function Adv:popBackEvents() | 1122 | function Adv:popBackEvents() |
1122 | local events = self.backEvents | 1123 | local events = self.backEvents |
1124 | + -- TODO 缓存数据需要分类,防止发错,暂时只有战斗,可以不分 | ||
1125 | + self.tempBackEvents = events | ||
1123 | self.backEvents = {} | 1126 | self.backEvents = {} |
1124 | return events | 1127 | return events |
1125 | end | 1128 | end |
src/adv/AdvBattle.lua
@@ -8,6 +8,7 @@ function Battle:ctor(adv) | @@ -8,6 +8,7 @@ function Battle:ctor(adv) | ||
8 | self.isNewPlayer = false | 8 | self.isNewPlayer = false |
9 | self.enemy = nil | 9 | self.enemy = nil |
10 | self.enemys = {} --怪 | 10 | self.enemys = {} --怪 |
11 | + self.tempData = {} -- 临时回合数据 | ||
11 | self:initPlayer() | 12 | self:initPlayer() |
12 | self:initEnemys() | 13 | self:initEnemys() |
13 | self:initAfter() | 14 | self:initAfter() |
@@ -112,7 +113,9 @@ end | @@ -112,7 +113,9 @@ end | ||
112 | 113 | ||
113 | --战斗开始 | 114 | --战斗开始 |
114 | function Battle:battleBegin(roomId, blockId) | 115 | function Battle:battleBegin(roomId, blockId) |
116 | + self.tempData = {} -- 清理上次战斗数据 | ||
115 | if self.enemy then | 117 | if self.enemy then |
118 | + self.player:reset(self.adv.advTeam.player) | ||
116 | self.enemy:reset(self.adv.rooms[self.enemy.roomId].blocks[self.enemy.blockId].event.enemy) | 119 | self.enemy:reset(self.adv.rooms[self.enemy.roomId].blocks[self.enemy.blockId].event.enemy) |
117 | end | 120 | end |
118 | local enemy = self:getEnemy(roomId, blockId) | 121 | local enemy = self:getEnemy(roomId, blockId) |
@@ -124,10 +127,16 @@ function Battle:battleBegin(roomId, blockId) | @@ -124,10 +127,16 @@ function Battle:battleBegin(roomId, blockId) | ||
124 | end | 127 | end |
125 | end | 128 | end |
126 | 129 | ||
130 | +-- 检查回合数同步 | ||
131 | +function Battle:checkTurn(turn) | ||
132 | + if self.tempData[turn] then | ||
133 | + return true | ||
134 | + end | ||
135 | +end | ||
136 | + | ||
127 | -- 战斗内一回合 | 137 | -- 战斗内一回合 |
128 | function Battle:doBattleTurn() | 138 | function Battle:doBattleTurn() |
129 | local enemy = self.enemy | 139 | local enemy = self.enemy |
130 | - if not enemy then return end | ||
131 | -- 玩家先出手 | 140 | -- 玩家先出手 |
132 | self.adv:backAtk(nil, enemy.id) | 141 | self.adv:backAtk(nil, enemy.id) |
133 | self:doPlayerTurn(self.player, enemy) | 142 | self:doPlayerTurn(self.player, enemy) |
@@ -188,13 +197,21 @@ function Battle:afterRound() | @@ -188,13 +197,21 @@ function Battle:afterRound() | ||
188 | else | 197 | else |
189 | self.player:hurt(self.player.hpMax / 10, nil, {hurtType = 4}) | 198 | self.player:hurt(self.player.hpMax / 10, nil, {hurtType = 4}) |
190 | end | 199 | end |
191 | - | ||
192 | - | ||
193 | if self.player.isDead then | 200 | if self.player.isDead then |
194 | self.adv:over(false) | 201 | self.adv:over(false) |
195 | end | 202 | end |
196 | end | 203 | end |
197 | 204 | ||
205 | +-- 写入临时数据 | ||
206 | +function Battle:getTempDB() | ||
207 | + local turnDB = {} | ||
208 | + if self.enemy then | ||
209 | + turnDB.enemy = self.enemy:getDB() | ||
210 | + end | ||
211 | + turnDB.player = self.player:getDB() | ||
212 | + table.insert(self.tempData, turnDB) | ||
213 | +end | ||
214 | + | ||
198 | --写入数据 | 215 | --写入数据 |
199 | function Battle:getDB() | 216 | function Battle:getDB() |
200 | if not self.enemy then | 217 | if not self.enemy then |