コード例 #1
0
 def putRaidHelpList(self, do_execute=True, limit=None, offset=0):
     """救援依頼一覧を埋め込む.
     """
     limit = limit or Defines.RAIDHELP_LIST_MAXLENGTH
     
     v_player = self.getViewerPlayer()
     model_mgr = self.getModelMgr()
     
     raidhelpidlist = BackendApi.get_raidhelpidlist(model_mgr, v_player.id, limit=limit, offset=offset, using=settings.DB_READONLY)
     raidhelplist = BackendApi.get_raidhelplist(model_mgr, raidhelpidlist, using=settings.DB_READONLY)
     if len(raidhelplist) == 0:
         self.html_param['raidhelplist'] = []
         return None
     
     raididlist = []
     oid_set = set()
     for raidhelp in raidhelplist:
         raididlist.append(raidhelp.raidid)
         oid_set.add(raidhelp.fromid)
     
     o_playerlist = BackendApi.get_players(self, oid_set, [], using=settings.DB_READONLY, model_mgr=model_mgr)
     o_playerdict = dict([(o_player.id, o_player) for o_player in o_playerlist])
     persons = BackendApi.get_dmmplayers(self, o_playerlist, using=settings.DB_READONLY, do_execute=do_execute)
     
     raidid_items = dict([(raidhelp.raidid, raidhelp) for raidhelp in raidhelplist])
     raididlist = raidid_items.keys()
     happeningraidset_dict = dict([(model.id, model) for model in  BackendApi.get_happeningraidset_list(model_mgr, raididlist, using=settings.DB_READONLY) if model.happening.happening.is_active()])
     leaders = BackendApi.get_leaders(oid_set, model_mgr, using=settings.DB_READONLY)
     
     endidlist = list(set(raididlist) - set(happeningraidset_dict.keys()))
     if endidlist:
         BackendApi.remove_raidhelpid_list([raidid_items[endid] for endid in endidlist])
         self.addlog(u'remove_raidhelpid_list:%s' % endidlist)
     
     def cb():
         now = OSAUtil.get_now()
         
         obj_raidlist = []
         for raidhelp in raidhelplist:
             if happeningraidset_dict.has_key(raidhelp.raidid):
                 happeningraidset = happeningraidset_dict[raidhelp.raidid]
                 happeningset = happeningraidset.happening
                 raidboss = happeningraidset.raidboss
                 
                 if happeningset.happening.event:
                     eventraidmaster = BackendApi.get_eventraidmaster_by_modeleventvalue(model_mgr, happeningset.happening.event, raidboss.master.id, using=settings.DB_READONLY)
                     raidboss.setEventRaidMaster(eventraidmaster)
                 
                 o_person = None
                 o_player = o_playerdict.get(raidhelp.fromid)
                 if o_player:
                     o_person = persons.get(o_player.dmmid)
                 obj_raid = Objects.raid(self, raidboss, o_person, leaders.get(raidhelp.fromid))
                 obj_raid['timelimit'] = Objects.timelimit(happeningset.happening.etime, now)
                 obj_raidlist.append(obj_raid)
         
         self.html_param['raidhelplist'] = obj_raidlist
     
     if do_execute:
         cb()
         return None
     else:
         return cb
コード例 #2
0
    def check(self):
        model_mgr = ModelRequestMgr()

        # 確認キー.
        playerrequest = BackendApi.get_model(model_mgr, PlayerRequest,
                                             self.__player0.id)
        if self.__player0.req_confirmkey == playerrequest.req_confirmkey:
            raise AppTestError(u'確認キーが更新されていない')
        elif self.__player0.req_confirmkey != playerrequest.req_alreadykey:
            raise AppTestError(u'確認済みのキーが更新されていない')

        # ハプニング.
        happeningset = BackendApi.get_happening(model_mgr, self.__raid.id)
        if happeningset.happening.state != Defines.HappeningState.END:
            raise AppTestError(u'状態が正しくない')

        # ダメージレコード.
        raidboss = BackendApi.get_raid(model_mgr, self.__raid.id)
        record = raidboss.getDamageRecord(self.__player0.id)
        if record.damage == 0 or record.damage_cnt == 0:
            raise AppTestError(u'ダメージが記録されていない')

        # ダメージ.
        record_pre = self.__raid.getDamageRecord(self.__player0.id)
        if (self.__raid.raid.hp -
            (record.damage - record_pre.damage)) != raidboss.raid.hp:
            raise AppTestError(u'ダメージが正しくない')

        # 秘宝.
        playertreasure0 = PlayerTreasure.getByKey(self.__player0.id)
        if playertreasure0.cabaretking != self.__raid.get_cabaretking():
            raise AppTestError(u'キャバ王の秘宝が付与されていない')

        # 報酬.
        present_num0 = BackendApi.get_present_num(self.__player0.id)
        if self.__present_num0 == present_num0:
            raise AppTestError(u'発見者に報酬が付与されていない')

        # 短冊.
        def check_tanzaku_num(tanzaku_data_pre, is_lovetime):
            uid = tanzaku_data_pre.uid
            ownername = u'発見者' if self.__player0.id == uid else '救援者'

            tanzaku_data_post = BackendApi.get_scoutevent_tanzakucastdata(
                model_mgr, uid, self.__eventmaster.id)
            if tanzaku_data_post is None:
                raise AppTestError(u'{}の短冊情報が消えている'.format(ownername))

            sep = '' if self.__player0.id == uid else '_help'
            tanzakuup = self.__eventmaster.lovetime_tanzakuup if is_lovetime else 0

            tanzaku_number = getattr(self.__scouteventraidmaster,
                                     'tanzaku{}_number'.format(sep))
            tanzaku_randmin = getattr(
                self.__scouteventraidmaster,
                'tanzaku{}_randmin'.format(sep)) * (100 + tanzakuup) / 100
            tanzaku_randmax = getattr(
                self.__scouteventraidmaster,
                'tanzaku{}_randmax'.format(sep)) * (100 + tanzakuup) / 100

            tanzaku_diff = tanzaku_data_post.get_tanzaku(
                tanzaku_number) - tanzaku_data_pre.get_tanzaku(tanzaku_number)
            if not (tanzaku_randmin <= tanzaku_diff <= tanzaku_randmax):
                raise AppTestError(u'{}の短冊の増加量が想定外です'.format(ownername))

        check_tanzaku_num(self.__tanzaku_data0,
                          self.__scoutevent_playdata.is_lovetime())

        if Defines.RAID_PRIZE_DISTRIBUTION_OUTSIDE:
            queue = RaidPrizeDistributeQueue.getValues(
                filters={'raidid': self.__raid.id})
            if queue is None:
                raise AppTestError(u'報酬配布用のキューが作成されていない')

            def write(queue, happening, raidboss, help_prizelist):
                model_mgr = ModelRequestMgr()
                BackendApi.tr_distribute_raid(model_mgr, queue, happening,
                                              raidboss, help_prizelist)
                model_mgr.write_all()
                model_mgr.write_end()

            help_prizelist = BackendApi.get_prizelist(
                model_mgr, raidboss.master.helpprizes)
            write(queue,
                  BackendApi.get_happening(model_mgr, raidboss.id).happening,
                  raidboss, help_prizelist)

        # 救援者の報酬を確認.
        present_num1 = BackendApi.get_present_num(self.__player1.id)
        if self.__present_num1 == present_num1:
            raise AppTestError(u'救援者に報酬が付与されていない')

        playertreasure1 = PlayerTreasure.getByKey(self.__player1.id)
        if 0 < self.__raid.get_demiworld(
        ) and playertreasure1.demiworld != self.__raid.get_demiworld():
            raise AppTestError(u'裏社会の秘宝が付与されていない')

        # 短冊.
        check_tanzaku_num(self.__tanzaku_data1, False)
コード例 #3
0
ファイル: result.py プロジェクト: hitandaway100/caba
    def process(self):
        v_player = self.getViewerPlayer()
        model_mgr = self.getModelMgr()

        # 合成結果.
        compositiondata = BackendApi.get_compositiondata(
            model_mgr, v_player.id, using=settings.DB_READONLY)

        # ベースカード.
        basecardset = BackendApi.get_cards([compositiondata.result_baseid],
                                           model_mgr,
                                           using=settings.DB_READONLY)
        if not basecardset or basecardset[0].card.mid != compositiondata.mid:
            if settings_sub.IS_LOCAL:
                raise CabaretError(u'教育したキャストが見つかりません.')
            url = UrlMaker.composition()
            self.appRedirect(self.makeAppLinkUrlRedirect(url))
            return
        basecardset = basecardset[0]

        self.html_param['basecard_post'] = Objects.card(self, basecardset)
        compositiondata.set_to_card(basecardset.card)
        self.html_param['basecard_pre'] = Objects.card(self, basecardset)

        # 素材カード.
        materialcardsetlist = BackendApi.get_cards(
            compositiondata.result_materialidlist,
            model_mgr,
            using=settings.DB_READONLY,
            deleted=True)
        self.html_param['cardlist'] = [
            Objects.card(self, cardset) for cardset in materialcardsetlist
        ]

        # 経験値とレベル.
        self.html_param['exp'] = compositiondata.result_exp
        self.html_param['levelup'] = compositiondata.result_lvup

        # お金.
        self.html_param['cost'] = compositiondata.result_cost_gold

        # スキル.
        self.html_param['skilllevelup'] = compositiondata.result_skilllvup

        # 成功 or 大成功.
        self.html_param[
            'is_great_success'] = compositiondata.result_flag_great_success

        # 上昇値.
        level_pre = compositiondata.result_lvpre
        level_add = compositiondata.result_lvup
        power_add = 0
        if 0 < level_add:
            basemaster = basecardset.master
            pow_pre = CardUtil.calcPower(basemaster.gtype,
                                         basemaster.basepower,
                                         basemaster.maxpower, level_pre,
                                         basemaster.maxlevel,
                                         basecardset.card.takeover)
            pow_post = CardUtil.calcPower(basemaster.gtype,
                                          basemaster.basepower,
                                          basemaster.maxpower,
                                          level_pre + level_add,
                                          basemaster.maxlevel,
                                          basecardset.card.takeover)
            power_add = pow_post - pow_pre
        self.html_param['power_add'] = power_add
        self.html_param['level_add'] = level_add
        self.html_param['skilllevel_add'] = compositiondata.result_skilllvup

        # 続けて合成のURL.
        url = UrlMaker.compositionmaterial(basecardset.id)
        self.html_param['url_continue'] = self.makeAppLinkUrl(url)

        self.writeAppHtml('composition/complete')
コード例 #4
0
    def handle(self, *args, **options):

        print '================================'
        print 'reload_gachaplayerconsumepoint'
        print '================================'

        model_mgr = ModelRequestMgr()

        # メンテモードでやって欲しい.
        appconfig = BackendApi.get_appconfig(model_mgr, using=backup_db)
        if not settings_sub.IS_DEV and not appconfig.is_maintenance():
            print u'メンテナンスモードにしてください'
            return

        # ユーザIDの最大値.
        uid_max = PlayerHappening.max_value('id', 0, using=backup_db)

        qs_field = "iid,SUM(price*inum)"
        qs_where = "WHERE uid=:1 and state=%s group by iid" % PaymentData.Status.COMPLETED

        for uid in xrange(1, uid_max + 1):
            # 課金レコードを集計.
            gacha_point_table = dict([(int(iid), int(point))
                                      for iid, point in GachaPaymentEntry.sql(
                                          qs_where, uid).fetch(qs_field)])
            shop_point_table = dict([(int(iid), int(point))
                                     for iid, point in ShopPaymentEntry.sql(
                                         qs_where, uid).fetch(qs_field)])
            gacha_point = sum(gacha_point_table.values())
            shop_point = sum(shop_point_table.values())
            total = gacha_point + shop_point

            if total < 1:
                print '%s...zero' % uid
                continue
            elif PlayerHappening.getByKey(uid, using=backup_db) is None:
                print '%s...none' % uid
                continue

            # プレイヤーデータに保存.
            def tr(uid, gacha_point_table, total):
                model_mgr = ModelRequestMgr()
                if gacha_point_table:
                    for iid, point in gacha_point_table.items():
                        if point < 1:
                            continue

                        def forUpdateGacha(model, inserted, point):
                            model.point = point

                        model_mgr.add_forupdate_task(
                            GachaConsumePoint,
                            GachaConsumePoint.makeID(uid, iid), forUpdateGacha,
                            point)

                # 生涯課金額.
                def forUpdatePlayerConsumePoint(model, inserted, total):
                    model.point_total = total

                model_mgr.add_forupdate_task(PlayerConsumePoint, uid,
                                             forUpdatePlayerConsumePoint,
                                             total)

                model_mgr.write_all()
                return model_mgr

            db_util.run_in_transaction(tr, uid, gacha_point_table,
                                       total).write_end()

            print '%s...g:%s,s:%s' % (uid, gacha_point, shop_point)

        print '================================'
        print 'all done...'
コード例 #5
0
    def setUp(self):
        model_mgr = ModelRequestMgr()

        # Player.
        self.__player0 = self.create_dummy(DummyType.PLAYER)
        self.__player1 = self.create_dummy(DummyType.PLAYER)

        # 報酬.
        itemmaster = self.create_dummy(DummyType.ITEM_MASTER)
        prize = self.create_dummy(DummyType.PRIZE_MASTER,
                                  gold=100,
                                  gachapt=10,
                                  item=itemmaster)

        # イベントマスター.
        eventmaster = self.create_dummy(DummyType.SCOUT_EVENT_MASTER,
                                        lovetime_tanzakuup=100)
        self.__eventmaster = eventmaster

        # ステージマスター.
        stagemaster = self.create_dummy(DummyType.SCOUT_EVENT_STAGE_MASTER,
                                        eventid=eventmaster.id,
                                        stage=1)
        self.__stagemaster = stagemaster

        # OPを閲覧済みに.
        flagrecord = self.create_dummy(DummyType.SCOUT_EVENT_FLAGS,
                                       self.__player0.id,
                                       self.__eventmaster.id,
                                       OSAUtil.get_now())
        self.__flagrecord = flagrecord

        # 逢引ラブタイム状態にする.
        playdata = self.create_dummy(DummyType.SCOUT_EVENT_PLAY_DATA,
                                     self.__player0.id,
                                     self.__eventmaster.id,
                                     lovetime_etime=OSAUtil.get_now() +
                                     datetime.timedelta(days=1))
        self.__scoutevent_playdata = playdata

        # イベント発生中設定.
        config = BackendApi.get_current_scouteventconfig(model_mgr)
        self.__preconfig_mid = config.mid
        self.__preconfig_starttime = config.starttime
        self.__preconfig_endtime = config.endtime
        now = OSAUtil.get_now()
        BackendApi.update_scouteventconfig(self.__eventmaster.id, now,
                                           now + datetime.timedelta(days=1))

        # レイドマスター.
        raidmaster = self.create_dummy(DummyType.RAID_MASTER,
                                       hp=1,
                                       prizes=[prize.id],
                                       helpprizes=[prize.id],
                                       cabaretking=100,
                                       demiworld=10)
        self.__raidmaster = raidmaster

        # ハプニング.
        happeningmaster = self.create_dummy(DummyType.HAPPENING_MASTER,
                                            raidmaster.id)
        self.__happeningmaster = happeningmaster

        # 短冊とキャストの情報.
        tanzaku_master = self.create_dummy(
            DummyType.SCOUT_EVENT_TANZAKU_CAST_MASTER,
            self.__eventmaster.id,
            0,
            prizes=[prize.id])
        self.__tanzaku_master = tanzaku_master

        # イベント用レイド設定.
        scouteventraidmaster = self.create_dummy(
            DummyType.SCOUT_EVENT_RAID_MASTER,
            self.__eventmaster.id,
            self.__raidmaster.id,
            tanzaku_number=tanzaku_master.number,
            tanzaku_randmin=10,
            tanzaku_randmax=10,
            tanzaku_help_number=tanzaku_master.number,
            tanzaku_help_randmin=3,
            tanzaku_help_randmax=3)
        self.__scouteventraidmaster = scouteventraidmaster

        # 短冊所持情報.
        tanzaku_nums = {tanzaku_master.number: 0}
        tanzaku_data = self.create_dummy(
            DummyType.SCOUT_EVENT_TANZAKU_CAST_DATA,
            self.__player1.id,
            self.__eventmaster.id,
            tanzaku_nums=tanzaku_nums)
        self.__tanzaku_data1 = tanzaku_data
        tanzaku_data = self.create_dummy(
            DummyType.SCOUT_EVENT_TANZAKU_CAST_DATA,
            self.__player0.id,
            self.__eventmaster.id,
            tanzaku_nums=tanzaku_nums)
        self.__tanzaku_data0 = tanzaku_data

        # ハプニング情報.
        eventvalue = HappeningUtil.make_scouteventvalue(self.__eventmaster.id)
        happening = self.create_dummy(DummyType.HAPPENING,
                                      self.__player0.id,
                                      self.__happeningmaster.id,
                                      progress=happeningmaster.execution,
                                      eventid=eventvalue)
        self.__happening = happening

        # レイド.
        raidboss = self.create_dummy(DummyType.RAID, self.__player0,
                                     happeningmaster, happening)
        raidboss.addDamageRecord(self.__player0.id, 1)
        raidboss.refrectDamageRecord()
        raidboss.raid.save()
        self.__raid = raidboss

        # 救援.
        def addRequest(v_player, o_player):
            model_mgr = ModelRequestMgr()
            BackendApi.tr_add_friendrequest(model_mgr, v_player, o_player)
            model_mgr.write_all()
            model_mgr.write_end()

        def addFriend(v_player, o_player):
            model_mgr = ModelRequestMgr()
            BackendApi.tr_add_friend(model_mgr, v_player.id, o_player.id)
            model_mgr.write_all()
            model_mgr.write_end()

        addRequest(self.__player0, self.__player1)
        addFriend(self.__player1, self.__player0)

        model_mgr = ModelRequestMgr()
        BackendApi.tr_send_raidhelp(model_mgr, self.__player0.id)
        model_mgr.write_all()
        model_mgr.write_end()

        raidboss.addDamageRecord(self.__player1.id, 1)
        raidboss.refrectDamageRecord()
        raidboss.raid.save()

        self.__player0.gold = 0
        self.__player0.getModel(PlayerGold).save()

        self.__player0.cardlimititem = 100
        self.__player0.getModel(PlayerDeck).save()

        self.__playerhappening = BackendApi.get_playerhappening(
            model_mgr, self.__player0.id)

        self.__present_num0 = BackendApi.get_present_num(self.__player0.id)
        self.__present_num1 = BackendApi.get_present_num(self.__player1.id)
コード例 #6
0
 def setUp(self):
     # DMMID.
     self.__player = self.create_dummy(DummyType.PLAYER)
     self.__player.lbtime = OSAUtil.get_now()
     self.__player.getModel(PlayerLogin).save()
     
     # デッキ.
     deck = Deck(id=self.__player.id)
     cardmaster = self.create_dummy(DummyType.CARD_MASTER)
     deck.leader = self.create_dummy(DummyType.CARD, self.__player, cardmaster).id
     
     for i in xrange(9):
         cardmaster = self.create_dummy(DummyType.CARD_MASTER)
         setattr(deck, 'mamber%d' % i, self.create_dummy(DummyType.CARD, self.__player, cardmaster).id)
     
     deck.save()
     
     # お知らせ.
     for _ in range(5):
         self.create_dummy(DummyType.TOP_BANNER_MASTER)
     
     # イベント発生設定.
     config = BackendApi.get_current_scouteventconfig(ModelRequestMgr())
     self.__preconfig_mid = config.mid
     BackendApi.update_scouteventconfig(0, config.starttime, config.endtime)
     
     # カード.
     table = []
     cardmaster = self.create_dummy(DummyType.CARD_MASTER)
     data = GachaBoxCardData(cardmaster.id, 10000)
     table.append(data.to_data())
     
     # グループ.
     group = self.create_dummy(DummyType.GACHA_GROUP_MASTER, table=table)
     
     # おまけ.
     item = self.create_dummy(DummyType.ITEM_MASTER)
     prize = self.create_dummy(DummyType.PRIZE_MASTER, item=item, itemnum=1)
     bonus = [prize.id]
     
     # ガチャ.
     continuity = 10
     boxdata = GachaBoxGroupData(group.id, 10000, continuity+1)
     box = [boxdata.to_data()]
     self.__gachamaster = self.create_dummy(DummyType.GACHA_MASTER, box=box, bonus=bonus, continuity=continuity, consumetype=Defines.GachaConsumeType.RANKING, consumevalue=10)
     
     # ランキングガチャマスター.
     wholeprizes = {
         'normal' : [(1, bonus),]
     }
     self.__rankingmaster = self.create_dummy(DummyType.RANKING_GACHA_MASTER, self.__gachamaster.boxid, wholeprizes=wholeprizes)
     
     # 達成報酬キュー.
     queue0 = self.create_dummy(DummyType.RANKING_GACHA_WHOLE_PRIZE_QUEUE, self.__rankingmaster.id, point=100, prizes=bonus)
     queue1 = self.create_dummy(DummyType.RANKING_GACHA_WHOLE_PRIZE_QUEUE, self.__rankingmaster.id, point=1000, prizes=bonus)
     self.__queue = queue1
     
     # 初めてプレイした時間.
     self.create_dummy(DummyType.RANKING_GACHA_SCORE, self.__player.id, self.__rankingmaster.id, firstpoint=queue1.point)
     
     # 受け取ったキューのID.
     self.create_dummy(DummyType.RANKING_GACHA_WHOLE_PRIZE_DATA, self.__player.id, queue0.id - 1)
     
     # 全プレ.
     presenteveryone_list = BackendApi.get_presenteveryone_list_formypage(ModelRequestMgr())
     prizeidlist = []
     for presenteveryone in presenteveryone_list:
         prizeidlist.extend(presenteveryone.prizes)
     prizelist = BackendApi.get_prizelist(ModelRequestMgr(), prizeidlist)
     self.__presenteveryone_presentlist = BackendApi.create_present_by_prize(ModelRequestMgr(), 0, prizelist, 0, do_set_save=False)
     
     # ミッション報酬を受け取ってしまう.
     model_mgr = ModelRequestMgr()
     missionplaydata = BackendApi.get_current_panelmission_data(model_mgr, self.__player.id)
     if missionplaydata:
         panel = missionplaydata.mid
         
         # マイページで確認するミッション.
         mission_executer = PanelMissionConditionExecuter()
         
         # 更新確認.
         is_update = BackendApi.check_lead_update_panelmission(model_mgr, self.__player, panel, OSAUtil.get_now(), mission_executer)
         if is_update:
             def write():
                 model_mgr = ModelRequestMgr()
                 if mission_executer.isNeedCheck():
                     BackendApi.tr_complete_panelmission(model_mgr, self.__player.id, mission_executer, OSAUtil.get_now())
                 BackendApi.tr_receive_panelmission(model_mgr, self.__player.id, panel, self.__player.req_confirmkey, OSAUtil.get_now())
                 model_mgr.write_all()
                 model_mgr.write_end()
             write()
     
     self.__present_num = BackendApi.get_present_num(self.__player.id)
コード例 #7
0
    def __test_silhouette(self, scouteventmaster, stagemaster, player, cnt):
        model_mgr = self.getModelMgr()
        silhouette_rate = []

        silhouette_dict = {}
        silhouette_dict['gold'] = {}
        silhouette_dict['silver'] = {}
        silhouette_dict['bronze'] = {}

        playdata = BackendApi.get_event_playdata(model_mgr,
                                                 scouteventmaster.id,
                                                 player.id,
                                                 using=backup_db)

        dropitems = stagemaster.dropitems

        itemselector = ScoutDropItemSelector(player, stagemaster, 0)

        # the rate for each silhouette type
        gold_rate = 0
        silver_rate = 0
        bronze_rate = 0
        total_rate = 0

        # create dictionary that would be sent to the template
        for item in dropitems:
            rate = int(item['rate'])
            silhouette_type = item['silhouette']
            total_rate += rate

            cardid = int(item['master'])

            tmp_dict = {}
            tmp_dict[cardid] = {}
            tmp_dict[cardid]['name'] = model_mgr.get_model(
                CardMasterView, cardid, using=backup_db).name
            tmp_dict[cardid]['occurrences'] = 0
            tmp_dict[cardid]['rate'] = 0
            tmp_dict[cardid]['bonus_rate_s'] = float(item["rate"]) / sum(
                item['rate'] for item in dropitems) * 100

            silhouette_dict[silhouette_type].update(tmp_dict)
            if item['silhouette'] == 'gold':
                gold_rate += rate
            elif item['silhouette'] == 'silver':
                silver_rate += rate
            elif item['silhouette'] == 'bronze':
                bronze_rate += rate

        # execute scout `cnt` times and put save result
        silhouette_list = self.__execute_eventscout(model_mgr, player,
                                                    stagemaster, playdata, cnt,
                                                    itemselector)

        # number of gold, silver and bronze card chosen
        number_of_gold = 0
        number_of_silver = 0
        number_of_bronze = 0

        # 1. populate the dict that would be sent to the template
        # 2. count the number of gold, silver or bronze card chosen
        for item in silhouette_list:
            cardid = int(item.data['card'])
            silhouette_type = item.data['silhouette']

            silhouette_dict[silhouette_type][cardid]['occurrences'] += 1
            silhouette_dict[silhouette_type][cardid]['rate'] = float(
                silhouette_dict[silhouette_type][cardid]
                ['occurrences']) / cnt * 100

            # count the number of gold, silver or bronze card chosen
            if item.data['silhouette'] == 'gold':
                number_of_gold += 1
            elif item.data['silhouette'] == 'silver':
                number_of_silver += 1
            elif item.data['silhouette'] == 'bronze':
                number_of_bronze += 1

        silhouette_rate.append({
            'name':
            'gold (金)',
            'occurrences':
            number_of_gold,
            'rate':
            float(number_of_gold) / cnt * 100,
            'bonus_rate_s':
            float(gold_rate) / total_rate * 100
        })

        silhouette_rate.append({
            'name':
            'silver (銀)',
            'occurrences':
            number_of_silver,
            'rate':
            float(number_of_silver) / cnt * 100,
            'bonus_rate_s':
            float(silver_rate) / total_rate * 100
        })

        silhouette_rate.append({
            'name':
            'bronze (ブロンズ)',
            'occurrences':
            number_of_bronze,
            'rate':
            float(number_of_bronze) / cnt * 100,
            'bonus_rate_s':
            float(bronze_rate) / total_rate * 100
        })

        # key rename
        silhouette_dict['gold (金)'] = silhouette_dict.pop('gold')
        silhouette_dict['silver (銀)'] = silhouette_dict.pop('silver')
        silhouette_dict['bronze (ブロンズ)'] = silhouette_dict.pop('bronze')

        def sortfun(sil_dict):
            return sil_dict[1]['bonus_rate_s'], sil_dict[1]['occurrences']

        self.html_param['silhouette_dict'] = silhouette_dict
        self.html_param['silhouette_rate'] = silhouette_rate
コード例 #8
0
    def procPost(self):
        """パラメータを受け取ってスカウトイベント情報を用意する.
        """
        model_mgr = self.getModelMgr()
        error_msg_list = []
        player = None
        stagemaster = None

        # スカウトイベントのマスターID.
        mid = self.__get_int_value('_mid')
        stgid = self.__get_int_value('_stgid')
        scouteventmaster = BackendApi.get_scouteventmaster(model_mgr,
                                                           mid,
                                                           using=backup_db)

        if scouteventmaster is None:
            error_msg_list.append(u'存在しないスカウトイベントです.%s' % mid)
        else:
            # ステージのマスターID
            if stgid < 1:
                error_msg_list.append(u'ステージIDは自然値で指定してください.')
            else:
                stagemaster = ScoutEventStageMaster.fetchValues(
                    filters={
                        'eventid': scouteventmaster.id,
                        'stage': stgid
                    })
                if not stagemaster:
                    error_msg_list.append(u'存在しないステージマスターです.%s' % stgid)

        # ユーザーID
        uid = self.__get_int_value('_uid')
        if uid < 1:
            error_msg_list.append(u'ユーザーIDは自然値で指定してください.')
        else:
            # プレーヤー
            player = BackendApi.get_player(
                self,
                uid, [Player, PlayerAp, PlayerExp, PlayerFriend],
                using=backup_db)
            if not player:
                error_msg_list.append(u'保存しないユーザーです。%s' % uid)

        # 試験回数.
        cnt = self.__get_int_value('_cnt')
        if cnt < 1:
            error_msg_list.append(u'試験回数は自然数で指定してください.')
            # self.putAlertToHtmlParam(u'試験回数は自然数で指定してください.', AlertCode.ERROR)

        cnt = min(1000000, cnt)

        # set hmtl form values
        self.html_param['cur_scoutevent'] = scouteventmaster
        self.html_param['stgid'] = stgid
        self.html_param['uid'] = uid
        self.html_param['cnt'] = cnt

        if error_msg_list:
            self.putAlertToHtmlParam(u'<br/>'.join(error_msg_list),
                                     AlertCode.ERROR)
            return

        # 試験.
        self.__test_silhouette(scouteventmaster, stagemaster[0], player, cnt)
コード例 #9
0
ファイル: apphandler.py プロジェクト: hitandaway100/caba
 def __tr_buy_timeout(self, uid, paymentId):
     model_mgr = ModelRequestMgr()
     BackendApi.tr_shoptimeout(model_mgr, uid, paymentId)
     model_mgr.write_all()
     return model_mgr
コード例 #10
0
ファイル: apphandler.py プロジェクト: hitandaway100/caba
 def __tr_write_gacha_cancel(self, uid, paymentId):
     model_mgr = ModelRequestMgr()
     BackendApi.tr_gacha_cancel(model_mgr, uid, paymentId)
     model_mgr.write_all()
     return model_mgr