# HG changeset patch # User unc0rr # Date 1398430324 -14400 # Node ID 947cadb40bc5d271cb06e373a240d6ee1ba33867 # Parent 0b848d595f22902a567b4ba852c67d39d95ecc3d Add race type detection diff -r 0b848d595f22 -r 947cadb40bc5 hedgewars/uCommandHandlers.pas --- a/hedgewars/uCommandHandlers.pas Fri Apr 25 14:22:59 2014 +0400 +++ b/hedgewars/uCommandHandlers.pas Fri Apr 25 16:52:04 2014 +0400 @@ -339,7 +339,7 @@ if not isExternalSource then SendIPC(_S'A'); Message:= Message or (gmAttack and InputMask); - ScriptCall('onAttack'); + ScriptCall('onAttack'); // so if I fire airstrike, it doesn't count as attack? fine, fine end end end; diff -r 0b848d595f22 -r 947cadb40bc5 share/hedgewars/Data/Scripts/Multiplayer/Racer.lua --- a/share/hedgewars/Data/Scripts/Multiplayer/Racer.lua Fri Apr 25 14:22:59 2014 +0400 +++ b/share/hedgewars/Data/Scripts/Multiplayer/Racer.lua Fri Apr 25 16:52:04 2014 +0400 @@ -136,6 +136,8 @@ local wpCount = 0 local wpLimit = 8 +local usedWeapons = {} + local roundN local lastRound local RoundHasChanged @@ -718,13 +720,44 @@ end +function onAttack() + at = GetCurAmmoType() + + usedWeapons[at] = 0 +end function onAchievementsDeclaration() + usedWeapons[amSkip] = nil + + usedRope = usedWeapons[amRope] ~= nil + usedPortal = usedWeapons[amPortalGun] ~= nil + usedSaucer = usedWeapons[amJetpack] ~= nil + + usedWeapons[amRope] = nil + usedWeapons[amPortalGun] = nil + usedWeapons[amJetpack] = nil + + usedOther = next(usedWeapons) ~= nil + + if usedOther then -- smth besides skip, rope, portal or saucer used + raceType = "unknown race" + elseif usedRope and not usedPortal and not usedSaucer then + raceType = "rope race" + elseif not usedRope and usedPortal and not usedSaucer then + raceType = "portal race" + elseif not usedRope and not usedPortal and usedSaucer then + raceType = "saucer race" + elseif (usedRope or usedPortal or usedSaucer or usedOther) == false then -- no weapons used at all? + raceType = "no tools race" + else -- at least two of rope, portal and saucer used + raceType = "mixed race" + end + map = detectMap() for i = 0, (numTeams-1) do if teamScore[i] < 100000 then - DeclareAchievement("rope race", teamNameArr[i], map, teamScore[i]) + DeclareAchievement(raceType, teamNameArr[i], map, teamScore[i]) end end end