Commit 3dab575106bbb79aa7bc6cae13eef2e8f91387b8

Authored by suhongyang
1 parent a734980c

修改冒险战斗逻辑

src/ProtocolCode.lua
... ... @@ -30,7 +30,6 @@ actionCodes = {
30 30 Adv_useItemRpc = 154,
31 31 Adv_useSkillRpc = 155,
32 32 Adv_exitAdvRpc = 156,
33   - Adv_nextTurnRpc = 157,
34 33  
35 34 Hero_loadInfos = 201,
36 35 Hero_updateProperty = 202,
... ...
src/actions/AdvAction.lua
... ... @@ -97,15 +97,4 @@ function _M.exitAdvRpc(agent, data)
97 97 return true
98 98 end
99 99  
100   ---继续战斗
101   -function _M.nextTurnRpc(agent, data)
102   - local role = agent.role
103   - local msg = MsgPack.unpack(data)
104   - local adv = role:getAdvData()
105   - local status = adv:nextBattleTurn()
106   - if not status then return end
107   - SendPacket(actionCodes.Adv_nextTurnRpc, MsgPack.pack({events = adv:popBackEvents()}))
108   - return true
109   -end
110   -
111 100 return _M
112 101 \ No newline at end of file
... ...
src/adv/Adv.lua
... ... @@ -699,7 +699,7 @@ end
699 699  
700 700 --战斗 普通攻击
701 701 local function clickMonster(self, room, block, params)
702   - self.battle:battleBegin(room.roomId, block.blockId)
  702 + self.battle:doBattle(room.roomId, block.blockId)
703 703 return true
704 704 end
705 705  
... ... @@ -882,13 +882,8 @@ function Adv:clickBlock(roomId, blockId, params)
882 882 end
883 883 end
884 884 local needChange = true
885   - if clickEvent and block.event then
886   - if block.event.etype == AdvEventType.Out then
887   - needChange = false
888   - end
889   - if (block.event.etype == AdvEventType.Monster or block.event.etype == AdvEventType.BOSS) and not self.battle:isBattleEnd() then
890   - needChange = false
891   - end
  885 + if clickEvent and block.event and block.event.etype == AdvEventType.Out then
  886 + needChange = false
892 887 end
893 888 if status and needChange then --出去了就不计算回合了
894 889 self:backBlockChange(roomId, blockId)
... ... @@ -898,22 +893,6 @@ function Adv:clickBlock(roomId, blockId, params)
898 893 return status
899 894 end
900 895  
901   ---继续战斗
902   -function Adv:nextBattleTurn()
903   - local enemy = self.battle.enemy
904   - if not enemy then
905   - return
906   - end
907   - local roomId, blockId = self.battle:getRBByEnemyId(enemy.id)
908   - self.battle:doBattleTurn()
909   - if self.battle:isBattleEnd() then
910   - self:backBlockChange(roomId, blockId)
911   - self:afterRound()
912   - end
913   - self:saveDB()
914   - return true
915   -end
916   -
917 896 --使用道具产生效果
918 897 function Adv:useItem(itemId, count, target)
919 898 count = count or 1
... ...
src/adv/AdvBattle.lua
... ... @@ -8,6 +8,7 @@ function Battle:ctor(adv)
8 8 self.isNewPlayer = false
9 9 self.enemy = nil
10 10 self.enemys = {} --怪
  11 + self.tempDB = {} -- 临时战斗数据
11 12 self:initPlayer()
12 13 self:initEnemys()
13 14 self:initAfter()
... ... @@ -21,10 +22,6 @@ function Battle:initAfter()
21 22 for _, enemy in pairs(self.enemys) do
22 23 enemy:initAfter(self.adv.rooms[enemy.roomId].blocks[enemy.blockId].event.enemy)
23 24 end
24   - if self.adv.advTeam.enemyId then
25   - local enemy = self:getEnemyById(self.adv.advTeam.enemyId)
26   - self.enemy = enemy
27   - end
28 25 end
29 26  
30 27 function Battle:initPlayer()
... ... @@ -104,23 +101,17 @@ function Battle:getRBByEnemyId(enemyId)
104 101 return enemy.roomId, enemy.blockId
105 102 end
106 103  
107   -function Battle:isBattleEnd()
108   - if not self.enemy then
109   - return true
110   - end
111   -end
112   -
113   ---战斗开始
114   -function Battle:battleBegin(roomId, blockId)
115   - if self.enemy then
116   - self.enemy:reset(self.adv.rooms[self.enemy.roomId].blocks[self.enemy.blockId].event.enemy)
117   - end
  104 +--战斗逻辑
  105 +function Battle:doBattle(roomId, blockId)
  106 + self.tempDB = {} -- 清理上次战斗的残余数据
118 107 local enemy = self:getEnemy(roomId, blockId)
119 108 if enemy then
120 109 self.enemy = enemy
121 110 self.player:battleBegin()
122 111 self.enemy:battleBegin()
123   - self:doBattleTurn()
  112 + while not enemy.isDead and not self.player.isDead do
  113 + self:doBattleTurn()
  114 + end
124 115 end
125 116 end
126 117  
... ... @@ -141,9 +132,9 @@ function Battle:doBattleTurn()
141 132 local deadPlayer = enemy.isDead and enemy or self.player
142 133 deadPlayer:battleEnd()
143 134 self.enemy = nil
144   - else
145   - self.adv:backTurnEnd()
146 135 end
  136 + self.adv:backTurnEnd()
  137 + self:getTempDB()
147 138 end
148 139  
149 140 --战斗内角色回合逻辑
... ... @@ -189,20 +180,23 @@ function Battle:afterRound()
189 180 self.player:hurt(self.player.hpMax / 10, nil, {hurtType = 4})
190 181 end
191 182  
192   -
193 183 if self.player.isDead then
194 184 self.adv:over(false)
195 185 end
196 186 end
197 187  
  188 +--战斗每回合写入临时数据
  189 +function Battle:getTempDB()
  190 + local turnDB = {}
  191 + if self.enemy then
  192 + turnDB.enemy = self.enemy:getDB()
  193 + end
  194 + turnDB.player = self.player:getDB()
  195 + table.insert(self.tempDB, turnDB)
  196 +end
  197 +
198 198 --写入数据
199 199 function Battle:getDB()
200   - if not self.enemy then
201   - self.adv.advTeam.enemyId = nil
202   - else
203   - self.adv.advTeam.enemyId = self.enemy.id
204   - return
205   - end
206 200 self.adv.advTeam.player = self.player:getDB()
207 201 for _, enemy in ipairs(self.enemys) do
208 202 local block = self.adv.rooms[enemy.roomId].blocks[enemy.blockId]
... ...