Commit 5d51be8b0fb03fce0277a748d73d56a13973ec5d
Merge branch 'develop' into player
Showing
12 changed files
with
228 additions
and
49 deletions
Show diff stats
docs/日志说明.xlsx
No preview for this file type
src/RedisKeys.lua
| @@ -3,6 +3,7 @@ R_INCR = "role:%d:autoincr" | @@ -3,6 +3,7 @@ R_INCR = "role:%d:autoincr" | ||
| 3 | R_HEROS = "role:%d:heroIds" | 3 | R_HEROS = "role:%d:heroIds" |
| 4 | R_HERO = "hero:%d:%d" | 4 | R_HERO = "hero:%d:%d" |
| 5 | R_DAILY = "role:%d:daily" | 5 | R_DAILY = "role:%d:daily" |
| 6 | +R_ACTIVITY = "role:%d:act" | ||
| 6 | R_DINER = "role:%d:diner" -- 餐厅 | 7 | R_DINER = "role:%d:diner" -- 餐厅 |
| 7 | R_PVP = "role:%d:pvp" -- pvp | 8 | R_PVP = "role:%d:pvp" -- pvp |
| 8 | R_EQUIP_ROOT = "role:%d:equip*" -- 装备根目录 | 9 | R_EQUIP_ROOT = "role:%d:equip*" -- 装备根目录 |
src/actions/GmAction.lua
src/actions/StoreAction.lua
| @@ -82,9 +82,10 @@ function _M.googleRechargeRpc(agent, data) | @@ -82,9 +82,10 @@ function _M.googleRechargeRpc(agent, data) | ||
| 82 | local secret_key = "b7657fa7ccd44c16a35e3f454ac7a075" | 82 | local secret_key = "b7657fa7ccd44c16a35e3f454ac7a075" |
| 83 | local need = { | 83 | local need = { |
| 84 | out_trade_no = partnerOrderId, | 84 | out_trade_no = partnerOrderId, |
| 85 | - money = dataSet.rmb, | 85 | + money = dataSet.rmb * 100, |
| 86 | game_money = dataSet.diamond, | 86 | game_money = dataSet.diamond, |
| 87 | product_id = dataSet.productId, | 87 | product_id = dataSet.productId, |
| 88 | + notify_url = "http://l11-ts-pub-all-wasteland.komoejoy.com/pay/google" | ||
| 88 | } | 89 | } |
| 89 | local sign = signPms(need, secret_key) | 90 | local sign = signPms(need, secret_key) |
| 90 | 91 | ||
| @@ -108,8 +109,9 @@ function _M.myCardRechargeRpc(agent, data) | @@ -108,8 +109,9 @@ function _M.myCardRechargeRpc(agent, data) | ||
| 108 | local secret_key = "48759e07540f46d9af17ec82669b4272" | 109 | local secret_key = "48759e07540f46d9af17ec82669b4272" |
| 109 | local need = { | 110 | local need = { |
| 110 | out_trade_no = partnerOrderId, | 111 | out_trade_no = partnerOrderId, |
| 111 | - money = dataSet.rmb, | 112 | + money = dataSet.rmb * 100, |
| 112 | game_money = dataSet.diamond, | 113 | game_money = dataSet.diamond, |
| 114 | + notify_url = "http://l11-ts-pub-all-wasteland.komoejoy.com/pay/mycard" | ||
| 113 | } | 115 | } |
| 114 | local sign = signPms(need, secret_key) | 116 | local sign = signPms(need, secret_key) |
| 115 | 117 | ||
| @@ -133,9 +135,10 @@ function _M.iosRechargeRpc(agent, data) | @@ -133,9 +135,10 @@ function _M.iosRechargeRpc(agent, data) | ||
| 133 | local secret_key = "9647d2efe1074c73b9ac19af4337a70e" | 135 | local secret_key = "9647d2efe1074c73b9ac19af4337a70e" |
| 134 | local need = { | 136 | local need = { |
| 135 | out_trade_no = partnerOrderId, | 137 | out_trade_no = partnerOrderId, |
| 136 | - money = dataSet.rmb, | 138 | + money = dataSet.rmb * 100, |
| 137 | game_money = dataSet.diamond, | 139 | game_money = dataSet.diamond, |
| 138 | - product_id = dataSet.productId, | 140 | + product_id = dataSet.iap_product_id, |
| 141 | + notify_url = "http://l11-ts-pub-all-wasteland.komoejoy.com/pay/ios" | ||
| 139 | } | 142 | } |
| 140 | local sign = signPms(need, secret_key) | 143 | local sign = signPms(need, secret_key) |
| 141 | 144 |
src/adv/Adv.lua
| @@ -8,6 +8,7 @@ local Adv = class("Adv") | @@ -8,6 +8,7 @@ local Adv = class("Adv") | ||
| 8 | local AdvTask = import(".AdvTask") --任务相关数据搞出去 | 8 | local AdvTask = import(".AdvTask") --任务相关数据搞出去 |
| 9 | AdvTask.bind(Adv) | 9 | AdvTask.bind(Adv) |
| 10 | 10 | ||
| 11 | + | ||
| 11 | function Adv:ctor(owner) | 12 | function Adv:ctor(owner) |
| 12 | assert(owner, "Adv instance must have owner(role)") | 13 | assert(owner, "Adv instance must have owner(role)") |
| 13 | self.owner = owner | 14 | self.owner = owner |
| @@ -1307,6 +1308,7 @@ local function clickLinkChoose(self, room, block, params) | @@ -1307,6 +1308,7 @@ local function clickLinkChoose(self, room, block, params) | ||
| 1307 | self.lchoose[startId] = (self.lchoose[startId] or 0) + 1 | 1308 | self.lchoose[startId] = (self.lchoose[startId] or 0) + 1 |
| 1308 | self:checkAchievement(Adv.AchievType.LinkChoose, 1, startId) | 1309 | self:checkAchievement(Adv.AchievType.LinkChoose, 1, startId) |
| 1309 | self:checkAchievement(Adv.AchievType.FinishStoryId, 1, chooseData.storyid) | 1310 | self:checkAchievement(Adv.AchievType.FinishStoryId, 1, chooseData.storyid) |
| 1311 | + self:checkTask(Adv.TaskType.FinishStoryId, 1, chooseData.storyid) | ||
| 1310 | local advStoryB = self.owner:getProperty("advStoryB") | 1312 | local advStoryB = self.owner:getProperty("advStoryB") |
| 1311 | advStoryB[chooseData.storyid] = (advStoryB[chooseData.storyid] or 0) + 1 | 1313 | advStoryB[chooseData.storyid] = (advStoryB[chooseData.storyid] or 0) + 1 |
| 1312 | self.owner:setProperty("advStoryB", advStoryB) | 1314 | self.owner:setProperty("advStoryB", advStoryB) |
| @@ -1401,6 +1403,7 @@ end | @@ -1401,6 +1403,7 @@ end | ||
| 1401 | 1403 | ||
| 1402 | local function clickClick(self, room, block, params) | 1404 | local function clickClick(self, room, block, params) |
| 1403 | local clickData = csvdb["event_clickCsv"][block.event.id] | 1405 | local clickData = csvdb["event_clickCsv"][block.event.id] |
| 1406 | + local oldId = block.event.id | ||
| 1404 | if not clickData then return end | 1407 | if not clickData then return end |
| 1405 | local clearBlock = true | 1408 | local clearBlock = true |
| 1406 | local doEffect = { | 1409 | local doEffect = { |
| @@ -1423,8 +1426,11 @@ local function clickClick(self, room, block, params) | @@ -1423,8 +1426,11 @@ local function clickClick(self, room, block, params) | ||
| 1423 | end | 1426 | end |
| 1424 | end, | 1427 | end, |
| 1425 | } | 1428 | } |
| 1429 | + | ||
| 1426 | assert(doEffect[clickData.type], "error effect, event_clickCsv id :" .. block.event.id) | 1430 | assert(doEffect[clickData.type], "error effect, event_clickCsv id :" .. block.event.id) |
| 1427 | doEffect[clickData.type]() | 1431 | doEffect[clickData.type]() |
| 1432 | + self:checkTask(Adv.TaskType.Click, 1, oldId) | ||
| 1433 | + | ||
| 1428 | if clearBlock then | 1434 | if clearBlock then |
| 1429 | block:clear() | 1435 | block:clear() |
| 1430 | end | 1436 | end |
| @@ -1800,45 +1806,77 @@ function Adv:enemyDead(enemy, escape) | @@ -1800,45 +1806,77 @@ function Adv:enemyDead(enemy, escape) | ||
| 1800 | end | 1806 | end |
| 1801 | local changeV = self.battle.player:addExp(monsterData.exp) | 1807 | local changeV = self.battle.player:addExp(monsterData.exp) |
| 1802 | self:backDead(enemyId, changeV) | 1808 | self:backDead(enemyId, changeV) |
| 1803 | - if enemy:hadBuff(Buff.CHANGE_DROP_TO_CLICK) then -- 掉落转为 click | ||
| 1804 | - local clickId = buff:effect() | ||
| 1805 | - block:updateEvent({ | ||
| 1806 | - etype = AdvEventType.Click, | ||
| 1807 | - id = clickId | ||
| 1808 | - }) | ||
| 1809 | - self.battle.player:triggerPassive(Passive.BATTLE_WIN) | ||
| 1810 | - else | ||
| 1811 | - local item = block.event.item | ||
| 1812 | - if not item then | ||
| 1813 | - local buff = enemy:hadBuff(Buff.CHANGE_DROP) | ||
| 1814 | - if buff then | ||
| 1815 | - item = table.pack(buff:effect()) | ||
| 1816 | - else | ||
| 1817 | - if monsterData.dropid == 0 then | ||
| 1818 | - item = {0, 0} | 1809 | + |
| 1810 | + local toClick = enemy:hadBuff(Buff.CHANGE_DROP_TO_CLICK) | ||
| 1811 | + if toClick then | ||
| 1812 | + toClick = toClick:effect() | ||
| 1813 | + end | ||
| 1814 | + | ||
| 1815 | + local changItem = enemy:hadBuff(Buff.CHANGE_DROP) | ||
| 1816 | + if changItem then | ||
| 1817 | + changItem = table.pack(changItem:effect()) | ||
| 1818 | + end | ||
| 1819 | + | ||
| 1820 | + local addMult = 0 | ||
| 1821 | + local dropBuff = enemy:hadBuff(Buff.DROP_BUFF_BY_ENEMY) -- 根据敌人数量变化个数 | ||
| 1822 | + if dropBuff then | ||
| 1823 | + local team = enemy:getTeam(1, true) | ||
| 1824 | + addMult = addMult + 0.2 * #team | ||
| 1825 | + end | ||
| 1826 | + | ||
| 1827 | + local dropIds = monsterData.dropid:toArray(true, "=") | ||
| 1828 | + local drops = {} | ||
| 1829 | + local cCcount = 0 -- 需要改变为click 的个数 | ||
| 1830 | + for _, dropId in ipairs(dropIds) do | ||
| 1831 | + local dropData = csvdb["event_dropCsv"][dropId] | ||
| 1832 | + if dropData then | ||
| 1833 | + local cur = dropData["range"]:randWeight(true) | ||
| 1834 | + if cur and cur[1] ~= 0 then | ||
| 1835 | + if toClick then | ||
| 1836 | + cCcount = cCcount + 1 | ||
| 1819 | else | 1837 | else |
| 1820 | - local dropData = csvdb["event_dropCsv"][monsterData.dropid] | ||
| 1821 | - item = dropData["range"]:randWeight(true) | 1838 | + local item = changItem and changItem or cur |
| 1839 | + item[2] = math.floor(item[2] * (1 + addMult)) | ||
| 1840 | + drops[#drops + 1] = item | ||
| 1822 | end | 1841 | end |
| 1823 | end | 1842 | end |
| 1824 | - | ||
| 1825 | end | 1843 | end |
| 1826 | - if item[1] == 0 then | ||
| 1827 | - block:clear() | ||
| 1828 | - self.battle.player:triggerPassive(Passive.BATTLE_WIN) | ||
| 1829 | - else | ||
| 1830 | - local buff = enemy:hadBuff(Buff.DROP_BUFF_BY_ENEMY) -- 根据敌人数量变化个数 | ||
| 1831 | - if buff then | ||
| 1832 | - local team = enemy:getTeam(1, true) | ||
| 1833 | - item[2] = math.floor(item[2] * (1 + 0.2 * #team)) | ||
| 1834 | - end | ||
| 1835 | - block:updateEvent({ | ||
| 1836 | - etype = AdvEventType.Drop, | ||
| 1837 | - item = item | ||
| 1838 | - }) | ||
| 1839 | - self.battle.player:triggerPassive(Passive.BATTLE_WIN, {itemId = item[1], count = item[2]}) | 1844 | + end |
| 1845 | + -- 这些奖励可能会有被动加成 | ||
| 1846 | + self.battle.player:triggerPassive(Passive.BATTLE_WIN, {drops = drops}) | ||
| 1847 | + | ||
| 1848 | + -- 自身带的掉落是不会被改变的 也不会被加成 | ||
| 1849 | + if block.event.item and block.event.item[1] ~= 0 then | ||
| 1850 | + drops[#drops + 1] = block.event.item | ||
| 1851 | + end | ||
| 1852 | + | ||
| 1853 | + -- 清空当前的格子 | ||
| 1854 | + block:clear() | ||
| 1855 | + | ||
| 1856 | + -- 掉落走一波 | ||
| 1857 | + local blocks = self:getCurMap():getEmptyBlocks(roomId, blockId, #drops) | ||
| 1858 | + for _i, cblock in ipairs(blocks) do | ||
| 1859 | + cblock:updateEvent({ | ||
| 1860 | + etype = AdvEventType.Drop, | ||
| 1861 | + item = drops[_i] | ||
| 1862 | + }) | ||
| 1863 | + if cblock ~= block then | ||
| 1864 | + self:backBlockChange(cblock.room.roomId, cblock.blockId) | ||
| 1840 | end | 1865 | end |
| 1841 | end | 1866 | end |
| 1867 | + | ||
| 1868 | + -- 转换的click走一波 | ||
| 1869 | + local blocks = self:getCurMap():getEmptyBlocks(roomId, blockId, cCcount) | ||
| 1870 | + for _i, cblock in ipairs(blocks) do | ||
| 1871 | + cblock:updateEvent({ | ||
| 1872 | + etype = AdvEventType.Click, | ||
| 1873 | + id = clickId | ||
| 1874 | + }) | ||
| 1875 | + if cblock ~= block then | ||
| 1876 | + self:backBlockChange(cblock.room.roomId, cblock.blockId) | ||
| 1877 | + end | ||
| 1878 | + end | ||
| 1879 | + | ||
| 1842 | self:checkTask(Adv.TaskType.Kill, 1, enemyId) | 1880 | self:checkTask(Adv.TaskType.Kill, 1, enemyId) |
| 1843 | self:checkTask(Adv.TaskType.KillAll) | 1881 | self:checkTask(Adv.TaskType.KillAll) |
| 1844 | self:checkAchievement(Adv.AchievType.Kill, 1, enemyId) | 1882 | self:checkAchievement(Adv.AchievType.Kill, 1, enemyId) |
| @@ -1850,11 +1888,14 @@ function Adv:enemyDead(enemy, escape) | @@ -1850,11 +1888,14 @@ function Adv:enemyDead(enemy, escape) | ||
| 1850 | self:checkAchievement(Adv.AchievType.KillWithAMWeapon, 1) | 1888 | self:checkAchievement(Adv.AchievType.KillWithAMWeapon, 1) |
| 1851 | 1889 | ||
| 1852 | if monsterData.type == 2 then | 1890 | if monsterData.type == 2 then |
| 1891 | + self:checkTask(Adv.TaskType.KillBoss, 1, enemyId) | ||
| 1853 | self:checkAchievement(Adv.TaskType.KillBoss, 1, enemyId) | 1892 | self:checkAchievement(Adv.TaskType.KillBoss, 1, enemyId) |
| 1854 | self:checkAchievement(Adv.TaskType.KillBossWithBuff, 1) | 1893 | self:checkAchievement(Adv.TaskType.KillBossWithBuff, 1) |
| 1855 | self:checkAchievement(Adv.TaskType.KillBossNoBuff, 1) | 1894 | self:checkAchievement(Adv.TaskType.KillBossNoBuff, 1) |
| 1856 | self:checkAchievement(Adv.AchievType.KillBossWithMWeapon, 1) | 1895 | self:checkAchievement(Adv.AchievType.KillBossWithMWeapon, 1) |
| 1857 | self:checkAchievement(Adv.AchievType.KillBossWithAMWeapon, 1) | 1896 | self:checkAchievement(Adv.AchievType.KillBossWithAMWeapon, 1) |
| 1897 | + elseif monsterData.type == 3 then | ||
| 1898 | + self:checkTask(Adv.TaskType.KillElite, 1, enemyId) | ||
| 1858 | end | 1899 | end |
| 1859 | end | 1900 | end |
| 1860 | end | 1901 | end |
src/adv/AdvMap.lua
| @@ -349,6 +349,55 @@ function Map:getBlocksBySize(roomId, blockId, size) | @@ -349,6 +349,55 @@ function Map:getBlocksBySize(roomId, blockId, size) | ||
| 349 | return blocks | 349 | return blocks |
| 350 | end | 350 | end |
| 351 | 351 | ||
| 352 | +-- 找周围的空格子 最多 49 个 | ||
| 353 | +function Map:getEmptyBlocks(roomId, blockId, count) | ||
| 354 | + local blocks = {} | ||
| 355 | + if count == 0 then return blocks end | ||
| 356 | + local room = self.rooms[roomId] | ||
| 357 | + if not room then return end | ||
| 358 | + local block = room.blocks[blockId] | ||
| 359 | + if not block then return end | ||
| 360 | + | ||
| 361 | + local col, row = room:tranLtoG(block.col, block.row) | ||
| 362 | + | ||
| 363 | + -- 找周围49个格子 | ||
| 364 | + for range = 0, 3 do | ||
| 365 | + if range == 0 then | ||
| 366 | + if block.isOpen and not block:getEventType() then | ||
| 367 | + blocks[#blocks + 1] = block | ||
| 368 | + if #blocks >= count then | ||
| 369 | + return blocks | ||
| 370 | + end | ||
| 371 | + end | ||
| 372 | + else | ||
| 373 | + for _, c in ipairs({col - range , col + range}) do | ||
| 374 | + for r = row - range, row + range do | ||
| 375 | + local rroom, rblock = self:getRBByPos(c, r) | ||
| 376 | + if rroom and rblock.isOpen and not rblock:getEventType() then | ||
| 377 | + blocks[#blocks + 1] = rblock | ||
| 378 | + if #blocks >= count then | ||
| 379 | + return blocks | ||
| 380 | + end | ||
| 381 | + end | ||
| 382 | + end | ||
| 383 | + end | ||
| 384 | + | ||
| 385 | + for _, r in ipairs({row - range , row + range}) do | ||
| 386 | + for c = col - range + 1, col + range - 1 do | ||
| 387 | + local rroom, rblock = self:getRBByPos(c, r) | ||
| 388 | + if rroom and rblock.isOpen and not rblock:getEventType() then | ||
| 389 | + blocks[#blocks + 1] = rblock | ||
| 390 | + if #blocks >= count then | ||
| 391 | + return blocks | ||
| 392 | + end | ||
| 393 | + end | ||
| 394 | + end | ||
| 395 | + end | ||
| 396 | + end | ||
| 397 | + end | ||
| 398 | + return blocks | ||
| 399 | +end | ||
| 400 | + | ||
| 352 | function Map:getEnemysBySize(roomId, blockId, size) | 401 | function Map:getEnemysBySize(roomId, blockId, size) |
| 353 | local blocks = self:getBlocksBySize(roomId, blockId, size) | 402 | local blocks = self:getBlocksBySize(roomId, blockId, size) |
| 354 | local enemys = {} | 403 | local enemys = {} |
| @@ -514,7 +563,6 @@ createMap = function(self, mapId, isEnter, isNewRelay) | @@ -514,7 +563,6 @@ createMap = function(self, mapId, isEnter, isNewRelay) | ||
| 514 | --交易所 | 563 | --交易所 |
| 515 | randomFunc[AdvEventType.Trader] = function() | 564 | randomFunc[AdvEventType.Trader] = function() |
| 516 | -- if self.adv.isRelay and isNewRelay then return false end | 565 | -- if self.adv.isRelay and isNewRelay then return false end |
| 517 | - if self.adv.isRelay then return false end | ||
| 518 | return randomCommon() | 566 | return randomCommon() |
| 519 | end | 567 | end |
| 520 | --建筑 | 568 | --建筑 |
src/adv/AdvPassive.lua
| @@ -485,8 +485,10 @@ end | @@ -485,8 +485,10 @@ end | ||
| 485 | 485 | ||
| 486 | --10=战斗额外掉落次数 | 486 | --10=战斗额外掉落次数 |
| 487 | function Passive:effect10(count, triggerPms) | 487 | function Passive:effect10(count, triggerPms) |
| 488 | - if triggerPms.count then | ||
| 489 | - self.owner.battle.adv:award({[triggerPms.itemId] = triggerPms.count * count}, {log = {desc = "passive", int1 = self.id}}) | 488 | + if triggerPms.drops then |
| 489 | + for _, drop in pairs(triggerPms.drops) do | ||
| 490 | + drop[2] = drop[2] + math.floor(drop[2] * count) | ||
| 491 | + end | ||
| 490 | end | 492 | end |
| 491 | end | 493 | end |
| 492 | 494 |
src/adv/AdvTask.lua
| @@ -11,6 +11,11 @@ function AdvTask.bind(Adv) | @@ -11,6 +11,11 @@ function AdvTask.bind(Adv) | ||
| 11 | Shop = 5, --和指定商人交易N次 | 11 | Shop = 5, --和指定商人交易N次 |
| 12 | Build = 6, --和指定建筑交互N次 | 12 | Build = 6, --和指定建筑交互N次 |
| 13 | KillAll = 7, --消灭本层所有怪物 | 13 | KillAll = 7, --消灭本层所有怪物 |
| 14 | + KillElite = 8, --击杀精英怪 | ||
| 15 | + KillBoss = 9, --击杀Boss | ||
| 16 | + RelayOpen = 10, -- 解锁中继营地 | ||
| 17 | + FinishStoryId = 11, -- 完成故事 | ||
| 18 | + Click = 12, -- 点击点击事件 | ||
| 14 | } | 19 | } |
| 15 | 20 | ||
| 16 | -- 检查任务状态 在新领取任务的时候回进行检查 | 21 | -- 检查任务状态 在新领取任务的时候回进行检查 |
| @@ -48,6 +53,13 @@ function AdvTask.bind(Adv) | @@ -48,6 +53,13 @@ function AdvTask.bind(Adv) | ||
| 48 | end | 53 | end |
| 49 | end | 54 | end |
| 50 | 55 | ||
| 56 | + checkTaskFunc[Adv.TaskType.RelayOpen] = function() | ||
| 57 | + local limit = tonum(taskData.value2, 0) | ||
| 58 | + if self.level > limit or (self.level == limit and self.isRelay) then | ||
| 59 | + return -1 | ||
| 60 | + end | ||
| 61 | + end | ||
| 62 | + | ||
| 51 | if checkTaskFunc[taskData.condition] then | 63 | if checkTaskFunc[taskData.condition] then |
| 52 | status = checkTaskFunc[taskData.condition]() | 64 | status = checkTaskFunc[taskData.condition]() |
| 53 | else | 65 | else |
| @@ -84,6 +96,7 @@ function AdvTask.bind(Adv) | @@ -84,6 +96,7 @@ function AdvTask.bind(Adv) | ||
| 84 | end | 96 | end |
| 85 | end | 97 | end |
| 86 | self:addTask() | 98 | self:addTask() |
| 99 | + self:checkTask(Adv.TaskType.RelayOpen) --每一层都检查一下 | ||
| 87 | end | 100 | end |
| 88 | 101 | ||
| 89 | function Adv:checkTask(taskType, count, cond) | 102 | function Adv:checkTask(taskType, count, cond) |
src/models/RoleActivity.lua renamed to src/models/Activity.lua
| @@ -2,9 +2,10 @@ local Activity = class("Activity", require("shared.ModelBase")) | @@ -2,9 +2,10 @@ local Activity = class("Activity", require("shared.ModelBase")) | ||
| 2 | 2 | ||
| 3 | 3 | ||
| 4 | Activity.ActivityType = { | 4 | Activity.ActivityType = { |
| 5 | - | 5 | + DoubleDrop = 1, -- 双倍掉落 |
| 6 | } | 6 | } |
| 7 | 7 | ||
| 8 | + | ||
| 8 | local function checkActivityType(activityType) | 9 | local function checkActivityType(activityType) |
| 9 | if type(activityType) == "string" then | 10 | if type(activityType) == "string" then |
| 10 | activityType = Activity.ActivityType[activityType] | 11 | activityType = Activity.ActivityType[activityType] |
| @@ -16,12 +17,12 @@ end | @@ -16,12 +17,12 @@ end | ||
| 16 | function Activity:ctor(properties) | 17 | function Activity:ctor(properties) |
| 17 | Activity.super.ctor(self, properties) | 18 | Activity.super.ctor(self, properties) |
| 18 | 19 | ||
| 19 | - self.open = {} | ||
| 20 | - | 20 | + self._isOpen = {} |
| 21 | end | 21 | end |
| 22 | 22 | ||
| 23 | 23 | ||
| 24 | Activity.schema = { | 24 | Activity.schema = { |
| 25 | + ctime = {"table", {}}, -- 最近检查某项活动的开始时间 {id = time} | ||
| 25 | _1 = {"table", {}}, | 26 | _1 = {"table", {}}, |
| 26 | } | 27 | } |
| 27 | 28 | ||
| @@ -32,5 +33,49 @@ function Activity:data() | @@ -32,5 +33,49 @@ function Activity:data() | ||
| 32 | end | 33 | end |
| 33 | 34 | ||
| 34 | 35 | ||
| 36 | +function Activity:updateProperty(params) | ||
| 37 | + local type, default = table.unpack(self.schema[params.field]) | ||
| 38 | + | ||
| 39 | + if params.delta then | ||
| 40 | + self:incrProperty(params.field, params.delta) | ||
| 41 | + if not params.notNotify then | ||
| 42 | + self.owner:notifyUpdateProperty(params.field, self:getProperty(params.field)) | ||
| 43 | + end | ||
| 44 | + return true | ||
| 45 | + end | ||
| 46 | + if params.value then | ||
| 47 | + self:setProperty(params.field, params.value) | ||
| 48 | + if not params.notNotify then | ||
| 49 | + self.owner:notifyUpdateProperty(params.field, self:getProperty(params.field)) | ||
| 50 | + end | ||
| 51 | + return true | ||
| 52 | + end | ||
| 53 | + return false | ||
| 54 | +end | ||
| 55 | + | ||
| 56 | + | ||
| 57 | +function Activity:isOpen(activityType) | ||
| 58 | + activityType = checkActivityType(activityType) | ||
| 59 | + | ||
| 60 | +end | ||
| 61 | + | ||
| 62 | +-- 跨天刷新 --登录刷新 | ||
| 63 | +function Activity:checkActivityStatus(ltime, now, notify) | ||
| 64 | + | ||
| 65 | +end | ||
| 66 | + | ||
| 67 | +local checkActivityFunc = {} | ||
| 68 | + | ||
| 69 | +checkActivityFunc[Activity.ActivityType.DoubleDrop] = function(self, notNotify, activityType, ...) | ||
| 70 | + | ||
| 71 | +end | ||
| 72 | + | ||
| 73 | +function Activity:checkActivityEnter(notNotify, activityType, ...) | ||
| 74 | + if not activityType then return end | ||
| 75 | + if checkActivityFunc[activityType] then | ||
| 76 | + checkActivityFunc[activityType](self, notNotify, activityType, ...) | ||
| 77 | + end | ||
| 78 | +end | ||
| 79 | + | ||
| 35 | 80 | ||
| 36 | return Activity | 81 | return Activity |
| 37 | \ No newline at end of file | 82 | \ No newline at end of file |
src/models/Role.lua
| @@ -23,7 +23,7 @@ function Role:ctor( properties ) | @@ -23,7 +23,7 @@ function Role:ctor( properties ) | ||
| 23 | self.heros = {} | 23 | self.heros = {} |
| 24 | self.runeBag = {} | 24 | self.runeBag = {} |
| 25 | self.advData = nil | 25 | self.advData = nil |
| 26 | - | 26 | + self.activity = nil |
| 27 | self.advElChapter = tonum(redisproxy:hget("adv_season", "chapter"), globalCsv.adv_endless_default_chapter) -- 无尽模式记录的赛季对应章节 | 27 | self.advElChapter = tonum(redisproxy:hget("adv_season", "chapter"), globalCsv.adv_endless_default_chapter) -- 无尽模式记录的赛季对应章节 |
| 28 | self.advOverTime = tonum(redisproxy:hget("adv_season", "overTime")) -- 无尽模式关闭时间戳 | 28 | self.advOverTime = tonum(redisproxy:hget("adv_season", "overTime")) -- 无尽模式关闭时间戳 |
| 29 | end | 29 | end |
src/models/RolePlugin.lua
| @@ -10,6 +10,7 @@ function RolePlugin.bind(Role) | @@ -10,6 +10,7 @@ function RolePlugin.bind(Role) | ||
| 10 | self:loadRunes() | 10 | self:loadRunes() |
| 11 | self:loadHeros() | 11 | self:loadHeros() |
| 12 | self:loadDiner() | 12 | self:loadDiner() |
| 13 | + self:loadActivity() | ||
| 13 | end | 14 | end |
| 14 | 15 | ||
| 15 | function Role:reloadWhenLogin() | 16 | function Role:reloadWhenLogin() |
| @@ -507,6 +508,18 @@ function RolePlugin.bind(Role) | @@ -507,6 +508,18 @@ function RolePlugin.bind(Role) | ||
| 507 | end | 508 | end |
| 508 | end | 509 | end |
| 509 | 510 | ||
| 511 | + function Role:loadActivity() | ||
| 512 | + local roleId = self:getProperty("id") | ||
| 513 | + local dataKey = string.format(R_ACTIVITY, roleId) | ||
| 514 | + self.activity = require("models.Activity").new({key = dataKey}) | ||
| 515 | + self.activity.owner = self | ||
| 516 | + if not redisproxy:exists(dataKey) then | ||
| 517 | + self.activity:create() | ||
| 518 | + else | ||
| 519 | + self.activity:load() | ||
| 520 | + end | ||
| 521 | + end | ||
| 522 | + | ||
| 510 | function Role:loadDiner() | 523 | function Role:loadDiner() |
| 511 | local roleId = self:getProperty("id") | 524 | local roleId = self:getProperty("id") |
| 512 | local dataKey = string.format(R_DINER, roleId) | 525 | local dataKey = string.format(R_DINER, roleId) |
| @@ -1191,6 +1204,7 @@ function RolePlugin.bind(Role) | @@ -1191,6 +1204,7 @@ function RolePlugin.bind(Role) | ||
| 1191 | info.wakeL = hero:getProperty("wakeL") | 1204 | info.wakeL = hero:getProperty("wakeL") |
| 1192 | info.blockLevel = hero:getSkillLevel(4) | 1205 | info.blockLevel = hero:getSkillLevel(4) |
| 1193 | info.specialLevel = hero:getSkillLevel(1) | 1206 | info.specialLevel = hero:getSkillLevel(1) |
| 1207 | + info.passiveLevel = hero:getSkillLevel(3) | ||
| 1194 | info.runeSkill = hero:getRuneSkill(102) | 1208 | info.runeSkill = hero:getRuneSkill(102) |
| 1195 | teamInfo.heros[slot] = info | 1209 | teamInfo.heros[slot] = info |
| 1196 | end | 1210 | end |
| @@ -1443,8 +1457,8 @@ function RolePlugin.bind(Role) | @@ -1443,8 +1457,8 @@ function RolePlugin.bind(Role) | ||
| 1443 | 1457 | ||
| 1444 | local rechargeData = csvdb["shop_rechargeCsv"][orderObject:getProperty("rechargeId")] | 1458 | local rechargeData = csvdb["shop_rechargeCsv"][orderObject:getProperty("rechargeId")] |
| 1445 | if rechargeData.rmb ~= tonumber(params.amount) then | 1459 | if rechargeData.rmb ~= tonumber(params.amount) then |
| 1446 | - skynet.error(string.format("fake order: %s, roleId: %d, order: %s", | ||
| 1447 | - params.transactionId, roleId, partnerOrderStr | 1460 | + skynet.error(string.format("fake order: %s, roleId: %d, order: %s, rmb %s, get %s", |
| 1461 | + params.transactionId, roleId, partnerOrderStr, rechargeData.rmb, params.amount | ||
| 1448 | )) | 1462 | )) |
| 1449 | return | 1463 | return |
| 1450 | end | 1464 | end |
src/models/RoleTask.lua
| @@ -184,7 +184,7 @@ local AchievListener = { | @@ -184,7 +184,7 @@ local AchievListener = { | ||
| 184 | } | 184 | } |
| 185 | } | 185 | } |
| 186 | 186 | ||
| 187 | -local SudokuListerer = { | 187 | +local SudokuListener = { |
| 188 | func = "checkSudokuTask", | 188 | func = "checkSudokuTask", |
| 189 | listen = { | 189 | listen = { |
| 190 | [TaskType.HangPass] = {{1, 1, f("id")}}, | 190 | [TaskType.HangPass] = {{1, 1, f("id")}}, |
| @@ -205,12 +205,20 @@ local SudokuListerer = { | @@ -205,12 +205,20 @@ local SudokuListerer = { | ||
| 205 | } | 205 | } |
| 206 | } | 206 | } |
| 207 | 207 | ||
| 208 | +local ActivityListener = { | ||
| 209 | + func = "checkActivityTask", | ||
| 210 | + listener = { | ||
| 211 | + | ||
| 212 | + } | ||
| 213 | +} | ||
| 214 | + | ||
| 208 | 215 | ||
| 209 | local TaskListeners = { | 216 | local TaskListeners = { |
| 210 | StoryListener, | 217 | StoryListener, |
| 211 | CommonListener, | 218 | CommonListener, |
| 212 | AchievListener, | 219 | AchievListener, |
| 213 | - SudokuListerer, | 220 | + SudokuListener, |
| 221 | + ActivityListener, | ||
| 214 | } | 222 | } |
| 215 | 223 | ||
| 216 | local RoleTask = {} | 224 | local RoleTask = {} |
| @@ -517,6 +525,10 @@ function RoleTask.bind(Role) | @@ -517,6 +525,10 @@ function RoleTask.bind(Role) | ||
| 517 | end | 525 | end |
| 518 | end | 526 | end |
| 519 | 527 | ||
| 528 | + function Role:checkActivityTask(notNotify, activityType, ...) | ||
| 529 | + self.activity:checkActivityEnter(notNotify, activityType, ...) | ||
| 530 | + end | ||
| 531 | + | ||
| 520 | end | 532 | end |
| 521 | 533 | ||
| 522 | return RoleTask | 534 | return RoleTask |
| 523 | \ No newline at end of file | 535 | \ No newline at end of file |