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")
Example #7
0
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_))
Example #12
0
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_))
Example #13
0
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_)
Example #14
0
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")