I think i just got it to work! 
ive been testing with many different comibnations of picking up the flags and did not find a bug yet… but i wont be surprised if there still is a bug in there somewhere…
also, i think the script can be done easier… but i cant be bothered anymore, it works 
right ill try to explain it…
you will need multiple “team_CTF_blue/redflag” entities, and multiple “trigger_flagonly_multiple” entities. (If you have 3 flags, you need 3 trigger_flagonly_multiple’s)
In my example i have 3 flags per team and therefor 3 “goals” (trigger_flagonly_multiple’s) per team.
The team_CTF_blueflags have a scriptname and targetname of “blueflag1” to “blueflag3”
These are the allied flags that axis have to steal
the team_CTF_redflags have a scriptname and targetname of “redflag1” to “redflag3”
these are the axis flags that allies have to steal
The trigger_flagonly_multiple entities have a scriptname and targetname of “redhome1” to “redhome3” and “bluehome1” to “bluehome3”.
Note that the “redhomes” have spawnflag “red_flag” checked and the “bluehomes” “blue_flag”.
also, important is that the “bluehomes” are surrounding the RED flags and the other way around aswell…
Here is a picture:

Here is the script i use:
game_manager
{
spawn
{
wait 300
// Usual
wm_axis_respawntime 1
wm_allied_respawntime 1
// Alertentity the flags so they work when given a targetname
alertentity blueflag1
alertentity blueflag2
alertentity blueflag3
alertentity redflag1
alertentity redflag2
alertentity redflag3
wait 50
// Set every goal + flag invisible except the first ones
setstate blueflag2 invisible
setstate blueflag3 invisible
setstate redflag2 invisible
setstate redflag3 invisible
setstate bluehome2 invisible
setstate bluehome3 invisible
setstate redhome2 invisible
setstate redhome3 invisible
// Set the default scores
globalaccum 0 set 0
globalaccum 1 set 0
}
trigger axis_win // Called when the last axis "trigger_flagonly_multiple" has been "killed" (when a flag has been captured there)
{
wm_announce "The Axis team has captured all three flags and won!"
//wm_setwinner 0
//wm_endround
wait 3000
wm_announce "*Map ends*"
}
trigger allies_win // Called when the last allied "trigger_flagonly_multiple" has been "killed" (when a flag has been captured there)
{
wm_announce "The Allied team has captured all three flags and won!"
//wm_setwinner 1
//wm_endround
wait 3000
wm_announce "*Map ends*"
}
}
// FLAGS
// ALLIES
blueflag1
{
trigger stolen
{
wm_announce "Axis has stolen the first Flag!"
// Make the "homes" (goals) invisible
setstate redhome1 invisible
setstate redhome2 invisible
setstate redhome3 invisible
}
trigger returned
{
wm_announce "Allies have returned their Flag!"
// Make the first "home" default
setstate redhome1 default
setstate redhome2 invisible
setstate redhome3 invisible
}
}
bluehome1
{
death
{
setstate bluehome2 default // Enable the next "goal"
wm_announce "Axis has captured the first Flag!"
globalaccum 0 set 1 // Set the axis score to 1
setstate blueflag2 default // Enable the nextt flag
// This is used to determine which "goal" (of the opponent!) must be made default, based on their score
setstate redhome1 default
setstate redhome2 invisible
setstate redhome3 invisible
globalaccum 1 abort_if_equal 0
setstate redhome1 invisible
setstate redhome2 default
setstate redhome3 invisible
globalaccum 1 abort_if_equal 1
setstate redhome1 invisible
setstate redhome2 invisible
setstate redhome3 default
}
}
blueflag2
{
trigger stolen
{
wm_announce "Axis has stolen the second Flag!"
setstate redhome2 invisible
setstate redhome3 invisible
}
trigger returned
{
wm_announce "Allies have returned their Flag!"
setstate redhome2 default
setstate redhome3 invisible
}
}
bluehome2
{
death
{
wm_announce "Axis has captured the second Flag!"
setstate bluehome3 default
globalaccum 0 set 2
setstate blueflag3 default
setstate redhome1 default
setstate redhome2 invisible
setstate redhome3 invisible
globalaccum 1 abort_if_equal 0
setstate redhome1 invisible
setstate redhome2 default
setstate redhome3 invisible
globalaccum 1 abort_if_equal 1
setstate redhome1 invisible
setstate redhome2 invisible
setstate redhome3 default
}
}
blueflag3
{
trigger stolen
{
wm_announce "Axis has stolen the last Flag!"
setstate redhome3 invisible
}
trigger returned
{
wm_announce "Allies have returned their Flag!"
setstate redhome3 default
}
}
bluehome3
{
death
{
wm_announce "Axis has captured the last Flag!"
globalaccum 0 set 3
trigger game_manager axis_win
}
}
// AXIS
redflag1
{
trigger stolen
{
wm_announce "Allies have stolen the first Flag!"
setstate bluehome1 invisible
setstate bluehome2 invisible
setstate bluehome3 invisible
}
trigger returned
{
wm_announce "Axis have returned their Flag!"
setstate bluehome1 default
setstate bluehome2 invisible
setstate bluehome3 invisible
}
}
redhome1
{
death
{
setstate redhome2 default
setstate redhome3 invisible
wm_announce "Allies have captured the first Flag!"
globalaccum 1 set 1
setstate redflag2 default
setstate bluehome1 default
setstate bluehome2 invisible
setstate bluehome3 invisible
globalaccum 0 abort_if_equal 0
setstate bluehome1 invisible
setstate bluehome2 default
setstate bluehome3 invisible
globalaccum 0 abort_if_equal 1
setstate bluehome1 invisible
setstate bluehome2 invisible
setstate bluehome3 default
}
}
redflag2
{
trigger stolen
{
wm_announce "Allies have stolen the second Flag!"
setstate bluehome2 invisible
setstate bluehome3 invisible
}
trigger returned
{
wm_announce "Axis have returned their Flag!"
setstate bluehome2 default
setstate bluehome3 invisible
}
}
redhome2
{
death
{
wm_announce "Allies have captured the second Flag!"
setstate redhome3 default
globalaccum 1 set 2
trigger game_manager allies_score
setstate redflag3 default
setstate bluehome1 default
setstate bluehome2 invisible
setstate bluehome3 invisible
globalaccum 0 abort_if_equal 0
setstate bluehome1 invisible
setstate bluehome2 default
setstate bluehome3 invisible
globalaccum 0 abort_if_equal 1
setstate bluehome1 invisible
setstate bluehome2 invisible
setstate bluehome3 default
}
}
redflag3
{
trigger stolen
{
wm_announce "Allies have stolen the last Flag!"
setstate bluehome3 invisible
}
trigger returned
{
wm_announce "Axis have returned their Flag!"
setstate bluehome3 default
}
}
redhome3
{
death
{
wm_announce "Allies have captured the last Flag!"
globalaccum 1 set 3
trigger game_manager allies_win
}
}
At least it works here…