Esempio n. 1
0
        /// <summary>
        /// 删除一个特定的OBJECT
        /// </summary>
        /// <param name="obj">删除的特定Object</param>
        /// <returns></returns>
        public static bool RemoveObject(OBJECT obj)
        {
            if (!obj.isSpecificEntity)
            {
                return(false);
            }

            if (obj.isNpoId)
            {
                SpawnDataSource ds = PeCustomScene.Self.spawnData;
                if (ds.ContainMonster(obj.Id))
                {
                    SpawnPoint sp = ds.GetMonster(obj.Id);
                    PeCustomScene.Self.RemoveSpawnPoint(sp);
                }
                else if (ds.ContainNpc(obj.Id))
                {
                    SpawnPoint sp = ds.GetNpc(obj.Id);
                    PeCustomScene.Self.RemoveSpawnPoint(sp);
                }
                else if (ds.ContainDoodad(obj.Id))
                {
                    SpawnPoint sp = ds.GetDoodad(obj.Id);
                    PeCustomScene.Self.RemoveSpawnPoint(sp);
                }
                else if (ds.ContainItem(obj.Id))
                {
                    ItemSpwanPoint sp = ds.GetItem(obj.Id);


                    List <ISceneObjAgent> agents = SceneMan.GetSceneObjs <DragItemAgent>();
                    for (int i = 0; i < agents.Count; i++)
                    {
                        DragItemAgent drag_agent = agents[i] as DragItemAgent;
                        if (drag_agent.itemDrag.itemObj.protoId == sp.Prototype &&
                            drag_agent.itemDrag.itemObj.instanceId == sp.ItemObjId)
                        {
                            DragItemAgent.Destory(drag_agent);
                        }
                    }
                }
            }

            return(false);
        }
Esempio n. 2
0
        void Awake()
        {
            _self = this;


            mMlItems = new List <IMonoLike>(10);

            // Spawn DataSource & Controllerrc
            mSpawnData = new SpawnDataSource();
            SceneAgentsContoller sac = new SceneAgentsContoller();

            sac.Binder.Bind(mSpawnData);

            mControllers.Add(sac);

            scenario = new PeScenario();
            sac.Binder.Bind(mSpawnData);

            mControllers.Add(scenario);
        }
Esempio n. 3
0
        public static bool EnableSpawnPoint(OBJECT obj, bool enable)
        {
            if (obj.isPlayerId)
            {
                return(false);
            }

            if (obj.isAnyNpo ||
                (CustomGameData.Mgr.Instance != null && CustomGameData.Mgr.Instance.curGameData != null &&
                 obj.isAnyNpoInSpecificWorld && obj.Group == CustomGameData.Mgr.Instance.curGameData.WorldIndex))
            {
                foreach (var kvp in PeCustomScene.Self.spawnData.monsters)
                {
                    PeCustomScene.Self.EnableSpawnPoint(kvp.Value, enable);
                }

                foreach (var kvp in PeCustomScene.Self.spawnData.areas)
                {
                    PeCustomScene.Self.EnableSpawnPoint(kvp.Value, enable);
                }

                foreach (var kvp in PeCustomScene.Self.spawnData.npcs)
                {
                    PeCustomScene.Self.EnableSpawnPoint(kvp.Value, enable);
                }
            }
            else if (obj.isSpecificEntity)
            {
                if (obj.Group == CustomGameData.Mgr.Instance.curGameData.WorldIndex)
                {
                    SpawnDataSource ds = PeCustomScene.Self.spawnData;
                    SpawnPoint      sp = ds.GetSpawnPoint(obj.Id);
                    if (sp != null)
                    {
                        PeCustomScene.Self.EnableSpawnPoint(sp, enable);
                    }
                }
            }
            return(true);
        }
        /// <summary>
        /// Accept the notification for Views.
        /// </summary>
        /// <param name="msg_type">Msg_type.</param>
        /// <param name="data">Data.</param>
        public void OnNotification(ESceneNoification msg_type, params object[] data)
        {
            SpawnDataSource ds = mBinder.Get <SpawnDataSource>();

            switch (msg_type)
            {
            case ESceneNoification.SceneBegin:
                if (PeGameMgr.IsSingle)
                {
                    CreateAgents(ds);
                }
                break;

            case ESceneNoification.CreateAgent:
            {
                if (data.Length == 0)
                {
                    Debug.LogError("Create Agent notification parameters error");
                    break;
                }

                SpawnPoint sp = data[0] as SpawnPoint;

                CreateAgent(ds, sp);
            }
            break;

                #region SPAWNPOINT_CASE
            case ESceneNoification.RemoveSpawnPoint:
            {
                if (data.Length == 0)
                {
                    Debug.LogError("Remove SpawnPoint notification parameters error");
                    break;
                }

                SpawnPoint sp = data[0] as SpawnPoint;
                // Monster
                if (sp as MonsterSpawnPoint != null)
                {
                    MonsterSpawnPoint msp = sp as MonsterSpawnPoint;

                    // Destroy Entity First
                    if (msp.EntityID != -1)
                    {
                        CreatureMgr.Instance.Destory(sp.EntityID);
                    }

                    // Remove Agent
                    if (msp.agent != null)
                    {
                        SceneMan.RemoveSceneObj(msp.agent);
                    }

                    // Remove Spawn Point
                    ds.RemoveMonster(msp.ID);
                }
                // Npc
                else if (sp as NPCSpawnPoint != null)
                {
                    NPCSpawnPoint nsp = sp as NPCSpawnPoint;

                    // Destroy Entity First
                    if (nsp.EntityID != -1)
                    {
                        CreatureMgr.Instance.Destory(sp.EntityID);
                    }

                    if (nsp.agent != null)
                    {
                        SceneMan.RemoveSceneObj(nsp.agent);
                    }

                    ds.RemoveMonster(nsp.ID);
                }
                // Doodad
                else if (sp as DoodadSpawnPoint != null)
                {
                    DoodadSpawnPoint dsp = sp as DoodadSpawnPoint;

                    if (dsp.EntityID != -1)
                    {
                        CreatureMgr.Instance.Destory(sp.EntityID);
                    }

                    if (dsp.agent != null)
                    {
                        SceneMan.RemoveSceneObj(dsp.agent);
                    }

                    ds.RemoveMonster(dsp.ID);
                }
                // Item
                else if (sp as ItemSpwanPoint != null)
                {
                    ItemSpwanPoint isp = sp as ItemSpwanPoint;

                    List <ISceneObjAgent> agents = SceneMan.GetSceneObjs <DragArticleAgent>();
                    for (int i = 0; i < agents.Count; i++)
                    {
                        DragArticleAgent drag_agent = agents[i] as DragArticleAgent;
                        if (drag_agent != null && drag_agent.itemDrag.itemObj.instanceId == isp.ItemObjId)
                        {
                            ItemAsset.ItemMgr.Instance.DestroyItem(isp.ItemObjId);
                            SceneMan.RemoveSceneObj(drag_agent);
                            break;
                        }
                    }
                }
            }
            break;

            case ESceneNoification.EnableSpawnPoint:
            {
                if (data.Length < 1)
                {
                    Debug.LogError("Enable SpawnPoint notification parameters error");
                    break;
                }

                SpawnPoint sp     = data[0] as SpawnPoint;
                bool       enable = (bool)data[1];

                if (sp as MonsterSpawnArea != null)
                {
                    MonsterSpawnArea area = sp as MonsterSpawnArea;
                    for (int i = 0; i < area.Spawns.Count; i++)
                    {
                        for (int j = 0; j < area.Spawns[i].spawnPoints.Count; j++)
                        {
                            area.Spawns[i].spawnPoints[j].Enable = enable;
                        }
                    }
                }
                sp.Enable = enable;
            }
            break;
                #endregion

                #region CREATE_CASE
            case ESceneNoification.CreateMonster:
            {
                if (data.Length < 2)
                {
                    Debug.LogError("The [CreateMonster] notification parameter is wrong");
                    break;
                }

                SceneEntityAgent agent = data[0] as SceneEntityAgent;
                bool             save  = (bool)data[1];

                bool need_check = true;
                if (data.Length > 2)
                {
                    need_check = (bool)data[2];
                }

                Vector3 pos = agent.spawnPoint.spawnPos;
                if (!need_check || CheckPos(out pos, pos, agent.spawnPoint, agent.spawnArea))
                {
                    agent.spawnPoint.spawnPos = pos;

                    // Is Group Root?
                    if (agent.groupPoints != null)
                    {
                        agent.entityGp          = CreateMonsterGroup(agent.spawnPoint, agent.groupPoints, agent.spawnArea);
                        agent.entity            = agent.entityGp;
                        agent.entity.scenarioId = agent.ScenarioId;

                        break;
                    }

                    agent.entity            = CreateMonster(agent.mstPoint, save);
                    agent.entity.scenarioId = agent.ScenarioId;

                    if (agent.entityGp != null)
                    {
                        agent.entity.transform.parent = agent.entityGp.transform;
                    }

                    Debug.Log("Create the Monster ");
                }
            } break;

            case ESceneNoification.CreateNpc:
            {
                if (data.Length == 0)
                {
                    Debug.LogError("The [CreateNpc] notification parameters are wrong");
                    break;
                }

                SceneEntityAgent agent = data[0] as SceneEntityAgent;

                bool need_check = true;
                if (data.Length > 1)
                {
                    need_check = (bool)data[1];
                }

                Vector3 pos = agent.spawnPoint.spawnPos;
                if (!need_check || CheckPos(out pos, pos, agent.spawnPoint, agent.spawnArea))
                {
                    agent.spawnPoint.spawnPos = pos;
                    agent.entity = CreateNpc(agent.spawnPoint as NPCSpawnPoint);

                    if (agent.entity == null)
                    {
                        agent.entity.scenarioId = agent.ScenarioId;
                        Debug.LogError("[SceneEntityCreator]Failed to create npc:" + agent.protoId);
                    }
                    else
                    {
                        Debug.Log("Create the Npc [" + agent.entity.Id.ToString() + "]");
                    }
                }
            } break;

            case ESceneNoification.CreateDoodad:
            {
                if (data.Length < 2)
                {
                    Debug.LogError("The [CreateNpc] notification parameters are wrong");
                    break;
                }

                SceneStaticAgent agent = data[0] as SceneStaticAgent;
                //bool is_save = (bool)data[1];

                agent.entity            = CreadteDoodad(agent.spawnPoint as DoodadSpawnPoint, agent.IsSave);
                agent.entity.scenarioId = agent.ScenarioId;
            }
            break;
                #endregion


                #region DEAD_CASE
            case ESceneNoification.MonsterDead:
            {
                if (data.Length == 0)
                {
                    Debug.LogError("The [MonsterDead] notification parameters are wrong ");
                    break;
                }

                SceneEntityAgent agent = data[0] as SceneEntityAgent;

                MonsterSpawnPoint msp = agent.mstPoint;
                if (msp == null)
                {
                    Debug.LogError("he [MonsterDead] notification : the point is not a MonsterSpawnPoint");
                    break;
                }


                msp.isDead   = true;
                msp.EntityID = -1;

                Debug.Log("The monster [" + agent.entity.Id.ToString() + "] is Dead");
                agent.entity = null;

                if (agent.spawnArea != null)
                {
                    if (agent.spawnArea.MaxRespawnCount != 0)
                    {
                        AddMstDeadAgent(agent);
                    }
                }
                else if (msp.MaxRespawnCount != 0)
                {
                    AddMstDeadAgent(agent);
                }
            } break;

            case ESceneNoification.DoodadDead:
            {
                if (data.Length == 0)
                {
                    Debug.LogError("The [DoodadDead] notification parameters are wrong ");
                    break;
                }

                SceneStaticAgent agent = data[0] as SceneStaticAgent;

                DoodadSpawnPoint dsp = agent.spawnPoint as DoodadSpawnPoint;
                if (dsp == null)
                {
                    Debug.LogError("he [DoodadDead] notification : the point is not a DoodadSpawnPoint");
                    break;
                }

                dsp.isDead   = true;
                dsp.EntityID = -1;
            }
            break;

                #endregion
            case ESceneNoification.EntityDestroy:
            {
                if (data.Length < 2)
                {
                    Debug.LogError("The [EntityDestroy] notification parameters are wrong ");
                    break;
                }

                SpawnPoint sp     = data[0] as SpawnPoint;
                PeEntity   entity = data[1] as PeEntity;

                bool remove_data = false;
                if (data.Length > 2)
                {
                    remove_data = (bool)data[2];
                }

                if (remove_data)
                {
                    entity.Export();
                    CreatureMgr.Instance.Destory(sp.EntityID);
                    sp.EntityID = -1;
                }
                else
                {
                    CreatureMgr.Instance.DestroyAndDontRemove(sp.EntityID);
                }
            } break;
            }
        }
Esempio n. 5
0
        /// <summary>
        /// 删除指定范围内Object
        /// </summary>
        /// <param name="proto">Object类型</param>
        /// <param name="range">删除范围</param>
        /// <returns></returns>
        public static bool RemoveObjects(OBJECT proto, RANGE range)
        {
            if (!proto.isPrototype)
            {
                return(false);
            }

            if (proto.isAnyPrototype)
            {
                SpawnDataSource data = PeCustomScene.Self.spawnData;

                if (proto.type == OBJECT.OBJECTTYPE.MonsterProto)
                {
                    // Monster point
                    _tempSPList.Clear();
                    foreach (var kvp in data.monsters)
                    {
                        if (range.Contains(kvp.Value.entityPos))
                        {
                            _tempSPList.Add(kvp.Value);
                        }
                    }

                    for (int i = 0; i < _tempSPList.Count; i++)
                    {
                        PeCustomScene.Self.RemoveSpawnPoint(_tempSPList[i]);
                    }
                    _tempSPList.Clear();

                    // Monster area
                    foreach (var kvp in data.areas)
                    {
                        for (int i = 0; i < kvp.Value.Spawns.Count; i++)
                        {
                            for (int j = 0; j < kvp.Value.Spawns[i].spawnPoints.Count; j++)
                            {
                                MonsterSpawnPoint msp = kvp.Value.Spawns[i].spawnPoints[j];
                                if (range.Contains(msp.entityPos))
                                {
                                    if (msp.EntityID != -1)
                                    {
                                        CreatureMgr.Instance.Destory(msp.EntityID);
                                    }
                                }
                            }
                        }
                    }
                }
                else if (proto.type == OBJECT.OBJECTTYPE.ItemProto)
                {
                    List <ISceneObjAgent> agents = SceneMan.GetSceneObjs <DragItemAgent>();
                    for (int i = 0; i < agents.Count; i++)
                    {
                        DragItemAgent drag_agent = agents[i] as DragItemAgent;
                        if (range.Contains(drag_agent.position))
                        {
                            DragItemAgent.Destory(drag_agent);
                        }
                    }
                }
            }
            else
            {
                SpawnDataSource data = PeCustomScene.Self.spawnData;
                if (proto.type == OBJECT.OBJECTTYPE.MonsterProto)
                {
                    // Monster point
                    _tempSPList.Clear();
                    foreach (var kvp in data.monsters)
                    {
                        if (kvp.Value.Prototype == proto.Id && range.Contains(kvp.Value.entityPos))
                        {
                            _tempSPList.Add(kvp.Value);
                        }
                    }

                    for (int i = 0; i < _tempSPList.Count; i++)
                    {
                        PeCustomScene.Self.RemoveSpawnPoint(_tempSPList[i]);
                    }
                    _tempSPList.Clear();

                    // Monster area
                    foreach (var kvp in data.areas)
                    {
                        for (int i = 0; i < kvp.Value.Spawns.Count; i++)
                        {
                            for (int j = 0; j < kvp.Value.Spawns[i].spawnPoints.Count; j++)
                            {
                                MonsterSpawnPoint msp = kvp.Value.Spawns[i].spawnPoints[j];
                                if (kvp.Value.Prototype == proto.Id && range.Contains(msp.entityPos))
                                {
                                    if (msp.EntityID != -1)
                                    {
                                        CreatureMgr.Instance.Destory(msp.EntityID);
                                    }
                                }
                            }
                        }
                    }
                }
                else if (proto.type == OBJECT.OBJECTTYPE.ItemProto)
                {
                    List <ISceneObjAgent> agents = SceneMan.GetSceneObjs <DragArticleAgent>();
                    for (int i = 0; i < agents.Count; i++)
                    {
                        DragArticleAgent drag_agent = agents[i] as DragArticleAgent;
                        if (drag_agent.itemDrag.itemObj.protoId == proto.Id && range.Contains(drag_agent.position))
                        {
                            DragItemAgent.Destory(drag_agent);
                        }
                    }
                }
            }

            return(true);
        }
Esempio n. 6
0
        /// <summary>
        /// 根据 OBJECT 找到相应的 GameObject
        /// </summary>
        /// <returns>The GameObject.</returns>
        /// <param name="obj">OBJECT 结构,来自statement的自定义参数.</param>
        public static GameObject GetGameObject(OBJECT obj)
        {
            if (obj.isCurrentPlayer)
            {
                return(PeCreature.Instance.mainPlayer.gameObject);
            }

            if (!obj.isSpecificEntity)
            {
                return(null);
            }

            if (obj.isPlayerId)
            {
                if (CustomGameData.Mgr.Instance != null &&
                    CustomGameData.Mgr.Instance.curGameData != null)
                {
                    if (CustomGameData.Mgr.Instance.curGameData.curPlayer.ID == obj.Id)
                    {
                        if (PeCreature.Instance.mainPlayer != null)
                        {
                            return(PeCreature.Instance.mainPlayer.gameObject);
                        }
                    }
                }
            }
            else if (obj.isNpoId)
            {
                if (CustomGameData.Mgr.Instance != null &&
                    CustomGameData.Mgr.Instance.curGameData != null)
                {
                    if (CustomGameData.Mgr.Instance.curGameData.WorldIndex == obj.Group)
                    {
                        if (PeGameMgr.IsSingle)
                        {
                            SpawnDataSource sds = PeCustomScene.Self.spawnData;
                            // Monster ?
                            if (sds.ContainMonster(obj.Id))
                            {
                                MonsterSpawnPoint msp = sds.GetMonster(obj.Id);
                                if (msp.agent != null)
                                {
                                    if (msp.agent.entity != null)
                                    {
                                        return(msp.agent.entity.gameObject);
                                    }
                                    else
                                    {
                                        if (msp.agent.ForceCreateEntity())
                                        {
                                            return(msp.agent.entity.gameObject);
                                        }
                                        else
                                        {
                                            Debug.Log("Create Entity Faild");
                                        }
                                    }
                                }
                            }
                            // Npc ?
                            else if (sds.ContainNpc(obj.Id))
                            {
                                NPCSpawnPoint nsp = sds.GetNpc(obj.Id);
                                if (nsp.agent != null)
                                {
                                    if (nsp.agent.entity != null)
                                    {
                                        return(nsp.agent.entity.gameObject);
                                    }
                                    else
                                    {
                                        if (nsp.agent.ForceCreateEntity())
                                        {
                                            return(nsp.agent.entity.gameObject);
                                        }
                                        else
                                        {
                                            Debug.Log("Create Entity Faild");
                                        }
                                    }
                                }
                            }
                            // Doodad ?
                            else if (sds.ContainDoodad(obj.Id))
                            {
                                DoodadSpawnPoint dsp = sds.GetDoodad(obj.Id);
                                if (dsp.agent != null)
                                {
                                    if (dsp.agent.entity != null)
                                    {
                                        return(dsp.agent.entity.gameObject);
                                    }
                                    else
                                    {
                                        if (dsp.agent.ForceCreateEntity())
                                        {
                                            return(dsp.agent.entity.gameObject);
                                        }
                                        else
                                        {
                                            Debug.Log("Create Entity faild");
                                        }
                                    }
                                }
                            }
                            // Item ?
                            else if (sds.ContainItem(obj.Id))
                            {
                                //ItemAsset.Drag drag = null;
                                ItemSpwanPoint        isp       = sds.GetItem(obj.Id);
                                List <ISceneObjAgent> agents    = SceneMan.GetSceneObjs <DragArticleAgent>();
                                DragArticleAgent      tar_agent = null;
                                for (int i = 0; i < agents.Count; i++)
                                {
                                    DragArticleAgent _tar = agents[i] as DragArticleAgent;
                                    if (_tar != null && _tar.itemDrag.itemObj.instanceId == isp.ItemObjId)
                                    {
                                        tar_agent = _tar;
                                        break;
                                    }
                                }

                                if (tar_agent != null)
                                {
                                    if (tar_agent.itemLogic != null || tar_agent.itemScript != null)
                                    {
                                        if (tar_agent.itemLogic != null)
                                        {
                                            return(tar_agent.itemLogic.gameObject);
                                        }
                                        else
                                        {
                                            return(tar_agent.itemScript.gameObject);
                                        }
                                    }
                                    else
                                    {
                                        //TODO: 当前item并没有创建gameobj,强制创建?
                                        //tar_agent.TryForceCreateGO();
                                        //if (tar_agent.itemScript != null)
                                        //    return tar_agent.itemScript.gameObject;
                                    }
                                }
                            }
                        }
                        else
                        {
                            PeEntity entity = EntityMgr.Instance.GetByScenarioId(obj.Id);
                            if (null != entity)
                            {
                                return(entity.gameObject);
                            }
                        }
                    }
                }
            }


            return(null);
        }
Esempio n. 7
0
        /// <summary>
        /// Create a agent for a spawn point and add sp to the spawn data source
        /// </summary>
        void CreateAgent(SpawnDataSource ds, SpawnPoint sp)
        {
            // Create Monster Agent
            if (sp as MonsterSpawnPoint != null)
            {
                MonsterSpawnPoint msp = sp as MonsterSpawnPoint;

                if (ds.AddMonster(msp))
                {
                    SceneEntityAgent agent = _createMstAgent(msp, true, null, null, !msp.isDead);
                    msp.agent        = agent;
                    agent.ScenarioId = sp.ID;
                    AddMstDeadAgent(agent);
                }
                else
                {
                    Debug.LogError("Add Monster spawn point error");
                }
            }
            // Create Npc Agent
            else if (sp as NPCSpawnPoint != null)
            {
                NPCSpawnPoint nsp = sp as NPCSpawnPoint;
                if (ds.AddNpc(nsp))
                {
                    SceneEntityAgent agent = new SceneEntityAgent(nsp);
                    nsp.agent        = agent;
                    agent.ScenarioId = sp.ID;
                    SceneMan.AddSceneObj(agent);
                }
                else
                {
                    Debug.LogError("Add npc spawn point error");
                }
            }
            // Create Doodad Agent
            else if (sp as DoodadSpawnPoint != null)
            {
                DoodadSpawnPoint dsp = sp as DoodadSpawnPoint;
                if (ds.AddDoodad(dsp))
                {
                    SceneStaticAgent agent = new SceneStaticAgent(dsp, true);
                    dsp.agent        = agent;
                    agent.ScenarioId = sp.ID;
                    SceneMan.AddSceneObj(agent);
                }
                else
                {
                    Debug.LogError("Add doodad spawn point error");
                }
            }
            // Create Item
            else if (sp as ItemSpwanPoint != null)
            {
                ItemSpwanPoint isp = sp as ItemSpwanPoint;
                if (ds.AddItem(isp))
                {
                    DragArticleAgent agent = DragArticleAgent.PutItemByProroId(isp.Prototype
                                                                               , isp.spawnPos
                                                                               , isp.Scale
                                                                               , isp.Rotation
                                                                               , isp.CanPickup
                                                                               , isp.IsTarget);
                    if (agent != null)
                    {
                        isp.isNew        = false;
                        isp.ItemObjId    = agent.itemDrag.itemObj.instanceId;
                        agent.ScenarioId = sp.ID;
                    }
                }
                else
                {
                    Debug.LogError("Add item spawn point error");
                }
            }
            // Create Effect
            else if (sp as EffectSpwanPoint != null)
            {
            }
        }
Esempio n. 8
0
        /// <summary>
        /// Creates all the agents from data source
        /// </summary>
        void CreateAgents(SpawnDataSource ds)
        {
            foreach (KeyValuePair <int, MonsterSpawnPoint> kvp in ds.monsters)
            {
                SceneEntityAgent agent = _createMstAgent(kvp.Value, true, null, null, !kvp.Value.isDead);
                agent.ScenarioId = kvp.Value.ID;
                kvp.Value.agent  = agent;

                AddMstDeadAgent(agent);
            }


            foreach (KeyValuePair <int, MonsterSpawnArea> kvp in ds.areas)
            {
                for (int i = 0; i < kvp.Value.Spawns.Count; i++)
                {
                    MonsterSpawnArea.SocialSpawns mss = kvp.Value.Spawns[i];

                    if (!mss.isSocial)
                    {
                        for (int j = 0; j < mss.spawnPoints.Count; j++)
                        {
                            MonsterSpawnPoint sp    = mss.spawnPoints[j];
                            SceneEntityAgent  agent = _createMstAgent(sp, true, kvp.Value, null, !sp.isDead);
                            agent.ScenarioId = kvp.Value.ID;
                            sp.agent         = agent;

                            AddMstDeadAgent(agent);
                        }
                    }
                    else
                    {
                        _createMstAgent(mss.centerSP, false, kvp.Value, mss.spawnPoints.ToArray());
                    }
                }
            }

            CreateNpcAgents(ds.npcs);
            CreateDoodadAgents(ds.doodads);


            foreach (KeyValuePair <int, EffectSpwanPoint> kvp in ds.effects)
            {
                SceneStaticEffectAgent agent = SceneStaticEffectAgent.Create(kvp.Value.Prototype, kvp.Value.spawnPos, kvp.Value.Rotation, kvp.Value.Scale);
                agent.ScenarioId = kvp.Value.ID;
                SceneMan.AddSceneObj(agent);
            }

            foreach (KeyValuePair <int, ItemSpwanPoint> kvp in ds.items)
            {
                if (kvp.Value.isNew)
                {
                    DragArticleAgent agent = DragArticleAgent.PutItemByProroId(kvp.Value.Prototype
                                                                               , kvp.Value.spawnPos
                                                                               , kvp.Value.Scale
                                                                               , kvp.Value.Rotation
                                                                               , kvp.Value.CanPickup
                                                                               , kvp.Value.IsTarget);
                    if (agent != null)
                    {
                        agent.ScenarioId    = kvp.Value.ID;
                        kvp.Value.isNew     = false;
                        kvp.Value.ItemObjId = agent.itemDrag.itemObj.instanceId;
                    }
                }
            }
        }