from otree.api import * c = cu doc = '' class C(BaseConstants): NAME_IN_URL = 'englishauction' PLAYERS_PER_GROUP = None NUM_ROUNDS = 1 class Subsession(BaseSubsession): pass class Group(BaseGroup): auction_end = models.FloatField() highest_bidder1 = models.IntegerField(initial=1) highest_bid1 = models.CurrencyField(initial=0) highest_bidder2 = models.IntegerField(initial=1) highest_bid2 = models.CurrencyField(initial=0) highest_bidder3 = models.IntegerField(initial=1) highest_bid3 = models.CurrencyField(initial=0) highest_bidder4 = models.IntegerField(initial=1) highest_bid4 = models.CurrencyField(initial=0) def after_all_players_arrive(group: Group): import time group.auction_end = time.time() + 60 def after_all_players_arrive1(group: Group): winner1 = group.get_player_by_id(group.highest_bidder1) winner1.is_winner1 = True winner1.payoff = -group.highest_bid1 winner2 = group.get_player_by_id(group.highest_bidder2) winner2.is_winner2 = True winner2.payoff = -group.highest_bid2 winner3 = group.get_player_by_id(group.highest_bidder3) winner3.is_winner3 = True winner3.payoff = -group.highest_bid3 winner4 = group.get_player_by_id(group.highest_bidder4) winner4.is_winner4 = True winner4.payoff = -group.highest_bid4 class Player(BasePlayer): is_winner1 = models.BooleanField(initial=False) bid1 = models.CurrencyField(initial=0) bid2 = models.CurrencyField(initial=0) bid3 = models.CurrencyField(initial=0) bid4 = models.CurrencyField(initial=0) is_winner2 = models.BooleanField(initial=False) is_winner3 = models.BooleanField(initial=False) is_winner4 = models.BooleanField(initial=False) def live_method(player: Player, data): group = player.group my_id = player.id_in_group is_new_high_bid1 = False is_new_high_bid2 = False is_new_high_bid3 = False is_new_high_bid4 = False bid1 = data['bid1'] if bid1 > group.highest_bid1: player.bid1 = bid1 group.highest_bid1 = bid1 group.highest_bidder1 = my_id is_new_high_bid1 = True bid2 = data['bid2'] if bid2 > group.highest_bid2: player.bid2 = bid2 group.highest_bid2 = bid2 group.highest_bidder2 = my_id is_new_high_bid2 = True bid3 = data['bid3'] if bid3 > group.highest_bid3: player.bid3 = bid3 group.highest_bid3 = bid3 group.highest_bidder3 = my_id is_new_high_bid3 = True bid4 = data['bid4'] if bid4 > group.highest_bid4: player.bid4 = bid4 group.highest_bid4 = bid4 group.highest_bidder4 = my_id is_new_high_bid4 = True return { 0: dict( is_new_high_bid1=is_new_high_bid1, highest_bid1=group.highest_bid1, highest_bidder1=group.highest_bidder1, is_new_high_bid2=is_new_high_bid2, highest_bid2=group.highest_bid2, highest_bidder2=group.highest_bidder2, is_new_high_bid3=is_new_high_bid3, highest_bid3=group.highest_bid3, highest_bidder3=group.highest_bidder3, is_new_high_bid4=is_new_high_bid4, highest_bid4=group.highest_bid4, highest_bidder4=group.highest_bidder4,) } class WaitToStart(WaitPage): after_all_players_arrive = after_all_players_arrive class Bidding(Page): form_model = 'player' live_method = 'live_method' @staticmethod def js_vars(player: Player): group = player.group return dict(my_id=player.id_in_group) @staticmethod def get_timeout_seconds(player: Player): group = player.group import time return group.auction_end - time.time() class ResultsWaitPage(WaitPage): after_all_players_arrive = after_all_players_arrive1 class Results(Page): form_model = 'player' page_sequence = [WaitToStart, Bidding, ResultsWaitPage, Results]