15 std::array<rules::PlayerNumber, rules::MaxPlayers>
players{};
58 std::span<const rules::PlayerNumber>
candidates,
87 std::span<const std::uint32_t>
randomKeys = {})
noexcept;
114 const PropertyImportanceConfig&
config,
115 std::int64_t moneyOwed = 0)
noexcept;
118 const rules::GameState& before,
119 const rules::GameState& after,
120 rules::PlayerNumber player,
134 std::span<const std::int64_t> moneyOwed = {})
noexcept;
136 const rules::GameState&
state,
139 const rules::GameState&
state,
159 std::span<const std::int64_t> timeLastTrade,
160 std::size_t maxTrades)
noexcept;
182 std::uint8_t importance,
183 std::span<const std::int64_t> timeLastTrade,
184 std::size_t maxTrades,
185 const TradeCadenceInputs&
inputs)
noexcept;
233 std::int64_t moneyOwed = 0)
noexcept;
281 std::array<rules::board::PropertySet, rules::MaxPlayers> bit1{};
282 std::array<rules::board::PropertySet, rules::MaxPlayers> bit2{};
286 PropertyTradeMemory&
memory,
288 const TradeProposalRecord& proposal)
noexcept;
290 const PropertyTradeMemory&
memory,
292 const TradeProposalRecord& proposal,
301 const TradeProposalRecord& proposal)
noexcept;
307 std::span<const FutureImmunityRecord> immunities = {})
noexcept;
311 std::span<const FutureImmunityRecord> immunities = {})
noexcept;
313 rules::GameState&
state,
316 const rules::GameState&
state,
320 std::span<const FutureImmunityRecord> immunities)
noexcept;
348 std::array<actions::Message, MaxProposedTradeSendActions>
actions{};
362 const ProposedTradeSendInputs&
inputs)
noexcept;
std::int64_t transferTax(const rules::GameState &state, rules::board::PropertySet properties) noexcept
void rememberTradedProperties(PropertyTradeMemory &memory, rules::PlayerNumber proposedPlayer, const TradeProposalRecord &proposal) noexcept
int findFreeTradeSpot(std::span< const std::int64_t > timeLastTrade, std::size_t maxTrades) noexcept
void forgetTradedProperties(PropertyTradeMemory &memory) noexcept
double cashMultiplier(double attitude, const CashMultiplierTable &multipliers) noexcept
PlayerPropertyAttitudeList createPlayerPropertyAttitudeList(const rules::GameState &state, rules::PlayerNumber player, const TradeProposalList &proposals, std::span< const double > playerAttitudes) noexcept
rules::PlayerNumber nextPlayerWantingCash(const TradeProposalList &proposals) noexcept
constexpr std::size_t DeckCount
std::array< TradeImportanceRecord, 6 > TradeImportanceList
ProposedTradeSendPlan buildProposedTradeSendPlan(const rules::GameState &state, rules::PlayerNumber player, const TradeProposalList &proposals, const ProposedTradeSendInputs &inputs) noexcept
constexpr std::uint8_t TradeForCash
bool tradeIsProper(const rules::GameState &state, const TradeProposalList &proposals, std::span< const FutureImmunityRecord > immunities) noexcept
rules::board::PropertySet propertiesAlreadyTraded(const PropertyTradeMemory &memory, rules::PlayerNumber proposedPlayer, const TradeProposalRecord &proposal, int dangerLevel) noexcept
StrategicPropertyImportance
bool playerInvolvedInTrade(const TradeProposalRecord &proposal) noexcept
constexpr std::uint8_t TradeSomewhatImportant
std::array< rules::board::SquareGroup, 8 > orderMonopolyImportance(std::int64_t liquidAssets, MonopolySortOrder order, std::span< const std::uint32_t > randomKeys) noexcept
int vetoMonopolies(rules::board::PropertySet properties) noexcept
MonopolyTradeGroup findSmallestMonopolyTrade(rules::PlayerNumber player, rules::board::PropertySet monopoly, std::span< const rules::PlayerNumber > candidates, const PropertySets &properties) noexcept
std::array< MonopolyTradeGenerosity, WhatToTradeEntries > WhatToTradeTable
PropertyImportanceResult findPlayerPropertyImportance(const rules::GameState &state, rules::PlayerNumber player, rules::PlayerNumber strategyPlayer, const PropertyImportanceConfig &config, std::int64_t moneyOwed) noexcept
constexpr std::uint8_t TradeDesperate
constexpr std::uint8_t TradeGiveMonopoly
TradeImportanceList createItemImportanceList(const rules::GameState &state, rules::PlayerNumber player, rules::PlayerNumber strategyPlayer, const PropertyImportanceConfig &config, double strategyAttitudeTowardPlayer, const CashMultiplierTable &multipliers) noexcept
bool addTypeProperty(const rules::GameState &before, const rules::GameState &after, rules::PlayerNumber player, rules::PlayerNumber strategyPlayer, rules::board::PropertySet &combinedProperties, TradeImportanceItem item, TradeProposalList &proposals, const PropertySets &properties, bool giveDescending, const WhatToTradeTable &whatToTrade, double strategyAttitudeTowardPlayer, std::int64_t playerMoneyOwed) noexcept
bool addTradeItem(TradeProposalList &proposals, FutureImmunityList &immunities, rules::TradeItemKind kind, std::int64_t amount, rules::PlayerNumber fromPlayer, rules::PlayerNumber toPlayer, rules::board::PropertySet propertySet) noexcept
std::array< double, WhatToTradeEntries > CashMultiplierTable
bool isMonopolyTrade(const rules::GameState &state, const TradeProposalList &proposals) noexcept
std::array< FutureImmunityRecord, rules::MaxCountHitSets > FutureImmunityList
constexpr std::size_t MaxProposedTradeSendActions
void makeTradeProper(const rules::GameState &state, TradeProposalList &proposals, std::span< const FutureImmunityRecord > immunities) noexcept
bool onlyPlayerHasMonopoly(const rules::GameState &state, rules::PlayerNumber player) noexcept
void applyTradeToState(rules::GameState &state, const TradeProposalList &proposals) noexcept
bool addTradeMonopoly(const rules::GameState &state, rules::PlayerNumber toPlayer, rules::board::PropertySet &properties, PropertyClassification type, TradeProposalList &proposals, std::int64_t moneyOwed) noexcept
bool shouldTrade(const rules::GameState &state, rules::PlayerNumber player, std::uint8_t importance, std::span< const std::int64_t > timeLastTrade, std::size_t maxTrades, const TradeCadenceInputs &inputs) noexcept
std::array< rules::board::PropertySet, rules::MaxPlayers > PropertySets
bool playerHasFutureOrImmunity(rules::PlayerNumber player, std::span< const FutureImmunityRecord > immunities) noexcept
std::array< TradeProposalRecord, rules::MaxPlayers > TradeProposalList
int possibleMonopoly(const rules::GameState &state, rules::PlayerNumber owner, rules::board::SquareType square) noexcept
MonopolyTradeDecision shouldTradeForMonopoly(const rules::GameState &state, rules::PlayerNumber player) noexcept
double calculateTradePropertyImportance(const rules::GameState &before, const rules::GameState &after, rules::PlayerNumber player, rules::PlayerNumber strategyPlayer, const TradeProposalList &proposals, bool givingMonopolyAway, const PropertyImportanceConfig &config, std::span< const std::int64_t > moneyOwed) noexcept
constexpr std::size_t WhatToTradeEntries
bool hasMonopolyTrade(const rules::GameState &state, rules::PlayerNumber player, rules::PlayerNumber excludedPlayer) noexcept
rules::PlayerNumber findNonmonopolyPlayer(const rules::GameState &state, rules::PlayerNumber player, std::span< const std::int64_t > moneyOwed) noexcept
StrategicPropertyImportance strategicPropertyImportance(const rules::GameState &state, rules::board::SquareType property, rules::PlayerNumber excludedPlayer, rules::PlayerNumber includedPlayer, rules::PlayerNumber purchasingPlayer, rules::board::SquareType purchasingProperty) noexcept
std::int64_t liquidAssets(const rules::GameState &state, rules::PlayerNumber player, bool countHouses, bool countMonopolies, std::int64_t moneyOwed) noexcept
std::uint32_t PropertySet
std::uint8_t PlayerNumber
constexpr std::size_t MaxCountHitSets
constexpr PlayerNumber MaxPlayers
constexpr PlayerNumber NobodyPlayer
rules::TradeItemKind hitType
rules::board::PropertySet properties
rules::PlayerNumber fromPlayer
rules::PlayerNumber toPlayer
bool operator==(const FutureImmunityRecord &) const =default
std::uint8_t giveCashCows
PropertyClassification giveMonopoly
std::uint8_t giveGroupTrades
std::array< rules::PlayerNumber, rules::MaxPlayers > players
std::size_t tradePlayerCount
std::array< int, rules::MaxPlayers > playerIndex
PropertySets playerProperties
std::array< rules::PlayerNumber, rules::MaxPlayers > tradePlayers
double negativePropertyImportanceChangeMultiplier
double propertyAllowMoreTradeImportance
double propertyOneUnownedImportance
std::array< double, 9 > monopolyVetoImportance
double monopolyReceivedImportance
std::array< double, 4 > railroadImportance
double givingMonopolyImportance
double propertyAllowTradeImportance
std::array< double, 2 > utilityImportance
double propertyTwoUnownedImportance
double monopolyImportance
bool sendable() const noexcept
std::array< actions::Message, MaxProposedTradeSendActions > actions
ProposedTradeSendStatus status
rules::board::PropertySet propertiesGiven
rules::board::PropertySet propertiesReceived
std::int64_t cashReceived
std::array< bool, DeckCount > jailCardGiven
bool operator==(const TradeProposalRecord &) const =default
std::array< bool, DeckCount > jailCardReceived