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); }
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); }
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); }