(PR#10078) AIs often agress on cease fire just for one turn
"Mateusz Stefek" <mstefek-IjDXvh/[email protected]>
| Newsgroups | gmane.games.freeciv.ai |
|---|---|
| Message-ID | <[email protected]> |
<URL: http://rt.freeciv.org/Ticket/Display.html?id=10078 >
> [per - Mon Sep 13 09:15:49 2004]:
>
> On Mon, 13 Sep 2004, Mateusz Stefek wrote:
> > The reason is that ai_players_can_agree_on_ceasefire() isn't
> restrictive
> > enough.
> > This patch fixes it.
> > Also change the method of calculating ai.love gravitation. Now it's
> > better rounded.
>
> - (player1 == ai1->diplomacy.alliance_leader ||
> - !pplayers_at_war(player2, ai1->diplomacy.alliance_leader))
> &&
> + ai1->diplomacy.player_intel[player2-
> >player_no].at_war_with_ally &&
>
> Stealth removal of the alliance leader concept??
>
> - Per
>
!pplayers_at_war(player2, alliance leader) => at_war_with_ally.
I just hardened the condition, because AI _always_ breaks ceasefire if
the second player is at war with ally.
From ai_diplomacy_actions:
/*** Declare war - against enemies of allies ***/
players_iterate(aplayer) {
struct ai_dip_intel *adip =
&ai->diplomacy.player_intel[aplayer->player_no];
if (aplayer->is_alive
&& adip->at_war_with_ally
&& !adip->is_allied_with_ally
&& !pplayers_at_war(pplayer, aplayer)) {
notify(aplayer, _("*%s (AI)* Your aggression against my allies was "
"your last mistake!"), pplayer->name);
ai_go_to_war(pplayer, ai, aplayer);
}
} players_iterate_end;
Alliance leader concept is still used in many places.
--
mateusz