Commit 766ddd19022aa338668d679346172504f984cb3a
Merge branch 'cn/develop' into cn/publish/preview
# Conflicts: # src/csvdata
Showing
9 changed files
with
102 additions
and
26 deletions
Show diff stats
src/GlobalVar.lua
| @@ -430,6 +430,7 @@ SystemBnousType = { | @@ -430,6 +430,7 @@ SystemBnousType = { | ||
| 430 | UpSpeedNum = 15, -- 加速次数上限增加 15=1探索加速or 2齿轮加速or 3餐厅加速=增加次数 | 430 | UpSpeedNum = 15, -- 加速次数上限增加 15=1探索加速or 2齿轮加速or 3餐厅加速=增加次数 |
| 431 | ChangeBaseCount = 16, -- 每日奖励关卡挑战卡基础数量增加 | 431 | ChangeBaseCount = 16, -- 每日奖励关卡挑战卡基础数量增加 |
| 432 | ChangeBuyCount = 17, -- 每日奖励关卡挑战卡可购买次数增加, | 432 | ChangeBuyCount = 17, -- 每日奖励关卡挑战卡可购买次数增加, |
| 433 | + ExtraProp = 18, -- 每次探索加速额外获得道具 | ||
| 433 | } | 434 | } |
| 434 | 435 | ||
| 435 | -- 开箱物品类型 | 436 | -- 开箱物品类型 |
src/ProtocolCode.lua
| @@ -61,7 +61,7 @@ actionCodes = { | @@ -61,7 +61,7 @@ actionCodes = { | ||
| 61 | Role_runeBuyRpc = 142, -- 铭文购买 | 61 | Role_runeBuyRpc = 142, -- 铭文购买 |
| 62 | Role_setFriendTeamRpc = 143, -- 设置好友切磋队伍 | 62 | Role_setFriendTeamRpc = 143, -- 设置好友切磋队伍 |
| 63 | Role_setBgRpc = 144, -- 设置看板娘 | 63 | Role_setBgRpc = 144, -- 设置看板娘 |
| 64 | - Role_itemConvertMonthCardRpc = 145, -- 兑换月卡/战令道具 | 64 | + Role_itemConvertSpecialRpc = 145, -- 兑换月卡/战令探索指令等 特殊道具 |
| 65 | Role_worldLineRoulette = 146, --世界线抽轮盘 | 65 | Role_worldLineRoulette = 146, --世界线抽轮盘 |
| 66 | Role_worldLineReward = 147, -- 世界线一键领取奖励 | 66 | Role_worldLineReward = 147, -- 世界线一键领取奖励 |
| 67 | 67 | ||
| @@ -250,7 +250,7 @@ actionCodes = { | @@ -250,7 +250,7 @@ actionCodes = { | ||
| 250 | Activity_actCalendaTaskRpc = 655, | 250 | Activity_actCalendaTaskRpc = 655, |
| 251 | Activity_actPaySignRpc = 656, | 251 | Activity_actPaySignRpc = 656, |
| 252 | Activity_exchangeRpc = 657, | 252 | Activity_exchangeRpc = 657, |
| 253 | - Activity_gachakonRpc = 658, | 253 | + Activity_gachakonRpc = 658, --狩猎祭 抽扭蛋机 |
| 254 | Activity_hangDropRpc = 659, | 254 | Activity_hangDropRpc = 659, |
| 255 | Activity_startBattleRpc = 660, | 255 | Activity_startBattleRpc = 660, |
| 256 | Activity_endBattleRpc = 661, | 256 | Activity_endBattleRpc = 661, |
| @@ -268,6 +268,7 @@ actionCodes = { | @@ -268,6 +268,7 @@ actionCodes = { | ||
| 268 | Activity_returnerTaskRpc = 673, | 268 | Activity_returnerTaskRpc = 673, |
| 269 | Activity_actNewUserTaskRpc = 674, | 269 | Activity_actNewUserTaskRpc = 674, |
| 270 | Activity_buyBattleTicketRpc = 675, | 270 | Activity_buyBattleTicketRpc = 675, |
| 271 | + Activity_resetGachakonRpc = 676, --狩猎祭,重制扭蛋机 | ||
| 271 | 272 | ||
| 272 | Radio_startQuestRpc = 700, | 273 | Radio_startQuestRpc = 700, |
| 273 | Radio_finishQuestRpc = 701, | 274 | Radio_finishQuestRpc = 701, |
src/actions/ActivityAction.lua
| @@ -479,6 +479,20 @@ function _M.gachakonRpc(agent, data) | @@ -479,6 +479,20 @@ function _M.gachakonRpc(agent, data) | ||
| 479 | return true | 479 | return true |
| 480 | end | 480 | end |
| 481 | 481 | ||
| 482 | +function _M.resetGachakonRpc(agent, data) | ||
| 483 | + local role = agent.role | ||
| 484 | + local msg = MsgPack.unpack(data) | ||
| 485 | + local actid = msg.actid | ||
| 486 | + | ||
| 487 | + if not role.activity:isOpenById(actid, "Gachakon") then return 1 end | ||
| 488 | + | ||
| 489 | + if role.activity:isResetById(actid, "Gachakon") then return 2 end | ||
| 490 | + role.activity:resetActDataById(actid) | ||
| 491 | + | ||
| 492 | + SendPacket(actionCodes.Activity_resetGachakonRpc, MsgPack.pack({})) | ||
| 493 | + return true | ||
| 494 | +end | ||
| 495 | + | ||
| 482 | function _M.hangDropRpc(agent, data) | 496 | function _M.hangDropRpc(agent, data) |
| 483 | local role = agent.role | 497 | local role = agent.role |
| 484 | local msg = MsgPack.unpack(data) | 498 | local msg = MsgPack.unpack(data) |
src/actions/HangAction.lua
| @@ -528,16 +528,20 @@ function _M.quickRpc(agent , data) | @@ -528,16 +528,20 @@ function _M.quickRpc(agent , data) | ||
| 528 | end | 528 | end |
| 529 | 529 | ||
| 530 | --宝藏加速 | 530 | --宝藏加速 |
| 531 | - local treasureList= role.dailyData:quickTreasureList(hangInfo.carbonId, time) or {} | ||
| 532 | - if next(treasureList) then | ||
| 533 | - for id, val in pairs(treasureList) do | ||
| 534 | - local award = val.award:toNumMap() | ||
| 535 | - for k,v in pairs(award) do | ||
| 536 | - reward[k] = (reward[k] or 0) + v | ||
| 537 | - end | 531 | + local treasureList = role.dailyData:quickTreasureList(hangInfo.carbonId, time) or {} |
| 532 | + for id, val in pairs(treasureList) do | ||
| 533 | + local award = val.award:toNumMap() | ||
| 534 | + for k,v in pairs(award) do | ||
| 535 | + reward[k] = (reward[k] or 0) + v | ||
| 538 | end | 536 | end |
| 539 | end | 537 | end |
| 540 | 538 | ||
| 539 | + --等级 额外奖励 | ||
| 540 | + local levelReward = role:getExtraProp() | ||
| 541 | + for k, v in pairs(levelReward or {}) do | ||
| 542 | + reward[k] = (reward[k] or 0) + v | ||
| 543 | + end | ||
| 544 | + | ||
| 541 | local change | 545 | local change |
| 542 | reward, change = role:award(reward, {log = {desc = "quickHang", int1 = hangInfo.carbonId}}) | 546 | reward, change = role:award(reward, {log = {desc = "quickHang", int1 = hangInfo.carbonId}}) |
| 543 | if reward[ItemId.Gold] then | 547 | if reward[ItemId.Gold] then |
src/actions/RoleAction.lua
| @@ -1712,18 +1712,18 @@ function _M.setBgRpc(agent, data) | @@ -1712,18 +1712,18 @@ function _M.setBgRpc(agent, data) | ||
| 1712 | return true | 1712 | return true |
| 1713 | end | 1713 | end |
| 1714 | 1714 | ||
| 1715 | -function _M.itemConvertMonthCardRpc(agent, data) | 1715 | +function _M.itemConvertSpecialRpc(agent, data) |
| 1716 | local role = agent.role | 1716 | local role = agent.role |
| 1717 | local msg = MsgPack.unpack(data) | 1717 | local msg = MsgPack.unpack(data) |
| 1718 | local itemId = msg.item_id | 1718 | local itemId = msg.item_id |
| 1719 | - local typ = msg.typ | ||
| 1720 | - local count = msg.count | 1719 | + local count = msg.count or 1 |
| 1721 | local exchangeId = msg.exchange_id | 1720 | local exchangeId = msg.exchange_id |
| 1722 | 1721 | ||
| 1723 | - if not ItemId[itemId] then return 1 end | 1722 | + local itemData = csvdb["itemCsv"][itemId] |
| 1723 | + if not itemData then return 1 end | ||
| 1724 | 1724 | ||
| 1725 | if not role:checkItemEnough({[itemId] = count}) then return 2 end | 1725 | if not role:checkItemEnough({[itemId] = count}) then return 2 end |
| 1726 | - role:costItems({[itemId] = count}, {log = {desc = "itemConvertmonthCard", int1 = count, int2 = count}}) | 1726 | + role:costItems({[itemId] = count}, {log = {desc = "itemConvertSpecial", int1 = itemId, int2 = itemData.type}}) |
| 1727 | 1727 | ||
| 1728 | local rechargeData = csvdb["shop_rechargeCsv"][exchangeId] | 1728 | local rechargeData = csvdb["shop_rechargeCsv"][exchangeId] |
| 1729 | if not rechargeData then | 1729 | if not rechargeData then |
| @@ -1751,27 +1751,27 @@ function _M.worldLineRoulette(agent, data) | @@ -1751,27 +1751,27 @@ function _M.worldLineRoulette(agent, data) | ||
| 1751 | local rouletteCount = worldChangePoints[ItemWorldLine.RouletteCount] or 0 | 1751 | local rouletteCount = worldChangePoints[ItemWorldLine.RouletteCount] or 0 |
| 1752 | if rouletteCount == 0 then return 1 end | 1752 | if rouletteCount == 0 then return 1 end |
| 1753 | 1753 | ||
| 1754 | - local worldline_gift_base_10, worldline_gift_base_1, worldline_gift_magnification_10, worldline_gift_magnification_1 = {}, {}, {}, {} | 1754 | + local worldline_gift_base_10, worldline_gift_base_1, worldline_gift_magnification_1, worldline_gift_magnification_0 = {}, {}, {}, {} |
| 1755 | for k, v in pairs(globalCsv.worldline_gift_base_10) do | 1755 | for k, v in pairs(globalCsv.worldline_gift_base_10) do |
| 1756 | worldline_gift_base_10[k] = {v} | 1756 | worldline_gift_base_10[k] = {v} |
| 1757 | end | 1757 | end |
| 1758 | for k, v in pairs(globalCsv.worldline_gift_base_1) do | 1758 | for k, v in pairs(globalCsv.worldline_gift_base_1) do |
| 1759 | worldline_gift_base_1[k] = {v} | 1759 | worldline_gift_base_1[k] = {v} |
| 1760 | end | 1760 | end |
| 1761 | - for k, v in pairs(globalCsv.worldline_gift_magnification_10) do | ||
| 1762 | - worldline_gift_magnification_10[k] = {v} | ||
| 1763 | - end | ||
| 1764 | for k, v in pairs(globalCsv.worldline_gift_magnification_1) do | 1761 | for k, v in pairs(globalCsv.worldline_gift_magnification_1) do |
| 1765 | worldline_gift_magnification_1[k] = {v} | 1762 | worldline_gift_magnification_1[k] = {v} |
| 1766 | end | 1763 | end |
| 1764 | + for k, v in pairs(globalCsv.worldline_gift_magnification_0) do | ||
| 1765 | + worldline_gift_magnification_0[k] = {v} | ||
| 1766 | + end | ||
| 1767 | 1767 | ||
| 1768 | local gift_base_10 = (math.randWeight(worldline_gift_base_10, 1) or 0) * 10 | 1768 | local gift_base_10 = (math.randWeight(worldline_gift_base_10, 1) or 0) * 10 |
| 1769 | local gift_base_1 = math.randWeight(worldline_gift_base_1, 1) or 0 | 1769 | local gift_base_1 = math.randWeight(worldline_gift_base_1, 1) or 0 |
| 1770 | 1770 | ||
| 1771 | - local gift_magnification_10 = (math.randWeight(worldline_gift_magnification_10, 1) or 0) * 10 | ||
| 1772 | local gift_magnification_1 = math.randWeight(worldline_gift_magnification_1, 1) or 0 | 1771 | local gift_magnification_1 = math.randWeight(worldline_gift_magnification_1, 1) or 0 |
| 1772 | + local gift_magnification_0 = (math.randWeight(worldline_gift_magnification_0, 1) or 0) * (0.1) | ||
| 1773 | 1773 | ||
| 1774 | - local points = (gift_base_10 + gift_base_1) * (gift_magnification_10 + gift_magnification_1) | 1774 | + local points = math.floor((gift_base_10 + gift_base_1) * (gift_magnification_1 + gift_magnification_0)) |
| 1775 | worldChangePoints[ItemWorldLine.RouletteCount] = worldChangePoints[ItemWorldLine.RouletteCount] - 1 | 1775 | worldChangePoints[ItemWorldLine.RouletteCount] = worldChangePoints[ItemWorldLine.RouletteCount] - 1 |
| 1776 | worldChangePoints[ItemWorldLine.Points] = worldChangePoints[ItemWorldLine.Points] + points | 1776 | worldChangePoints[ItemWorldLine.Points] = worldChangePoints[ItemWorldLine.Points] + points |
| 1777 | role:updateProperty({field = "worldChangePoints", value = worldChangePoints}) | 1777 | role:updateProperty({field = "worldChangePoints", value = worldChangePoints}) |
src/agent.lua
| @@ -35,10 +35,17 @@ local function handle_timeout() | @@ -35,10 +35,17 @@ local function handle_timeout() | ||
| 35 | skynet.timeout(100, handle_timeout) | 35 | skynet.timeout(100, handle_timeout) |
| 36 | end | 36 | end |
| 37 | 37 | ||
| 38 | +local function handle_gc() | ||
| 39 | + if agentInfo.open_timer then return end | ||
| 40 | + collectgarbage("collect") | ||
| 41 | + skynet.timeout(6000, handle_gc) | ||
| 42 | +end | ||
| 43 | + | ||
| 38 | function start_agent_timer() | 44 | function start_agent_timer() |
| 39 | if agentInfo.open_timer then return end | 45 | if agentInfo.open_timer then return end |
| 40 | agentInfo.open_timer = true | 46 | agentInfo.open_timer = true |
| 41 | skynet.timeout(150, handle_timeout) | 47 | skynet.timeout(150, handle_timeout) |
| 48 | + skynet.timeout(6000, handle_gc) | ||
| 42 | end | 49 | end |
| 43 | 50 | ||
| 44 | function cancel_agent_timer() | 51 | function cancel_agent_timer() |
src/models/Activity.lua
| @@ -93,6 +93,8 @@ Activity.schema = { | @@ -93,6 +93,8 @@ Activity.schema = { | ||
| 93 | 93 | ||
| 94 | act34 = {"table", {}}, -- 战令记录{unlock = 1, freeR = "", payR = "", lvl = 10, sum = 100} | 94 | act34 = {"table", {}}, -- 战令记录{unlock = 1, freeR = "", payR = "", lvl = 10, sum = 100} |
| 95 | act36 = {"table", {}}, -- 每日活跃签到 {0=day, 1=1,2=1,3=1} | 95 | act36 = {"table", {}}, -- 每日活跃签到 {0=day, 1=1,2=1,3=1} |
| 96 | + | ||
| 97 | + reset20 = {"number", 1}, -- 重置扭蛋机 | ||
| 96 | } | 98 | } |
| 97 | 99 | ||
| 98 | function Activity:data() | 100 | function Activity:data() |
| @@ -121,6 +123,8 @@ function Activity:data() | @@ -121,6 +123,8 @@ function Activity:data() | ||
| 121 | 123 | ||
| 122 | act34 = self:getProperty("act34"), | 124 | act34 = self:getProperty("act34"), |
| 123 | act36 = self:getProperty("act36"), | 125 | act36 = self:getProperty("act36"), |
| 126 | + | ||
| 127 | + reset20 = self:getProperty("reset20") | ||
| 124 | } | 128 | } |
| 125 | end | 129 | end |
| 126 | 130 | ||
| @@ -207,6 +211,24 @@ function Activity:isOpenById(id, activityType) | @@ -207,6 +211,24 @@ function Activity:isOpenById(id, activityType) | ||
| 207 | return self._isOpen[id] | 211 | return self._isOpen[id] |
| 208 | end | 212 | end |
| 209 | 213 | ||
| 214 | +function Activity:isResetById(id, activityType) | ||
| 215 | + activityType = checkActivityType(activityType) | ||
| 216 | + local cfg = csvdb["activity_ctrlCsv"][id] | ||
| 217 | + if not cfg then return false end | ||
| 218 | + if activityType ~= 0 and cfg.showType ~= activityType then return false end | ||
| 219 | + return self:getResetData(activityType) == 0 | ||
| 220 | +end | ||
| 221 | + | ||
| 222 | +function Activity:getResetData(actType) | ||
| 223 | + actType = checkActivityType(actType) | ||
| 224 | + return self:getProperty("reset" .. actType) | ||
| 225 | +end | ||
| 226 | + | ||
| 227 | +function Activity:updateResetData(actType, reset) | ||
| 228 | + actType = checkActivityType(actType) | ||
| 229 | + self:updateProperty({field = "reset" .. actType, value = reset}) | ||
| 230 | +end | ||
| 231 | + | ||
| 210 | function Activity:getActData(actType) | 232 | function Activity:getActData(actType) |
| 211 | actType = checkActivityType(actType) | 233 | actType = checkActivityType(actType) |
| 212 | return self:getProperty("act" .. actType) | 234 | return self:getProperty("act" .. actType) |
| @@ -756,8 +778,14 @@ activityFunc[Activity.ActivityType.Gachakon] = { | @@ -756,8 +778,14 @@ activityFunc[Activity.ActivityType.Gachakon] = { | ||
| 756 | self:updateActData(actType, {}, not notify) | 778 | self:updateActData(actType, {}, not notify) |
| 757 | end, | 779 | end, |
| 758 | ["crossDay"] = function(self, actType, notify) | 780 | ["crossDay"] = function(self, actType, notify) |
| 781 | + self:updateResetData(actType, 1) | ||
| 759 | self:updateActData(actType, {}, not notify) | 782 | self:updateActData(actType, {}, not notify) |
| 760 | end, | 783 | end, |
| 784 | + ["reset"] = function(self, actType) | ||
| 785 | + if self:getResetData(actType) == 0 then return end | ||
| 786 | + self:updateResetData(actType, 0) | ||
| 787 | + self:updateActData(actType, {}) | ||
| 788 | + end | ||
| 761 | } | 789 | } |
| 762 | 790 | ||
| 763 | -- 活动卡池 | 791 | -- 活动卡池 |
| @@ -865,6 +893,15 @@ function Activity:refreshWeekData(notify) | @@ -865,6 +893,15 @@ function Activity:refreshWeekData(notify) | ||
| 865 | end | 893 | end |
| 866 | end | 894 | end |
| 867 | 895 | ||
| 896 | +function Activity:resetActDataById(actId) | ||
| 897 | + local actData = csvdb["activity_ctrlCsv"][actId] | ||
| 898 | + if not actData then return end | ||
| 899 | + local actType = actData.showType | ||
| 900 | + if activityFunc[actType] and activityFunc[actType]['reset'] then | ||
| 901 | + activityFunc[actType]["reset"](self, actType) | ||
| 902 | + end | ||
| 903 | +end | ||
| 904 | + | ||
| 868 | function Activity:checkActivity(notNotify, activityType, ...) | 905 | function Activity:checkActivity(notNotify, activityType, ...) |
| 869 | if not activityType then return end | 906 | if not activityType then return end |
| 870 | if not self:isOpen(activityType) then return end | 907 | if not self:isOpen(activityType) then return end |
src/models/RoleLog.lua
| @@ -66,8 +66,8 @@ local ItemReason = { | @@ -66,8 +66,8 @@ local ItemReason = { | ||
| 66 | shopBuy = 150, -- 商店购买 | 66 | shopBuy = 150, -- 商店购买 |
| 67 | monthCardReward = 151, --月卡奖励 | 67 | monthCardReward = 151, --月卡奖励 |
| 68 | smonthCardReward = 152, --特刊奖励 | 68 | smonthCardReward = 152, --特刊奖励 |
| 69 | - itemConvertmonthCard = 153, --兑换月卡 | ||
| 70 | - itemConvertsmonthCard = 154, --兑换特刊 | 69 | + itemConvertSpecial = 153, --兑换月卡/战令/探索指令 特殊道具 |
| 70 | + buyDiamondCardReward = 154, --购买钻石额外赠送奖励 | ||
| 71 | 71 | ||
| 72 | advHang = 301, -- 拾荒挂机 | 72 | advHang = 301, -- 拾荒挂机 |
| 73 | hangBattle = 302, -- 挂机战斗 | 73 | hangBattle = 302, -- 挂机战斗 |
src/models/RolePlugin.lua
| @@ -2448,6 +2448,12 @@ function RolePlugin.bind(Role) | @@ -2448,6 +2448,12 @@ function RolePlugin.bind(Role) | ||
| 2448 | self:updateProperty({field = "rechargeF", value = rechargeF}) | 2448 | self:updateProperty({field = "rechargeF", value = rechargeF}) |
| 2449 | end | 2449 | end |
| 2450 | self:gainDiamond({count = diamondCount, isRecharge = true, sid = params.sid, log = {desc = "recharge", int1 = id}}) | 2450 | self:gainDiamond({count = diamondCount, isRecharge = true, sid = params.sid, log = {desc = "recharge", int1 = id}}) |
| 2451 | + | ||
| 2452 | + --已购月卡 购买魔导石 赠送cardReward | ||
| 2453 | + if not self.storeData:isMonthCardExpire() then | ||
| 2454 | + reward, _ = self:award(rechargeData.cardReward, {isRecharge = true, log = {desc = "buyDiamondCardReward", int1 = id}}) | ||
| 2455 | + end | ||
| 2456 | + | ||
| 2451 | elseif rechargeData.shop == 2 then --通行证商店 | 2457 | elseif rechargeData.shop == 2 then --通行证商店 |
| 2452 | --签收 + 订阅奖励 | 2458 | --签收 + 订阅奖励 |
| 2453 | local tmpreward, _ = self.storeData:onBuyCard(rechargeData.type, rechargeData.time, rechargeData.id, rechargeData.activity_id) | 2459 | local tmpreward, _ = self.storeData:onBuyCard(rechargeData.type, rechargeData.time, rechargeData.id, rechargeData.activity_id) |
| @@ -2458,10 +2464,6 @@ function RolePlugin.bind(Role) | @@ -2458,10 +2464,6 @@ function RolePlugin.bind(Role) | ||
| 2458 | reward, _ = self:award(rechargeData.itemFirst, {isRecharge = true, log = {desc = "recharge", int1 = id}}) | 2464 | reward, _ = self:award(rechargeData.itemFirst, {isRecharge = true, log = {desc = "recharge", int1 = id}}) |
| 2459 | 2465 | ||
| 2460 | self:checkTaskEnter("BuyLimitPack", {id = id}) | 2466 | self:checkTaskEnter("BuyLimitPack", {id = id}) |
| 2461 | - --增加购买记录 | ||
| 2462 | - local buyRecord = self.storeData:getProperty("buyR") or {} | ||
| 2463 | - buyRecord[id] = (buyRecord[id] or 0) + 1 | ||
| 2464 | - self.storeData:updateProperty({field = "buyR", value = buyRecord}) | ||
| 2465 | else | 2467 | else |
| 2466 | skynet.error("[recharge] invalid recharge shop type " .. id) | 2468 | skynet.error("[recharge] invalid recharge shop type " .. id) |
| 2467 | return 3 | 2469 | return 3 |
| @@ -3016,6 +3018,16 @@ function RolePlugin.bind(Role) | @@ -3016,6 +3018,16 @@ function RolePlugin.bind(Role) | ||
| 3016 | return levelBnous[SystemBnousType.ChangeBuyCount] or 0 | 3018 | return levelBnous[SystemBnousType.ChangeBuyCount] or 0 |
| 3017 | end | 3019 | end |
| 3018 | 3020 | ||
| 3021 | + function Role:getExtraProp() | ||
| 3022 | + local levelBnous = self:getLevelBnous() | ||
| 3023 | + local extraPropReward = levelBnous[SystemBnousType.ExtraProp] or {} | ||
| 3024 | + local reward = {} | ||
| 3025 | + for k, v in pairs(extraPropReward) do | ||
| 3026 | + reward[k] = (reward[k] or 0) + v | ||
| 3027 | + end | ||
| 3028 | + return reward | ||
| 3029 | + end | ||
| 3030 | + | ||
| 3019 | function Role:getLevelBnous() | 3031 | function Role:getLevelBnous() |
| 3020 | local levelBnous = {} | 3032 | local levelBnous = {} |
| 3021 | local curLevel = self:getProperty("level") | 3033 | local curLevel = self:getProperty("level") |