from otree.api import * doc = """ Your app description """ class C(BaseConstants): NAME_IN_URL = 'stage5' PLAYERS_PER_GROUP = 12 NUM_ROUNDS = 1 maxx = 100 class Subsession(BaseSubsession): pass class Group(BaseGroup): def payoff2(group: BaseGroup): for j in group.get_players(): j.participant.vars['payoff_stage5'] = j.payoff def setup_function(group:BaseGroup): ps = group.get_players() for n in ps: n.exp_number = n.participant.vars.get('experiment_number') if n.participant.vars.get('avatar') == 1: n.ava_pic = "/static/imgs/ava1.png" n.participant.vars['ava_pic'] = n.ava_pic n.hat = "/static/imgs/hat1.png" n.jersey = "/static/imgs/jersey1.png" if n.participant.vars.get('avatar') == 2: n.ava_pic = "/static/imgs/ava2.png" n.participant.vars['ava_pic'] = n.ava_pic n.jersey = "/static/imgs/jersey1.png" n.hat = "/static/imgs/hat0.png" if n.participant.vars.get('avatar') == 3: n.ava_pic = "/static/imgs/ava3.png" n.participant.vars['ava_pic'] = n.ava_pic n.hat = "/static/imgs/hat1.png" n.jersey = "/static/imgs/jersey0.png" if n.participant.vars.get('avatar') == 4: n.ava_pic = "/static/imgs/ava4.png" n.participant.vars['ava_pic'] = n.ava_pic n.jersey = "/static/imgs/jersey0.png" n.hat = "/static/imgs/hat0.png" def payoff_function(group:BaseGroup): m = C.maxx p1 = group.get_player_by_id(1) p2 = group.get_player_by_id(2) p3 = group.get_player_by_id(3) p4 = group.get_player_by_id(4) p5 = group.get_player_by_id(5) p6 = group.get_player_by_id(6) p7 = group.get_player_by_id(7) p8 = group.get_player_by_id(8) p9 = group.get_player_by_id(9) p10 = group.get_player_by_id(10) p11 = group.get_player_by_id(11) p12 = group.get_player_by_id(12) ps = group.get_players() for k in ps: if k.exp_number == 1: k.payoff = p2.dec1 + p5.dec1 + p8.dec1 + p11.dec1 if k.exp_number == 2: k.payoff = p3.dec2 + p4.dec1 + p7.dec1 + p10.dec1 if k.exp_number == 3: k.payoff = p6.dec1 + p9.dec1 + p12.dec1 + (m-p1.dec2) if k.exp_number == 4: k.payoff = (m-p2.dec2) + (m-p5.dec2) + (m-p8.dec2) + (m-p11.dec2) if k.exp_number == 5: k.payoff = p1.dec1 + (m-p6.dec2) + (m-p7.dec2) + (m-p10.dec2) if k.exp_number == 6: k.payoff = (m-p3.dec1) + (m-p4.dec2) + (m-p9.dec2) + (m-p12.dec2) if k.exp_number == 7: k.payoff = p2.dec2 + p5.dec2 + p8.dec2 + p11.dec2 if k.exp_number == 8: k.payoff = (m-p1.dec1) + p4.dec2 + p9.dec2 + p10.dec2 if k.exp_number == 9: k.payoff = p3.dec1 + p6.dec2 + p7.dec2 + p12.dec2 if k.exp_number == 10: k.payoff = (m-p2.dec1) + (m-p5.dec1) + (m-p8.dec1) + (m-p11.dec1) if k.exp_number == 11: k.payoff = (m-p4.dec1) + (m-p7.dec1) + (m-p12.dec1) + p1.dec2 if k.exp_number == 12: k.payoff = (m-p3.dec2) + (m-p6.dec1) + (m-p9.dec1) + (m-p10.dec1) if C.PLAYERS_PER_GROUP == 24: p13 = group.get_player_by_id(13) p14 = group.get_player_by_id(14) p15 = group.get_player_by_id(15) p16 = group.get_player_by_id(16) p17 = group.get_player_by_id(17) p18 = group.get_player_by_id(18) p19 = group.get_player_by_id(19) p20 = group.get_player_by_id(20) p21 = group.get_player_by_id(21) p22 = group.get_player_by_id(22) p23 = group.get_player_by_id(23) p24 = group.get_player_by_id(24) if k.exp_number == 13: k.payoff = p14.dec1 + p17.dec1 + p20.dec1 + p23.dec1 if k.exp_number == 14: k.payoff = p15.dec1 + p16.dec1 + p19.dec1 + p22.dec1 if k.exp_number == 15: k.payoff = p18.dec1 + p21.dec1 + p24.dec1 + (m-p13.dec2) if k.exp_number == 16: k.payoff = (m-p14.dec1) + (m-p17.dec1) + (m-p20.dec1) + (m-p23.dec1) if k.exp_number == 17: k.payoff = p13.dec1 + (m-p18.dec1) + (m-p19.dec1) + (m-p22.dec1) if k.exp_number == 18: k.payoff = (m-p15.dec1) + (m-p16.dec1) + (m-p21.dec1) + (m-p24.dec1) if k.exp_number == 19: k.payoff = p14.dec2 + p17.dec2 + p20.dec2 + p23.dec2 if k.exp_number == 20: k.payoff = (m-p13.dec1) + p16.dec2 + p21.dec2 + p22.dec2 if k.exp_number == 21: k.payoff = p15.dec2 + p18.dec2 + p19.dec2 + p24.dec2 if k.exp_number == 22: k.payoff = (m-p14.dec2) + (m-p17.dec2) + (m-p20.dec2) + (m-p23.dec2) if k.exp_number == 23: k.payoff = (m-p16.dec2) + (m-p19.dec2) + (m-p24.dec2) + p13.dec2 if k.exp_number == 24: k.payoff = (m-p15.dec2) + (m-p18.dec2) + (m-p21.dec2) + (m-p22.dec2) def bene_help_function(group: BaseGroup): p1 = group.get_player_by_id(1) p2 = group.get_player_by_id(2) p3 = group.get_player_by_id(3) p4 = group.get_player_by_id(4) p5 = group.get_player_by_id(5) p6 = group.get_player_by_id(6) p7 = group.get_player_by_id(7) p8 = group.get_player_by_id(8) p9 = group.get_player_by_id(9) p10 = group.get_player_by_id(10) p11 = group.get_player_by_id(11) p12 = group.get_player_by_id(12) for k in group.get_players(): if k.exp_number == 1: k.ben1 = p5.jersey k.ben2 = p8.jersey k.ben3 = p11.hat k.ben4 = p3.hat if k.exp_number == 2: k.ben1 = p1.jersey k.ben2 = p10.jersey k.ben3 = p7.hat k.ben4 = p4.hat if k.exp_number == 3: k.ben1 = p9.jersey k.ben2 = p6.jersey k.ben3 = p2.hat k.ben4 = p12.hat if k.exp_number == 4: k.ben1 = p2.jersey k.ben2 = p11.jersey k.ben3 = p8.hat k.ben4 = p6.hat if k.exp_number == 5: k.ben1 = p1.jersey k.ben2 = p10.jersey k.ben3 = p7.hat k.ben4 = p4.hat if k.exp_number == 6: k.ben1 = p3.jersey k.ben2 = p12.jersey k.ben3 = p9.hat k.ben4 = p5.hat if k.exp_number == 7: k.ben1 = p2.jersey k.ben2 = p11.jersey k.ben3 = p9.hat k.ben4 = p5.hat if k.exp_number == 8: k.ben1 = p1.jersey k.ben2 = p10.jersey k.ben3 = p7.hat k.ben4 = p4.hat if k.exp_number == 9: k.ben1 = p3.jersey k.ben2 = p12.jersey k.ben3 = p8.hat k.ben4 = p6.hat if k.exp_number == 10: k.ben1 = p2.jersey k.ben2 = p12.jersey k.ben3 = p8.hat k.ben4 = p5.hat if k.exp_number == 11: k.ben1 = p1.jersey k.ben2 = p10.jersey k.ben3 = p7.hat k.ben4 = p4.hat if k.exp_number == 12: k.ben1 = p3.jersey k.ben2 = p11.jersey k.ben3 = p9.hat k.ben4 = p6.hat if C.PLAYERS_PER_GROUP == 24: p13 = group.get_player_by_id(13) p14 = group.get_player_by_id(14) p15 = group.get_player_by_id(15) p16 = group.get_player_by_id(16) p17 = group.get_player_by_id(17) p18 = group.get_player_by_id(18) p19 = group.get_player_by_id(19) p20 = group.get_player_by_id(20) p21 = group.get_player_by_id(21) p22 = group.get_player_by_id(22) p23 = group.get_player_by_id(23) p24 = group.get_player_by_id(24) for k in group.get_players(): if k.exp_number == 13: k.ben1 = p17.jersey k.ben2 = p20.jersey k.ben3 = p23.hat k.ben4 = p15.hat if k.exp_number == 14: k.ben1 = p13.jersey k.ben2 = p16.jersey k.ben3 = p19.hat k.ben4 = p22.hat if k.exp_number == 15: k.ben1 = p14.jersey k.ben2 = p18.jersey k.ben3 = p21.hat k.ben4 = p24.hat if k.exp_number == 16: k.ben1 = p14.jersey k.ben2 = p18.jersey k.ben3 = p20.hat k.ben4 = p23.hat if k.exp_number == 17: k.ben1 = p13.jersey k.ben2 = p16.jersey k.ben3 = p19.hat k.ben4 = p22.hat if k.exp_number == 18: k.ben1 = p15.jersey k.ben2 = p17.jersey k.ben3 = p21.hat k.ben4 = p24.hat if k.exp_number == 19: k.ben1 = p14.jersey k.ben2 = p17.jersey k.ben3 = p21.hat k.ben4 = p23.hat if k.exp_number == 20: k.ben1 = p13.jersey k.ben2 = p16.jersey k.ben3 = p19.hat k.ben4 = p22.hat if k.exp_number == 21: k.ben1 = p15.jersey k.ben2 = p18.jersey k.ben3 = p20.hat k.ben4 = p24.hat if k.exp_number == 22: k.ben1 = p14.jersey k.ben2 = p17.jersey k.ben3 = p20.hat k.ben4 = p24.hat if k.exp_number == 23: k.ben1 = p13.jersey k.ben2 = p16.jersey k.ben3 = p19.hat k.ben4 = p22.hat if k.exp_number == 24: k.ben1 = p15.jersey k.ben2 = p18.jersey k.ben3 = p21.hat k.ben4 = p23.hat class Player(BasePlayer): dec1 = models.IntegerField(initial=50) dec2 = models.IntegerField(initial=50) exp_number = models.IntegerField() ava_pic = models.StringField() hat = models.StringField() jersey = models.StringField() ben1 = models.StringField() ben2 = models.StringField() ben3 = models.StringField() ben4 = models.StringField() Perceived_Closeness3 = models.IntegerField(label="", widget=widgets.RadioSelectHorizontal, choices=[1, 2, 3, 4, 5, 6, 7] ) Perceived_Closeness4 = models.IntegerField(label="", widget=widgets.RadioSelectHorizontal, choices=[1, 2, 3, 4, 5, 6, 7] ) # PAGES class WaitPageShuffle2(WaitPage): wait_for_all_groups = True @staticmethod def after_all_players_arrive(subsession): new_gr = subsession.session.vars.get('new_groups2') subsession.set_group_matrix(new_gr) class Stage5Inf(Page): def vars_for_template(player: Player): return dict( ava_pic=player.ava_pic ) class SetupWaitPage(WaitPage): def after_all_players_arrive(group: Group): group.setup_function() class HelpPage(WaitPage): def after_all_players_arrive(group: Group): group.bene_help_function() class Decision1(Page): def vars_for_template(player: Player): return dict( ava_pic=player.ava_pic, ben1=player.ben1, ben2=player.ben2, ) @staticmethod def live_method(self, data): if data['t'] == 'final': final = int(data['final_value']) self.dec1 = final print("xd") class Decision2(Page): def is_displayed(player: Player): return player.id_in_group <= 6 def vars_for_template(player: Player): return dict( ava_pic=player.ava_pic, ben3=player.ben3, ben4=player.ben4, ) @staticmethod def live_method(self, data): if data['t'] == 'final': response = dict() finalvalue = int(data['p']) self.dec2 = finalvalue if self.dec2 < 0: response.update(t="Nothing") if self.dec2 >= 0: response.update(t='submit1') return {self.id_in_group: response} class Decision2B(Page): def is_displayed(player: Player): return player.id_in_group > 6 def vars_for_template(player: Player): return dict( ava_pic=player.ava_pic, ben3=player.ben3, ben4=player.ben4, ) @staticmethod def live_method(self, data): if data['t'] == 'final': response = dict() finalvalue = int(data['m']) self.dec2 = finalvalue if self.dec2 < 0: response.update(t="Nothing") if self.dec2 >= 0: response.update(t='submit4') return {self.id_in_group: response} class PayoffWaitPage(WaitPage): def after_all_players_arrive(group: Group): group.payoff_function() class PayoffWaitPage2(WaitPage): def after_all_players_arrive(group: Group): group.payoff2() class Decision1Test(Page): def is_displayed(player: Player): return player.id_in_group <= 6 def vars_for_template(player: Player): return dict( ava_pic=player.ava_pic, ben1=player.ben1, ben2=player.ben2, ) @staticmethod def live_method(self, data): if data['t'] == 'final': response = dict() finalvalue = int(data['v']) self.dec1 = finalvalue if self.dec1 < 0: response.update(t="Nothing") if self.dec1 >= 0: response.update(t='submit') return {self.id_in_group: response} class Decision1B(Page): def is_displayed(player: Player): return player.id_in_group > 6 def vars_for_template(player: Player): return dict( ava_pic=player.ava_pic, ben1=player.ben1, ben2=player.ben2, ) @staticmethod def live_method(self, data): if data['t'] == 'final': response = dict() finalvalue = int(data['n']) self.dec1 = finalvalue if self.dec1 < 0: response.update(t="Nothing") if self.dec1 >= 0: response.update(t='submit3') return {self.id_in_group: response} class PC3(Page): form_model = 'player' form_fields = ['Perceived_Closeness3'] def vars_for_template(player: Player): return dict( ava_pic=player.ava_pic, ) class PC4(Page): form_model = 'player' form_fields = ['Perceived_Closeness4'] def vars_for_template(player: Player): return dict( ava_pic=player.ava_pic, ) page_sequence = [WaitPageShuffle2, SetupWaitPage, HelpPage, Stage5Inf, Decision1Test, Decision2,Decision2B, Decision1B, PayoffWaitPage, PayoffWaitPage2, PC3, PC4]