示例#1
0
 protected override void OnHide()
 {
     base.OnHide();
     RecoveryItem();
     VArtifactUtil.UnRegistTownDestryedEvent(UpdateBuildCountEvent);
     ReputationSystem.Instance.onReputationChange -= UpdateReputationEvent;
 }
示例#2
0
    public void InitAllyPlayerId(System.Random rand)
    {
        allyPlayerIdDic.Clear();
        allyPlayerIdDic.Add(0, AdventureAlly.DefaultPlayerId);
        allyPlayerIdDic.Add(1, AdventureAlly.PujaStartPlayerId);
        int        i            = 2;
        List <int> playerIdList = new List <int> ();

        for (int j = 0; j < PujaAllyCount - 1; j++)
        {
            playerIdList.Add(AdventureAlly.PujaStartPlayerId + 1 + j);
        }
        for (int j = 0; j < PajaAllyCount; j++)
        {
            playerIdList.Add(AdventureAlly.PajaStartPlayerId + j);
        }
        for (int j = 0; j < EnemyNpcAllyCount; j++)
        {
            playerIdList.Add(AdventureAlly.EnemyNpcStartPlayerId + j);
        }
        VArtifactUtil.Shuffle(playerIdList, rand);
        for (; i < AllyCount; i++)
        {
            allyPlayerIdDic.Add(i, playerIdList[i - 2]);
        }
        foreach (KeyValuePair <int, int> kvp in allyPlayerIdDic)
        {
            Debug.Log("ally: " + kvp.Key + " playerId:" + kvp.Value);
        }
    }
    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());
    }
示例#4
0
    public override bool OnPutDown()
    {
        if (GameConfig.IsMultiClient)
        {
            if (!Pathea.PeGameMgr.IsMultiCoop && VArtifactUtil.IsInTownBallArea(transform.position))
            {
                new PeTipMsg(PELocalization.GetString(8000864), PeTipMsg.EMsgLevel.Warning);
                return(true);
            }

            if (null != PlayerNetwork.mainPlayer)
            {
                PlayerNetwork.mainPlayer.RequestDragTower(itemDragging.itemObj.instanceId, transform.position, transform.rotation);
            }
        }
        else
        {
            DragTowerAgent towerAget = new DragTowerAgent(itemDragging, transform.position, transform.rotation);

            towerAget.Create();

            SceneMan.AddSceneObj(towerAget);
            PeMap.TowerMark towerMask = new PeMap.TowerMark();
            towerMask.position = transform.position;
            towerMask.ID       = itemObjectId;
            towerMask.text     = itemDragging.itemObj.protoData.GetName();
            towerMask.campId   = Mathf.RoundToInt(Pathea.MainPlayer.Instance.entity.GetAttribute(Pathea.AttribType.CampID));
            PeMap.LabelMgr.Instance.Add(towerMask);
            PeMap.TowerMark.Mgr.Instance.Add(towerMask);
            RemoveFromBag();
        }

        return(base.OnPutDown());
    }
示例#5
0
            Vector3 GetPlayerSpawnPos()
            {
                IntVector2 posXZ = VArtifactUtil.GetSpawnPos();
                Vector3    pos   = new Vector3(posXZ.x, VFDataRTGen.GetPosTop(posXZ), posXZ.y);

                return(pos);
            }
示例#6
0
    public override bool OnPutDown()
    {
        int prePointId = Railway.Manager.InvalId;

        if (mPrePoint != null)
        {
            prePointId = mPrePoint.id;
        }

        if (GameConfig.IsMultiClient)
        {
            if (VArtifactUtil.IsInTownBallArea(transform.position))
            {
                new PeTipMsg(PELocalization.GetString(8000864), PeTipMsg.EMsgLevel.Warning);
                return(true);
            }

            if (null != PlayerNetwork.mainPlayer)
            {
                PlayerNetwork.mainPlayer.RPCServer(EPacketType.PT_InGame_Railway_AddPoint, transform.position, mType, prePointId, itemDragging.itemObj.instanceId);
            }
        }
        else
        {
            RemoveTrees();
            RailwayOperate.Instance.RequestAddPoint(transform.position, mType, prePointId, itemDragging.itemObj.instanceId);
        }

        return(base.OnPutDown());
    }
    void Start()
    {
        if (PeGameMgr.IsAdventure)
        {
            SceneDoodadLodCmpt lod = GetComponentInParent <SceneDoodadLodCmpt> ();
            if (lod != null && lod.Index >= 0)
            {
//				int townid = lod.Index;
                List <Vector3> lstPos;
                VANativeCampXML.DynamicNative[] nativeIds = VArtifactUtil.GetAllDynamicNativePoint(lod.Index, out lstPos);
                if (nativeIds == null)
                {
                    return;
                }
                int cntNativeIds = nativeIds.Length;
                _posOfMonsters      = lstPos.ToArray();
                _protoIdsOfMonsters = new int[cntNativeIds];
                for (int i = 0; i < cntNativeIds; i++)
                {
                    _protoIdsOfMonsters[i] = nativeIds[i].type == 0 ? (nativeIds[i].did | EntityProto.IdGrpMask) : nativeIds[i].did;
                }
                _maxCntOfMonsters = 8;
            }
        }
        _radius = 256.0f;         //force 128
        StartCoroutine(RefreshAgents());
    }
    /// <summary>
    /// get the top position y of the scene (include the building)
    /// </summary>
    /// <returns></returns>
    public static float GetPosTop(IntVector2 worldPosXZ, out bool canGenNpc)
    {
        //int x = worldPosXZ.x >> VoxelTerrainConstants._shift;
        //int z = worldPosXZ.y >> VoxelTerrainConstants._shift;
        float top = GetPosHeight(worldPosXZ, true);

        float townHeight = VArtifactUtil.IsInTown(worldPosXZ);

        if (townHeight != 0)
        {
            if (top < townHeight)
            {
                top = townHeight;
            }
            canGenNpc = false;
            return(top + 1.5f);
        }

        if (IsSea(Mathf.FloorToInt(top)))
        {
            canGenNpc = false;
            return(top + 1.5f);
        }

        canGenNpc = true;
        return(top + 1.5f);
    }
示例#9
0
 public override void Show()
 {
     base.Show();
     UpdateAllianceInfo();
     VArtifactUtil.RegistTownDestryedEvent(UpdateBuildCountEvent);
     ReputationSystem.Instance.onReputationChange += UpdateReputationEvent;
 }
示例#10
0
    public void GenCutPointNewLine(IntVector2 v1, IntVector2 v2, System.Random rand)
    {
        float      dist        = v1.Distance(v2);
        IntVector2 centerPoint = new IntVector2((v1.x + v2.x) / 2, (v1.y + v2.y) / 2);
        float      radius      = dist / 4;
        IntVector2 result      = VArtifactUtil.GetRandomPointFromPoint(centerPoint, radius, rand);

        AddTownConnection(v1, result, rand);
        AddTownConnection(result, v2, rand);
    }
示例#11
0
    private void CreateOneBuildingNpc(BuildingNpc buildingNpc)
    {
        if (!NpcMissionDataRepository.m_AdRandMisNpcData.ContainsKey(buildingNpc.templateId))
        {
            LogManager.Error("not exist! id = [", buildingNpc.templateId, "] Pos = ", buildingNpc.pos);
            return;
        }

        buildingNpc.pos.y += 0.2f;
        if (PeGameMgr.IsSingleAdventure)
        {
            //AdNpcData adNpcData = NpcMissionDataRepository.m_AdRandMisNpcData[buildingNpc.templateId];
            //int RNpcId = adNpcData.mRnpc_ID;
            //int Qid = adNpcData.mQC_ID;

            PeEntity npc = NpcEntityCreator.CreateNpc(buildingNpc.templateId, buildingNpc.pos, Vector3.one, Quaternion.Euler(0, buildingNpc.rotY, 0));
            if (npc == null)
            {
                Debug.LogError("npc id error: templateId = " + buildingNpc.templateId);
                return;
            }
            if (buildingNpc.isStand)
            {
                VArtifactUtil.SetNpcStandRot(npc, buildingNpc.rotY, true);
                createdNpcIdList.Add(new BuildingNpcIdStand(npc.Id, true, buildingNpc.rotY));
            }
            else
            {
                createdNpcIdList.Add(new BuildingNpcIdStand(npc.Id, false, buildingNpc.rotY));
            }
            //--to do: npc
            //NpcRandom nr = NpcManager.Instance.CreateRandomNpc(RNpcId, buildingNpc.pos);

            //StroyManager.Instance.NpcTakeMission(RNpcId, Qid, buildingNpc.pos, nr, adNpcData.m_CSRecruitMissionList);

            //if(buildingNpc.isStand)
            //{
            //    nr.SetRotY(buildingNpc.rotY);
            //    nr.CloseAi();
            //    createdNpcIdList.Add(new BuildingNpcIdStand(nr.mNpcId, true, buildingNpc.rotY));
            //}
            //else
            //{
            //    createdNpcIdList.Add(new BuildingNpcIdStand(nr.mNpcId, false, buildingNpc.rotY));
            //}
        }
        else if (GameConfig.IsMultiMode)
        {
            //SPTerrainEvent.instance.CreateAdNpcByIndex(buildingNpc.pos, buildingNpc.templateId, 1, buildingNpc.isStand, buildingNpc.rotY);
            PlayerNetwork.mainPlayer.RequestTownNpc(buildingNpc.pos, buildingNpc.templateId, 1, buildingNpc.isStand, buildingNpc.rotY);
        }
    }
    public override bool OnPutDown()
    {
        if (Pathea.PeGameMgr.IsMulti)
        {
            if (VArtifactUtil.IsInTownBallArea(transform.position))
            {
                new PeTipMsg(PELocalization.GetString(8000864), PeTipMsg.EMsgLevel.Warning);
                return(true);
            }
        }

        return(base.OnPutDown());
    }
示例#13
0
    int GetEnvironmentBgMusic()
    {
        if (VCEditor.s_Active)
        {
            return(CreationMusicID);
        }
        else
        {
            PeEntity player = PeCreature.Instance.mainPlayer;
            if (player != null)
            {
                if (CSMain.Instance != null && CSMain.Instance.IsInAssemblyArea(player.position))
                {
                    return(PlayerBaseMusicID);
                }
                else
                {
                    if (PeGameMgr.IsAdventure)
                    {
                        if (RandomDunGenUtil.IsInDungeon(player))
                        {
                            if (RandomDunGenUtil.GetDungeonType() == DungeonType.Iron)
                            {
                                return(DungeonIronMusicID);
                            }
                            else
                            {
                                return(DungeonCaveMusicID);
                            }
                        }
                        else if (VArtifactUtil.IsInNativeCampArea(player.position) >= 0)
                        {
                            return(NativeBaseMusicID);
                        }
                    }

                    if (PeGameMgr.IsStory)
                    {
                        int soundID = PeMap.StaticPoint.Mgr.Instance.GetMapSoundID(player.position);
                        if (soundID > 0)
                        {
                            return(soundID);
                        }
                    }
                }
            }
        }

        return(0);
    }
    public static float GetPosHeightWithTown(IntVector2 worldPosXZ, bool InWater = false)
    {
        float top = GetPosHeight(worldPosXZ, InWater) + 1.5f;

        float townHeight = VArtifactUtil.IsInTown(worldPosXZ);

        if (townHeight != 0)
        {
            if (top < townHeight)
            {
                top = townHeight;
            }
        }
        return(top);
    }
示例#15
0
            void PeLauncher.ILaunchable.Launch()
            {
                Vector3 pos;

                if (PeGameMgr.IsMultiStory)
                {
                    pos = new Vector3(12227f, 121.5f, 6095f);
                }
                else
                {
                    VArtifactUtil.GetSpawnPos();
                    //IntVector2 posXZ = new IntVector2(0, 0);
                    pos = Pathea.PlayerSpawnPosProvider.Instance.GetPos();
                }
                BaseNetwork.MainPlayer.RequestPlayerLogin(pos);
            }
示例#16
0
            void PeLauncher.ILaunchable.Launch()
            {
                if (null == BaseNetwork.MainPlayer)
                {
                    return;
                }

                Vector3 pos = BaseNetwork.MainPlayer._pos;

                if (BaseNetwork.MainPlayer.UseNewPos)
                {
                    IntVector2 posXZ = VArtifactUtil.GetSpawnPos();
                    pos = new Vector3(posXZ.x, VFDataRTGen.GetPosTop(posXZ), posXZ.y);
                }

                Pathea.PlayerSpawnPosProvider.Instance.SetPos(pos);
            }
示例#17
0
    void GetTdGenPos(out Vector3 pos)
    {
        pos = Vector3.zero;
        TypeTowerDefendsData data = MissionManager.GetTypeTowerDefendsData(TargetId);

        if (null != data)
        {
            switch (data.m_Pos.type)
            {
            case TypeTowerDefendsData.PosType.getPos:
                pos = Pathea.PeCreature.Instance.mainPlayer.position;
                break;

            case TypeTowerDefendsData.PosType.pos:
                pos = data.m_Pos.pos;
                break;

            case TypeTowerDefendsData.PosType.npcPos:
                pos = Pathea.EntityMgr.Instance.Get(data.m_Pos.id).position;
                break;

            case TypeTowerDefendsData.PosType.doodadPos:
                pos = Pathea.EntityMgr.Instance.GetDoodadEntities(data.m_Pos.id)[0].position;
                break;

            case TypeTowerDefendsData.PosType.conoly:
                if (!CSMain.GetAssemblyPos(out pos))
                {
                    pos = Pathea.PeCreature.Instance.mainPlayer.position;
                }
                break;

            case TypeTowerDefendsData.PosType.camp:
                if (!VArtifactUtil.GetTownPos(data.m_Pos.id, out pos))
                {
                    pos = Pathea.PeCreature.Instance.mainPlayer.position;
                }
                break;

            default:
                break;
            }
            data.finallyPos = pos;
        }
    }
    public static float GetPosTop(IntVector2 worldPosXZ)
    {
        //int x = worldPosXZ.x >> VoxelTerrainConstants._shift;
        //int z = worldPosXZ.y >> VoxelTerrainConstants._shift;
        float top = GetPosHeight(worldPosXZ) + 1.5f;

        float townHeight = VArtifactUtil.IsInTown(worldPosXZ);

        if (townHeight != 0)
        {
            if (top < townHeight)
            {
                top = townHeight + 1.5f;
            }
            return(top);
        }
        return(top);
    }
示例#19
0
    public void InitAllyColor(System.Random myRand)
    {
        allyColor.Clear();
        allyColor.Add(0, 0);
        List <int> colorList = new List <int> ();

        for (int i = 1; i < AllyCount; i++)
        {
            colorList.Add(i);
        }
        VArtifactUtil.Shuffle(colorList, myRand);
        for (int i = 1; i < AllyCount; i++)
        {
            allyColor.Add(i, colorList[i - 1]);
        }
        foreach (KeyValuePair <int, int> kvp in allyColor)
        {
            Debug.Log("ally: " + kvp.Key + " color:" + kvp.Value);
        }
    }
示例#20
0
    public override bool OnPutDown()
    {
        if (GameConfig.IsMultiClient)
        {
            if (VArtifactUtil.IsInTownBallArea(transform.position))
            {
                new PeTipMsg(PELocalization.GetString(8000864), PeTipMsg.EMsgLevel.Warning);
                return(true);
            }

            if (null != PlayerNetwork.mainPlayer)
            {
                PlayerNetwork.mainPlayer.RequestDragFlag(itemDragging.itemObj.instanceId, transform.position, transform.rotation);
            }

            return(true);
        }

        return(base.OnPutDown());
    }
示例#21
0
    public static void GetArtifactUnit(VArtifactTown townData, ArtifactUnit[] artifactUnitArray, System.Random myRand)
    {
        int townPosXMin = townData.PosGen.x;
        int townPosZMin = townData.PosGen.y;
        int townPosXMax = townData.PosGen.x;
        int townPosZMax = townData.PosGen.y;

        int unitIndex = 0;

        for (int m = 0; m < artifactUnitArray.Count(); m++)
        {
            IntVector2 posXZ = VArtifactUtil.GetIntVector2FromStr(artifactUnitArray[m].pos);
            int        unitID;
            if (artifactUnitArray[m].id.Equals("-1"))
            {
                List <int> idList = VArtifactUtil.townArtifactsData.Keys.ToList();
                unitID = idList[myRand.Next(idList.Count)];
            }
            else
            {
                unitID = VArtifactUtil.RandIntFromStr(artifactUnitArray[m].id, myRand);
            }
            //Debug.Log("unitID:" + unitID);
            Town_artifacts townDataFromDataBase = VArtifactUtil.townArtifactsData[unitID];
            string         isoName = townDataFromDataBase.isoName;
            float          rot;
            if (artifactUnitArray[m].rot.Equals("-1"))
            {
                //--to do: "type" is not used
                rot = (float)(myRand.NextDouble() * 360);
            }
            else
            {
                rot = VArtifactUtil.RandFloatFromStr(artifactUnitArray[m].rot, myRand);
            }

            //--to do: get the isoData  from id;
            ulong guid;
            //townData.isodataList.Add(posXZ,GetIsoData(isoName,out guid));
            VArtifactUnit vau     = new VArtifactUnit();
            VArtifactData isoData = VArtifactUtil.GetIsoData(isoName, out guid);
            if (isoData == null)
            {
                Debug.LogError("unitID:" + unitID + " isoName not found! IsoName: " + isoName);
                continue;
            }
            vau.isoName   = isoName;
            vau.unitIndex = unitIndex++;
            vau.isoId     = unitID;
            vau.isoGuId   = guid;
            vau.vat       = townData;
            vau.rot       = rot;
            vau.PosCenter = posXZ + townData.PosGen;
            int xIsoSize = isoData.m_HeadInfo.xSize;
            int zIsoSize = isoData.m_HeadInfo.zSize;
            vau.isoStartPos = new IntVector2(posXZ.x - xIsoSize / 2, posXZ.y - zIsoSize / 2) + townData.PosGen;
            vau.isoEndPos   = new IntVector2(posXZ.x + xIsoSize / 2, posXZ.y + zIsoSize / 2) + townData.PosGen;
            int xSize = townDataFromDataBase.vaSize.x;
            int zSize = townDataFromDataBase.vaSize.y;
            vau.PosStart      = new IntVector2(posXZ.x - xSize / 2, posXZ.y - zSize / 2) + townData.PosGen;
            vau.PosEnd        = new IntVector2(posXZ.x + xSize / 2, posXZ.y + zSize / 2) + townData.PosGen;
            vau.level         = townData.level;
            vau.type          = townData.type;
            vau.buildingIdNum = artifactUnitArray[m].buildingIdNum.ToList();
            vau.npcIdNum      = artifactUnitArray[m].npcIdNum.ToList();
            vau.buildingCell  = townDataFromDataBase.buildingCell;
            vau.npcPos        = townDataFromDataBase.npcPos;
            vau.vaSize        = townDataFromDataBase.vaSize;
            vau.towerPos      = townDataFromDataBase.towerPos;
            if (vau.PosStart.x < townPosXMin)
            {
                townPosXMin = vau.PosStart.x;
            }
            if (vau.PosStart.y < townPosZMin)
            {
                townPosZMin = vau.PosStart.y;
            }
            if (vau.PosEnd.x > townPosXMax)
            {
                townPosXMax = vau.PosEnd.x;
            }
            if (vau.PosEnd.y > townPosZMax)
            {
                townPosZMax = vau.PosEnd.y;
            }
            townData.VAUnits.Add(vau);
        }
        townData.PosStart  = new IntVector2(townPosXMin, townPosZMin);
        townData.PosEnd    = new IntVector2(townPosXMax, townPosZMax);
        townData.PosCenter = new IntVector2((townPosXMin + townPosXMax) / 2, (townPosZMin + townPosZMax) / 2);
//        townData.height = Mathf.CeilToInt(townData.VAUnits[0].worldPos.y + townData.VAUnits[0].vaSize.z);
//        townData.TransPos = new Vector3(townData.PosCenter.x, townData.height, townData.PosCenter.y);
        townData.radius = (int)Mathf.Sqrt(Mathf.Pow((townPosXMax - townPosXMin) / 2, 2) + Mathf.Pow((townPosZMax - townPosZMin) / 2, 2));
    }
    public static EntityMonsterBeacon CreateMonsterBeaconBySweepID(List <int> sweepDataId, Transform targetTrans,
                                                                   TowerInfoUIData uiData, int preTime, int entityId = -1, TypeTowerDefendsData data = null, int releaseNpcid = -1)
    {
        GameObject go = new GameObject("MonsterBeacon");

        Vector3 v = new Vector3();

        if (null != data)
        {
            switch (data.m_Pos.type)
            {
            case TypeTowerDefendsData.PosType.getPos:
                v = PeCreature.Instance.mainPlayer.position;
                break;

            case TypeTowerDefendsData.PosType.pos:
                v = data.m_Pos.pos;
                break;

            case TypeTowerDefendsData.PosType.npcPos:
                v = EntityMgr.Instance.Get(data.m_Pos.id).position;
                break;

            case TypeTowerDefendsData.PosType.doodadPos:
                v = EntityMgr.Instance.GetDoodadEntities(data.m_Pos.id)[0].position;
                break;

            case TypeTowerDefendsData.PosType.conoly:
                if (!CSMain.GetAssemblyPos(out v))
                {
                    v = PeCreature.Instance.mainPlayer.position;
                }
                break;

            case TypeTowerDefendsData.PosType.camp:
                if (VArtifactUtil.GetTownPos(data.m_Pos.id, out v))
                {
                    v = PeCreature.Instance.mainPlayer.position;
                }
                break;

            default:
                break;
            }
            data.finallyPos = v;
        }
        go.transform.position = v;

        AISpawnTDWavesData.TDWaveSpData spData = MonsterSweepData.GetWaveSpData(sweepDataId, v);
        if (spData == null)
        {
            return(null);
        }

        EntityMonsterBeacon bcn = go.AddComponent <EntityMonsterBeacon>();

        bcn.isSweep = true;
        EntityMgr.Instance.AddAfterAssignId(bcn, entityId != -1 ? entityId : Pathea.WorldInfoMgr.Instance.FetchNonRecordAutoId());
        bcn._uiData   = uiData;
        bcn._spData   = spData;
        bcn._position = v;
        bcn._forward  = Vector3.forward;
        bcn.PreTime   = (float)(preTime + spData._waveDatas[0]._delayTime);
        if (UITowerInfo.Instance != null && uiData != null)
        {
            UITowerInfo.Instance.SetInfo(uiData);
            UITowerInfo.Instance.Show();
            UITowerInfo.Instance.e_BtnReady += () => { bcn.PreTime = 0; };
        }

        bcn.StartCoroutine(bcn.RefreshTowerMission());
        return(bcn);
    }
    public static EntityMonsterBeacon CreateMonsterBeaconByTDID(int spDataId, Transform targetTrans,
                                                                TowerInfoUIData uiData, int entityId = -1, TypeTowerDefendsData data = null, int releaseNpcid = -1, bool bOnlyMonster = false)
    {
        // Get type mask
        int        campCol    = -1;
        List <int> spawnTypes = GetSpawnTypeMask(bOnlyMonster, out campCol);

        AISpawnTDWavesData.TDWaveSpData spData = AISpawnTDWavesData.GetWaveSpData(spDataId, UnityEngine.Random.value, spawnTypes);
        if (spData == null)
        {
            return(null);
        }

        GameObject go = new GameObject("MonsterBeacon");
        Vector3    v  = new Vector3();

        if (null != data)
        {
            switch (data.m_Pos.type)
            {
            case TypeTowerDefendsData.PosType.getPos:
                v = PeCreature.Instance.mainPlayer.position;
                break;

            case TypeTowerDefendsData.PosType.pos:
                v = data.m_Pos.pos;
                break;

            case TypeTowerDefendsData.PosType.npcPos:
                v = EntityMgr.Instance.Get(data.m_Pos.id).position;
                break;

            case TypeTowerDefendsData.PosType.doodadPos:
                v = EntityMgr.Instance.GetDoodadEntities(data.m_Pos.id)[0].position;
                break;

            case TypeTowerDefendsData.PosType.conoly:
                if (!CSMain.GetAssemblyPos(out v))
                {
                    v = PeCreature.Instance.mainPlayer.position;
                }
                break;

            case TypeTowerDefendsData.PosType.camp:
                if (!VArtifactUtil.GetTownPos(data.m_Pos.id, out v))
                {
                    v = PeCreature.Instance.mainPlayer.position;
                }
                break;

            default:
                break;
            }
            data.finallyPos = v;

            go.transform.position = v;
            go.transform.rotation = Quaternion.identity;
        }
        else if (targetTrans != null)
        {
            v = targetTrans.position;
            go.transform.position = targetTrans.position;
            go.transform.rotation = targetTrans.rotation;
        }
        EntityMonsterBeacon bcn = go.AddComponent <EntityMonsterBeacon>();

        EntityMgr.Instance.AddAfterAssignId(bcn, entityId != -1 ? entityId : Pathea.WorldInfoMgr.Instance.FetchNonRecordAutoId());
        bcn._campCol  = campCol;
        bcn._uiData   = uiData;
        bcn._spData   = spData;
        bcn._spDataId = spDataId;
        bcn._position = go.transform.position;
        bcn._forward  = go.transform.forward;
        bcn.PreTime   = (float)(spData._timeToStart + spData._waveDatas[0]._delayTime);

        if (UITowerInfo.Instance != null && uiData != null)
        {
            UITowerInfo.Instance.SetInfo(uiData);
            UITowerInfo.Instance.Show();
            UITowerInfo.Instance.e_BtnReady += () => { bcn.PreTime = 0; };
        }

        bcn.StartCoroutine(bcn.RefreshTowerMission());
        return(bcn);
    }
示例#24
0
    /// <summary>
    /// voxel modify check event before really undo and redo. Call by BSVoxelModify
    /// </summary>
    bool OnCheckVoxelModify(int opType, IntVector3[] indexes, BSVoxel[] voxels, BSVoxel[] oldvoxels, EBSBrushMode mode, IBSDataSource ds)
    {
        if (IsGod)
        {
            return(true);
        }

        if (Pathea.PeCreature.Instance.mainPlayer == null)
        {
            return(false);
        }

        bool result = true;


        if (mode == EBSBrushMode.Add)
        {
            Dictionary <int, int> items = new Dictionary <int, int>();
            // Calculate the needed items;
            int adder = 1;
            foreach (BSVoxel voxel in voxels)
            {
                int id = 0;
                if (ds == BuildingMan.Blocks)
                {
                    if (voxel.IsExtendable())
                    {
                        if (!voxel.IsExtendableRoot())
                        {
                            id    = GetBlockItemProtoID((byte)(voxel.materialType >> 2));
                            adder = 1;
                        }
                        else
                        {
                            adder = 0;
                        }
                    }
                    else
                    {
                        id = GetBlockItemProtoID(voxel.materialType);
                    }
                }
                else if (ds == BuildingMan.Voxels)
                {
                    id = GetVoxelItemProtoID(voxel.materialType);
                }

                if (id <= 0)
                {
                    continue;
                }

                if (id != 0)
                {
                    if (items.ContainsKey(id))
                    {
                        items[id] += adder;
                    }
                    else
                    {
                        items.Add(id, adder);
                    }
                }
            }
            _costsItems = items;

            float divisor = 1.0f;

            if (ds == BuildingMan.Blocks)
            {
                divisor = (float)(1 << BSBlock45Data.s_ScaleInverted);
            }

            // Has player enough items ?
            Pathea.PackageCmpt pkg = Pathea.PeCreature.Instance.mainPlayer.GetCmpt <Pathea.PackageCmpt>();

            _playerItems.Clear();
            foreach (KeyValuePair <int, int> kvp in items)
            {
                _playerItems.Add(kvp.Key, pkg.GetItemCount(kvp.Key));
                if (pkg.GetItemCount(kvp.Key) < Mathf.CeilToInt(kvp.Value / divisor))
                {
                    result = false;
                }
            }

            // now delete
            if (result)
            {
                if (GameConfig.IsMultiMode)
                {
                    if (null == PlayerNetwork.mainPlayer)
                    {
                        return(false);
                    }

                    if (!Pathea.PeGameMgr.IsMultiCoop && VArtifactUtil.IsInTownBallArea(PlayerNetwork.mainPlayer._pos))
                    {
                        new PeTipMsg(PELocalization.GetString(8000864), PeTipMsg.EMsgLevel.Warning);
                        return(false);
                    }

                    //if (!PlayerNetwork.OnLimitBoundsCheck(brushBound))
                    //{
                    //	new PeTipMsg(PELocalization.GetString(8000864), PeTipMsg.EMsgLevel.Warning);
                    //	return false;
                    //}

                    PlayerNetwork.mainPlayer.RequestRedo(opType, indexes, oldvoxels, voxels, mode, ds.DataType, ds.Scale);

                    DigTerrainManager.BlockClearGrass(ds, indexes);

                    return(true);
                }
                else
                {
                    string debug_log = "";

                    foreach (KeyValuePair <int, int> kvp in items)
                    {
                        if (pkg.Destory(kvp.Key, Mathf.CeilToInt(kvp.Value / divisor)))
                        {
                            debug_log += "\r\n Rmove Item from player package ID[" + kvp.Key.ToString() + "]" + " count - " + kvp.Value.ToString();
                        }
                    }

                    if (ds == BuildingMan.Blocks)
                    {
                        for (int i = 0; i < indexes.Length; i++)
                        {
                            Vector3 pos = new Vector3(indexes[i].x * ds.Scale, indexes[i].y * ds.Scale, indexes[i].z * ds.Scale) - ds.Offset;
                            PeGrassSystem.DeleteAtPos(pos);

                            PeGrassSystem.DeleteAtPos(new Vector3(pos.x, pos.y - 1, pos.z));

                            //PeGrassSystem.DeleteAtPos(new Vector3(pos.x, pos.y + 1, pos.z));
                        }
                    }
                    else if (ds == BuildingMan.Voxels)
                    {
                        for (int i = 0; i < indexes.Length; i++)
                        {
                            Vector3 pos = new Vector3(indexes[i].x, indexes[i].y, indexes[i].z);
                            PeGrassSystem.DeleteAtPos(pos);

                            PeGrassSystem.DeleteAtPos(new Vector3(pos.x, pos.y - 1, pos.z));

                            //PeGrassSystem.DeleteAtPos(new Vector3(pos.x, pos.y + 1, pos.z));
                        }
                    }

                    //Debug.LogWarning(debug_log);
                }
            }
            else
            {
                new PeTipMsg(PELocalization.GetString(821000001), PeTipMsg.EMsgLevel.Warning);
            }
        }
        else if (mode == EBSBrushMode.Subtract)
        {
            Dictionary <int, int> items = new Dictionary <int, int>();
            // Calculate the needed items;
            int adder = 1;
            foreach (BSVoxel voxel in oldvoxels)
            {
                int id = 0;
                if (ds == BuildingMan.Blocks)
                {
                    if (voxel.IsExtendable())
                    {
                        if (!voxel.IsExtendableRoot())
                        {
                            id    = GetBlockItemProtoID((byte)(voxel.materialType >> 2));
                            adder = 1;
                        }
                        else
                        {
                            adder = 0;
                        }
                    }
                    else
                    {
                        if (!BuildingMan.Blocks.VoxelIsZero(voxel, 0))
                        {
                            id = GetBlockItemProtoID((byte)(voxel.materialType));
                        }
                    }
                }
                else if (ds == BuildingMan.Voxels)
                {
                    if (!BuildingMan.Voxels.VoxelIsZero(voxel, 1))
                    {
                        id = GetVoxelItemProtoID(voxel.materialType);
                    }
                }

                if (id <= 0)
                {
                    continue;
                }

                if (items.ContainsKey(id))
                {
                    items[id] += adder;
                }
                else
                {
                    items.Add(id, adder);
                }
            }


            float divisor = 1.0f;

            if (ds == BuildingMan.Blocks)
            {
                divisor = (float)(1 << BSBlock45Data.s_ScaleInverted);
            }

            // Has player enough package ?
            Pathea.PlayerPackageCmpt pkg = Pathea.PeCreature.Instance.mainPlayer.GetCmpt <Pathea.PlayerPackageCmpt>();

            MaterialItem[] array = new MaterialItem[items.Count];

            int i = 0;
            foreach (KeyValuePair <int, int> kvp in items)
            {
                array[i] = new MaterialItem()
                {
                    protoId = kvp.Key,
                    count   = Mathf.FloorToInt(kvp.Value / divisor)
                };
                i++;
            }

            result = pkg.package.CanAdd(array);

            // Really add
            if (result)
            {
                if (GameConfig.IsMultiMode)
                {
                    if (null == PlayerNetwork.mainPlayer)
                    {
                        return(false);
                    }

                    //if (!PlayerNetwork.OnLimitBoundsCheck(brushBound))
                    //{
                    //	new PeTipMsg(PELocalization.GetString(8000864), PeTipMsg.EMsgLevel.Warning);
                    //	return false;
                    //}

                    PlayerNetwork.mainPlayer.RequestRedo(opType, indexes, oldvoxels, voxels, mode, ds.DataType, ds.Scale);
                    return(true);
                }
                else
                {
                    string debug_log = "";
                    foreach (MaterialItem mi in array)
                    {
                        if (mi.count != 0)
                        {
                            pkg.Add(mi.protoId, mi.count);
                        }
                        debug_log += "Add Item from player package ID[" + mi.protoId.ToString() + "]" + " count - " + mi.count.ToString() + "\r\n";
                    }

                    Debug.LogWarning(debug_log);
                }
            }
        }

        if (result)
        {
            if (onVoxelMotify != null)
            {
                onVoxelMotify(indexes, voxels, oldvoxels, mode, ds);
            }
        }

        return(result);
    }
示例#25
0
    public static void LoadAllData()
    {
        if (s_localDatabase != null)
        {
            return;
        }

#if UNITY_EDITOR
        System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
        sw.Start();
#endif
        s_localDatabase = LoadDb();
        SkillSystem.SkData.LoadData();
        Pathea.Effect.EffectData.LoadData();
        Pathea.Projectile.ProjectileData.LoadData();
        Pathea.RequestRelation.LoadData();
        Pathea.CampData.LoadData();
        Pathea.ThreatData.LoadData();
        Pathea.DamageData.LoadData();
        HumanSoundData.LoadData();
        ItemDropData.LoadData();

        PELocalization.LoadData();

        NaturalResAsset.NaturalRes.LoadData();
        //SkillAsset.EffCastData.LoadData();
        //SkillAsset.EffSkill.LoadData();
        //SkillAsset.MergeSkill.LoadData();
        //AnimData.LoadData();
        //AnimSoundData.LoadData();

        AiAsset.AiData.LoadData();

        SoundAsset.SESoundBuff.LoadData();
        SoundAsset.SESoundStory.LoadData();
        //CharacterData.LoadCharacterData();
        StoryDoodadMap.LoadData();
        StoreRepository.LoadData();
        NpcMissionDataRepository.LoadData();
        //PlayerAttribute.LoadData();
        MissionRepository.LoadData();
        TalkRespository.LoadData();
        //NpcRandomRepository.LoadData();
        ShopRespository.LoadData();
        WareHouseManager.LoadData();
        //HeroTalkRepository.LoadData();
        MutiPlayRandRespository.LoadData();
        PromptRepository.LoadData();

        //MapIconData.LoadDate();
        //MapMaskData.LoadDate();
        CampPatrolData.LoadDate();
        Camp.LoadData();
        RepProcessor.LoadData();

        CloudManager.LoadData();
        //BattleUnitData.LoadData();
        TutorialData.LoadData();
        //RepairMachineManager.LoadData();
        MapMaskData.LoadDate();
        MessageData.LoadData();         //lz-2016.07.13 Add it
        MonsterHandbookData.LoadData(); //lz-2016.07.20 Add it
        StoryRepository.LoadData();
        RMRepository.LoadRandMission();
        MisInitRepository.LoadData();
        CameraRepository.LoadCameraPlot();
        AdRMRepository.LoadData();
        VCConfig.InitConfig();
        Cutscene.LoadData();

//		BuildBrushData.LoadBrush();
        BSPattern.LoadBrush();
        BSVoxelMatMap.Load();
        BSBlockMatMap.Load();
        BlockBuilding.LoadBuilding();
        LifeFormRule.LoadData();
        PlantInfo.LoadData();
        MetalScanData.LoadData();
        BattleConstData.LoadData();
        CustomCharactor.CustomMetaData.LoadData();
        SkillTreeInfo.LoadData();
        VArtifactUtil.LoadData();
        Pathea.ActionRelationData.LoadActionRelation();

        //colony
        CSInfoMgr.LoadData();
        ProcessingObjInfo.LoadData();
        CSTradeInfoData.LoadData();
        CampTradeIdData.LoadData();
        AbnormalTypeTreatData.LoadData();
        CSMedicineSupport.LoadData();
        //RandomItemMgr
        RandomItemDataMgr.LoadData();
        FecesData.LoadData();
        //randomdungeon
        RandomDungeonDataBase.LoadData();
        AbnormalData.LoadData();
        PEAbnormalNoticeData.LoadData();

        RelationInfo.LoadData();
        EquipSetData.LoadData();
        SuitSetData.LoadData();

        CheatData.LoadData();

        Pathea.NpcProtoDb.Load();
        Pathea.MonsterProtoDb.Load();
        Pathea.MonsterRandomDb.Load();
        Pathea.MonsterGroupProtoDb.Load();
        Pathea.RandomNpcDb.Load();
        Pathea.PlayerProtoDb.Load();
        Pathea.TowerProtoDb.Load();
        Pathea.DoodadProtoDb.Load();
        Pathea.AttPlusNPCData.Load();
        Pathea.AttPlusBuffDb.Load();
        Pathea.NpcTypeDb.Load();
        Pathea.NpcRandomTalkDb.Load();
        Pathea.NpcThinkDb.LoadData();
        Pathea.NpcEatDb.LoadData();
        Pathea.NpcRobotDb.Load();
        Pathea.NPCScheduleData.Load();
        Pathea.NpcVoiceDb.LoadData();
        InGameAidData.LoadData(); //lz-2016.08.21 add it
        MountsSkillDb.LoadData();

#if UNITY_EDITOR
        sw.Stop();
        Debug.Log("Database Loaded : " + sw.ElapsedMilliseconds);
        sw.Reset();
#else
        Debug.Log("Database Loaded");
#endif
    }
示例#26
0
    //public void CreateNpcReady(IntVector4 nodePosLod)
    //{
    //    //return;
    //    IntVector3 chunkCenter = new Vector3(nodePosLod.x, nodePosLod.y, nodePosLod.z);
    //    //LogManager.Error("createNpcReady", chunkCenter);
    //    for (int i = chunkCenter.x; i < chunkCenter.x + VoxelTerrainConstants._numVoxelsPerAxis; i++)
    //    {
    //        for (int j = chunkCenter.z; j < chunkCenter.z + VoxelTerrainConstants._numVoxelsPerAxis; j++)
    //        {
    //            IntVector2 posXZ = new IntVector2(i, j);
    //            if (!npcInfoMap.ContainsKey(posXZ))
    //            {
    //                continue;
    //            }
    //            VATownNpcInfo townNpcInfo = npcInfoMap[posXZ];
    //            if (!nodePosLod.ContainInTerrainNode(townNpcInfo.getPos()))
    //            {
    //                LogManager.Error("!nodePosLod.ContainInTerrainNode");
    //                continue;
    //            }
    //            if (townNpcInfo.PosY == -1)
    //            {
    //                continue;
    //            }
    //            int Id = townNpcInfo.getId();
    //            if (!NpcMissionDataRepository.m_AdRandMisNpcData.ContainsKey(Id))
    //            {
    //                continue;
    //            }
    //            //LogManager.Error("TownNPC: ID="+townNpcInfo.getId()+" pos="+townNpcInfo.getPos());
    //            if (Pathea.PeGameMgr.IsSingleAdventure)
    //            {
    //                AdNpcData adNpcData = NpcMissionDataRepository.m_AdRandMisNpcData[Id];
    //                int RNpcId = adNpcData.mRnpc_ID;
    //                int Qid = adNpcData.mQC_ID;

    //                //int npcid = NpcManager.Instance.RequestRandomNpc(RNpcId, townNpcInfo.getPos(), StroyManager.Instance.OnRandomNpcCreated1, adNpcData);
    //                //createdNpcIdList.Add(npcid);

    //                //NpcRandom nr = NpcManager.Instance.CreateRandomNpc(RNpcId, townNpcInfo.getPos());
    //                //StroyManager.Instance.NpcTakeMission(RNpcId, Qid, townNpcInfo.getPos(), nr, adNpcData.m_CSRecruitMissionList);
    //                //LogManager.Error("npc Created!Pos: " + townNpcInfo.getPos() + " id: " + RNpcId);
    //                //createdNpcIdList.Add(nr.mNpcId);
    //                createdPosList.Add(posXZ);
    //                npcInfoMap.Remove(posXZ);

    //            }
    //            else if (GameConfig.IsMultiMode)
    //            {
    //                SPTerrainEvent.instance.CreateAdNpcByIndex(townNpcInfo.getPos(), Id);
    //                npcInfoMap.Remove(posXZ);
    //            }
    //        }
    //    }
    //}

    //public void RenderTownNPC(IntVector2 posXZ)
    //{
    //    if (!npcInfoMap.ContainsKey(posXZ))
    //    {
    //        return;
    //    }
    //    VATownNpcInfo townNpcInfo = npcInfoMap[posXZ];
    //    if (townNpcInfo.PosY == -1)
    //    {
    //        return;
    //    }

    //    RenderTownNPC(townNpcInfo);
    //}

    public void RenderTownNPC(VATownNpcInfo townNpcInfo)
    {
        IntVector2 posXZ = townNpcInfo.Index;

        if (!npcInfoMap.ContainsKey(posXZ))
        {
            return;
        }
        int Id = townNpcInfo.getId();

        //if (!NpcMissionDataRepository.m_AdRandMisNpcData.ContainsKey(Id))
        //{
        //    return;
        //}
        if (Pathea.PeGameMgr.IsSingleAdventure)
        {
            //AdNpcData adNpcData = NpcMissionDataRepository.m_AdRandMisNpcData[Id];
            //int RNpcId = adNpcData.mRnpc_ID;
            //int Qid = adNpcData.mQC_ID;

            int enemyNpcId = GetEnemyNpcId(Id);
            int allyId     = VArtifactTownManager.Instance.GetTownByID(townNpcInfo.townId).AllyId;
            int allyColor  = VATownGenerator.Instance.GetAllyColor(allyId);
            int playerId   = VATownGenerator.Instance.GetPlayerId(allyId);
            if (allyId != TownGenData.PlayerAlly)
            {
                SceneEntityPosAgent agent = MonsterEntityCreator.CreateAdAgent(townNpcInfo.getPos(), enemyNpcId, allyColor, playerId);
                SceneMan.AddSceneObj(agent);
                VArtifactTownManager.Instance.AddMonsterPointAgent(townNpcInfo.townId, agent);
            }
            else
            {
                PeEntity npc = NpcEntityCreator.CreateNpc(Id, townNpcInfo.getPos(), Vector3.one, Quaternion.Euler(0, 180, 0));
                if (npc == null)
                {
                    Debug.LogError("npc id error: templateId = " + Id);
                    return;
                }
                //Debug.Log("created town npc:"+ npc.name+"_"+npc.position);
                VArtifactUtil.SetNpcStandRot(npc, 180, false);              //test
                if (Id == VArtifactTownManager.Instance.missionStartNpcID)
                {
                    VArtifactTownManager.Instance.missionStartNpcEntityId = npc.Id;
                }
                createdPosList.Add(posXZ);
            }

            //Debug.Log("Id: " + Id + " npcPos:" + townNpcInfo.getPos());

            //int npcid = NpcManager.Instance.RequestRandomNpc(RNpcId, townNpcInfo.getPos(), StroyManager.Instance.OnRandomNpcCreated1, adNpcData);
            //createdNpcIdList.Add(Id);

            //NpcRandom nr = NpcManager.Instance.CreateRandomNpc(RNpcId, townNpcInfo.getPos());
            //StroyManager.Instance.NpcTakeMission(RNpcId, Qid, townNpcInfo.getPos(), nr, adNpcData.m_CSRecruitMissionList);
            //LogManager.Error("npc Created!Pos: " + townNpcInfo.getPos() + " id: " + RNpcId);
            //createdNpcIdList.Add(nr.mNpcId);
            npcInfoMap.Remove(posXZ);
        }
        else if (GameConfig.IsMultiMode)
        {
            int enemyNpcId = GetEnemyNpcId(Id);
            int allyId     = VArtifactTownManager.Instance.GetTownByID(townNpcInfo.townId).AllyId;
            int allyColor  = VATownGenerator.Instance.GetAllyColor(allyId);
            int playerId   = VATownGenerator.Instance.GetPlayerId(allyId);
            if (allyId != TownGenData.PlayerAlly)
            {
                SceneEntityPosAgent agent = MonsterEntityCreator.CreateAdAgent(townNpcInfo.getPos(), enemyNpcId, allyColor, playerId);
                SceneMan.AddSceneObj(agent);
                VArtifactTownManager.Instance.AddMonsterPointAgent(townNpcInfo.townId, agent);
            }
            else
            {
                StartCoroutine(RenderOneNpc(townNpcInfo.getPos(), Id));
            }
            npcInfoMap.Remove(posXZ);
        }
    }
    public bool Start()
    {
        MissionCommonData data = MissionManager.GetMissionCommonData(MissionId);

        for (int i = 0; i < data.m_TargetIDList.Count; i++)
        {
            if (data.m_TargetIDList[i] == TargetId)
            {
                _idxTarId = i;
                break;
            }
        }
        if (_idxTarId == -1)
        {
            return(false);
        }
        _data = MissionManager.GetTypeMonsterData(TargetId);
        if (_data == null)
        {
            return(false);
        }
        Vector3 referToPos;

        switch (_data.m_mr.refertoType)
        {
        case ReferToType.None:
            referToPos = PeCreature.Instance.mainPlayer.position;
            break;

        case ReferToType.Player:
            referToPos = PeCreature.Instance.mainPlayer.position;
            break;

        case ReferToType.Town:
            VArtifactUtil.GetTownPos(_data.m_mr.referToID, out referToPos);
            break;

        case ReferToType.Npc:
            referToPos = EntityMgr.Instance.Get(MissionManager.Instance.m_PlayerMission.adId_entityId[_data.m_mr.referToID]).position;
            break;

        default:
            referToPos = PeCreature.Instance.mainPlayer.position;
            break;
        }
        if (referToPos == Vector3.zero)
        {
            return(false);
        }
        if (PeGameMgr.IsSingle || PeGameMgr.IsTutorial)
        {
            if (_data.type == 2)
            {
                DoodadEntityCreator.commonDeathEvent += OnMonsterDeath;
            }
            else
            {
                MonsterEntityCreator.commonDeathEvent += OnMonsterDeath;
            }
        }

        GenMonsterInMission = !PeGameMgr.IsStory;
        if (GenMonsterInMission)
        {
#if  DbgNearGen
            Vector2 v2 = Vector2.zero;
#else
            Vector2 v2 = UnityEngine.Random.insideUnitCircle.normalized * _data.m_mr.radius1;
#endif
            Vector3 center = referToPos + new Vector3(v2.x, 0.0f, v2.y);
            //for (int i = 0; i < _data.m_MonsterList.Count; i++) {
            //	int num = _data.m_MonsterList[i].type;
            //             int protoId = _data.m_MonsterList[i].npcs[UnityEngine.Random.Range(0, _data.m_MonsterList[i].npcs.Count)];
            //	for (int j = 0; j < num; j++) {
            //		Vector3 pos = AiUtil.GetRandomPosition (center, 0, _data.m_mr.radius2);
            //		pos.y = SceneEntityPosAgent.PosYTBD;	// let posagent to set y
            //		SceneEntityPosAgent agent = MonsterEntityCreator.CreateAgent(pos, protoId);
            //		agent.spInfo = new MonsterEntityCreator.AgentInfo(EntityMonsterBeacon.GetSpBeacon4MonsterKillTask());
            //		_agents.Add (agent);
            //		SceneMan.AddSceneObj (agent);
            //	}
            //}

            for (int i = 0; i < _data.m_CreMonList.Count; i++)
            {
                for (int j = 0; j < _data.m_CreMonList[i].monNum; j++)
                {
                    Vector3 pos = AiUtil.GetRandomPosition(center, 0, _data.m_mr.radius2);
                    pos.y = SceneEntityPosAgent.PosYTBD;    // let posagent to set y
                    int protoId = _data.m_CreMonList[i].monID;
                    if (_data.m_CreMonList[i].type == 1)
                    {
                        protoId |= EntityProto.IdGrpMask;
                    }
                    SceneEntityPosAgent agent = MonsterEntityCreator.CreateAgent(pos, protoId);
                    agent.spInfo  = new MonsterEntityCreator.AgentInfo(EntityMonsterBeacon.GetSpBeacon4MonsterKillTask());
                    agent.canRide = false;
                    _agents.Add(agent);
                    SceneMan.AddSceneObj(agent);
                }
            }
        }
        return(true);
    }
    static float GetTownChangeValue(float finalFTerType, IntVector2 worldXZ, float[] terTypeInc)
    {
        if (VArtifactUtil.HasTown())
        {
            if (finalFTerType > TownFTerTypeTop(terTypeInc))
            {
                VArtifactTown vat;
                float         factorValue      = 1;
                float         nearTownDistance = VATownGenerator.Instance.GetAreaTownDistance(worldXZ.x, worldXZ.y, out vat);
                //float terTypeDistanceFactor = 1;//+(finalFTerType-TownFTerTypeTop)/(1-TownFTerTypeTop)*TownHillChangeFactor;

                float scaledX     = worldXZ.x * s_detailScale;
                float scaledZ     = worldXZ.y * s_detailScale;
                float changeNoise = Mathf.Abs((float)myNoise[TownChangeIndex].Noise(scaledX * TownChangeFrequency, scaledZ * TownChangeFrequency));                //1~0~1
                //				changeNoise = 1-changeNoise; //0~1~0;
                float changeFactor = 1 + changeNoise * TownChangeFactor;
                if (vat != null)
                {
                    if (nearTownDistance < vat.SmallRadius * changeFactor)
                    {
                        factorValue = 0;
                    }
                    else if (nearTownDistance < (vat.SmallRadius + TownHillDistance) * changeFactor)
                    {
                        factorValue = (nearTownDistance - vat.SmallRadius * changeFactor) / (TownHillDistance * changeFactor);
                    }
                }
                if (factorValue > 0)
                {
                    //					float nearConnectionDistance = VATownGenerator.Instance.GetConnectionLineDistance(worldXZ);
                    //					if(nearConnectionDistance <TownConnectionWidth*changeFactor){
                    //						factorValue=0;
                    //					}
                    //					else if(nearConnectionDistance<(TownConnectionWidth+TownConnectionHillDistance)*changeFactor){
                    //						float temp = (nearConnectionDistance-TownConnectionWidth*changeFactor)/(TownConnectionHillDistance*changeFactor);
                    //						if(factorValue >temp)
                    //							factorValue = temp;
                    //					}

                    float temp = GetTownConnectionFactor(worldXZ.x, worldXZ.y, TownConnectionHillDistance, changeFactor);
                    if (factorValue > temp)
                    {
                        factorValue = temp;
                    }
                }
                finalFTerType = factorValue * (finalFTerType - TownFTerTypeTop(terTypeInc)) + TownFTerTypeTop(terTypeInc);
            }
            else if (finalFTerType < TownFTerTypeBottom(terTypeInc))
            {
                VArtifactTown vat;
                float         factorValue      = 1;
                float         nearTownDistance = VATownGenerator.Instance.GetAreaTownDistance(worldXZ.x, worldXZ.y, out vat);
                float         scaledX          = worldXZ.x * s_detailScale;
                float         scaledZ          = worldXZ.y * s_detailScale;
                float         changeNoise      = ((float)myNoise[TownChangeIndex].Noise(scaledX * TownChangeFrequency, scaledZ * TownChangeFrequency) + 1) / 2;//0~1
                float         changeFactor     = 1 + changeNoise * TownChangeFactor;
                if (vat != null)
                {
                    if (nearTownDistance < vat.MiddleRadius * changeFactor)
                    {
                        factorValue = 0;
                    }
                    else if (nearTownDistance < (vat.MiddleRadius + TownWaterDistance) * changeFactor)
                    {
                        factorValue = (nearTownDistance - vat.MiddleRadius * changeFactor) / (TownWaterDistance * changeFactor);
                    }
                }
                if (factorValue > 0)
                {
                    //					float nearConnectionDistance = VATownGenerator.Instance.GetConnectionLineDistance(worldXZ);
                    //					if(nearConnectionDistance <TownConnectionWidth*changeFactor){
                    //						factorValue=0;
                    //					}
                    //					else if(nearConnectionDistance<(TownConnectionWidth+TownConnectionWaterDistance)*changeFactor){
                    //						float temp = (nearConnectionDistance-TownConnectionWidth*changeFactor)/(TownConnectionWaterDistance*changeFactor);
                    //						if(factorValue >temp)
                    //							factorValue = temp;
                    //					}
                    float temp = GetTownConnectionFactor(worldXZ.x, worldXZ.y, TownConnectionWaterDistance, changeFactor);
                    if (factorValue > temp)
                    {
                        factorValue = temp;
                    }
                }
                finalFTerType = factorValue * (finalFTerType - TownFTerTypeBottom(terTypeInc)) + TownFTerTypeBottom(terTypeInc);
            }
        }
        else
        {
            int nearStartDistanceSqr = IntVector2.SqrMagnitude(worldXZ - noTownStartPos);
            if (nearStartDistanceSqr < (NoTownStartDistance * (TownChangeFactor + 1)) * (NoTownStartDistance * (TownChangeFactor + 1)))
            {
                float noTownStartFTerType;
                if (sceneClimate == ClimateType.CT_Wet)
                {
                    noTownStartFTerType = terTypeInc[MountainStartIndex];
                }
                else
                {
                    noTownStartFTerType = terTypeInc[HillStartIndex];
                }
                if (finalFTerType < noTownStartFTerType)
                {
                    float nearStartDistance = Mathf.Sqrt(nearStartDistanceSqr);
                    float scaledX           = worldXZ.x * s_detailScale;
                    float scaledZ           = worldXZ.y * s_detailScale;
                    float changeNoise       = ((float)myNoise[TownChangeIndex].Noise(scaledX * TownChangeFrequency, scaledZ * TownChangeFrequency) + 1) / 2;          //0~1
                    float changeFactor      = 1 + changeNoise * TownChangeFactor;
                    float factorValue       = 1;
                    if (nearStartDistance < NoTownStartDistance * changeFactor)
                    {
                        factorValue = nearStartDistance / (NoTownStartDistance * changeFactor);
                    }
                    finalFTerType = factorValue * (finalFTerType - noTownStartFTerType) + noTownStartFTerType;
                }
            }
        }
        return(finalFTerType);
    }
示例#29
0
    void BtnClick_OnCancel()
    {
        if (currentState == ReivieState.Reivie_Servant || currentEntity == null)
        {
            Hide();
            return;
        }
        if (!PeGameMgr.IsMulti)
        {
            ReviveLabel label = new ReviveLabel();
            label.pos = currentEntity.position;
            ReviveLabel.Mgr.Instance.Add(label);

            if (RandomDungenMgrData.InDungeon)
            {
                bool reviveSuc = DoRevive(true);
                if (reviveSuc)
                {
                    currentEntity.position = RandomDungenMgrData.revivePos;
                    Hide();
                }
                return;
            }

            //lz-2016.08.03 空对象
            if (null != MissionManager.Instance)
            {
                MissionManager.Instance.RemoveFollowTowerMission();
            }
            DoRevive(true);
            Vector3 revivePos;
            if (SingleGameStory.curType == SingleGameStory.StoryScene.DienShip0)
            {
                revivePos = new Vector3(14798.09f, 20.98818f, 8246.396f);
            }
            else if (SingleGameStory.curType == SingleGameStory.StoryScene.L1Ship)
            {
                revivePos = new Vector3(9649.354f, 90.488f, 12744.77f);
            }
            else if (SingleGameStory.curType == SingleGameStory.StoryScene.PajaShip)
            {
                revivePos = new Vector3(1593.53f, 148.635f, 8022.03f);
            }
            else
            {
                revivePos = GetNearFastTrvalPos(currentEntity.position);
            }
            Pathea.FastTravelMgr.Instance.TravelTo(revivePos);
        }
        else
        {
            Vector3 warpPos = Vector3.zero;
            if (RandomDungenMgrData.InDungeon)
            {
                warpPos = RandomDungenMgrData.revivePos;
            }
            else if (PeGameMgr.IsMultiCoop)
            {
                warpPos = GetNearFastTrvalPos(currentEntity.position);
            }
            else
            {
                if (PeGameMgr.IsCustom)
                {
                    warpPos = PlayerNetwork.mainPlayer.GetCustomModePos();
                }
                else
                {
                    IntVector2 posXZ = VArtifactUtil.GetSpawnPos();
                    warpPos = new Vector3(posXZ.x, VFDataRTGen.GetPosTop(posXZ), posXZ.y);
                }
            }

            PlayerNetwork.mainPlayer.RPCServer(EPacketType.PT_InGame_PlayerReset, warpPos);
            PlayerNetwork.mainPlayer.RequestChangeScene(0);
        }

        Hide();
    }
示例#30
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);
        }
    }