예제 #1
0
    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);
    }
예제 #2
0
 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);
 }
예제 #3
0
    /// <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);
    }
예제 #4
0
    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);
    }
예제 #5
0
    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;
    }
예제 #6
0
    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);
        }
    }
예제 #7
0
    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;
        }
    }
예제 #8
0
    /// <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);
    }
예제 #9
0
    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);
        }
    }