SA-MP Forums Archive
[Ajuda] Tenho que usar o CMD duas vezes para carregar - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Português/Portuguese (https://sampforum.blast.hk/forumdisplay.php?fid=34)
+---- Thread: [Ajuda] Tenho que usar o CMD duas vezes para carregar (/showthread.php?tid=648803)



Tenho que usar o CMD duas vezes para carregar - binnyl - 28.01.2018

Eu tenho esse sistema de criar empresa ingame, eu mesmo fiz, com ajuda do @Marllun

Ele funciona, se eu criar a empresa duas vezes, eu dou /makebizz 1 30 Teste1
Nada acontece, mas se eu dou um /makebizz 1 30 Teste2
Ele cria a empresa na posiзгo que eu fiz o Teste1 com o nome Teste1

O que tem de errado?
Код:
CMD:makebizz(playerid, params[]) {
    new bizzid, name[30], type;
    if(sscanf(params,"iis[30]", bizzid, type, name)) return SendClientMessage(playerid, -1, "Use: /makebizz [id] [type] [name]");
    if(bizzid < 1 && bizzid > MAX_BIZZ) return SendClientMessage(playerid, -1, "Choose a number between 1-MAX_BIZZ");
    if(strlen(name) > 30) return SendClientMessage(playerid, -1, "The name can not have more then 30 caracters");
    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    BizzInfo[bizzid][bizzX] = x;
    BizzInfo[bizzid][bizzY] = y;
    BizzInfo[bizzid][bizzZ] = z;
    BizzInfo[bizzid][bizzName] = name;
    BizzInfo[bizzid][bizzType] = type;
    BizzInfo[bizzid][bizzID] = bizzid;
    new query[1030];
    mysql_format(ConnectMYSQL, query, sizeof(query), "UPDATE `business` SET `bizzType` = '%d', `bizzX` = '%f', `bizzY` = '%f', `bizzZ` = '%f', `bizzName` = '%s', `bizzOWNER` = '%d' WHERE `bizzID` = '%i'",
        BizzInfo[bizzid][bizzType],
        BizzInfo[bizzid][bizzX],
        BizzInfo[bizzid][bizzY],
        BizzInfo[bizzid][bizzZ],
        BizzInfo[bizzid][bizzName],
        BizzInfo[bizzid][bizzOWNER],
    bizzid);
    mysql_pquery(ConnectMYSQL, query);
    mysql_format(ConnectMYSQL, query, sizeof(query), "SELECT * FROM business WHERE bizzID = %d LIMIT 1", bizzid); 
    mysql_tquery(ConnectMYSQL, query, "Carregar_Business", "i", bizzid);
    return 1;
}


forward Carregar_Business(bizzid);
public Carregar_Business(bizzid) {
    new string[256], rows, fields;
    cache_get_row_count(rows);
    cache_get_field_count(fields);
    if(rows) {
        // ints
        cache_get_value_int(0, "bizzID", BizzInfo[bizzid][bizzID]); 
        cache_get_value_int(0, "bizzType", BizzInfo[bizzid][bizzType]); 
        cache_get_value_int(0, "bizzOWNER", BizzInfo[bizzid][bizzOWNER]); 
        // floats
        cache_get_value_float(0, "bizzX", BizzInfo[bizzid][bizzX]);
        cache_get_value_float(0, "bizzY", BizzInfo[bizzid][bizzY]);
        cache_get_value_float(0, "bizzZ", BizzInfo[bizzid][bizzZ]);
        // strings
        cache_get_value_name(0, "bizzName", BizzInfo[bizzid][bizzName], 30);
        // pickup
        if(BizzInfo[bizzid][bizzType] != 0) {
            if(IsValidDynamicPickup(PickupBizz[bizzid])) DestroyDynamicPickup(PickupBizz[bizzid]);
            if(IsValidDynamic3DTextLabel(Text3Dbizz[bizzid])) DestroyDynamic3DTextLabel(Text3Dbizz[bizzid]);
            format(string, sizeof(string), "(BID:%i)%s.\nPress 'F' to enter.",  BizzInfo[bizzid][bizzID], BizzInfo[bizzid][bizzName]);
            Text3Dbizz[bizzid] = CreateDynamic3DTextLabel(string, 0xABDEACFF, BizzInfo[bizzid][bizzX], BizzInfo[bizzid][bizzY], BizzInfo[bizzid][bizzZ], 10.0);
            PickupBizz[bizzid] = CreateDynamicPickup(1239, 1, BizzInfo[bizzid][bizzX], BizzInfo[bizzid][bizzY], BizzInfo[bizzid][bizzZ], -1);
            return 1;
        }
    }
    return 1;
}



Re: Tenho que usar o CMD duas vezes para carregar - willttoonn - 29.01.2018

Amigгo, tecnicamente o que vocк estб fazendo й desnecessбrio. Vocк estб atualizando alguns dados da empresa no banco de dados, й desnecessбrio recarrega-la apуs essa atualizaзгo, tendo em vista que estes dados jб foram declarados nas variбveis que armazenam ela in-game.

Agora se vocк usa o /makebiz para criar uma empresa, a funзгo toda estб errada comeзando pelo fato de nгo existir um INSERT no MYSQL, apenas um UPDATE.

O ideal pra criar algo no MYSQL й fazer assim:

- Crie um comando que adicione tudo nas variбveis.
- Insira uma query de insert e coloque ela pra ir para uma public criada por vocк, para que seja armazenado o cache_insert_id() dentro de uma variбvel, no seu caso o bizzID.
- Com o cache_insert_id() no bizzID, crie uma function chamada Biz_Update ou Biz_Save e chame-a dentro da public que vocк criou e coloque os dados da empresa para serem enviados pro banco de dados usando o UPDATE e depois serem atualizadas no banco de dados.
- Nгo faзa nada de carregamento apуs isso, deixe o carregamento de dados acontecer dentro do GamemodeInit() do seu cуdigo.