Archived
Fixes #4; add draw_and_discard_multiple to make Rampage work
This commit is contained in:
@@ -207,7 +207,7 @@
|
||||
"amount": 6
|
||||
},
|
||||
{
|
||||
"effect": "draw_and_discard",
|
||||
"effect": "draw_and_discard_multiple",
|
||||
"amount": 2
|
||||
}
|
||||
]
|
||||
|
||||
@@ -109,6 +109,7 @@ card_effect_all_behaviours = {
|
||||
CardEffects.SACRIFICE: effect_sacrifice,
|
||||
CardEffects.DRAW: effect_draw,
|
||||
CardEffects.DRAW_AND_DISCARD: effect_draw_and_discard,
|
||||
CardEffects.DRAW_AND_DISCARD_MULTIPLE: effect_draw_and_discard,
|
||||
CardEffects.DISCARD: effect_discard,
|
||||
CardEffects.RESTACK_DISCARDED_CHAMPION: effect_restack_discarded_champion,
|
||||
CardEffects.RESTACK_DISCARDED_CARD: effect_restack_discarded,
|
||||
|
||||
@@ -41,6 +41,7 @@ class CardEffects(str, Enum):
|
||||
SACRIFICE = "sacrifice"
|
||||
DRAW = "draw"
|
||||
DRAW_AND_DISCARD = "draw_and_discard"
|
||||
DRAW_AND_DISCARD_MULTIPLE = "draw_and_discard_multiple"
|
||||
DISCARD = "discard"
|
||||
RESTACK_DISCARDED_CHAMPION = "restack_discarded_champion"
|
||||
RESTACK_DISCARDED_CARD = "restack_discarded_card"
|
||||
|
||||
+2
-2
@@ -282,9 +282,9 @@ class Player(Serializable):
|
||||
if p is None:
|
||||
print("player not found")
|
||||
return False
|
||||
if p.turn.discard_markers >= len(p.hand):
|
||||
if p.turn.fuck_u_markers >= len(p.hand):
|
||||
print("player has already too many discard markers!")
|
||||
return False
|
||||
p.turn.discard_markers += 1
|
||||
p.turn.fuck_u_markers += 1
|
||||
await self.game.notify_controller("update", p.turn.serialize())
|
||||
return True
|
||||
|
||||
+30
-9
@@ -29,6 +29,7 @@ class Turn(Serializable):
|
||||
effects_availables: List[Effect]
|
||||
champions_health: Dict[str, int]
|
||||
discard_markers: int
|
||||
fuck_u_markers: int
|
||||
damage_reserve: int
|
||||
gold_reserve: int
|
||||
|
||||
@@ -41,17 +42,22 @@ class Turn(Serializable):
|
||||
self.effects_availables: List[Effect] = []
|
||||
self.cards_locked: List[Card] = []
|
||||
self.discard_markers = 0
|
||||
self.fuck_u_markers = 0
|
||||
|
||||
async def end_turn(self) -> None:
|
||||
"""Resets card champion health and card effects"""
|
||||
if len(self.player.hand) > 0:
|
||||
return print("You must play all your cards before ending a turn!")
|
||||
|
||||
if self.fuck_u_markers > 0:
|
||||
return print("You cannot end your turn with fuck_u markers")
|
||||
if self.discard_markers > 0:
|
||||
return print("You cannot end your turn with discard markers")
|
||||
self.damage_reserve = 0
|
||||
self.gold_reserve = 0
|
||||
self.effects_availables = []
|
||||
self.cards_locked = []
|
||||
self.discard_markers = 0
|
||||
self.fuck_u_markers = 0
|
||||
for p in self.player.game.players:
|
||||
p.turn.champions_health = {}
|
||||
for c in p.board:
|
||||
@@ -62,8 +68,10 @@ class Turn(Serializable):
|
||||
await self.player.end_turn()
|
||||
|
||||
async def lock_card(self, card_id: str):
|
||||
if self.discard_markers > 0:
|
||||
return print("You cannot lock a card while having discard markers")
|
||||
if self.discard_markers > 0 or self.fuck_u_markers > 0:
|
||||
return print(
|
||||
"You cannot lock a card while having discard or fuck_u markers"
|
||||
)
|
||||
card = self.player.game.search_card_in_pile(card_id, self.player.board)
|
||||
if card is None:
|
||||
return print("Couldn't find card in player board")
|
||||
@@ -90,14 +98,19 @@ class Turn(Serializable):
|
||||
await self.player.game.notify_controller("update", self.serialize())
|
||||
|
||||
async def discard_card(self, card_id: str):
|
||||
if self.discard_markers <= 0:
|
||||
return print("You don't have any discard markers!")
|
||||
card = self.player.game.search_card_in_pile(card_id, self.cards_locked)
|
||||
if card is not None:
|
||||
return print("Cannot discard: card is locked")
|
||||
self.discard_markers -= 1
|
||||
|
||||
if self.fuck_u_markers > 0:
|
||||
self.fuck_u_markers -= 1
|
||||
elif self.discard_markers > 0:
|
||||
self.discard_markers -= 1
|
||||
else:
|
||||
return print("you don't have any discard or fuck_u markers")
|
||||
|
||||
await self.player.discard_card(card_id)
|
||||
await self.player.game.notify_controller("update", self.serialize())
|
||||
return await self.player.discard_card(card_id)
|
||||
|
||||
def sacrifice_card(self, card_id: str):
|
||||
card = self.player.game.search_card_in_pile(card_id, self.cards_locked)
|
||||
@@ -106,14 +119,22 @@ class Turn(Serializable):
|
||||
return self.player.sacrifice_card(card_id)
|
||||
|
||||
async def use_effect_with_check(self, effect_id: str, target: Optional[str] = None):
|
||||
if self.discard_markers > 0:
|
||||
return print("You cannot use an effect while having discard markers")
|
||||
if self.fuck_u_markers > 0:
|
||||
return print("You cannot use an effect while having fuck_u markers")
|
||||
effect = next(
|
||||
(e for e in self.effects_availables if str(e.uuid) == effect_id),
|
||||
None,
|
||||
)
|
||||
if effect is None:
|
||||
return print("Effect not available")
|
||||
|
||||
if (
|
||||
effect.effect != CardEffects.DRAW_AND_DISCARD_MULTIPLE
|
||||
and self.discard_markers > 0
|
||||
):
|
||||
return print(
|
||||
"You cannot use another effect than draw_and_discard_multiple with discard markers!"
|
||||
)
|
||||
card = effect.card
|
||||
if card is None:
|
||||
return print(
|
||||
|
||||
Reference in New Issue
Block a user