def summon_award_group(playing_id): playing = slaughter_house_types.PlayingManager.get(playing_id) if playing == None: proxy.Logging.error( "[slaughter_house] PlayingManager.get(%d) failed." % playing_id) return None if playing.boss_time_ == False: return None playing_config = slaughter_house_types.Config.get(playing.get_template()) if playing_config == None: proxy.Logging.error("[slaughter_house] slaughter_house_types.Config.get(%d) failed."\ % playing.get_template()) return None monster_group = playing_config.monster_groups_[playing.group_ - 1] if monster_group == None: proxy.Logging.error("[slaughter_house] playing_config.monster_groups_[%d] is none."\ % (playing.group_ - 1)) return None facade_request.summon_npcs(playing.get_scene(), monster_group.award_monster1_id_,\ monster_group.award_monster1_num_, playing_config.award_pos_[0],\ playing_config.award_pos_[1], playing_config.award_pos_range_, playing_config.award_pos_range_) facade_request.summon_npcs(playing.get_scene(), monster_group.award_monster2_id_,\ monster_group.award_monster2_num_, playing_config.award_pos_[0],\ playing_config.award_pos_[1], playing_config.award_pos_range_, playing_config.award_pos_range_)
def playing_slaughter_house_on_timer_boss(id): playing = slaughter_house_types.PlayingManager.get(id) if playing == None: proxy.Logging.error( "[slaughter_house] PlayingManager.get(%d) failed." % id) return None facade_request.clear_scene_npcs(playing.get_scene(), 0, True) playing_config = slaughter_house_types.Config.get(playing.get_template()) if playing_config == None: proxy.Logging.error("[slaughter_house] slaughter_house_types.Config.get(%d) failed."\ % playing.get_template()) return None playing.boss_time_ = True monster_group = playing_config.monster_groups_[playing.group_ - 1] if monster_group == None: proxy.Logging.error("[slaughter_house] playing_config.monster_groups_[%d] is none."\ % (playing.group_ - 1)) return None rand_int = random.randint(0, len(playing_config.pos_) - 1) pos = playing_config.pos_[rand_int] facade_request.summon_npcs(playing.get_scene(), monster_group.boss_id_, monster_group.boss_num_,\ playing_config.boss_pos_[0], playing_config.boss_pos_[1])
def summon_award_group(playing_id): playing = slaughter_house_types.PlayingManager.get(playing_id) if playing == None: proxy.Logging.error("[slaughter_house] PlayingManager.get(%d) failed." % playing_id) return None if playing.boss_time_ == False: return None playing_config = slaughter_house_types.Config.get(playing.get_template()) if playing_config == None: proxy.Logging.error("[slaughter_house] slaughter_house_types.Config.get(%d) failed."\ % playing.get_template()) return None monster_group = playing_config.monster_groups_[playing.group_ - 1] if monster_group == None: proxy.Logging.error("[slaughter_house] playing_config.monster_groups_[%d] is none."\ % (playing.group_ - 1)) return None facade_request.summon_npcs(playing.get_scene(), monster_group.award_monster1_id_,\ monster_group.award_monster1_num_, playing_config.award_pos_[0],\ playing_config.award_pos_[1], playing_config.award_pos_range_, playing_config.award_pos_range_) facade_request.summon_npcs(playing.get_scene(), monster_group.award_monster2_id_,\ monster_group.award_monster2_num_, playing_config.award_pos_[0],\ playing_config.award_pos_[1], playing_config.award_pos_range_, playing_config.award_pos_range_)
def playing_slaughter_house_on_timer_boss(id): playing = slaughter_house_types.PlayingManager.get(id) if playing == None: proxy.Logging.error("[slaughter_house] PlayingManager.get(%d) failed." % id) return None facade_request.clear_scene_npcs(playing.get_scene(), 0, True) playing_config = slaughter_house_types.Config.get(playing.get_template()) if playing_config == None: proxy.Logging.error("[slaughter_house] slaughter_house_types.Config.get(%d) failed."\ % playing.get_template()) return None playing.boss_time_ = True monster_group = playing_config.monster_groups_[playing.group_ - 1] if monster_group == None: proxy.Logging.error("[slaughter_house] playing_config.monster_groups_[%d] is none."\ % (playing.group_ - 1)) return None rand_int = random.randint(0, len(playing_config.pos_) - 1) pos = playing_config.pos_[rand_int] facade_request.summon_npcs(playing.get_scene(), monster_group.boss_id_, monster_group.boss_num_,\ playing_config.boss_pos_[0], playing_config.boss_pos_[1])
def playing_slaughter_house_on_event_actor_killed(message_type, channel, channel_type, serialize): message = ccevent.role.ttypes.EventRoleKilled() TSerialization.deserialize(message, serialize) if message.attacker_type_ != ccentity.entity.ttypes.EntityType.TYPE_ACTOR: return None; playing_id = slaughter_house_types.PlayingManager.get_actor_playing(message.id_) if playing_id == None or playing_id == 0: proxy.Logging.error("[slaughter_house] PlayingManager.get_actor_playing(%d) failed."\ % message.id_) return None playing = slaughter_house_types.PlayingManager.get(playing_id) if playing == None: proxy.Logging.error("[slaughter_house] PlayingManager.get(%d) failed." % playing_id) return None playing_config = slaughter_house_types.Config.get(playing.get_template()) if playing_config == None: proxy.Logging.error("[slaughter_house] slaughter_house_types.Config.get(%d) failed."\ % playing.get_template()) return None attacker_actor = playing.get_actor(message.attacker_id_) if attacker_actor == None: proxy.Logging.error("[slaughter_house] playing.get_actor(%d) failed."\ % message.attacker_id_) return None attacker_actor.score_ += playing_config.kill_actor_score_ playing.ranking_.add_score(message.attacker_id_, playing_config.kill_actor_score_) proxy.Logging.debug("[slaughter_house] actor(%d) killed by actor(%d)"\ % (message.id_, message.attacker_id_))
def summon_next_group(playing_id): playing = slaughter_house_types.PlayingManager.get(playing_id) if playing == None: proxy.Logging.error( "[slaughter_house] PlayingManager.get(%d) failed." % playing_id) return None playing.boss_time_ = False facade_request.clear_scene_npcs(playing.get_scene(), 0, True) playing_config = slaughter_house_types.Config.get(playing.get_template()) if playing_config == None: proxy.Logging.error("[slaughter_house] slaughter_house_types.Config.get(%d) failed."\ % playing.get_template()) return None playing.group_ += 1 # 同步阶段给所有玩家 request = ccrequest.playing.ttypes.RequestPlayingSynchronizeScore() request.score_ = ccentity.playing.ttypes.PlayingScoreField( ccentity.playing.ttypes.PlayingScoreType.STAGE, 0, playing.group_) for actor_id in playing.get_actors(): request.actor_ = actor_id proxy.Request.request( ccrequest.ttypes.RequestType.REQUEST_PLAYING_SYNCHRONIZE_SCORE, request) proxy.Timer.remove(playing_id, "playing_slaughter_house_on_timer_boss") if playing.group_ == 8: # 最终BOSS rand_int = random.randint(0, len(playing_config.pos_) - 1) pos = playing_config.pos_[rand_int] facade_request.summon_npc(playing.get_scene(), playing_config.last_boss_id_,\ playing_config.boss_pos_[0], playing_config.boss_pos_[1]) elif playing.group_ > 8: end_playing(playing_id) return None else: monster_group = playing_config.monster_groups_[playing.group_ - 1] if monster_group == None: proxy.Logging.error("[slaughter_house] playing_config.monster_groups_[%d] is none."\ % (playing.group_ - 1)) return None # 招出各种普通怪 for pos in playing_config.pos_: facade_request.summon_npcs(playing.get_scene(), monster_group.monster1_id_,\ monster_group.monster1_num_, pos[0], pos[1], 10, 10) facade_request.summon_npcs(playing.get_scene(), monster_group.monster2_id_,\ monster_group.monster2_num_, pos[0], pos[1], 10, 10) proxy.Timer.add(playing_id, boss_interval_sec * 1000, 1, "playing_slaughter_house_on_timer_boss")
def playing_plot_on_event_role_change_hp(message_type, channel, channel_type, serialize): # 事件消息 message = ccevent.role.ttypes.EventRoleChangeHp() # 消息反序列化 TSerialization.deserialize(message, serialize) # 主角类型只能是玩家 if message.type_ != ccentity.entity.ttypes.EntityType.TYPE_ACTOR: return None # 根据玩家ID获取所在副本ID playing_id = plot_types.PlayingManager.get_actor_playing(message.id_) if playing_id == None or playing_id == 0: proxy.Logging.error("plot_types.PlayingManager.get_actor_playing(%d) failed." % message.id_) return None # 获取副本对象 playing = plot_types.PlayingManager.get(playing_id) if playing == None: proxy.Logging.error("plot_types.PlayingManager.get(%d) failed." % playing_id) return None # 获取玩家对象 playing_actor = playing.get_actor(message.id_) if playing_actor == None: proxy.Logging.error("plot_types.PlayingManager.get_actor(%d) failed." % message.id_) return None # 隐藏NPC是否已召唤 if playing_actor.get_hide_npc() > 0: return None # 获得玩家交互对象 actor = proxy.EntityManager.get_actor(message.id_) if actor == None: proxy.Logging.error("proxy.EntityManager.get_actor(%d) failed." % message.id_) return None max_hp = actor.get_attr_role_aoi(ccentity.role.ttypes.RoleAoiFields.MAX_HP) current_hp = actor.get_attr_role_aoi(ccentity.role.ttypes.RoleAoiFields.CURRENT_HP) if current_hp > (max_hp * 20 / 100): return None playing_config = plot_types.Config.get(playing.get_template()) if playing_config == None: proxy.Logging.error("获取 副本配置失败(%d)" % playing.get_template()) return None playing_actor.inc_hide_npc(1) facade_request.summon_npc(playing.get_scene(), playing_config.get_hide_npc(),\ actor.get_pos_x(), actor.get_pos_y(), 5, 5) proxy.Logging.debug("玩家血量改变,触发隐藏BOSS");
def playing_slaughter_house_on_event_actor_kill_npc(message_type, channel, channel_type, serialize): message = ccevent.actor.ttypes.EventActorKillNpc() TSerialization.deserialize(message, serialize) playing_id = slaughter_house_types.PlayingManager.get_actor_playing( message.actor_) if playing_id == None or playing_id == 0: proxy.Logging.error("[slaughter_house] PlayingManager.get_actor_playing(%d) failed."\ % (message.actor_)) return None playing = slaughter_house_types.PlayingManager.get(playing_id) if playing == None: proxy.Logging.error("[slaughter_house] PlayingManager.get(%d) failed."\ % (message.actor_)) return None playing_config = slaughter_house_types.Config.get(playing.get_template()) if playing_config == None: proxy.Logging.error("[slaughter_house] slaughter_house_types.Config.get(%d) failed."\ % (playing.get_template())) return None playing_cell = playing_types.Config.get(playing.get_template()) if playing_cell == None: proxy.Logging.error("[slaughter_house] playing_types.Config.get(%d) failed."\ % (playing.get_template())) return None actor = playing.get_actor(message.actor_) if actor == None: proxy.Logging.error("[slaughter_house] playing.get_actor(%d) failed."\ % (message.actor_)) return None actor.score_ += playing_config.get_monster_score(message.npc_template_) playing.ranking_.add_score(message.actor_,\ playing_config.get_monster_score(message.npc_template_)) if playing.group_ - 1 < len(playing_config.monster_groups_): monster_group = playing_config.monster_groups_[playing.group_ - 1] if monster_group == None: proxy.Logging.error("[slaughter_house] playing_config.monster_groups_[%d] is none."\ % (playing.group_ - 1)) return None if monster_group.boss_id_ == message.npc_template_: summon_award_group(playing_id) proxy.Logging.debug("[slaughter_house] actor(%d) kill npc(%d) score(%d)"\ % (message.actor_, message.npc_template_, playing_config.get_monster_score(message.npc_template_)))
def summon_next_group(playing_id): playing = slaughter_house_types.PlayingManager.get(playing_id) if playing == None: proxy.Logging.error("[slaughter_house] PlayingManager.get(%d) failed." % playing_id) return None playing.boss_time_ = False facade_request.clear_scene_npcs(playing.get_scene(), 0, True) playing_config = slaughter_house_types.Config.get(playing.get_template()) if playing_config == None: proxy.Logging.error("[slaughter_house] slaughter_house_types.Config.get(%d) failed."\ % playing.get_template()) return None playing.group_ += 1 # 同步阶段给所有玩家 request = ccrequest.playing.ttypes.RequestPlayingSynchronizeScore() request.score_ = ccentity.playing.ttypes.PlayingScoreField( ccentity.playing.ttypes.PlayingScoreType.STAGE, 0, playing.group_) for actor_id in playing.get_actors(): request.actor_ = actor_id proxy.Request.request(ccrequest.ttypes.RequestType.REQUEST_PLAYING_SYNCHRONIZE_SCORE, request) proxy.Timer.remove(playing_id, "playing_slaughter_house_on_timer_boss") if playing.group_ == 8: # 最终BOSS rand_int = random.randint(0, len(playing_config.pos_) - 1) pos = playing_config.pos_[rand_int] facade_request.summon_npc(playing.get_scene(), playing_config.last_boss_id_,\ playing_config.boss_pos_[0], playing_config.boss_pos_[1]) elif playing.group_ > 8: end_playing(playing_id) return None else: monster_group = playing_config.monster_groups_[playing.group_ - 1] if monster_group == None: proxy.Logging.error("[slaughter_house] playing_config.monster_groups_[%d] is none."\ % (playing.group_ - 1)) return None # 招出各种普通怪 for pos in playing_config.pos_: facade_request.summon_npcs(playing.get_scene(), monster_group.monster1_id_,\ monster_group.monster1_num_, pos[0], pos[1], 10, 10) facade_request.summon_npcs(playing.get_scene(), monster_group.monster2_id_,\ monster_group.monster2_num_, pos[0], pos[1], 10, 10) proxy.Timer.add(playing_id, boss_interval_sec * 1000, 1, "playing_slaughter_house_on_timer_boss")
def playing_slaughter_house_on_event_actor_kill_npc(message_type, channel, channel_type, serialize): message = ccevent.actor.ttypes.EventActorKillNpc() TSerialization.deserialize(message, serialize) playing_id = slaughter_house_types.PlayingManager.get_actor_playing(message.actor_) if playing_id == None or playing_id == 0: proxy.Logging.error("[slaughter_house] PlayingManager.get_actor_playing(%d) failed."\ % (message.actor_)) return None playing = slaughter_house_types.PlayingManager.get(playing_id) if playing == None: proxy.Logging.error("[slaughter_house] PlayingManager.get(%d) failed."\ % (message.actor_)) return None playing_config = slaughter_house_types.Config.get(playing.get_template()) if playing_config == None: proxy.Logging.error("[slaughter_house] slaughter_house_types.Config.get(%d) failed."\ % (playing.get_template())) return None playing_cell = playing_types.Config.get(playing.get_template()) if playing_cell == None: proxy.Logging.error("[slaughter_house] playing_types.Config.get(%d) failed."\ % (playing.get_template())) return None actor = playing.get_actor(message.actor_) if actor == None: proxy.Logging.error("[slaughter_house] playing.get_actor(%d) failed."\ % (message.actor_)) return None actor.score_ += playing_config.get_monster_score(message.npc_template_) playing.ranking_.add_score(message.actor_,\ playing_config.get_monster_score(message.npc_template_)) if playing.group_ - 1 < len(playing_config.monster_groups_): monster_group = playing_config.monster_groups_[playing.group_ - 1] if monster_group == None: proxy.Logging.error("[slaughter_house] playing_config.monster_groups_[%d] is none."\ % (playing.group_ - 1)) return None if monster_group.boss_id_ == message.npc_template_: summon_award_group(playing_id) proxy.Logging.debug("[slaughter_house] actor(%d) kill npc(%d) score(%d)"\ % (message.actor_, message.npc_template_, playing_config.get_monster_score(message.npc_template_)))
def playing_slaughter_house_on_event_actor_killed(message_type, channel, channel_type, serialize): message = ccevent.role.ttypes.EventRoleKilled() TSerialization.deserialize(message, serialize) if message.attacker_type_ != ccentity.entity.ttypes.EntityType.TYPE_ACTOR: return None playing_id = slaughter_house_types.PlayingManager.get_actor_playing( message.id_) if playing_id == None or playing_id == 0: proxy.Logging.error("[slaughter_house] PlayingManager.get_actor_playing(%d) failed."\ % message.id_) return None playing = slaughter_house_types.PlayingManager.get(playing_id) if playing == None: proxy.Logging.error( "[slaughter_house] PlayingManager.get(%d) failed." % playing_id) return None playing_config = slaughter_house_types.Config.get(playing.get_template()) if playing_config == None: proxy.Logging.error("[slaughter_house] slaughter_house_types.Config.get(%d) failed."\ % playing.get_template()) return None attacker_actor = playing.get_actor(message.attacker_id_) if attacker_actor == None: proxy.Logging.error("[slaughter_house] playing.get_actor(%d) failed."\ % message.attacker_id_) return None attacker_actor.score_ += playing_config.kill_actor_score_ playing.ranking_.add_score(message.attacker_id_, playing_config.kill_actor_score_) proxy.Logging.debug("[slaughter_house] actor(%d) killed by actor(%d)"\ % (message.id_, message.attacker_id_))
def playing_team_on_event_actor_kill_npc(message_type, channel, channel_type, serialize): # 事件消息 message = ccevent.actor.ttypes.EventActorKillNpc() TSerialization.deserialize(message, serialize) # 获取玩家所在副本ID playing_id = team_types.PlayingManager.get_actor_playing(message.actor_) if playing_id == None or playing_id == 0: proxy.Logging.error("[team] PlayingManager.get_actor_playing(%d) failed" % message.actor_) return None playing = team_types.PlayingManager.get(playing_id) if playing == None: proxy.Logging.error("[team] PlayingManager.get(%d) failed" % playing_id) return None playing_config = team_types.Config.get(playing.get_template()) if playing_config == None: proxy.Logging.error("[team] team_types.Config.get(%d) failed." % playing.get_template()) return None playing_cell = playing_types.Config.get(playing.get_template()) if playing_cell == None: proxy.Logging.debug("[team] playing_types.Config.get(%d) failed." % playing.get_template()) return None actor = playing.get_actor(message.actor_) if actor == None: proxy.Logging.error("[team] playing.get_actor(%d) failed" % message.actor_) return None playing.inc_kill_npc(message.npc_template_) actors = playing.get_actors() if actors == None: proxy.Logging.error("[team] playing.get_actors() failed") return None if playing_config.summon_next_npc(playing.get_scene(), playing.get_next_pos()) == False: playing_team_sync_ranking(playing_id) request = ccrequest.playing.ttypes.RequestPlayingComplete() request.playing_ = playing_id result = ccentity.playing.ttypes.PlayingResultField() result.values_ = [] result.award_count_ = 1 result.paid_award_count_ = 0; result.awarded_ = False # result.value1: 花费时间 request.result_ = result request.awards_ = [] for award in playing_cell.awards_: request.awards_.append(award) proxy.Request.request(ccrequest.ttypes.RequestType.REQUEST_PLAYING_COMPLETE,\ request) # 设置副本已完成 playing.set_complete() # 取消定时器 proxy.Timer.remove(playing_id, "playing_team_on_timer_playing") proxy.Timer.remove(playing_id, "playing_team_on_timer_sync_ranking") # 同步一次排行 proxy.Logging.debug("[team] complete playing") # 同步得分 for (k,v) in actors.items(): request = ccrequest.playing.ttypes.RequestPlayingSynchronizeScore() request.actor_ = k # 分数对象(得分类型=杀死NPC, key=NPC模板ID, value=当前杀死的个数) score_field = ccentity.playing.ttypes.PlayingScoreField(ccentity.playing.ttypes.PlayingScoreType.KILL_NPC,\ message.npc_template_, playing.get_kill_npc(message.npc_template_)) request.score_ = score_field # 发送请求 proxy.Request.request(ccrequest.ttypes.RequestType.REQUEST_PLAYING_SYNCHRONIZE_SCORE,\ request) if playing.get_complete() == True: award_actor = playing.get_actor(k) if award_actor == None: proxy.Logging.debug("[team] playing.get_actor(%d) failed." % k) return None # 不在副本内不给奖励 if award_actor.get_leave() == False: # 直接给奖励 request_award = ccrequest.playing.ttypes.RequestPlayingAwardActor() request_award.actor_ = k request_award.playing_template_ = playing.get_template() request_award.awards_ = [] for award in playing_cell.awards_: request_award.awards_.append(award) proxy.Request.request(ccrequest.ttypes.RequestType.REQUEST_PLAYING_AWARD_ACTOR, request_award) proxy.Logging.debug("[team] add_award award") playing.next_pos() proxy.Logging.debug("[team] actor(%d) kill npc(%d)" % (message.actor_, message.npc_template_))
def playing_team_on_event_playing_actor_enter(message_type, channel, channel_type, serialize): # 事件消息 message = ccevent.playing.ttypes.EventPlayingActorEnter() TSerialization.deserialize(message, serialize) proxy.Communicator.follow(ccevent.ttypes.EventType.EVENT_ACTOR_KILL_NPC,\ message.actor_, ccevent.ttypes.ChannelType.CHANNEL_ACTOR,\ "playing_team_on_event_actor_kill_npc") proxy.Communicator.follow(ccevent.ttypes.EventType.EVENT_SKILL_ATTACK_HIT,\ message.actor_, ccevent.ttypes.ChannelType.CHANNEL_ACTOR,\ "playing_team_on_event_skill_attack_hit") ccactor = proxy.EntityManager.get_actor(message.actor_) if ccactor == None: return None playing = team_types.PlayingManager.get(message.playing_) if playing == None: return None ranking = playing.get_ranking() if ranking == None: proxy.Logging.error("[team] playing.get_ranking() failed.") return None; actor = playing.get_actor(message.actor_) if actor == None: actor = team_types.Actor(message.actor_, ccactor.get_name()) playing.add_actor(actor) ranking.add_damage(message.actor_, 0) playing_team_sync_ranking_actor(message.playing_, message.actor_) # 消耗玩家副本次数 request = ccrequest.playing.ttypes.RequestPlayingActorIncreaseComplete() request.playing_template_ = playing.get_template() request.actor_ = message.actor_ # 发送请求 proxy.Request.request(ccrequest.ttypes.RequestType.REQUEST_PLAYING_ACTOR_INCREASE_COMPLETE,\ request) actor.set_leave(False) # 副本管理器中建立一个玩家ID和副本ID的映射关系 team_types.PlayingManager.add_actor(message.actor_, message.playing_) now = time.time() # 请求初始化玩家 request = ccrequest.playing.ttypes.RequestPlayingInitializeActor() request.actor_ = message.actor_ request.spend_time_ = now - playing.get_start_time() request.datas_ = [] request.scores_ = [] # 循环获取玩家杀死的每个NPC for (k,v) in playing.get_kill_npcs().items(): score_field = ccentity.playing.ttypes.PlayingScoreField() score_field.type_ = ccentity.playing.ttypes.PlayingScoreType.KILL_NPC score_field.key_ = k; score_field.value_ = v; request.scores_.append(score_field); # 发送请求 proxy.Request.request(ccrequest.ttypes.RequestType.REQUEST_PLAYING_INITIALIZE_ACTOR,\ request) proxy.Logging.debug("[team] actor(%d) enter into playing" % message.actor_)
def playing_plot_on_event_role_change_hp(message_type, channel, channel_type, serialize): # 事件消息 message = ccevent.role.ttypes.EventRoleChangeHp() # 消息反序列化 TSerialization.deserialize(message, serialize) # 主角类型只能是玩家 if message.type_ != ccentity.entity.ttypes.EntityType.TYPE_ACTOR: return None # 根据玩家ID获取所在副本ID playing_id = plot_types.PlayingManager.get_actor_playing(message.id_) if playing_id == None or playing_id == 0: proxy.Logging.error( "plot_types.PlayingManager.get_actor_playing(%d) failed." % message.id_) return None # 获取副本对象 playing = plot_types.PlayingManager.get(playing_id) if playing == None: proxy.Logging.error("plot_types.PlayingManager.get(%d) failed." % playing_id) return None # 获取玩家对象 playing_actor = playing.get_actor(message.id_) if playing_actor == None: proxy.Logging.error("plot_types.PlayingManager.get_actor(%d) failed." % message.id_) return None # 隐藏NPC是否已召唤 if playing_actor.get_hide_npc() > 0: return None # 获得玩家交互对象 actor = proxy.EntityManager.get_actor(message.id_) if actor == None: proxy.Logging.error("proxy.EntityManager.get_actor(%d) failed." % message.id_) return None max_hp = actor.get_attr_role_aoi(ccentity.role.ttypes.RoleAoiFields.MAX_HP) current_hp = actor.get_attr_role_aoi( ccentity.role.ttypes.RoleAoiFields.CURRENT_HP) if current_hp > (max_hp * 20 / 100): return None playing_config = plot_types.Config.get(playing.get_template()) if playing_config == None: proxy.Logging.error("获取 副本配置失败(%d)" % playing.get_template()) return None playing_actor.inc_hide_npc(1) facade_request.summon_npc(playing.get_scene(), playing_config.get_hide_npc(),\ actor.get_pos_x(), actor.get_pos_y(), 5, 5) proxy.Logging.debug("玩家血量改变,触发隐藏BOSS")