Exemplo n.º 1
0
 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()
Exemplo n.º 2
0
    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']
Exemplo n.º 3
0
 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()
Exemplo n.º 4
0
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))
Exemplo n.º 5
0
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))