示例#1
0
        /// <summary>
        /// Check if data is correct; if not correct, delete it and download the correct data; then start the main loop
        /// </summary>
        /// <param name="downloaded"></param>
        /// <returns></returns>
        public bool VerifyData(bool downloaded)
        {
            Console.WriteLine("Verifying Data");
            ControlUtils.CreateTextBox(sp, "Verifying Data");

            string hash        = "";
            bool   hashesMatch = true;

            for (int i = 1; i <= numOfSets; i++)
            {
                hashTable[i - 1].TryGetValue(Properties.Settings.Default.Language, out string correctHash);
                if (File.Exists(mainDirName + "set" + i.ToString() + "-" + Properties.Settings.Default.Language + ".json"))
                {
                    hash = StringUtils.CalculateMD5(mainDirName + "set" + i.ToString() + "-" + Properties.Settings.Default.Language + ".json");
                }
                if (hash != correctHash)
                {
                    hashesMatch = false;
                }
            }

            if (hashesMatch)
            {
                Console.WriteLine("Deleting Temp Data");
                ControlUtils.CreateTextBox(sp, "Deleting Temp Data");
                if (Directory.Exists(tempDirName))
                {
                    FileUtils.DeleteFromDir(tempDirName);
                    Directory.Delete(tempDirName);
                }
                Console.WriteLine("Succesfully verified Data");
                ControlUtils.CreateTextBox(sp, "Succesfully verified Data");
                System.Threading.Tasks.Task.Delay(100).ContinueWith(t => Main());
                return(true);
            }

            if (!downloaded)
            {
                if (!hashesMatch)
                {
                    Console.WriteLine("Hashes don't match");
                    ControlUtils.CreateTextBox(sp, "Hashes don't match");

                    Directory.CreateDirectory(mainDirName);
                    Console.WriteLine("Created folder " + mainDirName);
                    ControlUtils.CreateTextBox(sp, "Created folder " + mainDirName);

                    Directory.CreateDirectory(tempDirName);
                    Console.WriteLine("Created folder " + tempDirName);
                    ControlUtils.CreateTextBox(sp, "Created folder " + tempDirName);

                    Console.WriteLine("Deleting content of " + mainDirName);
                    ControlUtils.CreateTextBox(sp, "Deleting content of " + mainDirName);
                    FileUtils.DeleteFromDir(mainDirName);

                    ControlUtils.CreateTextBox(sp, "Downloading DataDragon");

                    FileUtils.DownloadToDir(tempDirName, WindowTitle);

                    //Unzip File
                    Console.WriteLine("Unziping DataDragon");
                    ControlUtils.CreateTextBox(sp, "Unziping DataDragon");

                    Directory.CreateDirectory(mainDirName + "/full");
                    Directory.CreateDirectory(mainDirName + "/cards");

                    for (int i = 1; i <= numOfSets; i++)
                    {
                        ZipFile.ExtractToDirectory(tempDirName + "/datadragon-set" + i.ToString() + "-" + Properties.Settings.Default.Language + ".zip", tempDirName + "/datadragon-set" + i.ToString() + "-" + Properties.Settings.Default.Language + "");

                        DirectoryInfo dir = new DirectoryInfo(tempDirName + "/datadragon-set" + i.ToString() + "-" + Properties.Settings.Default.Language + "/" + Properties.Settings.Default.Language + "/img/cards");

                        foreach (FileInfo file in dir.EnumerateFiles("*-alt*.png"))
                        {
                            file.Delete();
                        }

                        Console.WriteLine("Moving full images to " + mainDirName + "full/");
                        ControlUtils.CreateTextBox(sp, "Moving full images to " + mainDirName + "full/");
                        foreach (FileInfo file in dir.EnumerateFiles("*-full.png"))
                        {
                            string[] filename = { mainDirName + "/full/", file.Name, "_" };
                            file.MoveTo(string.Join("", filename));
                        }

                        Console.WriteLine("Moving cards to " + mainDirName + "cards/");
                        ControlUtils.CreateTextBox(sp, "Moving cards to " + mainDirName + "cards/");
                        foreach (FileInfo file in dir.EnumerateFiles())
                        {
                            string[] filename = { mainDirName + "/cards/", file.Name, "_" };
                            file.MoveTo(string.Join("", filename));
                        }
                    }
                    DirectoryInfo mainDirCards = new DirectoryInfo(mainDirName + "/cards");
                    Console.WriteLine("Resizing card images");
                    ControlUtils.CreateTextBox(sp, "Resizing card images");
                    foreach (FileInfo file in mainDirCards.EnumerateFiles("*.png_"))
                    {
                        Bitmap image;
                        Bitmap img = new Bitmap(file.FullName);
                        image = ImageUtils.ResizeImage(img, 340, 512);
                        image.Save(file.FullName.TrimEnd('_'), ImageFormat.Png);
                        img.Dispose();
                        file.Delete();
                    }

                    mainDirCards = new DirectoryInfo(mainDirName + "/full");
                    Console.WriteLine("Cropping full images and applying gradient");
                    ControlUtils.CreateTextBox(sp, "Cropping full images and applying gradient");
                    foreach (FileInfo file in mainDirCards.EnumerateFiles("*.png_"))
                    {
                        Bitmap image;
                        Bitmap img = new Bitmap(file.FullName);
                        if (img.Width == 1024)
                        {
                            image = ImageUtils.ResizeImage(img, 250, 250);
                            image = ImageUtils.CropImage(image, 25, 110, 200, 30);
                            image = ImageUtils.AddGradient(image, file.FullName);
                            image.Save(file.FullName.TrimEnd('_'), ImageFormat.Png);
                        }
                        else
                        {
                            image = ImageUtils.ResizeImage(img, 200, 100);
                            image = ImageUtils.CropImage(image, 0, 30, 200, 30);
                            image = ImageUtils.AddGradient(image, file.FullName);
                            image.Save(file.FullName.TrimEnd('_'), ImageFormat.Png);
                        }
                        img.Dispose();
                        file.Delete();
                    }

                    for (int i = 1; i <= numOfSets; i++)
                    {
                        FileInfo dataSetFile = new FileInfo(tempDirName + "/datadragon-set" + i.ToString() + "-" + Properties.Settings.Default.Language + "/" + Properties.Settings.Default.Language + "/data/set" + i.ToString() + "-" + Properties.Settings.Default.Language + ".json");
                        dataSetFile.MoveTo(mainDirName + "/set" + i.ToString() + "-" + Properties.Settings.Default.Language + ".json");
                    }

                    bool verified = VerifyData(true);
                    if (!verified)
                    {
                        Console.WriteLine("Could not verify data");
                        Environment.Exit(1337);
                    }
                }
            }
            return(hashesMatch);
        }
示例#2
0
        public void Main()
        {
            ControlUtils.ClearControls(sp, cardDrawPercentage1, cardDrawPercentage2, cardDrawPercentage3, cardsInHandText);
            if (Properties.Settings.Default.AutoMinimize)
            {
                ControlUtils.MinimizeWindow(this, true);
                isMinimized = true;
            }

            while (true)
            {
                while (!inMatch || !gameIsRunning)
                {
                    try
                    {
                        JObject responseString = JsonConvert.DeserializeObject <JObject>(Utils.HttpReq($"http://localhost:{Properties.Settings.Default.Port}/positional-rectangles"));


                        gameIsRunning = true;
                        if (responseString["GameState"].ToString() == "InProgress")
                        {
                            inMatch = true;
                            Console.WriteLine("Starting timer");
                            ControlUtils.ChangeMainWindowTitle(WindowTitle, "YARDT");
                            aTimer.IsEnabled = true;


                            if (Properties.Settings.Default.AutoMinimize)
                            {
                                ControlUtils.MinimizeWindow(this, false);
                                isMinimized = false;
                            }

                            if (!gotDeck)
                            {
                                gotDeck = true;

                                string resString = Utils.HttpReq($"http://localhost:{Properties.Settings.Default.Port}/static-decklist");
                                if (resString == "failure")
                                {
                                    JObject expeditionState = JsonConvert.DeserializeObject <JObject>(Utils.HttpReq($"http://localhost:{Properties.Settings.Default.Port}/expeditions-state"));
                                    deck = DeckFromExpedition(expeditionState);
                                }
                                else
                                {
                                    deck = JsonConvert.DeserializeObject <JObject>(resString);
                                }
                                manaCostOrder.Clear();
                                foreach (JToken card in deck["CardsInDeck"])
                                {
                                    JProperty cardProperty = card.ToObject <JProperty>();
                                    manaCostOrder.Add(cardProperty.Name);
                                    cardsLeftInDeck += (int)cardProperty.Value;
                                }
                                sortedManaCost = false;
                                Console.WriteLine("Got deck");
                            }
                        }
                        else
                        {
                            if (printMenu)
                            {
                                Console.WriteLine("In menu, waiting for game to start");
                                ControlUtils.ChangeMainWindowTitle(WindowTitle, "Waiting for match to start");
                                printMenu = false;
                            }

                            if (inMatch || aTimer.IsEnabled)
                            {
                                Console.WriteLine("Not currently in game, stopping timer");
                                aTimer.IsEnabled = false;
                                inMatch          = false;
                            }
                        }
                    }
                    catch (Exception)
                    {
                        Console.WriteLine("Could not connect to game!");
                        Console.WriteLine("Trying again in 2 sec");
                        ControlUtils.ChangeMainWindowTitle(WindowTitle, "Waiting for game to start");
                        //Console.WriteLine("Message :{0} ", err.Message);
                        gameIsRunning = false;
                        Thread.Sleep(2000);
                    }
                }

                //Load set from json
                if (!setLoaded)
                {
                    set       = FileUtils.LoadJson(mainDirName);
                    setLoaded = true;
                    Console.WriteLine("Loaded set");
                }

                if (!sortedManaCost && setLoaded)
                {
                    Console.WriteLine("Sorting deck");
                    manaCostOrder.Sort((x, y) =>
                    {
                        int xManaCost = -1, yManaCost = -1;
                        foreach (JToken item in set)
                        {
                            if (item.Value <string>("cardCode") == x)
                            {
                                xManaCost = item.Value <int>("cost");
                            }
                            else if (item.Value <string>("cardCode") == y)
                            {
                                yManaCost = item.Value <int>("cost");
                            }
                            if (xManaCost >= 0 && yManaCost >= 0)
                            {
                                break;
                            }
                        }
                        return(xManaCost.CompareTo(yManaCost));
                    });

                    sortedManaCost = true;
                    Console.WriteLine("Sorted deck");
                }

                if (playerCardsInPlay is JArray && !JToken.DeepEquals(playerCardsInPlay, cardsInPlayCopy))
                {
                    Console.WriteLine("Cards are different");
                    cardsInPlayCopy = playerCardsInPlay;
                    foreach (JToken card in cardsInPlayCopy)
                    {
                        if (!playerCards.ContainsKey(card.Value <string>("CardID")))
                        {
                            Console.WriteLine("Adding card: " + card.Value <string>("CardID") + " to playerCards");
                            playerCards.Add(card.Value <string>("CardID"), card.ToObject <JObject>());
                        }
                    }

                    numOfCardsInHand = Utils.GetCardsInHand(playerCardsInPlay, gameWindowHeight);
                    ControlUtils.UpdateCardsInHand(cardsInHandText, numOfCardsInHand);

                    if (inMulligan && playerCards.Count > 4)
                    {
                        playerCards.Clear();
                        inMulligan = false;
                        Console.WriteLine("No longer in mulligan phase");
                        Utils.PrintDeckList(deck, set, manaCostOrder, sp, ref labelsDrawn, mainDirName);
                    }

                    if (!inMulligan && deck.Count > 0)
                    {
                        foreach (string card in playerCards.Keys)
                        {
                            if (!purgatory.ContainsKey(card))
                            {
                                purgatory.Add(card, playerCards[card]);
                                foreach (JToken item in deck["CardsInDeck"])
                                {
                                    JProperty itemProperty = item.ToObject <JProperty>();

                                    if (itemProperty.Name == (string)playerCards[card]["CardCode"] && (int)itemProperty.Value > 0)
                                    {
                                        toDelete.Add(itemProperty.Name);
                                        break;
                                    }
                                }
                            }

                            //To-do: add card to graveyard
                        }
                        if (toDelete.Count > 0)
                        {
                            Console.WriteLine("Deleting cards from deck");
                            foreach (string name in toDelete)
                            {
                                deck["CardsInDeck"][name] = deck["CardsInDeck"].Value <int>(name) - 1;
                                cardsLeftInDeck--;

                                ControlUtils.UpdateCardsLeftInDeck(cardDrawPercentage1, cardDrawPercentage2, cardDrawPercentage3, cardsLeftInDeckText, cardsLeftInDeck);
                                Console.Write("Decremented item: ");
                                Console.WriteLine(name);
                            }
                            toDelete.Clear();
                            Utils.PrintDeckList(deck, set, manaCostOrder, sp, ref labelsDrawn, mainDirName);
                        }
                    }
                }
                Thread.Sleep(500);
            }
        }