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