예제 #1
0
 def makeListPlayer(self, player, person, userdata):
     return {
         'id': player.id,
         'person': Objects.person(self, player, person),
         'dmmid': player.dmmid,
         'point': userdata.point,
         'fame': userdata.fame,
         'winmax': userdata.win,
         'rankup': userdata.rankup,
         'grouprank': userdata.grouprank,
         'url': self.makeAppLinkUrlAdmin(UrlMaker.view_player(player.id)),
     }
예제 #2
0
 def process(self):
     
     args = self.getUrlArgs('/greet_comment_comp/')
     oid = args.get(0, None)
     errcode = args.get(1, None)
     point_pre = args.get(2, None)
     point_post = args.get(3, None)
     
     if not (str(oid).isdigit() and str(errcode).isdigit() and str(point_pre).isdigit() and str(point_post).isdigit()):
         raise CabaretError(u'不正なアクセスです', CabaretError.Code.ILLEGAL_ARGS)
     
     oid = int(args.get(0, None))
     errcode = int(args.get(1, None))
     point_pre = int(args.get(2, None))
     point_post = int(args.get(3, None))
     
     o_player = BackendApi.get_players(self, [oid], [], using=settings.DB_READONLY)
     if o_player:
         o_player = o_player[0]
     else:
         raise CabaretError(u'不正なアクセスです', CabaretError.Code.ILLEGAL_ARGS)
     
     persons = BackendApi.get_dmmplayers(self, [o_player], using=settings.DB_READONLY)
     self.html_param['person'] = Objects.person(self, o_player, persons.get(o_player.dmmid))
     
     is_overlimit = False
     is_duplicate = False
     if errcode == CabaretError.Code.OK:
         pass
     elif errcode == CabaretError.Code.ALREADY_RECEIVED:
         is_duplicate = True
     elif errcode == CabaretError.Code.OVER_LIMIT:
         is_overlimit = True
     
     self.html_param['is_duplicate'] = is_duplicate
     self.html_param['is_overlimit'] = is_overlimit
     
     self.html_param['gacha_pt_pre'] = point_pre
     self.html_param['gacha_pt_post'] = point_post
     self.html_param['gacha_pt_add'] = point_post - point_pre
     
     url = UrlMaker.profile(oid)
     self.html_param['url_profile'] = self.makeAppLinkUrl(url)
     
     self.writeAppHtml('greetcommentcomp')
예제 #3
0
    def process(self):

        args = self.getUrlArgs('/greet_complete/')
        oid = args.get(0, None)
        errcode = args.get(1, None)
        point_pre = args.get(2, None)
        point_post = args.get(3, None)
        logid = args.get(4, None)

        if not (str(oid).isdigit() and str(errcode).isdigit()
                and str(point_pre).isdigit() and str(point_post).isdigit()):
            raise CabaretError(u'不正なアクセスです', CabaretError.Code.ILLEGAL_ARGS)

        oid = int(args.get(0, None))
        errcode = int(args.get(1, None))
        point_pre = int(args.get(2, None))
        point_post = int(args.get(3, None))
        if logid:
            logid = int(logid)

        o_player = BackendApi.get_players(self, [oid], [],
                                          using=settings.DB_READONLY)
        if o_player:
            o_player = o_player[0]
        else:
            raise CabaretError(u'不正なアクセスです', CabaretError.Code.ILLEGAL_ARGS)

        if not logid:
            url = UrlMaker.profile(o_player.id)
            url = self.makeAppLinkUrlRedirect(url)
            self.appRedirect(url)
            return

        persons = BackendApi.get_dmmplayers(self, [o_player],
                                            using=settings.DB_READONLY)
        self.html_param['person'] = Objects.person(self, o_player,
                                                   persons.get(o_player.dmmid))

        is_overlimit = False
        is_duplicate = False
        if errcode == CabaretError.Code.OK:
            pass
        elif errcode == CabaretError.Code.ALREADY_RECEIVED:
            is_duplicate = True
        elif errcode == CabaretError.Code.OVER_LIMIT:
            is_overlimit = True

        self.html_param['is_duplicate'] = is_duplicate
        self.html_param['is_overlimit'] = is_overlimit

        self.html_param['gacha_pt_pre'] = point_pre
        self.html_param['gacha_pt_post'] = point_post
        self.html_param['gacha_pt_add'] = point_post - point_pre

        url = UrlMaker.profile(oid)
        self.html_param['url_profile'] = self.makeAppLinkUrl(url)

        url = UrlMaker.greet_complete(o_player.id, errcode, point_pre,
                                      point_post, logid)
        self.html_param['url_self'] = self.makeAppLinkUrl(url)

        errtext = False
        comment = u''
        if self.request.method == 'POST':
            comment = self.request.get(self.KEY_GREET_COMMENT)

            if comment == u'':
                errtext = True

            # コメントのバイト数で比較
            if StrUtil.getByteLength(comment) > (
                    Defines.GREET_COMMENT_TEXT_MAX * 2):
                errtext = True

            if not errtext and self.is_pc:
                # JS API経由でtextidを取得済み
                textid = self.request.get(self.KEY_GREET_TEXTID)
            elif not errtext:
                data = InspectionPostRequestData()
                data.data = comment
                request = self.osa_util.makeApiRequest(ApiNames.InspectionPost,
                                                       data)
                self.addAppApiRequest('inspection_start', request)

                ret_data = self.execute_api()

                result = ret_data['inspection_start'].get()
                if isinstance(result, InspectionData):
                    textid = result.textId
                else:
                    if not settings_sub.IS_LOCAL:
                        errtext = True
                    else:
                        textid = '0000'

            if not errtext:
                v_player = self.getViewerPlayer()

                point_pre = v_player.gachapt
                point_post = v_player.gachapt

                model_mgr = self.getModelMgr()
                is_friend = BackendApi.check_friend(v_player.id,
                                                    o_player.id,
                                                    model_mgr,
                                                    using=settings.DB_READONLY)

                try:
                    model_mgr = db_util.run_in_transaction(
                        Handler.tr_write, v_player.id, o_player.id, is_friend,
                        logid, textid)
                    model_mgr.write_end()
                    playergachapt = model_mgr.get_wrote_model(
                        PlayerGachaPt, v_player.id)
                    if playergachapt:
                        point_post = playergachapt.gachapt
                except CabaretError, e:
                    if e.code in (CabaretError.Code.NOT_DATA):
                        url = UrlMaker.greet(o_player.id)
                        url = self.makeAppLinkUrlRedirect(url)
                        self.appRedirect(url)
                        return
                    else:
                        raise

                errcode = 0
                if point_pre >= point_post:
                    errcode = CabaretError.Code.ALREADY_RECEIVED
                url = UrlMaker.greet_comment_comp(o_player.id, errcode,
                                                  point_pre, point_post)
                url = self.makeAppLinkUrlRedirect(url)
                self.appRedirect(url)
                return
예제 #4
0
    def makeRaidObj(self, happeningraidset, o_player, o_person, eventmaster):
        happeningset = happeningraidset.happening
        raidboss = happeningraidset.raidboss

        eventdata = None
        if eventmaster:
            fastbonusdata = BackendApi.get_raidevent_fastbonusdata(
                eventmaster, raidboss, happeningset.happening.etime)
            rate = 1
            if fastbonusdata:
                rate = fastbonusdata['rate']

            # コンボボーナス.
            now = OSAUtil.get_now()
            combobonus_rate = BackendApi.get_raidevent_combobonus_powuprate(
                self.getModelMgr(),
                eventmaster,
                raidboss,
                using=settings.DB_READONLY,
                now=now)
            combo_cnt = raidboss.getCurrentComboCount(now=now)
            combobonus_rate_next = BackendApi.choice_raidevent_combobonus_powuprate(
                eventmaster, combo_cnt + 1)
            last_uid = None

            lastrecord = raidboss.getLastDamageRecord()
            if lastrecord:
                last_uid = lastrecord.uid

            combobonus = {
                'cnt': combo_cnt,
                'powup': combobonus_rate,
                'powup_next': combobonus_rate_next,
                'etime': DateTimeUtil.dateTimeToStr(raidboss.combo_etime),
                'last_uid': last_uid,
            }

            eventdata = {
                'id': eventmaster.id,
                'name': eventmaster.name,
                'owner': raidboss.get_owner_eventpoint() * rate,
                'mvp': raidboss.get_mvp_eventpoint() * rate,
                'combobonus': combobonus,
            }

        oname = Objects.person(self, o_player, o_person)['nickname']

        return {
            'id':
            happeningset.id,
            'mid':
            raidboss.raid.mid,
            'oid':
            raidboss.raid.oid,
            'oname':
            oname,
            'name':
            raidboss.master.name,
            'level':
            raidboss.raid.level,
            'hp':
            raidboss.hp,
            'hpmax':
            raidboss.get_maxhp(),
            'ctime':
            DateTimeUtil.dateTimeToStr(happeningset.happening.ctime),
            'etime':
            DateTimeUtil.dateTimeToStr(happeningset.happening.etime),
            'state':
            Defines.HappeningState.MGR_NAMES.get(happeningset.happening.state),
            'eventdata':
            eventdata,
        }
예제 #5
0
    def __procView(self, raidid):
        """詳細表示.
        """
        model_mgr = self.getModelMgr()

        happeningraidset = BackendApi.get_happeningraidset(
            model_mgr, raidid, using=settings.DB_READONLY)
        if not happeningraidset:
            self.putAlertToHtmlParam(u'見つかりませんでした', AlertCode.ERROR)
            self.__procSearch()
            return

        happeningset = happeningraidset.happening

        eventmaster = None
        raidevent_id = HappeningUtil.get_raideventid(
            happeningset.happening.event)
        if raidevent_id:
            eventmaster = BackendApi.get_raideventmaster(
                model_mgr, raidevent_id, using=settings.DB_READONLY)

        # レイド詳細.
        raidboss = happeningraidset.raidboss
        BackendApi.reset_raidboss_eventraidmaster(model_mgr,
                                                  raidboss,
                                                  happeningset.happening.event,
                                                  using=settings.DB_READONLY)

        member_uidlist = list(
            set(raidboss.getDamageRecordUserIdList() + [raidboss.raid.oid]))
        playerlist = BackendApi.get_players(self,
                                            member_uidlist, [],
                                            using=settings.DB_READONLY)
        tmp = BackendApi.get_dmmplayers(self,
                                        playerlist,
                                        using=settings.DB_READONLY)
        players = dict([(player.id, player) for player in playerlist])
        persons = dict([(player.id, tmp.get(player.dmmid))
                        for player in playerlist])

        self.html_param['raid'] = self.makeRaidObj(
            happeningraidset, players[raidboss.raid.oid],
            persons.get(raidboss.raid.oid), eventmaster)

        mvpuidlist = []
        helppoints = {}
        if eventmaster:
            mvpuidlist = raidboss.getMVPList()
            helppoints = raidboss.getHelpEventPoints()
            self.html_param['event'] = {
                'id': eventmaster.id,
                'name': eventmaster.name,
            }

        # 秘宝ボーナス.
        fastbonusdata = BackendApi.get_raidevent_fastbonusdata(
            eventmaster, raidboss, happeningset.happening.etime)
        rate = 1
        if fastbonusdata:
            rate = fastbonusdata['rate']

        # ダメージ履歴.
        obj_playerlist = []
        for player in playerlist:
            record = raidboss.getDamageRecord(player.id)

            obj_player = self.makeListPlayer(player)
            obj_player['name'] = Objects.person(self, player,
                                                persons.get(
                                                    player.id))['nickname']
            obj_player['damage'] = record.damage

            ownerpoint = 0
            mvppoint = 0
            helppoint = 0

            if eventmaster and raidboss.hp < 1:
                if player.id == raidboss.raid.oid:
                    ownerpoint = raidboss.get_owner_eventpoint() * rate
                else:
                    helppoint = helppoints.get(player.id, 0) * rate

                if player.id in mvpuidlist:
                    mvppoint = raidboss.get_mvp_eventpoint() * rate

            obj_player['eventpoints'] = {
                'owner': ownerpoint,
                'mvp': mvppoint,
                'help': helppoint,
            }

            obj_playerlist.append(obj_player)
        self.html_param['playerlist'] = obj_playerlist

        self.writeAppHtml('infomations/view_raid/detail')