Commit 46a0db220ccf4acdc740ada8ca8e36d26e838883
1 parent
d49797b7
Squashed commit of the following:
commit 1af7ada5d6f5e31a9725e6d3f8be90c438eec1fd Merge: 00bf602 a5b98c3 Author: liuzujun <307836273@qq.com> Date: Wed Oct 14 17:50:51 2020 +0800 fix confict commit 00bf602997553cb76b3b9360da30d171b742d418 Author: liuzujun <307836273@qq.com> Date: Wed Oct 14 17:49:09 2020 +0800 限时礼包,抽卡ssr广播 commit a5b98c306f88644197e68c098ce5f1334ae2d690 Author: chenyueqi <1056825054@qq.com> Date: Wed Oct 14 17:25:14 2020 +0800 引导调整 commit 7cde0c44fafe86df431485731e28473d4f313017 Author: zhouhaihai <zhhyf521@163.com> Date: Tue Oct 13 16:11:28 2020 +0800 忽略心跳和未登录状态 超时处理
Showing
11 changed files
with
140 additions
and
94 deletions
Show diff stats
src/GlobalVar.lua
src/ProtocolCode.lua
src/actions/HangAction.lua
... | ... | @@ -26,6 +26,8 @@ local function checkReward(role) |
26 | 26 | local nowCoinTime = math.min(skynet.timex(), hangInfo.endCoinTime or 0) |
27 | 27 | local nowItemTime = math.min(skynet.timex(), hangInfo.endItemTime or 0) |
28 | 28 | |
29 | + local expCoef, itemCoef = role.storeData:getHangDropCoef() | |
30 | + | |
29 | 31 | -- 此次挂机,其中翻倍时长占多少 |
30 | 32 | local doubleTime = role.activity:getActHangDoubleTime(hangInfo.coinTime, nowCoinTime) |
31 | 33 | local normalTime = nowCoinTime - hangInfo.coinTime - doubleTime |
... | ... | @@ -39,7 +41,7 @@ local function checkReward(role) |
39 | 41 | hangInfo.itemTime = nowItemTime |
40 | 42 | |
41 | 43 | local items = role:getProperty("hangBag") |
42 | - coinCount = coinCount + coinDoubleCount | |
44 | + coinCount = (coinCount + coinDoubleCount) * expCoef | |
43 | 45 | items[ItemId.Gold] = math.floor((items[ItemId.Gold] or 0) + coinCount * expCarbonData.money) |
44 | 46 | items[ItemId.Exp] = math.floor((items[ItemId.Exp] or 0) + coinCount * expCarbonData.exp) |
45 | 47 | items[ItemId.PlayerExp] = math.floor((items[ItemId.PlayerExp] or 0) + coinCount * expCarbonData.playerExp) |
... | ... | @@ -75,6 +77,7 @@ local function checkReward(role) |
75 | 77 | if cur[1] == ItemId.BreakCost and doubleTime > 0 then |
76 | 78 | cur[2] = cur[2] * 2 |
77 | 79 | end |
80 | + cur[2] = cur[2] * itemCoef | |
78 | 81 | 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)) |
79 | 82 | or not items[cur[1]] then --要占用新栏位的情况 |
80 | 83 | local addFC |
... | ... | @@ -162,16 +165,6 @@ function _M.startRpc( agent, data ) |
162 | 165 | |
163 | 166 | role:updateProperty({field = "hangInfo", value = hangInfo}) |
164 | 167 | |
165 | - -- 指定当前引导的步骤 | |
166 | - if carbonId == 10101 then | |
167 | - role:saveGuide(5,11) | |
168 | - elseif carbonId == 10102 then | |
169 | - role:saveGuide(8,2) | |
170 | - elseif carbonId == 10103 then | |
171 | - role:saveGuide(9,2) | |
172 | - elseif carbonId == 10220 then | |
173 | - role:saveGuide(22,1) | |
174 | - end | |
175 | 168 | role:mylog("hang_action", {desc = "startHang", int1 = carbonId}) |
176 | 169 | SendPacket(actionCodes.Hang_startRpc, '') |
177 | 170 | return true |
... | ... | @@ -262,12 +255,7 @@ function _M.endBattleRpc(agent, data) |
262 | 255 | |
263 | 256 | -- 引导 |
264 | 257 | if carbonId == 10101 then |
265 | - role:finishGuide(5) | |
266 | - elseif carbonId == 10102 then | |
267 | - role:finishGuide(8) | |
268 | - role:saveGuide(9, 2) | |
269 | - elseif carbonId == 10103 then | |
270 | - role:finishGuide(9) | |
258 | + role:finishGuide(6) | |
271 | 259 | elseif carbonId == 20101 then |
272 | 260 | role:finishGuide(22) |
273 | 261 | end |
... | ... | @@ -341,7 +329,7 @@ function _M.roleFormatRpc(agent , data) |
341 | 329 | hangTeam.leader = msg.leader |
342 | 330 | hangTeam.supports = supports |
343 | 331 | role:saveHangTeam(hangTeam) |
344 | - role:saveGuide(5,8) | |
332 | + role:finishGuide(5) | |
345 | 333 | SendPacket(actionCodes.Hang_roleFormatRpc, '') |
346 | 334 | return true |
347 | 335 | end |
... | ... | @@ -500,8 +488,9 @@ function _M.buyBonusCountRpc(agent, data) |
500 | 488 | end |
501 | 489 | |
502 | 490 | local bonusC = role.dailyData:getProperty("bonusC") |
491 | + local extraCnt = role.storeData:getBonusExtraFightCount() | |
503 | 492 | bonusC[btype] = bonusC[btype] or {c = 0, b = 0} |
504 | - local lastCount = globalCsv.bonus_daily_buy_count * coef - bonusC[btype]["b"] | |
493 | + local lastCount = globalCsv.bonus_daily_buy_count * coef + extraCnt - bonusC[btype]["b"] | |
505 | 494 | if math.illegalNum(count, 1, lastCount) then return 1 end |
506 | 495 | |
507 | 496 | if not role:checkItemEnough({[ItemId.Diamond] = globalCsv.bonus_buy_cost * count}) then return 2 end |
... | ... | @@ -541,12 +530,13 @@ function _M.startBonusBattleRpc(agent, data) |
541 | 530 | |
542 | 531 | local actData = csvdb["activity_ctrlCsv"][actId] |
543 | 532 | |
533 | + local extraCnt = role.storeData:getBonusExtraFightCount() | |
544 | 534 | local coef = 1 |
545 | 535 | if open and actData then |
546 | 536 | coef = tonumber(actData.condition2) |
547 | 537 | end |
548 | 538 | |
549 | - if globalCsv.bonus_daily_count * coef - bonusC[bonusData.type]["c"] <= 0 then return 7 end | |
539 | + if globalCsv.bonus_daily_count * coef + extraCnt - bonusC[bonusData.type]["c"] <= 0 then return 7 end | |
550 | 540 | |
551 | 541 | |
552 | 542 | role.__bonusBattleCache = { |
... | ... | @@ -566,6 +556,7 @@ function _M.endBonusBattleRpc(agent, data) |
566 | 556 | if not role.__bonusBattleCache then return 1 end |
567 | 557 | local open, actId = role.activity:isOpen("BonusDouble") |
568 | 558 | local actData = csvdb["activity_ctrlCsv"][actId] |
559 | + local extraCnt = role.storeData:getBonusExtraFightCount() | |
569 | 560 | |
570 | 561 | local coef = 1 |
571 | 562 | if open and actData then |
... | ... | @@ -583,7 +574,7 @@ function _M.endBonusBattleRpc(agent, data) |
583 | 574 | -- 胜利扣除次数 |
584 | 575 | local bonusC = role.dailyData:getProperty("bonusC") |
585 | 576 | bonusC[bonusData.type] = bonusC[bonusData.type] or {c = 0, b = 0} |
586 | - if globalCsv.bonus_daily_count * coef - bonusC[bonusData.type]["c"] <= 0 then return 3 end | |
577 | + if globalCsv.bonus_daily_count * coef + extraCnt - bonusC[bonusData.type]["c"] <= 0 then return 3 end | |
587 | 578 | bonusC[bonusData.type]["c"] = bonusC[bonusData.type]["c"] + 1 |
588 | 579 | role.dailyData:updateProperty({field = "bonusC", value = bonusC}) |
589 | 580 | ... | ... |
src/actions/HeroAction.lua
... | ... | @@ -54,9 +54,6 @@ function _M.levelUpRpc( agent, data ) |
54 | 54 | hero_upgrade_scoreget = hero:getProperty("battleV") - oldBattleV, -- 通过英雄升级提升的评分 |
55 | 55 | }) |
56 | 56 | |
57 | - if hero:getProperty("type") == 103 then | |
58 | - role:finishGuide(7) | |
59 | - end | |
60 | 57 | hero:mylog({desc = "levelUp", int1 = hero:getProperty("level")}) |
61 | 58 | |
62 | 59 | role:checkTaskEnter("HeroLevelUp", {level = hero:getProperty("level")}) |
... | ... | @@ -129,6 +126,10 @@ function _M.wakeRpc(agent, data) |
129 | 126 | hero_rise_result = getChangeAttrJson(oldAttr, hero:getTotalAttrs()), --英雄觉醒效果,可记录效果ID,或json格式记录提升效果,{攻击:20,闪避:20,……..} |
130 | 127 | }) |
131 | 128 | |
129 | + if hero:getProperty("type") == 204 then | |
130 | + role:finishGuide(7) | |
131 | + end | |
132 | + | |
132 | 133 | SendPacket(actionCodes.Hero_wakeRpc, '') |
133 | 134 | |
134 | 135 | role:checkTaskEnter("HeroStarCollect", {}) |
... | ... | @@ -846,9 +847,9 @@ function _M.drawHeroRpc(agent, data) |
846 | 847 | |
847 | 848 | role:costItems(cost, {log = {desc = "drawHero", int1 = btype, int2 = poolId}}) |
848 | 849 | |
849 | - local guideHero | |
850 | - if role:getProperty("newerGuide") == "11=1" then | |
851 | - guideHero = globalCsv.newdraw_hero_item_id or 613 | |
850 | + local guideHero = nil | |
851 | + if role:getProperty("newerGuide") == "8=1" then | |
852 | + guideHero = globalCsv.newdraw_hero_item_id or 503 | |
852 | 853 | end |
853 | 854 | |
854 | 855 | local ssrCount = 0 |
... | ... | @@ -867,12 +868,16 @@ function _M.drawHeroRpc(agent, data) |
867 | 868 | local itemId = math.randWeight(resultPool, 1) |
868 | 869 | if guideHero then |
869 | 870 | itemId = guideHero |
870 | - guideHero = nil | |
871 | 871 | end |
872 | 872 | |
873 | 873 | local itemData = csvdb["itemCsv"][itemId] |
874 | 874 | if itemData.quality == HeroQuality.SSR then |
875 | 875 | ssrCount = ssrCount + 1 |
876 | + if not guideHero then | |
877 | + -- STODO 广播获得ssr英雄 | |
878 | + local ntf = {heroId = itemData.id - ItemStartId.Hero, nick = role:getProperty("name")} | |
879 | + mcast_util.pub_world(actionCodes.Role_broadGetSSR, MsgPack.pack(ntf)) | |
880 | + end | |
876 | 881 | end |
877 | 882 | |
878 | 883 | if itemData.quality >= HeroQuality.SR then |
... | ... | @@ -903,7 +908,7 @@ function _M.drawHeroRpc(agent, data) |
903 | 908 | if ssrCount > 0 then |
904 | 909 | role:checkTaskEnter("DrawSSR", {count = ssrCount}) |
905 | 910 | end |
906 | - role:finishGuide(11) | |
911 | + role:finishGuide(8) | |
907 | 912 | |
908 | 913 | role:log("gacha", { |
909 | 914 | gacha_id = poolId, -- 卡池ID |
... | ... | @@ -1023,4 +1028,4 @@ function _M.changeCrown(agent, data) |
1023 | 1028 | return true |
1024 | 1029 | end |
1025 | 1030 | |
1026 | -return _M | |
1027 | 1031 | \ No newline at end of file |
1032 | +return _M | ... | ... |
src/agent.lua
... | ... | @@ -29,12 +29,6 @@ _codeSession = {} |
29 | 29 | --- {{{ 定时器相关 |
30 | 30 | local function handle_timeout() |
31 | 31 | if not agentInfo.open_timer then return end |
32 | - | |
33 | - if not agentInfo.role then | |
34 | - skynet.timeout(100, handle_timeout) | |
35 | - return | |
36 | - end | |
37 | - | |
38 | 32 | agent_util:update(agentInfo) |
39 | 33 | skynet.timeout(100, handle_timeout) |
40 | 34 | end |
... | ... | @@ -274,6 +268,8 @@ function CMD.start(session, source, gate, fd, ip, hotfixs) |
274 | 268 | end |
275 | 269 | end |
276 | 270 | |
271 | + start_agent_timer() | |
272 | + | |
277 | 273 | -- 这里将消息伪装成 watchdog 发出,这样就由 A->B->C->B->A 变成 A->B->C->A |
278 | 274 | skynet.redirect(gate, source, "lua", session, skynet.pack("forward", fd, 0, skynet.self())) |
279 | 275 | end | ... | ... |
src/models/Hero.lua
... | ... | @@ -109,4 +109,8 @@ function Hero:getCamp() |
109 | 109 | return csvdb["unitCsv"][self:getProperty("type")].camp |
110 | 110 | end |
111 | 111 | |
112 | +function Hero:getRare() | |
113 | + return csvdb["unitCsv"][self:getProperty("type")].rare | |
114 | +end | |
115 | + | |
112 | 116 | return Hero |
113 | 117 | \ No newline at end of file | ... | ... |
src/models/RolePlugin.lua
... | ... | @@ -452,7 +452,11 @@ function RolePlugin.bind(Role) |
452 | 452 | newHero.owner = self |
453 | 453 | newHero:saveBattleValue() |
454 | 454 | self.heros[heroId] = newHero |
455 | - self:checkTaskEnter("AddHero", {heroType = heroType, wakeL = newHero:getProperty("wakeL"), camp = unitData.camp, job = unitData.job}, params.notNotify) | |
455 | + local ssrCount = 0 | |
456 | + if unitData.rare == HeroQuality.SSR then | |
457 | + ssrCount = self:getSSRHeroCount() | |
458 | + end | |
459 | + self:checkTaskEnter("AddHero", {heroType = heroType, wakeL = newHero:getProperty("wakeL"), camp = unitData.camp, job = unitData.job, ssrCount = ssrCount}, params.notNotify) | |
456 | 460 | self:checkTaskEnter("HeroQualityCollect", {}) |
457 | 461 | if not params.notNotify then |
458 | 462 | local heroResponse = {} |
... | ... | @@ -486,6 +490,16 @@ function RolePlugin.bind(Role) |
486 | 490 | end |
487 | 491 | end |
488 | 492 | |
493 | + function Role:getSSRHeroCount() | |
494 | + local count = 0 | |
495 | + for _, hero in pairs(self.heros) do | |
496 | + if hero:getRare() == HeroQuality.SSR then | |
497 | + count = count + 1 | |
498 | + end | |
499 | + end | |
500 | + return count | |
501 | + end | |
502 | + | |
489 | 503 | |
490 | 504 | function Role:loadHeros() |
491 | 505 | local roleId = self:getProperty("id") | ... | ... |
src/models/RoleTask.lua
... | ... | @@ -235,6 +235,8 @@ local StoreListener = { |
235 | 235 | [TaskType.HangPass] = {{TriggerEventType.HangPass, f("id")}}, |
236 | 236 | [TaskType.RoleLevelUp] = {{TriggerEventType.LevelUp, f("level")}}, |
237 | 237 | [TaskType.TowerPass] = {{TriggerEventType.TowerPass, f("level")}}, |
238 | + [TaskType.AdvPass] = {{TriggerEventType.AdvPass, f("id")}}, | |
239 | + [TaskType.AddHero] = {{TriggerEventType.AddNewHero, f("heroType")}, {TriggerEventType.SSRCount, f("ssrCount")}}, | |
238 | 240 | } |
239 | 241 | } |
240 | 242 | |
... | ... | @@ -580,10 +582,12 @@ function RoleTask.bind(Role) |
580 | 582 | end |
581 | 583 | |
582 | 584 | function Role:checkActivityTask(notNotify, activityType, ...) |
585 | + if not self.activity then return end | |
583 | 586 | self.activity:checkActivity(notNotify, activityType, ...) |
584 | 587 | end |
585 | 588 | |
586 | 589 | function Role:checkStoreTask(notNotify, triggerType, param) |
590 | + if not self.storeData then return end | |
587 | 591 | self.storeData:OnTriggerLimitTimePack(triggerType, param) |
588 | 592 | end |
589 | 593 | ... | ... |
src/models/Store.lua
... | ... | @@ -23,11 +23,11 @@ Store.schema = { |
23 | 23 | battleFR = {"string", ""}, -- 免费赛季卡领取记录 |
24 | 24 | battleLR = {"string", ""}, -- 付费赛季卡领取记录 |
25 | 25 | |
26 | - limitTPack = {"table", {}}, -- 限时礼包 {id=expire_ts} | |
26 | + limitTPack = {"table", {}}, -- 限时礼包 {id={expire_ts, trigger_type}} | |
27 | 27 | privCardEx = {"number", 0}, -- 特权卡过期时间戳 |
28 | 28 | getMailT1 = {"number",0}, -- 上次发送月卡福利邮件的时间 |
29 | 29 | getMailT2 = {"number",0}, -- 上次发送超级月卡福利邮件的时间 |
30 | - packTrigger = {"table", {}}, -- 礼包触发记录 {关卡难度1={id, 通关关卡数,升级数,爬塔层数}, ...} | |
30 | + --packTrigger = {"table", {}}, -- 礼包触发记录 {关卡难度1={id, 通关关卡数,升级数,爬塔层数}, ...} | |
31 | 31 | |
32 | 32 | -- 活动商品购买记录 |
33 | 33 | actGoodsFlag = {"table", {}}, -- ActGoodsType 1购买,0未购买 |
... | ... | @@ -65,10 +65,11 @@ function Store:deleteExpireLimitGoods() |
65 | 65 | local timeNow = skynet.timex() |
66 | 66 | local limitGoodsList = self:getProperty("limitTPack") |
67 | 67 | for k, v in pairs(limitGoodsList) do |
68 | - if timeNow > v then | |
68 | + if timeNow > v[1] then | |
69 | 69 | limitGoodsList[k] = nil |
70 | 70 | end |
71 | 71 | end |
72 | + self:updateProperty({field = "limitTPack", value = limitGoodsList, notNotify = true}) | |
72 | 73 | end |
73 | 74 | |
74 | 75 | -- 发送月卡邮件 |
... | ... | @@ -162,6 +163,26 @@ function Store:getGearExchangeCoef() |
162 | 163 | return 1 + coef |
163 | 164 | end |
164 | 165 | |
166 | +-- 奖励关卡 特权卡额外数量 | |
167 | +function Store:getBonusExtraFightCount() | |
168 | + if self:isPrivCardExpire() then | |
169 | + return 0 | |
170 | + end | |
171 | + | |
172 | + local cnt = globalCsv.bonus_extra_fight_count or 1 | |
173 | + return cnt | |
174 | +end | |
175 | + | |
176 | +-- 挂机道具掉落系数 特权卡挂机掉落系数 | |
177 | +function Store:getHangDropCoef() | |
178 | + if self:isPrivCardExpire() then | |
179 | + return 0, 0 | |
180 | + end | |
181 | + | |
182 | + return (1 + globalCsv.hang_drop_exp_coef) or 1, (1 + globalCsv.hang_drop_item_coef) or 1 | |
183 | +end | |
184 | + | |
185 | + | |
165 | 186 | -- 购买通行证 |
166 | 187 | function Store:onBuyCard(type, duration, id) |
167 | 188 | local timeNow = skynet.timex() |
... | ... | @@ -292,64 +313,52 @@ end |
292 | 313 | --触发限时礼包 |
293 | 314 | function Store:OnTriggerLimitTimePack(eventType, param) |
294 | 315 | local limitPack = self:getProperty("limitTPack") |
295 | - local payRecord = self:getProperty("payR") | |
316 | + --local payRecord = self:getProperty("payR") | |
296 | 317 | local timeNow = skynet.timex() |
297 | - local find = false | |
318 | + --local find = false | |
298 | 319 | -- 有未过期的限时礼包不再推送 |
299 | - for k, v in pairs(limitPack) do | |
300 | - if v > timeNow and not payRecord[k] then | |
301 | - find = true | |
302 | - break | |
303 | - end | |
304 | - end | |
305 | - if find == true then | |
306 | - return | |
307 | - end | |
308 | - limitPack = {} | |
309 | - local hangPass = self.owner:getProperty("hangPass") | |
310 | - local triggerRecord = self:getProperty("packTrigger") | |
311 | - local result = {} | |
312 | - local maxDiff = 0 | |
320 | + --for k, v in pairs(limitPack) do | |
321 | + -- if v > timeNow and not payRecord[k] then | |
322 | + -- find = true | |
323 | + -- break | |
324 | + -- end | |
325 | + --end | |
326 | + --if find == true then | |
327 | + -- return | |
328 | + --end | |
329 | + --local hangPass = self.owner:getProperty("hangPass") | |
330 | + --local triggerRecord = self:getProperty("packTrigger") | |
331 | + --local result = {} | |
332 | + --local maxDiff = 0 | |
313 | 333 | -- 取满足限时礼包关卡要求的对应数据 |
314 | - for diff, maxCarbonId in pairs(hangPass) do | |
315 | - for id, cfg in pairs(csvdb["shop_packCsv"]) do | |
316 | - local range = cfg.showRange:toArray(true, "=") | |
317 | - local beginRange = range[1] or 0 | |
318 | - local endRange = range[2] or 0 | |
319 | - if maxCarbonId > beginRange and maxCarbonId <= endRange and cfg.type == eventType then | |
320 | - result[diff] = cfg | |
321 | - maxDiff = math.max(maxDiff, diff) | |
322 | - break | |
323 | - end | |
324 | - end | |
325 | - end | |
326 | - local shopGoodsId = 0 | |
327 | - for diff, cfg in pairs(result) do | |
328 | - if diff == maxDiff then | |
329 | - local record = triggerRecord[diff] or {} | |
330 | - if (record[0] or 0) ~= cfg.id and next(record) then | |
331 | - record = {} | |
332 | - end | |
333 | - record[0] = cfg.id | |
334 | - record[eventType] = (record[eventType] or 0) + 1 | |
335 | - if record[eventType] > 0 and record[eventType] % 10 == 0 then | |
336 | - local pool = cfg.packId:toArray(true, "=") | |
337 | - local idx = math.random(1, #pool) | |
338 | - shopGoodsId = pool[idx] | |
339 | - end | |
340 | - triggerRecord[diff] = record | |
334 | + --for diff, maxCarbonId in pairs(hangPass) do | |
335 | + -- for id, cfg in pairs(csvdb["shop_packCsv"]) do | |
336 | + -- local range = cfg.showRange:toArray(true, "=") | |
337 | + -- local beginRange = range[1] or 0 | |
338 | + -- local endRange = range[2] or 0 | |
339 | + -- if maxCarbonId > beginRange and maxCarbonId <= endRange and cfg.type == eventType then | |
340 | + -- result[diff] = cfg | |
341 | + -- maxDiff = math.max(maxDiff, diff) | |
342 | + -- break | |
343 | + -- end | |
344 | + -- end | |
345 | + --end | |
346 | + local config = nil | |
347 | + for id, cfg in pairs(csvdb["shop_packCsv"]) do | |
348 | + if cfg.type == eventType and cfg.condition == param then | |
349 | + config = cfg | |
341 | 350 | end |
342 | 351 | end |
343 | - if shopGoodsId ~= 0 then | |
344 | - local rechargeCfg = csvdb["shop_rechargeCsv"][shopGoodsId] | |
352 | + if config ~= nil then | |
353 | + local rechargeCfg = csvdb["shop_rechargeCsv"][config.packId] | |
345 | 354 | if rechargeCfg then |
346 | - limitPack[rechargeCfg.id] = timeNow + rechargeCfg.time | |
355 | + limitPack[rechargeCfg.id] = {timeNow + rechargeCfg.time, config.id} | |
347 | 356 | self:updateProperty({field = "limitTPack", value = limitPack}) |
348 | 357 | end |
349 | 358 | end |
350 | - if next(result) then | |
351 | - self:updateProperty({field = "packTrigger", value = triggerRecord}) | |
352 | - end | |
359 | + --if next(result) then | |
360 | + -- self:updateProperty({field = "packTrigger", value = triggerRecord}) | |
361 | + --end | |
353 | 362 | end |
354 | 363 | |
355 | 364 | function GetActGoodsIndex(goodsType) |
... | ... | @@ -419,7 +428,7 @@ function Store:data() |
419 | 428 | battleLR = self:getProperty("battleLR"), |
420 | 429 | limitTPack = self:getProperty("limitTPack"), |
421 | 430 | privCardEx = self:getProperty("privCardEx"), |
422 | - packTrigger = self:getProperty("packTrigger"), | |
431 | + --packTrigger = self:getProperty("packTrigger"), | |
423 | 432 | actGoodsFlag = self:getProperty("actGoodsFlag"), |
424 | 433 | bpInfo = self:getProperty("bpInfo"), |
425 | 434 | } | ... | ... |
src/services/agent_util.lua
... | ... | @@ -17,15 +17,32 @@ local HEART_TIMEOUT_COUNT_MAX = 20 |
17 | 17 | local HEART_QUICK_COUNT_MAX = 5 |
18 | 18 | -- 心跳定时间隔 |
19 | 19 | local HEART_TIMER_INTERVAL = 5 |
20 | +-- 忽略心跳的等待时间 | |
21 | +local WAIT_IGNORE_HEART = 300 | |
22 | + | |
23 | +--开始忽略心跳的时间 | |
24 | +local ignoreHeartTime = nil | |
20 | 25 | |
21 | 26 | local function check_heart_beat(agent, now) |
22 | 27 | -- 充值等操作不检查心跳 |
23 | 28 | local role = agent.role |
24 | - if role.ignoreHeartbeat then | |
29 | + if not role or role.ignoreHeartbeat then | |
25 | 30 | lastHeartCheckTime = now - HEART_TIMER_INTERVAL |
26 | 31 | heartTimeoutCount = 0 |
32 | + | |
33 | + if not ignoreHeartTime then | |
34 | + ignoreHeartTime = now | |
35 | + end | |
36 | + | |
37 | + if now - ignoreHeartTime >= WAIT_IGNORE_HEART then -- 等待太久了 踢掉 | |
38 | + skynet.error("timeout! then agent will shut down by self with ignoreHeartbeat or no login", agent.client_fd) | |
39 | + skynet.call(agent.gate_serv, "lua", "kick", agent.client_fd) | |
40 | + ignoreHeartTime = nil | |
41 | + end | |
27 | 42 | return |
28 | 43 | end |
44 | + ignoreHeartTime = nil | |
45 | + | |
29 | 46 | if lastHeartCheckTime - now > HEART_TIMER_INTERVAL or |
30 | 47 | now - lastHeartCheckTime > HEART_TIMER_INTERVAL then |
31 | 48 | heartTimeoutCount = heartTimeoutCount + 1 |
... | ... | @@ -46,6 +63,7 @@ function _M:update(agent) |
46 | 63 | pcall(check_heart_beat, agent, now) |
47 | 64 | nextCheckTime = now + HEART_TIMER_INTERVAL |
48 | 65 | end |
66 | + if not role then return end | |
49 | 67 | pcall(role.onRecoverTimer, role, now) |
50 | 68 | end |
51 | 69 | |
... | ... | @@ -73,6 +91,7 @@ end |
73 | 91 | function _M:reset() |
74 | 92 | heartTimeoutCount = 0 |
75 | 93 | heartQuickCount = 0 |
94 | + ignoreHeartTime = nil | |
76 | 95 | lastHeartCheckTime = skynet.timex() |
77 | 96 | end |
78 | 97 | ... | ... |