def __init__(self, char_id): self.char_id = char_id try: self.c = MongoCheckIn.objects.get(id=char_id) except DoesNotExist: self.c = MongoCheckIn(id=char_id) self.c.has_checked = False self.c.day = 1 self.c.save()
def __init__(self, char_id): self.char_id = char_id try: self.c = MongoCheckIn.objects.get(id=char_id) except DoesNotExist: self.c = MongoCheckIn(id=char_id) self.c.has_checked = False self.c.day = 1 self.c.save() res = api_get_checkin_data(data={}) self.checkin_data = res['data']['checkin']
class CheckIn(object): def __init__(self, char_id): self.char_id = char_id try: self.c = MongoCheckIn.objects.get(id=char_id) except DoesNotExist: self.c = MongoCheckIn(id=char_id) self.c.has_checked = False self.c.day = 1 self.c.save() def checkin(self): if self.c.has_checked: raise SanguoException( errormsg.CHECKIN_ALREADY_CHECKIN, self.char_id, "CheckIn checkin", "already checkin", ) self.c.has_checked = True day = self.c.day if self.c.day == MAX_DAYS: self.c.day = 1 else: self.c.day += 1 self.c.save() resource = Resource(self.char_id, "Daily Checkin", 'checkin reward. day {0}'.format(day)) resource_add = CHECKIN_DATA[str(day)]['package'] resource_add = get_drop_from_raw_package(resource_add) standard_drop = resource.add(**resource_add) msg = CheckInResponse() msg.ret = 0 msg.reward.MergeFrom( standard_drop_to_attachment_protomsg(standard_drop)) achievement = Achievement(self.char_id) achievement.trig(34, 1) self.send_update_notify(day) return msg def daily_reset(self): # 每日可签到标志重置 self.c.has_checked = False self.c.save() self.send_notify() def _fill_up_one_item(self, item, k): k = int(k) item.id = k if k < self.c.day: status = CheckInItem.SIGNED elif k == self.c.day: if self.c.has_checked: status = CheckInItem.SIGNED else: status = CheckInItem.SIGNABLE else: status = CheckInItem.UNSIGNED item.status = status for _tp, _id, _amount in CHECKIN_DATA[str(k)]['icons']: obj = item.objs.add() obj.tp, obj.id, obj.amount = _tp, _id, _amount def send_update_notify(self, k): msg = CheckInUpdateNotify() self._fill_up_one_item(msg.item, k) publish_to_char(self.char_id, pack_msg(msg)) def send_notify(self): msg = CheckInNotify() for k in CHECKIN_DATA.keys(): item = msg.items.add() self._fill_up_one_item(item, k) publish_to_char(self.char_id, pack_msg(msg))
class CheckIn(object): def __init__(self, char_id): self.char_id = char_id try: self.c = MongoCheckIn.objects.get(id=char_id) except DoesNotExist: self.c = MongoCheckIn(id=char_id) self.c.has_checked = False self.c.day = 1 self.c.save() res = api_get_checkin_data(data={}) self.checkin_data = res['data']['checkin'] def checkin(self): if self.c.has_checked: raise SanguoException( errormsg.CHECKIN_ALREADY_CHECKIN, self.char_id, "CheckIn checkin", "already checkin", ) self.c.has_checked = True day = self.c.day self.c.save() resource = Resource(self.char_id, "Daily Checkin", 'checkin reward. day {0}'.format(day)) resource_add = self.checkin_data[str(day)]['package'] resource_add = get_drop_from_raw_package(resource_add) standard_drop = resource.add(**resource_add) msg = CheckInResponse() msg.ret = 0 msg.reward.MergeFrom(standard_drop_to_attachment_protomsg(standard_drop)) self.send_update_notify(day) return msg @staticmethod def cron_job(): for c in MongoCheckIn.objects.filter(has_checked=True): CheckIn(c.id).daily_reset() def daily_reset(self): # 每日可签到标志重置 if not self.c.has_checked: return self.c.has_checked = False if self.c.day == MAX_DAYS: self.c.day = 1 else: self.c.day += 1 self.c.save() self.send_notify() def _fill_up_one_item(self, item, k): k = int(k) item.id = k if k < self.c.day: status = CheckInItem.SIGNED elif k == self.c.day: if self.c.has_checked: status = CheckInItem.SIGNED else: status = CheckInItem.SIGNABLE else: status = CheckInItem.UNSIGNED item.status = status for _tp, _id, _amount in self.checkin_data[str(k)]['icons']: obj = item.objs.add() obj.tp, obj.id, obj.amount = _tp, _id, _amount def send_update_notify(self, k): msg = CheckInUpdateNotify() self._fill_up_one_item(msg.item, k) publish_to_char(self.char_id, pack_msg(msg)) def send_notify(self): msg = CheckInNotify() for k in self.checkin_data.keys(): item = msg.items.add() self._fill_up_one_item(item, k) publish_to_char(self.char_id, pack_msg(msg))