Commit a8f91e83dfffc518ee1b4e5de4f608a9ccbbd262

Authored by zhouhaihai
1 parent aaf6a9e6

羁绊

Showing 1 changed file with 33 additions and 11 deletions   Show diff stats
src/models/RolePlugin.lua
... ... @@ -596,7 +596,7 @@ function RolePlugin.bind(Role)
596 596 -- end
597 597 end
598 598  
599   - function Role:getHeroActiveRelation(heros)
  599 + function Role:getHeroActiveRelationData(heros)
600 600 local relations = {}
601 601 for _, id in pairs(heros or {}) do
602 602 local hero = self.heros[id]
... ... @@ -605,20 +605,42 @@ function RolePlugin.bind(Role)
605 605 relations[job] = (relations[job] or 0) + 1
606 606 end
607 607 end
608   - if not next(relations) then return {} end
609   - local result = {}
  608 + if not next(relations) then return nil end
  609 +
  610 + local curData = nil
610 611 for _, data in pairs(csvdb["unit_relationCsv"]) do
611   - local ok = true
612   - for typ, count in pairs(data.relation:toNumMap()) do
613   - if (relations[typ] or 0) < count then
614   - ok = false
  612 + local had = {}
  613 + local isDone = true
  614 + for _, count in pairs(data.relation:toArray(true, "=")) do
  615 + local find = false
  616 + for camp, _count in pairs(relations) do
  617 + if count == _count and not had[camp] then
  618 + had[camp] = true
  619 + find = true
  620 + break
  621 + end
615 622 end
616   - end
617   - if ok then
618   - for attr, value in pairs(data.effect:toNumMap()) do
619   - result[AttsEnumEx[attr]] = (result[AttsEnumEx[attr]] or 0) + value
  623 + if not find then
  624 + isDone = false
  625 + break
620 626 end
621 627 end
  628 + if isDone then
  629 + curData = data
  630 + break
  631 + end
  632 + end
  633 + return curData
  634 + end
  635 +
  636 + function Role:getHeroActiveRelation(heros)
  637 + local data = self:getHeroActiveRelationData(heros)
  638 + local result = {}
  639 + if not data then
  640 + return result
  641 + end
  642 + for attr, value in pairs(data.effect:toNumMap()) do
  643 + result[AttsEnumEx[attr]] = (result[AttsEnumEx[attr]] or 0) + value
622 644 end
623 645 return result
624 646 end
... ...