public Creature GetPlayerCreature(int creatureId, PMazePlayer data) { CreatureInfo info = ConfigManager.Get <CreatureInfo>(creatureId); if (!info) { Logger.LogError("Get CreatureInfo failed, could not find template config: {0}", creatureId); return(null); } var prop = ConfigManager.Get <PropItemInfo>(data.fashion.weapon); if (prop) { info.weaponID = prop.subType; info.weaponItemID = data.fashion.weapon; } Creature player = Creature.Create(info, Vector3.zero, new Vector3(0f, 90f, 0f), data.roleId.Equals(modulePlayer.roleInfo.roleId), false); if (data.pet != null && data.pet.itemTypeId != 0) { player.pet = PetCreature.Create(player, PetInfo.Create(data.pet), player.position_, player.eulerAngles, false, Module_Home.PET_OBJECT_NAME); if (player.pet != null) { if (!moduleAI.IsStartAI) { moduleAI.StartAI(); } player.pet.DisableSkills(true); moduleAI.AddPetAI(player.pet); } } return(player); }
public void InitCreatureData(Creature creature, PMazePlayer info) { this.creature = creature; roleInfo = info; PropItemInfo weaponInfo = ConfigManager.Get <PropItemInfo>(info.fashion.weapon); if (weaponInfo) { LoadPlayerRuntimeAnimator(Creature.GetAnimatorName(weaponInfo.subType, info.gender), weaponInfo.subType, info.gender); } CreatePlayerCollider(); InitPVECreatureBehaviour(); switch (playerType) { //随机坐标 case LabyrinthCreatureType.OutLabyrinth: float x = Random.Range((float)Level.current.edge.x, (float)Level.current.edge.y); float z = Random.Range((float)Level.current.zEdge.x, (float)Level.current.zEdge.y); creaturePos = new Vector3(x, 0, z); break; //服务器返回的坐标 case LabyrinthCreatureType.InLabyrinth: creaturePos = info.pos == null ? Vector3.zero : info.pos.ToVector3(); break; } }
public void SendLabyrinthSneak(PMazePlayer player) { var p = PacketObject.Create <CsMazeSneak>(); p.uid = player.roleId; lastSneakPlayer = player; session.Send(p); }
void _Packet(CScMazeScenePlayerMove p) { PMazePlayer player = GetTargetPlayer(p.roleId); if (player != null) { player.pos = p.pos; } DispatchModuleEvent(EventPlayerPosChange, p); }
public static int GetProto(this PMazePlayer data) { if (data == null) { return((int)CreatureVocationType.Vocation1); } if (data.roleProto == (byte)CreatureVocationType.All) { data.roleProto = (byte)data.fashion.GetProto(); } return(data.roleProto); }
public void HandlePlayer(Creature player, PMazePlayer info, bool isPlayer = false) { Util.SetLayer(player.gameObject, Layers.MODEL); player.isPlayer = isPlayer; player.enableUpdate = false; player.behaviour.enabled = false; player.visible = moduleLabyrinth.playerVisible || isPlayer; if (player.pet) { player.pet.visible = player.visible; } player.gameObject.name = isPlayer ? "self" : info.roleName; CharacterEquip.ChangeCloth(player, info.fashion); LabyrinthCreature lc = player.activeRootNode.GetComponentDefault <LabyrinthCreature>(); lc.InitCreatureData(player, info); if (!isPlayer) { m_players.Add(lc); } }
/// <summary> /// 服务器推送玩家信息,,推送回来的可能只是修改后的玩家信息 /// </summary> /// <param name="p"></param> void _Packet(ScMazeScenePlayer p) { PMazePlayer[] players = null; p.playerList.CopyTo(ref players); //对玩家进行排序,并重新填充 List <PMazePlayer> allPlayerList = new List <PMazePlayer>(); //先填充已有数据 if (areaPlayerDic != null) { Dictionary <EnumLabyrinthArea, List <PMazePlayer> > .Enumerator e = areaPlayerDic.GetEnumerator(); while (e.MoveNext()) { allPlayerList.AddRange(e.Current.Value); } } //再覆盖老数据 List <PMazePlayer> needAddList = new List <PMazePlayer>(); for (int i = 0; i < players.Length; i++) { PMazePlayer pp = players[i]; bool isContain = false; for (int j = 0; j < allPlayerList.Count; j++) { if (pp.roleId == allPlayerList[j].roleId) { allPlayerList[j] = pp; isContain = true; break; } } if (!isContain) { needAddList.Add(pp); } } //将新增的数据直接填充到列表中 allPlayerList.AddRange(needAddList); //将收到的玩家列表中自己的数据更新 if (labyrinthSelfInfo != null) { for (int i = 0; i < allPlayerList.Count; i++) { if (allPlayerList[i].roleId == modulePlayer.id_) { allPlayerList[i].mazeLayer = labyrinthSelfInfo.mazeLayer; break; } } } foreach (var item in allPlayerList) { if (item.fashion == null) { Logger.LogError("roleId = {0} roleName = {1} fashion data is null", item.roleId, item.roleName); if (item.roleId == modulePlayer.id_) { item.fashion = GetSelfFashion(); } else { item.fashion = GetRandomFashion(item.gender, item.roleProto); } } } //协议异常到连自己的信息都没有了 if (allPlayerList.FindIndex(o => o.roleId == modulePlayer.id_) < 0) { var se = PacketObject.Create <PMazePlayer>(); se.roleId = modulePlayer.id_; se.roleName = modulePlayer.roleInfo.roleName; se.roleProto = (byte)modulePlayer.proto; se.gender = (byte)modulePlayer.gender; se.mazeLayer = m_labyrinthSelfInfo == null ? (byte)0 : m_labyrinthSelfInfo.mazeLayer; se.lastMazeLevel = 0; se.mazeState = (byte)EnumLabyrinthPlayerState.Battle; se.fashion = GetSelfFashion(); if (modulePet.FightingPet != null) { se.pet = modulePet.FightingPet.Item; } allPlayerList.Add(se); } allPlayerList.Sort((a, b) => { //层数相同先过关的玩家优先显示 if (a.mazeLayer == b.mazeLayer) { return(a.layerTime.CompareTo(b.layerTime)); } return(-a.mazeLayer.CompareTo(b.mazeLayer)); }); RefreshAreaPlayers(allPlayerList); DispatchModuleEvent(EventRefreshPlayers, areaPlayerDic); DispatchModuleEvent(EventCreatePlayers); }
public void OnSneakSettleOver() { lastSneakPlayer = null; sneakPlayerDetail = null; isSneakSuccess = false; }