Пример #1
0
 private void launch()
 {
     if (this.sliderEnabled)
     {
         if (this.inLaunch)
         {
             TimeSpan span = (TimeSpan)(DateTime.Now - this.lastLaunchTime);
             if (span.TotalSeconds < 20.0)
             {
                 return;
             }
         }
         this.inLaunch       = true;
         this.lastLaunchTime = DateTime.Now;
         int numScouts = this.sliderImage.Value + 1;
         this.aiworld_Scout_ID_ownVillage      = this.m_ownVillage;
         this.aiworld_Scout_ID_selectedVillage = this.m_selectedVillage;
         this.aiworld_Scout_ID_numScouts       = numScouts;
         RemoteServices.Instance.set_SendScouts_UserCallBack(new RemoteServices.SendScouts_UserCallBack(this.sendScoutsCallback));
         RemoteServices.Instance.SendScouts(this.m_ownVillage, this.m_selectedVillage, numScouts);
         AllVillagesPanel.travellersChanged();
         VillageMap map = GameEngine.Instance.getVillage(this.m_ownVillage);
         if (map != null)
         {
             map.addTroops(0, 0, 0, 0, 0, -numScouts);
         }
         this.launchButton.Enabled = false;
         this.closeButton.Enabled  = false;
         CursorManager.SetCursor(CursorManager.CursorType.WaitCursor, base.ParentForm);
     }
 }
Пример #2
0
        public void Trade()
        {
#if DEBUG
            Log("Trade!");
#endif
            int sleep = 0;
            while (true)
            {
                try
                {
                    sleep = 8 + new Random().Next(-5, 5);

                    if (trading) // Если торгуем
                    {
                        Log("Step with \"" + listBox_ResList.SelectedItem.ToString() + "\"");
                        // Получаем ID товара из списка
                        int resID = GetID(listBox_ResList.SelectedItem.ToString());

                        int targetID = -1;
                        //List<int> villageIDs = GameEngine.Instance.World.getListOfUserVillages(); // Получаем список наших деревень

                        for (int i = 0; i < listBox_ActiveVillages.Items.Count; i++)
                        //foreach (int villageID in villageIDs) // Перебираем их
                        {
                            if (!listBox_ActiveVillages.GetSelected(i))
                            {
                                continue;
                            }
                            int villageID = GetID(listBox_ActiveVillages.Items[i].ToString());

                            // Если деревня прогружена (открывалась ее карта в текущей сессии хоть раз)
                            if (GameEngine.Instance.getVillage(villageID) != null)
                            {
                                // Получаем базовую информацию о нашей деревни
                                WorldMap.VillageData village = GameEngine.Instance.World.getVillageData(villageID);
                                VillageMap           map     = GameEngine.Instance.getVillage(villageID); // Получаем полную информацию
                                int merchantsCount           = map.calcTotalTradersAtHome();              // Кол-во торговцев в ней
                                if (merchantsCount == 0)
                                {
                                    continue;
                                }

                                int resAmount = (int)map.getResourceLevel(resID);                                                 // Кол-во ресурса на складе
                                Log("At village " + villageID + " (" + village.villageName + ") " + merchantsCount + " traders"); // Дебаг

                                int sendWithOne = int.Parse(textBox_ResCount.Text);                                               // Кол-во ресурса на торговца
                                int maxAmount   = merchantsCount * sendWithOne;                                                   // Кол-во ресурсов отправим
                                if (resAmount < maxAmount)                                                                        // Если торговцы могут увезти больше чем есть
                                {
                                    merchantsCount = (int)(resAmount / sendWithOne);                                              // Считаем сколько смогут увезти реально
                                }
                                if (merchantsCount > 0)                                                                           // Если трейдеры дома есть
                                {
                                    if (radioButton1.Checked)                                                                     // Parish
                                    {
                                        targetID = GameEngine.Instance.World.getRegionCapitalVillage(village.regionID);
                                    }
                                    else if (radioButton2.Checked) // Target
                                    {
                                        targetID = int.Parse(textBox_TradeTargetID.Text);
                                    }
                                    else if (radioButton3.Checked) // Resell
                                    {
                                        InterfaceMgr.Instance.selectStockExchange(-1);
                                        GameEngine.Instance.SkipVillageTab();
                                        InterfaceMgr.Instance.getMainTabBar().changeTab(1);
                                        InterfaceMgr.Instance.setVillageTabSubMode(3);
                                        InterfaceMgr.Instance.resetVillageReportPanelData();
                                        InterfaceMgr.Instance.selectStockExchange(int.Parse(listBox_ParishList.Items[0].ToString()));
                                    }


                                    // if target - player
                                    // GameEngine.Instance.getVillage(id).sendResources()
                                    // Вызываем высокоуровневую функцию торговли с рядом каллбеков
                                    GameEngine.Instance.getVillage(villageID).stockExchangeTrade(targetID, resID, merchantsCount * sendWithOne, false);
                                    AllVillagesPanel.travellersChanged(); // Подтверждаем изменения (ушли трейдеры) в GUI-клиента
                                }
                            }
                        }

                        Log("Again in " + sleep + " seconds - " + DateTime.Now.AddSeconds(sleep).ToString("HH:mm:ss"));
                        Console.WriteLine();
                    }
                }
                catch (Exception ex)
                {
                    WriteLog(ex);
                }

                Thread.Sleep(sleep * 1000); // Спим, чтобы не спамить. Так меньше палева.
            }
        }
Пример #3
0
        private void Scout(int playerVillageID)
        {
            //int honourRange = CardTypes.adjustScoutingHonourRange(GameEngine.Instance.World.UserCardData, GameEngine.Instance.LocalWorldData.BaseScoutHonourRange);
            while (true)
            {
                if (!scout)
                {
                    Thread.Sleep(500);
                    continue;
                }

                try
                {
                    bool ok    = false;
                    int  index = 0;
                    foreach (string str in listBox_scoutFrom.Items) // Разведывать ли из этой деревни
                    {
                        int id = GetID(str);
                        if (id == playerVillageID)
                        {
                            if (listBox_scoutFrom.GetSelected(index))
                            {
                                ok = true;
                                break;
                            }
                        }
                        index++;
                    }
                    if (!ok)
                    {
                        Thread.Sleep(1000); // Нечего лаги пилить если вообще ничего не делаем
                        continue;
                    }

                    if (GameEngine.Instance.getVillage(playerVillageID) == null) // Если деревня игрока не прогружена - пропускаем
                    {
                        Thread.Sleep(3000);                                      // Чтобы не лагать, деревня то вовсе не загружена
                        continue;
                    }

                    // TODO: возможно при отправке не всех сразу инфу надо будет обновлять
                    // чтобы оно не думало что скауты еще есть в наличии
                    VillageMap map = GameEngine.Instance.getVillage(playerVillageID);
                    if (map.calcTotalScoutsAtHome() == 0)
                    {
                        Thread.Sleep(500); // Чтобы не лагать, лучше переждать лишнего
                        continue;
                    }

                    double minRange    = double.MaxValue;
                    bool   isUnscouted = false;
                    int    target      = -1;

                    bool isContinue = false;
                    for (int i = 0; i < GameEngine.Instance.World.villageList.Length; i++) // Перебираем тайники
                    {
                        int id = GameEngine.Instance.World.villageList[i].id;
                        if (!GameEngine.Instance.World.isSpecial(id)) // Если это не тайник - пропускаем
                        {
                            continue;
                        }

                        int type = GameEngine.Instance.World.getSpecial(id); // 100 - unscouted
                        //if ((type >= 100) && (type <= 0xc7))
                        if (!DataExport.IsStash(type))                       // Если не тайник с ресурсами - пропускаем
                        {
                            continue;
                        }

                        if (checkBox_Honourable.Checked && type == 100) // Если только не разведанные
                        {
                            if (!GameEngine.Instance.World.isScoutHonourOutOfRange(playerVillageID, id))
                            {
                                continue;
                            }
                        }

                        index = 0;
                        foreach (string str in listBox_resForScouting.Items) // Выбран ли тип ресурса для разведки
                        {
                            int typeID = GetID(str);
                            if (typeID == type)
                            {
                                if (!listBox_resForScouting.GetSelected(index))
                                {
                                    isContinue = true;
                                }
                                break;
                            }
                            index++;
                        }
                        if (isContinue) // Если этот тайник не выбран - пропускаем
                        {
                            isContinue = false;
                            continue;
                        }

                        // Считаем расстояние до тайника
                        Point  playerVillage = GameEngine.Instance.World.getVillageLocation(playerVillageID);
                        Point  targetStash   = GameEngine.Instance.World.getVillageLocation(id);
                        int    x             = playerVillage.X;
                        int    num7          = playerVillage.Y;
                        int    num8          = targetStash.X;
                        int    num9          = targetStash.Y;
                        double d             = ((x - num8) * (x - num8)) + ((num7 - num9) * (num7 - num9)); // Квадрат расстояния
                        d = Math.Sqrt(d);
                        if (d > int.Parse(textBox_maxRadius.Text))                                          // Дальше чем положено нас не касается
                        {
                            continue;
                        }

                        if (type == 100) // не открытые тайники в приоритете
                        {
                            isUnscouted = true;
                        }
                        else if (isUnscouted) // Если это разведанный тайник, но уже был найден не разведанный
                        {
                            continue;
                        }
                        if (d < minRange) // && ((type == 100 && isUnscouted) || !isUnscouted))
                        {
                            minRange = d;
                            target   = id;
                        }

                        //RemoteServices.Instance.set_SendScouts_UserCallBack(new RemoteServices.SendScouts_UserCallBack(this.sendScoutsCallback));
                        //d = Math.Sqrt(d) * ((GameEngine.Instance.LocalWorldData.ScoutsMoveSpeed * GameEngine.Instance.LocalWorldData.gamePlaySpeed) * ResearchData.ScoutTimes[GameEngine.Instance.World.UserResearchData.Research_Horsemanship]);
                        //d *= CardTypes.getScoutSpeed(GameEngine.Instance.World.UserCardData);
                        //string str = VillageMap.createBuildTimeString((int)d); // Time

                        //Console.WriteLine("WUT: " + id);
                        //Console.WriteLine("     | " + GameEngine.Instance.World.getVillageNameOrType(id));
                        //InterfaceMgr.Instance.SelectedVillage = id;
                        //GameEngine.Instance.World.setZooming(1, GameEngine.Instance.World.getVillageData(id).x, GameEngine.Instance.World.getVillageData(id).y);
                        //count++;
                    }

                    if (target == -1)
                    {
                        Thread.Sleep(1500); // Точек найдено не было
                        continue;
                    }

                    int numScouts = int.Parse(textBox_scoutsPerStash.Text);
                    if (numScouts == 0 || numScouts > map.calcTotalScoutsAtHome())
                    {
                        numScouts = map.calcTotalScoutsAtHome();
                    }

                    if (numScouts == 0) // вроде как непостижимый код
                    {
                        Thread.Sleep(500);
                        continue; // TODO: wait till != 0
                    }

                    RemoteServices.Instance.SendScouts(playerVillageID, target, numScouts);
                    AllVillagesPanel.travellersChanged();

                    Thread.Sleep(1500);
                }
                catch (Exception ex)
                {
                    Log(ex.ToString());
                }

                Thread.Sleep(1000);
            }

            //GameEngine.Instance.World.isScoutHonourOutOfRange(InterfaceMgr.Instance.OwnSelectedVillage, id);
            //InterfaceMgr.Instance.selectUserVillage(id)
            //InterfaceMgr.Instance.selectVillage(id)
            //int villageID = InterfaceMgr.Instance.getSelectedMenuVillage();
            //GameEngine.Instance.World.getNextUserVillage();
            //GameEngine.Instance.downloadCurrentVillage();
        }
Пример #4
0
        public void Trade()
        {
            Log("Торговый поток создан!");

            int Sleep = 0;

            while (true)
            {
                try
                {
                    Sleep = 60 + new Random().Next(-5, 60);

                    if (IsTrading) // Если торгуем
                    {
                        Log("Заход с \"" + listBox_ResList.SelectedItem.ToString() + "\"");
                        // Получаем ID товара из списка
                        int        ResID      = GetItemID(listBox_ResList.SelectedItem.ToString());
                        int        TargetID   = int.Parse(textBox_TradeTargetID.Text);             // Получаем ID деревни-цели
                        List <int> VillageIDs = GameEngine.Instance.World.getListOfUserVillages(); // Получаем список наших деревень

                        foreach (int VillageID in VillageIDs)                                      // Перебираем их
                        {
                            // Если деревня прогружена (открывалась ее карта в текущей сессии хоть раз)
                            if (GameEngine.Instance.getVillage(VillageID) != null)
                            {
                                // Получаем базовую информацию о нашей деревни
                                WorldMap.VillageData Village = GameEngine.Instance.World.getVillageData(VillageID);
                                VillageMap           Map     = GameEngine.Instance.getVillage(VillageID); // Получаем полную информацию
                                int ResAmount      = (int)Map.getResourceLevel(ResID);                    // Кол-во ресурса на складе
                                int MerchantsCount = Map.calcTotalTradersAtHome();                        // Кол-во торговцев в ней
                                Log("В деревне " + VillageID + " есть " + MerchantsCount + " торговцев"); // Дебаг

                                int SendWithOne = int.Parse(textBox_ResCount.Text);                       // Кол-во ресурса на торговца
                                int MaxAmount   = MerchantsCount * SendWithOne;                           // Кол-во ресурсов отправим
                                if (ResAmount < MaxAmount)                                                // Если торговцы могут увезти больше чем есть
                                {
                                    MerchantsCount = (int)(ResAmount / SendWithOne);                      // Считаем сколько смогут увезти реально
                                }
                                if (MerchantsCount > 0)                                                   // Если трейдеры дома есть
                                {
                                    TargetID = (checkBox_Parish.Checked ?
                                                GameEngine.Instance.World.getRegionCapitalVillage(Village.regionID) :
                                                int.Parse(textBox_TradeTargetID.Text));
                                    //textBox_TradeTargetID.Text = TargetID.ToString();

                                    // Вызываем высокоуровневую функцию торговли с рядом каллбеков
                                    GameEngine.Instance.getVillage(VillageID).stockExchangeTrade(TargetID, ResID, MerchantsCount * SendWithOne, false);
                                    AllVillagesPanel.travellersChanged(); // Подтверждаем изменения (ушли трейдеры) в GUI-клиента
                                }
                            }
                        }

                        Log("Повтор цикла торговли через " + Sleep + " секунд(ы) в " + DateTime.Now.AddSeconds(Sleep).ToString("HH:mm:ss"));
                        Console.WriteLine();
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine("\n======| EX INFO |======");
                    Console.WriteLine(ex);
                    Console.WriteLine("======| ======= |======\n");
                }

                Thread.Sleep(Sleep * 1000); // Спим, чтобы не спамить. Так меньше палева.
            }
        }