from ._builtin import Page, WaitPage from .models import Constants import random class StartWaitPage(WaitPage): def is_displayed(self): return self.subsession.round_number == 1 group_by_arrival_time = True title_text = "Waiting for other participants." body_text = "Pay attention to this screen: The timer for the next page could start any second." class MatchingFailWaitPage(WaitPage): def is_displayed(self): return self.subsession.round_number == 1 and self.participant.vars['time'] == 1 def after_all_players_arrive(self): for p in self.group.get_players(): code = random.randint(10000000, 99999999) p.code = code p.failed_matching = 1 class MatchingFail(Page): def is_displayed(self): return self.subsession.round_number == 1 and self.participant.vars['time'] == 1 def vars_for_template(self): return { 'code': self.player.code } class TGMatchingWaitPage(WaitPage): def is_displayed(self): return self.subsession.round_number == 1 and self.participant.vars['time'] == 0 wait_for_all_groups = False def after_all_players_arrive(self): for p in self.group.get_players(): if p.id_in_group == 1: p.role_TG = 'B' p.group_TG = 1 elif p.id_in_group == 2: p.role_TG = 'B' p.group_TG = 2 elif p.id_in_group > 2 and p.id_in_group < 5: p.role_TG = 'A' p.group_TG = 1 else: p.role_TG = 'A' p.group_TG = 2 for p in self.group.get_players(): p.participant.vars['is_dropout'] = False class GIntro3(Page): def is_displayed(self): return self.subsession.round_number == 1 and self.participant.vars['time'] == 0 timeout_seconds = 30 timer_text = 'Time remaining on this page:' def vars_for_template(self): return { 'role': self.player.role_TG } class Part1_intro1(Page): def is_displayed(self): return self.subsession.round_number == 1 and self.participant.vars['time'] == 0 timeout_seconds = 60 timer_text = 'Time remaining on this page:' def vars_for_template(self): return { 'role': self.player.role_TG, 'pay_orange': Constants.pay_orange, } class Part1_intro2(Page): def is_displayed(self): return self.subsession.round_number == 1 and self.participant.vars['time'] == 0 timeout_seconds = 60 timer_text = 'Time remaining on this page:' def vars_for_template(self): return { 'role': self.player.role_TG, 'pay_yellow_A': Constants.pay_yellow_A, 'pay_yellow_B': Constants.pay_yellow_B, 'pay_purple_6_A': Constants.pay_purple_6_A, 'pay_purple_A': Constants.pay_purple_A, 'pay_purple_B': Constants.pay_purple_B, } class Part1_intro3(Page): def is_displayed(self): return self.subsession.round_number == 1 and self.participant.vars['time'] == 0 timeout_seconds = 60 timer_text = 'Time remaining on this page:' def vars_for_template(self): return { 'role': self.player.role_TG, 'pay_yellow_A': Constants.pay_yellow_A, 'pay_yellow_B': Constants.pay_yellow_B, 'pay_purple_6_A': Constants.pay_purple_6_A, 'pay_purple_A': Constants.pay_purple_A, 'pay_purple_B': Constants.pay_purple_B, 'pay_orange': Constants.pay_orange, } class Part1_intro4(Page): def is_displayed(self): return self.subsession.round_number == 1 and self.participant.vars['time'] == 0 timeout_seconds = 40 timer_text = 'Time remaining on this page:' def vars_for_template(self): return { 'role': self.player.role_TG } class Part1_quizzA(Page): def is_displayed(self): return self.subsession.round_number == 1 and self.player.role_TG == "A" and self.participant.vars['time'] == 0 timeout_seconds = 130 timer_text = 'Time remaining on this page:' form_model = 'player' form_fields = ['box_Part1_quizzA'] def vars_for_template(self): return { 'pay_yellow_A': Constants.pay_yellow_A, 'pay_yellow_B': Constants.pay_yellow_B, 'pay_purple_6_A': Constants.pay_purple_6_A, 'pay_purple_A': Constants.pay_purple_A, 'pay_purple_B': Constants.pay_purple_B, 'pay_orange': Constants.pay_orange, } def before_next_page(self): if self.timeout_happened: self.player.failed_quizzA = 1 class Part1_quizzB(Page): def is_displayed(self): return self.subsession.round_number == 1 and self.player.role_TG == "B" and self.participant.vars['time'] == 0 timeout_seconds = 130 timer_text = 'Time remaining on this page:' form_model = 'player' form_fields = ['box_Part1_quizzB'] def vars_for_template(self): return { 'pay_yellow_A': Constants.pay_yellow_A, 'pay_yellow_B': Constants.pay_yellow_B, 'pay_purple_6_A': Constants.pay_purple_6_A, 'pay_purple_A': Constants.pay_purple_A, 'pay_purple_B': Constants.pay_purple_B, 'pay_orange': Constants.pay_orange, } def before_next_page(self): if self.timeout_happened: self.player.failed_quizzB = 1 class Promise(Page): def is_displayed(self): return self.subsession.round_number == 1 and self.player.role_TG == "B" and self.participant.vars['time'] == 0 timeout_seconds = 50 timer_text = 'Time remaining on this page:' form_model = 'player' form_fields = ['promise_TG', 'box_promise'] def vars_for_template(self): return { 'pay_yellow_A': Constants.pay_yellow_A, 'pay_yellow_B': Constants.pay_yellow_B, 'pay_purple_6_A': Constants.pay_purple_6_A, 'pay_purple_A': Constants.pay_purple_A, 'pay_purple_B': Constants.pay_purple_B, 'pay_orange': Constants.pay_orange, } def before_next_page(self): if self.timeout_happened: self.player.failed_promise = 1 self.player.promise_TG = 0 self.player.is_dropout = True self.player.participant.vars['is_dropout'] = True class PromiseWaitPage(WaitPage): def is_displayed(self): return self.subsession.round_number == 1 and self.participant.vars['time'] == 0 title_text = "Waiting for participant B." body_text = "Pay attention to this screen: The timer for the next page could start any second. If you decide to withdraw from the study now, you will NOT receive your bonus payment." def after_all_players_arrive(self): for p in self.group.get_players(): if p.role_TG == "A": if p.group_TG == 1: p.promise_TG = p.group.get_player_by_id(1).promise_TG else: p.promise_TG = p.group.get_player_by_id(2).promise_TG class DecisionA_TG(Page): def is_displayed(self): return self.subsession.round_number == 1 and self.player.role_TG == "A" and self.participant.vars['time'] == 0 timer_text = 'Time remaining on this page:' form_model = 'player' form_fields = ['enter', 'box_decisionA_TG'] def vars_for_template(self): return { 'promise': self.player.promise_TG, 'pay_yellow_A': Constants.pay_yellow_A, 'pay_yellow_B': Constants.pay_yellow_B, 'pay_purple_6_A': Constants.pay_purple_6_A, 'pay_purple_A': Constants.pay_purple_A, 'pay_orange': Constants.pay_orange, 'pay_purple_B': Constants.pay_purple_B, } def before_next_page(self): if self.timeout_happened: self.player.failed_decisionA = 1 self.player.enter = 0 self.player.is_dropout = True self.player.participant.vars['is_dropout'] = True def get_timeout_seconds(self): if self.participant.vars.get('is_dropout'): return 1 # instant timeout, 0 second else: return 40 class DecisionB_TG(Page): def is_displayed(self): return self.subsession.round_number == 1 and self.player.role_TG == "B" and self.participant.vars['time'] == 0 timer_text = 'Time remaining on this page:' form_model = 'player' form_fields = ['roll', 'box_decisionB_TG'] def vars_for_template(self): return { 'pay_yellow_A': Constants.pay_yellow_A, 'pay_yellow_B': Constants.pay_yellow_B, 'pay_purple_6_A': Constants.pay_purple_6_A, 'pay_purple_A': Constants.pay_purple_A, 'pay_orange': Constants.pay_orange, 'pay_purple_B': Constants.pay_purple_B, } def get_timeout_seconds(self): if self.participant.vars.get('is_dropout'): return 1 # instant timeout, 0 second else: return 40 def before_next_page(self): if self.timeout_happened: self.player.failed_decisionB = 1 self.player.roll = 1 self.player.is_dropout = True self.player.participant.vars['is_dropout'] = True self.player.die = random.randint(1, 6) if self.player.promise_TG == 1 and self.player.roll == 0: self.player.reliable = 0 elif self.player.promise_TG == 1 and self.player.roll == 1: self.player.reliable = 1 elif self.player.promise_TG == 0: self.player.reliable = 2 class DieB_TG(Page): def is_displayed(self): return self.subsession.round_number == 1 and self.player.role_TG == "B" and self.player.roll == 1 and self.participant.vars['time'] == 0 #timeout_seconds = 20 timer_text = 'Time remaining on this page:' def vars_for_template(self): return { "die": self.player.die } def get_timeout_seconds(self): if self.participant.vars.get('is_dropout'): return 1 # instant timeout, 0 second else: return 20 class TGWaitPage(WaitPage): def is_displayed(self): return self.subsession.round_number == 1 and self.participant.vars['time'] == 0 title_text = "Waiting for the other participant. " body_text = "Pay attention to this screen: The timer for the next page could start any second. If you decide to withdraw from the study now, you will NOT receive your bonus payment." def after_all_players_arrive(self): A_id_TG1 = [3, 4] decisive_A_TG1 = random.choice(A_id_TG1) A_id_TG2 = [5, 6] decisive_A_TG2 = random.choice(A_id_TG2) for p in self.group.get_players(): if p.group_TG == 1: p.decisive_A = decisive_A_TG1 p.decisive_A_enter = p.group.get_player_by_id(p.decisive_A).enter p.roll = p.group.get_player_by_id(1).roll p.die = p.group.get_player_by_id(1).die if p.in_round(1).role_TG == "A": p.reliable_TG = p.group.get_player_by_id(1).reliable p.reliable = p.group.get_player_by_id(2).reliable p.promise = p.group.get_player_by_id(2).promise_TG else: p.reliable_TG = p.group.get_player_by_id(1).reliable p.reliable = p.group.get_player_by_id(1).reliable p.promise = p.promise_TG if p.group_TG == 2: p.decisive_A = decisive_A_TG2 p.decisive_A_enter = p.group.get_player_by_id(p.decisive_A).enter p.roll = p.group.get_player_by_id(2).roll p.die = p.group.get_player_by_id(2).die if p.in_round(1).role_TG == "A": p.reliable_TG = p.group.get_player_by_id(2).reliable p.reliable = p.group.get_player_by_id(1).reliable p.promise = p.group.get_player_by_id(1).promise_TG else: p.reliable_TG = p.group.get_player_by_id(2).reliable p.reliable = p.group.get_player_by_id(2).reliable p.promise = p.promise_TG class Part1_end(Page): def is_displayed(self): return self.subsession.round_number == 1 and self.participant.vars['time'] == 0 #timeout_seconds = 20 timer_text = 'Time remaining on this page:' def get_timeout_seconds(self): if self.participant.vars.get('is_dropout'): return 1 # instant timeout, 0 second else: return 20 class MGMatchingWaitPage(WaitPage): def is_displayed(self): return self.subsession.round_number == 1 and self.participant.vars['time'] == 0 title_text = "Waiting for other participants." body_text = "Pay attention to this screen: The timer for the next page could start any second. If you decide to withdraw from the study now, you will NOT receive your bonus payment." def after_all_players_arrive(self): for p in self.group.get_players(): if p.id_in_group == 1: p.group_MG = 1 p.group_MG_id = 1 elif p.id_in_group == 2: p.group_MG = 2 p.group_MG_id = 1 elif p.id_in_group == 3: p.group_MG = 2 p.group_MG_id = 2 elif p.id_in_group == 4: p.group_MG = 2 p.group_MG_id = 3 elif p.id_in_group == 5: p.group_MG = 1 p.group_MG_id = 2 else: p.group_MG = 1 p.group_MG_id = 3 for p in self.group.get_players(): ##Payoff trust game pay_TG = 0 if p.in_round(1).role_TG == "A": if p.in_round(1).enter == 0: pay_TG += Constants.pay_orange if p.in_round(1).enter == 1: if p.in_round(1).roll == 0: pay_TG += Constants.pay_yellow_A if p.in_round(1).roll == 1: if p.in_round(1).die == 6: pay_TG += Constants.pay_purple_6_A else: pay_TG += Constants.pay_purple_A if p.in_round(1).role_TG == "B": if p.in_round(1).decisive_A_enter == 0: pay_TG += Constants.pay_orange if p.in_round(1).decisive_A_enter == 1: if p.in_round(1).roll == 0: pay_TG += Constants.pay_yellow_B if p.in_round(1).roll == 1: pay_TG += Constants.pay_purple_B p.pay_TG = pay_TG / 100 class Part2_Intro1(Page): def is_displayed(self): return self.subsession.round_number == 1 and self.participant.vars['time'] == 0 #timeout_seconds = 160 timer_text = 'Time remaining on this page:' def get_timeout_seconds(self): if self.participant.vars.get('is_dropout'): return 1 # instant timeout, 0 second else: return 160 class Part2_Intro2(Page): def is_displayed(self): return self.subsession.round_number == 1 and self.participant.vars['time'] == 0 #timeout_seconds = 70 timer_text = 'Time remaining on this page:' def get_timeout_seconds(self): if self.participant.vars.get('is_dropout'): return 1 # instant timeout, 0 second else: return 70 class Part2_Intro3(Page): def is_displayed(self): return self.subsession.round_number == 1 and self.participant.vars['time'] == 0 #timeout_seconds = 60 timer_text = 'Time remaining on this page:' def vars_for_template(self): return { 'role': self.player.role_TG} def get_timeout_seconds(self): if self.participant.vars.get('is_dropout'): return 1 # instant timeout, 0 second else: return 60 class Part2_Intro4(Page): def is_displayed(self): return self.subsession.round_number == 1 and self.participant.vars['time'] == 0 #timeout_seconds = 60 timer_text = 'Time remaining on this page:' def vars_for_template(self): return { 'role': self.player.role_TG, 'group_id': self.player.group_MG_id, 'group_MG': self.player.group_MG, } # def vars_for_template(self): # return { # 'role': self.player.role_TG, # 'group_id': self.player.group_MG_id, # 'promise': 1 # } def get_timeout_seconds(self): if self.participant.vars.get('is_dropout'): return 1 # instant timeout, 0 second else: return 60 class belief(Page): def is_displayed(self): return self.player.in_round(1).role_TG == "A" and self.subsession.round_number == 1 form_model = 'player' form_fields = ['belief'] timer_text = 'Time remaining on this page:' def before_next_page(self): if self.timeout_happened: self.player.failed_belief = 1 self.player.is_dropout = 1 self.player.participant.vars['is_dropout'] = True if self.player.reliable == 1: qsr = ((self.player.belief)**2)/100 else: qsr = ((self.player.belief - 100)**2)/100 self.player.qsr = qsr def get_timeout_seconds(self): if self.participant.vars.get('is_dropout'): return 1 # instant timeout, 0 second else: return 120 class Part2_quizz(Page): def is_displayed(self): return self.subsession.round_number == 1 and self.participant.vars['time'] == 0 #timeout_seconds = 150 timer_text = 'Time remaining on this page:' form_model = 'player' form_fields = ['box_Part2_quizz'] def before_next_page(self): if self.timeout_happened: self.player.failed_quizz2 = 1 def get_timeout_seconds(self): if self.participant.vars.get('is_dropout'): return 1 # instant timeout, 0 second else: return 240 class Intention_MG(Page): def is_displayed(self): return self.participant.vars['time'] == 0 #timeout_seconds = 50 timer_text = 'Time remaining on this page:' form_model = 'player' form_fields = ['intent', "box_intention_MG"] def get_timeout_seconds(self): if self.round_number == 1: timer = 120 else: timer = 60 if self.participant.vars.get('is_dropout'): return 1 # instant timeout, 0 second else: return timer def vars_for_template(self): return { 'current_round': self.round_number, 'nb_round': Constants.num_rounds, 'role': self.player.in_round(1).role_TG, 'group_id': self.player.in_round(1).group_MG_id, } def before_next_page(self): pre_round = self.round_number - 1 if self.timeout_happened: self.player.failed_intent = 1 self.player.is_dropout = True self.player.participant.vars['is_dropout'] = True if self.round_number == 1: self.player.intent = 20 if self.round_number > 1: self.player.intent = self.player.in_round(pre_round).intent if self.round_number > 1: self.player.group_MG = self.player.in_round(pre_round).group_MG class IntentionWaitPage(WaitPage): def is_displayed(self): return self.participant.vars['time'] == 0 title_text = "Waiting for the other group members." body_text = "Pay attention to this screen: The timer for the next page could start any second. If you decide to withdraw from the study now, you will NOT receive your bonus payment." def after_all_players_arrive(self): for p in self.group.get_players(): if p.in_round(1).group_MG == 1: if p.in_round(1).group_MG_id == 1: p.intent_p1 = p.intent p.intent_p2 = self.group.get_player_by_id(5).intent p.intent_p3 = self.group.get_player_by_id(6).intent if p.in_round(1).group_MG_id == 2: p.intent_p1 = self.group.get_player_by_id(1).intent p.intent_p2 = p.intent p.intent_p3 = self.group.get_player_by_id(6).intent if p.in_round(1).group_MG_id == 3: p.intent_p1 = self.group.get_player_by_id(1).intent p.intent_p2 = self.group.get_player_by_id(5).intent p.intent_p3 = p.intent elif p.in_round(1).group_MG == 2: if p.in_round(1).group_MG_id == 1: p.intent_p1 = p.intent p.intent_p2 = self.group.get_player_by_id(3).intent p.intent_p3 = self.group.get_player_by_id(4).intent if p.in_round(1).group_MG_id == 2: p.intent_p1 = self.group.get_player_by_id(2).intent p.intent_p2 = p.intent p.intent_p3 = self.group.get_player_by_id(4).intent if p.in_round(1).group_MG_id == 3: p.intent_p1 = self.group.get_player_by_id(2).intent p.intent_p2 = self.group.get_player_by_id(3).intent p.intent_p3 = p.intent class Info_MG(Page): def is_displayed(self): return self.participant.vars['time'] == 0 #timeout_seconds = 30 timer_text = 'Time remaining on this page:' def get_timeout_seconds(self): if self.participant.vars.get('is_dropout'): return 1 # instant timeout, 0 second else: return 30 def vars_for_template(self): return { 'role': self.player.in_round(1).role_TG, 'group_id': self.player.in_round(1).group_MG_id, 'intent': self.player.intent, 'intent_p2': self.player.intent_p2, 'intent_p3': self.player.intent_p3, 'intent_p1': self.player.intent_p1, 'current_round': self.round_number, 'nb_round': Constants.num_rounds, } class Decision_MG(Page): def is_displayed(self): return self.participant.vars['time'] == 0 #timeout_seconds = 40 timer_text = 'Time remaining on this page:' form_model = 'player' form_fields = ['take', 'box_decision_MG'] def get_timeout_seconds(self): if self.round_number == 1: timer = 90 else: timer = 60 if self.participant.vars.get('is_dropout'): return 1 # instant timeout, 0 second else: return timer def vars_for_template(self): return { 'role': self.player.in_round(1).role_TG, 'group_id': self.player.in_round(1).group_MG_id, 'intent': self.player.intent, 'intent_p2': self.player.intent_p2, 'intent_p3': self.player.intent_p3, 'intent_p1': self.player.intent_p1, 'current_round': self.round_number, 'nb_round': Constants.num_rounds, } def before_next_page(self): pre_round = self.round_number - 1 if self.timeout_happened: self.player.failed_take = 1 self.player.is_dropout = True self.player.participant.vars['is_dropout'] = True if self.round_number == 1: self.player.take = 20 if self.round_number > 1: self.player.take = self.player.in_round(pre_round).take class MGWaitPage(WaitPage): def is_displayed(self): return self.participant.vars['time'] == 0 title_text = "Waiting for the other group members." body_text = "Pay attention to this screen: The timer for the next page could start any second. If you decide to withdraw from the study now, you will NOT receive your bonus payment." def after_all_players_arrive(self): for p in self.group.get_players(): if p.in_round(1).group_MG == 1: p.left = 60 - p.group.get_player_by_id(1).take - p.group.get_player_by_id(5).take - p.group.get_player_by_id(6).take if p.in_round(1).group_MG == 2: p.left = 60 - p.group.get_player_by_id(2).take - p.group.get_player_by_id(3).take - p.group.get_player_by_id(4).take p.current_pay = p.take*10 + p.left*5 for p in self.group.get_players(): if p.in_round(1).group_MG == 1: if p.in_round(1).group_MG_id == 1: p.take_p1 = p.take p.take_p2 = self.group.get_player_by_id(5).take p.take_p3 = self.group.get_player_by_id(6).take p.current_pay_p1 = p.current_pay p.current_pay_p2 = self.group.get_player_by_id(5).current_pay p.current_pay_p3 = self.group.get_player_by_id(6).current_pay if p.in_round(1).group_MG_id == 2: p.take_p1 = self.group.get_player_by_id(1).take p.take_p2 = p.take p.take_p3 = self.group.get_player_by_id(6).take p.current_pay_p1 = self.group.get_player_by_id(1).current_pay p.current_pay_p2 = p.current_pay p.current_pay_p3 = self.group.get_player_by_id(6).current_pay if p.in_round(1).group_MG_id == 3: p.take_p1 = self.group.get_player_by_id(1).take p.take_p2 = self.group.get_player_by_id(5).take p.take_p3 = p.take p.current_pay_p1 = self.group.get_player_by_id(1).current_pay p.current_pay_p2 = self.group.get_player_by_id(5).current_pay p.current_pay_p3 = p.current_pay elif p.in_round(1).group_MG == 2: if p.in_round(1).group_MG_id == 1: p.take_p1 = p.take p.take_p2 = self.group.get_player_by_id(3).take p.take_p3 = self.group.get_player_by_id(4).take p.current_pay_p1 = p.current_pay p.current_pay_p2 = self.group.get_player_by_id(3).current_pay p.current_pay_p3 = self.group.get_player_by_id(4).current_pay if p.in_round(1).group_MG_id == 2: p.take_p1 = self.group.get_player_by_id(2).take p.take_p2 = p.take p.take_p3 = self.group.get_player_by_id(4).take p.current_pay_p1 = self.group.get_player_by_id(2).current_pay p.current_pay_p2 = p.current_pay p.current_pay_p3 = self.group.get_player_by_id(4).current_pay if p.in_round(1).group_MG_id == 3: p.take_p1 = self.group.get_player_by_id(2).take p.take_p2 = self.group.get_player_by_id(3).take p.take_p3 = p.take p.current_pay_p1 = self.group.get_player_by_id(2).current_pay p.current_pay_p2 = self.group.get_player_by_id(3).current_pay p.current_pay_p3 = p.current_pay class Feedback_MG(Page): def is_displayed(self): return self.participant.vars['time'] == 0 #timeout_seconds = 60 timer_text = 'Time remaining on this page:' def get_timeout_seconds(self): if self.participant.vars.get('is_dropout'): return 1 # instant timeout, 0 second else: return 60 def vars_for_template(self): return { 'role': self.player.in_round(1).role_TG, 'group_id': self.player.in_round(1).group_MG_id, 'intent': self.player.intent, 'intent_p2': self.player.intent_p2, 'intent_p3': self.player.intent_p3, 'intent_p1': self.player.intent_p1, 'take': self.player.take, 'take_p1': self.player.take_p1, 'take_p2': self.player.take_p2, 'take_p3': self.player.take_p3, 'current_pay': self.player.current_pay, 'current_pay_p1': self.player.current_pay_p1, 'current_pay_p2': self.player.current_pay_p2, 'current_pay_p3': self.player.current_pay_p3, 'current_round': self.round_number, 'nb_round': Constants.num_rounds, } class ResultsWaitPage(WaitPage): title_text = "Waiting for the other group members." body_text = "Pay attention to this screen: The timer for the next page could start any second. If you decide to withdraw from the study now, you will NOT receive your bonus payment." def is_displayed(self): return self.subsession.round_number == Constants.num_rounds and self.participant.vars['time'] == 0 def after_all_players_arrive(self): for p in self.group.get_players(): code = random.randint(10000000, 99999999) p.code = code ### Payoff Belief ### lucky_number = random.uniform(0, 100) p.lucky_number = lucky_number if lucky_number < p.in_round(1).qsr: pay_qsr = 0.2 elif lucky_number > p.in_round(1).qsr: pay_qsr = 0 else: rand = random.randint(1, 2) if rand == 1: pay_qsr = 0.2 else: pay_qsr = 0 p.pay_qsr = pay_qsr ### Payoff Maintenance game ### rand_round = random.randint(1, 5) #rand_round = random.randint(1, 2) p.rand_round = rand_round pay_MG = p.in_round(rand_round).current_pay/100 p.pay_MG = pay_MG ### Payoff Trust game ### pay_TG = p.in_round(1).pay_TG p.pay_TG = pay_TG p.total_pay = Constants.participation_fee + pay_TG + pay_MG + pay_qsr if p.is_dropout is True: p.payoff = 0 else: p.payoff = pay_TG + pay_MG + pay_qsr class Demographics(Page): def is_displayed(self): return self.subsession.round_number == Constants.num_rounds and self.participant.vars['time'] == 0 and self.participant.vars['is_dropout'] is False form_model = 'player' form_fields = ['q_english', 'q_age', 'q_gender', 'q_risk', 'q_clarity', 'q_check', 'q_other'] class Result(Page): def is_displayed(self): return self.subsession.round_number == Constants.num_rounds and self.participant.vars['time'] == 0 and self.participant.vars['is_dropout'] is False def vars_for_template(self): return { 'role': self.player.in_round(1).role_TG, 'total_pay': round(self.player.total_pay, 2), 'show_up': Constants.participation_fee, 'pay_qsr': self.player.pay_qsr, 'pay_TG': self.player.pay_TG, 'pay_MG': self.player.pay_MG, 'decision_TG_decisive_A': self.player.in_round(1).decisive_A_enter, 'decision_TG_A': self.player.in_round(1).enter, 'roll': self.player.in_round(1).roll, 'die': self.player.in_round(1).die, 'round': self.player.rand_round, 'id_MG': self.player.in_round(1).group_MG_id, 'decision_MG': self.player.in_round(self.player.rand_round).take, 'decision_MG_p1': self.player.in_round(self.player.rand_round).take_p1, 'decision_MG_p2': self.player.in_round(self.player.rand_round).take_p2, 'decision_MG_p3': self.player.in_round(self.player.rand_round).take_p3, 'code': self.player.code } page_sequence = [ StartWaitPage, MatchingFailWaitPage, MatchingFail, TGMatchingWaitPage, GIntro3, Part1_intro1, Part1_intro2, Part1_intro3, Part1_intro4, Part1_quizzA, Part1_quizzB, Promise, PromiseWaitPage, DecisionA_TG, DecisionB_TG, DieB_TG, TGWaitPage, Part1_end, MGMatchingWaitPage, Part2_Intro1, Part2_Intro2, Part2_Intro3, Part2_quizz, Part2_Intro4, belief, Intention_MG, IntentionWaitPage, Info_MG, Decision_MG, MGWaitPage, Feedback_MG, ResultsWaitPage, Demographics, Result, ]