AdvBlock.lua
3.8 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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
--块类型
local AdvCommon = require "adv.AdvCommon"
local Passive = require "adv.AdvPassive"
local Block = class("AdvBlock")
function Block:ctor(room, blockId, event, isOpen, trapId)
self.room = room
self.blockId = blockId
self.col, self.row = AdvCommon.getCrById(self.blockId)
self.isOpen = isOpen and true or false
self.trapId = trapId
self:updateEvent(event)
end
function Block:isBoss()
return self:getEventType() == AdvEventType.BOSS
end
function Block:isMonster()
return (self:getEventType() == AdvEventType.BOSS or self:getEventType() == AdvEventType.Monster)
end
function Block:isBuild()
return self:getEventType() == AdvEventType.Build
end
function Block:getEventType()
return self.event and self.event.etype
end
function Block:updateEvent(event)
self.event = event
end
function Block:clear()
if self:getEventType() == AdvEventType.Trap then
self.trapId = self.event.id
end
self.event = nil
end
function Block:randomEvent()
local room = self.room
local map = room.map
local adv = map.adv
--如果翻开有数据处理在这里处理
local randomFunc = {}
--怪
randomFunc[AdvEventType.Monster] = function()
self.event.mId = adv.lastEnemyId --给怪一个有序id 回合逻辑时使用
adv.lastEnemyId = adv.lastEnemyId + 1
local enemy = adv.battle:getEnemy(room.roomId, self.blockId, map.mapIdx)
if enemy then
enemy:unlock(self.event.mId)
else
enemy = adv.battle:addEnemy(room, self, map.mapIdx)
end
enemy:triggerPassive(Passive.BORN_ONCE)
adv.battle.player:triggerPassive(Passive.OPEN_MONSTER, {trigger = enemy})
for _, monster in pairs(adv.battle.player:getTeam(2)) do
adv.battle.player:triggerPassive(Passive.OPEN_MONSTER, {trigger = enemy})
end
end
randomFunc[AdvEventType.BOSS] = randomFunc[AdvEventType.Monster]
--掉落
randomFunc[AdvEventType.Drop] = function()
self.event.item = csvdb["event_dropCsv"][self.event.id]["range"]:randWeight(true)
end
--交易
randomFunc[AdvEventType.Trader] = function()
local data = csvdb["event_traderCsv"][self.event.id]
self.event.shop = {}
self.event.status = "" --购买次数状态 1 就是购买过了 -- 购买id就是shop索引
for i = 1, 10 do
local numS, rangeS = "num" .. i, "range" .. i
if data[numS] and data[rangeS] then
for j = 1, data[numS] do
table.insert(self.event.shop, data[rangeS]:randWeight(true))
end
else
break
end
end
end
--建筑
randomFunc[AdvEventType.Build] = function()
local build = adv.battle:getBuild(room.roomId, self.blockId, map.mapIdx)
if build then
build:unlock()
else
build = adv.battle:addEnemy(room, self, map.mapIdx)
end
build:triggerPassive(Passive.BORN_ONCE)
end
randomFunc[AdvEventType.Trap] = function()
local data = csvdb["event_trapCsv"][self.event.id]
local buffs = data.effect:toArray(true, "=")
for _, buffId in ipairs(buffs) do
adv.battle.player:addBuff(buffId)
end
if data.target == 1 then-- 给所有敌人同样增加buff
local enemys = adv.battle.player:getTeam(2)
for k , enemy in ipairs(enemys) do
for _, buffId in ipairs(buffs) do
enemy:addBuff(buffId)
end
end
end
if data.specialEff ~= "" then
local effect = data.specialEff:toArray(true, "=")
if effect[1] == 1 then
self.room.map.adv:mapItemChange(effect[2])
end
end
adv.battle.player:triggerPassive(Passive.CLICK_TRAP)
adv:checkAchievement(adv.AchievType.Trap, 1, self.event.id)
adv:backTrap()
self:clear()
end
if self.event then -- 随机出具体的事件
if randomFunc[self:getEventType()] then
randomFunc[self:getEventType()]()
end
end
end
--事件有需要额外处理的部分
function Block:open()
if self.isOpen then return end
local room = self.room
local map = room.map
local adv = map.adv
self:randomEvent()
adv.owner:checkTaskEnter("AdvOpenBlock")
self.isOpen = true
return true
end
return Block