[FilterScript] Jueix's bank system and Dynamic ATM system.
#1

Jueixs Banking V2 release
Hello guys, V2 is released. You can now /removeatm, /addbank, /removebank, /removeatm and /setbankcash. Banks have been updated to have vaults and when the vault runs out of money players can no longer withdraw there money from that bank.

Soon to be adding a robberie system to the script which allows players to rob the banks and break into the ATM machines.

How to run V2
Create two folders in scriptfiles one called ATMs and the other called Banks, Add a sub folder into ATMs called ATMUsers, Then go ingame and type /createatm, /createbank and /juesbank.

DownLoad V2
pastebin: http://pastebin.com/6eRtZ9Ub
pawn Код:
#include <a_samp>
#include <zcmd>
#include <Dini>
#include <dudb>
#include <foreach>
#include <sscanf2>
#include <streamer>

//ATM Crap
#define MAX_ATM 100
#define MAX_BANK 100
#define MAX_DISTANCE_TO_PROP 1.5
new ATMObject[MAX_ATM];
new Text3D:ATMLabel[MAX_ATM];
new Object[MAX_PLAYERS];
new oModel[MAX_PLAYERS];
new ATMi;
new ATMm[MAX_PLAYERS];
new atms;
new Banks;
new BankObject[MAX_ATM];
new Text3D:BankLabel[MAX_ATM];

enum abInfo
{
    Float:ATMx,
    Float:ATMy,
    Float:ATMz,
    Float:ATMrx,
    Float:ATMry,
    Float:ATMrz,
    ATMint,
    ATMvw,
    ATMMoney
}
new ATMInfo[MAX_ATM][abInfo];

enum bInfo
{
    Float:Bankx,
    Float:Banky,
    Float:Bankz,
    Float:Bankrx,
    Float:Bankry,
    Float:Bankrz,
    Bankint,
    Bankvw,
    BankMoney
}
new BankInfo[MAX_BANK][bInfo];

enum pInfo
{
    pBank,
    playerenterbankid
}
new PlayerInfo[MAX_PLAYERS][pInfo];
#define ATM_USER_FILE "ATMs/ATMUsers/%s.ini"
//COLOR DEFINES
#define COLOR_YELLOW    0xD8D8D8FF
#define COLOR_FADE1     0xE6E6E6E6
#define COLOR_FADE2     0xC8C8C8C8
#define COLOR_FADE3     0xAAAAAAAA
#define COLOR_FADE4     0x8C8C8C8C
#define COLOR_FADE5     0x6E6E6E6E
#define COLOR_FADE      0xC8C8C8C8
#define COLOR_WHITE     0xFFFFFFAA
#define COLOR_GRAD2     0xBFC0C2FF
#define COLOR_DARKRED   0x8B0000AA
#define COLOR_RED       0xFF0000AA
#define COLOR_LIGHTBLUE 0x33CCFFAA
#define COLOR_GREY      0xAFAFAFAA
#define COLOR_PINK      0xDC00DDAA
#define COLOR_BLUE      0x0259EAAA
#define COLOR_GREEN     0x00A800AA
#define COLOR_ORANGE    0xFF8000AA
#define COLOR_CYAN      0xFF8080AA
#define COLOR_WHITE     0xFFFFFFAA
#define COLOR_DARKBLUE  0x0000A0AA
#define COLOR_BLACK     0x000000AA
#define COLOR_DARKGOLD  0x808000AA
#define COLOR_PURPLE    0xC2A2DAAA
#define COLOR_BROWN     0x804000AA
#define COLOR_BLACK2    0x000000ff
#define COL_EASY           "{FFF1AF}"
#define COL_WHITE          "{FFFFFF}"
#define COL_BLACK          "{0E0101}"
#define COL_GREY           "{C3C3C3}"
#define COL_GREEN          "{6EF83C}"
#define COL_RED            "{F81414}"
#define COL_YELLOW         "{F3FF02}"
#define COL_ORANGE         "{FFAF00}"
#define COL_LIME           "{B7FF00}"
#define COL_CYAN           "{00FFEE}"
#define COL_LIGHTBLUE      "{00C0FF}"
#define COL_BLUE           "{0049FF}"
#define COL_MAGENTA        "{F300FF}"
#define COL_VIOLET         "{B700FF}"
#define COL_PINK           "{FF00EA}"
#define COL_MARONE         "{A90202}"
#define COL_CMD            "{B8FF02}"
#define COL_PARAM          "{3FCD02}"
#define COL_SERVER         "{AFE7FF}"
#define COL_VALUE          "{A3E4FF}"
#define COL_RULE           "{F9E8B7}"
#define COL_RULE2          "{FBDF89}"
#define COL_RWHITE         "{FFFFFF}"
#define COL_LGREEN         "{C9FFAB}"
#define COL_LRED           "{FFA1A1}"
#define COL_LRED2          "{C77D87}"

public OnFilterScriptInit()
{
    print("\n--------------------------------------");
    print(" Jueixs bank system loaded");
    print("--------------------------------------\n");
    LoadATMs();
    LoadBanks();
    return 1;
}

public OnPlayerEditObject(playerid, playerobject, objectid, response, Float:fX, Float:fY, Float:fZ, Float:fRotX, Float:fRotY, Float:fRotZ)
{
    new Float:oldX, Float:oldY, Float:oldZ, Float:oldRotX, Float:oldRotY, Float:oldRotZ;
    GetObjectPos(objectid, oldX, oldY, oldZ);
    GetObjectRot(objectid, oldRotX, oldRotY, oldRotZ);
    new Float:OX, Float:OY, Float:OZ, Float:ORX, Float:ORY, Float:ORZ,OVW,OINT;
    if(!playerobject) // If this is a global object, move it for other players
    {
        if(!IsValidObject(objectid)) return;
        MoveObject(objectid, fX, fY, fZ, 10.0, fRotX, fRotY, fRotZ);
    }
    if(response == EDIT_RESPONSE_FINAL)
    {
        if(oModel[playerid] == 2942)
        {
            new ATMid = GetATMs();
            new ATM[256];
            format(ATM, sizeof(ATM), "ATMs/%i.ini",ATMid);
            OVW = GetPlayerVirtualWorld(playerid);
            OINT = GetPlayerInterior(playerid);
            GetObjectPos(objectid, OX, OY, OZ);
            GetObjectRot(objectid, ORX, ORY, ORZ);
            ATMInfo[ATMid][ATMMoney] = ATMm[playerid];
            dini_Create(ATM);
            dini_IntSet(ATM, "Money", ATMInfo[ATMid][ATMMoney]);
            dini_IntSet(ATM, "INT", OINT);
            dini_IntSet(ATM, "VW", OVW);
            dini_FloatSet(ATM, "ATMX", OX);
            dini_FloatSet(ATM, "ATMY", OY);
            dini_FloatSet(ATM, "ATMZ", OZ);
            dini_FloatSet(ATM, "ATMRX", ORX);
            dini_FloatSet(ATM, "ATMRY", ORY);
            dini_FloatSet(ATM, "ATMRZ", ORZ);
            DestroyObject(Object[playerid]);
            ATMObject[ATMid] = CreateObject(2942, OX, OY, OZ, ORX, ORY, ORZ);
            new string[256];
            format(string, sizeof(string), "ATM type /atmwithdraw and /atmbalance.\nMoney left $%d\nID[%d]",ATMInfo[ATMid][ATMMoney],ATMid);
            ATMLabel[ATMid] = Create3DTextLabel(string, 0x008080FF, OX, OY, OZ, 10.0, 0, 1);
        }
    }
    if(response == EDIT_RESPONSE_CANCEL)
    {
    //The player cancelled, so put the object back to it's old position
        if(!playerobject) //Object is not a playerobject
        {
            SetObjectPos(objectid, oldX, oldY, oldZ);
            SetObjectRot(objectid, oldRotX, oldRotY, oldRotZ);
            DestroyObject(Object[playerid]);
        }
        else
        {
            SetPlayerObjectPos(playerid, objectid, oldX, oldY, oldZ);
            SetPlayerObjectRot(playerid, objectid, oldRotX, oldRotY, oldRotZ);
            DestroyObject(Object[playerid]);
        }
    }
}

public OnPlayerConnect(playerid)
{
    new name[MAX_PLAYER_NAME], userfile[256];
    GetPlayerName(playerid, name, sizeof(name));
    format(userfile, sizeof(userfile), ATM_USER_FILE, name);
    if (!dini_Exists(userfile)) {
        dini_Create(userfile);
        PlayerInfo[playerid][pBank] = 5000;
        SaveStats(playerid);
    }
    if(fexist(userfile)) {
        LoadStats(playerid);
    }
    return 1;
}

public OnFilterScriptExit()
{
    return 1;
}

//ATM Loading
stock LoadATMs()
{
    new file[60];
    for(new i = 0; i < MAX_ATM;i++)
    {
        format(file,sizeof(file),"ATMs/%i.ini",i);
        if(!dini_Exists(file)) continue;
        ATMInfo[i][ATMx] = dini_Float(file, "ATMX");
        ATMInfo[i][ATMy] = dini_Float(file, "ATMY");
        ATMInfo[i][ATMz] = dini_Float(file, "ATMZ");
        ATMInfo[i][ATMrx] = dini_Float(file, "ATMRX");
        ATMInfo[i][ATMry] = dini_Float(file, "ATMRY");
        ATMInfo[i][ATMrz] = dini_Float(file, "ATMRZ");
        ATMInfo[i][ATMvw] = dini_Int(file, "VW");
        ATMInfo[i][ATMint] = dini_Int(file, "INT");
        ATMInfo[i][ATMMoney] = dini_Int(file, "Money");
        ATMObject[i] = CreateObject(2942, ATMInfo[i][ATMx], ATMInfo[i][ATMy], ATMInfo[i][ATMz], ATMInfo[i][ATMrx], ATMInfo[i][ATMry], ATMInfo[i][ATMrz]);
        new string[256];
        format(string, sizeof(string), "ATM type /atmwithdraw and /atmbalance.\nMoney left $%d",ATMInfo[i][ATMMoney]);
        ATMLabel[i] = Create3DTextLabel(string, 0x008080FF, ATMInfo[i][ATMx], ATMInfo[i][ATMy], ATMInfo[i][ATMz], 10.0, 0, 1);
        atms++;
    }
   
    printf("ATMs Created!");
    return 1;
}

stock LoadBanks()
{
    new file[60];
    for(new i = 0; i < MAX_BANK;i++)
    {
        format(file,sizeof(file),"Banks/%i.ini",i);
        if(!dini_Exists(file)) continue;
        BankInfo[i][Bankx] = dini_Float(file, "BankX");
        BankInfo[i][Banky] = dini_Float(file, "BankY");
        BankInfo[i][Bankz] = dini_Float(file, "BankZ");
        BankInfo[i][Bankrx] = dini_Float(file, "BankRX");
        BankInfo[i][Bankry] = dini_Float(file, "BankRY");
        BankInfo[i][Bankrz] = dini_Float(file, "BankRZ");
        BankInfo[i][Bankvw] = dini_Int(file, "VW");
        BankInfo[i][Bankint] = dini_Int(file, "INT");
        BankInfo[i][BankMoney] = dini_Int(file, "Money");
        BankObject[i] = CreatePickup(1318, 1, BankInfo[i][Bankx], BankInfo[i][Banky], BankInfo[i][Bankz], -1);
        new string[256];
        format(string, sizeof(string), "/enter to enter the bank.\nMoney left in this banks vault $%d.",BankInfo[i][BankMoney]);
        BankLabel[i] = Create3DTextLabel(string, 0x008080FF, BankInfo[i][Bankx], BankInfo[i][Banky], BankInfo[i][Bankz], 10.0, 0, 1);
        Banks++;
    }

    printf("Banks Created!");
    return 1;
}

stock GetATMs()
{
    new file[60];
    for(new i = 0; i < MAX_ATM;i++)
    {
        format(file,sizeof(file),"ATMs/%i.ini",i);
        if(!dini_Exists(file)) return i;
    }
    return -1;
}

stock GetBanks()
{
    new file[60];
    for(new i = 0; i < MAX_BANK;i++)
    {
        format(file,sizeof(file),"Banks/%i.ini",i);
        if(!dini_Exists(file)) return i;
    }
    return -1;
}

stock GetATMID(playerid)
{
    for(new i=0; i<MAX_ATM; i++)
    {
        if(PlayerToPoint(MAX_DISTANCE_TO_PROP, playerid, ATMInfo[i][ATMx],ATMInfo[i][ATMy],ATMInfo[i][ATMz]))
        {
            return i;
        }
    }
    return 1;
}

stock GetBankID(playerid)
{
    for(new i=0; i<MAX_BANK; i++)
    {
        if(PlayerToPoint(MAX_DISTANCE_TO_PROP, playerid, BankInfo[i][Bankx],BankInfo[i][Banky],BankInfo[i][Bankz]))
        {
            return i;
        }
    }
    return 1;
}

stock RandomEx(min, max) //******
{
    return random(max - min) + min;
}

stock PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z)
{
    if(IsPlayerConnected(playerid))
    {
        new Float:oldposx, Float:oldposy, Float:oldposz;
        new Float:tempposx, Float:tempposy, Float:tempposz;
        GetPlayerPos(playerid, oldposx, oldposy, oldposz);
        tempposx = (oldposx -x);
        tempposy = (oldposy -y);
        tempposz = (oldposz -z);
        if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi)))
        {
            return 1;
        }
    }
    return 0;
}

COMMAND:addatm(playerid, params[])
{
    new hCost;
    if(IsPlayerAdmin(playerid))
    {
        if(!sscanf(params, "i", hCost))
        {
            new Float:OX, Float:OY, Float:OZ, Float:ORX, Float:ORY, Float:ORZ;
            GetPlayerPos(playerid, OX, OY, OZ);
            oModel[playerid] = 2942;
            ATMm[playerid] = hCost;
            ORX = 0.0;
            ORY = 0.0;
            ORZ = 0.0;
            Object[playerid] = CreateObject(2942, OX+2, OY, OZ, ORX, ORY, ORZ); //Object will render at its default distance.
            SendClientMessage(playerid, 0xD8D8D8FF, "Object spawned now move it");
            EditObject(playerid, Object[playerid]);
            return 1;
        }
        else return SendClientMessage(playerid, COLOR_RED, "USAGE: /addatm [amount of money]");
    }
    else return SendClientMessage(playerid, COLOR_RED, "You do not have the rights to use this command.");
}

COMMAND:addbank(playerid, params[])
{
    new hCost;
    if(IsPlayerAdmin(playerid))
    {
        if(!sscanf(params, "i", hCost))
        {
            new i = GetBanks();
            GetPlayerPos(playerid, BankInfo[i][Bankx], BankInfo[i][Banky], BankInfo[i][Bankz]);
            BankInfo[i][Bankrx] = 2305.8408;
            BankInfo[i][Bankry] = -16.4474;
            BankInfo[i][Bankrz] = 26.7496;
            BankInfo[i][Bankint] = 0;
            BankInfo[i][Bankvw] = i;
            BankInfo[i][BankMoney] = hCost;
            new Bank[256];
            format(Bank, sizeof(Bank), "Banks/%i.ini",i);
            dini_Create(Bank);
            dini_IntSet(Bank, "Money", BankInfo[i][BankMoney]);
            dini_IntSet(Bank, "INT", BankInfo[i][Bankint]);
            dini_IntSet(Bank, "VW", BankInfo[i][Bankvw]);
            dini_FloatSet(Bank, "BankX", BankInfo[i][Bankx]);
            dini_FloatSet(Bank, "BankY", BankInfo[i][Banky]);
            dini_FloatSet(Bank, "BankZ", BankInfo[i][Bankz]);
            dini_FloatSet(Bank, "BankRX", BankInfo[i][Bankrx]);
            dini_FloatSet(Bank, "BankRY", BankInfo[i][Bankry]);
            dini_FloatSet(Bank, "BankRZ", BankInfo[i][Bankrz]);
            BankObject[i] = CreatePickup(1318, 1, BankInfo[i][Bankx], BankInfo[i][Banky], BankInfo[i][Bankz], -1);
            new string[256];
            format(string, sizeof(string), "/enter to enter the bank.\nMoney left in this banks vault $%d.",BankInfo[i][BankMoney]);
            BankLabel[i] = Create3DTextLabel(string, 0x008080FF, BankInfo[i][Bankx], BankInfo[i][Banky], BankInfo[i][Bankz], 10.0, 0, 1);
            SendClientMessage(playerid, 0xD8D8D8FF, "Bank created");
            return 1;
        }
        else return SendClientMessage(playerid, COLOR_RED, "USAGE: /addbank [amount of money]");
    }
    else return SendClientMessage(playerid, COLOR_RED, "You do not have the rights to use this command.");
}

COMMAND:enter(playerid, params[])
{
    new i = GetBankID(playerid);
    if(IsPlayerInRangeOfPoint(playerid, 3,BankInfo[i][Bankx], BankInfo[i][Banky], BankInfo[i][Bankz]))
    {
        SetPlayerPos(playerid,BankInfo[i][Bankrx], BankInfo[i][Bankry], BankInfo[i][Bankrz]);
        SetPlayerVirtualWorld(playerid,BankInfo[i][Bankvw]);
        SetPlayerInterior(playerid,BankInfo[i][Bankint]);
        PlayerInfo[playerid][playerenterbankid] = i;
        return 1;
    }
    else return SendClientMessage(playerid, COLOR_RED, "You are not near anywhere you can enter.");
}

COMMAND:exit(playerid, params[])
{
    new i = PlayerInfo[playerid][playerenterbankid];
    if(IsPlayerInRangeOfPoint(playerid, 3,2305.8408,-16.4474,26.7496))
    {
        SetPlayerPos(playerid,BankInfo[i][Bankx], BankInfo[i][Banky], BankInfo[i][Bankz]);
        SetPlayerVirtualWorld(playerid,0);
        SetPlayerInterior(playerid,0);
        return 1;
    }
    else return SendClientMessage(playerid, COLOR_RED, "You are not near anywhere you can enter.");
}

COMMAND:removeatm(playerid, params[])
{
    if(IsPlayerAdmin(playerid))
    {
        new i;
        if(!sscanf(params, "i", i))
        {
            new file[256];
            format(file,sizeof(file),"ATMs/%i.ini",i);
            dini_Remove(file);
            DestroyObject(ATMObject[i]);
            Delete3DTextLabel(ATMLabel[i]);
            SendClientMessage(playerid, COLOR_ORANGE, "ATM removed.");
            return 1;
        }
        else return SendClientMessage(playerid, COLOR_RED, "You do not have the rights to use this command.");
    }
    else return SendClientMessage(playerid, COLOR_RED, "Usage: /removeatm [atmid].");
}

COMMAND:removebank(playerid, params[])
{
    if(IsPlayerAdmin(playerid))
    {
        new i;
        if(!sscanf(params, "i", i))
        {
            new file[256];
            format(file,sizeof(file),"Banks/%i.ini",i);
            dini_Remove(file);
            DestroyObject(BankObject[i]);
            Delete3DTextLabel(BankLabel[i]);
            SendClientMessage(playerid, COLOR_ORANGE, "Bank removed.");
            return 1;
        }
        else return SendClientMessage(playerid, COLOR_RED, "You do not have the rights to use this command.");
    }
    else return SendClientMessage(playerid, COLOR_RED, "Usage: /removeBank [Bankid].");
}

COMMAND:setatmcash(playerid, params[])
{
    new amount;
    new atid;
    new Biz[128];
    new string[256];
    if(IsPlayerAdmin(playerid))
    {
        if(!sscanf(params, "ii", atid, amount))
        {
            format(Biz, sizeof(Biz), "ATMs/%i.ini",atid);
            ATMInfo[atid][ATMMoney] = amount;
            dini_IntSet(Biz, "Money", ATMInfo[atid][ATMMoney]);
            Delete3DTextLabel(ATMLabel[atid]);
            format(string, sizeof(string), "ATM type /atmwithdraw and /atmbalance.\nMoney left $%d",ATMInfo[atid][ATMMoney]);
            ATMLabel[atid] = Create3DTextLabel(string, 0x008080FF, ATMInfo[atid][ATMx],ATMInfo[atid][ATMy],ATMInfo[atid][ATMz], 10.0, 0, 1);
            return 1;
        }
        else return SendClientMessage(playerid,COLOR_RED,"USAGE: /setatmcash [atmid] [amount]");
    }
    else return SendClientMessage(playerid,COLOR_RED,"You can not use this command!");
}

COMMAND:setbankcash(playerid, params[])
{
    new amount;
    new atid;
    new Biz[128];
    new string[256];
    if(IsPlayerAdmin(playerid))
    {
        if(!sscanf(params, "ii", atid, amount))
        {
            format(Biz, sizeof(Biz), "Banks/%i.ini",atid);
            BankInfo[atid][BankMoney] = amount;
            dini_IntSet(Biz, "Money", BankInfo[atid][BankMoney]);
            Delete3DTextLabel(BankLabel[atid]);
            format(string, sizeof(string), "Bank type /Bankwithdraw and /Bankbalance.\nMoney left $%d",BankInfo[atid][BankMoney]);
            BankLabel[atid] = Create3DTextLabel(string, 0x008080FF, BankInfo[atid][Bankx],BankInfo[atid][Banky],BankInfo[atid][Bankz], 10.0, 0, 1);
            return 1;
        }
        else return SendClientMessage(playerid,COLOR_RED,"USAGE: /setBankcash [Bankid] [amount]");
    }
    else return SendClientMessage(playerid,COLOR_RED,"You can not use this command!");
}

COMMAND:juesbank(playerid, params[])
{
    if(IsPlayerAdmin(playerid))
    {
        SendClientMessage(playerid,COLOR_ORANGE,"/addatm /addbank /getatmid /getbankid /setatmcash /setbankcash /withdraw!");
        SendClientMessage(playerid,COLOR_ORANGE,"/removeatm /removebank /deposit /atmwithdraw!");
        return 1;
    }
    else return SendClientMessage(playerid,COLOR_RED,"You can not use this command!");
}

COMMAND:atmwithdraw(playerid, params[])
{
    new amount;
    new Biz[128];
    new string[256];
    new i;
    i = GetATMID(playerid);
    if(!sscanf(params, "i", amount))
    {
        if(IsPlayerInRangeOfPoint(playerid, 3.0,ATMInfo[i][ATMx],ATMInfo[i][ATMy],ATMInfo[i][ATMz]))
        {
            if(amount <= ATMInfo[i][ATMMoney] && amount > 0)
            {
                if(amount <= PlayerInfo[playerid][pBank] && amount > 0)
                {
                    format(Biz, sizeof(Biz), "ATMs/ATMid%d",i);
                    PlayerInfo[playerid][pBank] = PlayerInfo[playerid][pBank]-amount;
                    GivePlayerMoney(playerid,amount);
                    ATMInfo[i][ATMMoney] = ATMInfo[i][ATMMoney]-amount;
                    dini_IntSet(Biz, "Money", ATMInfo[i][ATMMoney]);
                    Delete3DTextLabel(ATMLabel[i]);
                    format(string, sizeof(string), "ATM type /atmwithdraw and /balance.\nMoney left $%d",ATMInfo[i][ATMMoney]);
                    ATMLabel[i] = Create3DTextLabel(string, 0x008080FF, ATMInfo[i][ATMx],ATMInfo[i][ATMy],ATMInfo[i][ATMz], 10.0, 0, 1);
                    return 1;
                }
                else return SendClientMessage(playerid,COLOR_RED,"You don't have that much money in your bank account.");
            }
            else return SendClientMessage(playerid,COLOR_RED,"This cash machine doesn't have that much cash in.");
        }
        else return SendClientMessage(playerid,COLOR_RED,"You are not around any cash machines.");
    }
    else return SendClientMessage(playerid,COLOR_RED,"USAGE: /atmwithdraw [amount]");
}

COMMAND:getatmid(playerid, params[])
{
    new string[256];
    new i;
    i = GetATMID(playerid);
    if(IsPlayerAdmin(playerid))
    {
        if(IsPlayerInRangeOfPoint(playerid, 3.0,ATMInfo[i][ATMx],ATMInfo[i][ATMy],ATMInfo[i][ATMz]))
        {
            format(string, sizeof(string), "ATM ID %d",i);
            SendClientMessage(playerid,COLOR_ORANGE,string);
            return 1;
        }
        else return SendClientMessage(playerid,COLOR_RED,"You are not around any cash machines.");
    }
    else return SendClientMessage(playerid,COLOR_RED,"You can not use this command!");
}

COMMAND:getbankid(playerid, params[])
{
    new string[256];
    new i;
    i = GetBankID(playerid);
    if(IsPlayerAdmin(playerid))
    {
        if(IsPlayerInRangeOfPoint(playerid, 3.0,BankInfo[i][Bankx],BankInfo[i][Banky],BankInfo[i][Bankz]))
        {
            format(string, sizeof(string), "Bank ID %d",i);
            SendClientMessage(playerid,COLOR_ORANGE,string);
            return 1;
        }
        else return SendClientMessage(playerid,COLOR_RED,"You are not around any cash machines.");
    }
    else return SendClientMessage(playerid,COLOR_RED,"You can not use this command!");
}

COMMAND:withdraw(playerid, params[])
{
    new amount;
    if(IsPlayerInRangeOfPoint(playerid, 3.0,2316.5034,-10.0475,26.7422))
    {
        if(!sscanf(params, "i", amount))
        {
            if(amount > 0 && amount < 100000000)
            {
                if(PlayerInfo[playerid][pBank] >= amount)
                {
                    PlayerInfo[playerid][pBank] = PlayerInfo[playerid][pBank]-amount;
                    GivePlayerMoney(playerid,amount);
                    SaveStats(playerid);
                    return 1;
                }
                else return SendClientMessage(playerid,COLOR_RED,"You don't have this much in your account.");
            }
            else return SendClientMessage(playerid,COLOR_RED,"Invalid amount.");
        }
        else return SendClientMessage(playerid,COLOR_RED,"USAGE: /withdraw [amount]");
    }
    else return SendClientMessage(playerid,COLOR_RED,"Not around the bank.");
}

COMMAND:deposit(playerid, params[])
{
    new amount;
    if(IsPlayerInRangeOfPoint(playerid, 3.0,2316.5034,-10.0475,26.7422))
    {
        if(!sscanf(params, "i", amount))
        {
            if(amount > 0 && amount < 100000000)
            {
                if(PlayerInfo[playerid][pBank] >= amount)
                {
                    PlayerInfo[playerid][pBank] = PlayerInfo[playerid][pBank]+amount;
                    GivePlayerMoney(playerid,-amount);
                    SaveStats(playerid);
                    return 1;
                }
                else return SendClientMessage(playerid,COLOR_RED,"You don't have this much in your wallet.");
            }
            else return SendClientMessage(playerid,COLOR_RED,"Invalid amount.");
        }
        else return SendClientMessage(playerid,COLOR_RED,"USAGE: /deposit [amount]");
    }
    else return SendClientMessage(playerid,COLOR_RED,"Not around the bank.");
}

SaveStats(playerid)
{
    new name[MAX_PLAYER_NAME], file[256];
    GetPlayerName(playerid, name, sizeof(name));
    format(file, sizeof(file), ATM_USER_FILE, name);
    dini_IntSet(file, "Bank", PlayerInfo[playerid][pBank]);
}

LoadStats(playerid)
{
  new name[MAX_PLAYER_NAME], userfile[256];
  GetPlayerName(playerid, name, sizeof(name));
  format(userfile, sizeof(userfile), ATM_USER_FILE, name);
  PlayerInfo[playerid][pBank] = dini_Int(userfile, "Bank");
}
Jueixs Banking Verison 1
Hello, Guy's today, I am releasing a bank and ATM system. This is just a simple and quick filterscript, I made age's ago for my roleplay server, I hope you enjoy.

Set up adding atm's bank's and the script files.
First of, Download the script / compile it. After that go into your scriptfiles folder and make a folder named ATMs and put in that folder an other folder named ATMUsers. From that point, Create a folder again in the script file's folder named, ServerInfo and in that add atminfo (the server info will be used in my up coming house system as well).

Adding ATMs
go in game and type /addatm (amount) near a place you want to add an atm, The atm will appear and you will be able to move it around, From here get it in the right position and click save. After that leave the server and go into script files and there will be a file called, DATM open it up and copy and paste all the info and add it into the filterscript under onfilterscriptinit.

Adding and changing the bank.
Go into the server's code and type //bank enter into the search, it should come up under filterscriptinit. You will get this:

pawn Код:
ServerInfo();
CreatePickup(1318, 1, 1465.2404,-1010.2532,26.8438, -1);
Create3DTextLabel("/enter to enter the bank.", 0x008080FF, 1465.2404,-1010.2532,26.8438, 40.0, 0, 1);
Go into game and find a place you want a bank to be and type /save, From there go into my documents and GTA San andreas user files and sa-mp and there will be a file saying saved positions open it and you will have something like this.

pawn Код:
AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
The coordinate finder for newbies
pawn Код:
CreatePickup(1318, 1, Coordinate X, Coordinate Y,Coordinate Z, -1);
Create3DTextLabel("/enter to enter the bank.", 0x008080FF, Coordinate X, Coordinate Y,Coordinate Z,, 40.0, 0, 1);
AddPlayerClass(0, Coordinate X, Coordinate Y,Coordinate Z, 269.1425, 0, 0, 0, 0, 0, 0);
simply copy the coordinate's and replace it into the following lines above. Then go to command enter, withdraw, deposit and balance and change the isplayerinrangeofpoint coordinates in there. ((Can't be fucked making a tut for this bit)).


Commands
  • /addatm (amount) add's an atm with the amount of money you entered into the game
  • /setatmcash (id) (amount) edit's the atm's cash so player's can use it if it run's out of money
  • /getatmid (id) Get's the id of the closest atm.
  • /atmwithdraw (amount) withdraw's money from the closest atm.
  • /withdraw withdraw's money from the bank.
  • /deposit deposit's money in the bank.
  • /balance get's the balance of your bank account.
Download
pawn Код:
#define FILTERSCRIPT

#include <a_samp>
#include <dini>
#include <dudb>
#include <zcmd>
#include <sscanf2>
#include <foreach>

#define MAX_ATM 100
#define ATM_FILE_NAME       "DATM.txt"
#define MAX_DISTANCE_TO_PROP 1.5
//colours
#define COLOR_YELLOW    0xD8D8D8FF
#define COLOR_FADE1     0xE6E6E6E6
#define COLOR_FADE2     0xC8C8C8C8
#define COLOR_FADE3     0xAAAAAAAA
#define COLOR_FADE4     0x8C8C8C8C
#define COLOR_FADE5     0x6E6E6E6E
#define COLOR_FADE      0xC8C8C8C8
#define COLOR_WHITE     0xFFFFFFAA
#define COLOR_GRAD2     0xBFC0C2FF
#define COLOR_DARKRED   0x8B0000AA
#define COLOR_RED       0xFF0000AA
#define COLOR_LIGHTBLUE 0x33CCFFAA
#define COLOR_GREY      0xAFAFAFAA
#define COLOR_PINK      0xDC00DDAA
#define COLOR_BLUE      0x0259EAAA
#define COLOR_GREEN     0x00A800AA
#define COLOR_ORANGE    0xFF8000AA
#define COLOR_CYAN      0xFF8080AA
#define COLOR_WHITE     0xFFFFFFAA
#define COLOR_DARKBLUE  0x0000A0AA
#define COLOR_BLACK     0x000000AA
#define COLOR_DARKGOLD  0x808000AA
#define COLOR_PURPLE    0xC2A2DAAA
#define COLOR_BROWN     0x804000AA
#define COLOR_BLACK2    0x000000ff
#define ATM_USER_FILE "ATMs/ATMUsers/%s.ini"
//atm system crap
new ATMObject[MAX_ATM];
new Text3D:ATMLabel[MAX_ATM];
new Object[MAX_PLAYERS];
new oModel[MAX_PLAYERS];
new ATMi,ATMm;

enum ATMInfo
{
    Float:ATMx,
    Float:ATMy,
    Float:ATMz,
    ATMInt,
    ATMvw,
    ATMMoney
}
new abInfo[MAX_ATM][ATMInfo];

enum pInfo
{
    pBank
}
new PlayerInfo[MAX_PLAYERS][pInfo];

#if defined FILTERSCRIPT

public OnFilterScriptInit()
{
    print("\n--------------------------------------");
    print(" Blank Filterscript by your name here");
    print("--------------------------------------\n");
    //bank enter
    ServerInfo();
    CreatePickup(1318, 1, 1465.2404,-1010.2532,26.8438, -1);
    Create3DTextLabel("/enter to enter the bank.", 0x008080FF, 1465.2404,-1010.2532,26.8438, 40.0, 0, 1);
    return 1;
}

public OnPlayerConnect(playerid)
{
    new name[MAX_PLAYER_NAME], sfile[256];
    GetPlayerName(playerid, name, sizeof(name));
    format(sfile, sizeof(sfile), ATM_USER_FILE, name);
    dini_IntSet(sfile,"Bank",PlayerInfo[playerid][pBank]);
    if (!dini_Exists(sfile)) {
        dini_Create(sfile);
        dini_IntSet(sfile, "Bank",PlayerInfo[playerid][pBank] = 5000);
        PlayerInfo[playerid][pBank] = 5000;
    }
    if(fexist(sfile)) {
        PlayerInfo[playerid][pBank] = dini_Int(sfile, "Bank");
    }
    return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
    new name[MAX_PLAYER_NAME], sfile[256];
    GetPlayerName(playerid, name, sizeof(name));
    format(sfile, sizeof(sfile), ATM_USER_FILE, name);
    dini_IntSet(sfile,"Bank",PlayerInfo[playerid][pBank]);
    return 1;
}

public OnFilterScriptExit()
{
    return 1;
}

AddATM(ATMid, Float:ATMxx, Float:ATMyy, Float:ATMzz, Float:ATMrxx, Float:ATMryy, Float:ATMrzz, ATMMoneyy, ATMIntt, ATMvww)
{
    new ATM[256];
    format(ATM, sizeof(ATM), "ATMs/ATMid%d",ATMid);
    if(!dini_Exists(ATM))
    {
        dini_Create(ATM);
        abInfo[ATMid][ATMMoney] = ATMMoneyy;
        dini_IntSet(ATM, "Money", ATMMoneyy);
        abInfo[ATMid][ATMInt] = ATMIntt;
        dini_IntSet(ATM, "Interior", ATMIntt);
        dini_IntSet(ATM, "Virtualworld", ATMvww);
        abInfo[ATMid][ATMvw] = ATMvww;
        abInfo[ATMid][ATMx] = ATMxx;
        abInfo[ATMid][ATMy] = ATMyy;
        abInfo[ATMid][ATMz] = ATMzz;
        dini_FloatSet(ATM, "aX", ATMxx);
        dini_FloatSet(ATM, "aY", ATMyy);
        dini_FloatSet(ATM, "aZ", ATMzz);
        dini_FloatSet(ATM, "rX", ATMrxx);
        dini_FloatSet(ATM, "rY", ATMryy);
        dini_FloatSet(ATM, "rZ", ATMrzz);
        print("-");
        print("--------------ATM Created--------------");
    }
    else
    {
        abInfo[ATMid][ATMMoney] = dini_Int(ATM, "Money");
        abInfo[ATMid][ATMInt] = dini_Int(ATM, "Interior");
        abInfo[ATMid][ATMx] = dini_Float(ATM, "aX");
        abInfo[ATMid][ATMy] = dini_Float(ATM, "aY");
        abInfo[ATMid][ATMz] = dini_Float(ATM, "aZ");
        abInfo[ATMid][ATMvw] = dini_Int(ATM, "Virtualworld");
    }
    ATMObject[ATMid] = CreateObject(2942,ATMxx, ATMyy, ATMzz,ATMrxx,ATMryy,ATMrzz,0);//bought
    new string[256];
    format(string, sizeof(string), "ATM type /atmwithdraw and /atmbalance.\nMoney left $%d",abInfo[ATMid][ATMMoney]);
    ATMLabel[ATMid] = Create3DTextLabel(string, 0x008080FF, ATMxx,ATMyy,ATMzz, 10.0, 0, 1);
}

//commands
COMMAND:enter(playerid, params[])
{
    if(IsPlayerInRangeOfPoint(playerid, 3.0,1465.2404,-1010.2532,26.8438))
    {
        SetPlayerPos(playerid, 2315.952880,-1.618174,26.742187);
        SetPlayerInterior(playerid, 0);
        SetPlayerVirtualWorld(playerid, 1);
        SendClientMessage(playerid, COLOR_ORANGE, "Welcome to the bank, Go up to the desk and use /deposit, /withdraw and /balance.");
    }
    return 1;
}

COMMAND:exit(playerid, params[])
{
    if(IsPlayerInRangeOfPoint(playerid, 3.0,2315.952880,-1.618174,26.742187))
    {
        SetPlayerPos(playerid, 1464.6573,-1012.9962,26.8438);
        SetPlayerInterior(playerid, 0);
        SetPlayerVirtualWorld(playerid, 0);
    }
    return 1;
}

COMMAND:balance(playerid, params[])
{
    new i;
    i = GetATMID(playerid);
    if(IsPlayerInRangeOfPoint(playerid, 3.0,2316.5034,-10.0475,26.7422))
    {
        new string[256];
        format(string, sizeof(string), "There is %d in your bank account.", PlayerInfo[playerid][pBank]);
        SendClientMessage(playerid, COLOR_ORANGE, string);
        return 1;
    }
    if(IsPlayerInRangeOfPoint(playerid, 3.0,abInfo[i][ATMx],abInfo[i][ATMy],abInfo[i][ATMz]))
    {
        new string[256];
        format(string, sizeof(string), "There is %d in your bank account.", PlayerInfo[playerid][pBank]);
        SendClientMessage(playerid, COLOR_ORANGE, string);
        return 1;
    }
    else return SendClientMessage(playerid,COLOR_RED,"Not around the bank.");
}

COMMAND:deposit(playerid, params[])
{
    new amount;
    if(IsPlayerInRangeOfPoint(playerid, 3.0,2316.5034,-10.0475,26.7422))
    {
        if(!sscanf(params, "i", amount))
        {
            if(amount > 0 && amount < 100000000)
            {
                if(GetPlayerMoney(playerid) >= amount)
                {
                    PlayerInfo[playerid][pBank] = PlayerInfo[playerid][pBank]+amount;
                    GivePlayerMoney(playerid,-amount);
                    return 1;
                }
                else return SendClientMessage(playerid,COLOR_RED,"You are not carrying this much money.");
            }
            else return SendClientMessage(playerid,COLOR_RED,"Invalid amount.");
        }
        else return SendClientMessage(playerid,COLOR_RED,"USAGE: /deposit [amount]");
    }
    else return SendClientMessage(playerid,COLOR_RED,"Not around the bank.");
}

COMMAND:withdraw(playerid, params[])
{
    new amount;
    if(IsPlayerInRangeOfPoint(playerid, 3.0,2316.5034,-10.0475,26.7422))
    {
        if(!sscanf(params, "i", amount))
        {
            if(amount > 0 && amount < 100000000)
            {
                if(PlayerInfo[playerid][pBank] >= amount)
                {
                    PlayerInfo[playerid][pBank] = PlayerInfo[playerid][pBank]-amount;
                    GivePlayerMoney(playerid,amount);
                    return 1;
                }
                else return SendClientMessage(playerid,COLOR_RED,"You don't have this much in your account.");
            }
            else return SendClientMessage(playerid,COLOR_RED,"Invalid amount.");
        }
        else return SendClientMessage(playerid,COLOR_RED,"USAGE: /withdraw [amount]");
    }
    else return SendClientMessage(playerid,COLOR_RED,"Not around the bank.");
}

COMMAND:addatm(playerid, params[])
{
    new hCost;
    if(IsPlayerAdmin(playerid))
    {
        if(!sscanf(params, "i", hCost))
        {
            new Float:OX, Float:OY, Float:OZ, Float:ORX, Float:ORY, Float:ORZ;
            GetPlayerPos(playerid, OX, OY, OZ);
            oModel[playerid] = 2942;
            ATMm = hCost;
            ORX = 0.0;
            ORY = 0.0;
            ORZ = 0.0;
            Object[playerid] = CreateObject(2942, OX+2, OY, OZ, ORX, ORY, ORZ); //Object will render at its default distance.
            SendClientMessage(playerid, 0xD8D8D8FF, "Object spawned now move it");
            EditObject(playerid, Object[playerid]);
            return 1;
        }
        else return SendClientMessage(playerid, COLOR_RED, "USAGE: /addatm [amount of money]");
    }
    else return SendClientMessage(playerid, COLOR_RED, "You do not have the rights to use this command.");
}

COMMAND:setatmcash(playerid, params[])
{
    new amount;
    new atid;
    new Biz[128];
    new string[256];
    if(IsPlayerAdmin(playerid))
    {
        if(!sscanf(params, "ii", atid, amount))
        {
            format(Biz, sizeof(Biz), "ATMs/ATMid%d",atid);
            abInfo[atid][ATMMoney] = amount;
            dini_IntSet(Biz, "Money", abInfo[atid][ATMMoney]);
            Delete3DTextLabel(ATMLabel[atid]);
            format(string, sizeof(string), "ATM type /atmwithdraw and /atmbalance.\nMoney left $%d",abInfo[atid][ATMMoney]);
            ATMLabel[atid] = Create3DTextLabel(string, 0x008080FF, abInfo[atid][ATMx],abInfo[atid][ATMy],abInfo[atid][ATMz], 10.0, 0, 1);
            return 1;
        }
        else return SendClientMessage(playerid,COLOR_RED,"USAGE: /setatmcash [atmid] [amount]");
    }
    else return SendClientMessage(playerid,COLOR_RED,"You can not use this command!");
}

COMMAND:getatmid(playerid, params[])
{
    new string[256];
    new i;
    i = GetATMID(playerid);
    if(IsPlayerAdmin(playerid))
    {
        if(IsPlayerInRangeOfPoint(playerid, 3.0,abInfo[i][ATMx],abInfo[i][ATMy],abInfo[i][ATMz]))
        {
            format(string, sizeof(string), "ATM ID %d",i);
            SendClientMessage(playerid,COLOR_ORANGE,string);
            return 1;
        }
        else return SendClientMessage(playerid,COLOR_RED,"You are not around any cash machines.");
    }
    else return SendClientMessage(playerid,COLOR_RED,"You can not use this command!");
}

COMMAND:atmwithdraw(playerid, params[])
{
    new amount;
    new Biz[128];
    new string[256];
    new i;
    i = GetATMID(playerid);
    if(!sscanf(params, "i", amount))
    {
        if(IsPlayerInRangeOfPoint(playerid, 3.0,abInfo[i][ATMx],abInfo[i][ATMy],abInfo[i][ATMz]))
        {
            if(amount <= abInfo[i][ATMMoney] && amount > 0)
            {
                if(amount <= PlayerInfo[playerid][pBank] && amount > 0)
                {
                    format(Biz, sizeof(Biz), "ATMs/ATMid%d",i);
                    PlayerInfo[playerid][pBank] = PlayerInfo[playerid][pBank]-amount;
                    GivePlayerMoney(playerid,amount);
                    abInfo[i][ATMMoney] = abInfo[i][ATMMoney]-amount;
                    dini_IntSet(Biz, "Money", abInfo[i][ATMMoney]);
                    Delete3DTextLabel(ATMLabel[i]);
                    format(string, sizeof(string), "ATM type /atmwithdraw and /balance.\nMoney left $%d",abInfo[i][ATMMoney]);
                    ATMLabel[i] = Create3DTextLabel(string, 0x008080FF, abInfo[i][ATMx],abInfo[i][ATMy],abInfo[i][ATMz], 10.0, 0, 1);
                    return 1;
                }
                else return SendClientMessage(playerid,COLOR_RED,"You don't have that much money in your bank account.");
            }
            else return SendClientMessage(playerid,COLOR_RED,"This cash machine doesn't have that much cash in.");
        }
        else return SendClientMessage(playerid,COLOR_RED,"You are not around any cash machines.");
    }
    else return SendClientMessage(playerid,COLOR_RED,"USAGE: /atmwithdraw [amount]");
}

public OnPlayerEditObject(playerid, playerobject, objectid, response, Float:fX, Float:fY, Float:fZ, Float:fRotX, Float:fRotY, Float:fRotZ)
{
    new Float:oldX, Float:oldY, Float:oldZ,
        Float:oldRotX, Float:oldRotY, Float:oldRotZ;
    GetObjectPos(objectid, oldX, oldY, oldZ);
    GetObjectRot(objectid, oldRotX, oldRotY, oldRotZ);
    new Float:OX, Float:OY, Float:OZ, Float:ORX, Float:ORY, Float:ORZ,OVW,OINT;
    if(!playerobject) // If this is a global object, move it for other players
    {
        if(!IsValidObject(objectid)) return;
        MoveObject(objectid, fX, fY, fZ, 10.0, fRotX, fRotY, fRotZ);
    }

    if(response == EDIT_RESPONSE_FINAL)
    {
        if(oModel[playerid] == 2942)
        {
            OVW = GetPlayerVirtualWorld(playerid);
            OINT = GetPlayerInterior(playerid);
            GetObjectPos(objectid, OX, OY, OZ);
            GetObjectRot(objectid, ORX, ORY, ORZ);
            ATMObject[ATMi] = CreateObject(2942,OX, OY, OZ,ORX,ORY,ORZ,0);
            AddATMToFile(ATM_FILE_NAME, Float:OX, Float:OY, Float:OZ, Float:ORX, Float:ORY, Float:ORZ, OINT, ATMm, OVW);
            AddATM(ATMi, OX, OY, OZ, ORX, ORY, ORZ, ATMm, OINT, OVW);
            new string[256];
            format(string, sizeof(string), "ATM type /atmwithdraw and /atmbalance.\nMoney left $%d",abInfo[ATMi][ATMMoney]);
            ATMLabel[ATMi] = Create3DTextLabel(string, 0x008080FF, OX,OY,OZ, 10.0, 0, 1);
            ATMi = ATMi+1;
            new ATM[256];
            format(ATM, sizeof(ATM), "Server/atm/atminfo");
            dini_IntSet(ATM, "ATMs", ATMi);
            DestroyObject(Object[playerid]);
        }
    }

    if(response == EDIT_RESPONSE_CANCEL)
    {
        //The player cancelled, so put the object back to it's old position
        if(!playerobject) //Object is not a playerobject
        {
            SetObjectPos(objectid, oldX, oldY, oldZ);
            SetObjectRot(objectid, oldRotX, oldRotY, oldRotZ);
            DestroyObject(Object[playerid]);
        }
        else
        {
            SetPlayerObjectPos(playerid, objectid, oldX, oldY, oldZ);
            SetPlayerObjectRot(playerid, objectid, oldRotX, oldRotY, oldRotZ);
            DestroyObject(Object[playerid]);
        }
    }
}

stock GetATMID(playerid)
{
    for(new i=0; i<MAX_ATM; i++)
    {
        if(PlayerToPoint(MAX_DISTANCE_TO_PROP, playerid, abInfo[i][ATMx],abInfo[i][ATMy],abInfo[i][ATMz]))
        {
            return i;
        }
    }
    return 1;
}

stock AddATMToFile(DFileName[], Float:AX, Float:AY, Float:AZ, Float:ARX, Float:ARY, Float:ARZ, AINT, AMoney, AVW)
{
    new File:HouseFile, Line[128];
    format(Line, sizeof(Line), "AddATM(%i, %f, %f, %f, %f, %f, %f, %i, %i, %i);\r\n", ATMi, AX, AY, AZ, ARX, ARY, ARZ, AMoney, AINT, AVW);
    HouseFile = fopen(DFileName, io_append);
    fwrite(HouseFile, Line);
    fclose(HouseFile);
    return 1;
}

ServerInfo()
{
    new atm[256];
    format(atm, sizeof(atm), "Server/atm/atminfo");
    if(!dini_Exists(atm))
    {
        dini_Create(atm);
        ATMi = 0;
        dini_IntSet(atm, "ATMs", 0);
    }
    else
    {
        ATMi = dini_Int(atm, "ATMs");
    }
}

stock PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z)
{
    if(IsPlayerConnected(playerid))
    {
        new Float:oldposx, Float:oldposy, Float:oldposz;
        new Float:tempposx, Float:tempposy, Float:tempposz;
        GetPlayerPos(playerid, oldposx, oldposy, oldposz);
        tempposx = (oldposx -x);
        tempposy = (oldposy -y);
        tempposz = (oldposz -z);
        if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi)))
        {
            return 1;
        }
    }
    return 0;
}

#endif

Reply
#2

Nice work dude... Awesome!!
Reply
#3

Nice
Reply
#4

Man Please! , make a simple system bank ! /withdraw /balance /deposit , and saving data. Please for me ! I do not like complicated things PM me
Reply
#5

What is this "Money left" ?

Is this for atm machine current balance or our debit balance?
Reply
#6

nice for roleplay
Reply
#7

Quote:
Originally Posted by [vTc]Patroool
Посмотреть сообщение
What is this "Money left" ?

Is this for atm machine current balance or our debit balance?
Sorry for the late reply, Money left is the amount of money that the ATM Can Store.
Reply
#8

Nice
Reply
#9

Nice,good work.
Reply
#10

Nice, if you also make the ATMs/banks to be robable it will be better especially for roleplay or/and cops and robbers servers!
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)