from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range, ) import datetime author = 'Your name here' doc = """ Your app description """ class Constants(BaseConstants): name_in_url = 'baseline' players_per_group = 4 num_rounds = 8 pie = [23, 20, 17, 14, 11, 8, 5, 2] start_money = 23 participation_fee = 3 round_loss = 3 class Subsession(BaseSubsession): def creating_session(self): for player in self.get_players(): player.participant.vars['id'] = player.id_in_group player.treatment = self.session.config['treat'] # 0=control,1=voice,2=comm if player.id_in_group == 1: player.color = "Orange Player" if player.id_in_group == 2: player.color = "Blue Player" if player.id_in_group == 3: player.color = "Yellow Player" if player.id_in_subsession == 1 or player.id_in_subsession == 6 or player.id_in_subsession == 11: player.participant.vars["orsee_gender"] = "female" player.orsee = "female" else: player.participant.vars["orsee_gender"] = "male" player.orsee = "male" for group in self.get_groups(): if group.id_in_subsession == 1: group.type = "FMM" if group.id_in_subsession == 2: group.type = "MFM" if group.id_in_subsession == 3: group.type = "MMF" if self.round_number == 1: for player in self.get_players(): player.participant.vars['agreed'] = False class Group(BaseGroup): type = models.StringField() bor_request = models.StringField(initial="Start: ") bor_request_hist = models.StringField(initial="") room_current = models.StringField(initial="closed") agreement = models.BooleanField(initial=False) match12 = models.StringField(initial="No") match13 = models.StringField(initial="No") match23 = models.StringField(initial="No") current1_1 = models.IntegerField(initial=0) current1_2 = models.IntegerField(initial=0) current1_3 = models.IntegerField(initial=0) history1 = models.StringField(initial="") current2_1 = models.IntegerField(initial=0) current2_2 = models.IntegerField(initial=0) current2_3 = models.IntegerField(initial=0) history2 = models.StringField(initial="") current3_1 = models.IntegerField(initial=0) current3_2 = models.IntegerField(initial=0) current3_3 = models.IntegerField(initial=0) history3 = models.StringField(initial="") def set_agreement(self): self.get_player_by_id(4).final_share = 0 p1 = self.get_player_by_id(1) p2 = self.get_player_by_id(2) p3 = self.get_player_by_id(3) if self.current1_1 == self.current2_1 and self.current1_2 == self.current2_2 and self.current1_3 == self.current2_3 and ( self.current1_1 + self.current1_2 + self.current1_3) > 0: self.agreement = True p1.final_share = self.current1_1 p2.final_share = self.current1_2 p3.final_share = self.current1_3 if self.current1_1 == self.current3_1 and self.current1_2 == self.current3_2 and self.current1_3 == self.current3_3 and ( self.current1_1 + self.current1_2 + self.current1_3) > 0: self.agreement = True p1.final_share = self.current2_1 p2.final_share = self.current2_2 p3.final_share = self.current2_3 if self.current3_1 == self.current2_1 and self.current3_2 == self.current2_2 and self.current3_3 == self.current2_3 and ( self.current2_1 + self.current2_2 + self.current2_3) > 0: self.agreement = True p1.final_share = self.current3_1 p2.final_share = self.current3_2 p3.final_share = self.current3_3 class Player(BasePlayer): treatment = models.IntegerField() color = models.StringField() orsee = models.StringField() password = models.StringField(label="Password:") def password_error_message(self, value): print('value is', value) if value != 'check': return 'Please wait for the experimenter to provide the password.' final_share = models.IntegerField(initial=0) def live_offers(self, data): if data['interaction'] == 2: self.group.bor_request += data['text'] + "; " list_requests = self.group.bor_request self.group.bor_request_hist += data['text'] + "(" + str(datetime.datetime.now()) + ")" + ";" response = { 'type': 2, 'list_requests': list_requests, } return {0: response} if data['interaction'] == 3: if data['open_bor'] == 1: self.group.bor_request_hist += "opened" + "(" + str(datetime.datetime.now()) + ")" + ";" self.group.room_current = "open" self.group.bor_request = "Reset: " reveal = 0 else: self.group.bor_request_hist += "closed" + "(" + str(datetime.datetime.now()) + ")" + ";" self.group.room_current = "closed" reveal = 1 response = { 'type': 3, 'reveal': reveal, } return {0: response} if data['interaction'] == 1: answer1 = data['current1'] answer2 = data['current2'] answer3 = data['current3'] player_id = data['player_id'] #print("I got" + str(answer1) + "from" + str(player_id)) if player_id == 1: self.group.current1_1 = answer1 self.group.current1_2 = answer2 self.group.current1_3 = answer3 self.group.history1 += str(answer1) + "/" + str(answer2) + "/" + str(answer3) + "("+str(datetime.datetime.now())+")" + ";" if player_id == 2: self.group.current2_1 = answer1 self.group.current2_2 = answer2 self.group.current2_3 = answer3 self.group.history2 += str(answer1) + "/" + str(answer2) + "/" + str(answer3) + "("+str(datetime.datetime.now())+")" + ";" if player_id == 3: self.group.current3_1 = answer1 self.group.current3_2 = answer2 self.group.current3_3 = answer3 self.group.history3 += str(answer1) + "/" + str(answer2) + "/" + str(answer3) + "("+str(datetime.datetime.now())+")" + ";" if self.group.current1_1 == self.group.current2_1 and self.group.current1_2 == self.group.current2_2 and self.group.current1_3 == self.group.current2_3 and (self.group.current1_1 + self.group.current1_2 + self.group.current1_3) > 0: smatch12 = 1 self.group.match12 = "Yes" else: smatch12 = 0 self.group.match12 = "No" if self.group.current1_1 == self.group.current3_1 and self.group.current1_2 == self.group.current3_2 and self.group.current1_3 == self.group.current3_3 and (self.group.current1_1 + self.group.current1_2 + self.group.current1_3) > 0: smatch13 = 1 self.group.match13 = "Yes" else: smatch13 = 0 self.group.match13 = "No" if self.group.current3_1 == self.group.current2_1 and self.group.current3_2 == self.group.current2_2 and self.group.current3_3 == self.group.current2_3 and (self.group.current2_1 + self.group.current2_2 + self.group.current2_3) > 0: smatch23 = 1 self.group.match23 = "Yes" else: smatch23 = 0 self.group.match23 = "No" response = { 'type': 1, 'number': player_id, 'response1': answer1, 'response2': answer2, 'response3': answer3, 'match12': smatch12, 'match13': smatch13, 'match23': smatch23, } return {0: response}