from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range, ) author = 'Your name here' doc = """ Your app description """ class Constants(BaseConstants): name_in_url = 'CPR' players_per_group = 4 num_rounds = (5) group_endowment = c(40) multiplier = 2 class Subsession(BaseSubsession): pass class Group(BaseGroup): total_extraction = models.CurrencyField() individual_share= models.CurrencyField() def set_payoffs(self): players = self.get_players() extractions = [p.extraction for p in players] print('extractions:', extractions) self.total_extraction = sum(extractions) self.individual_share = ( Constants.multiplier * (Constants.group_endowment-self.total_extraction) / Constants.players_per_group ) for p in players: p.payoff = p.extraction + self.individual_share print('payoffs:', p.payoff) class Player(BasePlayer): extraction = models.CurrencyField( min=0, max= Constants.group_endowment/Constants.players_per_group, label='How much do you want to extract?' )