Buen dia, consulto por este medio una duda y apoyo de ser posible.
El problema es con un filterscript de un banco basico que he incoporado a un proyecto y es que al colocar /depositar [numero negativo ejemplo, -10000] el player adquiere 10000 y en su cuenta bancaria queda como -10000 y esto es un problema grave, intente buscar alguna funcion que bloque el simbolo negativo "-" pero no tuve suerte, espero alguien me pueda brindar apoyo, Gracias .
Код:
#define FILTERSCRIPT
#include <a_samp>
#include <zcmd>
#include <dini>
#include <streamer>
#pragma tabsize 0
new archivo[256];
public OnFilterScriptInit()
{
print("|---------------------------------------|");
print("|---- Sistema de Banco Por Ghost202 ----|");
return 1;
}
public OnFilterScriptExit()
{
return 1;
}
CMD:depositar(playerid, params[])
{
if(IsPlayerInRangeOfPoint(playerid,10,2312.7561,-8.1602,26.7422))
{
new dinero, string[128];
if(sscanf(params, "d", dinero))
return SendClientMessage(playerid, 0xFFFFFFFF, "{2AC424}[BANCO] {FFFFFF}Usa {00D5FF}/depositar [cantidad]");
if(!sscanf(params, "d", dinero))
{
if(GetPlayerMoney(playerid) < dinero)
return SendClientMessage(playerid, 0xFFFFFFFF, "{2AC424}[BANCO] {FFFFFF}No tienes dinero para depositar");
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), "{2AC424}[BANCO] {FFFFFF}Depositaste {2AC424}%d{FFFFFF} Dolares ,Tu saldo actual es {2AC424}%d{FFFFFF} Dolares", dinero, dini_Int(archivo, "Saldo"));
SendClientMessage(playerid, 0xFFFFFFFF, string);
GivePlayerMoney(playerid, -dinero);
}
}
}
else return SendClientMessage(playerid, 0xFFFFFFFF, "{FF0000}[ERROR] {FFFFFF}Debes de estar en un {00D5FF}ATM{FFFFFF} para usar este comando");
return 1;
}
CMD:retirar(playerid, params[])
{
if(IsPlayerInRangeOfPoint(playerid,10,2312.7561,-8.1602,26.7422))
{
new dinero, string[128];
if(sscanf(params, "d", dinero)) return SendClientMessage(playerid, 0xFFFFFFFF, "{2AC424}[BANCO] {FFFFFF}Usa {00D5FF}/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, 0xFFFFFFFF, "{2AC424}[BANCO] {FFFFFF}No tienes esa cantidad depositada 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), "{2AC424}[BANCO] {FFFFFF}Retiraste {2AC424}%d{FFFFFF} Dolares, tu saldo actual es {2AC424}%d{FFFFFF} Dolares", dinero, dini_Int(archivo, "Saldo"));
SendClientMessage(playerid, 0xFFFFFFFF, string);
}
}
else if(!dini_Exists(archivo))
{
SendClientMessage(playerid, 0xFFFFFFFF, "{2AC424}[BANCO] {FFFFFF}No tienes cuenta en el banco");
}
}
}
else return SendClientMessage(playerid, 0xFFFFFFFF, "{FF0000}[ERROR] {FFFFFF}Debes de estar en un {00D5FF}ATM{FFFFFF} para usar este comando");
return 1;
}
CMD:saldo(playerid, params[])
{
if(IsPlayerInRangeOfPoint(playerid,10,2312.7561,-8.1602,26.7422))
{
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), "{2AC424}[BANCO] {FFFFFF}Tu saldo actual es {2AC424}%d{FFFFFF} Dolares", dini_Int(archivo, "Saldo"));
SendClientMessage(playerid, 0xFFFFFFFF, string);
}
else if(!dini_Exists(archivo))
{
SendClientMessage(playerid, 0xFFFFFFFF, "{2AC424}[BANCO] {FFFFFF}No tienes una cuenta en el banco");
}
}
else return SendClientMessage(playerid, 0xFFFFFFFF, "{FF0000}[ERROR] {FFFFFF}Debes de estar en un {00D5FF}ATM{FFFFFF} para usar este comando");
return 1;
}
CMD:banco(playerid, params[])
{
SendClientMessage(playerid, 0xFFFFFFFF, "{00D5FF}[INFO] {FFFFFF}Para usar estos comandos dirigente a un {00D5FF}ATM{FFFFFF y usa");
SendClientMessage(playerid, 0xFFFFFFFF, "/depositar [CANTIDAD] ,/retirar [CANTIDAD] o /saldo [CANTIDAD]");
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];
}
Код:
CMD:depositar(playerid, params[])
{
if(IsPlayerInRangeOfPoint(playerid,10,2312.7561,-8.1602,26.7422))
{
new dinero, string[128];
if(sscanf(params, "d", dinero))
return SendClientMessage(playerid, 0xFFFFFFFF, "{2AC424}[BANCO] {FFFFFF}Usa {00D5FF}/depositar [cantidad]");
if(!sscanf(params, "d", dinero))
{
if(dinero <= 0) return SendClientMessage(playerid, 0xFFFFFFFF, "{2AC424}[BANCO] {FFFFFF}El monto a depositar debe ser mayor a cero");
if(GetPlayerMoney(playerid) < dinero)
return SendClientMessage(playerid, 0xFFFFFFFF, "{2AC424}[BANCO] {FFFFFF}No tienes dinero para depositar");
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), "{2AC424}[BANCO] {FFFFFF}Depositaste {2AC424}%d{FFFFFF} Dolares ,Tu saldo actual es {2AC424}%d{FFFFFF} Dolares", dinero, dini_Int(archivo, "Saldo"));
SendClientMessage(playerid, 0xFFFFFFFF, string);
GivePlayerMoney(playerid, -dinero);
}
}
}
else return SendClientMessage(playerid, 0xFFFFFFFF, "{FF0000}[ERROR] {FFFFFF}Debes de estar en un {00D5FF}ATM{FFFFFF} para usar este comando");
return 1;
}
Eso impedirб que el usuario pueda depositar nъmeros menores o igual a cero. Espero haber solucionado tu problema. ЎSaludos!