배경
마이너 서버에서, AI가 선전포고와 소집해제를 같은 턴에 수행하는 경우가 있습니다.
원인
자율턴을 결정할 때 GeneralAI.php를 수행하며, 이 안의 calcDiplomacyState 함수에서 외교 상태를 판단합니다.
dipState가 평화 상태가 아니라면 소집해제를 수행하지 않아야 하는데,
일반턴 수행 전에 외교 상태를 판단하는 게 아니라, 사령턴을 포함한 전체 턴 수행 전에 한 번만 외교 상태를 판단합니다.
따라서 사령턴을 수행하기 전에, 이번 턴에 소집 해제하기로 마음을 우선 먹은 상태에서,
그와 별개로 사령턴으로 선전포고를 수행한 후, 당초 예정대로 소집 해제를 수행하는 것으로 보입니다.
해결(안)
선전포고가 수행되었음을 GeneralAI에서 알기는 어려워 보입니다(혹시 얘 싱글턴인가요? ...).
그러니 chooseGeneralTurn 수행 전에, 외교 상태를 한 번 더 업데이트 해주면 어떨까요?
이 함수를 통째로 부르는 게 비효율적이라면, 업데이트가 필요한 부분만 수행하는 것도 가능할 거 같습니다.
부록
같은 원리로, 개전 5개월 전에 이호경식을 수행하면, AI가 징병 시점을 미뤄야 하지만 일단 징병부터 할 수도 있겠네요.
-이상-
댓글 달기