diff -r d4aa64f51c9f -r 310b167141cc share/hedgewars/Data/Scripts/SimpleMission.lua --- a/share/hedgewars/Data/Scripts/SimpleMission.lua Thu Dec 20 17:51:46 2018 +0100 +++ b/share/hedgewars/Data/Scripts/SimpleMission.lua Thu Dec 20 18:23:13 2018 +0100 @@ -53,27 +53,30 @@ - probability probability in crates (default: 0) TEAM DATA + - isMissionTeam if true, this is the player's chosen team for this mission (default: false) - hogs table of hedgehogs in this team (must contain at least 1 hog) - - name team name - clanID ID of the clan to which this team belongs to. Counting starts at 0. By default, each team goes into its own clan. Important: The clan of the player and allies MUST be 0. Important: You MUST either set the clan ID explicitly for all teams or none of them. + These arguments will be ignored if this is a mission team: + - name team name - flag flag name (default: hedgewars) - grave grave name (has default grave for each team) - fort fort name (default: Castle) HEDGEHOG DATA: - id optional identifier for goals - - name hog name + - health hog health (default: 100) + - ammo table of ammo types - x, y hog position (default: spawns randomly on land) - - botLevel 1-5: Bot level (lower=stronger). 0=human player (default: 0) - - hat hat name (default: NoHat) - - health hog health (default: 100) - poisoned if true, hedgehog starts poisoned with 5 poison damage. Set to a number for other poison damage (default: false) - frozen if true, hedgehogs starts frozen (default: false) - faceLeft initial facing direction. true=left, false=false (default: false) - - ammo table of ammo types + These arguments will be ignored if the hog is in a mission team: + - name hog name + - botLevel 1-5: Bot level (lower=stronger). 0=human player (default: 0) + - hat hat name (default: NoHat) GEAR TYPES: - type gear type @@ -656,12 +659,35 @@ else clanID = teamData.clanID end - grave = def(teamData.grave, defaultGraves[math.min(teamID, 8)]) - fort = def(teamData.fort, "Castle") - voice = def(teamData.voice, "Default") - flag = def(teamData.flag, defaultFlags[math.min(teamID, 8)]) + + local idx + if teamData.isMissionTeam then + idx = AddMissionTeam(-(clanID+1)) + _G.sm.playerClan = clanID + else + grave = def(teamData.grave, defaultGraves[math.min(teamID, 8)]) + fort = def(teamData.fort, "Castle") + voice = def(teamData.voice, "Default") + flag = def(teamData.flag, defaultFlags[math.min(teamID, 8)]) - AddTeam(name, -(clanID+1), grave, fort, voice, flag) + idx = AddTeam(name, -(clanID+1), grave, fort, voice, flag) + local realName = GetTeamName(idx) + -- Update all teamDefeat goals if the real team name differs from the + -- team configuration. + -- (AddTeam might change the name due to naming collisions) + if name ~= realName then + local checks = { params.customGoals, params.customNonGoals } + for c=1, 2 do + if checks[c] then + for k,goal in pairs(checks[c]) do + if goal.type == "teamDefeat" and goal.teamName == name then + goal.teamName = realName + end + end + end + end + end + end for hogID, hogData in pairs(teamData.hogs) do local name, botLevel, health, hat @@ -669,7 +695,12 @@ botLevel = def(hogData.botLevel, 0) health = def(hogData.health, 100) hat = def(hogData.hat, "NoHat") - local hog = AddHog(name, botLevel, health, hat) + local hog + if teamData.isMissionTeam then + hog = AddMissionHog(health) + else + hog = AddHog(name, botLevel, health, hat) + end if hogData.x ~= nil and hogData.y ~= nil then SetGearPosition(hog, hogData.x, hogData.y) end