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
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
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
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
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()
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
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
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
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
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
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
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
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
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
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
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
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
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
def buy(self, index): """购买vip特权礼包 """ self.bought_gifts = utils.bit_set(self.bought_gifts, index) self.put()