Example #1
0
 def putMaterialHtml(self):
     """素材情報をHTMLに埋め込む.
     """
     obj_material_dict = {}
     
     material_masters = self.getMaterialMasters()
     if material_masters:
         eventmaster = self.getCurrentRaidTicketEvent()
         eventid = eventmaster.id
         
         materialdata = self.getMaterialData()
         for idx, master in material_masters.items():
             num = materialdata.getMaterialNum(eventid, idx)
             obj_material_dict[idx] = Objects.raidevent_material(self, master, num)
     
     self.html_param['raidevent_materials'] = obj_material_dict
     
     return obj_material_dict
Example #2
0
    def procDetail(self, helplog):
        """詳細.
        """
        model_mgr = self.getModelMgr()

        v_player = self.getViewerPlayer()

        # レイド情報.
        raidboss = BackendApi.get_raid(model_mgr,
                                       helplog.raidid,
                                       using=settings.DB_READONLY,
                                       get_instance=True)
        is_owner = v_player.id == raidboss.raid.oid
        if not (is_owner
                or v_player.id in raidboss.getDamageRecordUserIdList()):
            # 閲覧できない.
            self.appRedirect(self.makeAppLinkUrlRedirect(UrlMaker.happening()))
            return

        damagerecord = raidboss.getDamageRecord(v_player.id)

        is_cleared = raidboss.raid.hp == 0
        is_canceled = False

        prizelist = None

        # ハプニング情報.
        happeningset = BackendApi.get_happening(model_mgr,
                                                raidboss.id,
                                                using=settings.DB_READONLY)
        if happeningset is None:
            BackendApi.save_raidlog_idlist(model_mgr,
                                           v_player.id,
                                           using=settings.DB_READONLY)
            url = UrlMaker.raidloglist()
            self.appRedirect(self.makeAppLinkUrlRedirect(url))
            return

        # イベント情報を設定.
        BackendApi.reset_raidboss_eventraidmaster(model_mgr,
                                                  raidboss,
                                                  happeningset.happening.event,
                                                  using=settings.DB_READONLY)

        raideventmaster = None
        excludes = None
        raideventid = HappeningUtil.get_raideventid(
            happeningset.happening.event)
        if raideventid:
            raideventmaster = BackendApi.get_raideventmaster(
                model_mgr, raideventid, using=settings.DB_READONLY)

            destroypoint_info = None

            if is_cleared:
                bonusscore = 0
                if happeningset.happening.oid == v_player.id:
                    specialscore_obj = BackendApi.get_model(
                        model_mgr,
                        RaidEventSpecialBonusScoreLog,
                        raidboss.id,
                        using=settings.DB_READONLY)
                    if isinstance(specialscore_obj,
                                  RaidEventSpecialBonusScoreLog):
                        bonusscore = specialscore_obj.bonusscore
                else:
                    _helpbonusscore = BackendApi.get_raidevent_helpspecialbonusscore(
                        raidboss.id, v_player.id, using=settings.DB_DEFAULT)
                    if isinstance(_helpbonusscore,
                                  RaidEventHelpSpecialBonusScore):
                        bonusscore = _helpbonusscore.bonusscore
                destroypoint_info = BackendApi.make_raidevent_destroypoint_info(
                    model_mgr,
                    v_player.id,
                    raideventmaster,
                    HappeningRaidSet(happeningset, raidboss),
                    bonusscore,
                    using=settings.DB_READONLY)

                # MVP.
                mvp_uidlist = raidboss.getMVPList()
                self.html_param['mvp_uidlist'] = mvp_uidlist

                self.html_param['destroy_time'] = helplog.ctime

            # イベント情報.
            config = BackendApi.get_current_raideventconfig(
                model_mgr, using=settings.DB_READONLY)
            self.html_param['raidevent'] = Objects.raidevent(
                self, raideventmaster, config)

            # シャンパン.
            if 0 < damagerecord.champagne_num_add:
                self.html_param[
                    'champagne_num_pre'] = damagerecord.champagne_num_pre
                self.html_param[
                    'champagne_num_post'] = damagerecord.champagne_num_post
                self.html_param[
                    'champagne_num_add'] = damagerecord.champagne_num_add

            # 素材.
            if 0 < damagerecord.material_num:
                materials = raideventmaster.getMaterialDict()
                material_id = materials.get(
                    raidboss.raideventraidmaster.material)
                if material_id:
                    materialmaster = BackendApi.get_raidevent_materialmaster(
                        model_mgr, material_id, using=settings.DB_READONLY)
                    materialnumdata = BackendApi.get_raidevent_materialdata(
                        model_mgr, v_player.id, using=settings.DB_READONLY)
                    obj = Objects.raidevent_material(
                        self, materialmaster,
                        materialnumdata.getMaterialNum(
                            raideventid,
                            raidboss.raideventraidmaster.material))
                    obj['num_add'] = damagerecord.material_num
                    self.html_param['material'] = obj

            self.html_param['destroypoint_info'] = destroypoint_info
        elif raidboss.scouteventraidmaster:
            scouteventid = raidboss.scouteventraidmaster.eventid
            tanzaku_number = raidboss.get_tanzaku_number(v_player.id)
            tanzakumaster = BackendApi.get_scoutevent_tanzakumaster(
                model_mgr,
                scouteventid,
                tanzaku_number,
                using=settings.DB_READONLY
            ) if tanzaku_number is not None else None

            if tanzakumaster is not None:
                # 短冊.
                self.html_param[
                    'scoutevent_tanzaku'] = Objects.scoutevent_tanzaku(
                        self, tanzakumaster)
                self.html_param[
                    'tanzaku_num_pre'] = damagerecord.tanzaku_num_pre
                self.html_param[
                    'tanzaku_num_post'] = damagerecord.tanzaku_num_post
                self.html_param['tanzaku_num_add'] = damagerecord.tanzaku_num

        if raideventmaster or RaidBoss.RAIDEVENT_PRIZE_UPDATETIME <= happeningset.happening.ctime:
            if is_cleared:
                # 報酬.
                prizelist = []
                if is_owner:
                    # 発見者.
                    if raideventmaster:
                        cabaretking = raidboss.get_cabaretking()
                        if 0 < cabaretking:
                            prizelist.append(
                                PrizeData.create(cabaretking=cabaretking))
                    prizelist.extend(
                        BackendApi.get_prizelist(model_mgr,
                                                 raidboss.master.prizes,
                                                 using=settings.DB_READONLY))
                    prizelist.extend(
                        BackendApi.aggregate_happeningprize(
                            happeningset.happening))
                elif 0 < damagerecord.damage_cnt:
                    # 救援者.
                    if raideventmaster:
                        demiworld = raidboss.get_demiworld()
                        if 0 < demiworld:
                            prizelist.append(
                                PrizeData.create(demiworld=demiworld))
                    prizelist = BackendApi.get_prizelist(
                        model_mgr,
                        raidboss.master.helpprizes,
                        using=settings.DB_READONLY)
            elif happeningset.happening.is_canceled(
            ) and v_player.id == happeningset.happening.oid:
                # キャンセル.
                prizelist = BackendApi.aggregate_happeningprize(
                    happeningset.happening, cancel=True)
                is_canceled = True

        # ダメージ履歴.
        func_put_attacklog = self.putRaidAttackLog(raidboss, excludes=excludes)

        prizeinfo = None
        if prizelist:
            prizeinfo = BackendApi.make_prizeinfo(self,
                                                  prizelist,
                                                  using=settings.DB_READONLY)

        persons = {}
        dmmid = ''
        if not is_owner:
            o_players = BackendApi.get_players(self,
                                               [happeningset.happening.oid],
                                               [],
                                               using=settings.DB_READONLY)
            if o_players:
                o_player = o_players[0]
                dmmid = o_player.dmmid
                persons = BackendApi.get_dmmplayers(self,
                                                    o_players,
                                                    using=settings.DB_READONLY,
                                                    do_execute=False)

        self.html_param['player'] = Objects.player(self, v_player)

        self.html_param['is_cleared'] = is_cleared
        self.html_param['is_canceled'] = is_canceled

        self.execute_api()

        self.html_param['happening'] = Objects.happening(
            self,
            HappeningRaidSet(happeningset, raidboss),
            prizeinfo,
            o_person=persons.get(dmmid))

        if func_put_attacklog:
            func_put_attacklog()

        self.setFromPage(Defines.FromPages.RAIDLOG, helplog.id)
        self.html_param['url_trade'] = self.makeAppLinkUrl(UrlMaker.trade(),
                                                           add_frompage=True)

        self.writeHtmlSwitchEvent('log',
                                  eventmaster=raideventmaster,
                                  basedir_normal='raid')
Example #3
0
                self.html_param[
                    'champagne_num_add'] = damagerecord.champagne_num_add

            # 素材.
            if 0 < damagerecord.material_num:
                materials = raideventmaster.getMaterialDict()
                material_id = materials.get(
                    raidboss.raideventraidmaster.material)
                if material_id:
                    materialmaster = BackendApi.get_raidevent_materialmaster(
                        model_mgr, material_id, using=settings.DB_READONLY)
                    materialnumdata = BackendApi.get_raidevent_materialdata(
                        model_mgr, v_player.id, using=settings.DB_READONLY)
                    obj = Objects.raidevent_material(
                        self, materialmaster,
                        materialnumdata.getMaterialNum(
                            raideventid,
                            raidboss.raideventraidmaster.material))
                    obj['num_add'] = damagerecord.material_num
                    self.html_param['material'] = obj

            self.html_param['url_raidevent_top'] = self.makeAppLinkUrl(
                UrlMaker.raidevent_top(raideventid))

            if raideventmaster.flag_dedicated_stage:
                url_scout_top = UrlMaker.raidevent_scouttop()
        elif raidboss.scouteventraidmaster:
            scouteventid = raidboss.scouteventraidmaster.eventid
            tanzaku_number = raidboss.get_tanzaku_number(v_player.id)
            tanzakumaster = BackendApi.get_scoutevent_tanzakumaster(
                model_mgr,