tobymao / 18xx

A platform for playing 18xx games online!
https://18xx.games
Other
281 stars 183 forks source link

[1817] CEO is allowed to purchase past 60% share limit on 5 share corporation. #1850

Closed cherneydh closed 3 years ago

cherneydh commented 3 years ago

7.1.4 Post Conversion/Merger Process This process takes place as part of a conversion or merger. First, the President may purchase any number of shares from the company treasury (not from the Open Market) subject to the certificate and company share ownership limits in section [4.1].

In my hotseat game, Player 3 was able to purchase up to 100% of a 5-share company when max is 60%.

https://www.18xx.games/hotseat/hs_dgpxncjd_1602600426#entities

jenf commented 3 years ago

Could you supply JSON, we don't have access to hotseat games.

cherneydh commented 3 years ago

{ "status": "active", "actions": [ { "type": "bid", "entity": "Player 1", "entity_type": "player", "id": 1, "company": "MINC", "price": 0 }, { "type": "pass", "entity": "Player 2", "entity_type": "player", "id": 2 }, { "type": "pass", "entity": "Player 3", "entity_type": "player", "id": 3 }, { "type": "bid", "entity": "Player 2", "entity_type": "player", "id": 4, "company": "ME", "price": 0 }, { "type": "pass", "entity": "Player 3", "entity_type": "player", "id": 5 }, { "type": "pass", "entity": "Player 1", "entity_type": "player", "id": 6 }, { "type": "bid", "entity": "Player 3", "entity_type": "player", "id": 7, "company": "OBC", "price": 0 }, { "type": "pass", "entity": "Player 1", "entity_type": "player", "id": 8 }, { "type": "pass", "entity": "Player 2", "entity_type": "player", "id": 9 }, { "type": "bid", "entity": "Player 1", "entity_type": "player", "id": 10, "company": "PSM", "price": 0 }, { "type": "pass", "entity": "Player 2", "entity_type": "player", "id": 11 }, { "type": "pass", "entity": "Player 3", "entity_type": "player", "id": 12 }, { "type": "bid", "entity": "Player 2", "entity_type": "player", "id": 13, "company": "CM", "price": 10 }, { "type": "pass", "entity": "Player 3", "entity_type": "player", "id": 14 }, { "type": "pass", "entity": "Player 1", "entity_type": "player", "id": 15 }, { "type": "bid", "entity": "Player 3", "entity_type": "player", "id": 16, "company": "MINM", "price": 60 }, { "type": "bid", "entity": "Player 1", "entity_type": "player", "id": 17, "company": "MINM", "price": 65 }, { "type": "bid", "entity": "Player 2", "entity_type": "player", "id": 18, "company": "MINM", "price": 70 }, { "type": "bid", "entity": "Player 3", "entity_type": "player", "id": 19, "company": "MINM", "price": 75 }, { "type": "bid", "entity": "Player 1", "entity_type": "player", "id": 20, "company": "MINM", "price": 80 }, { "type": "bid", "entity": "Player 2", "entity_type": "player", "id": 21, "company": "MINM", "price": 85 }, { "type": "bid", "entity": "Player 3", "entity_type": "player", "id": 22, "company": "MINM", "price": 90 }, { "type": "bid", "entity": "Player 1", "entity_type": "player", "id": 23, "company": "MINM", "price": 95 }, { "type": "bid", "entity": "Player 2", "entity_type": "player", "id": 24, "company": "MINM", "price": 100 }, { "type": "bid", "entity": "Player 3", "entity_type": "player", "id": 25, "company": "MINM", "price": 105 }, { "type": "bid", "entity": "Player 1", "entity_type": "player", "id": 26, "company": "MINM", "price": 110 }, { "type": "bid", "entity": "Player 2", "entity_type": "player", "id": 27, "company": "MINM", "price": 115 }, { "type": "bid", "entity": "Player 3", "entity_type": "player", "id": 28, "company": "MINM", "price": 120 }, { "type": "bid", "entity": "Player 1", "entity_type": "player", "id": 29, "company": "MINM", "price": 125 }, { "type": "bid", "entity": "Player 2", "entity_type": "player", "id": 30, "company": "MINM", "price": 130 }, { "type": "bid", "entity": "Player 3", "entity_type": "player", "id": 31, "company": "MINM", "price": 135 }, { "type": "bid", "entity": "Player 1", "entity_type": "player", "id": 32, "company": "MINM", "price": 140 }, { "type": "bid", "entity": "Player 2", "entity_type": "player", "id": 33, "company": "MINM", "price": 145 }, { "type": "bid", "entity": "Player 3", "entity_type": "player", "id": 34, "company": "MINM", "price": 150 }, { "type": "bid", "entity": "Player 1", "entity_type": "player", "id": 35, "company": "MINM", "price": 155 }, { "type": "bid", "entity": "Player 2", "entity_type": "player", "id": 36, "company": "MINM", "price": 160 }, { "type": "bid", "entity": "Player 3", "entity_type": "player", "id": 37, "company": "MINM", "price": 165 }, { "type": "bid", "entity": "Player 1", "entity_type": "player", "id": 38, "company": "MINM", "price": 170 }, { "type": "bid", "entity": "Player 2", "entity_type": "player", "id": 39, "company": "MINM", "price": 175 }, { "type": "bid", "entity": "Player 3", "entity_type": "player", "id": 40, "company": "MINM", "price": 180 }, { "type": "bid", "entity": "Player 1", "entity_type": "player", "id": 41, "company": "MINM", "price": 185 }, { "type": "bid", "entity": "Player 2", "entity_type": "player", "id": 42, "company": "MINM", "price": 190 }, { "type": "bid", "entity": "Player 3", "entity_type": "player", "id": 43, "company": "MINM", "price": 195 }, { "type": "bid", "entity": "Player 1", "entity_type": "player", "id": 44, "company": "MINM", "price": 200 }, { "type": "bid", "entity": "Player 2", "entity_type": "player", "id": 45, "company": "MINM", "price": 205 }, { "type": "bid", "entity": "Player 3", "entity_type": "player", "id": 46, "company": "MINM", "price": 210 }, { "type": "bid", "entity": "Player 1", "entity_type": "player", "id": 47, "company": "MINM", "price": 215 }, { "type": "bid", "entity": "Player 2", "entity_type": "player", "id": 48, "company": "MINM", "price": 220 }, { "type": "bid", "entity": "Player 3", "entity_type": "player", "id": 49, "company": "MINM", "price": 225 }, { "type": "bid", "entity": "Player 1", "entity_type": "player", "id": 50, "company": "MINM", "price": 230 }, { "type": "bid", "entity": "Player 2", "entity_type": "player", "id": 51, "company": "MINM", "price": 235 }, { "type": "bid", "entity": "Player 3", "entity_type": "player", "id": 52, "company": "MINM", "price": 240 }, { "type": "bid", "entity": "Player 1", "entity_type": "player", "id": 53, "company": "MINM", "price": 245 }, { "type": "bid", "entity": "Player 2", "entity_type": "player", "id": 54, "company": "MINM", "price": 250 }, { "type": "bid", "entity": "Player 3", "entity_type": "player", "id": 55, "company": "MINM", "price": 255 }, { "type": "bid", "entity": "Player 1", "entity_type": "player", "id": 56, "company": "MINM", "price": 260 }, { "type": "bid", "entity": "Player 2", "entity_type": "player", "id": 57, "company": "MINM", "price": 265 }, { "type": "bid", "entity": "Player 3", "entity_type": "player", "id": 58, "company": "MINM", "price": 270 }, { "type": "bid", "entity": "Player 1", "entity_type": "player", "id": 59, "company": "MINM", "price": 275 }, { "type": "bid", "entity": "Player 2", "entity_type": "player", "id": 60, "company": "MINM", "price": 280 }, { "type": "bid", "entity": "Player 3", "entity_type": "player", "id": 61, "company": "MINM", "price": 285 }, { "type": "bid", "entity": "Player 1", "entity_type": "player", "id": 62, "company": "MINM", "price": 290 }, { "type": "bid", "entity": "Player 2", "entity_type": "player", "id": 63, "company": "MINM", "price": 295 }, { "type": "bid", "entity": "Player 3", "entity_type": "player", "id": 64, "company": "MINM", "price": 300 }, { "type": "bid", "entity": "Player 1", "entity_type": "player", "id": 65, "company": "MINM", "price": 305 }, { "type": "bid", "entity": "Player 2", "entity_type": "player", "id": 66, "company": "MINM", "price": 310 }, { "type": "bid", "entity": "Player 3", "entity_type": "player", "id": 67, "company": "MINM", "price": 315 }, { "type": "bid", "entity": "Player 1", "entity_type": "player", "id": 68, "company": "MINM", "price": 320 }, { "type": "bid", "entity": "Player 2", "entity_type": "player", "id": 69, "company": "MINM", "price": 325 }, { "type": "bid", "entity": "Player 3", "entity_type": "player", "id": 70, "company": "MINM", "price": 330 }, { "type": "bid", "entity": "Player 1", "entity_type": "player", "id": 71, "company": "MINM", "price": 335 }, { "type": "bid", "entity": "Player 2", "entity_type": "player", "id": 72, "company": "MINM", "price": 340 }, { "type": "bid", "entity": "Player 3", "entity_type": "player", "id": 73, "company": "MINM", "price": 345 }, { "type": "bid", "entity": "Player 1", "entity_type": "player", "id": 74, "company": "MINM", "price": 350 }, { "type": "bid", "entity": "Player 2", "entity_type": "player", "id": 75, "company": "MINM", "price": 355 }, { "type": "bid", "entity": "Player 3", "entity_type": "player", "id": 76, "company": "MINM", "price": 360 }, { "type": "bid", "entity": "Player 1", "entity_type": "player", "id": 77, "company": "MINM", "price": 365 }, { "type": "bid", "entity": "Player 2", "entity_type": "player", "id": 78, "company": "MINM", "price": 370 }, { "type": "bid", "entity": "Player 3", "entity_type": "player", "id": 79, "company": "MINM", "price": 375 }, { "type": "bid", "entity": "Player 1", "entity_type": "player", "id": 80, "company": "MINM", "price": 380 }, { "type": "bid", "entity": "Player 2", "entity_type": "player", "id": 81, "company": "MINM", "price": 385 }, { "type": "bid", "entity": "Player 3", "entity_type": "player", "id": 82, "company": "MINM", "price": 390 }, { "type": "bid", "entity": "Player 1", "entity_type": "player", "id": 83, "company": "MINM", "price": 395 }, { "type": "bid", "entity": "Player 2", "entity_type": "player", "id": 84, "company": "MINM", "price": 400 }, { "type": "bid", "entity": "Player 3", "entity_type": "player", "id": 85, "company": "MINM", "price": 405 }, { "type": "bid", "entity": "Player 1", "entity_type": "player", "id": 86, "company": "MINM", "price": 410 }, { "type": "bid", "entity": "Player 3", "entity_type": "player", "id": 87, "company": "MINM", "price": 415 }, { "type": "bid", "entity": "Player 1", "entity_type": "player", "id": 88, "company": "MINM", "price": 420 }, { "type": "pass", "entity": "Player 1", "entity_type": "player", "id": 89 }, { "type": "bid", "entity": "Player 2", "entity_type": "player", "id": 90, "company": "TS", "price": 80 }, { "type": "pass", "entity": "Player 3", "entity_type": "player", "id": 91 }, { "type": "bid", "entity": "Player 3", "entity_type": "player", "id": 92, "company": "UBC", "price": 80 }, { "type": "pass", "entity": "Player 2", "entity_type": "player", "id": 93 }, { "type": "pass", "entity": "Player 1", "entity_type": "player", "id": 94 }, { "type": "bid", "entity": "Player 2", "entity_type": "player", "id": 95, "company": "MAIL", "price": 90 }, { "type": "pass", "entity": "Player 3", "entity_type": "player", "id": 96 }, { "type": "bid", "entity": "Player 3", "entity_type": "player", "id": 97, "company": "MAJC", "price": 90 }, { "type": "pass", "entity": "Player 2", "entity_type": "player", "id": 98 }, { "type": "pass", "entity": "Player 1", "entity_type": "player", "id": 99 }, { "type": "bid", "entity": "Player 2", "entity_type": "player", "id": 100, "company": "MAJM", "price": 120 }, { "type": "pass", "entity": "Player 3", "entity_type": "player", "id": 101 }, { "type": "bid", "entity": "Player 3", "entity_type": "player", "id": 102, "corporation": "R", "price": 100 }, { "type": "place_token", "entity": "R", "entity_type": "corporation", "id": 103, "city": "G18-0-0", "slot": 0 }, { "type": "pass", "entity": "Player 1", "entity_type": "player", "id": 104 }, { "type": "pass", "entity": "Player 2", "entity_type": "player", "id": 105 }, { "type": "assign", "entity": "Player 3", "entity_type": "player", "id": 106, "target": "MAJC", "target_type": "company" }, { "type": "pass", "entity": "Player 1", "entity_type": "player", "id": 107 }, { "type": "pass", "entity": "Player 2", "entity_type": "player", "id": 108 }, { "type": "pass", "entity": "Player 3", "entity_type": "player", "id": 109 }, { "type": "take_loan", "entity": "R", "entity_type": "corporation", "id": 110, "loan": 0 }, { "type": "take_loan", "entity": "R", "entity_type": "corporation", "id": 111, "loan": 1 }, { "type": "lay_tile", "entity": "R", "entity_type": "corporation", "id": 112, "hex": "G20", "tile": "8-0", "rotation": 1 }, { "type": "lay_tile", "entity": "R", "entity_type": "corporation", "id": 113, "hex": "F21", "tile": "9-0", "rotation": 0 }, { "type": "buy_train", "entity": "R", "entity_type": "corporation", "id": 114, "train": "2-0", "price": 100, "variant": "2" }, { "type": "pass", "entity": "R", "entity_type": "corporation", "id": 115 }, { "type": "undo", "entity": "R", "entity_type": "corporation", "id": 116 }, { "type": "lay_tile", "entity": "R", "entity_type": "corporation", "id": 117, "hex": "H17", "tile": "9-1", "rotation": 0 }, { "type": "lay_tile", "entity": "R", "entity_type": "corporation", "id": 118, "hex": "I16", "tile": "57-0", "rotation": 0 }, { "type": "run_routes", "entity": "R", "entity_type": "corporation", "id": 119, "routes": [ { "train": "2-0", "connections": [ [ "G18", "G20", "F21", "E22" ] ] } ] }, { "type": "dividend", "entity": "R", "entity_type": "corporation", "id": 120, "kind": "payout" }, { "type": "convert", "entity": "R", "entity_type": "corporation", "id": 121 }, { "type": "buy_shares", "entity": "Player 3", "entity_type": "player", "id": 122, "shares": [ "R_1" ], "percent": 20 }, { "type": "buy_shares", "entity": "Player 3", "entity_type": "player", "id": 123, "shares": [ "R_2" ], "percent": 20 }, { "type": "buy_shares", "entity": "Player 3", "entity_type": "player", "id": 124, "shares": [ "R_3" ], "percent": 20 } ], "id": "hs_dgpxncjd_1602600426", "players": [ { "name": "Player 1" }, { "name": "Player 2" }, { "name": "Player 3" } ], "title": "1817", "description": "Bug Hunting ", "max_players": "3", "mode": "hotseat", "user": { "id": 0, "name": "You" }, "created_at": "2020-10-13", "loaded": true, "result": {} }

jenf commented 3 years ago

Also seems that you can do likewise in stock rounds.

jenf commented 3 years ago

5.1 Players are limited to owning six shares in a 10-share company, three shares in a 5-share company, and two shares in a 2-share company

TIE53 commented 3 years ago

I don't know if this should be raised as a new issue or not, but this bug also occurs when converting to a 10-share company. The president is able to purchase over the 60% limit.