Example #1
0
        public static void ClientEvent_ATM(Client player, params object[] args)
        {
            try
            {
                if (Admin.IsServerStoping)
                {
                    Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, "Сервер сейчас не может принять это действие", 3000);
                    return;
                }
                int    act   = Convert.ToInt32(args[0]);
                string data1 = Convert.ToString(args[1]);
                var    acc   = Main.Players[player];
                int    amount;
                if (!Int32.TryParse(data1, out amount))
                {
                    return;
                }
                Log.Debug($"{player.Name} : {data1}");
                switch (act)
                {
                case 0:     //put money
                    if (Wallet.Change(player, -Math.Abs(amount)))
                    {
                        Bank.Change(acc.Bank, amount);
                        GameLog.Money($"player({Main.Players[player].UUID})", $"bank({acc.Bank})", Math.Abs(amount), $"atmIn");
                        Trigger.ClientEvent(player, "setbank", Bank.Accounts[acc.Bank].Balance.ToString(), "");
                    }
                    break;

                case 1:     //take money
                    if (Bank.Change(acc.Bank, -Math.Abs(amount)))
                    {
                        Wallet.Change(player, amount);
                        GameLog.Money($"bank({acc.Bank})", $"player({Main.Players[player].UUID})", Math.Abs(amount), $"atmOut");
                        Trigger.ClientEvent(player, "setbank", Bank.Accounts[acc.Bank].Balance.ToString(), "");
                    }
                    break;

                case 2:     //put house tax
                    var house = Houses.HouseManager.GetHouse(player, true);
                    if (house == null)
                    {
                        return;
                    }

                    var maxMoney = Convert.ToInt32(house.Price / 100 * 0.013) * 24 * 7;
                    if (Bank.Accounts[house.BankID].Balance + Math.Abs(amount) > maxMoney)
                    {
                        Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, "Невозможно перевести столько средств на счет дома.", 3000);
                        return;
                    }
                    if (!Wallet.Change(player, -Math.Abs(amount)))
                    {
                        Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, "Недостаточно средств.", 3000);
                        return;
                    }
                    Bank.Change(house.BankID, Math.Abs(amount));
                    GameLog.Money($"player({Main.Players[player].UUID})", $"bank({house.BankID})", Math.Abs(amount), $"atmHouse");
                    Notify.Send(player, NotifyType.Success, NotifyPosition.BottomCenter, "Успешный перевод.", 3000);
                    break;

                case 3:     //put biz tax
                    var check = NAPI.Data.GetEntityData(player, "bizcheck");
                    if (check == null)
                    {
                        return;
                    }
                    if (acc.BizIDs.Count != check)
                    {
                        Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, "Возникла ошибка! Попробуйте еще раз.", 3000);
                        return;
                    }
                    int bid = 0;
                    if (!Int32.TryParse(Convert.ToString(args[2]), out bid))
                    {
                        Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, "Возникла ошибка! Попробуйте еще раз.", 3000);
                        return;
                    }

                    Business biz = BusinessManager.BizList[acc.BizIDs[bid]];

                    maxMoney = Convert.ToInt32(biz.SellPrice / 100 * 0.01) * 24 * 7;
                    if (Bank.Accounts[biz.BankID].Balance + Math.Abs(amount) > maxMoney)
                    {
                        Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, "Невозможно перевести столько средств на счет бизнеса.", 3000);
                        return;
                    }
                    if (!Wallet.Change(player, -Math.Abs(amount)))
                    {
                        Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, "Недостаточно средств.", 3000);
                        return;
                    }
                    Bank.Change(biz.BankID, Math.Abs(amount));
                    GameLog.Money($"player({Main.Players[player].UUID})", $"bank({biz.BankID})", Math.Abs(amount), $"atmBiz");
                    Notify.Send(player, NotifyType.Success, NotifyPosition.BottomCenter, "Успешный перевод.", 3000);
                    break;

                case 4:     //transfer to
                    int num = 0;
                    if (!Int32.TryParse(Convert.ToString(args[2]), out num))
                    {
                        return;
                    }
                    Bank.Transfer(acc.Bank, num, +Math.Abs(amount));
                    break;
                }
            }
            catch (Exception e) { Log.Write("atm: " + e.Message, nLog.Type.Error); }
        }
Example #2
0
        public static void ClientEvent_ATMVAL(Client player, params object[] args)
        {
            try
            {
                if (Admin.IsServerStoping)
                {
                    Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, "Сервер сейчас не может принять это действие", 3000);
                    return;
                }
                var    acc  = Main.Players[player];
                int    type = NAPI.Data.GetEntityData(player, "ATMTYPE");
                string data = Convert.ToString(args[0]);
                int    amount;
                if (!Int32.TryParse(data, out amount))
                {
                    return;
                }
                switch (type)
                {
                case 0:
                    Trigger.ClientEvent(player, "atmClose");
                    if (Wallet.Change(player, -Math.Abs(amount)))
                    {
                        Bank.Change(acc.Bank, +Math.Abs(amount));
                        GameLog.Money($"player({Main.Players[player].UUID})", $"bank({acc.Bank})", Math.Abs(amount), $"atmIn");
                        Trigger.ClientEvent(player, "setbank", Bank.Accounts[acc.Bank].Balance.ToString(), "");
                    }
                    break;

                case 1:
                    if (Bank.Change(acc.Bank, -Math.Abs(amount)))
                    {
                        Wallet.Change(player, +Math.Abs(amount));
                        GameLog.Money($"bank({acc.Bank})", $"player({Main.Players[player].UUID})", Math.Abs(amount), $"atmOut");
                        Trigger.ClientEvent(player, "setbank", Bank.Accounts[acc.Bank].Balance.ToString(), "");
                    }
                    break;

                case 2:
                    var house = Houses.HouseManager.GetHouse(player, true);
                    if (house == null)
                    {
                        return;
                    }

                    var maxMoney = Convert.ToInt32(house.Price / 100 * 0.013) * 24 * 7;
                    if (Bank.Accounts[house.BankID].Balance + Math.Abs(amount) > maxMoney)
                    {
                        Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, "Невозможно перевести столько средств на счет дома.", 3000);
                        return;
                    }
                    if (!Wallet.Change(player, -Math.Abs(amount)))
                    {
                        Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, "Недостаточно средств.", 3000);
                        return;
                    }
                    Bank.Change(house.BankID, +Math.Abs(amount));
                    GameLog.Money($"player({Main.Players[player].UUID})", $"bank({house.BankID})", Math.Abs(amount), $"atmHouse");
                    Notify.Send(player, NotifyType.Success, NotifyPosition.BottomCenter, "Успешный перевод.", 3000);
                    Trigger.ClientEvent(player,
                                        "atmOpen", $"[2,'{Bank.Accounts[house.BankID].Balance}/{Convert.ToInt32(house.Price / 100 * 0.013) * 24 * 7}$','Сумма внесения наличных']");
                    break;

                case 3:
                    int bid = NAPI.Data.GetEntityData(player, "ATMBIZ");

                    Business biz = BusinessManager.BizList[acc.BizIDs[bid]];

                    maxMoney = Convert.ToInt32(biz.SellPrice / 100 * 0.013) * 24 * 7;
                    if (Bank.Accounts[biz.BankID].Balance + Math.Abs(amount) > maxMoney)
                    {
                        Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, "Невозможно перевести столько средств на счет бизнеса.", 3000);
                        return;
                    }
                    if (!Wallet.Change(player, -Math.Abs(amount)))
                    {
                        Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, "Недостаточно средств.", 3000);
                        return;
                    }
                    Bank.Change(biz.BankID, +Math.Abs(amount));
                    GameLog.Money($"player({Main.Players[player].UUID})", $"bank({biz.BankID})", Math.Abs(amount), $"atmBiz");
                    Notify.Send(player, NotifyType.Success, NotifyPosition.BottomCenter, "Успешный перевод.", 3000);
                    Trigger.ClientEvent(player, "atmOpen", $"[2,'{Bank.Accounts[biz.BankID].Balance}/{Convert.ToInt32(biz.SellPrice / 100 * 0.013) * 24 * 7}$','Сумма зачисления']");
                    break;

                case 4:
                    if (!Bank.Accounts.ContainsKey(amount) || amount <= 0)
                    {
                        Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, "Счет не найден!", 3000);
                        Trigger.ClientEvent(player, "closeatm");
                        return;
                    }
                    NAPI.Data.SetEntityData(player, "ATM2ACC", amount);
                    Trigger.ClientEvent(player,
                                        "atmOpen", "[2,0,'Сумма для перевода']");
                    NAPI.Data.SetEntityData(player, "ATMTYPE", 44);
                    break;

                case 44:
                    if (Main.Players[player].LVL < 1)
                    {
                        Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, $"Перевод денег доступен после первого уровня", 3000);
                        return;
                    }
                    if (player.HasData("NEXT_BANK_TRANSFER") && DateTime.Now < player.GetData("NEXT_BANK_TRANSFER"))
                    {
                        Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, $"Следующая транзакция будет возможна в течение минуты", 3000);
                        return;
                    }
                    int bank = NAPI.Data.GetEntityData(player, "ATM2ACC");
                    if (!Bank.Accounts.ContainsKey(bank) || bank <= 0)
                    {
                        Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, "Счет не найден!", 3000);
                        Trigger.ClientEvent(player, "closeatm");
                        return;
                    }
                    if (Bank.Accounts[bank].Type != 1 && Main.Players[player].AdminLVL == 0)
                    {
                        Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, "Счет не найден!", 3000);
                        Trigger.ClientEvent(player, "closeatm");
                        return;
                    }
                    if (acc.Bank == bank)
                    {
                        Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, "Операция отменена.", 3000);
                        Trigger.ClientEvent(player, "closeatm");
                        return;
                    }
                    Bank.Transfer(acc.Bank, bank, Math.Abs(amount));
                    Trigger.ClientEvent(player, "closeatm");
                    if (Main.Players[player].AdminLVL == 0)
                    {
                        player.SetData("NEXT_BANK_TRANSFER", DateTime.Now.AddMinutes(1));
                    }
                    break;
                }
            }
            catch (Exception e)
            {
                Log.Write(e.ToString(), nLog.Type.Error);
            }
        }