コード例 #1
0
ファイル: Quests.cs プロジェクト: Supamiu/GarlandTools
        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;
            }
コード例 #3
0
        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;
            }
コード例 #5
0
ファイル: Quests.cs プロジェクト: Ariette/GarlandTools
        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);
        }
コード例 #6
0
ファイル: Quests.cs プロジェクト: Ariette/GarlandTools
        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));
            //    }
            //}
        }
コード例 #7
0
ファイル: Quests.cs プロジェクト: Ariette/GarlandTools
        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.
        }
コード例 #8
0
            private void ReadRequiredQuest(JsonReader reader, IXivSheet<Quest> allQuests)
            {
                if (!reader.Read()) throw new InvalidOperationException();

                var key = Convert.ToInt32(reader.Value);
                this.RequiredQuest = allQuests[key];
            }
コード例 #9
0
 public QuestRewards(Quest quest)
 {
     _Quest = quest;
 }
コード例 #10
0
 public QuestRequirements(Quest quest)
 {
     _Quest = quest;
 }