from otree.api import * c = Currency # old name for currency; you can delete this. doc = """ Pension game - EBaseline treatment """ class Constants(BaseConstants): name_in_url = 'EBaseline' players_per_group = 3 num_rounds = 1 endowment = cu(7) instructions_template = 'EBaseline/instructions.html' class Subsession(BaseSubsession): pass class Group(BaseGroup): c2 = models.CurrencyField( min=cu(0), max=Constants.endowment, doc="""Amount transferred by Player 2""", label="How much do you want to transfer to Player 1?", ) c3 = models.CurrencyField( doc="""Amount transferred by Player 3""", label="How much do you want to transfer to Player 2?" ) class Player(BasePlayer): pass # FUNCTIONS def set_payoffs(group: Group): p1 = group.get_player_by_id(1) p2 = group.get_player_by_id(2) p3 = group.get_player_by_id(3) p1.payoff = (Constants.endowment - 5)*(group.c2 + 1) p2.payoff = (Constants.endowment - group.c2 + 2)*(group.c3 + 1) p3.payoff = (Constants.endowment - group.c3 + 2) # PAGES class p1page(Page): form_model = 'group' @staticmethod def is_displayed(player: Player): return player.id_in_group == 1 class WaitForP1(WaitPage): pass class p2page(Page): form_model = 'group' form_fields = ['c2'] @staticmethod def is_displayed(player: Player): return player.id_in_group == 2 class WaitForP2(WaitPage): pass class p3page(Page): form_model = 'group' form_fields = ['c3'] @staticmethod def is_displayed(player: Player): return player.id_in_group == 3 class ResultsWaitPage(WaitPage): after_all_players_arrive = set_payoffs class Results(Page): pass page_sequence = [p1page, WaitForP1, p2page, WaitForP2, p3page, ResultsWaitPage, Results]