if GetObjectiveState("prim1", PLAYER_1)==OBJECTIVE_COMPLETED
and GetObjectiveState("prim2", PLAYER_1)==OBJECTIVE_COMPLETED
and GetObjectiveState("prim3", PLAYER_1)==OBJECTIVE_COMPLETED then
Win();
However, the assignment of the value SetObjectiveState("prim2", OBJECTIVE_COMPLETED) only exists for prim2.
Could this be why the game doesn't end after capturing the shield?