Beispiel #1
0
        InstanceMap CreateInstance(uint InstanceId, InstanceSave save, Difficulty difficulty, int teamId)
        {
            // make sure we have a valid map id
            MapRecord entry = CliDB.MapStorage.LookupByKey(GetId());

            if (entry == null)
            {
                Log.outError(LogFilter.Maps, "CreateInstance: no record for map {0}", GetId());
                Contract.Assert(false);
            }
            InstanceTemplate iTemplate = Global.ObjectMgr.GetInstanceTemplate(GetId());

            if (iTemplate == null)
            {
                Log.outError(LogFilter.Maps, "CreateInstance: no instance template for map {0}", GetId());
                Contract.Assert(false);
            }

            // some instances only have one difficulty
            Global.DB2Mgr.GetDownscaledMapDifficultyData(GetId(), ref difficulty);

            Log.outDebug(LogFilter.Maps, "MapInstanced.CreateInstance: {0} map instance {1} for {2} created with difficulty {3}", save != null ? "" : "new ", InstanceId, GetId(), difficulty);

            InstanceMap map = new InstanceMap(GetId(), GetGridExpiry(), InstanceId, difficulty, this);

            Contract.Assert(map.IsDungeon());

            map.LoadRespawnTimes();
            map.LoadCorpseData();

            bool load_data = save != null;

            map.CreateInstanceData(load_data);
            InstanceScenario instanceScenario = Global.ScenarioMgr.CreateInstanceScenario(map, teamId);

            if (instanceScenario != null)
            {
                map.SetInstanceScenario(instanceScenario);
            }

            if (WorldConfig.GetBoolValue(WorldCfg.InstancemapLoadGrids))
            {
                map.LoadAllCells();
            }

            m_InstancedMaps[InstanceId] = map;
            return(map);
        }
Beispiel #2
0
        public void SaveToDB()
        {
            // save instance data too
            string data = "";
            uint   completedEncounters = 0;

            Map map = Global.MapMgr.FindMap(GetMapId(), m_instanceid);

            if (map != null)
            {
                Cypher.Assert(map.IsDungeon());
                InstanceScript instanceScript = ((InstanceMap)map).GetInstanceScript();
                if (instanceScript != null)
                {
                    data = instanceScript.GetSaveData();
                    completedEncounters = instanceScript.GetCompletedEncounterMask();
                    m_entranceId        = instanceScript.GetEntranceLocation();
                }

                InstanceScenario scenario = map.ToInstanceMap().GetInstanceScenario();
                if (scenario != null)
                {
                    scenario.SaveToDB();
                }
            }

            PreparedStatement stmt = DB.Characters.GetPreparedStatement(CharStatements.INS_INSTANCE_SAVE);

            stmt.AddValue(0, m_instanceid);
            stmt.AddValue(1, GetMapId());
            stmt.AddValue(2, GetResetTimeForDB());
            stmt.AddValue(3, (uint)GetDifficultyID());
            stmt.AddValue(4, completedEncounters);
            stmt.AddValue(5, data);
            stmt.AddValue(6, m_entranceId);
            DB.Characters.Execute(stmt);
        }
Beispiel #3
0
        public void SaveToDB()
        {
            InstanceScenario scenario = instance.GetInstanceScenario();

            if (scenario != null)
            {
                scenario.SaveToDB();
            }

            string data = GetSaveData();

            if (string.IsNullOrEmpty(data))
            {
                return;
            }

            PreparedStatement stmt = DB.Characters.GetPreparedStatement(CharStatements.UPD_INSTANCE_DATA);

            stmt.AddValue(0, GetCompletedEncounterMask());
            stmt.AddValue(1, data);
            stmt.AddValue(2, _entranceId);
            stmt.AddValue(3, instance.GetInstanceId());
            DB.Characters.Execute(stmt);
        }