public override bool OnPutDown()
    {
        if (!PeGameMgr.IsMulti)
        {
            DoodadEntityCreator.CreateRandTerDoodad(doodadID, transform.position, Vector3.one, transform.rotation);
            RemoveFromBag();
        }
        else
        {
            IntVector3 safePos = new IntVector3(transform.position + 0.1f * Vector3.down);

            if (VArtifactUtil.IsInTownBallArea(safePos))
            {
                new PeTipMsg(PELocalization.GetString(8000864), PeTipMsg.EMsgLevel.Warning);
                return(true);
            }

            if (null != PlayerNetwork.mainPlayer)
            {
                byte mTerrianType = VFVoxelTerrain.self.Voxels.SafeRead(safePos.x, safePos.y, safePos.z).Type;
                PlayerNetwork.mainPlayer.RequestDragOut(itemDragging.itemObj.instanceId, transform.position, transform.localScale, transform.rotation, mTerrianType);
            }
        }

        return(base.OnPutDown());
    }
    // New/Restore
    public void New()
    {
#if Have_ENTITY
        //if (EntityCreateMgr.DbgUseLegacyCode)
        //    return;

        NpcEntityCreator.Init();
        MonsterEntityCreator.Init();
        DoodadEntityCreator.Init();
        SceneEntityCreatorArchiver.Instance.New();
        if (PeGameMgr.IsStory || PeGameMgr.IsTutorial)
        {
            if (PeGameMgr.playerType == PeGameMgr.EPlayerType.Tutorial)
            {
                StartCoroutine(InitTutorialNpc());
            }
            else
            {
                DoodadEntityCreator.CreateStoryDoodads(true);
                StartCoroutine(InitStoryNpc());
            }
        }
        _bReadyToRefresh = true;
#endif
    }
    protected override void RPC_S2C_InitData(uLink.BitStream stream, uLink.NetworkMessageInfo info)
    {
        transform.position = stream.Read <Vector3>();
        transform.rotation = stream.Read <Quaternion>();
        authId             = stream.Read <int>();

        DoodadEntityCreator.CreateNetRandTerDoodad(Id, ExternId, transform.position, mScale, transform.rotation, mTownId, mCampId, mDamageId);
    }
    // Other methods/property
    void CreateEntityStatic()
    {
        _step = EStep.InCreating;

        DoodadEntityCreator.CreateDoodad(this);
        if (entity == null)
        {
            Debug.LogWarning("[EntityPosAgent]:Failed to create entity " + _type.ToString() + protoId);
        }
        // now doodad's lod(SceneDoodadLodCmpt) would handle doodads, posAgent not needed longer after dooad created.
        SceneMan.RemoveSceneObj(this);
        _step = EStep.Created;
    }
 public void Restore()
 {
     NpcEntityCreator.Init();
     MonsterEntityCreator.Init();
     DoodadEntityCreator.Init();
     SceneEntityCreatorArchiver.Instance.Restore();
     if (PeGameMgr.IsStory)
     {
         if (PeGameMgr.playerType != PeGameMgr.EPlayerType.Tutorial)
         {
             DoodadEntityCreator.CreateStoryDoodads(false);
         }
     }
     _bReadyToRefresh = true;
 }
    void Start()
    {
        //PeEntity entity = null;

        if (protoType == ProtoType.Doodad)
        {
            DoodadEntityCreator.CreateDoodad(protoID, transform.position);
        }
        else if (protoType == ProtoType.NpcRandom)
        {
            NpcEntityCreator.CreateNpc(protoID, transform.position);
        }
        else if (protoType == ProtoType.NpcLine)
        {
            NpcEntityCreator.CreateStoryLineNpcFromID(protoID, transform.position);
        }
        else
        {
            MonsterEntityCreator.CreateAdMonster(protoID, transform.position, colorId, -1);
        }

        Destroy(gameObject);
    }
    protected override void OnPEInstantiate(uLink.NetworkMessageInfo info)
    {
        objType = (DoodadType)info.networkView.initialData.Read <int>();
        int playerId = info.networkView.initialData.Read <int>();

        _teamId      = info.networkView.initialData.Read <int>();
        _assetId     = info.networkView.initialData.Read <int>();
        _id          = info.networkView.initialData.Read <int>();
        _protoTypeId = info.networkView.initialData.Read <int>();
        Vector3         scale  = info.networkView.initialData.Read <Vector3>();
        string          param  = info.networkView.initialData.Read <string>();
        SceneDoodadDesc doodad = null;

        _pos = transform.position;
        rot  = transform.rotation;

        if (null == ParentTrans)
        {
            ParentTrans = new GameObject("DoodadNetworkMgr").transform;
        }

        transform.parent = ParentTrans;

        if (PeGameMgr.IsMultiStory)
        {
            doodad = StoryDoodadMap.Get(_assetId);
        }

        if (objType == DoodadType.DoodadType_Drop || objType == DoodadType.DoodadType_Dead)
        {
            itemBox = ItemBoxMgr.Instance.AddItemMultiPlay(OwnerView.viewID.id, playerId, _pos, this);
        }
        else if (objType == DoodadType.DoodadType_SceneBox)
        {
            if (doodad != null)
            {
                entity = DoodadEntityCreator.CreateStoryDoodadNet(_assetId, Id);
            }
            else
            {
                entity = DoodadEntityCreator.CreateDoodadNet(_protoTypeId, _pos, scale, rot, Id);
            }

            if (entity != null)
            {
                WareHouseObject script = entity.gameObject.GetComponent <WareHouseObject>();
                if (script != null)
                {
                    script._id = _assetId;
                }
            }
        }
        else if (objType == DoodadType.DoodadType_SceneItem)
        {
            string[] str = param.Split('|');
            if (str.Length != 2)
            {
                return;
            }

            _sceneItemName = str[1];
            if (_sceneItemName == "ash_box")
            {
                itemBox = ItemBoxMgr.Instance.AddItemMultiPlay(OwnerView.viewID.id, _assetId, _pos, this);
            }
            else if (_sceneItemName == "ash_ball")
            {
                itemBox = ItemBoxMgr.Instance.AddItemMultiPlay(OwnerView.viewID.id, _assetId, _pos, this);
            }
            else
            {
                RequestItemList();
            }
        }
        else if (objType == DoodadType.DoodadType_Repair)
        {
            if (doodad != null)
            {
                entity = DoodadEntityCreator.CreateStoryDoodadNet(_assetId, Id);
            }
            else
            {
                entity = DoodadEntityCreator.CreateDoodadNet(_protoTypeId, _pos, scale, rot, Id);
            }
        }
        else if (objType == DoodadType.DoodadType_Power)
        {
            if (doodad != null)
            {
                entity = DoodadEntityCreator.CreateStoryDoodadNet(_assetId, Id);
            }
            else
            {
                entity = DoodadEntityCreator.CreateDoodadNet(_protoTypeId, _pos, scale, rot, Id);
            }
        }
        else if (objType == DoodadType.DoodadType_RandomBuilding ||
                 objType == DoodadType.DoodadType_RandomBuilding_Repair ||
                 objType == DoodadType.DoodadType_RandomBuilding_Power)
        {
            ExtractParam(param, out townId, out _campId, out _damageId, out _dPlayerId);
            if (doodad != null)
            {
                entity = DoodadEntityCreator.CreateStoryDoodadNet(_assetId, Id);
            }
            else
            {
                entity = DoodadEntityCreator.CreateNetRandTerDoodad(Id, _protoTypeId, _pos, scale, rot, townId, _campId, _damageId, _dPlayerId);
            }
        }
        else
        {
            if (doodad != null)
            {
                entity = DoodadEntityCreator.CreateStoryDoodadNet(_assetId, Id);
            }
            else
            {
                entity = DoodadEntityCreator.CreateDoodadNet(_protoTypeId, _pos, scale, rot, Id);
            }
        }

        if (entity != null)
        {
            OnSpawned(entity.gameObject);
        }

        mapObjNetworkMgr.Add(this);
        gameObject.name = string.Format("Mapobj assetId:{0}, protoTypeId:{1}, objType:{2}, entityId:{3}", _assetId, _protoTypeId, objType, _id);
    }
Beispiel #8
0
    public void RenderPrefebBuilding(VABuildingInfo buildinginfo)
    {
        int bid = buildinginfo.id;

        Quaternion rotation = Quaternion.Euler(0, buildinginfo.rotation, 0);

        if (PeGameMgr.IsSingleAdventure)
        {
            if (buildinginfo.buildingId.buildingNo != VArtifactTownConstant.NATIVE_TOWER_BUILDING_ID)
            {
                if (!BlockBuilding.s_tblBlockBuildingMap.ContainsKey(bid))
                {
                    LogManager.Error("bid = [", bid, "] not exist in database!");
                    return;
                }

                int campId   = SceneDoodadDesc.c_neutralCamp;
                int damageId = SceneDoodadDesc.c_neutralDamage;
                if (buildinginfo.vau.vat.type == VArtifactType.NpcTown)
                {
                    if (!buildinginfo.vau.vat.IsPlayerTown)
                    {
                        if (bid == ColonyNoMgrMachine.DOODAD_ID_REPAIR || bid == ColonyNoMgrMachine.DOODAD_ID_SOLARPOWER)
                        {
                            return;
                        }
                        campId   = AllyConstants.EnemyNpcCampId;
                        damageId = AllyConstants.EnemyNpcDamageId;
                    }
                }
                else
                {
                    if (buildinginfo.vau.vat.nativeType == NativeType.Puja)
                    {
                        campId   = AllyConstants.PujaCampId;
                        damageId = AllyConstants.PujaDamageId;
                    }
                    else
                    {
                        campId   = AllyConstants.PajaCampId;
                        damageId = AllyConstants.PajaDamageId;
                    }
                }
                int playerId = VATownGenerator.Instance.GetPlayerId(buildinginfo.vau.vat.AllyId);
                if (!buildinginfo.vau.isDoodadNpcRendered)
                {
                    VArtifactTownManager.Instance.AddAliveBuilding(buildinginfo.vau.vat.townId,
                                                                   DoodadEntityCreator.CreateRandTerDoodad(BlockBuilding.s_tblBlockBuildingMap[bid].mDoodadProtoId, buildinginfo.root, Vector3.one, rotation, buildinginfo.buildingId.townId, campId, damageId, playerId).Id);
                }

                //building npc
                if (!mCreatedNpcBuildingID.ContainsKey(buildinginfo.buildingId))
                {
                    BlockBuilding      building = BlockBuilding.s_tblBlockBuildingMap[bid];
                    List <BuildingNpc> buildingNpcs;
                    building.GetNpcInfo(out buildingNpcs);
                    for (int bni = 0; bni < buildingNpcs.Count; bni++)
                    {
                        BuildingNpc bn = buildingNpcs[bni];
                        VArtifactUtil.GetPosRotFromPointRot(ref bn.pos, ref bn.rotY, buildinginfo.root, buildinginfo.rotation);
                    }
                    if (buildingNpcs != null && buildingNpcs.Count > 0)
                    {
                        if (buildinginfo.vau.vat.IsPlayerTown)
                        {
                            if (!buildinginfo.vau.isDoodadNpcRendered)
                            {
                                StartCoroutine(CreateBuildingNpcList(buildingNpcs));
                                mCreatedNpcBuildingID.Add(buildinginfo.buildingId, 0);
                            }
                        }
                        else
                        {
                            GenEnemyNpc(buildingNpcs, buildinginfo.vau.vat.townId, buildinginfo.vau.vat.AllyId);
                        }
                    }
                }
            }
            else if (buildinginfo.buildingId.buildingNo == VArtifactTownConstant.NATIVE_TOWER_BUILDING_ID)
            {
                //tower
                if (!buildinginfo.vau.isDoodadNpcRendered)
                {
                    int playerId = VATownGenerator.Instance.GetPlayerId(buildinginfo.vau.vat.AllyId);
                    VArtifactTownManager.Instance.AddAliveBuilding(buildinginfo.vau.vat.townId,
                                                                   DoodadEntityCreator.CreateRandTerDoodad(buildinginfo.pathID, buildinginfo.root, Vector3.one, rotation, buildinginfo.vau.vat.townId, buildinginfo.campID, buildinginfo.damageID, playerId).Id
                                                                   );
                }
            }
            if (missionBuilding.ContainsKey(0))
            {
                if (buildinginfo.buildingId != missionBuilding[0])
                {
                    RemoveBuilding(buildinginfo.buildingId);
                }
            }
            else
            {
                RemoveBuilding(buildinginfo.buildingId);
            }
        }
        else if (PeGameMgr.IsMulti)
        {
            if (buildinginfo.buildingId.buildingNo != VArtifactTownConstant.NATIVE_TOWER_BUILDING_ID)
            {
                if (!BlockBuilding.s_tblBlockBuildingMap.ContainsKey(bid))
                {
                    LogManager.Error("bid = [", bid, "] not exist in database!");
                    return;
                }
                Debug.Log("RenderPrefebBuilding():" + bid);
                //              int campId = SceneDoodadDesc.c_neutralCamp;
                int campId   = SceneDoodadDesc.c_neutralCamp;
                int damageId = SceneDoodadDesc.c_neutralDamage;
                if (buildinginfo.vau.vat.type == VArtifactType.NpcTown)
                {
                    if (!buildinginfo.vau.vat.IsPlayerTown)
                    {
                        if (bid == ColonyNoMgrMachine.DOODAD_ID_REPAIR || bid == ColonyNoMgrMachine.DOODAD_ID_SOLARPOWER)
                        {
                            return;
                        }
                        campId   = AllyConstants.EnemyNpcCampId;
                        damageId = AllyConstants.EnemyNpcDamageId;
                    }
                }
                else
                {
                    if (buildinginfo.vau.vat.nativeType == NativeType.Puja)
                    {
                        campId   = AllyConstants.PujaCampId;
                        damageId = AllyConstants.PujaDamageId;
                    }
                    else
                    {
                        campId   = AllyConstants.PajaCampId;
                        damageId = AllyConstants.PajaDamageId;
                    }
                }
                int playerId = VATownGenerator.Instance.GetPlayerId(buildinginfo.vau.vat.AllyId);
                if (!buildinginfo.vau.isDoodadNpcRendered)
                {
                    PlayerNetwork.RequestServer(EPacketType.PT_Common_TownDoodad, buildinginfo.buildingId, BlockBuilding.s_tblBlockBuildingMap[bid].mDoodadProtoId, buildinginfo.root, Vector3.one, rotation, buildinginfo.vau.vat.townId, campId, damageId, playerId);
                }
                //building npc
                if (!mCreatedNpcBuildingID.ContainsKey(buildinginfo.buildingId))
                {
                    BlockBuilding      building = BlockBuilding.s_tblBlockBuildingMap[bid];
                    List <BuildingNpc> buildingNpcs;
                    building.GetNpcInfo(out buildingNpcs);
                    for (int bni = 0; bni < buildingNpcs.Count; bni++)
                    {
                        BuildingNpc bn = buildingNpcs[bni];
                        VArtifactUtil.GetPosRotFromPointRot(ref bn.pos, ref bn.rotY, buildinginfo.root, buildinginfo.rotation);
                    }
                    if (buildingNpcs != null && buildingNpcs.Count > 0)
                    {
                        if (buildingNpcs != null && buildingNpcs.Count > 0)
                        {
                            if (buildinginfo.vau.vat.IsPlayerTown)
                            {
                                if (!buildinginfo.vau.isDoodadNpcRendered)
                                {
                                    StartCoroutine(CreateBuildingNpcList(buildingNpcs));
                                    mCreatedNpcBuildingID.Add(buildinginfo.buildingId, 0);
                                }
                            }
                            else
                            {
                                GenEnemyNpc(buildingNpcs, buildinginfo.vau.vat.townId, buildinginfo.vau.vat.AllyId);
                            }
                        }
                    }
                }
            }
            else if (buildinginfo.buildingId.buildingNo == VArtifactTownConstant.NATIVE_TOWER_BUILDING_ID)
            {
                if (!buildinginfo.vau.isDoodadNpcRendered)
                {
                    int playerId = VATownGenerator.Instance.GetPlayerId(buildinginfo.vau.vat.AllyId);
                    PlayerNetwork.RequestServer(EPacketType.PT_Common_NativeTowerCreate, buildinginfo.buildingId, buildinginfo.pathID, buildinginfo.root, Vector3.one, rotation, buildinginfo.vau.vat.townId, buildinginfo.campID, buildinginfo.damageID, playerId);
                }
            }
            RemoveBuilding(buildinginfo.buildingId);
        }
    }