Initial pass at Golden Pack.

This commit is contained in:
Greyson Parrelli
2026-07-24 07:47:05 -04:00
parent e74f983470
commit dd395f4bbf
27 changed files with 2770 additions and 150 deletions
+12
View File
@@ -147,12 +147,18 @@ func applyBotAction(g *game.Game, playerID string, a *ai.Action) error {
switch a.Type {
case "buy":
return g.Buy(playerID, a.Row)
case "buyAvocado":
return g.BuyAvocado(playerID, a.Row)
case "sell":
return g.Sell(playerID, a.Cards)
case "trade":
return g.TradeStart(playerID, a.Cards)
case "tradeChoose":
return g.TradeChoose(playerID, a.Pick)
case "revealChoose":
return g.RevealChoose(playerID, a.CardID)
case "battleChoose":
return g.BattleChoose(playerID, a.Value)
case "pass":
return g.Pass(playerID)
case "arrange":
@@ -174,6 +180,9 @@ func botFallback(g *game.Game, playerID string) error {
}
switch g.Phase {
case game.PhaseShop:
if g.PendingReveal != nil && g.PendingReveal.PlayerID == playerID {
return g.RevealChoose(playerID, g.PendingReveal.Options[0])
}
if g.Pending != nil && g.Pending.PlayerID == playerID {
return g.TradeChoose(playerID, 0)
}
@@ -194,6 +203,9 @@ func botFallback(g *game.Game, playerID string) error {
}
return g.SubmitOrder(playerID, ids)
case game.PhaseBattle:
if g.PendingBattle != nil && g.Players[g.PendingBattle.Seat].ID == playerID {
return g.BattleChoose(playerID, g.PendingBattle.Max)
}
return g.AcknowledgeBattle(playerID)
}
return game.ErrInvalidAction
+8
View File
@@ -31,6 +31,8 @@ type clientMessage struct {
Pack string `json:"pack"` // setPack
Difficulty string `json:"difficulty"` // addBot
Target string `json:"target"` // removePlayer (player ID)
Card string `json:"card"` // revealChoose (Cockatoo): pet card id
Value int `json:"value"` // battleChoose (Nurse Shark): Trumpets to spend
}
type serverMessage struct {
@@ -140,12 +142,18 @@ func (s *Server) apply(r *room, c *client, msg clientMessage) {
}
case "buy":
err = g.Buy(c.playerID, msg.Row)
case "buyAvocado":
err = g.BuyAvocado(c.playerID, msg.Row)
case "sell":
err = g.Sell(c.playerID, msg.Cards)
case "trade":
err = g.TradeStart(c.playerID, msg.Cards)
case "tradeChoose":
err = g.TradeChoose(c.playerID, msg.Pick)
case "revealChoose":
err = g.RevealChoose(c.playerID, msg.Card)
case "battleChoose":
err = g.BattleChoose(c.playerID, msg.Value)
case "pass":
err = g.Pass(c.playerID)
case "arrange":