[FilterScript] Sistema de Banco
#1

Hola gente!
Bueno, aca les dejo un sistema de banco que hice hoy cuando me aburria.

Es un codigo corto, asique lo dejo aqui.
Se necesitan Dini y zCMD. (Si no utilizan zCMD, pueden tranquilamente pasarlo a strcmp, dcmd, o su procesador de comandos.
pawn Код:
#define FILTERSCRIPT

#include <a_samp>
#include <zcmd>
#include <dini>

#pragma tabsize 0

new archivo[256];

public OnFilterScriptInit()
{
    print("-----------------------------------------");
    print("----------Bank System by rooT.----------");
    print("-----------------------------------------");
    return 1;
}

public OnFilterScriptExit()
{
    return 1;
}

CMD:depositar(playerid, params[])
{
    new dinero, string[128];
    if(sscanf(params, "d", dinero)) return SendClientMessage(playerid, COLOR_WHITE, "USO: /depositar <cantidad>");
    if(!sscanf(params, "d", dinero))
    {
        if(GetPlayerMoney(playerid) < dinero) return SendClientMessage(playerid, COLOR_LIGHTGREEN, "No tienes ese dinero!");
        if(GetPlayerMoney(playerid) >= dinero)
        {
            new pname[MAX_PLAYER_NAME];
            GetPlayerName(playerid, pname, sizeof(pname));
            format(archivo, sizeof(archivo), "Banco/%s.txt", pname);
           
            if(dini_Exists(archivo))
            {
                dini_IntSet(archivo, "Saldo", dini_Int(archivo, "Saldo") +dinero);
            }
            else if(!dini_Exists(archivo))
            {
                dini_Create(archivo);
                dini_IntSet(archivo, "Saldo", dinero);
            }
            format(string, sizeof(string), "|- Banco -| Depositaste %d, tu saldo actual es %d", dinero, dini_Int(archivo, "Saldo"));
            SendClientMessage(playerid, COLOR_LIGHTGREEN, string);
            GivePlayerMoney(playerid, -dinero);
        }
    }
    return 1;
}

CMD:retirar(playerid, params[])
{
    new dinero, string[128];
    if(sscanf(params, "d", dinero)) return SendClientMessage(playerid, COLOR_WHITE, "USO: /retirar <cantidad>");
    if(!sscanf(params, "d", dinero))
    {
        new pname[MAX_PLAYER_NAME];
        GetPlayerName(playerid, pname, sizeof(pname));
        format(archivo, sizeof(archivo), "Banco/%s.txt", pname);
        if(dini_Exists(archivo))
        {
            if(dini_Int(archivo, "Saldo") < dinero) return SendClientMessage(playerid, COLOR_LIGHTGREEN, "No tienes esa cantidad de dinero en el banco!");
            else if(dini_Int(archivo, "Saldo") >= dinero)
            {
                GivePlayerMoney(playerid, dinero);
                dini_IntSet(archivo, "Saldo", dini_Int(archivo, "Saldo") -dinero);
                format(string, sizeof(string), "|- Banco -| Retiraste %d, tu saldo actual es %d", dinero, dini_Int(archivo, "Saldo"));
                SendClientMessage(playerid, COLOR_LIGHTGREEN, string);
            }
        }
        else if(!dini_Exists(archivo))
        {
            SendClientMessage(playerid, COLOR_LIGHTGREEN, "|- Banco -| No tienes cuenta en el banco!");
        }
    }
    return 1;
}

CMD:saldo(playerid, params[])
{

    new pname[MAX_PLAYER_NAME];
    GetPlayerName(playerid, pname, sizeof(pname));
    format(archivo, sizeof(archivo), "Banco/%s.txt", pname);
    if(dini_Exists(archivo))
    {
        new string[128];
        format(string, sizeof(string), "|- Banco -| Tu saldo actual es %d", dini_Int(archivo, "Saldo"));
        SendClientMessage(playerid, COLOR_LIGHTGREEN, string);
    }
    else if(!dini_Exists(archivo))
    {
        SendClientMessage(playerid, COLOR_LIGHTGREEN, "|- Banco -| No tienes cuenta en el banco!");
    }
    return 1;
}

CMD:banco(playerid, params[])
{
    SendClientMessage(playerid, COLOR_LIGHTGREEN, "Comandos del banco:");
    SendClientMessage(playerid, COLOR_LIGHTGREEN, "/depositar <cantidad>: Deposita X cantidad de dinero.");
    SendClientMessage(playerid, COLOR_LIGHTGREEN, "/retirar <cantidad>: Retira X cantidad de dinero.");
    SendClientMessage(playerid, COLOR_LIGHTGREEN, "/saldo: Para ver tu saldo en el banco");
    return 1;
}

//------------------------------Sscanf-----------------------------------------
stock sscanf(string[], format[], {Float,_}:...)
{
    new
        formatPos = 0,
        stringPos = 0,
        paramPos = 2,
        paramCount = numargs();
    while (paramPos < paramCount && string[stringPos])
    {
        switch (format[formatPos++])
        {
            case '\0':
            {
                return 0;
            }
            case 'i', 'd':
            {
                new
                    neg = 1,
                    num = 0,
                    ch = string[stringPos];
                if (ch == '-')
                {
                    neg = -1;
                    ch = string[++stringPos];
                }
                do
                {
                    stringPos++;
                    if (ch >= '0' && ch <= '9')
                    {
                        num = (num * 10) + (ch - '0');
                    }
                    else
                    {
                        return 1;
                    }
                }
                while ((ch = string[stringPos]) && ch != ' ');
                setarg(paramPos, 0, num * neg);
            }
            case 'h', 'x':
            {
                new
                    ch,
                    num = 0;
                while ((ch = string[stringPos++]))
                {
                    switch (ch)
                    {
                        case 'x', 'X':
                        {
                            num = 0;
                            continue;
                        }
                        case '0' .. '9':
                        {
                            num = (num << 4) | (ch - '0');
                        }
                        case 'a' .. 'f':
                        {
                            num = (num << 4) | (ch - ('a' - 10));
                        }
                        case 'A' .. 'F':
                        {
                            num = (num << 4) | (ch - ('A' - 10));
                        }
                        case ' ':
                        {
                            break;
                        }
                        default:
                        {
                            return 1;
                        }
                    }
                }
                setarg(paramPos, 0, num);
            }
            case 'c':
            {
                setarg(paramPos, 0, string[stringPos++]);
            }
            case 'f':
            {
                new tmp[25];
                strmid(tmp, string, stringPos, stringPos+sizeof(tmp)-2);
                setarg(paramPos, 0, _:floatstr(tmp));
            }
            case 's', 'z':
            {
                new
                    i = 0,
                    ch;
                if (format[formatPos])
                {
                    while ((ch = string[stringPos++]) && ch != ' ')
                    {
                        setarg(paramPos, i++, ch);
                    }
                    if (!i) return 1;
                }
                else
                {
                    while ((ch = string[stringPos++]))
                    {
                        setarg(paramPos, i++, ch);
                    }
                }
                stringPos--;
                setarg(paramPos, i, '\0');
            }
            default:
            {
                continue;
            }
        }
        while (string[stringPos] && string[stringPos] != ' ')
        {
            stringPos++;
        }
        while (string[stringPos] == ' ')
        {
            stringPos++;
        }
        paramPos++;
    }
    while (format[formatPos] == 'z') formatPos++;
    return format[formatPos];
}
//---------------------Fin Sscanff--------------------

Para los que usen el include sscanf2, borren el stock Sscanf.

Para que este FS funcione correctamente, deben crear una carpeta llamda Banco dentro de scriptfiles, de lo contrario no funcionarб.

Espero que les sirva!
Reply
#2

O:!

Genial FS (Y) Otro gran aporte tuyo e.e

Sigue asн :')
Reply
#3

1) La funciуn sscanf es lenta, usб el plugin.
2) Aprendй a usar ZCMD y sscanf.
3) Aprendй sobre sobre restricciones if.
4) dINI apesta.

Buen trabajo.
Reply
#4

Ustedes 2 se traen rencor verdad? xD

Jaja me caen bien n__________n'
Reply
#5

No, para nada, me cae bien, sуlo era una crнtica amistosa xD.
Reply
#6

Pordнas haber usado y_ini, fini, cini, djson etc. Son simples y rбpidos.

Por lo demбs muy bueno
Reply
#7

Buen aporte, dini ya esta casi obsoleto, por mi parte uso djson D:
Reply
#8

їNadie se da cuenta del terrible uso de sscanf que estб haciendo?

Por dios ...
Reply
#9

Quote:
Originally Posted by MrDeath537
Посмотреть сообщение
їNadie se da cuenta del terrible uso de sscanf que estб haciendo?

Por dios ...
yo si xD primero hace q la funcion los procese y si no esta manda el mensaje de q debe poner bn los parametros xD y depues vuelve a usar el sscanf pra volver a procesar los comandos, y tambn sta usando la funcion no el plugin xD
Reply
#10

Quote:
Originally Posted by Trenico
Посмотреть сообщение
yo si xD primero hace q la funcion los procese y si no esta manda el mensaje de q debe poner bn los parametros xD y depues vuelve a usar el sscanf pra volver a procesar los comandos, y tambn sta usando la funcion no el plugin xD
Usa sscanf innecesariamente "params[]" es el texto que estб adelante del comando, por ejemplo:

Код:
/MiComando Text

CMD:micomando(playerid, params[])
{
    // params = Text
    return 1;
}
Entonces йl usa sscanf para pasar el texto a nъmero, y estб totalmente mal, hay una funciуn llamada strval que sirve para convertir un string en nъmero, y floatstr sirve para convertir un string en un nъmero con coma.
A veces tambiйn hacen:

pawn Код:
new
    szTexto[128]
;

if (!sscanf(params, "s[128]", szTexto))
{
}
Y eso me da ganas de tirarme de un edificio D:.

їpara quй copiar el texto a otro texto sin hacer ninguna modificaciуn?
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)