コード例 #1
0
 public override void WriteXml(XmlWriter writer)
 {
     writer.WriteAttributeString("NpcEntry", NpcEntry.ToString());
     writer.WriteAttributeString("X", loc.X.ToString());
     writer.WriteAttributeString("Y", loc.Y.ToString());
     writer.WriteAttributeString("Z", loc.Z.ToString());
 }
コード例 #2
0
ファイル: Npc.cs プロジェクト: KuromeSan/HISP
 public static void SetDefaultChatpoint(User user, NpcEntry npc, int chatpointId)
 {
     if (Database.HasNpcStartpointSet(user.Id, npc.Id))
     {
         Database.SetNpcStartPoint(user.Id, npc.Id, chatpointId);
     }
     else
     {
         Database.AddNpcStartPoint(user.Id, npc.Id, chatpointId);
     }
 }
コード例 #3
0
ファイル: Npc.cs プロジェクト: KuromeSan/HISP
 public static int GetDefaultChatpoint(User user, NpcEntry npc)
 {
     if (Database.HasNpcStartpointSet(user.Id, npc.Id))
     {
         return(Database.GetNpcStartPoint(user.Id, npc.Id));
     }
     else
     {
         return(0);
     }
 }
コード例 #4
0
        public override void WriteXml(XmlWriter writer)
        {
            writer.WriteAttributeString("NpcEntry", NpcEntry.ToString());
            writer.WriteAttributeString("X", loc.X.ToString());
            writer.WriteAttributeString("Y", loc.Y.ToString());
            writer.WriteAttributeString("Z", loc.Z.ToString());

            writer.WriteAttributeString("ItemID", ItemID);
            writer.WriteAttributeString("Count", Count.ToString());
            writer.WriteAttributeString("SellItemType", SellItemType.ToString());
        }
コード例 #5
0
ファイル: Npc.cs プロジェクト: KuromeSan/HISP
        public static NpcChat GetNpcChatpoint(NpcEntry npc, int chatpointId)
        {
            foreach (Npc.NpcChat chatpoint in npc.Chatpoints)
            {
                if (chatpoint.Id == chatpointId)
                {
                    return(chatpoint);
                }
            }

            return(npc.Chatpoints[0]);
        }
コード例 #6
0
ファイル: Npc.cs プロジェクト: KuromeSan/HISP
 public static NpcReply GetNpcReply(NpcEntry npc, int id)
 {
     foreach (NpcChat chatpoint in npc.Chatpoints)
     {
         foreach (NpcReply reply in chatpoint.Replies)
         {
             if (reply.Id == id)
             {
                 return(reply);
             }
         }
     }
     throw new KeyNotFoundException("Npc reply with " + id + " not found!");
 }
コード例 #7
0
 public override void WriteXml(XmlWriter writer)
 {
     writer.WriteAttributeString("ItemID", ItemID);
     writer.WriteAttributeString("Amount", Amount.ToString());
     writer.WriteAttributeString("Bank", Bank.ToString());
     writer.WriteAttributeString("GetItemfromBankType", GetItemfromBankType.ToString());
     writer.WriteAttributeString("NpcEntry", NpcEntry.ToString());
     writer.WriteAttributeString("AutoFindBank", AutoFindBank.ToString());
     writer.WriteAttributeString("X", loc.X.ToString());
     writer.WriteAttributeString("Y", loc.Y.ToString());
     writer.WriteAttributeString("Z", loc.Z.ToString());
     writer.WriteAttributeString("MinFreeBagSlots", MinFreeBagSlots.ToString());
     writer.WriteAttributeString("WithdrawAdditively", WithdrawAdditively.ToString());
 }
コード例 #8
0
ファイル: NpcsGame.cs プロジェクト: Kuh4ku/Mercybot
        public bool UseNpc(int npcId, int actionIndex)
        {
            if (_account.IsBusy)
            {
                return(false);
            }

            // In case the actionIndex is negative
            actionIndex--;
            if (actionIndex < 0)
            {
                return(false);
            }

            NpcEntry npc  = null;
            var      npcs = _account.Game.Map.Npcs;

            // In case the npcId is negative
            if (npcId < 0)
            {
                int index = (npcId * -1) - 1;

                // Check if the index is invalid
                if (npcs.Count() <= index)
                {
                    return(false);
                }

                npc = npcs.ElementAt(index);
            }
            else
            {
                npc = npcs.FirstOrDefault(n => n.NpcId == npcId);
            }

            // If the npc is not found
            if (npc == null)
            {
                return(false);
            }

            // Check if the npc has the action that we want
            if (npc.Data.Actions.Count <= actionIndex)
            {
                return(false);
            }

            _account.Network.SendMessage(new NpcGenericActionRequestMessage(npc.Id, (uint)npc.Data.Actions[actionIndex], _account.Game.Map.Id));
            return(true);
        }
コード例 #9
0
 public override void WriteXml(XmlWriter writer)
 {
     writer.WriteAttributeString("Amount", Amount.ToString());
     writer.WriteAttributeString("ItemID", ItemID);
     writer.WriteAttributeString("NpcEntry", NpcEntry.ToString());
     writer.WriteAttributeString("GuildTab", GuildTab.ToString());
     writer.WriteAttributeString("AutoFindBank", AutoFindBank.ToString());
     writer.WriteAttributeString("UseCategory", UseCategory.ToString());
     writer.WriteAttributeString("Category", Category.ToString());
     writer.WriteAttributeString("SubCategoryType", SubCategory.GetType().Name);
     writer.WriteAttributeString("SubCategory", SubCategory.ToString());
     writer.WriteAttributeString("Bank", Bank.ToString());
     writer.WriteAttributeString("X", loc.X.ToString());
     writer.WriteAttributeString("Y", loc.Y.ToString());
     writer.WriteAttributeString("Z", loc.Z.ToString());
 }
コード例 #10
0
ファイル: Npc.cs プロジェクト: KuromeSan/HISP
 public static void AddNpc(NpcEntry npc)
 {
     npcList.Add(npc);
 }
コード例 #11
0
        private void ParseNPC()
        {
            Program.PhantomNewTab("http://aiondatabase.net/en/", 1);

            List <string> npcs_id = XDocument.Load(FilePath).Root.Element("spawn_map").Elements("spawn")
                                    .Select(elem => elem.Attribute("npc_id").Value.ToString()).ToList();
            List <string> alreadyParsedID = new List <string>();
            XDocument     npctemplate     = string.IsNullOrEmpty(XNPCStaticData) ? null : XDocument.Load(XNPCStaticData);

            Stopwatch timer = new Stopwatch();

            timer.Start();

            int index = 1;

            foreach (string id in npcs_id)
            {
                if (!alreadyParsedID.Contains(id))
                {
                    alreadyParsedID.Add(id);

                    NpcEntry npc = new NpcEntry();
                    npc.Url = $"http://aiondatabase.net/en/npc/{id}/";
                    npc.ID  = int.Parse(id);

                    if (npctemplate != null)
                    {
                        XElement npct = npctemplate.Root.Elements("npc_template")
                                        .FirstOrDefault(elem => elem.Attribute("npc_id") != null &&
                                                        elem.Attribute("npc_id").Value == id);
                        if (npct != null)
                        {
                            try
                            {
                                if (int.TryParse(npct.Attribute("level").Value, out int level))
                                {
                                    npc.Level = level;
                                }
                                switch (npct.Attribute("rating").Value)
                                {
                                case "NORMAL": npc.Grade = NPCGrade.NORMAL; break;

                                case "ELITE": npc.Grade = NPCGrade.ELITE; break;

                                case "HERO": npc.Grade = NPCGrade.HEROIC; break;

                                case "LEGENDARY": npc.Grade = NPCGrade.LEGENDARY; break;
                                }
                                npc.Name = npct.Attribute("name").Value;
                                switch (npct.Attribute("race").Value)
                                {
                                case "ELYOS": npc.Race = NPCRace.ELYOS; break;

                                case "ASMODIANS": npc.Race = NPCRace.ASMO; break;

                                default: npc.Race = NPCRace.BALAUR; break;
                                }
                            }
                            catch { }
                            npc.Info(index);
                            npct = null;
                        }
                    }
                    else
                    {
                        Trace.WriteLine($"\n{index}. {npc.ID}\n");
                    }

                    npc.GetDrop("./alparse/npc_drop/" + FileName);
                    index++;
                }
            }
            npctemplate = null;

            timer.Stop();
            Trace.WriteLine("\nParsed " + FileName + " in " + timer.Elapsed.ToString("hh\\:mm\\.ss"));
        }
コード例 #12
0
 public ItemNpcParser(NpcEntry npc)
 {
     NPC = npc;
     ParseItem();
 }
コード例 #13
0
        private void ParseNPC()
        {
            Program.PhantomNewTab(Url, 1);

            // Reset table settings
            Program.Driver.FindElementByXPath("//*[@id=\"NpcTable_wrapper\"]/div[1]/div[2]/div/a").Click();

            // Wait if table is loading, Quit if table is empty
            while (Program.Driver.FindElementByXPath("//*[@id=\"NpcTable\"]/tbody/tr/td").Displayed)
            {
                if (Program.Driver.FindElementByXPath("//*[@id=\"NpcTable\"]/tbody/tr/td").Text
                    == "No data available in table")
                {
                    Trace.WriteLine("\nNo data available in table.");
                    Thread.Sleep(2000);
                    Program.Main();
                }
                else
                {
                    Thread.Sleep(500);
                }
            }

            HtmlDocument doc       = new HtmlDocument();
            int          npcs_size = TableUtility.Count(Program.Driver, "//*[@id=\"NpcTable_info\"]");

            NpcEntry[] npcs = new NpcEntry[npcs_size];

            // Sort by ID
            Program.Driver.ExecuteScript("document.evaluate(\"//*[@id=\\\"NpcTable\\\"]/thead/tr/th[1]\"," +
                                         " document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.click();");
            // Set the table size to 50
            Program.Driver.ExecuteScript("document.getElementsByTagName(\"option\")[1]" +
                                         ".setAttribute(\"value\",\"50\");");
            Program.Driver.FindElementByXPath("//*[@id=\"NpcTable_length\"]/label/select").Click();
            Program.Driver.FindElementByXPath("//*[@id=\"NpcTable_length\"]/label/select/option[2]").Click();
            // Click on Page 1
            Program.Driver.FindElementByXPath("//*[@id=\"NpcTable_paginate\"]/ul/li[2]/a").Click();

            int       file_index = 1;
            Stopwatch timer      = new Stopwatch();

            timer.Start();

            int validNpcIndex = 0;

            for (int item = 0; item < npcs_size;)
            {
                doc.LoadHtml(File.ReadAllText(Program.SaveHTML(file_index++.ToString())));
                HtmlNode table = doc.DocumentNode.SelectSingleNode("//*[@id=\"NpcTable\"]");
                for (int tr = 0; tr < 50; tr++)
                {
                    try
                    {
                        string tableXPath = "";
                        if (table != null && doc.DocumentNode.SelectSingleNode(
                                table.XPath + "/tbody/tr[" + (tr + 1) + "]/td[1]") != null)
                        {
                            tableXPath = table.XPath;
                        }
                        else
                        {
                            throw new Exception("{EOF}");
                        }

                        NPCRace race = TableUtility.ParseRace(doc, tableXPath + "/tbody/tr[" + (tr + 1)
                                                              + "]/td[3]/div");
                        int id = TableUtility.ParseText <int>(doc.DocumentNode.SelectSingleNode(tableXPath
                                                                                                + "/tbody/tr[" + (tr + 1) + "]/td[1]").InnerText);
                        NPCGrade grade = TableUtility.ParseGrade(TableUtility.ParseText <NPCGrade>(
                                                                     doc.DocumentNode.SelectSingleNode(tableXPath + "/tbody/tr[" + (tr + 1)
                                                                                                       + "]/td[6]").InnerText));
                        string name = "";
                        string url  = "";

                        if (race == NPCRace.BALAUR)
                        {
                            name = TableUtility.ParseText <string>(doc.DocumentNode.SelectSingleNode(
                                                                       tableXPath + "/tbody/tr[" + (tr + 1) + "]/td[3]/a/b").InnerText);
                            url = TableUtility.ParseUrl(TableUtility.ParseText <string>(
                                                            doc.DocumentNode.SelectSingleNode(tableXPath + "/tbody/tr[" + (tr + 1)
                                                                                              + "]/td[3]/a").GetAttributeValue("href", "")));
                        }
                        else
                        {
                            name = TableUtility.ParseText <string>(doc.DocumentNode.SelectSingleNode(tableXPath
                                                                                                     + "/tbody/tr[" + (tr + 1) + "]/td[3]/div/a/b").InnerText);
                            url = TableUtility.ParseUrl(TableUtility.ParseText <string>(
                                                            doc.DocumentNode.SelectSingleNode(tableXPath + "/tbody/tr[" + (tr + 1)
                                                                                              + "]/td[3]/div/a").GetAttributeValue("href", "")));
                        }
                        if (validNpcIndex > 0 && npcs[validNpcIndex - 1].ID == id)
                        {
                            throw new Exception("{Duplicate ID}");
                        }

                        npcs[validNpcIndex]       = new NpcEntry();
                        npcs[validNpcIndex].Race  = race;
                        npcs[validNpcIndex].Name  = name;
                        npcs[validNpcIndex].Url   = url;
                        npcs[validNpcIndex].ID    = id;
                        npcs[validNpcIndex].Grade = grade;

                        npcs[validNpcIndex].Info(item + 1);
                        npcs[validNpcIndex].GetDrop(Program.LoadADBXName(Url, UrlName));
                        validNpcIndex++;
                    }
                    catch /*(Exception e)*/
                    {
                        //Trace.WriteLine(e.Message);
                    }
                    finally
                    {
                        item++;
                    }
                }
                // Click on Next Page
                Program.Driver.FindElementByXPath("//*[@id=\"NpcTable_next\"]/a").Click();
            }

            timer.Stop();
            Trace.WriteLine("\nParsed " + UrlName + " in " + timer.Elapsed.ToString("hh\\:mm\\.ss"));
        }