from otree.api import * c = cu doc = '' class C(BaseConstants): NAME_IN_URL = 'trial_smr' PLAYERS_PER_GROUP = None NUM_ROUNDS = 1 INSTRUCTIONS_TEMPLATE = 'trial_smr/instructions.html' class Subsession(BaseSubsession): pass class Group(BaseGroup): top_bidder_A = models.IntegerField(initial=-1) top_bid_A = models.CurrencyField(initial=0) auction_timeout = models.FloatField() second_bidder_A = models.IntegerField(initial=-1) second_bid_A = models.CurrencyField(initial=0) top_bidder_B = models.IntegerField(initial=-1) top_bidder_C = models.IntegerField(initial=-1) top_bidder_D = models.IntegerField(initial=-1) top_bid_B = models.CurrencyField(initial=0) top_bid_C = models.CurrencyField(initial=0) top_bid_D = models.CurrencyField(initial=0) second_bidder_B = models.IntegerField(initial=-1) second_bidder_C = models.IntegerField(initial=-1) second_bidder_D = models.IntegerField(initial=-1) second_bid_B = models.CurrencyField(initial=0) second_bid_C = models.CurrencyField(initial=0) second_bid_D = models.CurrencyField(initial=0) def get_stat(group: Group): return dict( top_bid_A=group.top_bid_A, top_bidder_A=group.top_bidder_A, second_bid_A=group.second_bid_A, second_bidder_A=group.second_bidder_A, top_bid_B=group.top_bid_B, top_bidder_B=group.top_bidder_B, second_bid_B=group.second_bid_B, second_bidder_B=group.second_bidder_B, top_bid_C=group.top_bid_C, top_bidder_C=group.top_bidder_C, second_bid_C=group.second_bid_C, second_bidder_C=group.second_bidder_C, top_bid_D=group.top_bid_D, top_bidder_D=group.top_bidder_D, second_bid_D=group.second_bid_D, second_bidder_D=group.second_bidder_D, ) def after_all_players_arrive(group: Group): import time group.auction_timeout = time.time() + 60 def after_all_players_arrive_2(group: Group): if group.top_bidder_A > 0: top_bidder_A = group.get_player_by_id(group.top_bidder_A) top_bidder_A.payoff = 100- group.top_bid_A if group.top_bidder_B > 0: top_bidder_B = group.get_player_by_id(group.top_bidder_B) top_bidder_B.payoff = 100- group.top_bid_B if group.top_bidder_C > 0: top_bidder_C = group.get_player_by_id(group.top_bidder_C) top_bidder_C.payoff = 100- group.top_bid_C if group.top_bidder_D > 0: top_bidder_D = group.get_player_by_id(group.top_bidder_D) top_bidder_D.payoff = 100- group.top_bid_D class Player(BasePlayer): is_top_bidder_A = models.BooleanField(initial=False) is_second_bidder_A = models.BooleanField(initial=False) is_top_bidder_B = models.BooleanField(initial=False) is_top_bidder_C = models.BooleanField(initial=False) is_top_bidder_D = models.BooleanField(initial=False) is_second_bidder_B = models.BooleanField(initial=False) is_second_bidder_C = models.BooleanField(initial=False) is_second_bidder_D = models.BooleanField(initial=False) def live_method(player: Player, data): group = player.group group = player.group my_id = player.id_in_group if data.bid_A: if data.bid_A> group.top_bid_A: group.second_bid_A = group.top_bid_A group.second_bidder_A = group.top_bidder_A group.top_bid_A = data.bid_A group.top_bidder_A = my_id if data.bid_B: if data.bid_B > group.top_bid_B: group.second_bid_B = group.top_bid_B group.second_bidder_B = group.top_bidder_B group.top_bid_B = data.bid_B group.top_bidder_B = my_id if data.bid_C: if data.bid_C > group.top_bid_C: group.second_bid_C = group.top_bid_C group.second_bidder_C = group.top_bidder_C group.top_bid_C = data.bid_C group.top_bidder_C = my_id if data.bid_D: if data.bid_D > group.top_bid_D: group.second_bid_D = group.top_bid_D group.second_bidder_D = group.top_bidder_D group.top_bid_D =data.bid_D group.top_bidder_D = my_id return {0: dict(get_stat(group))} class Waittostart(WaitPage): after_all_players_arrive = after_all_players_arrive class Bid(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_timeout - time.time() class ResultWaitPage(WaitPage): after_all_players_arrive = after_all_players_arrive_2 page_sequence = [Waittostart, Bid, ResultWaitPage]