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)
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_))
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.")
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_)