from otree.api import * c = cu doc = '' class C(BaseConstants): NAME_IN_URL = 'Payments_within' PLAYERS_PER_GROUP = None NUM_ROUNDS = 1 class Subsession(BaseSubsession): pass class Group(BaseGroup): totalnumparticipants = models.IntegerField() first_third_end = models.IntegerField() second_third_start = models.IntegerField() second_third_end = models.IntegerField() first_third_start = models.IntegerField() def set_total_payoff(group: Group): session = group.session subsession = group.subsession for p in subsession.get_players(): p.payoff1 = p.participant.vars['BG_B_and_S_payoff'] p.payoff2 = p.participant.vars['BG_P_and_F_MismatchBribe_payoff'] - p.participant.vars['BG_B_and_S_payoff'] p.payoff3 = p.participant.vars['DG_payoff'] - p.participant.vars['BG_P_and_F_MismatchBribe_payoff'] p.total_payoff_ego = p.payoff1 + p.payoff2 + p.payoff3 p.participant.vars['total_payoff_ego'] = p.total_payoff_ego # p.participant.vars['Human_umpire_payoff'] = p.total p.payment = (p.total_payoff_ego * 0.012) p.paymenteur = int(p.payment) def ranking(group: Group): session = group.session subsession = group.subsession sorted_players = 0 allplayers = 0 allplayers = subsession.get_players() sorted_players = sorted (allplayers, key = lambda player: player.participant.vars['total_payoff_ego'], reverse=True) i = 0 for p in sorted_players: p.rankpos = i + 1 i = i + 1 totalnumparticipants = session.num_participants #first_third_start = 1 first_third_end = totalnumparticipants/3 second_third_start = first_third_end + 1 second_third_end = first_third_end + (totalnumparticipants/3) for p in subsession.get_players(): if p.rankpos <= first_third_end: p.payoff = 2 elif second_third_start<= p.rankpos <= second_third_end: p.payoff = 1 else: p.payoff = 0 p.numpart= session.num_participants for p in subsession.get_players(): if p.payoff == 0: p.payment = 7 elif p.payoff == 1: p.payment = 12 else: p.payment = 15 Group.set_total_payoff = set_total_payoff class Player(BasePlayer): total_payoff_ego = models.CurrencyField() payoff1 = models.CurrencyField() payoff2 = models.CurrencyField() total = models.CurrencyField() rankpos = models.IntegerField() numpart = models.IntegerField() payoff3 = models.CurrencyField() paymenteur = models.IntegerField() payment = models.CurrencyField() class MyWaitPage(WaitPage): after_all_players_arrive = set_total_payoff class Risultati(Page): form_model = 'player' page_sequence = [MyWaitPage, Risultati]