Ejemplo n.º 1
0
    def update_after_action(cls, act_id, act_data, sid, data):
        """充值成功

        Args:
            data :充值金额
        """
        date = act_data["data"][0]
        if date == utils.today() and act_data["data"][2] == 1:  # 今天已经达标
            act_data["data"][1] += data
            return act_data
        else:
            if date == utils.today():
                act_data["data"][1] += data
            else:
                act_data["data"] = [utils.today(), data, 0]

        canget, awarded = act_data["canget"], act_data["awarded"]
        next_index = int(math.log(canget + awarded + 1, 2)) + 1
        cfg = game_config.act_detail_cfg.get("%s-%s" % (act_id, next_index))
        if act_data["data"][1] >= cfg["cond_a"]:
            act_data["data"][2] = 1
            act_data["canget"] = utils.bit_set(canget, next_index)

            # 第五天充值达标 最终的大奖置为可领取
            if (act_data["canget"] + awarded + 1) == math.pow(
                    2,
                    max(game_config.act_sample_detail_cfg[act_id]) - 1):
                act_data["canget"] = utils.bit_set(
                    act_data["canget"],
                    max(game_config.act_sample_detail_cfg[act_id]))

        return act_data
Ejemplo n.º 2
0
    def update_after_action(cls, act_id, act_data, sid, data):
        """充值成功

        Args:
            data :充值金额
        """
        date = act_data["data"][0]
        if date == utils.today() and act_data["data"][2] == 1:  # 今天已经达标
            act_data["data"][1] += data
            return act_data
        else:
            if date == utils.today():
                act_data["data"][1] += data
            else:
                act_data["data"] = [utils.today(), data, 0]

        canget, awarded = act_data["canget"], act_data["awarded"]
        next_index = int(math.log(canget + awarded + 1, 2)) + 1
        cfg = game_config.act_detail_cfg.get("%s-%s" % (act_id, next_index))
        if act_data["data"][1] >= cfg["cond_a"]:
            act_data["data"][2] = 1
            act_data["canget"] = utils.bit_set(canget, next_index)

            # 第五天充值达标 最终的大奖置为可领取
            if (act_data["canget"] + awarded + 1) == math.pow(2, max(game_config.act_sample_detail_cfg[act_id]) - 1):
                act_data["canget"] = utils.bit_set(act_data["canget"], max(game_config.act_sample_detail_cfg[act_id]))

        return act_data
Ejemplo n.º 3
0
    def update_after_award(cls, act_data, index):
        """领完奖励更新状态

        """
        act_data["awarded"] = utils.bit_set(act_data["awarded"], index)
        act_data["canget"] = act_data["canget"] - utils.bit_set(0, index)

        return act_data
Ejemplo n.º 4
0
    def update_after_award(cls, act_data, index):
        """领完奖励更新状态

        """
        act_data["awarded"] = utils.bit_set(act_data["awarded"], index)
        act_data["canget"] = act_data["canget"] - utils.bit_set(0, index)

        return act_data
Ejemplo n.º 5
0
    def update_after_action(cls, act_id, act_data, data):
        """竞技场获得更好名次

        Args:
            data :新名次
        """
        # 更新进度
        if data >= act_data["data"]:
            return act_data
        else:
            act_data["data"] = data
            canget, awarded = act_data["canget"], act_data["awarded"]

            # 检查是否达成某几个阶段的目标
            index_list = game_config.act_sample_detail_cfg.get(act_id)
            for index in index_list:
                # 领过奖励的和已经知晓完成状态的步数上不再检测
                if utils.bit_test(canget, index) == 0 and utils.bit_test(awarded, index) == 0:
                    cfg = game_config.act_detail_cfg.get("%s-%s" % (act_id, index))
                    # 完成了
                    if act_data["data"] <= cfg["cond_a"]:
                        canget = utils.bit_set(canget, index)

            act_data["canget"] = canget

            return act_data
Ejemplo n.º 6
0
    def charge(self, index):
        """充值
        """
        if not utils.bit_test(self.charged_index, index):
            self.charged_index = utils.bit_set(self.charged_index, index)

        self.put()
Ejemplo n.º 7
0
    def charge(self, index):
        """充值
        """
        if not utils.bit_test(self.charged_index, index):
            self.charged_index = utils.bit_set(self.charged_index, index)

        self.put()
Ejemplo n.º 8
0
    def update_after_action(cls, act_id, act_data, data):
        """通关试炼指定层数

        Args:
            data :新楼层
        """
        if data <= act_data["data"]:
            return act_data

        act_data["data"] = data
        canget, awarded = act_data["canget"], act_data["awarded"]

        # 检查是否达成某几个阶段的目标
        index_list = game_config.act_sample_detail_cfg.get(act_id)
        for index in index_list:
            # 领过奖励的和已经知晓完成状态的步数上不再检测
            if utils.bit_test(canget, index) == 0 and utils.bit_test(
                    awarded, index) == 0:
                cfg = game_config.act_detail_cfg.get("%s-%s" % (act_id, index))
                if act_data["data"] >= cfg["cond_a"]:
                    canget = utils.bit_set(canget, index)

        act_data["canget"] = canget

        return act_data
Ejemplo n.º 9
0
    def update_after_action(cls, act_id, act_data, data):
        """竞技场获得更好名次

        Args:
            data :新名次
        """
        # 更新进度
        if data >= act_data["data"]:
            return act_data
        else:
            act_data["data"] = data
            canget, awarded = act_data["canget"], act_data["awarded"]

            # 检查是否达成某几个阶段的目标
            index_list = game_config.act_sample_detail_cfg.get(act_id)
            for index in index_list:
                # 领过奖励的和已经知晓完成状态的步数上不再检测
                if utils.bit_test(canget, index) == 0 and utils.bit_test(
                        awarded, index) == 0:
                    cfg = game_config.act_detail_cfg.get("%s-%s" %
                                                         (act_id, index))
                    # 完成了
                    if act_data["data"] <= cfg["cond_a"]:
                        canget = utils.bit_set(canget, index)

            act_data["canget"] = canget

            return act_data
Ejemplo n.º 10
0
    def update_after_action(cls, act_id, act_data, data):
        """有可以影响数据的操作之后,更新数据

        此方法只适用于最基本的活动:
            1.类似累计获得金币达到指定数量

        Args:
            act_id :活动ID
            act_data :活动数据
            data :操作数值 类如:消费xx钻石
        """
        # 更新进度
        act_data["data"] += data

        canget, awarded = act_data["canget"], act_data["awarded"]

        # 检查是否达成某几个阶段的目标
        index_list = game_config.act_sample_detail_cfg.get(act_id)
        for index in index_list:
            # 领过奖励的和已经知晓完成状态的步数上不再检测
            if utils.bit_test(canget, index) == 0 and utils.bit_test(
                    awarded, index) == 0:
                cfg = game_config.act_detail_cfg.get("%s-%s" % (act_id, index))
                if act_data["data"] >= cfg["cond_a"]:
                    canget = utils.bit_set(canget, index)

        act_data["canget"] = canget

        return act_data
Ejemplo n.º 11
0
    def update_after_action(cls, act_id, act_data, data):
        """有可以影响数据的操作之后,更新数据

        此方法只适用于最基本的活动:
            1.类似累计获得金币达到指定数量

        Args:
            act_id :活动ID
            act_data :活动数据
            data :操作数值 类如:消费xx钻石
        """
        # 更新进度
        act_data["data"] += data

        canget, awarded = act_data["canget"], act_data["awarded"]

        # 检查是否达成某几个阶段的目标
        index_list = game_config.act_sample_detail_cfg.get(act_id)
        for index in index_list:
            # 领过奖励的和已经知晓完成状态的步数上不再检测
            if utils.bit_test(canget, index) == 0 and utils.bit_test(awarded, index) == 0:
                cfg = game_config.act_detail_cfg.get("%s-%s" % (act_id, index))
                if act_data["data"] >= cfg["cond_a"]:
                    canget = utils.bit_set(canget, index)

        act_data["canget"] = canget

        return act_data
Ejemplo n.º 12
0
    def update_after_action(cls, act_id, act_data, data):
        """有可以影响数据的操作之后,更新数据

        此方法只适用于通关指定副本活动:
            1.类似第一步,通关A,B两个副本,第二步,通关C,D两个副本。

        Args:
            act_id :活动ID
            act_data :活动数据
            data :通关副本ID
        """
        missions = [
            cfg["cond_a"] for key, cfg in game_config.act_detail_cfg.items()
            if key.startswith("%s-" % act_id)
        ]

        if data not in missions:
            return act_data

        # 更新进度
        if data not in act_data["past"]:
            act_data["past"].append(data)

        canget, awarded = act_data["canget"], act_data["awarded"]

        def check_past_missions(past, cfg):
            conds = filter(
                lambda x: x,
                [cfg[attr] for attr in cfg.keys() if attr.startswith("cond_")])
            # 判断conds 是否为past的子集即可判断条件是否都已满足
            if len(set(conds).difference(past)) == 0:
                return True
            else:
                return False

        # 检查是否达成某几个阶段的目标
        index_list = game_config.act_sample_detail_cfg.get(act_id)
        for index in index_list:
            # 领过奖励的和已经知晓完成状态的步数上不再检测
            if utils.bit_test(canget, index) == 0 and utils.bit_test(
                    awarded, index) == 0:
                cfg = game_config.act_detail_cfg.get("%s-%s" % (act_id, index))
                # 完成了
                if check_past_missions(act_data["past"], cfg):
                    canget = utils.bit_set(canget, index)

        act_data["canget"] = canget

        return act_data
Ejemplo n.º 13
0
    def update_after_action(cls, act_id, act_data, data):
        """有可以影响数据的操作之后,更新数据

        此方法只适用于通关指定副本活动:
            1.类似第一步,通关A,B两个副本,第二步,通关C,D两个副本。

        Args:
            act_id :活动ID
            act_data :活动数据
            data :当前获得机甲ID列表
        """
        if data == act_data["have"]:
            return act_data

        # 更新进度
        if data != act_data["have"]:
            act_data["have"] = data

        canget, awarded = act_data["canget"], act_data["awarded"]

        def check_have_heros(have, cfg):
            conds = filter(
                lambda x: x,
                [cfg[attr] for attr in cfg.keys() if attr.startswith("cond_")])
            # 判断conds 是否为have的子集即可判断条件是否都已满足
            if len(set(conds).difference(have)) == 0:
                return True
            else:
                return False

        # 检查是否达成某几个阶段的目标
        index_list = game_config.act_sample_detail_cfg.get(act_id)
        for index in index_list:
            # 领过奖励的和已经知晓完成状态的步数上不再检测
            if utils.bit_test(canget, index) == 0 and utils.bit_test(
                    awarded, index) == 0:
                cfg = game_config.act_detail_cfg.get("%s-%s" % (act_id, index))
                # 完成了
                if check_have_heros(act_data["have"], cfg):
                    canget = utils.bit_set(canget, index)

        act_data["canget"] = canget

        return act_data
Ejemplo n.º 14
0
    def update_after_action(cls, act_id, act_data, data):
        """有可以影响数据的操作之后,更新数据

        此方法只适用于通关指定副本活动:
            1.类似第一步,通关A,B两个副本,第二步,通关C,D两个副本。

        Args:
            act_id :活动ID
            act_data :活动数据
            data :通关副本ID
        """
        missions = [cfg["cond_a"] for key, cfg in game_config.act_detail_cfg.items() if key.startswith("%s-" % act_id)]

        if data not in missions:
            return act_data

        # 更新进度
        if data not in act_data["past"]:
            act_data["past"].append(data)

        canget, awarded = act_data["canget"], act_data["awarded"]

        def check_past_missions(past, cfg):
            conds = filter(lambda x: x, [cfg[attr] for attr in cfg.keys() if attr.startswith("cond_")])
            # 判断conds 是否为past的子集即可判断条件是否都已满足
            if len(set(conds).difference(past)) == 0:
                return True
            else:
                return False

        # 检查是否达成某几个阶段的目标
        index_list = game_config.act_sample_detail_cfg.get(act_id)
        for index in index_list:
            # 领过奖励的和已经知晓完成状态的步数上不再检测
            if utils.bit_test(canget, index) == 0 and utils.bit_test(awarded, index) == 0:
                cfg = game_config.act_detail_cfg.get("%s-%s" % (act_id, index))
                # 完成了
                if check_past_missions(act_data["past"], cfg):
                    canget = utils.bit_set(canget, index)

        act_data["canget"] = canget

        return act_data
Ejemplo n.º 15
0
    def update_after_action(cls, act_id, act_data, data):
        """ 更新进度
        """
        act_data["data"][data[0]] += data[1]

        canget, awarded = act_data["canget"], act_data["awarded"]

        # 检查是否达成某几个阶段的目标
        index_list = game_config.act_sample_detail_cfg.get(act_id)
        for index in index_list:
            # 领过奖励的和已经知晓完成状态的步数上不再检测
            if utils.bit_test(canget, index) == 0 and utils.bit_test(awarded, index) == 0:
                cfg = game_config.act_detail_cfg.get("%s-%s" % (act_id, index))

                if tuple(act_data["data"]) >= (cfg["cond_a"], cfg["cond_b"], cfg["cond_c"], cfg["cond_d"], cfg["cond_e"]):
                    canget = utils.bit_set(canget, index)

        act_data["canget"] = canget

        return act_data
Ejemplo n.º 16
0
    def update_after_action(cls, act_id, act_data, sid, data):
        """
        """
        act_info = act_service.get_act_info(sid, act_id)
        if not act_info:
            return act_data

        daydiff = (datetime.date.today() - datetime.date.fromtimestamp(act_info["start"])).days + 1

        canget, awarded = act_data["canget"], act_data["awarded"]
        index_list = game_config.act_sample_detail_cfg.get(act_id)
        for index in index_list:
            if utils.bit_test(canget, index) == 0 and utils.bit_test(awarded, index) == 0:
                cfg = game_config.act_detail_cfg.get("%s-%s" % (act_id, index))
                if daydiff >= cfg["cond_a"]:
                    canget = utils.bit_set(canget, index)

        act_data["canget"] = canget

        return act_data
Ejemplo n.º 17
0
    def update_after_action(cls, act_id, act_data, data):
        """有可以影响数据的操作之后,更新数据

        此方法只适用于通关指定副本活动:
            1.类似第一步,通关A,B两个副本,第二步,通关C,D两个副本。

        Args:
            act_id :活动ID
            act_data :活动数据
            data :当前获得机甲ID列表
        """
        if data == act_data["have"]:
            return act_data

        # 更新进度
        if data != act_data["have"]:
            act_data["have"] = data

        canget, awarded = act_data["canget"], act_data["awarded"]

        def check_have_heros(have, cfg):
            conds = filter(lambda x: x, [cfg[attr] for attr in cfg.keys() if attr.startswith("cond_")])
            # 判断conds 是否为have的子集即可判断条件是否都已满足
            if len(set(conds).difference(have)) == 0:
                return True
            else:
                return False

        # 检查是否达成某几个阶段的目标
        index_list = game_config.act_sample_detail_cfg.get(act_id)
        for index in index_list:
            # 领过奖励的和已经知晓完成状态的步数上不再检测
            if utils.bit_test(canget, index) == 0 and utils.bit_test(awarded, index) == 0:
                cfg = game_config.act_detail_cfg.get("%s-%s" % (act_id, index))
                # 完成了
                if check_have_heros(act_data["have"], cfg):
                    canget = utils.bit_set(canget, index)

        act_data["canget"] = canget

        return act_data
Ejemplo n.º 18
0
    def update_after_action(cls, act_id, act_data, sid, data):
        """
        """
        act_info = act_service.get_act_info(sid, act_id)
        if not act_info:
            return act_data

        daydiff = (datetime.date.today() -
                   datetime.date.fromtimestamp(act_info["start"])).days + 1

        canget, awarded = act_data["canget"], act_data["awarded"]
        index_list = game_config.act_sample_detail_cfg.get(act_id)
        for index in index_list:
            if utils.bit_test(canget, index) == 0 and utils.bit_test(
                    awarded, index) == 0:
                cfg = game_config.act_detail_cfg.get("%s-%s" % (act_id, index))
                if daydiff >= cfg["cond_a"]:
                    canget = utils.bit_set(canget, index)

        act_data["canget"] = canget

        return act_data
Ejemplo n.º 19
0
    def update_after_action(cls, act_id, act_data, data):
        """ 更新进度
        """
        act_data["data"][data[0]] += data[1]

        canget, awarded = act_data["canget"], act_data["awarded"]

        # 检查是否达成某几个阶段的目标
        index_list = game_config.act_sample_detail_cfg.get(act_id)
        for index in index_list:
            # 领过奖励的和已经知晓完成状态的步数上不再检测
            if utils.bit_test(canget, index) == 0 and utils.bit_test(
                    awarded, index) == 0:
                cfg = game_config.act_detail_cfg.get("%s-%s" % (act_id, index))

                if tuple(act_data["data"]) >= (cfg["cond_a"], cfg["cond_b"],
                                               cfg["cond_c"], cfg["cond_d"],
                                               cfg["cond_e"]):
                    canget = utils.bit_set(canget, index)

        act_data["canget"] = canget

        return act_data
Ejemplo n.º 20
0
    def update_after_action(cls, act_id, act_data, data):
        """通关试炼指定层数

        Args:
            data :新楼层
        """
        if data <= act_data["data"]:
            return act_data

        act_data["data"] = data
        canget, awarded = act_data["canget"], act_data["awarded"]

        # 检查是否达成某几个阶段的目标
        index_list = game_config.act_sample_detail_cfg.get(act_id)
        for index in index_list:
            # 领过奖励的和已经知晓完成状态的步数上不再检测
            if utils.bit_test(canget, index) == 0 and utils.bit_test(awarded, index) == 0:
                cfg = game_config.act_detail_cfg.get("%s-%s" % (act_id, index))
                if act_data["data"] >= cfg["cond_a"]:
                    canget = utils.bit_set(canget, index)

        act_data["canget"] = canget

        return act_data
Ejemplo n.º 21
0
 def buy(self, index):
     """购买vip特权礼包
     """
     self.bought_gifts = utils.bit_set(self.bought_gifts, index)
     self.put()
Ejemplo n.º 22
0
 def buy(self, index):
     """购买vip特权礼包
     """
     self.bought_gifts = utils.bit_set(self.bought_gifts, index)
     self.put()