コード例 #1
0
def playing_team_sync_ranking_actor(playing_id, actor_id):
  # 获取副本对象
  playing = team_types.PlayingManager.get(playing_id)
  if playing == None:
    proxy.Logging.error("[team] PlayingManager.get(%d) failed." % playing_id)
    return None

  ranking = playing.get_ranking()
  if ranking == None:
    proxy.Logging.error("[team] playing.get_ranking() failed.")

  request = ccrequest.playing.ttypes.RequestPlayingSynchronizeRanking()
  request.actors_ = []
  request.ranking_ = []

  request.actors_.append(actor_id)

  for actor_rank in ranking.get_ranking():
    actor = playing.get_actor(actor_rank.get_id())
    if actor != None:
      field = ccentity.playing.ttypes.PlayingRankingField()
      field.name_ = actor.get_name()
      field.value_ = actor_rank.get_damage()
      request.ranking_.append(field)

  proxy.Request.request(ccrequest.ttypes.RequestType.REQUEST_PLAYING_SYNCHRONIZE_RANKING, request)
コード例 #2
0
def playing_team_on_event_skill_attack_hit(message_type, channel, channel_type, serialize):
  # 事件消息
  message = ccevent.skill.ttypes.EventSkillAttackHit()
  TSerialization.deserialize(message, serialize)

  if message.dest_type_ != ccentity.entity.ttypes.EntityType.TYPE_NPC or\
      message.type_ != ccentity.entity.ttypes.EntityType.TYPE_ACTOR:
    return None;

  if message.hurt_type_ != ccentity.skill.ttypes.SkillHurtType.PHYSICS_ATTACK and\
      message.hurt_type_ != ccentity.skill.ttypes.SkillHurtType.MAGIC_ATTACK and\
      message.hurt_type_ != ccentity.skill.ttypes.SkillHurtType.REDUCE_HP:
    return None

  # 获取玩家所在副本ID
  playing_id = team_types.PlayingManager.get_actor_playing(message.id_)
  if playing_id == None or playing_id == 0:
    proxy.Logging.error("[team] PlayingManager.get_actor_playing(%d) failed" % message.id_)
    return None

  playing = team_types.PlayingManager.get(playing_id)
  if playing == None:
    proxy.Logging.error("[team] PlayingManager.get(%d) failed" % playing_id)
    return None

  actor = playing.get_actor(message.id_)
  if actor == None:
    proxy.Logging.error("[team] playing.get_actor(%d) failed" % message.id_)
    return None

  ranking = playing.get_ranking()
  if ranking == None:
    proxy.Logging.error("[team] playing.get_ranking() failed.")
    return None;

  ranking.add_damage(message.id_, message.value_)
  actor.add_damage(message.value_)

  proxy.Logging.debug("[team] actor(%d) hit npc(%d)" % (message.id_, message.dest_id_))
コード例 #3
0
def playing_team_sync_ranking(id):
  # 获取副本对象
  playing = team_types.PlayingManager.get(id)
  if playing == None:
    proxy.Logging.error("[team] PlayingManager.get(%d) failed." % id)
    return None

  actors = playing.get_actors()
  if actors == None:
    proxy.Logging.error("[team] playing.get_actors() failed.")
    return None

  ranking = playing.get_ranking()
  if ranking == None:
    proxy.Logging.error("[team] playing.get_ranking() failed.")

  request = ccrequest.playing.ttypes.RequestPlayingSynchronizeRanking()
  request.actors_ = []
  request.ranking_ = []

  """
  for (k,v) in actors.items():
    request.actors_.append(k)
  """

  for actor_rank in ranking.get_ranking():
    actor = playing.get_actor(actor_rank.get_id())
    if actor != None:
      field = ccentity.playing.ttypes.PlayingRankingField()
      field.name_ = actor.get_name()
      field.value_ = actor_rank.get_damage()
      request.ranking_.append(field)
      if actor.get_leave() == False:
        request.actors_.append(actor_rank.get_id())

  proxy.Request.request(ccrequest.ttypes.RequestType.REQUEST_PLAYING_SYNCHRONIZE_RANKING, request)

  proxy.Logging.debug("[team] playing_team_on_timer_sync_ranking expired.")
コード例 #4
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_)