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)), }
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')
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
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, }
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')