public void ProcessingServices(GameEvent @event) { string[] keys = @event.Name.Split(new char[] { ':' }); List <PlayerTariff> tariffs = GameEnvironment.Services.PlayerTariffs.Where(t => t.Service.UId.ToString() == keys[0] & t.UId.ToString() == keys[1] & t.Amount.ToString() == keys[2]).ToList(); if (tariffs.Count == 1) { PlayerTariff tariff = tariffs[0]; if (tariff.Service.Type == TransactionType.TopUp) { tariff.Currency.TopUp("Выплата по услуге \"" + tariff.Service.Name + "\" (" + tariff.Name + ")", Properties.Resources.BankName, GameEnvironment.GameEvents.GameTimer.DateAndTime, (tariff.Amount * tariff.Coefficient / 100)); if (DateTime.Compare(GetDateByPeriod(tariff.StartDateOfService, tariff.TermUnit, tariff.Term), @event.ResponseTime) <= 0) { GameEnvironment.GameEvents.Events.Remove(@event); GameEnvironment.Services.PlayerTariffs.Remove(tariff); tariff.Currency.TopUp("Возврат средств в связи с истечением периода оказания услуги \"" + tariff.Service.Name + "\" (" + tariff.Name + ")", Properties.Resources.BankName, GameEnvironment.GameEvents.GameTimer.DateAndTime, tariff.Amount); } } else if (tariff.Service.Type == TransactionType.Withdraw) { int per_s = GetNumberOfPeriods(tariff.Periodicity, tariff.PeriodicityValue, tariff.StartDateOfService, GetDateByPeriod(tariff.StartDateOfService, tariff.TermUnit, tariff.Term)); if (!tariff.Currency.Withdraw("Взыскание по услуге\"" + tariff.Service.Name + "\" (" + tariff.Name + ")", Properties.Resources.BankName, GameEnvironment.GameEvents.GameTimer.DateAndTime, (tariff.Amount + (tariff.Amount * tariff.Coefficient / 100) * tariff.Term) / per_s)) { if (tariff.PropertyPledged != null) { if (tariff.PropertyPledged is House) { GameEnvironment.Services.PlayerTariffs.Remove(GameEnvironment.Player.House.PlayerCommunalPayments); GameEnvironment.Player.House = null; GameEnvironment.Services.PlayerTariffs.Remove(tariff); GameEnvironment.GameEvents.Events.Remove(@event); GameEnvironment.Messages.NewMessage("Банк", "У вас изъяли недвижимость в связи с отсутствием средств для выплаты задолженности!", GameMessages.Icon.Info); } } else { GameEnvironment.Scenario.GameOver("Нет денег для выплаты по услуге \"" + tariff.Service.Name + "\" тарифный план \"" + tariff.Name + "\""); } } //ВЫЗОВ СОБЫТИЯ GAME_OVER если не хватает денег (Игрок банкрот), исключение если есть залог if (DateTime.Compare(GetDateByPeriod(tariff.StartDateOfService, tariff.TermUnit, tariff.Term), @event.ResponseTime) <= 0) { if (tariff.PropertyPledged != null) { if (tariff.PropertyPledged is House) { GameEnvironment.Player.House.IsPurchasedOnCredit = false; GameEnvironment.Player.House.IsPurchased = true; } } GameEnvironment.GameEvents.Events.Remove(@event); GameEnvironment.Services.PlayerTariffs.Remove(tariff); } } } else { GameMessageBox.Show("Обработка выплат и взысканий", "Что-то пошло не так, тариф не найден!", GameMessageBox.MessageBoxType.Error); } }
private void Accept_Click(object sender, RoutedEventArgs e) { if (bank == null) { return; } if (bank.ServiceType.SelectedItem == null) { SellerText.Text = "Уважаемый не балуйтесь, выберите уже тип услуги!"; return; } if (bank.ServiceTariff.SelectedItem == null) { SellerText.Text = "Уважаемый не балуйтесь, тариф сам себя не выберет!"; return; } Service service = (Service)bank.ServiceType.SelectedItem; Tariff tariff = (Tariff)bank.ServiceTariff.SelectedItem; if (double.TryParse(bank.Sum.Text, out double sum)) { if (tariff.MinSum != 0 & sum < tariff.MinSum || tariff.MaxSum != 0 & sum > tariff.MaxSum) { SellerText.Text = "Разве не видно что вы не вкладываетесь в рамки тарифа?"; return; } double sum_tarrifs = 0; foreach (PlayerTariff p_tariff in GameEnvironment.Services.PlayerTariffs) { if (p_tariff.Service.UId == service.UId) { sum_tarrifs += p_tariff.Amount; } } if (service.Type == TransactionType.Withdraw) { if (service.TotalMaxDebt != 0 & service.TotalMaxDebt < ((sum_tarrifs + sum) / tariff.Currency.Course)) { SellerText.Text = "Уважаемый, введенная вами сумма превышает максимальную сумму по данному типу услуги на: " + ((sum_tarrifs + sum) - (service.TotalMaxDebt * tariff.Currency.Course)) + " " + tariff.Currency.Abbreviation; return; } } PlayerTariff playerTariff = new PlayerTariff(tariff.UId, tariff.Name, tariff.Currency, tariff.Coefficient, tariff.MinSum, tariff.MinSum, tariff.Periodicity, tariff.PeriodicityValue, tariff.TermUnit, tariff.MinTerm, tariff.MaxTerm, service, sum, Convert.ToInt32(bank.TariffPeriod.Value), GameEnvironment.GameEvents.GameTimer.DateAndTime, house, tariff.SpecialOffer); int uid = GameEnvironment.Services.AllServices.Count + 1; //Возможно прийдеться поменять PlayerTariff playerCommunalTariff = new PlayerTariff(uid, house.Name, GameEnvironment.Money.PlayerCurrency[0], 0, house.Price, house.Price, Periodicity.Month, 1, Periodicity.Month, 1, 1, communal_service, house.CommunalPayments * GameEnvironment.Money.PlayerCurrency[0].Course, 1, GameEnvironment.GameEvents.GameTimer.DateAndTime); GameEnvironment.Services.PlayerTariffs.Add(playerCommunalTariff); GameEnvironment.Services.PlayerTariffs.Add(playerTariff); GameEnvironment.Player.House = new PlayerHouse(house.UId, house.Name, house.Area, house.StorageSize, house.Rent, house.Price, house.CommunalPayments, house.Location, house.Distance, house.IsPurchase, house.IsRent, house.IsCreditPurchase, house.Image, playerCommunalTariff, false, false, true, playerTariff); GameEnvironment.GameEvents.Events.Add(new GameEvent(service.UId + ":" + tariff.UId + ":" + sum, GameEnvironment.GameEvents.GetDateTimeFromPeriodicity(GameEnvironment.GameEvents.GameTimer.DateAndTime, tariff.Periodicity, tariff.PeriodicityValue), tariff.Periodicity, tariff.PeriodicityValue, bank.ProcessingServices, true)); DateTime date = GameEnvironment.GameEvents.GameTimer.DateAndTime; date = new DateTime(date.Year, date.Month, 15, date.Hour, date.Minute, date.Second); GameEnvironment.GameEvents.Events.Add(new GameEvent(communal_service.UId + ":" + playerCommunalTariff.UId + ":" + (house.CommunalPayments * playerCommunalTariff.Currency.Course), GameEnvironment.GameEvents.GetDateTimeFromPeriodicity(date, playerCommunalTariff.Periodicity, playerCommunalTariff.PeriodicityValue), playerCommunalTariff.Periodicity, playerCommunalTariff.PeriodicityValue, CommunalPayment, true)); SellerText.Text = "Благодарим за покупку, с Вами приятно иметь дело!"; GameEnvironment.Messages.NewMessage("Агенство недвижимости", "Вы купили: " + house.Name + ". Поздравляем Вас с покупкой!", GameMessages.Icon.Info); RentPanel.Visibility = Visibility.Visible; CreditPanel.Visibility = Visibility.Hidden; CreditPanel.Children.Clear(); } }
private void RentButton_Click(object sender, RoutedEventArgs e) { Button button = sender as Button; if (!(button.Tag is House)) { return; } House house = button.Tag as House; if (GameEnvironment.Player.House != null) { if (GameEnvironment.Player.House.IsRent == true & GameEnvironment.Player.House.IsRentedOut & house.UId == GameEnvironment.Player.House.UId) { _ = GameMessageBox.Show("Аренда", "Вы уже арендовали данное жилье", GameMessageBox.MessageBoxType.Warning); return; } if (GameEnvironment.Player.House.IsPurchased) { if (GameMessageBox.Show("Аренда", "У вас куплено жилье, вы действительно хотите его продать?", GameMessageBox.MessageBoxType.ConfirmationWithYesNo) == MessageBoxResult.No) { return; } } if (GameEnvironment.Player.House.IsPurchasedOnCredit) { _ = GameMessageBox.Show("Аренда", "Нельзя арендовать если есть купленное в кредит жилье!", GameMessageBox.MessageBoxType.Information); return; } } Service service = null; Service communal_service = null; for (int i = 0; i <= GameEnvironment.Services.AllServices.Count - 1; i++) { if (GameEnvironment.Services.AllServices[i].SystemName == "rent") { service = GameEnvironment.Services.AllServices[i]; } else if (GameEnvironment.Services.AllServices[i].SystemName == "communal_payments") { communal_service = GameEnvironment.Services.AllServices[i]; } if (service != null && communal_service != null) { break; } } if (service == null) { GameMessageBox.Show("Аренда", "Не найдена услуга аренды, убедитесь в целостности базы данных!", GameMessageBox.MessageBoxType.Error); return; } if (communal_service == null) { GameMessageBox.Show("Аренда", "Не найдена услуга коммунальных платежей, убедитесь в целостности базы данных!", GameMessageBox.MessageBoxType.Error); return; } PropertyForSale(); int uid = GameEnvironment.Services.AllServices.Count + 1; //Возможно прийдеться поменять PlayerTariff playerTariff = new PlayerTariff(uid, house.Name, GameEnvironment.Money.PlayerCurrency[0], 0, house.Rent, house.Rent, Periodicity.Month, 1, Periodicity.Month, 1, 1, service, house.Rent * GameEnvironment.Money.PlayerCurrency[0].Course, 1, GameEnvironment.GameEvents.GameTimer.DateAndTime); PlayerTariff playerCommunalTariff = new PlayerTariff(uid + 1, house.Name, GameEnvironment.Money.PlayerCurrency[0], 0, house.Rent, house.Rent, Periodicity.Month, 1, Periodicity.Month, 1, 1, communal_service, house.CommunalPayments * GameEnvironment.Money.PlayerCurrency[0].Course, 1, GameEnvironment.GameEvents.GameTimer.DateAndTime); GameEnvironment.Services.PlayerTariffs.Add(playerTariff); GameEnvironment.Services.PlayerTariffs.Add(playerCommunalTariff); GameEnvironment.Player.House = new PlayerHouse(house.UId, house.Name, house.Area, house.StorageSize, house.Rent, house.Price, house.CommunalPayments, house.Location, house.Distance, house.IsPurchase, house.IsRent, house.IsCreditPurchase, house.Image, playerCommunalTariff, true, false, false, playerTariff); GameEnvironment.GameEvents.Events.Add(new GameEvent(service.UId + ":" + playerTariff.UId + ":" + (house.Rent * playerTariff.Currency.Course), GameEnvironment.GameEvents.GetDateTimeFromPeriodicity(GameEnvironment.GameEvents.GameTimer.DateAndTime, playerTariff.Periodicity, playerTariff.PeriodicityValue), playerTariff.Periodicity, playerTariff.PeriodicityValue, RentalPayment, true)); DateTime date = GameEnvironment.GameEvents.GameTimer.DateAndTime; date = new DateTime(date.Year, date.Month, 15, date.Hour, date.Minute, date.Second); GameEnvironment.GameEvents.Events.Add(new GameEvent(communal_service.UId + ":" + playerCommunalTariff.UId + ":" + (house.CommunalPayments * playerCommunalTariff.Currency.Course), GameEnvironment.GameEvents.GetDateTimeFromPeriodicity(date, playerCommunalTariff.Periodicity, playerCommunalTariff.PeriodicityValue), playerCommunalTariff.Periodicity, playerCommunalTariff.PeriodicityValue, CommunalPayment, true)); GameEnvironment.Messages.NewMessage("Агенство недвижимости", "Вы арендовали: " + house.Name + ". Поздравляем Вас!", GameMessages.Icon.Info); }
private void BuyButton_Click(object sender, RoutedEventArgs e) { Button button = sender as Button; if (!(button.Tag is House)) { return; } House house = button.Tag as House; if (GameEnvironment.Player.House != null) { if (GameEnvironment.Player.House.IsRent == true & GameEnvironment.Player.House.IsRentedOut & house.UId == GameEnvironment.Player.House.UId) { if (GameMessageBox.Show("Покупка", "Данное жилье арендовано вами, вы действительно хотите расторгнуть аренду?", GameMessageBox.MessageBoxType.ConfirmationWithYesNo) == MessageBoxResult.No) { return; } } if ((GameEnvironment.Player.House.IsPurchased || GameEnvironment.Player.House.IsPurchasedOnCredit) && house.UId == GameEnvironment.Player.House.UId) { _ = GameMessageBox.Show("Покупка", "У вас уже куплено данное жилье!", GameMessageBox.MessageBoxType.Information); return; } if (GameEnvironment.Player.House.IsPurchasedOnCredit && house.UId != GameEnvironment.Player.House.UId) { _ = GameMessageBox.Show("Покупка", "Нельзя купить новое жилье пока не погасите кредит за текущее!", GameMessageBox.MessageBoxType.Information); return; } if (GameEnvironment.Player.House.IsPurchased && house.UId != GameEnvironment.Player.House.UId) { if (GameMessageBox.Show("Покупка", "У вас есть другое купленно жилье, вы действительно хотите его продать?", GameMessageBox.MessageBoxType.ConfirmationWithYesNo) == MessageBoxResult.No) { return; } } } Service communal_service = null; for (int i = 0; i <= GameEnvironment.Services.AllServices.Count - 1; i++) { if (GameEnvironment.Services.AllServices[i].SystemName == "communal_payments") { communal_service = GameEnvironment.Services.AllServices[i]; break; } } if (communal_service == null) { GameMessageBox.Show("Покупка", "Не найдена услуга коммунальных платежей, убедитесь в целостности базы данных!", GameMessageBox.MessageBoxType.Error); return; } PropertyForSale(); double price = house.Price * GameEnvironment.Money.PlayerCurrency[0].Course; if (GameEnvironment.Money.PlayerCurrency[0].Withdraw("Покупка " + house.Name, "Агенство недвижимости \"Крыша над головой\"", GameEnvironment.GameEvents.GameTimer.DateAndTime, price)) { CoinCount.Content = GameEnvironment.Money.PlayerCurrency[0].Count.ToString("N3") + " " + GameEnvironment.Money.PlayerCurrency[0].Abbreviation; int uid = GameEnvironment.Services.AllServices.Count + 1; //Возможно прийдеться поменять PlayerTariff playerCommunalTariff = new PlayerTariff(uid + 1, house.Name, GameEnvironment.Money.PlayerCurrency[0], 0, house.Rent, house.Rent, Periodicity.Month, 1, Periodicity.Month, 1, 1, communal_service, house.CommunalPayments * GameEnvironment.Money.PlayerCurrency[0].Course, 1, GameEnvironment.GameEvents.GameTimer.DateAndTime); GameEnvironment.Services.PlayerTariffs.Add(playerCommunalTariff); DateTime date = GameEnvironment.GameEvents.GameTimer.DateAndTime; date = new DateTime(date.Year, date.Month, 15, date.Hour, date.Minute, date.Second); GameEnvironment.GameEvents.Events.Add(new GameEvent(communal_service.UId + ":" + playerCommunalTariff.UId + ":" + (house.CommunalPayments * playerCommunalTariff.Currency.Course), GameEnvironment.GameEvents.GetDateTimeFromPeriodicity(date, playerCommunalTariff.Periodicity, playerCommunalTariff.PeriodicityValue), playerCommunalTariff.Periodicity, playerCommunalTariff.PeriodicityValue, CommunalPayment, true)); GameEnvironment.Player.House = new PlayerHouse(house.UId, house.Name, house.Area, house.StorageSize, house.Rent, house.Price, house.CommunalPayments, house.Location, house.Distance, house.IsPurchase, house.IsRent, house.IsCreditPurchase, house.Image, playerCommunalTariff, false, true, false); SellerText.Text = "Благодарим за покупку, с Вами приятно иметь дело!"; GameEnvironment.Messages.NewMessage("Агенство недвижимости", "Вы купили: " + house.Name + ". Поздравляем Вас с покупкой!", GameMessages.Icon.Info); } else { SellerText.Text = "К сожалению на вашем счету недостаточно средств!"; } }