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); } }
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); // Спим, чтобы не спамить. Так меньше палева. } }
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(); }
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); // Спим, чтобы не спамить. Так меньше палева. } }