Commit 98d32f9218d90cad222d51af75b932b799626195
1 parent
318a7041
多编队
Showing
8 changed files
with
219 additions
and
27 deletions
Show diff stats
src/GlobalVar.lua
src/ProtocolCode.lua
| ... | ... | @@ -49,6 +49,7 @@ actionCodes = { |
| 49 | 49 | Role_updateFeedbackInfoRpc = 133, |
| 50 | 50 | Role_useSelectItemRpc = 134, -- 使用多选一礼包 |
| 51 | 51 | Role_broadGetSSR = 135, -- 全服广播 获得ssr英雄 |
| 52 | + Role_renameTeamRpc = 136, -- 编队改名 | |
| 52 | 53 | |
| 53 | 54 | Adv_startAdvRpc = 151, |
| 54 | 55 | Adv_startHangRpc = 152, |
| ... | ... | @@ -71,6 +72,7 @@ actionCodes = { |
| 71 | 72 | Adv_rankRpc = 169, |
| 72 | 73 | Adv_quickHangRpc = 170, |
| 73 | 74 | Adv_refreshSupportRpc = 171, |
| 75 | + Adv_selectTeamRpc = 172, | |
| 74 | 76 | |
| 75 | 77 | Hero_loadInfos = 201, |
| 76 | 78 | Hero_updateProperty = 202, |
| ... | ... | @@ -111,6 +113,7 @@ actionCodes = { |
| 111 | 113 | Hang_hangGiftRpc = 262, |
| 112 | 114 | Hang_bagFieldRpc = 263, |
| 113 | 115 | Hang_chatLineRpc = 264, |
| 116 | + Hang_selectTeamRpc = 265, | |
| 114 | 117 | |
| 115 | 118 | Diner_updateProperty = 300, |
| 116 | 119 | Diner_addSellRpc = 301, | ... | ... |
src/actions/AdvAction.lua
| ... | ... | @@ -47,6 +47,10 @@ local function checkFormat(role, format, checkAdvTeam) |
| 47 | 47 | end |
| 48 | 48 | end |
| 49 | 49 | |
| 50 | + if not format then | |
| 51 | + format = role:getProperty("advTeam") | |
| 52 | + end | |
| 53 | + | |
| 50 | 54 | if checkAdvTeam then |
| 51 | 55 | for _, heroId in pairs(role:getProperty("advTeam").heros or {}) do |
| 52 | 56 | hadHero[heroId] = true |
| ... | ... | @@ -83,7 +87,7 @@ function _M.startAdvRpc( agent, data ) |
| 83 | 87 | local msg = MsgPack.unpack(data) |
| 84 | 88 | local chapterId = msg.chapterId --关卡id |
| 85 | 89 | local layer = msg.layer or 1 --选择层数 |
| 86 | - local format = msg.format --编队 | |
| 90 | + --local format = msg.format --编队 | |
| 87 | 91 | local supportIdx = msg.supportIdx --选择的支援效果 |
| 88 | 92 | if not role:isFuncUnlock(FuncUnlock.Adv) then return end |
| 89 | 93 | |
| ... | ... | @@ -127,18 +131,18 @@ function _M.startAdvRpc( agent, data ) |
| 127 | 131 | end |
| 128 | 132 | end |
| 129 | 133 | |
| 130 | - if not checkFormat(role, format) then return 7 end | |
| 131 | - | |
| 132 | - local advTeam = role:getProperty("advTeam") | |
| 133 | - table.clear(advTeam) | |
| 134 | - | |
| 135 | - advTeam.heros = {} | |
| 136 | - for slot, heroId in pairs(format.heros) do | |
| 137 | - advTeam.heros[slot] = heroId | |
| 138 | - end | |
| 139 | - advTeam.leader = format.leader | |
| 140 | - advTeam.leader2 = format.leader2 | |
| 141 | - role:updateProperty({field = "advTeam", value = advTeam}) | |
| 134 | + if not checkFormat(role) then return 7 end | |
| 135 | + | |
| 136 | + --local advTeam = role:getProperty("advTeam") | |
| 137 | + --table.clear(advTeam) | |
| 138 | + | |
| 139 | + --advTeam.heros = {} | |
| 140 | + --for slot, heroId in pairs(format.heros) do | |
| 141 | + -- advTeam.heros[slot] = heroId | |
| 142 | + --end | |
| 143 | + --advTeam.leader = format.leader | |
| 144 | + --advTeam.leader2 = format.leader2 | |
| 145 | + --role:updateProperty({field = "advTeam", value = advTeam}) | |
| 142 | 146 | if AdvCommon.isEndless(chapterId) then |
| 143 | 147 | role.dailyData:updateProperty({field = "advElC", delta = 1}) |
| 144 | 148 | else |
| ... | ... | @@ -950,4 +954,56 @@ function _M.refreshSupportRpc(agent, data) |
| 950 | 954 | return true |
| 951 | 955 | end |
| 952 | 956 | |
| 957 | +function _M.roleFormatRpc(agent , data) | |
| 958 | + local role = agent.role | |
| 959 | + local msg = MsgPack.unpack(data) | |
| 960 | + local index = msg.index -- 阵容索引 | |
| 961 | + local title = msg.title -- 阵容名称 | |
| 962 | + local team = {} | |
| 963 | + for slot, heroId in pairs(msg.heros) do | |
| 964 | + if not role.heros[heroId] then | |
| 965 | + return 1 | |
| 966 | + end | |
| 967 | + end | |
| 968 | + | |
| 969 | + if index > 10 then | |
| 970 | + return 2 | |
| 971 | + end | |
| 972 | + | |
| 973 | + team.heros = {} | |
| 974 | + for slot, heroId in pairs(msg.heros) do | |
| 975 | + team.heros[slot] = heroId | |
| 976 | + end | |
| 977 | + team.leader = msg.leader | |
| 978 | + team.leader2 = msg.leader2 | |
| 979 | + team.title = title | |
| 980 | + role:setAdvTeamFormat(index, team) | |
| 981 | + | |
| 982 | + local advTeam = role:getProperty("advTeam") | |
| 983 | + table.clear(advTeam) | |
| 984 | + | |
| 985 | + advTeam.heros = {} | |
| 986 | + for slot, heroId in pairs(msg.heros) do | |
| 987 | + advTeam.heros[slot] = heroId | |
| 988 | + end | |
| 989 | + advTeam.leader = msg.leader | |
| 990 | + advTeam.leader2 = msg.leader2 | |
| 991 | + role:updateProperty({field = "advTeam", value = advTeam}) | |
| 992 | + | |
| 993 | + SendPacket(actionCodes.Adv_roleFormatRpc, '') | |
| 994 | + return true | |
| 995 | +end | |
| 996 | + | |
| 997 | +function _M.selectTeamRpc(agent, data) | |
| 998 | + local role = agent.role | |
| 999 | + local msg = MsgPack.unpack(data) | |
| 1000 | + local index = msg.index -- 阵容索引 | |
| 1001 | + local team = role:getAdvTeamFormat(index) | |
| 1002 | + if not next(team) then return end | |
| 1003 | + role:updateProperty({field = "advTeam", value = team}) | |
| 1004 | + | |
| 1005 | + SendPacket(actionCodes.Adv_selectTeamRpc, '') | |
| 1006 | + return true | |
| 1007 | +end | |
| 1008 | + | |
| 953 | 1009 | return _M |
| 954 | 1010 | \ No newline at end of file | ... | ... |
src/actions/HangAction.lua
| ... | ... | @@ -269,7 +269,15 @@ function _M.endBattleRpc(agent, data) |
| 269 | 269 | local nextCarbonId = role:getNextCarbonId(carbonId) |
| 270 | 270 | -- 设置挂机关卡 |
| 271 | 271 | if isWin then --and (hangInfo.carbonId or 0) < nextCarbonId then |
| 272 | - hangInfo.expCarbonId = carbonId | |
| 272 | + if not hangInfo.expCarbonId then | |
| 273 | + hangInfo.expCarbonId = carbonId | |
| 274 | + else | |
| 275 | + local oldCarbonData = csvdb["idle_battleCsv"][hangInfo.expCarbonId] | |
| 276 | + local newCarbonData = csvdb["idle_battleCsv"][carbonId] | |
| 277 | + if oldCarbonData.money < newCarbonData.money then | |
| 278 | + hangInfo.expCarbonId = carbonId | |
| 279 | + end | |
| 280 | + end | |
| 273 | 281 | --local cfg = csvdb["idle_battleCsv"][nextCarbonId] |
| 274 | 282 | --if cfg then |
| 275 | 283 | -- hangInfo.bossTime = skynet.timex() + cfg.idle_time |
| ... | ... | @@ -305,7 +313,10 @@ end |
| 305 | 313 | function _M.roleFormatRpc(agent , data) |
| 306 | 314 | local role = agent.role |
| 307 | 315 | local msg = MsgPack.unpack(data) |
| 308 | - local hangTeam = role:getProperty("hangTeam") | |
| 316 | + local index = msg.index -- 阵容索引 | |
| 317 | + local title = msg.title -- 阵容名称 | |
| 318 | + local type = msg.type -- 系统类型 | |
| 319 | + local team = {} | |
| 309 | 320 | for slot, heroId in pairs(msg.heros) do |
| 310 | 321 | if not role.heros[heroId] then |
| 311 | 322 | return 1 |
| ... | ... | @@ -321,15 +332,31 @@ function _M.roleFormatRpc(agent , data) |
| 321 | 332 | end |
| 322 | 333 | if not checkLeader(msg.heros, msg.leader) then return 4 end |
| 323 | 334 | |
| 324 | - table.clear(hangTeam) | |
| 325 | - hangTeam.heros = {} | |
| 335 | + if index > 10 then | |
| 336 | + return 5 | |
| 337 | + end | |
| 338 | + | |
| 339 | + if #title > 100 then | |
| 340 | + return 6 | |
| 341 | + end | |
| 342 | + | |
| 343 | + team.heros = {} | |
| 326 | 344 | for slot, heroId in pairs(msg.heros) do |
| 327 | - hangTeam.heros[slot] = heroId | |
| 345 | + team.heros[slot] = heroId | |
| 346 | + end | |
| 347 | + team.leader = msg.leader | |
| 348 | + team.supports = supports | |
| 349 | + team.title = title | |
| 350 | + | |
| 351 | + role:setTeamFormat(index, team) | |
| 352 | + if type == TeamSystemType.Hang then | |
| 353 | + role:finishGuide(5) | |
| 354 | + role:updateHangTeamInfo() | |
| 355 | + elseif type == TeamSystemType.BonusBattle then | |
| 356 | + elseif type == TeamSystemType.Tower then | |
| 357 | + elseif type == TeamSystemType.Dinner then | |
| 328 | 358 | end |
| 329 | - hangTeam.leader = msg.leader | |
| 330 | - hangTeam.supports = supports | |
| 331 | - role:saveHangTeam(hangTeam) | |
| 332 | - role:finishGuide(5) | |
| 359 | + | |
| 333 | 360 | SendPacket(actionCodes.Hang_roleFormatRpc, '') |
| 334 | 361 | return true |
| 335 | 362 | end |
| ... | ... | @@ -523,7 +550,8 @@ function _M.startBonusBattleRpc(agent, data) |
| 523 | 550 | if not bonusData then return 3 end |
| 524 | 551 | if not role:checkHangPass(bonusData.unlock) then return 4 end |
| 525 | 552 | |
| 526 | - if not next(role:getProperty("bTeam")) then return 5 end | |
| 553 | + local bTeam = role:getTeamFormatByType(TeamSystemType.BonusBattle) | |
| 554 | + if not next(bTeam) then return 5 end | |
| 527 | 555 | |
| 528 | 556 | local bonusC = role.dailyData:getProperty("bonusC") |
| 529 | 557 | bonusC[bonusData.type] = bonusC[bonusData.type] or {c = 0, b = 0} |
| ... | ... | @@ -666,4 +694,24 @@ function _M.chatLineRpc(agent, data) |
| 666 | 694 | return true |
| 667 | 695 | end |
| 668 | 696 | |
| 697 | +function _M.selectTeamRpc(agent, data) | |
| 698 | + local role = agent.role | |
| 699 | + local msg = MsgPack.unpack(data) | |
| 700 | + local index = msg.index -- 阵容索引 | |
| 701 | + local type = msg.type -- 系统类型 | |
| 702 | + | |
| 703 | + if index > 10 then | |
| 704 | + return 1 | |
| 705 | + end | |
| 706 | + local team = role:getTeamFormat(index) | |
| 707 | + if not next(team) then return 2 end | |
| 708 | + | |
| 709 | + local teamIndex = role:getProperty("teamIndex") or {} | |
| 710 | + teamIndex[type] = index | |
| 711 | + role:updateProperty({field = "teamIndex", value = teamIndex}) | |
| 712 | + | |
| 713 | + SendPacket(actionCodes.Hang_selectTeamRpc, '') | |
| 714 | + return true | |
| 715 | +end | |
| 716 | + | |
| 669 | 717 | return _M |
| 670 | 718 | \ No newline at end of file | ... | ... |
src/actions/RoleAction.lua
| ... | ... | @@ -1255,4 +1255,28 @@ function _M.useSelectItemRpc(agent, data) |
| 1255 | 1255 | return true |
| 1256 | 1256 | end |
| 1257 | 1257 | |
| 1258 | +function _M.renameTeamRpc(agent, data) | |
| 1259 | + local role = agent.role | |
| 1260 | + local msg = MsgPack.unpack(data) | |
| 1261 | + local title = msg.title | |
| 1262 | + local index = msg.index | |
| 1263 | + local ispve = msg.ispve | |
| 1264 | + if ispve then | |
| 1265 | + local teams = role:getProperty("hangTeams") | |
| 1266 | + local team = role:getTeamFormat(index) | |
| 1267 | + team.title = title | |
| 1268 | + teams[index] = team | |
| 1269 | + role:updateProperty({field = "hangTeams", value = teams, notNotify = false}) | |
| 1270 | + else | |
| 1271 | + local teams = role:getProperty("advTeams") | |
| 1272 | + local team = role:getAdvTeamFormat(index) | |
| 1273 | + team.title = title | |
| 1274 | + teams[index] = team | |
| 1275 | + role:updateProperty({field = "advTeams", value = teams, notNotify = false}) | |
| 1276 | + end | |
| 1277 | + | |
| 1278 | + SendPacket(actionCodes.Role_renameTeamRpc, "") | |
| 1279 | + return true | |
| 1280 | +end | |
| 1281 | + | |
| 1258 | 1282 | return _M |
| 1259 | 1283 | \ No newline at end of file | ... | ... |
src/models/Role.lua
| ... | ... | @@ -112,7 +112,9 @@ Role.schema = { |
| 112 | 112 | hangBag = {"table", {}}, -- 背包 |
| 113 | 113 | hangBagLimit = {"number", globalCsv.idle_field_origin}, --背包上限 |
| 114 | 114 | bTeam = {"table", {}}, -- 奖励副本队伍 |
| 115 | - heroFormate = {"table", {}}, -- 自选编队 {adv={}, hang={}} | |
| 115 | + hangTeams = {"table", {}}, -- pve自选编队 | |
| 116 | + teamIndex = {"table", {}}, -- 各个系统使用的编队索引 type->index 见TeamSystemType | |
| 117 | + advTeams = {"table", {}}, -- 拾荒自选编队 | |
| 116 | 118 | |
| 117 | 119 | --引导相关 |
| 118 | 120 | newerGuide = {"string","1=1"}, -- 新手引导 master=slave |
| ... | ... | @@ -359,6 +361,8 @@ function Role:data() |
| 359 | 361 | hangBag = self:getProperty("hangBag"), |
| 360 | 362 | hangBagLimit = self:getProperty("hangBagLimit"), |
| 361 | 363 | bTeam = self:getProperty("bTeam"), |
| 364 | + hangTeams = self:getProperty("hangTeams"), | |
| 365 | + teamIndex = self:getProperty("teamIndex"), | |
| 362 | 366 | |
| 363 | 367 | newerGuide = self:getProperty("newerGuide"), |
| 364 | 368 | funcGuide = self:getProperty("funcGuide"), | ... | ... |
src/models/RoleBattle.lua
| ... | ... | @@ -57,7 +57,8 @@ function Role:checkBattle(battleType, params) |
| 57 | 57 | end |
| 58 | 58 | end, |
| 59 | 59 | tower = function() |
| 60 | - local towerF = self:getProperty("towerF") | |
| 60 | + --local towerF = self:getProperty("towerF") | |
| 61 | + local towerF = self:getTeamFormatByType(TeamSystemType.Tower) | |
| 61 | 62 | for slot, hero in pairs(self:getTeamHerosInfo(towerF.heros)) do |
| 62 | 63 | selflist[slot] = hero.type |
| 63 | 64 | end |
| ... | ... | @@ -72,7 +73,8 @@ function Role:checkBattle(battleType, params) |
| 72 | 73 | end |
| 73 | 74 | end, |
| 74 | 75 | bonus = function() |
| 75 | - local bTeam = self:getProperty("bTeam") | |
| 76 | + --local bTeam = self:getProperty("bTeam") | |
| 77 | + local bTeam = self:getTeamFormatByType(TeamSystemType.BonusBattle) | |
| 76 | 78 | for slot, hero in pairs(self:getTeamHerosInfo(bTeam.heros)) do |
| 77 | 79 | selflist[slot] = hero.type |
| 78 | 80 | end | ... | ... |
src/models/RolePlugin.lua
| ... | ... | @@ -1132,7 +1132,8 @@ function RolePlugin.bind(Role) |
| 1132 | 1132 | local now = skynet.timex() |
| 1133 | 1133 | local ct = math.ceil((now - StdTowerRankTime) / 86400) --按天计算 365 * 27 < 10000 可以维持 27 年 |
| 1134 | 1134 | local ct = 10000 - ct -- 越早的排名越靠前 |
| 1135 | - local towerTeam = self:getProperty("towerF") | |
| 1135 | + --local towerTeam = self:getProperty("towerF") | |
| 1136 | + local towerTeam = self:getTeamFormatByType(TeamSystemType.Tower) | |
| 1136 | 1137 | local battleV = self:getTeamBattleValue(towerTeam.heros) |
| 1137 | 1138 | local score = (level * 10000 + ct) * 10000000 + battleV |
| 1138 | 1139 | |
| ... | ... | @@ -1324,6 +1325,52 @@ function RolePlugin.bind(Role) |
| 1324 | 1325 | }) |
| 1325 | 1326 | end |
| 1326 | 1327 | |
| 1328 | + function Role:updateHangTeamInfo() | |
| 1329 | + local team = self:getTeamFormatByType(TeamSystemType.Hang) | |
| 1330 | + if not team then return end | |
| 1331 | + | |
| 1332 | + self:setProperties({ | |
| 1333 | + hangTS = self:getTeamHerosInfo(team.heros), | |
| 1334 | + hangTB = self:getTeamBattleInfo(team), | |
| 1335 | + hangTBV = self:getTeamBattleValue(team.heros), | |
| 1336 | + }) | |
| 1337 | + end | |
| 1338 | + | |
| 1339 | + -- 设置pve阵容 | |
| 1340 | + function Role:getTeamFormat(index) | |
| 1341 | + local teams = self:getProperty("hangTeams") or {} | |
| 1342 | + local team = teams[index] or {} | |
| 1343 | + return team | |
| 1344 | + end | |
| 1345 | + | |
| 1346 | + function Role:getTeamFormatByType(type) | |
| 1347 | + local teamIndex = self:getProperty("teamIndex") or {} | |
| 1348 | + local index = teamIndex[type] | |
| 1349 | + if not index then return {} end | |
| 1350 | + | |
| 1351 | + return self:getTeamFormat(index) | |
| 1352 | + end | |
| 1353 | + | |
| 1354 | + function Role:setTeamFormat(index, team) | |
| 1355 | + local teams = self:getProperty("hangTeams") or {} | |
| 1356 | + teams[index] = team | |
| 1357 | + self:updateProperty({field = "hangTeams", value = teams, notNotify = false}) | |
| 1358 | + end | |
| 1359 | + | |
| 1360 | + -- 设置拾荒编队阵容 | |
| 1361 | + function Role:getAdvTeamFormat(index) | |
| 1362 | + local teams = self:getProperty("advTeams") or {} | |
| 1363 | + local team = teams[index] or {} | |
| 1364 | + return team | |
| 1365 | + end | |
| 1366 | + | |
| 1367 | + function Role:setAdvTeamFormat(index, team) | |
| 1368 | + local teams = self:getProperty("advTeams") or {} | |
| 1369 | + teams[index] = team | |
| 1370 | + self:updateProperty({field = "advTeams", value = teams, notNotify = false}) | |
| 1371 | + end | |
| 1372 | + | |
| 1373 | + | |
| 1327 | 1374 | function Role:savePvpCTeam(team) |
| 1328 | 1375 | if not team then |
| 1329 | 1376 | team = self:getProperty("pvpTC") | ... | ... |