protected override void CheckOperate()
    {
        base.CheckOperate();

        if (PeInput.Get(PeInput.LogicFunction.InteractWithItem) && CanCmd())
        {
            if (EntityMonsterBeacon.IsRunning())
            {
                PeTipMsg.Register(PELocalization.GetString(8000596), PeTipMsg.EMsgLevel.Warning);
                return;
            }

            if (!Operatable())
            {
                return;
            }

            Pathea.OperateCmpt operateCmpt = Pathea.MainPlayer.Instance.entity.operateCmpt;
            if (null != operateCmpt && operateCmpt.HasOperate)
            {
                return;
            }

            Pathea.MotionMgrCmpt mmc = Pathea.MainPlayer.Instance.entity.motionMgr;

            if (null != mmc && (mmc.IsActionRunning(Pathea.PEActionType.Sleep) || !mmc.CanDoAction(Pathea.PEActionType.Sleep)))
            {
                return;
            }

            GameUI.Instance.mItemOp.ShowSleepWnd(true, this, bedView.peSleep, Pathea.MainPlayer.Instance.entity);
            // GameUI.Instance.mItemOp.SleepImmediately(bedView.peSleep, Pathea.MainPlayer.Instance.entity);
        }
    }
    static bool ParseAgentInfo(SceneEntityPosAgent agent, out EntityGrp grp, out EntityMonsterBeacon bcn, ref float exScale, ref int colorType, ref int playerId, ref int buffId)       // bValidAgent
    {
        AgentInfo info = agent.spInfo as AgentInfo;

        grp       = info != null ? info._grp : null;
        bcn       = info != null ? info._bcn : null;
        colorType = info != null?info._colorType:-1;
        playerId  = info != null?info._playerId:-1;
        buffId    = info != null?info._buffId:0;
        if (bcn != null)
        {
            agent.protoId = MonsterEntityCreator.GetMonsterProtoIDForBeacon(agent.protoId, agent.Pos, ref exScale);
            if ((agent.protoId & EntityProto.IdAirborneAllMask) != 0)
            {
                bcn.AddAirborneReq(agent);
                return(false);
            }
        }
        if (0 > agent.protoId)
        {
            agent.protoId = (info == null || info._bsRate < 0)
                                ? GetMonsterProtoID(agent.Pos, ref exScale)
                                : GetBossMonsterProtoID(agent.Pos, info._bsRate, ref exScale);
        }
        return(agent.protoId >= 0);
    }
Пример #3
0
    public static void OnMonsterAdd(int id, AiNetwork ai, Pathea.PeEntity entity)
    {
        EntityMonsterBeacon mbEntity = Pathea.EntityMgr.Instance.Get(id) as EntityMonsterBeacon;

        if (null != mbEntity)
        {
            mbEntity.OnMonsterCreated(entity);
        }
        else
        {
            if (null != entity)
            {
                Pathea.CommonCmpt cc = entity.GetCmpt <Pathea.CommonCmpt>();
                if (cc != null)
                {
                    AiTowerDefense td = AiTowerDefense.Get <AiTowerDefense>(id);
                    if (null != td)
                    {
                        cc.TDpos = td._pos;
                    }
                }

                Pathea.SkAliveEntity sae = entity.GetCmpt <Pathea.SkAliveEntity>();
                if (sae != null)
                {
                    sae.SetAttribute(Pathea.AttribType.DefaultPlayerID, 8);
                    sae.SetAttribute(Pathea.AttribType.CampID, 26);
                }
            }
        }
    }
Пример #4
0
    void TryCreateMonsterSiege()
    {
        Camp camp = Camp.GetCamp(PeCreature.Instance.mainPlayer.position);

        if (m_Beacon == null && camp != null)
        {
            if (Time.time - m_LastRandomTime > m_RandTime * 60.0f)
            {
                m_LastRandomTime = Time.time;
                m_RandTime       = Random.Range(minMinute, maxMinute);

                if (Random.value > probability)
                {
                    m_FailedCout++;
                }
                else
                {
                    m_Beacon = EntityMonsterBeacon.CreateMonsterBeaconByTDID(1, null, null);
                    m_Beacon.TargetPosition     = camp.Pos;
                    m_Beacon.transform.position = camp.Pos;
                    m_Beacon.handlerNewWave    += OnNewWave;

                    m_FailedCout = 0;
                }
            }
        }
    }
Пример #5
0
    void Awake()
    {
        m_IsReady = true;

        m_Beacon = GetComponent <EntityMonsterBeacon>();

        m_Beacon.handlerNewWave  += OnNewWave;
        m_Beacon.handerNewEntity += OnEntitySpawned;

        if (m_Creator != null)
        {
            m_Creator.SetSiege(true);
        }

        m_Agents    = new List <SiegeAgent>();
        m_Npcs      = new List <PeEntity>();
        m_Towers    = new List <PeEntity>();
        m_Buildings = new List <PeEntity>();
        m_Defences  = new List <PeEntity>();
        m_Entities  = new List <PeEntity>();

        SiegeAgent.DeathEvent += OnDeath;

        StartCoroutine(Defence());
        StartCoroutine(Warning());
    }
Пример #6
0
    void OnEntitySpawned(SceneEntityPosAgent agent)
    {
        m_MaxCount++;

        if (!EntityMonsterBeacon.IsBcnMonsterProtoId(agent.protoId))            // not encoded, unexpected agent
        {
            return;
        }

        int spType, lvl, spawnType;

        EntityMonsterBeacon.DecodeBcnMonsterProtoId(agent.protoId, out spType, out lvl, out spawnType);

        int areaType = PeGameMgr.IsStory
            ? PeMappingMgr.Instance.GetAiSpawnMapId(new Vector2(agent.Pos.x, agent.Pos.z))
            : AiUtil.GetMapID(agent.Pos);

        AISpawnTDWavesData.TDMonsterSpData data = AISpawnTDWavesData.GetMonsterSpData(false, spType, lvl, spawnType, areaType);

        float rhp = data != null ? data._rhp : 200.0f;
        float dps = data != null ? data._dps : 50.0f;

        SiegeAgent siegeAgent = new SiegeAgent(this, agent, rhp, dps);

        agent.spInfo = new SiegeAgent.AgentInfo(m_Beacon, siegeAgent);
        m_Agents.Add(siegeAgent);
    }
 public static EntityMonsterBeacon GetSpBeacon4MonsterKillTask()
 {
     if (s_spBeacon == null)
     {
         GameObject go = new GameObject("SpBeacon4MK");
         s_spBeacon = go.AddComponent <EntityMonsterBeacon4Kill>();
         EntityMgr.Instance.AddAfterAssignId(s_spBeacon, MonsterKillBeaconID);
     }
     return(s_spBeacon);
 }
Пример #8
0
 void BtnReady_OnClick()
 {
     if (!EntityMonsterBeacon.IsController())
     {
         return;
     }
     if (e_BtnReady != null)
     {
         e_BtnReady();
     }
 }
    bool CheckMonsterBeaconEnable()
    {
        ItemScript_MonsterBeacon monsterBeacon = GetComponent <ItemScript_MonsterBeacon>();

        if (null != monsterBeacon && EntityMonsterBeacon.IsRunning())
        {
            PeTipMsg.Register(PELocalization.GetString(82201076), PeTipMsg.EMsgLevel.Warning);
            return(false);
        }
        return(true);
    }
Пример #10
0
    void CreateMonsterBeacon()
    {
        if (_lvl > 0 && assembly != null && assembly.m_Entity != null)
        {
            if (m_Beacon != null)
            {
                m_Beacon.Delete();
            }

            m_UIData = new TowerInfoUIData();
            m_Beacon = EntityMonsterBeacon.CreateMonsterBeaconByTDID(_lvl, transform, m_UIData);
            m_Beacon.gameObject.AddComponent <MonsterSiege>().SetCreator(assembly.m_Entity.m_Creator as CSMgCreator, m_UIData);
        }
    }
Пример #11
0
    IEnumerator WaitForActivate()
    {
        while (true)
        {
            yield return(null);

            _mbEntity = Pathea.EntityMgr.Instance.Get(Id) as EntityMonsterBeacon;
            if (null != _mbEntity)
            {
                break;
            }
        }

        OnActivate();
    }
    protected override void InitCmd(CmdList cmdList)
    {
        cmdList.Add("Turn", Turn90Degree);
        cmdList.Add("Get", OnGetBtn);

        //if (!GameConfig.IsMultiMode)
        {
            if (bedView.peSleep.CanOperateMask(Pathea.Operate.EOperationMask.Sleep))
            {
                cmdList.Add("Sleep", () =>
                {
                    if (EntityMonsterBeacon.IsRunning())
                    {
                        PeTipMsg.Register(PELocalization.GetString(8000596), PeTipMsg.EMsgLevel.Warning);
                        return;
                    }
                    if (!bedView.peSleep.CanOperateMask(Pathea.Operate.EOperationMask.Sleep))
                    {
                        return;
                    }

                    Pathea.OperateCmpt operateCmpt = Pathea.MainPlayer.Instance.entity.operateCmpt;
                    if (null != operateCmpt && operateCmpt.HasOperate)
                    {
                        return;
                    }

                    Pathea.MotionMgrCmpt mmc = Pathea.MainPlayer.Instance.entity.GetCmpt <Pathea.MotionMgrCmpt>();

                    if (null != mmc && (mmc.IsActionRunning(Pathea.PEActionType.Sleep) || !mmc.CanDoAction(Pathea.PEActionType.Sleep)))
                    {
                        return;
                    }

                    //if (GameConfig.IsMultiMode)
                    //     GameUI.Instance.mItemOp.SleepImmediately(bedView.peSleep, Pathea.MainPlayer.Instance.entity);
                    //else
                    GameUI.Instance.mItemOp.ShowSleepWnd(true, this, bedView.peSleep, Pathea.MainPlayer.Instance.entity);
                });
            }
        }
    }
Пример #13
0
    void SetSiegeID(int id)
    {
        if (m_CurSiegeID == 0 && m_MonsterSiege == null)
        {
            m_Town.SetMsId(id);
            m_CurSiegeID = id;

            m_IsReady       = false;
            m_SpawnFinished = false;
            m_ElapsedTime   = 0.0f;

            m_UIData       = new TowerInfoUIData();
            m_MonsterSiege = EntityMonsterBeacon.CreateMonsterBeaconByTDID(m_CurSiegeID, null, m_UIData);
            m_MonsterSiege.transform.position = m_Town.TransPos;
            m_MonsterSiege.TargetPosition     = m_Town.TransPos;
            m_MonsterSiege.handlerOneDeath   += OnMemberDeath;
            m_MonsterSiege.handerNewEntity   += OnMemberCreated;
            m_MonsterSiege.handlerNewWave    += OnNewWave;
        }
    }
Пример #14
0
    public override void OnActivate()
    {
        base.OnActivate();

        if (_entityBcn != null)
        {
            Debug.LogError("[MonsterBeaconItem]:MonsterBeacon has existed.");
            return;
        }
        //Put off aispawn tower defense
        int entityId = GameConfig.IsMultiMode ? id : -1;

        _entityBcn = EntityMonsterBeacon.CreateMonsterBeaconByTDID(m_monsterBeaconId, transform, new TowerInfoUIData(), entityId, null, -1, true);
        if (_entityBcn != null)
        {
            _entityBcn.handlerNewWave += OnNewWave;
            _agent = DragItemAgent.GetById(id);
            if (_agent != null)
            {
                SceneMan.RemoveSceneObj(_agent);                        // Not been managed by sceneMan
            }
        }
    }
    public override void OnGetBtn()
    {
        //base.OnGetBtn ();
        //if (!GameConfig.IsMultiMode)
        //{
        CSEntityObject ceo = GetComponent <CSEntityObject>();

        if (ceo == null)
        {
            return;
        }

        if (EntityMonsterBeacon.IsRunning())
        {
            PeTipMsg.Register(PELocalization.GetString(8000622), PeTipMsg.EMsgLevel.Warning);
            CloseOn();
            return;
        }

        if (ceo.m_Entity.BaseData.m_Durability < ceo.m_Entity.m_Info.m_Durability * 0.15f)
        {
            MessageBox_N.ShowOkBox(PELocalization.GetString(8000084));
        }
        else
        {
            if (ceo as CSDwellingsObject != null)
            {
                MessageBox_N.ShowYNBox(PELocalization.GetString(8000085), GetOn, CloseOn);
            }
            else
            {
                MessageBox_N.ShowYNBox(PELocalization.GetString(8000086), GetOn, CloseOn);
            }
        }
        //}
    }
Пример #16
0
    void Update()
    {
        if (MonsterSiegeBasePause || PeGameMgr.IsMulti || EntityMonsterBeacon.IsRunning() || PeGameMgr.IsBuild)
        {
            return;
        }

        if (assembly == null || assembly.m_Entity == null || !(assembly.m_Entity is CSAssembly))
        {
            return;
        }

        Init();

        if (_lvl > 0 && m_Beacon == null)
        {
            lvl = 0;
        }

        if (m_Timer.Hour - _lastHour >= _nextHour)
        {
            CalculateLvl();
        }
    }
 public AgentInfo(EntityMonsterBeacon bcn)
 {
     _bcn = bcn;                             _colorType = _bcn.CampColor;
 }
Пример #18
0
    void Update()
    {
        if (PeCreature.Instance.mainPlayer == null || UITowerInfo.Instance == null)
        {
            return;
        }

        if (m_RecordTown != null)
        {
            m_Town = m_RecordTown;
            SetSiegeID(m_RecordTown.ms_id);

            m_RecordTown = null;
        }

        if (m_MonsterSiege != null && m_SpawnFinished && m_UIData.CurCount == m_UIData.MaxCount)
        {
            GameObject.DestroyImmediate(m_MonsterSiege.gameObject);
        }

        if (m_CurSiegeID > 0 && m_MonsterSiege == null)
        {
            m_CurSiegeID    = 0;
            m_SpawnFinished = false;

            if (m_Town != null)
            {
                m_Town.SetMsId(0);
            }
        }

        if (m_IsReady)
        {
            m_ElapsedTime += Time.deltaTime;
        }

        if (m_MonsterSiege != null && m_MonsterSiege.SpData._timeToDelete > PETools.PEMath.Epsilon)
        {
            float remainTime = Mathf.Max(0.0f, m_MonsterSiege.SpData._timeToDelete - m_ElapsedTime);

            if (m_UIData != null)
            {
                m_UIData.RemainTime = remainTime;
            }

            if (remainTime <= PETools.PEMath.Epsilon)
            {
                m_MonsterSiege.Delete();
            }
        }

        if (!EntityMonsterBeacon.IsRunning() && m_CurSiegeID == 0 && m_MonsterSiege == null)
        {
            m_Town = VArtifactTown.GetStandTown(PeCreature.Instance.mainPlayer.position);

            if (m_Town != null)
            {
                if (m_Town.lastHour < PETools.PEMath.Epsilon || m_Town.nextHour < PETools.PEMath.Epsilon)
                {
                    m_Town.RandomSiege(minHour, maxHour);
                }
#if false
                if (Input.GetKey(KeyCode.L))
                {
                    m_Town.lastHour      = 0;
                    m_Town.lastCheckTime = 0;
                    probability          = 1.1f;
                }
#endif
                if (GameTime.Timer.Hour - m_Town.lastHour >= m_Town.nextHour)
                {
                    if (Time.time - m_Town.lastCheckTime >= perCheckTime)
                    {
                        if (Random.value < probability)
                        {
                            SetSiegeID(GetLevel(m_Town));
                            m_Town.RandomSiege(minHour, maxHour);
                        }

                        m_Town.lastCheckTime = Time.time;
                    }
                }
            }
        }
    }
Пример #19
0
    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);
    }
Пример #20
0
    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);
    }
Пример #21
0
    public bool Start()
    {
        //if (playerMission.GetMissionFlagType(MissionId) == null) return false;
        if (SceneEntityCreator.self.PlayerTrans == null)
        {
            return(false);
        }

        //if (!MissionManager.Instance.m_bHadInitMission)
        //{
        //    Debug.LogError("[MissionManager]Mission not inited.");
        //    return false;
        //}
        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);
        }
        _towerData = MissionManager.GetTypeTowerDefendsData(TargetId);
        if (_towerData == null)
        {
            return(false);
        }

        if (PeGameMgr.IsSingle)
        {
            playerMission.m_TowerUIData.MaxCount = _towerData.m_Count;
        }
        else
        {
            playerMission.m_TowerUIData.MaxCount = 0;
        }
        playerMission.m_TowerUIData.MissionID = MissionId;
        playerMission.m_TowerUIData.CurCount  = 0;

        if (_towerData.m_TdInfoId != 0)
        {
            _entityBcn = EntityMonsterBeacon.CreateMonsterBeaconByTDID(_towerData.m_TdInfoId, SceneEntityCreator.self.PlayerTrans,
                                                                       playerMission.m_TowerUIData, _entityBcnId, _towerData, data.m_iNpc);
        }
        else if (_towerData.m_SweepId.Count > 0)
        {
            _entityBcn = EntityMonsterBeacon.CreateMonsterBeaconBySweepID(_towerData.m_SweepId, SceneEntityCreator.self.PlayerTrans,
                                                                          playerMission.m_TowerUIData, _towerData.m_Time, _entityBcnId, _towerData, data.m_iNpc);
        }
        else
        {
            return(false);
        }

        if (_towerData.m_tolTime != 0)
        {
            MissionManager.Instance.SetTowerMissionStartTime(TargetId);
        }

        if (_entityBcn == null)
        {
            return(false);
        }
        _entityBcnId = _entityBcn.Id;
        _entityBcn.handlerNewWave  += OnNewWave;
        _entityBcn.handlerOneDeath += OnOneDeath;

        PeEntity npc = null;

        for (int m = 0; m < _towerData.m_iNpcList.Count; m++)
        {
            npc = EntityMgr.Instance.Get(_towerData.m_iNpcList[m]);
            if (npc == null)
            {
                continue;
            }
            npc.SetInvincible(false);
        }

        //_leftCntToFin = _towerData.m_Count;
        //Register all waves into playerMission to avoid complete shortly
        string value = "0_0_0_0_0"; // just for pass checking in IsReplyTarget: x(spType), num, cnt, created, completeTarget

        playerMission.ModifyQuestVariable(MissionId, PlayerMission.MissionFlagTDMonster + _idxTarId, value);
        //MissionManager.mTowerKillNum = "0";
        //MissionManager.mTowerMonCount = towerData.m_Count.ToString();

        return(true);
    }
    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);
    }
Пример #23
0
 public AgentInfo(EntityMonsterBeacon bcn, SiegeAgent agent) : base(bcn)
 {
     _agent = agent;
 }
    static int GetMonsterProtoIDForBeacon(int bcnProtoId, Vector3 pos, ref float fScale)
    {
        if (!EntityMonsterBeacon.IsBcnMonsterProtoId(bcnProtoId))               // not encoded
        {
            return(bcnProtoId);
        }

        int spType, lvl, spawnType;

        EntityMonsterBeacon.DecodeBcnMonsterProtoId(bcnProtoId, out spType, out lvl, out spawnType);

        int terType  = 0;
        int areaType = -1;

        AISpawnTDWavesData.TDMonsterData md = null;
        if (spType < EntityMonsterBeacon.TowerDefenseSpType_Beg)
        {
            PointType pt = AiUtil.GetPointType(pos);
            switch (pt)
            {
            default:
            case PointType.PT_Ground:
                terType = 0;
                break;

            case PointType.PT_Water:
                terType = 1;
                break;

            case PointType.PT_Slope:
                terType = 2;
                break;

            case PointType.PT_Cave:
                terType = 3;
                break;
            }
            areaType = PeGameMgr.IsStory ? PeMappingMgr.Instance.GetAiSpawnMapId(new Vector2(pos.x, pos.z)) : AiUtil.GetMapID(pos);
            if (PeGameMgr.IsAdventure && areaType == 5)
            {
                areaType = 2;
            }
        }
        int opPlayerId = -1;

        if (MainPlayerCmpt.gMainPlayer != null)
        {
            SkAliveEntity skPlayer = MainPlayerCmpt.gMainPlayer.Entity.aliveEntity;
            if (skPlayer != null)
            {
                opPlayerId = (int)skPlayer.GetAttribute(AttribType.DefaultPlayerID);
            }
        }
        md = AISpawnTDWavesData.GetMonsterProtoId(!PeGameMgr.IsStory, spType, lvl, spawnType, areaType, terType, opPlayerId);
        if (null != md)
        {
            // md.ProtoId |= EntityProto.IdAirbornePujaMask;	// test airborne
            if (md.IsAirbornePuja)
            {
                md.ProtoId |= EntityProto.IdAirbornePujaMask;
            }
            if (md.IsAirbornePaja)
            {
                md.ProtoId |= EntityProto.IdAirbornePajaMask;
            }
            if (md.IsGrp)
            {
                md.ProtoId |= EntityProto.IdGrpMask;
            }
            return(md.ProtoId);
        }
        return(-1);
    }
Пример #25
0
    void Update()
    {
        actionTime -= Time.deltaTime;
        timeCount  += GameTime.DeltaTime;
        if (timeCount >= maxSleepTime || (isMainPlayer && actionTime < 0 &&
                                          (PeInput.Get(PeInput.LogicFunction.InteractWithItem) || EntityMonsterBeacon.IsRunning())))
        {
            if (peSleep != null)
            {
                peSleep.StopOperate(character, EOperationMask.Sleep);
//				peSleep.UnDo(character);
            }
            enabled = false;
        }
    }