public Creature GetPlayerCreature(int creatureId, PNmlPlayer data) { CreatureInfo info = ConfigManager.Get <CreatureInfo>(creatureId); 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); }
private void AddPlayerData(PNmlPlayer player) { if (m_bordlandPlayers.ContainsKey(player.roleId)) { Logger.LogWarning("player_uid = {0} is has loaded,check out!", player.roleId); return; } m_bordlandPlayers.Add(player.roleId, player); }
/// <summary> /// 初始化创建玩家 /// </summary> public void CreatePlayerFromModuleData() { //已经创建了玩家直接等待推送 if (m_isInitPlayer) { return; } m_isInitPlayer = true; PNmlPlayer[] players = new PNmlPlayer[m_bordlandPlayers.Count]; m_bordlandPlayers.Values.CopyTo(players, 0); CreatePlayerCreature(players); }
public static int GetProto(this PNmlPlayer data) { if (data == null) { return((int)CreatureVocationType.Vocation1); } if (data.roleProto == (byte)CreatureVocationType.All) { data.roleProto = (byte)data.fashion.GetProto(); } return(data.roleProto); }
protected override void OnLoadComplete() { base.OnLoadComplete(); Window.ShowAsync <Window_Bordlands>(); PNmlPlayer selfData = moduleBordlands.AddSelfPlayerData(); m_hero = moduleBordlands.GetPlayerCreature(modulePlayer.proto, selfData); moduleBordlands.HandlePlayer(m_hero, selfData, true); m_sendMsgTime = Time.realtimeSinceStartup; Camera_Combat.current.lockZ = true; Camera_Combat.enableShotSystem = false; }
private void CreatePlayersFromRecvMsg(PNmlPlayer[] pPlayers) { PNmlPlayer[] playerList = null; pPlayers.CopyTo(ref playerList); //管理本地怪物对象池 for (int i = 0; i < playerList.Length; i++) { PNmlPlayer player = playerList[i]; AddPlayerData(player); } //已经生成了玩家之后,直接创建玩家 if (m_isInitPlayer) { CreatePlayerCreature(playerList); } }
public void HandlePlayer(Creature player, PNmlPlayer info, bool isPlayer = false) { Util.SetLayer(player.gameObject, Layers.MODEL); player.isPlayer = isPlayer; player.enableUpdate = false; player.behaviour.enabled = false; player.gameObject.SetActive(m_playerVisible || isPlayer); player.gameObject.name = isPlayer ? "self" : info.roleName; CharacterEquip.ChangeCloth(player, info.fashion); BordlandsCreature bc = player.activeRootNode.GetComponentDefault <BordlandsCreature>(); PropItemInfo weaponInfo = ConfigManager.Get <PropItemInfo>(info.fashion.weapon); if (weaponInfo) { bc.LoadPlayerRuntimeAnimator(Creature.GetAnimatorName(weaponInfo.subType, info.gender), weaponInfo.subType, (byte)info.gender); } bc.playerType = isPlayer ? BordlandsCreature.BordLandCreatureType.Self : BordlandsCreature.BordLandCreatureType.Player; bc.roleInfo = info; bc.creature = player; bc.InitPVECreatureBehaviour(); bc.creaturePos = info.pos.ToVector3(); if (player.pet) { player.pet.gameObject.SetActive(m_playerVisible || isPlayer); player.pet.position_ = bc.creaturePos - new Vector3(0.45f, 0, 0); } if (!isPlayer) { if (!m_otherPlayerCreatures.ContainsKey(info.roleId)) { m_otherPlayerCreatures.Add(info.roleId, null); } m_otherPlayerCreatures[info.roleId] = bc; } }
/// <summary> /// 需要把玩家自己的信息记录到字典中去,保证自己的位置信息能够更新 /// </summary> public PNmlPlayer AddSelfPlayerData() { PRoleInfo info = modulePlayer.roleInfo; if (m_bordlandPlayers.ContainsKey(info.roleId)) { return(m_bordlandPlayers[info.roleId]); } PNmlPlayer self = PacketObject.Create <PNmlPlayer>(); self.roleId = info.roleId; self.roleProto = (byte)modulePlayer.proto; self.roleName = info.roleName; self.level = (sbyte)info.level; self.gender = (sbyte)modulePlayer.gender; self.state = (byte)EnumBordlandCreatureState.Idle; self.pos = selfInitPosition.ToPPostion(); self.fashion = PacketObject.Create <PFashion>(); self.pet = modulePet.FightingPet != null ? modulePet.FightingPet.Item :null; for (int i = 0, count = moduleEquip.currentDressClothes.Count; i < count; i++) { PItem item = moduleEquip.currentDressClothes[i]; PropItemInfo itemInfo = item?.GetPropItem(); if (itemInfo == null) { continue; } switch (itemInfo.itemType) { case PropType.Weapon: if (itemInfo.subType != (byte)WeaponSubType.Gun) { self.fashion.weapon = item.itemTypeId; } else { self.fashion.gun = item.itemTypeId; } break; case PropType.FashionCloth: switch ((FashionSubType)itemInfo.subType) { case FashionSubType.UpperGarment: case FashionSubType.FourPieceSuit: case FashionSubType.TwoPieceSuit: self.fashion.clothes = item.itemTypeId; break; case FashionSubType.Pants: self.fashion.trousers = item.itemTypeId; break; case FashionSubType.Glove: self.fashion.glove = item.itemTypeId; break; case FashionSubType.Shoes: self.fashion.shoes = item.itemTypeId; break; case FashionSubType.Hair: self.fashion.hair = item.itemTypeId; break; case FashionSubType.ClothGuise: self.fashion.guiseId = item.itemTypeId; break; case FashionSubType.HeadDress: self.fashion.headdress = item.itemTypeId; break; case FashionSubType.HairDress: self.fashion.hairdress = item.itemTypeId; break; case FashionSubType.FaceDress: self.fashion.facedress = item.itemTypeId; break; case FashionSubType.NeckDress: self.fashion.neckdress = item.itemTypeId; break; } break; } } AddPlayerData(self); return(self); }
void _Packet(ScNmlSceneObjState p) { EnumBordlandCreatureState state = (EnumBordlandCreatureState)p.state; if (m_bordlandMonster.ContainsKey(p.uid)) { Logger.LogInfo("monster.uid = {0},state change to {1}", p.uid, state); if (state == EnumBordlandCreatureState.LeaveFromScene) { m_bordlandMonster.Remove(p.uid); BordlandsCreature bc = m_monsterCreature.Get(p.uid); if (bc) { bc.gameObject.SetActive(false); bc.ResetToOriginal(); m_monsterCreature.Remove(p.uid); AddDeadMonsterCreature(bc.creature as MonsterCreature); } } else { //更新数据层 PNmlMonster pm = m_bordlandMonster.Get(p.uid); if (pm != null) { pm.state = p.state; } //更新UI层 BordlandsCreature bc = m_monsterCreature.Get(p.uid); if (bc) { bc.monsterData.state = p.state; bc.isInBattle = state == EnumBordlandCreatureState.Fighting; } } } else if (m_bordlandPlayers.ContainsKey(p.uid)) { Logger.LogInfo("player.uid = {0},state change to {1}", p.uid, state); if (state == EnumBordlandCreatureState.LeaveFromScene) { m_bordlandPlayers.Remove(p.uid); BordlandsCreature bc = m_otherPlayerCreatures.Get(p.uid); if (bc) { //离开后需要关掉宠物AI if (bc.creature.pet != null) { moduleAI.RemovePetAI(bc.creature.pet); } bc.gameObject.SetActive(false); m_otherPlayerCreatures.Remove(p.uid); bc.creature.Destroy(); } } else { PNmlPlayer pm = m_bordlandPlayers.Get(p.uid); if (pm != null) { pm.state = p.state; } BordlandsCreature bc = m_otherPlayerCreatures.Get(p.uid); if (bc) { bc.roleInfo.state = p.state; bc.isInBattle = state == EnumBordlandCreatureState.Fighting; } } } else { Logger.LogError("scene_obj_uid = {0} doesn't load,check out!", p.uid); } }