from otree.api import * c = cu doc = '' class Constants(BaseConstants): name_in_url = 'public_goods' players_per_group = 3 num_rounds = 1 endowment = 1000 def creating_session(subsession): session = subsession.session for g in subsession.get_groups(): if subsession.round_number <= int(Constants.num_rounds/2): g.multiplier = 0.7 else: g.multiplier = 0.4 class Subsession(BaseSubsession): creating_session = creating_session def set_payoffs(group): players = group.get_players() contributions = [p.contribution for p in players] group.total_contribution = sum(contributions) group.individual_share = group.total_contribution * group.multiplier / Constants.players_per_group for player in players: player.payoff = Constants.endowment - player.contribution + group.individual_share class Group(BaseGroup): total_contribution = models.IntegerField() individual_share = models.FloatField() multiplier = models.FloatField(initial=0) set_payoffs = set_payoffs class Player(BasePlayer): contribution = models.IntegerField(label='How much will you contribute?', max=Constants.endowment, min=0) class Contribute(Page): form_model = 'player' form_fields = ['contribution'] class ResultsWaitPage(WaitPage): after_all_players_arrive = 'set_payoffs' class Results(Page): form_model = 'player' page_sequence = [Contribute, ResultsWaitPage, Results]