示例#1
0
 public void CleanUp()
 {
     m_PlayerData.Clear();
     m_BackPack = new ItemPack(ItemPack.SIZE_BACKPACK, ItemPack.Type.TYPE_BACKPACK);
     //玩家创建数据缓存
     m_CreateMainPlayerCache = new Obj_Init_Data();
 }
示例#2
0
        public static void CreateModelNpcObj(int nCharModelID, Obj_Init_Data initData, DelAsycModelOver delAsycStroyModel)
        {
            if (initData == null)
            {
                LogModule.ErrorLog("CreateModelNpcObj called but initData == null is null!");
            }
            //NPC创建的时候统一用RoleBase中的ID,而不用Obj_Init_Data结构中的CharModelID
            Tab_CharModel charModel = TableManager.GetCharModelByID(nCharModelID, 0);

            if (null == charModel)
            {
                return;
            }

            GameObject npc = ResourceManager.InstantiateResource("Prefab/Model/NPCRoot", initData.m_ServerID.ToString()) as GameObject;

            //GameObject npc = CreateGameObjectByResource(initData);
            if (null != npc)
            {
                //加载逻辑体,同时异步加载渲染体
                Obj_NPC objNPC = (Obj_NPC)npc.GetComponent <Obj_NPC>();
                if (!objNPC)
                {
                    objNPC = (Obj_NPC)npc.AddComponent <Obj_NPC>();
                }

                if (objNPC && objNPC.Init(initData))
                {
                    objNPC.CanLogic = true;
                    Singleton <ObjManager> .Instance.AddPoolObj(objNPC.ServerID.ToString(), objNPC);
                }
                LoadModelToRoot(nCharModelID, EResourceType.CharacterModel, LoadModelComplete, npc, charModel, null);
                Singleton <ObjManager> .Instance.CachedNpc(npc.name, npc, objNPC.IsNeedBecameVisible());
            }
        }
示例#3
0
        public uint Execute(PacketDistributed ipacket)
        {
            GC_CREATE_FELLOW packet = (GC_CREATE_FELLOW)ipacket;

            if (null == packet)
            {
                return((uint)PACKET_EXE.PACKET_EXE_ERROR);
            }

            //判断ServerID是否合法
            if (packet.ServerId < 0)
            {
                return((uint)PACKET_EXE.PACKET_EXE_CONTINUE);
            }
            //安全措施,如果发现ServerID已经存在,则先移除掉
            if (Singleton <ObjManager> .GetInstance().IsObjExist(packet.ServerId))
            {
                Singleton <ObjManager> .GetInstance().RemoveObj(packet.ServerId);
            }

            Obj_Init_Data initData = new Obj_Init_Data();

            initData.m_ServerID      = packet.ServerId;
            initData.m_fX            = ((float)packet.PosX) / 100;
            initData.m_fZ            = ((float)packet.PosZ) / 100;
            initData.m_RoleBaseID    = packet.DataId;
            initData.m_Force         = packet.Curforce;
            initData.m_StrName       = packet.Name;
            initData.m_Guid          = packet.Guid;
            initData.m_OwnerObjId    = packet.Ownerobjid;
            initData.m_MoveSpeed     = ((float)packet.Movespeed) / 100;
            initData.m_fDir          = (float)packet.Facedir / 100;
            initData.m_StealthLev    = packet.StealthLev;
            initData.m_FellowQuality = packet.Quality;
            if (packet.HasBindparent)
            {
                initData.m_BindParent = packet.Bindparent;
            }
            initData.m_BindChildren.Clear();
            for (int nindex = 0; nindex < GlobeVar.BIND_CHILDREN_MAX; ++nindex)
            {
                if (nindex < packet.bindchildrenCount)
                {
                    initData.m_BindChildren.Add(packet.GetBindchildren(nindex));
                }
                else
                {
                    initData.m_BindChildren.Add(-1);
                }
            }
            Singleton <ObjManager> .GetInstance().NewCharacterObj(Games.GlobeDefine.GameDefine_Globe.OBJ_TYPE.OBJ_FELLOW, initData);

            //enter your logic
            return((uint)PACKET_EXE.PACKET_EXE_CONTINUE);
        }
示例#4
0
    public override bool Init(Obj_Init_Data initData)
    {
        BaseAttr.MoveSpeed = m_fMoveSpeed;
        //服务器发过来的信息
        m_ObjType  = Games.GlobeDefine.GameDefine_Globe.OBJ_TYPE.OBJ_ZOMBIE_PLAYER;
        StealthLev = initData.m_StealthLev;
        OptStealthLevChange();
        if (null == transform)
        {
            m_ObjTransform = transform;
        }

        return(base.Init(initData));
    }
示例#5
0
        /// <summary>
        /// 后期可以 看情况 跟OtherPlayer的创建 合并
        /// </summary>
        /// <param name="initData"></param>
        public static void CreateZombieUser(Obj_Init_Data initData)
        {
            if (null == initData)
            {
                return;
            }

            //mwh 根据RoleBase的ID获得路径
            Tab_RoleBaseAttr roleBaseAttr = TableManager.GetRoleBaseAttrByID(initData.m_RoleBaseID, 0);

            if (null == roleBaseAttr)
            {
                return;
            }
            initData.m_CharModelID = roleBaseAttr.CharModelID;
            GameObject otherPlayer = ResourceManager.InstantiateResource("Prefab/Model/OtherPlayerRoot", initData.m_ServerID.ToString()) as GameObject;

            if (null != otherPlayer)
            {
                Obj_ZombieUser objZombiePlayer = otherPlayer.AddComponent <Obj_ZombieUser>();

                if (null != objZombiePlayer && objZombiePlayer.Init(initData))
                {
                    objZombiePlayer.CanLogic = true;
                }

                Tab_ItemVisual tabItemVisual = TableManager.GetItemVisualByID(objZombiePlayer.ModelVisualID, 0);
                if (tabItemVisual == null)
                {
                    tabItemVisual = TableManager.GetItemVisualByID(GlobeVar.DEFAULT_VISUAL_ID, 0);
                    if (tabItemVisual == null)
                    {
                        return;
                    }
                }
                int           nCharmodelID = objZombiePlayer.GetCharModelID(tabItemVisual, objZombiePlayer.Profession);
                Tab_CharModel charModel    = TableManager.GetCharModelByID(nCharmodelID, 0);
                if (charModel == null)
                {
                    return;
                }
                Singleton <ObjManager> .Instance.AddPoolObj(objZombiePlayer.ServerID.ToString(), objZombiePlayer);

                LoadModelToRoot(nCharmodelID, EResourceType.CharacterModel, LoadModelComplete, otherPlayer, charModel,
                                null);
            }
        }
示例#6
0
        public override bool Init(Obj_Init_Data initData)
        {
            if (base.Init(initData))
            {
                return(false);
            }
            ObjEffectController = gameObject.GetComponent <CharacterEffectBehaviourController>();
            if (ObjEffectController == null)
            {
                ObjEffectController = gameObject.AddComponent <CharacterEffectBehaviourController>();
            }

            AnimLogic = gameObject.GetComponent <AnimationLogic>();
            if (AnimLogic == null)
            {
                AnimLogic = gameObject.AddComponent <AnimationLogic>();
            }
            return(true);
        }
示例#7
0
        //创建伙伴
        public static void CreateFellowModel(Obj_Init_Data initData)
        {
            if (null == initData)
            {
                return;
            }

            Tab_CabalFellowAttr fellowAttr = TableManager.GetCabalFellowAttrByID(initData.m_RoleBaseID, 0);

            if (null == fellowAttr)
            {
                return;
            }
            //根据ModelId找到CharModel资源
            Tab_CharModel charModel = TableManager.GetCharModelByID(fellowAttr.ModelId, 0);

            if (null == charModel)
            {
                return;
            }
            GameObject fellow = ResourceManager.InstantiateResource("Prefab/Model/FellowRoot", initData.m_ServerID.ToString()) as GameObject;

            if (null != fellow)
            {
                //加载逻辑体,同时异步加载渲染体
                Obj_Fellow objFellow = fellow.AddComponent <Obj_Fellow>();

                if (objFellow && objFellow.Init(initData))
                {
                    objFellow.CanLogic = true;
                    Singleton <ObjManager> .Instance.AddPoolObj(objFellow.ServerID.ToString(), objFellow);
                }
                LoadModelToRoot(fellowAttr.ModelId, EResourceType.CharacterModel, LoadModelComplete, fellow, charModel,
                                null);
                //ReloadModel(fellow, charModel.ResPath, AsycCreateFellowOver, initData);
            }
        }
        public uint Execute(PacketDistributed ipacket)
        {
            GC_CREATE_ZOMBIEUSER packet = (GC_CREATE_ZOMBIEUSER)ipacket;

            if (null == packet)
            {
                return((uint)PACKET_EXE.PACKET_EXE_ERROR);
            }
            //安全措施,如果发现ServerID已经存在,则先移除掉
            if (Singleton <ObjManager> .GetInstance().IsObjExist(packet.ServerId))
            {
                Singleton <ObjManager> .GetInstance().RemoveObj(packet.ServerId);
            }

            Obj_Init_Data initData = new Obj_Init_Data();

            //  initData.CleanUp();
            initData.m_ServerID   = packet.ServerId;
            initData.m_fX         = ((float)packet.PosX) / 100;
            initData.m_fZ         = ((float)packet.PosZ) / 100;
            initData.m_RoleBaseID = packet.DataId;
            initData.m_Force      = packet.Curforce;
            if (!string.IsNullOrEmpty(packet.Name))
            {
                char   firstChar    = packet.Name[0];
                string szNameResult = "";
                if (firstChar == '#' && 0 == StrDictionary.GetServerDictionaryFormatString(packet.Name, ref szNameResult))
                {
                    initData.m_StrName = szNameResult;
                }
                else
                {
                    initData.m_StrName = packet.Name;
                }
            }

            initData.m_IsDie           = packet.IsDie == 1 ? true : false;
            initData.m_MoveSpeed       = ((float)packet.Movespeed) / 100;
            initData.m_fDir            = (float)packet.Facedir / 100;
            initData.m_ModelVisualID   = packet.ModelVisualID;
            initData.m_WeaponDataID    = packet.Weaponid;
            initData.m_WeaponEffectGem = packet.WeaponEffectGem;
            initData.m_StealthLev      = packet.StealthLev;
            initData.m_nProfession     = packet.Profession;
            if (packet.HasBindparent)
            {
                initData.m_BindParent = packet.Bindparent;
            }
            initData.m_BindChildren.Clear();
            for (int nindex = 0; nindex < GlobeVar.BIND_CHILDREN_MAX; ++nindex)
            {
                if (nindex < packet.bindchildrenCount)
                {
                    initData.m_BindChildren.Add(packet.GetBindchildren(nindex));
                }
                else
                {
                    initData.m_BindChildren.Add(-1);
                }
            }
            Singleton <ObjManager> .GetInstance().NewCharacterObj(Games.GlobeDefine.GameDefine_Globe.OBJ_TYPE.OBJ_ZOMBIE_PLAYER, initData);

            return((uint)PACKET_EXE.PACKET_EXE_CONTINUE);
        }
示例#9
0
        public uint Execute(PacketDistributed ipacket)
        {
            GC_CREATE_PLAYER packet = (GC_CREATE_PLAYER)ipacket;

            if (null == packet)
            {
                return((uint)PACKET_EXE.PACKET_EXE_ERROR);
            }

            //enter your logic
            //判断是MainPlayer还是其他Obj
            PlayerData playerDataPool = GameManager.gameManager.PlayerDataPool;

            if (playerDataPool.EnterSceneCache.EnterSceneServerID == packet.ServerId &&
                playerDataPool.EnterSceneCache.EnterSceneSceneID == packet.SceneClass)
            {
                playerDataPool.MainPlayerBaseAttr.RoleBaseID = packet.DataId;
                playerDataPool.MainPlayerBaseAttr.RoleName   = packet.Name;
                playerDataPool.MainPlayerBaseAttr.Force      = packet.Curforce;
                playerDataPool.MainPlayerBaseAttr.Die        = packet.IsDie == 1 ? true : false;
                //未存入BaseAttr而保存在Obj类中的时候,需要存入EnterSceneCache,然后在创建完Obj_MainPlayer的时候赋值,之后清空EnterSceneCache
                playerDataPool.EnterSceneCache.EnterSceneRoleBaseID = packet.DataId;
                playerDataPool.EnterSceneCache.Guid       = packet.Guid;
                playerDataPool.EnterSceneCache.Profession = packet.CurProfession;
                playerDataPool.PkModle = packet.PKModle;
                playerDataPool.m_objMountParam.MountID      = packet.MountID;
                playerDataPool.MainPlayerBaseAttr.MoveSpeed = (int)(packet.MoveSpeed / 100);
                playerDataPool.StealthLev = packet.StealthLev;
                if (packet.HasReliveTime)
                {
                    playerDataPool.ReliveEntryTime = packet.ReliveTime;
                }
                //临时代码,将OtherPlayer的ModelID赋值,从RoleBase表中读取
                Tab_RoleBaseAttr roleBaseAttr = TableManager.GetRoleBaseAttrByID(packet.DataId, 0);
                if (null != roleBaseAttr)
                {
                    playerDataPool.EnterSceneCache.EnterSceneCharModelID = roleBaseAttr.CharModelID;
                }
                playerDataPool.EnterSceneCache.ModelVisualID   = packet.ModelVisualID;
                playerDataPool.EnterSceneCache.WeaponDataID    = packet.WeaponDataID;
                playerDataPool.EnterSceneCache.WeaponEffectGem = packet.WeaponEffectGem;
                if (packet.HasPaoshangState)
                {
                    playerDataPool.EnterSceneCache.PaoShangState = packet.PaoshangState;
                }
                if (packet.HasVipCost)
                {
                    playerDataPool.VipCost = packet.VipCost;
                }
                if (packet.HasCombatValue)
                {
                    playerDataPool.PoolCombatValue = packet.CombatValue;
                }
                if (packet.HasBindparent)
                {
                    playerDataPool.MainBindParent = packet.Bindparent;
                }
                if (packet.HasLightSkillLevel)
                {
                    playerDataPool.MainPlayerBaseAttr.LightSkillLevel = packet.LightSkillLevel;
                }
                playerDataPool.MainBindChildren.Clear();
                for (int nindex = 0; nindex < GlobeVar.BIND_CHILDREN_MAX; ++nindex)
                {
                    if (nindex < packet.bindchildrenCount)
                    {
                        playerDataPool.MainBindChildren.Add(packet.GetBindchildren(nindex));
                    }
                    else
                    {
                        playerDataPool.MainBindChildren.Add(-1);
                    }
                }
                if (GameManager.gameManager.RunningScene == GameManager.gameManager.PlayerDataPool.EnterSceneCache.EnterSceneSceneID &&
                    GameManager.gameManager.PlayerDataPool.EnterSceneCache.EnterSceneServerID != -1 &&
                    GameManager.gameManager.PlayerDataPool.EnterSceneCache.EnterSceneRoleBaseID != -1)
                {
                    //创建MainPlayer
                    if ((int)Games.GlobeDefine.GameDefine_Globe.SCENE_DEFINE.SCENE_LOGIN != GameManager.gameManager.RunningScene &&
                        (int)Games.GlobeDefine.GameDefine_Globe.SCENE_DEFINE.SCENE_FB_CABALINTRO != GameManager.gameManager.RunningScene)
                    {
                        Singleton <ObjManager> .GetInstance().CreateMainPlayer();
                    }
                }
            }
            else
            {
                //如果不是主角则是其他玩家
                //其他玩家创建的时候首先判断场景ID
                if (GameManager.gameManager.RunningScene != packet.SceneClass)
                {
                    return((uint)PACKET_EXE.PACKET_EXE_CONTINUE);
                }

                Obj_Init_Data initData = new Obj_Init_Data();
                initData.m_ServerID   = packet.ServerId;
                initData.m_Guid       = packet.Guid;
                initData.m_fX         = ((float)packet.PosX) / 100;
                initData.m_fZ         = ((float)packet.PosZ) / 100;
                initData.m_RoleBaseID = packet.DataId;
                //LogModule.DebugLog("Player GUID===================" + initData.m_Guid);
                //临时代码,将OtherPlayer的ModelID赋值,从RoleBase表中读取
                Tab_RoleBaseAttr roleBaseAttr = TableManager.GetRoleBaseAttrByID(initData.m_RoleBaseID, 0);
                if (null != roleBaseAttr)
                {
                    initData.m_CharModelID = roleBaseAttr.CharModelID;
                }
                initData.m_Force                = packet.Curforce;
                initData.m_StrName              = packet.Name;
                initData.m_nProfession          = packet.CurProfession;
                initData.m_strTitleName         = packet.Titlename;
                initData.m_CurTitleID           = packet.CurTitleID;
                initData.m_isInMainPlayerPKList = (packet.IsInPkList == 1 ? true : false);
                initData.m_IsDie                = packet.IsDie == 1 ? true : false;
                initData.m_MountID              = packet.MountID;
                initData.m_PkModel              = packet.PKModle;
                initData.m_MoveSpeed            = ((float)packet.MoveSpeed) / 100;
                initData.m_fDir                      = (float)packet.Facedir / 100;
                initData.m_ModelVisualID             = packet.ModelVisualID;
                initData.m_WeaponDataID              = packet.WeaponDataID;
                initData.m_WeaponEffectGem           = packet.WeaponEffectGem;
                initData.m_StealthLev                = packet.StealthLev;
                initData.m_GuildGuid                 = packet.GuildGuid;
                initData.m_bIsWildEnemyForMainPlayer = (packet.IsEnemy2Self == 1);
                if (packet.HasVipCost)
                {
                    initData.m_nOtherVipCost = packet.VipCost;
                }
                if (packet.HasCombatValue)
                {
                    initData.m_nOtherCombatValue = packet.CombatValue;
                }
                if (packet.HasBindparent)
                {
                    initData.m_BindParent = packet.Bindparent;
                }
                initData.m_BindChildren.Clear();
                for (int nindex = 0; nindex < GlobeVar.BIND_CHILDREN_MAX; ++nindex)
                {
                    if (nindex < packet.bindchildrenCount)
                    {
                        initData.m_BindChildren.Add(packet.GetBindchildren(nindex));
                    }
                    else
                    {
                        initData.m_BindChildren.Add(-1);
                    }
                }
                if (packet.HasPaoshangState)
                {
                    initData.m_nPaoShangState = packet.PaoshangState;
                }
                if (packet.HasFollowState)
                {
                    initData.m_bIsInTeamFollow = (packet.FollowState == 1 ? true : false);
                }

                //稍后添加消息包
                initData.m_changeState = packet.ChangeState;
                initData.m_FlyWingId   = packet.FlyWingId;
                Singleton <ObjManager> .GetInstance().NewCharacterObj(Games.GlobeDefine.GameDefine_Globe.OBJ_TYPE.OBJ_OTHER_PLAYER, initData);

                //魂器
                Dictionary <UInt64, Dictionary <int, Belle> > AllOtherPlayerBellDic = BelleData.AllOtherPlayerBelleMap;
                Dictionary <int, Belle> otherPlayerBelleDic;
                if (AllOtherPlayerBellDic.TryGetValue(packet.Guid, out otherPlayerBelleDic))
                {
                    AllOtherPlayerBellDic.Remove(packet.Guid);
                }
                otherPlayerBelleDic = new Dictionary <int, Belle>();
                AllOtherPlayerBellDic.Add(packet.Guid, otherPlayerBelleDic);

                if (packet.BelleIdCount == packet.BelleCloseCount && packet.BelleCloseCount == packet.BelleLevelCount)
                {
                    for (int i = packet.BelleIdCount - 1; i > -1; --i)
                    {
                        otherPlayerBelleDic.Add(packet.GetBelleId(i), new Belle(packet.GetBelleId(i), packet.GetBelleClose(i), packet.GetBelleLevel(i)));
                    }
                }
            }

            return((uint)PACKET_EXE.PACKET_EXE_CONTINUE);
        }
示例#10
0
        public override bool Init(Obj_Init_Data initData)
        {
            if (null == m_ObjTransform)
            {
                m_ObjTransform = gameObject.transform;
            }

            m_ObjTransform.position = ActiveScene.GetTerrainPosition(new Vector3(initData.m_fX, 0, initData.m_fZ));

            //暂时 写死了 后面再用服务器
            m_ObjTransform.Rotate(Vector3.up * 135);

            //服务器发过来的信息
            this.ServerID       = initData.m_ServerID;
            BaseAttr.RoleBaseID = initData.m_RoleBaseID;
            BaseAttr.RoleName   = initData.m_StrName;
            m_OwnerObjId        = initData.m_OwnerObjId;
            StealthLev          = initData.m_StealthLev;
            m_Quality           = initData.m_FellowQuality;
            OptStealthLevChange();
            //防止伙伴追上人物导致动作不流畅 把客户端主角伙伴速度修改为和人物一样
            if (IsOwnedByMainPlayer() == true)
            {
                Singleton <ObjManager> .GetInstance().MainPlayer.CurFellowObjId = ServerID;

                Singleton <ObjManager> .GetInstance().MainPlayer.CurFellowObjGuid = initData.m_Guid;

                BaseAttr.MoveSpeed = Singleton <ObjManager> .GetInstance().MainPlayer.BaseAttr.MoveSpeed;
            }
            else
            {
                Obj_OtherPlayer otherPlayer = Singleton <ObjManager> .Instance.FindObjInScene(m_OwnerObjId) as Obj_OtherPlayer;

                if (null != otherPlayer)
                {
                    otherPlayer.FellowID = ServerID;
                    m_bVisible           = otherPlayer.IsVisibleChar();
                }

                BaseAttr.MoveSpeed = initData.m_MoveSpeed;
            }
            Tab_CabalFellowAttr fellowAttrTab = TableManager.GetCabalFellowAttrByID(BaseAttr.RoleBaseID, 0);

            if (fellowAttrTab != null)
            {
                //初始化CharModelID,并读取部分客户端信息
                ModelID = fellowAttrTab.ModelId;
                Tab_CharModel charModel = TableManager.GetCharModelByID(ModelID, 0);
                if (null != charModel)
                {
                    BaseAttr.HeadPic = charModel.HeadPic;
                    //设置动作路径
                    AnimationFilePath = charModel.AnimPath;
                    //设置名字版高度
                    DeltaHeight = charModel.HeadInfoHeight;

                    m_ObjTransform.localScale    = new Vector3(charModel.Scale, charModel.Scale, charModel.Scale);
                    m_ObjTransform.localRotation = Utils.DirServerToClient(initData.m_fDir);
                }
            }


            //初始化寻路代理
            InitNavAgent();

            //初始化AutoMove功能模块
            //if (gameObject.GetComponent<AutoMove>() == null)
            //{
            gameObject.AddComponent <AutoMove>();
            //}

            //初始化动画,需要在AnimationFilePath被赋值后进行
            if (AnimLogic == null)
            {
                AnimLogic = gameObject.AddComponent <AnimationLogic>();
            }
            //初始化特效
            if (ObjEffectController == null)
            {
                ObjEffectController = gameObject.AddComponent <CharacterEffectBehaviourController>();
            }

            //召出播放特效
            if (Singleton <ObjManager> .GetInstance().MainPlayer != null)
            {
                if (m_OwnerObjId == Singleton <ObjManager> .GetInstance().MainPlayer.ServerID)
                {
                    if (GameManager.gameManager.PlayerDataPool.FellowPlayerEffect == true)
                    {
                        //PlayEffect(52);
                        GameManager.gameManager.PlayerDataPool.FellowPlayerEffect = false;
                    }
                }
            }

            if (IsDie())
            {
                OnCorpse();
            }
            else
            {
                if (Objanimation != null)
                {
                    Objanimation.Stop();
                }
                CurObjAnimState = Games.GlobeDefine.GameDefine_Globe.OBJ_ANIMSTATE.STATE_NORMOR;
            }

            InitNameBoard();

            return(base.Init(initData));
        }
示例#11
0
        public override bool Init(Obj_Init_Data initData)
        {
            if (null == m_ObjTransform)
            {
                m_ObjTransform = transform;
            }

            m_ObjTransform.position = ActiveScene.GetTerrainPosition(new Vector3(initData.m_fX, 0, initData.m_fZ));

            BaseAttr.RoleBaseID = initData.m_RoleBaseID;
            BaseAttr.MoveSpeed  = initData.m_MoveSpeed;
            Tab_RoleBaseAttr roleBaseTab = TableManager.GetRoleBaseAttrByID(BaseAttr.RoleBaseID, 0);

            if (roleBaseTab != null)
            {
                m_NpcType = (Games.GlobeDefine.GameDefine_Globe.NPC_TYPE)roleBaseTab.NpcType;
                //初始化CharModelID,并读取部分客户端信息
                ModelID = roleBaseTab.CharModelID;
                Tab_CharModel charModel = TableManager.GetCharModelByID(ModelID, 0);
                if (null != charModel)
                {
                    BaseAttr.HeadPic = charModel.HeadPic;
                    //设置动作路径
                    AnimationFilePath = charModel.AnimPath;
                    //设置名字版高度
                    DeltaHeight = charModel.HeadInfoHeight;

                    transform.localScale = Vector3.one;
                }
            }

            //服务器发过来的信息
            this.ServerID = initData.m_ServerID;
            this.BornPosX = initData.m_fX;
            this.BornPosY = gameObject.transform.position.y;
            this.BornPosZ = initData.m_fZ;

            BaseAttr.RoleName       = initData.m_StrName;
            BaseAttr.Force          = initData.m_Force;
            BaseAttr.Die            = initData.m_IsDie;
            m_ObjTransform.rotation = Utils.DirServerToClient(initData.m_fDir);
            StealthLev      = initData.m_StealthLev;
            m_bIsBornCreate = initData.m_bNpcBornCreate;
            OptStealthLevChange();
            // NPC挂任务
            AddDialogMission();

            //组件在初始化数据后进行

            //初始化寻路代理
            InitNavAgent();

            //初始化动画,需要在AnimationFilePath被赋值后进行
            AnimLogic = gameObject.GetComponent <AnimationLogic>();
            if (AnimLogic == null)
            {
                AnimLogic = gameObject.AddComponent <AnimationLogic>();
            }

            //初始化特效
            ObjEffectController = gameObject.GetComponent <CharacterEffectBehaviourController>();
            if (ObjEffectController == null)
            {
                ObjEffectController = gameObject.AddComponent <CharacterEffectBehaviourController>();
            }

            //初始化AutoMove功能模块
            if (gameObject.GetComponent <AutoMove>() == null)
            {
                gameObject.AddComponent <AutoMove>();
            }

            if (IsDie())
            {
                OnCorpse();
            }
            else
            {
                if (Objanimation != null)
                {
                    Objanimation.Stop();
                }
                CurObjAnimState = Games.GlobeDefine.GameDefine_Globe.OBJ_ANIMSTATE.STATE_NORMOR;
            }

            //创新跟玩家一样的模型
            m_ModelVisualID   = initData.m_ModelVisualID;
            m_nProfession     = initData.m_nProfession;
            m_WeaponDataID    = initData.m_WeaponDataID;
            m_WeaponEffectGem = initData.m_WeaponDataID;
            if (initData.m_ModelVisualID != GlobeVar.INVALID_ID && initData.m_nProfession != -1)
            {
                ReloadPlayerModelVisual(initData.m_ModelVisualID, initData.m_nProfession);
            }

            //初始化名字版
            //InitNameBoard();
            if (!m_IsNameBoard)
            {
                InitNameBoard();
            }
            else
            {
                if (m_MissionBoard != null)
                {
                    //m_MissionBoard.SetActive(true);
                    ShowNameBoard();
                }
            }

            m_mainPlayer = Singleton <ObjManager> .GetInstance().MainPlayer;

            // 帮会活动NPC判断
            m_bIsGuildActivityBoss = IsGuildBoss();

            m_SceneNpcId = initData.m_SceneNpcId;
            return(base.Init(initData));
        }
        public uint Execute(PacketDistributed ipacket)
        {
            GC_CREATE_NPC packet = (GC_CREATE_NPC )ipacket;

            if (null == packet)
            {
                return((uint)PACKET_EXE.PACKET_EXE_ERROR);
            }

            //判断ServerID是否合法
            if (packet.ServerId < 0)
            {
                return((uint)PACKET_EXE.PACKET_EXE_CONTINUE);
            }
            //安全措施,如果发现ServerID已经存在,则先移除掉
            if (Singleton <ObjManager> .GetInstance().IsObjExist(packet.ServerId))
            {
                Singleton <ObjManager> .GetInstance().RemoveObj(packet.ServerId);
            }

            // boss Effect
            if (GameManager.gameManager.ActiveScene.IsStoryCopyScene())
            {
                Tab_RoleBaseAttr tabRoleBaseAttr = TableManager.GetRoleBaseAttrByID(packet.DataId, 0);
                if (tabRoleBaseAttr != null)
                {
                    if (tabRoleBaseAttr.NpcType == (int)GameDefine_Globe.NPC_TYPE.BOSS)
                    {
                        if (BackCamerControll.Instance() != null)
                        {
                            BackCamerControll.Instance().PlaySceneEffect(611);
                        }
                    }
                }
            }

            Obj_Init_Data initData = new Obj_Init_Data();

            // initData.CleanUp();
            initData.m_ServerID       = packet.ServerId;
            initData.m_fX             = ((float)packet.PosX) / 100;
            initData.m_fZ             = ((float)packet.PosZ) / 100;
            initData.m_RoleBaseID     = packet.DataId;
            initData.m_Force          = packet.Curforce;
            initData.m_StrName        = packet.Name;
            initData.m_IsDie          = packet.IsDie == 1 ? true : false;
            initData.m_MoveSpeed      = ((float)packet.Movespeed) / 100;
            initData.m_fDir           = (float)packet.Facedir / 100;
            initData.m_StealthLev     = packet.StealthLeve;
            initData.m_bNpcBornCreate = (packet.IsBorn == 1 ? true : false);
            if (packet.HasModelVisualID)
            {
                initData.m_ModelVisualID = packet.ModelVisualID;
            }
            if (packet.HasWeaponDataID)
            {
                initData.m_WeaponDataID = packet.WeaponDataID;
            }
            if (packet.HasProfession)
            {
                initData.m_nProfession = packet.Profession;
            }
            if (packet.HasBindparent)
            {
                initData.m_BindParent = packet.Bindparent;
            }
            initData.m_BindChildren.Clear();
            for (int nindex = 0; nindex < GlobeVar.BIND_CHILDREN_MAX; ++nindex)
            {
                if (nindex < packet.bindchildrenCount)
                {
                    initData.m_BindChildren.Add(packet.GetBindchildren(nindex));
                }
                else
                {
                    initData.m_BindChildren.Add(-1);
                }
            }
            initData.m_SceneNpcId = packet.SceneNpcId;
            Singleton <ObjManager> .GetInstance().NewCharacterObj(Games.GlobeDefine.GameDefine_Globe.OBJ_TYPE.OBJ_NPC, initData);

            return((uint)PACKET_EXE.PACKET_EXE_CONTINUE);
        }
示例#13
0
        /// <summary>
        /// 创建其他玩家  这里可以优化一下  代码里获取 ModelId 的部分 可能是重复的 等具体功能应用后 替换成obj.ModelId
        /// </summary>
        /// <param name="initData"></param>
        public static void CreateOtherPlayer(Obj_Init_Data initData)
        {
            if (null == initData)
            {
                return;
            }
            GameObject otherPlayer = ResourceManager.InstantiateResource("Prefab/Model/OtherPlayerRoot", initData.m_ServerID.ToString()) as GameObject;

            if (null != otherPlayer)
            {
                //加载逻辑体,同时异步加载渲染体
                Obj_OtherPlayer objOtherPlayer = otherPlayer.AddComponent <Obj_OtherPlayer>();

                ////////////////////////////////临时代码 写死玩家 装备  其他玩家跟主玩家相同
                //
                //                 initData.m_ModelVisualID = 18;
                //                 initData.m_WeaponDataID = 52188;
                //                 initData.m_WeaponEffectGem = 8909;

                ////////////////////////////////临时代码 写死玩家 装备

                if (objOtherPlayer.Init(initData))
                {
                    objOtherPlayer.CanLogic = true;
                }



                Tab_ItemVisual tabItemVisual = TableManager.GetItemVisualByID(objOtherPlayer.ModelVisualID, 0);
                if (tabItemVisual == null)
                {
                    tabItemVisual = TableManager.GetItemVisualByID(GlobeVar.DEFAULT_VISUAL_ID, 0);
                    if (tabItemVisual == null)
                    {
                        return;
                    }
                }
                int nCharmodelID = objOtherPlayer.GetCharModelID(tabItemVisual, objOtherPlayer.Profession);

                //变身的特殊处理
                int nChangeModelId = objOtherPlayer.GetCharModelIDByChangeState(objOtherPlayer.Profession, objOtherPlayer.CurChangeState);

                //如果在变身状态,就用变身状态的模型ID去创建
                if (nChangeModelId != GlobeVar.INVALID_ID)
                {
                    nCharmodelID = nChangeModelId;
                }

                Tab_CharModel charModel = TableManager.GetCharModelByID(nCharmodelID, 0);
                if (charModel == null)
                {
                    return;
                }
                ObjManager cachedManager = Singleton <ObjManager> .Instance;
                if (cachedManager == null)
                {
                    return;
                }

                cachedManager.AddPoolObj(objOtherPlayer.ServerID.ToString(), objOtherPlayer);
                if (!cachedManager.CheckOhterPlayerVisibleState(initData, charModel, objOtherPlayer))
                {
                    return;
                }
                cachedManager.TestOtherPlayerVisible(objOtherPlayer);

                objOtherPlayer.IsLoadingModel = true;
                LoadModelToRoot(nCharmodelID, EResourceType.CharacterModel, LoadModelComplete, otherPlayer, charModel, objOtherPlayer.CurChangeState == (int)GameDefine_Globe.ChangeModeState.CHANGE_2 || objOtherPlayer.CurChangeState == (int)GameDefine_Globe.ChangeModeState.CHANGE_1);
            }
        }