public static int SaveQuestConnection(QuestConnection input) { IQuestRepository repo = new EFQuestRepository(); var questConnection = repo.QuestConnections.FirstOrDefault(q => q.Id == input.Id); if (questConnection == null) { questConnection = new QuestConnection(); } questConnection.ActionName = input.ActionName; questConnection.ConnectionName = input.ConnectionName; questConnection.HideIfRequirementsNotMet = input.HideIfRequirementsNotMet; questConnection.QuestId = input.QuestId; questConnection.QuestStateFromId = input.QuestStateFromId; questConnection.QuestStateToId = input.QuestStateToId; questConnection.QuestStateFailToId = input.QuestStateFailToId; questConnection.RankInList = input.RankInList; questConnection.Notes = input.Notes; questConnection.Text = input.Text; // always set this to something, even if it's just empty string if (questConnection.ConnectionName == null) { questConnection.ConnectionName = "-- QUEST CONNECTION NOT NAMED --"; } repo.SaveQuestConnection(questConnection); return(questConnection.Id); }
public static void DeleteQuestState(int Id) { IQuestRepository repo = new EFQuestRepository(); var questState = repo.QuestStates.FirstOrDefault(q => q.Id == Id); // dangle any from connections connecting TO this state var connections = repo.QuestConnections.Where(q => q.QuestStateToId == questState.Id).ToList(); foreach (var q in connections) { q.QuestStateToId = -1; repo.SaveQuestConnection(q); } // dangle any from connections connecting TO this state connections = repo.QuestConnections.Where(q => q.QuestStateFromId == questState.Id).ToList(); foreach (var q in connections) { q.QuestStateFromId = -1; repo.SaveQuestConnection(q); } // delete any ends on this quest state var ends = repo.QuestEnds.Where(q => q.QuestStateId.Id == questState.Id).ToList(); foreach (var q in ends) { repo.DeleteQuestEnd(q.Id); } // delete any quest state preactions on this quest state var preactions = repo.QuestStatePreactions.Where(q => q.QuestStateId.Id == questState.Id).ToList(); foreach (var q in preactions) { repo.DeleteQuestStatePreaction(q.Id); } // finally actually delete this state repo.DeleteQuestState(Id); }