def limit_speculation_by_influence(sender, instance, **kwargs): """ You can't speculate more than {{influence}} share per turn """ player = instance.player if CorporationSpeculationOrder.objects.filter(player=player, turn=player.game.current_turn).count() + DerivativeSpeculationOrder.objects.filter(player=player, turn=player.game.current_turn).count() >= player.influence.level: raise OrderNotAvailable("Pas assez d'influence pour spéculer à nouveau ce tour-ci.")
def buy_order_require_money(sender, instance, **kwargs): """ Check player has enough money for this order """ if instance.get_cost() + instance.player.get_current_orders_cost( ) > instance.player.money: raise OrderNotAvailable("Pas assez d'argent pour lancer cet ordre.")
def enforce_mdc_ccib_negative(sender, instance, **kwargs): """ When CCIB line is active, TRAN players can't protect. """ if instance.player.get_last_mdc_coalition() == MDCVoteOrder.TRAN: raise OrderNotAvailable( "Vous avez voté pour la transparence au tour précédent, vous ne pouvez donc pas effectuer de run de protection ce tour-ci" )
def enforce_mdc_dere_negative(sender, instance, **kwargs): """ When DERE line is active, BANK players can't speculate """ if instance.player.get_last_mdc_coalition() == MDCVoteOrder.BANK: raise OrderNotAvailable( "Vous avez voté pour l'instauration de garde-fous bancaires au tour précédent, vous ne pouvez donc pas spéculer ce tour-ci" )
def enforce_mdc_bank_negative(sender, instance, **kwargs): """ When BANK line is active, DERE players can't speculate """ if instance.player.get_last_mdc_coalition() == MDCVoteOrder.DERE: raise OrderNotAvailable( "Vous avez voté pour la dérégulation au tour précédent, vous ne pouvez donc pas spéculer ce tour-ci" )
def limit_mdc_order(sender, instance, **kwargs): """ Can't vote twice the same turn """ if MDCVoteOrder.objects.filter( player=instance.player, turn=instance.player.game.current_turn).exists(): raise OrderNotAvailable( "Vous ne pouvez pas rejoindre deux coalitions dans le même tour.")
def limit_citizenship_order(sender, instance, **kwargs): """ Can't change citizenship 2 times in the same turn """ if CitizenShipOrder.objects.filter( player=instance.player, turn=instance.player.game.current_turn).exists(): raise OrderNotAvailable( "Vous ne pouvez pas demander une citoyenneté deux fois dans le même tour." )
def only_one_influence_per_turn(sender, instance, **kwargs): """ You can't buy more than one influence per turn This is kinda like some "unique_together" constraint, except on inherited models. """ if BuyInfluenceOrder.objects.filter( player=instance.player, turn=instance.player.game.current_turn).exists(): raise OrderNotAvailable( "Impossible d'acheter de l'influence deux fois par tour.")
def citizenship_need_one_share(sender, instance, **kwargs): """ You need at least one share to get a citizenship """ if not hasattr(instance, 'corporation'): return if not instance.player.share_set.filter( corporation=instance.corporation).exists(): raise OrderNotAvailable( "Vous devez avoir au moins une part dans la corporation dont vous souhaitez devenir citoyen." )
def only_influence_bonus_per_turn(sender, instance, **kwargs): """ You can't use more 30%% bonuses than you have influence """ if instance.has_influence_bonus and RunOrder.objects.filter(player=instance.player, turn=instance.player.game.current_turn, has_influence_bonus=True).count() >= instance.player.influence.level: raise OrderNotAvailable("Impossible d'affecter le bonus de 30%: vous n'avez pas assez d'influence corporatiste.")
def check_recipient_is_not_self(sender, instance, **kwargs): """ Check if the recipient isn't the sender """ if instance.recipient_id is not None and instance.player_id == instance.recipient_id: raise OrderNotAvailable("Impossible de s'envoyer de l'argent !")
def forbind_nonexisting_rank(sender, instance, **kwargs): """ You get less money for speculating on first / last """ if instance.rank > instance.player.game.corporation_set.count(): raise OrderNotAvailable("Aucune corporation ne peut être à ce rang.")
def limit_speculation_amount_by_influence(sender, instance, **kwargs): """ A speculation can't be more than {{influence}} * MAX_AMOUNT_SPECULATION ¥ per turn """ if instance.investment > instance.player.influence.level * sender.MAX_AMOUNT_SPECULATION: raise OrderNotAvailable("Pas assez d'influence pour spéculer un tel montant (montant max : %s)." % (instance.player.influence.level * instance.MAX_AMOUNT_SPECULATION))
def max_is_90(sender, instance, **kwargs): """ You can't have more than 90% probability of success """ if instance.get_success_probability() > 90: raise OrderNotAvailable("Impossible d'avoir plus de 90% de réussite sur une run.")
def check_target_is_not_self(sender, instance, **kwargs): """ Check if the target isn't the Johnson """ if instance.target_id is not None and instance.player_id == instance.target_id: raise OrderNotAvailable("Impossible de se cibler soi-même.")
def only_one_vote_per_turn(sender, instance, **kwargs): """ You can't vote more than once per turn """ if VoteOrder.objects.filter(player=instance.player, turn=instance.player.game.current_turn).exists(): raise OrderNotAvailable("Impossible de voter deux fois par tour")
def limit_buy_share_by_influence(sender, instance, **kwargs): """ You can't buy more than {{influence}} share per turn """ if BuyShareOrder.objects.filter(player=instance.player, turn=instance.player.game.current_turn).count() >= instance.player.influence.level: raise OrderNotAvailable("Pas assez d'influence pour acheter à nouveau des parts ce tour-ci.")