[Ajuda] Problema com um comando de deletar conta/arquivo (Include SII - INI_Remove)
#1

Entгo, fiz um comando pra isso, ele funciona perfeitamente nenhum erro ao compilar nem nada, porйm, ele nгo deleta a conta... Tentei com usando "playerid" (GetINI, etc) com playerid funfa, porйm quero string, isso й : Deletar a conta mesmo que o cara (playerid) nгo esteja online.

Funзхes dentro do comando :
pawn Код:
new conta[256];
        conta = strrest(cmdtext,idx);
        GetPlayerName(playerid,AdmName,MAX_PLAYER_NAME);
        if(!strlen(conta)) { return SendClientMessage(playerid, -1, "{FF0000}| ERRO | USE : /DeletarConta (Nick/Nome da conta)"); }
       
        if(INI_Exist(conta))
        {
        INI_Remove(conta);
        }
Jб tentei de muitas formas (strval(tmp), strrest, etc) porйm nгo funfa, alguйm se habilita а me ajudar ? Grato.
Reply
#2

UP (?) :/
Reply
#3

Tenta dese geito!


pawn Код:
new conta[256];
        conta = strrest(cmdtext,idx);
        GetPlayerName(playerid,AdmName,MAX_PLAYER_NAME);
        if(!strlen(conta)) return SendClientMessage(playerid, -1, "{FF0000}| ERRO | USE : /DeletarConta (Nick/Nome da conta)");
        if(!INI_Exist(conta))return SendClientMessage(playerid, -1,"Inexistente a conta");
        INI_Remove(conta);
Reply
#4

@Don_Speed

Compilou certinho, porйm, sempre que tentava excluir uma conta, sempre aparecia que a conta nгo existia "Inexistente a conta", mesmo que o nick/conta exista no banco de dados...
Reply
#5

Tire o ! desta linha e teste ...
pawn Код:
if(!INI_Exist(conta))return SendClientMessage(playerid, -1,"Inexistente a conta");
pawn Код:
if(INI_Exist(conta))return SendClientMessage(playerid, -1,"Inexistente a conta");
Reply
#6

@Don_Speed,

A mensagem nгo estб mais aparecendo, porйm voltou ao meu problema inicial... Aparece que a conta estб sendo deletada, porйm, ela ainda permanece na pasta...
Reply
#7

Posta a include INI que voce esta usando!
Reply
#8

Quote:
Originally Posted by Don_Speed
Посмотреть сообщение
Tire o ! desta linha e teste ...
pawn Код:
if(!INI_Exist(conta))return SendClientMessage(playerid, -1,"Inexistente a conta");
pawn Код:
if(INI_Exist(conta))return SendClientMessage(playerid, -1,"Inexistente a conta");


O certo й com !
Reply
#9

Que merda estes posts acima. Poste o cmd completo...
Reply
#10

A include й a SII (https://sampforum.blast.hk/showthread.php?tid=58458)

pawn Код:
//======================================================
// Slick's INI Include 2.0.7
//
// © Copyright 2008-2010, [DRuG]Slick
// This file is provided as is (no warranties).
//======================================================


#pragma dynamic 45000 // Change accordingly!!

#if defined MAX_STRING
    #define INI_MAX_VALUE MAX_STRING
#else
    #define INI_MAX_VALUE 128
#endif
#define INI_MAX_KEY 24
#define INI_MAX_LINE (INI_MAX_KEY + INI_MAX_VALUE + 3)
#define INI_MAX_FILENAME 256
#define INI_MAX_LINES 256


enum E_CACHE
{
    E_KEY[INI_MAX_KEY],
    E_VALUE[INI_MAX_VALUE]
}

enum E_FILE
{
    E_FILENAME[INI_MAX_FILENAME],
    bool: E_OPEN
}

static gCache[INI_MAX_LINES][E_CACHE];
static gEmptyCache[E_CACHE];
static gFile[E_FILE];
static gNoFile[E_FILE];


#define INI_Exist fexist


stock INI_Open(const filename[])
{
    if (!filename[0]) return false;
    if (gFile[E_OPEN])
    {
        if (!strcmp(gFile[E_FILENAME], filename, true)) return true;
        //return false;
        INI_Close();
    }
    new File: h;
    h = fopen(filename, io_readwrite);
    if (h)
    {
        INI_strcpy(gFile[E_FILENAME], filename, INI_MAX_FILENAME, INI_MAX_FILENAME);
        new line[INI_MAX_LINE];
        new ln = -1;
        new separator;
        while (((ln + 1) < INI_MAX_LINES) && (fread(h, line)))
        {
            ln ++;
            INI_StripLine(line);
            separator = strfind(line, "=", false);
            if ((line[0] == ';') || (line[0] == '=') || (separator == -1) || (separator > INI_MAX_KEY))
            {
                if (line[0] == ';')
                {
                    INI_strcpy(gCache[ln][E_VALUE], line, INI_MAX_VALUE, INI_MAX_VALUE);
                }
                else
                {
                    INI_strcpy(gCache[ln][E_VALUE][1], line, INI_MAX_VALUE - 1, INI_MAX_VALUE - 1);
                    gCache[ln][E_VALUE][0] = ';';
                }
                continue;
            }
            INI_strcpy(gCache[ln][E_KEY], line, separator, INI_MAX_KEY);
            INI_strcpy(gCache[ln][E_VALUE], line[separator + 1], INI_MAX_VALUE, INI_MAX_VALUE);
            if (!gCache[ln][E_VALUE][0]) gCache[ln][E_VALUE][0] = ' ';
        }
        fclose(h);
        gFile[E_OPEN] = true;
        return 1;
    }
    return 0;
}


stock INI_Save()
{
    if (!gFile[E_OPEN]) return false;
    new File: h;
    h = fopen(gFile[E_FILENAME], io_write);
    if (h)
    {
        new line[INI_MAX_LINE];
        new ln = -1;
        while (((ln + 1) < INI_MAX_LINES) && (gCache[ln + 1][E_VALUE][0]))
        {
            ln ++;
            if (gCache[ln][E_VALUE][0] == ';')
            {
                if (gCache[ln][E_VALUE][1])
                {
                    format(line, sizeof(line), "%s\r\n", gCache[ln][E_VALUE]);
                    fwrite(h, line);
                    continue;
                }
                fwrite(h, "\r\n");
                continue;
            }
            format(line, sizeof(line), "%s=%s\r\n", gCache[ln][E_KEY], gCache[ln][E_VALUE]);
            fwrite(h, line);
        }
        fclose(h);
        return true;
    }
    return false;
}


stock INI_Close()
{
    if (!gFile[E_OPEN]) return false;
    for (new ln; ln < INI_MAX_LINES; ln++) gCache[ln] = gEmptyCache;
    gFile = gNoFile;
    return true;
}


stock INI_ReadString(dest[], const key[], maxlength = sizeof(dest))
{
    if ((!gFile[E_OPEN]) || (!key[0])) return false;
    new ln = -1;
    while (((ln + 1) < INI_MAX_LINES) && (gCache[ln + 1][E_VALUE][0]))
    {
        ln ++;
        if (gCache[ln][E_VALUE][0] == ';') continue;
        if (!strcmp(gCache[ln][E_KEY], key, false))
        {
            INI_strcpy(dest, gCache[ln][E_VALUE], INI_MAX_VALUE, maxlength);
            return true;
        }
    }
    return false;
}


stock INI_ReadInt(const key[])
{
    new dest[12];
    if (INI_ReadString(dest, key)) return strval(dest);
    return false;
}


stock Float: INI_ReadFloat(const key[])
{
    new dest[12];
    if (INI_ReadString(dest, key)) return floatstr(dest);
    return 0.0;
}


stock INI_WriteString(const key[], const value[])
{
    if ((!gFile[E_OPEN]) || (!key[0]) || (key[0] == ';') || (strfind(key, "=", false) != -1)) return false;
    new ln = -1;
    while (((ln + 1) < INI_MAX_LINES) && (gCache[ln + 1][E_VALUE][0]))
    {
        ln ++;
        if (gCache[ln][E_VALUE][0] == ';') continue;
        if (!strcmp(gCache[ln][E_KEY], key, false))
        {
            INI_strcpy(gCache[ln][E_VALUE], value, INI_MAX_VALUE, INI_MAX_VALUE);
            return true;
        }
    }
    ln ++;
    if (ln < INI_MAX_LINES)
    {
        INI_strcpy(gCache[ln][E_KEY], key, INI_MAX_KEY, INI_MAX_KEY);
        INI_strcpy(gCache[ln][E_VALUE], value, INI_MAX_VALUE, INI_MAX_VALUE);
        return true;
    }
    return false;
}


stock INI_WriteInt(const key[], value)
{
    new dest[12];
    format(dest, sizeof(dest), "%i", value);
    return INI_WriteString(key, dest);
}


stock INI_WriteFloat(const key[], Float: value)
{
    new dest[12];
    format(dest, sizeof(dest), "%0.4f", value);
    return INI_WriteString(key, dest);
}


stock INI_RemoveEntry(const key[])
{
    if ((!gFile[E_OPEN]) || (!key[0]) || (strfind(key, "=", false) != -1)) return false;
    new ln = -1;
    while (((ln + 1) < INI_MAX_LINES) && (gCache[ln + 1][E_VALUE][0]))
    {
        ln ++;
        if (gCache[ln][E_VALUE][0] == ';') continue;
        if (!strcmp(gCache[ln][E_KEY], key, false))
        {
            for (; ln < (INI_MAX_LINES - 1); ln ++)
            {
                INI_strcpy(gCache[ln][E_KEY], gCache[ln + 1][E_KEY], INI_MAX_KEY, INI_MAX_KEY);
                INI_strcpy(gCache[ln][E_VALUE], gCache[ln + 1][E_VALUE], INI_MAX_VALUE, INI_MAX_VALUE);
            }
            return true;
        }
    }
    return false;
}


stock INI_Remove(const filename[])
{
    if (!filename[0]) return false;
    if ((gFile[E_OPEN]) && (!strcmp(gFile[E_FILENAME], filename, true))) gFile = gNoFile;
    return fremove(filename);
}


stock INI_strcpy(dest[], const source[], numcells = sizeof(source), maxlength = sizeof(dest))
{
    new i;
    while ((source[i]) && (i < numcells) && (i < maxlength))
    {
        dest[i] = source[i];
        i ++;
    }
    dest[(i == maxlength) ? (i - 1) : (i)] = '\0';
}


stock INI_StripLine(string[])
{
    new l;
    l = strlen(string);
    if (string[l - 2] == '\r') string[l - 2] = '\0';
    if (string[l - 1] == '\n') string[l - 1] = '\0';
}
Funзгo da include de remover arquivo :

pawn Код:
stock INI_Remove(const filename[])
{
    if (!filename[0]) return false;
    if ((gFile[E_OPEN]) && (!strcmp(gFile[E_FILENAME], filename, true))) gFile = gNoFile;
    return fremove(filename);
}
-

Agora que vocк tocou no assunto da Include, receio que pode ser nela mesmo... Serб ?

@EDIT

@OnlyOne, nгo tem nenhuma necessidade, pois creio que й apenas ali, mas como vocк quer...

pawn Код:
if (strcmp(cmd, "/deletarconta",true) == 0 && IsPlayerAdmin(playerid))
    {
        new conta[256];
        conta = strrest(cmdtext,idx);
        GetPlayerName(playerid,AdmName,MAX_PLAYER_NAME);
        if(!strlen(conta)) return SendClientMessage(playerid, -1, "{FF0000}| ERRO | USE : /DeletarConta (Nick/Nome da conta)");
        if(!INI_Exist(conta))return SendClientMessage(playerid, -1,"Inexistente a conta");
        INI_Remove(conta);
       
        format(str, sizeof(str), "{63AFF0}| INFO ADMIN | Conta ' %s ' deletada com sucesso !", conta);
        SendClientMessage(playerid,-1,str);
       
        return 1;
    }
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)