The root cause: checkpoint handler queued .trade via say_delayed, but monop sends '-- Command:' before processing the trade. The old handler reset in_trade and queued .roll, so both commands got sent. Fix: checkpoint handler no longer sends commands. The -- Command: prompt is where the bot decides to trade or roll, matching how monop actually works (-- Command: is the interactive prompt). Also: no trades while in jail (jail has no -- Command: before roll). Updated all tests to reflect the new flow.
468 lines
No EOL
9.2 KiB
JSON
468 lines
No EOL
9.2 KiB
JSON
{
|
|
"players": [
|
|
{
|
|
"name": "alice",
|
|
"number": 1,
|
|
"money": 1280,
|
|
"location": 21,
|
|
"inJail": false,
|
|
"jailTurns": 0,
|
|
"doublesCount": 0,
|
|
"getOutOfJailFreeCards": 0
|
|
},
|
|
{
|
|
"name": "bob",
|
|
"number": 2,
|
|
"money": 1305,
|
|
"location": 16,
|
|
"inJail": false,
|
|
"jailTurns": 0,
|
|
"doublesCount": 0,
|
|
"getOutOfJailFreeCards": 0
|
|
},
|
|
{
|
|
"name": "charlie",
|
|
"number": 3,
|
|
"money": 1260,
|
|
"location": 13,
|
|
"inJail": false,
|
|
"jailTurns": 0,
|
|
"doublesCount": 0,
|
|
"getOutOfJailFreeCards": 0
|
|
}
|
|
],
|
|
"currentPlayer": 3,
|
|
"squares": [
|
|
{
|
|
"id": 0,
|
|
"name": "=== GO ===",
|
|
"type": "safe"
|
|
},
|
|
{
|
|
"id": 1,
|
|
"name": "Mediterranean ave. (P)",
|
|
"type": "property",
|
|
"owner": null,
|
|
"mortgaged": false,
|
|
"group": "purple",
|
|
"cost": 60,
|
|
"houses": 0
|
|
},
|
|
{
|
|
"id": 2,
|
|
"name": "Community Chest i",
|
|
"type": "cc"
|
|
},
|
|
{
|
|
"id": 3,
|
|
"name": "Baltic ave. (P)",
|
|
"type": "property",
|
|
"owner": null,
|
|
"mortgaged": false,
|
|
"group": "purple",
|
|
"cost": 60,
|
|
"houses": 0
|
|
},
|
|
{
|
|
"id": 4,
|
|
"name": "Income Tax",
|
|
"type": "tax"
|
|
},
|
|
{
|
|
"id": 5,
|
|
"name": "Reading RR",
|
|
"type": "railroad",
|
|
"owner": null,
|
|
"mortgaged": false,
|
|
"group": "railroad",
|
|
"cost": 200
|
|
},
|
|
{
|
|
"id": 6,
|
|
"name": "Oriental ave. (L)",
|
|
"type": "property",
|
|
"owner": 3,
|
|
"mortgaged": false,
|
|
"group": "lightblue",
|
|
"cost": 100,
|
|
"houses": 0
|
|
},
|
|
{
|
|
"id": 7,
|
|
"name": "Chance i",
|
|
"type": "chance"
|
|
},
|
|
{
|
|
"id": 8,
|
|
"name": "Vermont ave. (L)",
|
|
"type": "property",
|
|
"owner": null,
|
|
"mortgaged": false,
|
|
"group": "lightblue",
|
|
"cost": 100,
|
|
"houses": 0
|
|
},
|
|
{
|
|
"id": 9,
|
|
"name": "Connecticut ave. (L)",
|
|
"type": "property",
|
|
"owner": null,
|
|
"mortgaged": false,
|
|
"group": "lightblue",
|
|
"cost": 120,
|
|
"houses": 0
|
|
},
|
|
{
|
|
"id": 10,
|
|
"name": "Just Visiting",
|
|
"type": "safe"
|
|
},
|
|
{
|
|
"id": 11,
|
|
"name": "St. Charles pl. (V)",
|
|
"type": "property",
|
|
"owner": null,
|
|
"mortgaged": false,
|
|
"group": "violet",
|
|
"cost": 140,
|
|
"houses": 0
|
|
},
|
|
{
|
|
"id": 12,
|
|
"name": "Electric Co.",
|
|
"type": "utility",
|
|
"owner": null,
|
|
"mortgaged": false,
|
|
"group": "utility",
|
|
"cost": 150
|
|
},
|
|
{
|
|
"id": 13,
|
|
"name": "States ave. (V)",
|
|
"type": "property",
|
|
"owner": 3,
|
|
"mortgaged": false,
|
|
"group": "violet",
|
|
"cost": 140,
|
|
"houses": 0
|
|
},
|
|
{
|
|
"id": 14,
|
|
"name": "Virginia ave. (V)",
|
|
"type": "property",
|
|
"owner": null,
|
|
"mortgaged": false,
|
|
"group": "violet",
|
|
"cost": 160,
|
|
"houses": 0
|
|
},
|
|
{
|
|
"id": 15,
|
|
"name": "Pennsylvania RR",
|
|
"type": "railroad",
|
|
"owner": null,
|
|
"mortgaged": false,
|
|
"group": "railroad",
|
|
"cost": 200
|
|
},
|
|
{
|
|
"id": 16,
|
|
"name": "St. James pl. (O)",
|
|
"type": "property",
|
|
"owner": 2,
|
|
"mortgaged": false,
|
|
"group": "orange",
|
|
"cost": 180,
|
|
"houses": 0
|
|
},
|
|
{
|
|
"id": 17,
|
|
"name": "Community Chest ii",
|
|
"type": "cc"
|
|
},
|
|
{
|
|
"id": 18,
|
|
"name": "Tennessee ave. (O)",
|
|
"type": "property",
|
|
"owner": null,
|
|
"mortgaged": false,
|
|
"group": "orange",
|
|
"cost": 180,
|
|
"houses": 0
|
|
},
|
|
{
|
|
"id": 19,
|
|
"name": "New York ave. (O)",
|
|
"type": "property",
|
|
"owner": null,
|
|
"mortgaged": false,
|
|
"group": "orange",
|
|
"cost": 200,
|
|
"houses": 0
|
|
},
|
|
{
|
|
"id": 20,
|
|
"name": "Free Parking",
|
|
"type": "safe"
|
|
},
|
|
{
|
|
"id": 21,
|
|
"name": "Kentucky ave. (R)",
|
|
"type": "property",
|
|
"owner": 1,
|
|
"mortgaged": false,
|
|
"group": "red",
|
|
"cost": 220,
|
|
"houses": 0
|
|
},
|
|
{
|
|
"id": 22,
|
|
"name": "Chance ii",
|
|
"type": "chance"
|
|
},
|
|
{
|
|
"id": 23,
|
|
"name": "Indiana ave. (R)",
|
|
"type": "property",
|
|
"owner": null,
|
|
"mortgaged": false,
|
|
"group": "red",
|
|
"cost": 220,
|
|
"houses": 0
|
|
},
|
|
{
|
|
"id": 24,
|
|
"name": "Illinois ave. (R)",
|
|
"type": "property",
|
|
"owner": null,
|
|
"mortgaged": false,
|
|
"group": "red",
|
|
"cost": 240,
|
|
"houses": 0
|
|
},
|
|
{
|
|
"id": 25,
|
|
"name": "B&O RR",
|
|
"type": "railroad",
|
|
"owner": null,
|
|
"mortgaged": false,
|
|
"group": "railroad",
|
|
"cost": 200
|
|
},
|
|
{
|
|
"id": 26,
|
|
"name": "Atlantic ave. (Y)",
|
|
"type": "property",
|
|
"owner": null,
|
|
"mortgaged": false,
|
|
"group": "yellow",
|
|
"cost": 260,
|
|
"houses": 0
|
|
},
|
|
{
|
|
"id": 27,
|
|
"name": "Ventnor ave. (Y)",
|
|
"type": "property",
|
|
"owner": null,
|
|
"mortgaged": false,
|
|
"group": "yellow",
|
|
"cost": 260,
|
|
"houses": 0
|
|
},
|
|
{
|
|
"id": 28,
|
|
"name": "Water Works",
|
|
"type": "utility",
|
|
"owner": null,
|
|
"mortgaged": false,
|
|
"group": "utility",
|
|
"cost": 150
|
|
},
|
|
{
|
|
"id": 29,
|
|
"name": "Marvin Gardens (Y)",
|
|
"type": "property",
|
|
"owner": null,
|
|
"mortgaged": false,
|
|
"group": "yellow",
|
|
"cost": 280,
|
|
"houses": 0
|
|
},
|
|
{
|
|
"id": 30,
|
|
"name": "GO TO JAIL",
|
|
"type": "gotojail"
|
|
},
|
|
{
|
|
"id": 31,
|
|
"name": "Pacific ave. (G)",
|
|
"type": "property",
|
|
"owner": null,
|
|
"mortgaged": false,
|
|
"group": "green",
|
|
"cost": 300,
|
|
"houses": 0
|
|
},
|
|
{
|
|
"id": 32,
|
|
"name": "N. Carolina ave. (G)",
|
|
"type": "property",
|
|
"owner": null,
|
|
"mortgaged": false,
|
|
"group": "green",
|
|
"cost": 300,
|
|
"houses": 0
|
|
},
|
|
{
|
|
"id": 33,
|
|
"name": "Community Chest iii",
|
|
"type": "cc"
|
|
},
|
|
{
|
|
"id": 34,
|
|
"name": "Pennsylvania ave. (G)",
|
|
"type": "property",
|
|
"owner": null,
|
|
"mortgaged": false,
|
|
"group": "green",
|
|
"cost": 320,
|
|
"houses": 0
|
|
},
|
|
{
|
|
"id": 35,
|
|
"name": "Short Line RR",
|
|
"type": "railroad",
|
|
"owner": null,
|
|
"mortgaged": false,
|
|
"group": "railroad",
|
|
"cost": 200
|
|
},
|
|
{
|
|
"id": 36,
|
|
"name": "Chance iii",
|
|
"type": "chance"
|
|
},
|
|
{
|
|
"id": 37,
|
|
"name": "Park place (D)",
|
|
"type": "property",
|
|
"owner": null,
|
|
"mortgaged": false,
|
|
"group": "darkblue",
|
|
"cost": 350,
|
|
"houses": 0
|
|
},
|
|
{
|
|
"id": 38,
|
|
"name": "Luxury Tax",
|
|
"type": "tax"
|
|
},
|
|
{
|
|
"id": 39,
|
|
"name": "Boardwalk (D)",
|
|
"type": "property",
|
|
"owner": null,
|
|
"mortgaged": false,
|
|
"group": "darkblue",
|
|
"cost": 400,
|
|
"houses": 0
|
|
}
|
|
],
|
|
"log": [
|
|
{
|
|
"text": "roll is 4, 6",
|
|
"player": "alice",
|
|
"timestamp": "2026-02-21 10:55:12"
|
|
},
|
|
{
|
|
"text": "Landed on Just Visiting",
|
|
"player": "alice",
|
|
"timestamp": "2026-02-21 10:55:13"
|
|
},
|
|
{
|
|
"text": "bob's turn \u2014 $1500 on === GO ===",
|
|
"player": "bob",
|
|
"timestamp": "2026-02-21 10:55:14"
|
|
},
|
|
{
|
|
"text": "roll is 5, 2",
|
|
"player": "bob",
|
|
"timestamp": "2026-02-21 10:55:15"
|
|
},
|
|
{
|
|
"text": "Landed on Chance i",
|
|
"player": "bob",
|
|
"timestamp": "2026-02-21 10:55:15"
|
|
},
|
|
{
|
|
"text": "Pay Poor Tax of $15",
|
|
"player": "bob"
|
|
},
|
|
{
|
|
"text": "charlie's turn \u2014 $1500 on === GO ===",
|
|
"player": "charlie",
|
|
"timestamp": "2026-02-21 10:55:17"
|
|
},
|
|
{
|
|
"text": "roll is 3, 3",
|
|
"player": "charlie",
|
|
"timestamp": "2026-02-21 10:55:19"
|
|
},
|
|
{
|
|
"text": "Landed on Oriental ave. (L)",
|
|
"player": "charlie",
|
|
"timestamp": "2026-02-21 10:55:19"
|
|
},
|
|
{
|
|
"text": "charlie's turn \u2014 $1400 on Oriental ave. (L)",
|
|
"player": "charlie",
|
|
"timestamp": "2026-02-21 10:55:22"
|
|
},
|
|
{
|
|
"text": "roll is 1, 6",
|
|
"player": "charlie",
|
|
"timestamp": "2026-02-21 10:55:23"
|
|
},
|
|
{
|
|
"text": "Landed on States ave. (V)",
|
|
"player": "charlie",
|
|
"timestamp": "2026-02-21 10:55:23"
|
|
},
|
|
{
|
|
"text": "alice's turn \u2014 $1500 on Just Visiting",
|
|
"player": "alice",
|
|
"timestamp": "2026-02-21 10:55:25"
|
|
},
|
|
{
|
|
"text": "roll is 5, 6",
|
|
"player": "alice",
|
|
"timestamp": "2026-02-21 10:55:26"
|
|
},
|
|
{
|
|
"text": "Landed on Kentucky ave. (R)",
|
|
"player": "alice",
|
|
"timestamp": "2026-02-21 10:55:27"
|
|
},
|
|
{
|
|
"text": "bob's turn \u2014 $1485 on Chance i",
|
|
"player": "bob",
|
|
"timestamp": "2026-02-21 10:55:29"
|
|
},
|
|
{
|
|
"text": "roll is 3, 6",
|
|
"player": "bob",
|
|
"timestamp": "2026-02-21 10:55:30"
|
|
},
|
|
{
|
|
"text": "Landed on St. James pl. (O)",
|
|
"player": "bob",
|
|
"timestamp": "2026-02-21 10:55:30"
|
|
},
|
|
{
|
|
"text": "charlie's turn \u2014 $1260 on States ave. (V)",
|
|
"player": "charlie",
|
|
"timestamp": "2026-02-21 10:55:32"
|
|
}
|
|
],
|
|
"lastUpdated": "2026-02-21T10:55:32.750315+00:00"
|
|
} |