Blame view

src/actions/HangAction.lua 18.3 KB
384bb077   zhouahaihai   挂机
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
  local ipairs = ipairs
  local table = table
  local math = math
  local next = next
  local string = string
  local redisproxy = redisproxy
  local MsgPack = MsgPack
  local getRandomName = getRandomName
  local mcast_util = mcast_util
  local string_format = string.format
  local tonumber = tonumber
  local require = require
  local table_insert = table.insert
  local tconcat = table.concat
  local table_unpack = table.unpack
  
  local _M = {}
  
  local function checkReward(role)
  	local hangInfo = role:getProperty("hangInfo")
  	if not hangInfo.carbonId or not hangInfo.coinTime or not hangInfo.itemTime then
  		return
  	end
  	local carbonData = csvdb["idle_battleCsv"][hangInfo.carbonId]
bcf5bfbb   zhouahaihai   挂机new
25
26
  	local nowCoinTime = math.min(skynet.timex(), hangInfo.endCoinTime or 0)
  	local nowItemTime = math.min(skynet.timex(), hangInfo.endItemTime or 0)
384bb077   zhouahaihai   挂机
27
  
bcf5bfbb   zhouahaihai   挂机new
28
  	local coinCount = math.max(0, math.floor((nowCoinTime - hangInfo.coinTime) / globalCsv.idle_money_produce_cd))
9962b061   zhouahaihai   补充 挂机
29
  	hangInfo.coinTime = hangInfo.coinTime + coinCount * globalCsv.idle_money_produce_cd
384bb077   zhouahaihai   挂机
30
  
bcf5bfbb   zhouahaihai   挂机new
31
  	local itemCount = math.max(0, math.floor((nowItemTime - hangInfo.itemTime) / globalCsv.idle_item_produce_cd))
9962b061   zhouahaihai   补充 挂机
32
  	hangInfo.itemTime = hangInfo.itemTime + itemCount * globalCsv.idle_item_produce_cd
384bb077   zhouahaihai   挂机
33
34
35
36
  
  	local items = role:getProperty("hangBag")
  	items[ItemId.Gold] = (items[ItemId.Gold] or 0) + coinCount * carbonData.money
  	items[ItemId.Exp] = (items[ItemId.Exp] or 0) + coinCount * carbonData.exp
4b7c7c96   zhouahaihai   增加 清空 挂机 冒险gm 角色经验
37
  	items[ItemId.PlayerExp] = (items[ItemId.PlayerExp] or 0) + coinCount * carbonData.playerExp
384bb077   zhouahaihai   挂机
38
39
40
41
42
  
  	local pool = {}
  	for _, temp in pairs(carbonData.item:toArray()) do
  		table.insert(pool, temp:toArray(true, "="))
  	end
64e63ad0   wangyujie   完成需求:挂机栏位物品数量上限和钻...
43
44
45
  	local curFC = 0
  	local curIC = 0
  	for id, count in pairs(items) do
bcf5bfbb   zhouahaihai   挂机new
46
  		if id ~= ItemId.Gold and id ~= ItemId.Exp and id ~= ItemId.PlayerExp then
64e63ad0   wangyujie   完成需求:挂机栏位物品数量上限和钻...
47
48
  			curFC = curFC + math.ceil(count / globalCsv.idle_field_limit)
  			curIC = curIC + count
9962b061   zhouahaihai   补充 挂机
49
50
  		end
  	end
317a46a9   测试   添加特权卡
51
52
53
54
  
  	-- 特权卡挂机额外栏位
  	local privExtraCnt = role.storeData:getHangSlotExtraCount()
  	local selfFC = role:getProperty("hangBagLimit") + privExtraCnt
64e63ad0   wangyujie   完成需求:挂机栏位物品数量上限和钻...
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
  	local selfIC = selfFC * globalCsv.idle_field_limit
  
  	local function randomItem()
  		if curIC >= selfIC then
  			return
  		end
  		local tempPool = clone(pool)
  		while #tempPool > 0 do
  			local idx = math.randWeight(tempPool, 3)
  			local cur = pool[idx]
  			if (items[cur[1]] and math.ceil((items[cur[1]] + cur[2]) / globalCsv.idle_field_limit) > math.ceil(items[cur[1]] / globalCsv.idle_field_limit))
  					or not items[cur[1]] then	--要占用新栏位的情况
  				local addFC
  				if not items[cur[1]] then
  					addFC = math.ceil(cur[2] / globalCsv.idle_field_limit)
  				else
  					local frontC = items[cur[1]] % globalCsv.idle_field_limit
  					if frontC == 0 then
  						frontC = globalCsv.idle_field_limit
  					end
  					addFC = math.ceil((cur[2] - (globalCsv.idle_field_limit - frontC)) / globalCsv.idle_field_limit)
  				end
  				if curFC + addFC <= selfFC then
  					curFC = curFC + addFC
  					items[cur[1]] = (items[cur[1]] or 0) + cur[2]
  					break
  				else
  					--加不了,换别的东西
  					table.remove(tempPool, idx)
  				end
  			else
  				items[cur[1]] = items[cur[1]] + cur[2]
  				break
9962b061   zhouahaihai   补充 挂机
88
  			end
9962b061   zhouahaihai   补充 挂机
89
  		end
64e63ad0   wangyujie   完成需求:挂机栏位物品数量上限和钻...
90
91
92
93
  		curIC = curIC + 1
  	end
  	for i = 1, itemCount do
  		randomItem()
384bb077   zhouahaihai   挂机
94
95
96
  	end
  
  	if coinCount > 0 or itemCount > 0 then
5af8b4aa   zhouahaihai   挂机down
97
  		return true
384bb077   zhouahaihai   挂机
98
99
100
  	end
  end
  
384bb077   zhouahaihai   挂机
101
102
103
104
105
106
  --开始一个新的关卡
  function _M.startRpc( agent, data )
  	local role = agent.role
  	local msg = MsgPack.unpack(data)
  	local carbonId = msg.carbonId
  	local carbonData = csvdb["idle_battleCsv"][carbonId]
f60b89b1   zhouhaihai   奖励副本
107
  	if not carbonData then return 1 end
384bb077   zhouahaihai   挂机
108
  
d232676a   zhouhaihai   功能解锁 冒险返回
109
110
111
112
  	if math.floor(carbonId / 10000) ~= 1 then
  		if not role:isFuncUnlock(FuncUnlock.DifficultHang) then return end
  	end
  
5d80aca6   zhouahaihai   挂机优化
113
114
  
  	for _, preCarbonId in ipairs(carbonData.prepose:toArray(true, "=")) do
33be3111   zhouhaihai   修改hangPass 结构
115
  		if not role:checkHangPass(preCarbonId) then return 2 end
5d80aca6   zhouahaihai   挂机优化
116
  	end
384bb077   zhouahaihai   挂机
117
  
5af8b4aa   zhouahaihai   挂机down
118
119
120
  	if checkReward(role) then
  		role:updateProperty({field = "hangBag", value = role:getProperty("hangBag")})
  	end
384bb077   zhouahaihai   挂机
121
122
  
  	local hangInfo = role:getProperty("hangInfo")
5af8b4aa   zhouahaihai   挂机down
123
  	local isNew = not hangInfo.carbonId
384bb077   zhouahaihai   挂机
124
125
  	hangInfo.carbonId = carbonId
  	local nowTime = skynet.timex()
5af8b4aa   zhouahaihai   挂机down
126
  	if isNew then
1103490d   zhouhaihai   设置 国家时间错误
127
128
  		hangInfo.coinTime = nowTime
  		hangInfo.itemTime = nowTime
bcf5bfbb   zhouahaihai   挂机new
129
130
  		hangInfo.endCoinTime = nowTime + globalCsv.idle_producetime_max
  		hangInfo.endItemTime = nowTime + globalCsv.idle_producetime_max
1103490d   zhouhaihai   设置 国家时间错误
131
132
133
  	else
  		hangInfo.coinTime = math.min(nowTime, hangInfo.endCoinTime)
  		hangInfo.itemTime = math.min(nowTime, hangInfo.endItemTime)
5af8b4aa   zhouahaihai   挂机down
134
  	end
33be3111   zhouhaihai   修改hangPass 结构
135
  	if not role:checkHangPass(carbonId) then
5af8b4aa   zhouahaihai   挂机down
136
137
138
  		hangInfo.bossTime = nowTime + carbonData.idle_time
  	else
  		hangInfo.bossTime = nil
384bb077   zhouahaihai   挂机
139
140
141
  	end
  	role:updateProperty({field = "hangInfo", value = hangInfo})
  
3133cb76   zhouhaihai   日志
142
143
  	role:log("hang_action", {desc = "startHang", int1 = carbonId})
  
384bb077   zhouahaihai   挂机
144
145
146
147
148
149
150
151
  	SendPacket(actionCodes.Hang_startRpc, '')
  	return true
  end
  
  -- 每隔1分钟检查一次
  function _M.checkRpc(agent, data)
  	local role = agent.role
  	-- local msg = MsgPack.unpack(data)
5af8b4aa   zhouahaihai   挂机down
152
153
154
155
  	if checkReward(role) then
  		role:updateProperty({field = "hangBag", value = role:getProperty("hangBag")})
  		role:updateProperty({field = "hangInfo", value = role:getProperty("hangInfo")})
  	end
384bb077   zhouahaihai   挂机
156
157
158
159
  	SendPacket(actionCodes.Hang_checkRpc, MsgPack.pack({}))
  	return true
  end
  
cc5ca7f3   zhouhaihai   缓存battleKey
160
  local _BattleKey = nil
384bb077   zhouahaihai   挂机
161
162
163
  function _M.startBattleRpc(agent, data)
  	local role = agent.role
  	local msg = MsgPack.unpack(data)
bcf5bfbb   zhouahaihai   挂机new
164
165
  	local carbonId = msg.carbonId
  	local curData = csvdb["idle_battleCsv"][carbonId]
a1e08c9c   zhengshouren   宝箱关战斗异常
166
167
168
  	if not curData then 
  		return 1
  	end
bcf5bfbb   zhouahaihai   挂机new
169
  
384bb077   zhouahaihai   挂机
170
  	local hangInfo = role:getProperty("hangInfo")
bcf5bfbb   zhouahaihai   挂机new
171
  	if curData.main ~= 1 then
a1e08c9c   zhengshouren   宝箱关战斗异常
172
173
174
  		if carbonId ~= hangInfo.carbonId then 
  			return 2
  		end
bcf5bfbb   zhouahaihai   挂机new
175
176
  	end
  
33be3111   zhouhaihai   修改hangPass 结构
177
  	if role:checkHangPass(carbonId) then 
a1e08c9c   zhengshouren   宝箱关战斗异常
178
179
  		return 3
  	end
bcf5bfbb   zhouahaihai   挂机new
180
  
cc5ca7f3   zhouhaihai   缓存battleKey
181
182
  	_BattleKey = tostring(math.random())
  
53e8037e   zhouhaihai   任务
183
  	role:checkTaskEnter("HangBattle", {id = carbonId})
52c87300   zhouhaihai   bug
184
  	SendPacket(actionCodes.Hang_startBattleRpc, MsgPack.pack({key = _BattleKey}))
384bb077   zhouahaihai   挂机
185
186
187
188
189
190
191
  	return true
  end
  
  function _M.endBattleRpc(agent, data)
  	local role = agent.role
  	local msg = MsgPack.unpack(data)
  	local hangInfo = role:getProperty("hangInfo")
cc5ca7f3   zhouhaihai   缓存battleKey
192
  	if not msg.key or msg.key ~= _BattleKey then 
d6a66c74   zhouhaihai   校验失败也返回
193
194
  		SendPacket(actionCodes.Hang_endBattleRpc, MsgPack.pack({errorCode = 1}))
  		return true
4906ebd2   zhengshouren   宝箱关副本结算异常
195
  	end
bcf5bfbb   zhouahaihai   挂机new
196
197
  	local carbonId = msg.carbonId
  	local carbonData = csvdb["idle_battleCsv"][carbonId]
4906ebd2   zhengshouren   宝箱关副本结算异常
198
199
200
  	if not carbonData then
  		return 2
  	end
bcf5bfbb   zhouahaihai   挂机new
201
  	if carbonData.main ~= 1 then
4906ebd2   zhengshouren   宝箱关副本结算异常
202
203
204
  		if carbonId ~= hangInfo.carbonId then 
  			return 3
  		end
bcf5bfbb   zhouahaihai   挂机new
205
  	end
33be3111   zhouhaihai   修改hangPass 结构
206
207
  
  	if role:checkHangPass(carbonId) then 
4906ebd2   zhengshouren   宝箱关副本结算异常
208
209
  		return 4
  	end
7bb30dca   zhouhaihai   修改发奖
210
  	local reward, change
384bb077   zhouahaihai   挂机
211
  	if msg.starNum and msg.starNum > 0 then --win
33be3111   zhouhaihai   修改hangPass 结构
212
  		role:hangFinish(carbonId)
bcf5bfbb   zhouahaihai   挂机new
213
214
215
  		if carbonData.main ~= 1 then
  			hangInfo.bossTime = nil
  		end
384bb077   zhouahaihai   挂机
216
217
  		-- reward
  		reward = {}
384bb077   zhouahaihai   挂机
218
219
  		reward[ItemId.Gold] = carbonData.money_clear
  		reward[ItemId.Exp] = carbonData.exp_clear
00115a7a   zhouahaihai   奖励发放
220
  		reward[ItemId.PlayerExp] = carbonData.playerExp_clear
384bb077   zhouahaihai   挂机
221
  		for itemId, count in pairs(carbonData.item_clear:toNumMap()) do
384bb077   zhouahaihai   挂机
222
223
  			reward[itemId] = count
  		end
7bb30dca   zhouhaihai   修改发奖
224
  		reward, change = role:award(reward, {log = {desc = "hangBattle", int1 = carbonId}})
00e663bd   zhouhaihai   剧情相关
225
  
03a6166a   zhouhaihai   餐厅优化
226
  		role:checkTaskEnter("HangPass", {id = carbonId})
384bb077   zhouahaihai   挂机
227
  	end
384bb077   zhouahaihai   挂机
228
  	role:updateProperty({field = "hangInfo", value = hangInfo})
33be3111   zhouhaihai   修改hangPass 结构
229
230
231
  	
  	local team = role:getProperty("pvpTC")
  	role:log("hang_action", {desc = "hangBattle", short1 = msg.starNum > 0 and 1 or 0, int1 = carbonId, int2 = role:getProperty("hangTBV"), cint1 = role:getHerosCamp(team.heros)})
3133cb76   zhouhaihai   日志
232
  
384bb077   zhouahaihai   挂机
233
234
235
  	SendPacket(actionCodes.Hang_endBattleRpc, MsgPack.pack({
  		starNum = msg.starNum, 
  		reward = reward,
7bb30dca   zhouhaihai   修改发奖
236
  		change = change,
384bb077   zhouahaihai   挂机
237
238
239
240
  		}))
  	return true
  end
  
7efe5275   zhouhaihai   检查leader
241
242
243
244
245
246
247
  local function checkLeader(heros, leader)
  	if not leader then return end
  	for slot, heroId in pairs(heros) do
  		if heroId == leader then return true end
  	end
  end
  
384bb077   zhouahaihai   挂机
248
249
250
  function _M.roleFormatRpc(agent , data)
  	local role = agent.role
  	local msg = MsgPack.unpack(data)
384bb077   zhouahaihai   挂机
251
252
253
  	local hangTeam = role:getProperty("hangTeam")
  	for slot, heroId in pairs(msg.heros) do
  		if not role.heros[heroId] then
e6ebee44   zhouhaihai   编队bug
254
  			return 1
384bb077   zhouahaihai   挂机
255
256
  		end
  	end
f603a60f   zhouhaihai   支援技实装
257
258
259
  
  	local supports = {}
  	for slot, support in pairs(msg.supports or {}) do
e6ebee44   zhouhaihai   编队bug
260
  		if slot ~= 1 and slot ~= 2 then return 2 end
f603a60f   zhouhaihai   支援技实装
261
  		local level = role.dinerData:getProperty("dishTree"):getv(support, 0)
e6ebee44   zhouhaihai   编队bug
262
  		if level <= 0 then return 3 end
f603a60f   zhouhaihai   支援技实装
263
264
  		supports[slot] = support
  	end
e6ebee44   zhouhaihai   编队bug
265
  	if not checkLeader(msg.heros, msg.leader) then return 4 end
f603a60f   zhouhaihai   支援技实装
266
  
384bb077   zhouahaihai   挂机
267
268
269
270
271
272
  	table.clear(hangTeam)
  	hangTeam.heros = {}
  	for slot, heroId in pairs(msg.heros) do
  		hangTeam.heros[slot] = heroId
  	end
  	hangTeam.leader = msg.leader
f603a60f   zhouhaihai   支援技实装
273
  	hangTeam.supports = supports
fa565e0c   zhouhaihai   优化结构
274
  	role:saveHangTeam(hangTeam)
384bb077   zhouahaihai   挂机
275
276
277
278
  	SendPacket(actionCodes.Hang_roleFormatRpc, '')
  	return true
  end
  
5af8b4aa   zhouahaihai   挂机down
279
280
281
282
283
  function _M.getRewardRpc(agent , data)
  	local role = agent.role
  	checkReward(role)
  	local items = role:getProperty("hangBag")
  	if not next(items) then return end
7bb30dca   zhouhaihai   修改发奖
284
  	local reward, change = role:award(items, {log = {desc = "hangReward"}})
5af8b4aa   zhouahaihai   挂机down
285
286
287
  	table.clear(items)
  	local hangInfo = role:getProperty("hangInfo")
  	local nowTime = skynet.timex()
bcf5bfbb   zhouahaihai   挂机new
288
289
  	hangInfo.endItemTime = nowTime + globalCsv.idle_producetime_max
  	hangInfo.endCoinTime = nowTime + globalCsv.idle_producetime_max
5af8b4aa   zhouahaihai   挂机down
290
291
292
293
  	hangInfo.coinTime = nowTime
  	hangInfo.itemTime = nowTime
  	role:updateProperty({field = "hangBag", value = items})
  	role:updateProperty({field = "hangInfo", value = hangInfo})
03a6166a   zhouhaihai   餐厅优化
294
  	role:checkTaskEnter("HangGet")
53e8037e   zhouhaihai   任务
295
296
  	if reward[ItemId.Gold] then
  		role:checkTaskEnter("HangGetGold", {count = reward[ItemId.Gold]})
bcf5bfbb   zhouahaihai   挂机new
297
  	end
53e8037e   zhouhaihai   任务
298
  	SendPacket(actionCodes.Hang_getRewardRpc, MsgPack.pack({
7bb30dca   zhouhaihai   修改发奖
299
300
  		reward = reward,
  		change = change
bcf5bfbb   zhouahaihai   挂机new
301
302
303
304
  	}))
  	return true
  end
  
53e8037e   zhouhaihai   任务
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
  -- function _M.getRewardItemRpc(agent , data)
  -- 	local role = agent.role
  -- 	checkReward(role)
  -- 	local items = role:getProperty("hangBag")
  -- 	if not next(items) then return end
  
  -- 	local notNeed = {[ItemId.Gold] = 1, [ItemId.Exp] = 1, [ItemId.PlayerExp] = 1}
  -- 	local reward = {}
  -- 	for itemId , count in pairs(items) do
  -- 		if not notNeed[itemId] then
  -- 			reward[itemId] = count
  -- 			items[itemId] = nil
  -- 		end
  -- 	end
  -- 	if not next(reward) then return end
  -- 	local reward = role:award(reward)
  
  -- 	local hangInfo = role:getProperty("hangInfo")
  -- 	local nowTime = skynet.timex()
  -- 	hangInfo.endItemTime = nowTime + globalCsv.idle_producetime_max
  -- 	hangInfo.itemTime = nowTime
  -- 	role:updateProperty({field = "hangBag", value = items})
  -- 	role:updateProperty({field = "hangInfo", value = hangInfo})
  
  -- 	SendPacket(actionCodes.Hang_getRewardItemRpc, MsgPack.pack({
  -- 		reward = reward
  -- 	}))
  -- 	return true
  -- end
  
  -- function _M.getRewardCoinRpc(agent , data)
  -- 	local role = agent.role
  -- 	checkReward(role)
  -- 	local items = role:getProperty("hangBag")
  -- 	if not next(items) then return end
  
  -- 	local need = {[ItemId.Gold] = 1, [ItemId.Exp] = 1, [ItemId.PlayerExp] = 1}
  -- 	local reward = {}
  -- 	for itemId , count in pairs(items) do
  -- 		if need[itemId] then
  -- 			reward[itemId] = count
  -- 			items[itemId] = nil
  -- 		end
  -- 	end
  -- 	local reward = role:award(reward)
bcf5bfbb   zhouahaihai   挂机new
350
  	
53e8037e   zhouhaihai   任务
351
352
353
354
355
356
357
358
359
360
361
362
  -- 	local hangInfo = role:getProperty("hangInfo")
  -- 	local nowTime = skynet.timex()
  -- 	hangInfo.endCoinTime = nowTime + globalCsv.idle_producetime_max
  -- 	hangInfo.coinTime = nowTime
  -- 	role:updateProperty({field = "hangBag", value = items})
  -- 	role:updateProperty({field = "hangInfo", value = hangInfo})
  
  -- 	SendPacket(actionCodes.Hang_getRewardCoinRpc, MsgPack.pack({
  -- 		reward = reward
  -- 	}))
  -- 	return true
  -- end
9962b061   zhouahaihai   补充 挂机
363
364
365
366
367
368
369
370
371
372
373
374
375
  
  function _M.quickRpc(agent , data)
  	local role = agent.role
  
  	local hangInfo = role:getProperty("hangInfo")
  	if not hangInfo.carbonId then return end
  	local carbonData = csvdb["idle_battleCsv"][hangInfo.carbonId]
  
  	local curCount = role.dailyData:getProperty("hangQC") + 1
  	local costs = globalCsv.idle_quickproduce_cost:toArray(true, "=")
  	if not costs[curCount] then return end
  	if costs[curCount] > 0 then
  		if not role:checkItemEnough({[ItemId.Diamond] = costs[curCount]}) then return end
3133cb76   zhouhaihai   日志
376
  		role:costItems({[ItemId.Diamond] = costs[curCount]}, {log = {desc = "quickHang", int1 = hangInfo.carbonId}})
9962b061   zhouahaihai   补充 挂机
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
  	end
  
  	role.dailyData:updateProperty({field = "hangQC", value = curCount})
  
  	local time = globalCsv.idle_quickproduce_time
  	local reward = {}
  
  	local coinCount = math.floor(time / globalCsv.idle_money_produce_cd)
  	local itemCount = math.floor(time / globalCsv.idle_item_produce_cd)
  	reward[ItemId.Gold] = (reward[ItemId.Gold] or 0) + coinCount * carbonData.money
  	reward[ItemId.Exp] = (reward[ItemId.Exp] or 0) + coinCount * carbonData.exp
  
  	local pool = {}
  	for _, temp in pairs(carbonData.item:toArray()) do
  		table.insert(pool, temp:toArray(true, "="))
  	end
  	for i = 1, itemCount do
  		local cur = pool[math.randWeight(pool, 3)]
  		reward[cur[1]] = (reward[cur[1]] or 0) + cur[2]
  	end
317a46a9   测试   添加特权卡
397
398
399
400
401
402
403
404
405
  
  	-- 特权卡获取加速获得额外道具
  	local coef = role.storeData:getProduceItemSpeedCoef()
  	if coef > 1 then
  		for k, cnt in pairs(reward) do
  			reward[k] = math.floor(cnt * coef)
  		end
  	end
  
7bb30dca   zhouhaihai   修改发奖
406
407
  	local change
  	reward, change = role:award(reward, {log = {desc = "quickHang", int1 = hangInfo.carbonId}})
f60b89b1   zhouhaihai   奖励副本
408
409
410
  	if reward[ItemId.Gold] then
  		role:checkTaskEnter("HangGetGold", {count = reward[ItemId.Gold]})
  	end
53e8037e   zhouhaihai   任务
411
  	role:checkTaskEnter("HangQuick")
9962b061   zhouahaihai   补充 挂机
412
  	SendPacket(actionCodes.Hang_quickRpc, MsgPack.pack({
7bb30dca   zhouhaihai   修改发奖
413
414
  		reward = reward,
  		change = change
9962b061   zhouahaihai   补充 挂机
415
416
417
418
  	}))
  	return true
  end
  
f60b89b1   zhouhaihai   奖励副本
419
420
421
422
423
424
425
426
427
  function _M.bonusFormatRpc(agent , data)
  	local role = agent.role
  	local msg = MsgPack.unpack(data)
  	local bTeam = role:getProperty("bTeam")
  	for slot, heroId in pairs(msg.heros) do
  		if not role.heros[heroId] then
  			return
  		end
  	end
f603a60f   zhouhaihai   支援技实装
428
429
430
431
432
433
434
  	local supports = {}
  	for slot, support in pairs(msg.supports) do
  		if slot ~= 1 and slot ~= 2 then return end
  		local level = role.dinerData:getProperty("dishTree"):getv(support, 0)
  		if level <= 0 then return end
  		supports[slot] = support
  	end
7efe5275   zhouhaihai   检查leader
435
436
  	if not checkLeader(msg.heros, msg.leader) then return end
  	
f60b89b1   zhouhaihai   奖励副本
437
438
439
440
441
442
  	table.clear(bTeam)
  	bTeam.heros = {}
  	for slot, heroId in pairs(msg.heros) do
  		bTeam.heros[slot] = heroId
  	end
  	bTeam.leader = msg.leader
f603a60f   zhouhaihai   支援技实装
443
  	bTeam.supports = supports
f60b89b1   zhouhaihai   奖励副本
444
445
446
447
448
449
450
451
452
453
454
455
456
  
  	role:updateProperty({field = "bTeam", value = bTeam}) 
  	SendPacket(actionCodes.Hang_bonusFormatRpc, '')
  	return true
  end
  
  function _M.buyBonusCountRpc(agent, data)
  	local role = agent.role
  	local msg = MsgPack.unpack(data)
  
  	local count = msg.count
  	local btype = msg.type
  
3133cb76   zhouhaihai   日志
457
  	if not TimeReset["DailyBattle" .. btype] then return end
f60b89b1   zhouhaihai   奖励副本
458
459
460
461
462
463
  
  	local bonusC = role.dailyData:getProperty("bonusC")
  	bonusC[btype] = bonusC[btype] or {c = 0, b = 0}
  	local lastCount = globalCsv.bonus_daily_buy_count - bonusC[btype]["b"]
  	if math.illegalNum(count, 1, lastCount)  then return 1 end
  
3133cb76   zhouhaihai   日志
464
  	if not role:checkItemEnough({[ItemId.Diamond] = globalCsv.bonus_buy_cost * count}) then return 2 end
f60b89b1   zhouhaihai   奖励副本
465
  
3133cb76   zhouhaihai   日志
466
  	role:costItems({[ItemId.Diamond] = globalCsv.bonus_buy_cost * count}, {log = {desc = "buyBonusCount", short1 = btype, int1 = count}})
d481965d   zhouhaihai   购买次数bug
467
468
  	bonusC[btype]["b"] = bonusC[btype]["b"] + count
  	bonusC[btype]["c"] = bonusC[btype]["c"] - count
f60b89b1   zhouhaihai   奖励副本
469
470
471
472
473
474
475
476
477
478
479
480
  
  	role.dailyData:updateProperty({field = "bonusC", value = bonusC})
  
  	SendPacket(actionCodes.Hang_buyBonusCountRpc, '')
  	return true
  end
  
  function _M.startBonusBattleRpc(agent, data)
  	local role = agent.role
  	local msg = MsgPack.unpack(data)
  	local id = msg.id
  
d232676a   zhouhaihai   功能解锁 冒险返回
481
482
  	if not role:isFuncUnlock(FuncUnlock.BonusBattle) then return end
  
f60b89b1   zhouhaihai   奖励副本
483
  	local bonusData = csvdb["bonus_battleCsv"][id]
bc902e2d   zhouhaihai   增加开放判断
484
485
486
  
  	if not role:isTimeResetOpen(TimeReset["DailyBattle" .. bonusData.type]) then return end
  
f60b89b1   zhouhaihai   奖励副本
487
  	if not bonusData then return 1 end
33be3111   zhouhaihai   修改hangPass 结构
488
  	if not role:checkHangPass(bonusData.unlock) then return 2 end
f60b89b1   zhouhaihai   奖励副本
489
490
491
492
493
494
  
  	if not next(role:getProperty("bTeam")) then return 3 end
  
  	local bonusC = role.dailyData:getProperty("bonusC")
  	bonusC[bonusData.type] = bonusC[bonusData.type] or {c = 0, b = 0}
  	if globalCsv.bonus_daily_count - bonusC[bonusData.type]["c"] <= 0 then return 4 end
f60b89b1   zhouhaihai   奖励副本
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
  
  
  	role.__bonusBattleCache = {
  		key = tostring(math.random()),
  		id = id,
  	}
  	SendPacket(actionCodes.Hang_startBonusBattleRpc, MsgPack.pack({key = role.__bonusBattleCache.key}))
  	return true
  end
  
  function _M.endBonusBattleRpc(agent, data)
  	local role = agent.role
  	local msg = MsgPack.unpack(data)
  	local id = msg.id
  	local key = msg.key
  	local starNum = msg.starNum
  	if not role.__bonusBattleCache then return 1 end
  
d6a66c74   zhouhaihai   校验失败也返回
513
514
515
516
  	if role.__bonusBattleCache.id ~= id or role.__bonusBattleCache.key ~= key then 
  		SendPacket(actionCodes.Hang_endBonusBattleRpc, MsgPack.pack({errorCode = 1}))
  		return true
  	end
f60b89b1   zhouhaihai   奖励副本
517
518
  	local bonusData = csvdb["bonus_battleCsv"][id]
  
7bb30dca   zhouhaihai   修改发奖
519
  	local reward, change
f60b89b1   zhouhaihai   奖励副本
520
   	if starNum and starNum > 0 then
74a8fdc9   zhouhaihai   奖励副本 胜利扣除次数
521
522
523
524
525
526
527
   		-- 胜利扣除次数
   		local bonusC = role.dailyData:getProperty("bonusC")
  		bonusC[bonusData.type] = bonusC[bonusData.type] or {c = 0, b = 0}
  		if globalCsv.bonus_daily_count - bonusC[bonusData.type]["c"] <= 0 then return 3 end
  		bonusC[bonusData.type]["c"] = bonusC[bonusData.type]["c"] + 1
  		role.dailyData:updateProperty({field = "bonusC", value = bonusC})
  
b2747fbc   zhouhaihai   挂机
528
529
530
531
532
  		reward = bonusData.reward:toNumMap()
  		local chance = bonusData.chance:randWeight(true)
  		if chance[1] ~= 0 then
  			reward[chance[1]] = (reward[chance[1]] or 0) + chance[2]
  		end
7bb30dca   zhouhaihai   修改发奖
533
   		reward, change = role:award(reward, {log = {desc = "bonusBattle", int1 = id}})
f60b89b1   zhouhaihai   奖励副本
534
535
536
   		role:checkTaskEnter("BonusPass", {id = id})
   	end
  
3133cb76   zhouhaihai   日志
537
538
  	role:log("hang_action", {desc = "bonusBattle", short1 = msg.starNum > 0 and 1 or 0, int1 = id})
  
f60b89b1   zhouhaihai   奖励副本
539
540
  	SendPacket(actionCodes.Hang_endBonusBattleRpc, MsgPack.pack({
  		starNum = starNum, 
7bb30dca   zhouhaihai   修改发奖
541
542
543
  		reward = reward,
  		change = change
  	}))
f60b89b1   zhouhaihai   奖励副本
544
545
546
  	return true
  end
  
a6508219   zhouhaihai   挂机奖励
547
548
549
550
551
552
553
554
555
556
557
  function _M.hangGiftRpc(agent, data)
  	local role = agent.role
  	local msg = MsgPack.unpack(data)
  
  	local id = msg.id
  	local carbonData = csvdb["idle_battleCsv"][id]
  	if not carbonData or carbonData.item_clear_special == "" then return 1 end
  
  	local hangGift = role:getProperty("hangGift")
  	if hangGift[id] then return 2 end
  
7bb30dca   zhouhaihai   修改发奖
558
  	local reward, change = role:award(carbonData.item_clear_special, {log = {desc = "hangGift", int1 = id}})
a6508219   zhouhaihai   挂机奖励
559
560
561
562
  	role:log("hang_action", {desc = "hangGift",  int1 = id})
  
  	role:changeUpdates({{type = "hangGift", field = id, value = 1}})
  
7bb30dca   zhouhaihai   修改发奖
563
  	SendPacket(actionCodes.Hang_hangGiftRpc, MsgPack.pack({reward = reward, change = change}))
a6508219   zhouhaihai   挂机奖励
564
565
  	return true
  end
f60b89b1   zhouhaihai   奖励副本
566
  
64e63ad0   wangyujie   完成需求:挂机栏位物品数量上限和钻...
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
  function _M.bagFieldRpc(agent, data)
  	local role = agent.role
  	local curBL = role:getProperty("hangBagLimit")
  	local costD = globalCsv.idle_field_cost[curBL - globalCsv.idle_field_origin]
  	if not costD then
  		return 1
  	end
  	if costD ~= 0 and not role:checkItemEnough({[ItemId.Diamond] = costD}) then
  		return 2
  	end
  	role:updateProperty({field = "hangBagLimit", value = curBL + 1})
  	role:costItems({[ItemId.Diamond] = costD}, {log = {desc = "bagField"}})
  	SendPacket(actionCodes.Hang_bagFieldRpc, '')
  	return true
  end
f60b89b1   zhouhaihai   奖励副本
582
  
ed20f277   zhouhaihai   chatline 奖励
583
584
585
  function _M.chatLineRpc(agent, data)
  	local role = agent.role
  	local msg = MsgPack.unpack(data)
ed20f277   zhouhaihai   chatline 奖励
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
  	local id = msg.id
  
  	local idleData = csvdb["idle_battleCsv"][id]
  	if not idleData or idleData.chatline == 0 then
  		return
  	end
  
  	local chatline = role:getProperty("chatline")
  	if chatline[id] then return end
  
  	if not role:checkHangPass(id) then return end
  
  	chatline[id] = skynet.timex()
  	role:updateProperty({field = "chatline", value = chatline})
  
7bb30dca   zhouhaihai   修改发奖
601
  	local reward, change = role:award(idleData.chatline_reward, {log = {desc = "chatline", int1 = id}})
ed20f277   zhouhaihai   chatline 奖励
602
  	
7bb30dca   zhouhaihai   修改发奖
603
  	SendPacket(actionCodes.Hang_chatLineRpc, MsgPack.pack({reward = reward, change = change}))
ed20f277   zhouhaihai   chatline 奖励
604
605
606
  	return true
  end
  
384bb077   zhouahaihai   挂机
607
  return _M