void ImportQuestEventIcon(dynamic quest, Saint.Quest sQuest) { var sEventIconType = (Saint.IXivRow)sQuest["EventIconType"]; var baseIconIndex = (int)(UInt32)sEventIconType.GetRaw(0); // Mark function quests if (baseIconIndex == 071340) { quest.unlocksFunction = 1; } // Calculate the event icon to record. var questIconIndex = 0; if (sEventIconType.Key == 4) { questIconIndex = baseIconIndex; } else if (sQuest.IsRepeatable) { questIconIndex = baseIconIndex + 2; } else { questIconIndex = baseIconIndex + 1; } var eventIcon = SaintCoinach.Imaging.IconHelper.GetIcon(sQuest.Sheet.Collection.PackCollection, questIconIndex); quest.eventIcon = IconDatabase.EnsureEntry("event", eventIcon); }
internal PreviousQuestRequirement(Quest quest) { const int QuestCount = 3; this.Type = (PrerequisiteQuestsRequirementType)quest.AsInt32("PreviousQuestJoin"); var contents = new List<Quest>(); for (var i = 0; i < QuestCount; ++i) { var c = quest.As<Quest>("PreviousQuest", i); if (c != null && c.Key != 0) contents.Add(c); } this.PreviousQuests = contents; }
internal PrerequisiteQuestsRequirement(Quest quest) { const int QuestCount = 3; this.Type = (PrerequisiteQuestsRequirementType)quest.AsInt32("PreviousQuestJoin"); var quests = new List<Quest>(); for (var i = 0; i < QuestCount; ++i) { var q = quest.As<Quest>("PreviousQuest", i); if (q.Key != 0) quests.Add(q); } this.Quests = quests; }
internal InstanceContentRequirement(Quest quest) { const int QuestCount = 3; this.Type = (PrerequisiteQuestsRequirementType)quest.AsInt32("InstanceContentJoin"); var contents = new List<InstanceContent>(); for (var i = 0; i < QuestCount; ++i) { var c = quest.As<InstanceContent>("InstanceContent", i); if (c.Key != 0) contents.Add(c); } this.InstanceContents = contents; }
void ImportQuestEventIcon(dynamic quest, Saint.Quest sQuest) { var sEventIconType = (Saint.IXivRow)sQuest["EventIconType"]; if (sEventIconType == null) { byte index = (byte)sQuest.GetRaw("EventIconType"); if (index > 32) { index -= 32; sEventIconType = _builder.Sheet("EventIconType").ElementAt(index); } else { throw new NotImplementedException(); } } var baseIconIndex = (int)(UInt32)sEventIconType.GetRaw(0); // Mark function quests if (baseIconIndex == 071340) { quest.unlocksFunction = 1; } // Calculate the event icon to record. var questIconIndex = 0; if (sEventIconType.Key == 4) { questIconIndex = baseIconIndex; } else if (sQuest.IsRepeatable) { questIconIndex = baseIconIndex + 2; } else { questIconIndex = baseIconIndex + 1; } var eventIcon = SaintCoinach.Imaging.IconHelper.GetIcon(sQuest.Sheet.Collection.PackCollection, questIconIndex); quest.eventIcon = IconDatabase.EnsureEntry("event", eventIcon); }
void ImportQuestLore(dynamic quest, Saint.Quest sQuest, ScriptInstruction[] instructions) { // todo: retrieve sheets for all languages, index using english version, then push into localized quest obj. var idParts = sQuest.Id.ToString().Split('_'); var idPath = new string(idParts[1].Take(3).ToArray()); var textSheetId = string.Format("quest/{0}/{1}", idPath, sQuest.Id); var textSheet = _builder.Sheet(textSheetId) .Select(r => new { r.Key, Tokens = r[0].ToString().Split('_'), XivString = (SaintCoinach.Text.XivString)r[1] }); quest.journal = new JArray(); quest.objectives = new JArray(); quest.dialogue = new JArray(); string lastLine = null; foreach (var row in textSheet) { var rawString = row.XivString.ToString(); if (rawString == "dummy" || rawString == "Dummy" || rawString == "deleted" || rawString == "placeholder" || rawString == "Marked for deletion" || string.IsNullOrWhiteSpace(rawString)) { continue; } var str = HtmlStringFormatter.Convert(row.XivString); //if (str.Contains("Aye, an anima weapon")) // Has IntegerParameter(1) [Error] - need to pass proper eval parameters in. // System.Diagnostics.Debugger.Break(); if (row.Tokens.Contains("SEQ")) { quest.journal.Add(str); } else if (row.Tokens.Contains("TODO")) { if (lastLine == str) { //System.Diagnostics.Debug.WriteLine("Skipping duplicate quest {0} objective: {1}", gameData.Key, lastLine); continue; } quest.objectives.Add(str); } else { dynamic obj = new JObject(); if (row.Tokens[3].All(char.IsDigit)) { obj.name = row.Tokens[4]; } else { obj.name = row.Tokens[3]; } obj.text = str; quest.dialogue.Add(obj); } lastLine = str; } // Script instructions //if (instructions.Length > 0) //{ // quest.script = new JArray(); // foreach (var instruction in instructions) // { // if (string.IsNullOrEmpty(instruction.Instruction)) // continue; // quest.script.Add(ImportInstruction(_builder, instruction)); // } //} }
void ImportQuestRequirements(dynamic quest, Saint.Quest sQuest) { dynamic requirements = new JObject(); if (sQuest.Requirements.BeastReputationRank.Key > 0) { requirements.beastrank = sQuest.Requirements.BeastReputationRank.Key; } if (sQuest.Requirements.RequiresHousing) { requirements.house = 1; } var requiresJobs = sQuest.Requirements.ClassJobs .Where(r => r.ClassJobCategory.Key != 1 || r.Level > 1) .Select(r => { dynamic rjob = new JObject(); rjob.lvl = r.Level; rjob.id = r.ClassJobCategory.Key; return(rjob); }) .ToArray(); if (requiresJobs.Length > 0) { requirements.jobs = new JArray(requiresJobs); } if (sQuest.Requirements.GrandCompany.Key > 0) { requirements.gc = sQuest.Requirements.GrandCompany.Key; } if (sQuest.Requirements.GrandCompanyRank.Key > 0) { requirements.gcrank = sQuest.Requirements.GrandCompanyRank.Key; } if (sQuest.Requirements.Mount.Key > 0) { requirements.mount = sQuest.Requirements.Mount.Key; } // Instance Requirements var instanceContentRequirements = sQuest.Requirements.InstanceContent.InstanceContents .Select(i => i.Key) .ToArray(); if (instanceContentRequirements.Length > 0) { requirements.instances = new JArray(instanceContentRequirements); foreach (var instanceKey in instanceContentRequirements) { var instance = _builder.Db.Instances.First(i => i.id == instanceKey); if (instance.requiredForQuest == null) { instance.requiredForQuest = new JArray(); } instance.requiredForQuest.Add(sQuest.Key); _builder.Db.AddReference(quest, "instance", instanceKey, false); _builder.Db.AddReference(instance, "quest", sQuest.Key, false); } } // Quest Requirements var sPreviousQuestRequirements = sQuest.Requirements.PreviousQuest.PreviousQuests .Select(q => q.Key) .ToArray(); if (sPreviousQuestRequirements.Length > 0) { if (sPreviousQuestRequirements.Length > 1) { requirements.questsType = sQuest.Requirements.PreviousQuest.Type.ToString().ToLower(); } requirements.quests = new JArray(sPreviousQuestRequirements); _builder.Db.AddReference(quest, "quest", sPreviousQuestRequirements, false); } if (((JObject)requirements).Count > 0) { quest.reqs = requirements; } // sQuest.Requirements.StartBell / EndBell: Usually seasonal events like halloween stuff at night. // sQuest.Requirements.QuestExclusion: For excluding other GCs / city quests. Not important. // sQuest.Requirements.QuestLevelOffset: Not sure what this is for. }
private void ReadRequiredQuest(JsonReader reader, IXivSheet<Quest> allQuests) { if (!reader.Read()) throw new InvalidOperationException(); var key = Convert.ToInt32(reader.Value); this.RequiredQuest = allQuests[key]; }
public QuestRewards(Quest quest) { _Quest = quest; }
public QuestRequirements(Quest quest) { _Quest = quest; }