# HG changeset patch # User Wuzzy # Date 1564072806 -7200 # Node ID 96fbf9bb960a8766a7dc3172958c8dcd4f30acd1 # Parent 07836d6bac2168f4160076389ff51ac5515fc068 Mutant: Remove excess teams if a clan has more than one team diff -r 07836d6bac21 -r 96fbf9bb960a ChangeLog.txt --- a/ChangeLog.txt Thu Jul 25 11:58:40 2019 -0400 +++ b/ChangeLog.txt Thu Jul 25 18:40:06 2019 +0200 @@ -63,6 +63,7 @@ * Frenzy: Fix incorrect ammo slot numbers in ammo menu * Continental supplies: Computer teams now select random continent * WxW, Racer: Computer teams no longer block setup phase + * Mutant: Delete excess teams when a clan has more than one team A Classic Fairytale: + Backstab: Disable utilities before traitor has been dealt with diff -r 07836d6bac21 -r 96fbf9bb960a share/hedgewars/Data/Scripts/Multiplayer/Mutant.lua --- a/share/hedgewars/Data/Scripts/Multiplayer/Mutant.lua Thu Jul 25 11:58:40 2019 -0400 +++ b/share/hedgewars/Data/Scripts/Multiplayer/Mutant.lua Thu Jul 25 18:40:06 2019 +0200 @@ -57,6 +57,9 @@ local hogsLimit = 1 local teamsDead = {} +local teamsDeleted = {} +local hogLimitHit = false +local cnthhs local circles = {} local circleFrame = -1 @@ -143,7 +146,7 @@ end -function limitHogs(gear) +function limitHogsTeam(gear) cnthhs = cnthhs + 1 if cnthhs > 1 then hogLimitHit = true @@ -153,6 +156,13 @@ end end +function limitHogsClan(gear) + hogLimitHit = true + SetEffect(gear, heResurrectable, 0) + setGearValue(gear, "excess", true) + DeleteGear(gear) +end + function onGameStart() if ClansCount >= 2 then SendHealthStatsOff() @@ -163,14 +173,35 @@ teamScan() runOnHogs(saveStuff) + -- Enforce team and hog limits hogLimitHit = false + + -- Rule 1: One team per clan + if TeamsCount > ClansCount then + local usedClans = {} + for i=0, TeamsCount - 1 do + local teamName = GetTeamName(i) + local clanNumber = GetTeamClan(teamName) + if not usedClans[clanNumber] then + usedClans[clanNumber] = true + else + runOnHogsInTeam(limitHogsClan, teamName) + teamsDeleted[teamName] = true + setTeamValue(teamName, "Score", getTeamValue(teamName, "Score") -99999) + end + end + end + + -- Rule 2: One hog per team for i=0 , TeamsCount - 1 do cnthhs = 0 - runOnHogsInTeam(limitHogs, GetTeamName(i)) + runOnHogsInTeam(limitHogsTeam, GetTeamName(i)) end if hogLimitHit then + -- TODO: Update warning message to include excess teams as well WriteLnToChat(loc("Only one hog per team allowed! Excess hogs will be removed.")) end + trackTeams() showStartingInfo() end @@ -234,7 +265,6 @@ function onNewTurn() - trackTeams() killsCounter = 0 if mutant == nil and TotalRounds >= 0 then @@ -244,7 +274,10 @@ checkScore() for i=0, TeamsCount-1 do - SendStat(siClanHealth, getTeamValue(GetTeamName(i), "Score"), GetTeamName(i)) + local teamName = GetTeamName(i) + if not teamsDeleted[teamName] then + SendStat(siClanHealth, getTeamValue(teamName, "Score"), teamName) + end end giveWeapons(CurrentHedgehog) @@ -612,7 +645,7 @@ function teamScan() for j=0, TeamsCount-1 do - teamName = GetTeamName(j) + local teamName = GetTeamName(j) teamsDead[teamName] = false setTeamValue(teamName, "Score",0) setTeamValue(teamName, "Suicides",0)