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); // Спим, чтобы не спамить. Так меньше палева. } }
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); // Спим, чтобы не спамить. Так меньше палева. } }
public void init(MyFormBase parent, int troopType, bool isTroops, object back) { base.clearControls(); this.imgBackground.Image = (Image)back; this.m_isTroops = isTroops; this.m_parent = parent; base.Size = this.m_parent.Size; this.BackColor = ARGBColors.Transparent; this.imgBackground.Size = base.Size; this.imgBackground.Position = new Point(0, 0); this.imgBackground.Visible = true; base.addControl(this.imgBackground); VillageMap village = GameEngine.Instance.Village; this.m_troopType = troopType; int numPeasants = 0; this.lblTroopType.Text = ""; this.lblTroopType.Color = ARGBColors.White; this.lblTroopType.DropShadowColor = ARGBColors.Black; this.lblTroopType.Position = new Point(0, 10); this.lblTroopType.Size = new Size(base.Width, 0x18); this.lblTroopType.Alignment = CustomSelfDrawPanel.CSD_Text_Alignment.TOP_CENTER; this.lblTroopType.Font = FontManager.GetFont("Arial", 10f, FontStyle.Regular); this.lblMax.Text = ""; if (village != null) { switch (troopType) { case 1: this.lblTroopType.Text = SK.Text("GENERIC_Monks", "Monks"); numPeasants = village.calcTotalMonksAtHome(); break; case 2: this.lblTroopType.Text = SK.Text("GENERIC_Merchants", "Merchants"); numPeasants = village.calcTotalTradersAtHome(); break; case 3: this.lblTroopType.Text = SK.Text("GENERIC_Spiese", "Spies"); numPeasants = 0; break; case 4: this.lblTroopType.Text = SK.Text("GENERIC_Scouts", "Scouts"); numPeasants = village.calcTotalScoutsAtHome(); break; case 70: this.lblTroopType.Text = SK.Text("GENERIC_Peasants", "Peasants"); numPeasants = village.m_numPeasants; break; case 0x47: this.lblTroopType.Text = SK.Text("GENERIC_Swordsmen", "Swordsmen"); numPeasants = village.m_numSwordsmen; break; case 0x48: this.lblTroopType.Text = SK.Text("GENERIC_Archers", "Archers"); numPeasants = village.m_numArchers; break; case 0x49: this.lblTroopType.Text = SK.Text("GENERIC_Pikemen", "Pikemen"); numPeasants = village.m_numPikemen; break; case 0x4a: this.lblTroopType.Text = SK.Text("GENERIC_Catapults", "Catapults"); numPeasants = village.m_numCatapults; break; case 100: this.lblTroopType.Text = SK.Text("GENERIC_Captains", "Captains"); numPeasants = village.m_numCaptains; break; } this.lblMax.Text = numPeasants.ToString(); } this.tbTroopsDisband.Position = new Point((base.Width / 2) - (GFXLibrary.int_slidebar_ruler.Width / 2), 40); this.tbTroopsDisband.Size = new Size(base.Width - 50, 0x17); this.tbTroopsDisband.StepValue = 1; this.tbTroopsDisband.Value = 0; this.tbTroopsDisband.Max = numPeasants; this.tbTroopsDisband.setValueChangeDelegate(new CustomSelfDrawPanel.CSDControl.CSD_ValueChangedDelegate(this.trackMoved)); this.tbTroopsDisband.Create((Image)GFXLibrary.int_slidebar_ruler, (Image)GFXLibrary.reinforce_slider, (Image)GFXLibrary.reinforce_slider, (Image)GFXLibrary.reinforce_slider, (Image)GFXLibrary.reinforce_slider, (Image)GFXLibrary.reinforce_slider); this.lblMin.Text = "0"; this.lblMin.Color = ARGBColors.White; this.lblMin.DropShadowColor = ARGBColors.Black; this.lblMin.Position = new Point(0, this.tbTroopsDisband.Position.Y); this.lblMin.Size = new Size(this.tbTroopsDisband.Position.X - 10, this.tbTroopsDisband.Height); this.lblMin.Alignment = CustomSelfDrawPanel.CSD_Text_Alignment.TOP_RIGHT; this.lblMin.Font = FontManager.GetFont("Arial", 10f, FontStyle.Regular); this.lblMax.Color = ARGBColors.White; this.lblMax.DropShadowColor = ARGBColors.Black; this.lblMax.Position = new Point(this.tbTroopsDisband.Rectangle.Right + 5, this.tbTroopsDisband.Position.Y); this.lblMax.Size = new Size((base.Width - this.tbTroopsDisband.Rectangle.Right) - 10, this.tbTroopsDisband.Height); this.lblMax.Alignment = CustomSelfDrawPanel.CSD_Text_Alignment.TOP_LEFT; this.lblMax.Font = FontManager.GetFont("Arial", 10f, FontStyle.Regular); this.lblCurValue.Text = SK.Text("GENERIC_Disband", "Disband"); this.lblCurValue.Text = this.lblCurValue.Text + ": 0"; this.lblCurValue.Color = ARGBColors.White; this.lblCurValue.DropShadowColor = ARGBColors.Black; this.lblCurValue.Position = new Point(this.tbTroopsDisband.Position.X, this.tbTroopsDisband.Rectangle.Bottom + 10); this.lblCurValue.Size = new Size(base.Width, 0x1a); this.lblCurValue.Alignment = CustomSelfDrawPanel.CSD_Text_Alignment.TOP_LEFT; this.lblCurValue.Font = FontManager.GetFont("Arial", 12f, FontStyle.Regular); this.btnDisband.Text.Text = SK.Text("GENERIC_Disband", "Disband"); this.btnDisband.ImageNorm = (Image)GFXLibrary.button_132_normal; this.btnDisband.ImageOver = (Image)GFXLibrary.button_132_over; this.btnDisband.ImageClick = (Image)GFXLibrary.button_132_in; this.btnDisband.setSizeToImage(); this.btnDisband.Position = new Point((base.Width / 2) - (this.btnDisband.Width / 2), this.lblCurValue.Rectangle.Bottom + 10); this.btnDisband.Text.Font = FontManager.GetFont("Arial", 9f, FontStyle.Regular); this.btnDisband.TextYOffset = -2; this.btnDisband.Text.Color = ARGBColors.Black; this.btnDisband.setClickDelegate(new CustomSelfDrawPanel.CSDControl.CSD_ClickDelegate(this.disbandClick), "Disband_Disband"); this.btnDisband.Enabled = true; this.btnEdit.ImageNorm = (Image)GFXLibrary.faction_pen; this.btnEdit.ImageOver = (Image)GFXLibrary.faction_pen; this.btnEdit.ImageClick = (Image)GFXLibrary.faction_pen; this.btnEdit.setSizeToImage(); this.btnEdit.MoveOnClick = true; this.btnEdit.OverBrighten = true; this.btnEdit.Position = new Point(this.tbTroopsDisband.Rectangle.Right - this.btnEdit.Width, this.lblCurValue.Position.Y); this.btnEdit.Data = 1; this.btnEdit.setClickDelegate(new CustomSelfDrawPanel.CSDControl.CSD_ClickDelegate(this.editValue), "Disband_EditValue"); if (this.imgBackground.Image != null) { this.imgBackground.addControl(this.btnEdit); this.imgBackground.addControl(this.btnDisband); this.imgBackground.addControl(this.lblCurValue); this.imgBackground.addControl(this.lblMax); this.imgBackground.addControl(this.lblMin); this.imgBackground.addControl(this.tbTroopsDisband); this.imgBackground.addControl(this.lblTroopType); } else { base.addControl(this.btnEdit); base.addControl(this.btnDisband); base.addControl(this.lblCurValue); base.addControl(this.lblMax); base.addControl(this.lblMin); base.addControl(this.tbTroopsDisband); base.addControl(this.lblTroopType); } }