Portal SAMP
[Ajuda] error ao compilar o casas.pwn - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Área de suporte (https://portalsamp.com/forumdisplay.php?fid=6)
+--- Tópico: [Ajuda] error ao compilar o casas.pwn (/showthread.php?tid=5079)



error ao compilar o casas.pwn - PedroDiasSs - 17/08/2025

erros 

C:\Users\DiasSs\Desktop\Gamemode Silva Scripter\filterscripts\casas.pwn(175) : warning 202: number of arguments does not match definition
C:\Users\DiasSs\Desktop\Gamemode Silva Scripter\filterscripts\casas.pwn(175) : warning 202: number of arguments does not match definition
C:\Users\DiasSs\Desktop\Gamemode Silva Scripter\filterscripts\casas.pwn(191) : warning 202: number of arguments does not match definition
C:\Users\DiasSs\Desktop\Gamemode Silva Scripter\filterscripts\casas.pwn(191) : warning 202: number of arguments does not match definition
C:\Users\DiasSs\Desktop\Gamemode Silva Scripter\filterscripts\casas.pwn(191) : error 035: argument type mismatch (argument 2)
Pawn compiler 3.2.3664 Copyright © 1997-2006, ITB CompuPhase


1 Error.


codigo casas.pwn abaixo.
OBS : la embaixo tem um rostinhos assim ( Confused ) mais e pq esta escrito CMD: set



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

#define MAX_CASAS 200
#define PATH_CASAS "Casas/%d.ini"

// =================== ENUM ===================
enum eCasa {
    Float:cx,
    Float:cy,
    Float:cz,
    preco,
    interior,
    dono[24],
    Text3D:label,
    pickup
}
new CasaInfo[MAX_CASAS][eCasa];

// =================== DINHEIRO DOS JOGADORES ===================
new PlayerMoney[MAX_PLAYERS];

// =================== FUNÇÕES ===================
stock CasaFile(id) {
    new path[64];
    format(path, sizeof(path), PATH_CASAS, id);
    return path;
}

stock AtualizarCasa(id) {
    if(CasaInfo[id][label] != Text3D:INVALID_3DTEXT_ID) {
        Delete3DTextLabel(CasaInfo[id][label]);
    }
    if(CasaInfo[id][pickup] != 0) {
        DestroyPickup(CasaInfo[id][pickup]);
    }

    new str[128];
    if(!strcmp(CasaInfo[id][dono], "Nenhum", true)) {
        format(str, sizeof(str), "{FFFFFF}Propriedade a Venda\n{33CCFF}ID: {FFFFFF}%d\n{33CCFF}Valor: {33FF33}$%d\n{FFFF00}Use /comprarcasa %d", id, CasaInfo[id][preco], id);
        CasaInfo[id][label] = Create3DTextLabel(str, 0xFFFFFFFF, CasaInfo[id][cx], CasaInfo[id][cy], CasaInfo[id][cz], 20.0, 0);
        CasaInfo[id][pickup] = CreatePickup(1273, 1, CasaInfo[id][cx], CasaInfo[id][cy], CasaInfo[id][cz], 0);
    } else {
        format(str, sizeof(str), "{33CCFF}Propriedade de:\n{FFFFFF}%s\n{FFFF00}Use /entrar %d", CasaInfo[id][dono], id);
        CasaInfo[id][label] = Create3DTextLabel(str, 0xFFFFFFFF, CasaInfo[id][cx], CasaInfo[id][cy], CasaInfo[id][cz], 20.0, 0);
        CasaInfo[id][pickup] = CreatePickup(19522, 1, CasaInfo[id][cx], CasaInfo[id][cy], CasaInfo[id][cz], 0);
    }
}

stock SalvarCasa(id) {
    new file[64];
    format(file, sizeof(file), PATH_CASAS, id);
    dini_Create(file);
    dini_FloatSet(file, "X", CasaInfo[id][cx]);
    dini_FloatSet(file, "Y", CasaInfo[id][cy]);
    dini_FloatSet(file, "Z", CasaInfo[id][cz]);
    dini_IntSet(file, "Preco", CasaInfo[id][preco]);
    dini_IntSet(file, "Interior", CasaInfo[id][interior]);
    dini_Set(file, "Dono", CasaInfo[id][dono]);
}

stock CarregarCasas() {
    for(new i=0;i<MAX_CASAS;i++) {
        new file[64];
        format(file, sizeof(file), PATH_CASAS, i);
        if(fexist(file)) {
            CasaInfo[i][cx] = dini_Float(file, "X");
            CasaInfo[i][cy] = dini_Float(file, "Y");
            CasaInfo[i][cz] = dini_Float(file, "Z");
            CasaInfo[i][preco] = dini_Int(file, "Preco");
            CasaInfo[i][interior] = dini_Int(file, "Interior");
            format(CasaInfo[i][dono], 24, "%s", dini_Get(file, "Dono"));
            AtualizarCasa(i);
        } else {
            format(CasaInfo[i][dono], 24, "Nenhum");
            CasaInfo[i][label] = Text3D:INVALID_3DTEXT_ID;
            CasaInfo[i][pickup] = 0;
        }
    }
}

// =================== CALLBACKS ===================
public OnFilterScriptInit() {
    CarregarCasas();
    print("========== Sistema de Casas carregado ==========");
    return 1;
}

public OnFilterScriptExit() {
    for(new i=0;i<MAX_CASAS;i++) {
        if(CasaInfo[i][label] != Text3D:INVALID_3DTEXT_ID) Delete3DTextLabel(CasaInfo[i][label]);
        if(CasaInfo[i][pickup] != 0) DestroyPickup(CasaInfo[i][pickup]);
    }
    return 1;
}

public OnPlayerSpawn(playerid) {
    if(PlayerMoney[playerid] == 0) {
        PlayerMoney[playerid] = 10000;
        GivePlayerMoney(playerid, PlayerMoney[playerid]);
    }
    return 1;
}

// =================== COMANDOS ===================
CMD:criarcasa(playerid, params[])
{
    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, -1, "Apenas admins podem criar casas.");

    new cid, cpreco, cinterior;

    if(sscanf(params, "iii", cid, cpreco, cinterior)) {
        return SendClientMessage(playerid, -1, "Use: /criarcasa [ID] [Preço] [Interior]");
    }

    if(cid < 0 || cid >= MAX_CASAS)
        return SendClientMessage(playerid, -1, "ID da casa inválido.");

    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);

    CasaInfo[cid][cx] = x;
    CasaInfo[cid][cy] = y;
    CasaInfo[cid][cz] = z;
    CasaInfo[cid][preco] = cpreco;
    CasaInfo[cid][interior] = cinterior;
    format(CasaInfo[cid][dono], 24, "Nenhum");
    CasaInfo[cid][label] = Text3D:INVALID_3DTEXT_ID;
    CasaInfo[cid][pickup] = 0;

    SalvarCasa(cid);
    AtualizarCasa(cid);

    SendClientMessage(playerid, -1, "Casa criada com sucesso!");
    return 1;
}

CMD:removercasa(playerid, params[]) {
    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, -1, "Apenas admins podem remover casas.");

    new id;
    if(sscanf(params, "i", id)) return SendClientMessage(playerid, -1, "Use: /removercasa [id]");
    if(id < 0 || id >= MAX_CASAS) return SendClientMessage(playerid, -1, "ID inválido.");

    new file[64];
    format(file, sizeof(file), PATH_CASAS, id);
    if(fexist(file)) fremove(file);

    if(CasaInfo[id][label] != Text3D:INVALID_3DTEXT_ID) Delete3DTextLabel(CasaInfo[id][label]);
    if(CasaInfo[id][pickup] != 0) DestroyPickup(CasaInfo[id][pickup]);

    CasaInfo[id][label] = Text3D:INVALID_3DTEXT_ID;
    CasaInfo[id][pickup] = 0;
    format(CasaInfo[id][dono], 24, "Nenhum");

    SendClientMessage(playerid, -1, "Casa removida.");
    return 1;
}

CMD:comprarcasa(playerid, params[]) {
    new cid;
    if(sscanf(params, "i", cid)) return SendClientMessage(playerid, -1, "Use: /comprarcasa [ID]");
    if(cid < 0 || cid >= MAX_CASAS) return SendClientMessage(playerid, -1, "ID inválido.");

    if(!strcmp(CasaInfo[cid][dono], "Nenhum", true)) {
        if(PlayerMoney[playerid] < CasaInfo[cid][preco]) {
            return SendClientMessage(playerid, -1, "Você não tem dinheiro suficiente para comprar esta casa.");
        }

        PlayerMoney[playerid] -= CasaInfo[cid][preco];
        GivePlayerMoney(playerid, CasaInfo[cid][preco]*-1);

        format(CasaInfo[cid][dono], 24, "%s", GetPlayerName(playerid));
        SalvarCasa(cid);
        AtualizarCasa(cid);

        SendClientMessage(playerid, -1, "Parabéns! Você comprou a casa.");
    } else {
        SendClientMessage(playerid, -1, "Esta casa já tem dono.");
    }
    return 1;
}

CMD:entrar(playerid, params[]) {
    new cid;
    if(sscanf(params, "i", cid)) return SendClientMessage(playerid, -1, "Use: /entrar [ID]");
    if(cid < 0 || cid >= MAX_CASAS) return SendClientMessage(playerid, -1, "ID inválido.");

    if(strcmp(CasaInfo[cid][dono], GetPlayerName(playerid), true) != 0) {
        return SendClientMessage(playerid, -1, "Você não é o dono desta casa.");
    }

    SetPlayerInterior(playerid, CasaInfo[cid][interior]);
    SetPlayerPos(playerid, CasaInfo[cid][cx], CasaInfo[cid][cy], CasaInfo[cid][cz]+1.0);
    SendClientMessage(playerid, -1, "Você entrou na sua casa.");
    return 1;
}

CMDConfusedaircasa(playerid, params[]) {
    SetPlayerInterior(playerid, 0);

    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    SetPlayerPos(playerid, x, y, z + 1.0);

    SendClientMessage(playerid, -1, "Você saiu da sua casa.");
    return 1;
}

CMD:ircasa(playerid, params[]) {
    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, -1, "Apenas administradores podem usar este comando.");

    new id;
    if(sscanf(params, "i", id)) return SendClientMessage(playerid, -1, "Use: /ircasa [id]");
    if(id < 0 || id >= MAX_CASAS) return SendClientMessage(playerid, -1, "ID inválido.");

    SetPlayerPos(playerid, CasaInfo[id][cx], CasaInfo[id][cy], CasaInfo[id][cz]+1.0);
    SendClientMessage(playerid, -1, "Você foi até a casa.");
    return 1;
}

CMDConfusedetpreco(playerid, params[]) {
    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, -1, "Apenas admins podem alterar preços.");

    new cid, cpreco;
    if(sscanf(params, "ii", cid, cpreco)) return SendClientMessage(playerid, -1, "Use: /setpreco [id] [preco]");
    if(cid < 0 || cid >= MAX_CASAS) return SendClientMessage(playerid, -1, "ID inválido.");

    CasaInfo[cid][preco] = cpreco;
    SalvarCasa(cid);
    AtualizarCasa(cid);
    SendClientMessage(playerid, -1, "Preço atualizado.");
    return 1;
}

CMDConfusedetinterior(playerid, params[]) {
    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, -1, "Apenas admins podem alterar interiores.");

    new cid, cinterior;
    if(sscanf(params, "ii", cid, cinterior)) return SendClientMessage(playerid, -1, "Use: /setinterior [id] [interior]");
    if(cid < 0 || cid >= MAX_CASAS) return SendClientMessage(playerid, -1, "ID inválido.");

    CasaInfo[cid][interior] = cinterior;
    SalvarCasa(cid);
    SendClientMessage(playerid, -1, "Interior atualizado.");
    return 1;
}


RE: error ao compilar o casas.pwn - Aranha - 18/08/2025

( 21:21)PedroDiasSs Escreveu: erros 

C:\Users\DiasSs\Desktop\Gamemode Silva Scripter\filterscripts\casas.pwn(175) : warning 202: number of arguments does not match definition
C:\Users\DiasSs\Desktop\Gamemode Silva Scripter\filterscripts\casas.pwn(175) : warning 202: number of arguments does not match definition
C:\Users\DiasSs\Desktop\Gamemode Silva Scripter\filterscripts\casas.pwn(191) : warning 202: number of arguments does not match definition
C:\Users\DiasSs\Desktop\Gamemode Silva Scripter\filterscripts\casas.pwn(191) : warning 202: number of arguments does not match definition
C:\Users\DiasSs\Desktop\Gamemode Silva Scripter\filterscripts\casas.pwn(191) : error 035: argument type mismatch (argument 2)
Pawn compiler 3.2.3664 Copyright © 1997-2006, ITB CompuPhase


1 Error.


codigo casas.pwn abaixo.
OBS : la embaixo tem um rostinhos assim ( Confused  ) mais e pq esta escrito CMD: set



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

#define MAX_CASAS 200
#define PATH_CASAS "Casas/%d.ini"

// =================== ENUM ===================
enum eCasa {
    Float:cx,
    Float:cy,
    Float:cz,
    preco,
    interior,
    dono[24],
    Text3D:label,
    pickup
}
new CasaInfo[MAX_CASAS][eCasa];

// =================== DINHEIRO DOS JOGADORES ===================
new PlayerMoney[MAX_PLAYERS];

// =================== FUNÇÕES ===================
stock CasaFile(id) {
    new path[64];
    format(path, sizeof(path), PATH_CASAS, id);
    return path;
}

stock AtualizarCasa(id) {
    if(CasaInfo[id][label] != Text3D:INVALID_3DTEXT_ID) {
        Delete3DTextLabel(CasaInfo[id][label]);
    }
    if(CasaInfo[id][pickup] != 0) {
        DestroyPickup(CasaInfo[id][pickup]);
    }

    new str[128];
    if(!strcmp(CasaInfo[id][dono], "Nenhum", true)) {
        format(str, sizeof(str), "{FFFFFF}Propriedade a Venda\n{33CCFF}ID: {FFFFFF}%d\n{33CCFF}Valor: {33FF33}$%d\n{FFFF00}Use /comprarcasa %d", id, CasaInfo[id][preco], id);
        CasaInfo[id][label] = Create3DTextLabel(str, 0xFFFFFFFF, CasaInfo[id][cx], CasaInfo[id][cy], CasaInfo[id][cz], 20.0, 0);
        CasaInfo[id][pickup] = CreatePickup(1273, 1, CasaInfo[id][cx], CasaInfo[id][cy], CasaInfo[id][cz], 0);
    } else {
        format(str, sizeof(str), "{33CCFF}Propriedade de:\n{FFFFFF}%s\n{FFFF00}Use /entrar %d", CasaInfo[id][dono], id);
        CasaInfo[id][label] = Create3DTextLabel(str, 0xFFFFFFFF, CasaInfo[id][cx], CasaInfo[id][cy], CasaInfo[id][cz], 20.0, 0);
        CasaInfo[id][pickup] = CreatePickup(19522, 1, CasaInfo[id][cx], CasaInfo[id][cy], CasaInfo[id][cz], 0);
    }
}

stock SalvarCasa(id) {
    new file[64];
    format(file, sizeof(file), PATH_CASAS, id);
    dini_Create(file);
    dini_FloatSet(file, "X", CasaInfo[id][cx]);
    dini_FloatSet(file, "Y", CasaInfo[id][cy]);
    dini_FloatSet(file, "Z", CasaInfo[id][cz]);
    dini_IntSet(file, "Preco", CasaInfo[id][preco]);
    dini_IntSet(file, "Interior", CasaInfo[id][interior]);
    dini_Set(file, "Dono", CasaInfo[id][dono]);
}

stock CarregarCasas() {
    for(new i=0;i<MAX_CASAS;i++) {
        new file[64];
        format(file, sizeof(file), PATH_CASAS, i);
        if(fexist(file)) {
            CasaInfo[i][cx] = dini_Float(file, "X");
            CasaInfo[i][cy] = dini_Float(file, "Y");
            CasaInfo[i][cz] = dini_Float(file, "Z");
            CasaInfo[i][preco] = dini_Int(file, "Preco");
            CasaInfo[i][interior] = dini_Int(file, "Interior");
            format(CasaInfo[i][dono], 24, "%s", dini_Get(file, "Dono"));
            AtualizarCasa(i);
        } else {
            format(CasaInfo[i][dono], 24, "Nenhum");
            CasaInfo[i][label] = Text3D:INVALID_3DTEXT_ID;
            CasaInfo[i][pickup] = 0;
        }
    }
}

// =================== CALLBACKS ===================
public OnFilterScriptInit() {
    CarregarCasas();
    print("========== Sistema de Casas carregado ==========");
    return 1;
}

public OnFilterScriptExit() {
    for(new i=0;i<MAX_CASAS;i++) {
        if(CasaInfo[i][label] != Text3D:INVALID_3DTEXT_ID) Delete3DTextLabel(CasaInfo[i][label]);
        if(CasaInfo[i][pickup] != 0) DestroyPickup(CasaInfo[i][pickup]);
    }
    return 1;
}

public OnPlayerSpawn(playerid) {
    if(PlayerMoney[playerid] == 0) {
        PlayerMoney[playerid] = 10000;
        GivePlayerMoney(playerid, PlayerMoney[playerid]);
    }
    return 1;
}

// =================== COMANDOS ===================
CMD:criarcasa(playerid, params[])
{
    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, -1, "Apenas admins podem criar casas.");

    new cid, cpreco, cinterior;

    if(sscanf(params, "iii", cid, cpreco, cinterior)) {
        return SendClientMessage(playerid, -1, "Use: /criarcasa [ID] [Preço] [Interior]");
    }

    if(cid < 0 || cid >= MAX_CASAS)
        return SendClientMessage(playerid, -1, "ID da casa inválido.");

    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);

    CasaInfo[cid][cx] = x;
    CasaInfo[cid][cy] = y;
    CasaInfo[cid][cz] = z;
    CasaInfo[cid][preco] = cpreco;
    CasaInfo[cid][interior] = cinterior;
    format(CasaInfo[cid][dono], 24, "Nenhum");
    CasaInfo[cid][label] = Text3D:INVALID_3DTEXT_ID;
    CasaInfo[cid][pickup] = 0;

    SalvarCasa(cid);
    AtualizarCasa(cid);

    SendClientMessage(playerid, -1, "Casa criada com sucesso!");
    return 1;
}

CMD:removercasa(playerid, params[]) {
    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, -1, "Apenas admins podem remover casas.");

    new id;
    if(sscanf(params, "i", id)) return SendClientMessage(playerid, -1, "Use: /removercasa [id]");
    if(id < 0 || id >= MAX_CASAS) return SendClientMessage(playerid, -1, "ID inválido.");

    new file[64];
    format(file, sizeof(file), PATH_CASAS, id);
    if(fexist(file)) fremove(file);

    if(CasaInfo[id][label] != Text3D:INVALID_3DTEXT_ID) Delete3DTextLabel(CasaInfo[id][label]);
    if(CasaInfo[id][pickup] != 0) DestroyPickup(CasaInfo[id][pickup]);

    CasaInfo[id][label] = Text3D:INVALID_3DTEXT_ID;
    CasaInfo[id][pickup] = 0;
    format(CasaInfo[id][dono], 24, "Nenhum");

    SendClientMessage(playerid, -1, "Casa removida.");
    return 1;
}

CMD:comprarcasa(playerid, params[]) {
    new cid;
    if(sscanf(params, "i", cid)) return SendClientMessage(playerid, -1, "Use: /comprarcasa [ID]");
    if(cid < 0 || cid >= MAX_CASAS) return SendClientMessage(playerid, -1, "ID inválido.");

    if(!strcmp(CasaInfo[cid][dono], "Nenhum", true)) {
        if(PlayerMoney[playerid] < CasaInfo[cid][preco]) {
            return SendClientMessage(playerid, -1, "Você não tem dinheiro suficiente para comprar esta casa.");
        }

        PlayerMoney[playerid] -= CasaInfo[cid][preco];
        GivePlayerMoney(playerid, CasaInfo[cid][preco]*-1);

        format(CasaInfo[cid][dono], 24, "%s", GetPlayerName(playerid));
        SalvarCasa(cid);
        AtualizarCasa(cid);

        SendClientMessage(playerid, -1, "Parabéns! Você comprou a casa.");
    } else {
        SendClientMessage(playerid, -1, "Esta casa já tem dono.");
    }
    return 1;
}

CMD:entrar(playerid, params[]) {
    new cid;
    if(sscanf(params, "i", cid)) return SendClientMessage(playerid, -1, "Use: /entrar [ID]");
    if(cid < 0 || cid >= MAX_CASAS) return SendClientMessage(playerid, -1, "ID inválido.");

    if(strcmp(CasaInfo[cid][dono], GetPlayerName(playerid), true) != 0) {
        return SendClientMessage(playerid, -1, "Você não é o dono desta casa.");
    }

    SetPlayerInterior(playerid, CasaInfo[cid][interior]);
    SetPlayerPos(playerid, CasaInfo[cid][cx], CasaInfo[cid][cy], CasaInfo[cid][cz]+1.0);
    SendClientMessage(playerid, -1, "Você entrou na sua casa.");
    return 1;
}

CMDConfusedaircasa(playerid, params[]) {
    SetPlayerInterior(playerid, 0);

    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    SetPlayerPos(playerid, x, y, z + 1.0);

    SendClientMessage(playerid, -1, "Você saiu da sua casa.");
    return 1;
}

CMD:ircasa(playerid, params[]) {
    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, -1, "Apenas administradores podem usar este comando.");

    new id;
    if(sscanf(params, "i", id)) return SendClientMessage(playerid, -1, "Use: /ircasa [id]");
    if(id < 0 || id >= MAX_CASAS) return SendClientMessage(playerid, -1, "ID inválido.");

    SetPlayerPos(playerid, CasaInfo[id][cx], CasaInfo[id][cy], CasaInfo[id][cz]+1.0);
    SendClientMessage(playerid, -1, "Você foi até a casa.");
    return 1;
}

CMDConfusedetpreco(playerid, params[]) {
    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, -1, "Apenas admins podem alterar preços.");

    new cid, cpreco;
    if(sscanf(params, "ii", cid, cpreco)) return SendClientMessage(playerid, -1, "Use: /setpreco [id] [preco]");
    if(cid < 0 || cid >= MAX_CASAS) return SendClientMessage(playerid, -1, "ID inválido.");

    CasaInfo[cid][preco] = cpreco;
    SalvarCasa(cid);
    AtualizarCasa(cid);
    SendClientMessage(playerid, -1, "Preço atualizado.");
    return 1;
}

CMDConfusedetinterior(playerid, params[]) {
    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, -1, "Apenas admins podem alterar interiores.");

    new cid, cinterior;
    if(sscanf(params, "ii", cid, cinterior)) return SendClientMessage(playerid, -1, "Use: /setinterior [id] [interior]");
    if(cid < 0 || cid >= MAX_CASAS) return SendClientMessage(playerid, -1, "ID inválido.");

    CasaInfo[cid][interior] = cinterior;
    SalvarCasa(cid);
    SendClientMessage(playerid, -1, "Interior atualizado.");
    return 1;
}

Código:
#include <a_samp>
#include <zcmd>
#include <sscanf2>
#include <dini>

#define MAX_CASAS 200
#define PATH_CASAS "Casas/%d.ini"

// =================== ENUM ===================
enum eCasa {
    Float:cx,
    Float:cy,
    Float:cz,
    preco,
    interior,
    dono[24],
    Text3D:label,
    pickup
}
new CasaInfo[MAX_CASAS][eCasa];

// =================== DINHEIRO DOS JOGADORES ===================
new PlayerMoney[MAX_PLAYERS];

// =================== FUNÇÕES ===================
stock AtualizarCasa(id) {
    if(CasaInfo[id][label] != Text3D:INVALID_3DTEXT_ID) {
        Delete3DTextLabel(CasaInfo[id][label]);
    }
    if(CasaInfo[id][pickup] != 0) {
        DestroyPickup(CasaInfo[id][pickup]);
    }

    new str[144];
    if(!strcmp(CasaInfo[id][dono], "Nenhum", true)) {
        format(str, sizeof(str), "{FFFFFF}Propriedade a Venda\n{33CCFF}ID: {FFFFFF}%d\n{33CCFF}Valor: {33FF33}$%d\n{FFFF00}Use /comprarcasa %d", id, CasaInfo[id][preco], id);
        CasaInfo[id][label] = Create3DTextLabel(str, 0xFFFFFFFF, CasaInfo[id][cx], CasaInfo[id][cy], CasaInfo[id][cz], 20.0, 0);
        CasaInfo[id][pickup] = CreatePickup(1273, 1, CasaInfo[id][cx], CasaInfo[id][cy], CasaInfo[id][cz], 0);
    } else {
        format(str, sizeof(str), "{33CCFF}Propriedade de:\n{FFFFFF}%s\n{FFFF00}Use /entrar %d", CasaInfo[id][dono], id);
        CasaInfo[id][label] = Create3DTextLabel(str, 0xFFFFFFFF, CasaInfo[id][cx], CasaInfo[id][cy], CasaInfo[id][cz], 20.0, 0);
        CasaInfo[id][pickup] = CreatePickup(19522, 1, CasaInfo[id][cx], CasaInfo[id][cy], CasaInfo[id][cz], 0);
    }
    return 1;
}

stock SalvarCasa(id) {
    new file[64];
    format(file, sizeof(file), PATH_CASAS, id);
    dini_Create(file);
    dini_FloatSet(file, "X", CasaInfo[id][cx]);
    dini_FloatSet(file, "Y", CasaInfo[id][cy]);
    dini_FloatSet(file, "Z", CasaInfo[id][cz]);
    dini_IntSet(file, "Preco", CasaInfo[id][preco]);
    dini_IntSet(file, "Interior", CasaInfo[id][interior]);
    dini_Set(file, "Dono", CasaInfo[id][dono]);
    return 1;
}

stock CarregarCasas() {
    for(new i=0;i<MAX_CASAS;i++) {
        new file[64];
        format(file, sizeof(file), PATH_CASAS, i);
        if(fexist(file)) {
            CasaInfo[i][cx] = dini_Float(file, "X");
            CasaInfo[i][cy] = dini_Float(file, "Y");
            CasaInfo[i][cz] = dini_Float(file, "Z");
            CasaInfo[i][preco] = dini_Int(file, "Preco");
            CasaInfo[i][interior] = dini_Int(file, "Interior");
            format(CasaInfo[i][dono], 24, "%s", dini_Get(file, "Dono"));
            AtualizarCasa(i);
        } else {
            format(CasaInfo[i][dono], 24, "Nenhum");
            CasaInfo[i][label] = Text3D:INVALID_3DTEXT_ID;
            CasaInfo[i][pickup] = 0;
        }
    }
    return 1;
}

// =================== CALLBACKS ===================
public OnFilterScriptInit() {
    CarregarCasas();
    print("========== Sistema de Casas carregado ==========");
    return 1;
}

public OnFilterScriptExit() {
    for(new i=0;i<MAX_CASAS;i++) {
        if(CasaInfo[i][label] != Text3D:INVALID_3DTEXT_ID) Delete3DTextLabel(CasaInfo[i][label]);
        if(CasaInfo[i][pickup] != 0) DestroyPickup(CasaInfo[i][pickup]);
    }
    return 1;
}

public OnPlayerSpawn(playerid) {
    if(PlayerMoney[playerid] == 0) {
        PlayerMoney[playerid] = 10000;
        GivePlayerMoney(playerid, PlayerMoney[playerid]);
    }
    return 1;
}

// =================== COMANDOS ===================
CMD:criarcasa(playerid, params[])
{
    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, -1, "Apenas admins podem criar casas.");

    new cid, cpreco, cinterior;

    if(sscanf(params, "iii", cid, cpreco, cinterior)) {
        return SendClientMessage(playerid, -1, "Use: /criarcasa [ID] [Preco] [Interior]");
    }

    if(cid < 0 || cid >= MAX_CASAS)
        return SendClientMessage(playerid, -1, "ID da casa invalido.");

    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);

    CasaInfo[cid][cx] = x;
    CasaInfo[cid][cy] = y;
    CasaInfo[cid][cz] = z;
    CasaInfo[cid][preco] = cpreco;
    CasaInfo[cid][interior] = cinterior;
    format(CasaInfo[cid][dono], 24, "Nenhum");
    CasaInfo[cid][label] = Text3D:INVALID_3DTEXT_ID;
    CasaInfo[cid][pickup] = 0;

    SalvarCasa(cid);
    AtualizarCasa(cid);

    SendClientMessage(playerid, -1, "Casa criada com sucesso!");
    return 1;
}

CMD:removercasa(playerid, params[]) {
    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, -1, "Apenas admins podem remover casas.");

    new id;
    if(sscanf(params, "i", id)) return SendClientMessage(playerid, -1, "Use: /removercasa [id]");
    if(id < 0 || id >= MAX_CASAS) return SendClientMessage(playerid, -1, "ID invalido.");

    new file[64];
    format(file, sizeof(file), PATH_CASAS, id);
    if(fexist(file)) fremove(file);

    if(CasaInfo[id][label] != Text3D:INVALID_3DTEXT_ID) Delete3DTextLabel(CasaInfo[id][label]);
    if(CasaInfo[id][pickup] != 0) DestroyPickup(CasaInfo[id][pickup]);

    CasaInfo[id][label] = Text3D:INVALID_3DTEXT_ID;
    CasaInfo[id][pickup] = 0;
    format(CasaInfo[id][dono], 24, "Nenhum");
    CasaInfo[id][preco] = 0;
    CasaInfo[id][interior] = 0;
    CasaInfo[id][cx] = 0.0;
    CasaInfo[id][cy] = 0.0;
    CasaInfo[id][cz] = 0.0;

    SendClientMessage(playerid, -1, "Casa removida.");
    return 1;
}

CMD:comprarcasa(playerid, params[]) {
    new cid;
    if(sscanf(params, "i", cid)) return SendClientMessage(playerid, -1, "Use: /comprarcasa [ID]");
    if(cid < 0 || cid >= MAX_CASAS) return SendClientMessage(playerid, -1, "ID invalido.");

    if(!strcmp(CasaInfo[cid][dono], "Nenhum", true)) {
        if(PlayerMoney[playerid] < CasaInfo[cid][preco]) {
            return SendClientMessage(playerid, -1, "Voce nao tem dinheiro suficiente para comprar esta casa.");
        }

        PlayerMoney[playerid] -= CasaInfo[cid][preco];
        GivePlayerMoney(playerid, CasaInfo[cid][preco]*-1);

        new pname[MAX_PLAYER_NAME];
        GetPlayerName(playerid, pname, sizeof(pname));
        format(CasaInfo[cid][dono], 24, "%s", pname);

        SalvarCasa(cid);
        AtualizarCasa(cid);

        SendClientMessage(playerid, -1, "Parabens! Voce comprou a casa.");
    } else {
        SendClientMessage(playerid, -1, "Esta casa ja tem dono.");
    }
    return 1;
}

CMD:entrar(playerid, params[]) {
    new cid;
    if(sscanf(params, "i", cid)) return SendClientMessage(playerid, -1, "Use: /entrar [ID]");
    if(cid < 0 || cid >= MAX_CASAS) return SendClientMessage(playerid, -1, "ID invalido.");

    new pname[MAX_PLAYER_NAME];
    GetPlayerName(playerid, pname, sizeof(pname));
    if(strcmp(CasaInfo[cid][dono], pname, true) != 0) {
        return SendClientMessage(playerid, -1, "Voce nao e o dono desta casa.");
    }

    SetPlayerInterior(playerid, CasaInfo[cid][interior]);
    SetPlayerPos(playerid, CasaInfo[cid][cx], CasaInfo[cid][cy], CasaInfo[cid][cz]+1.0);
    SendClientMessage(playerid, -1, "Voce entrou na sua casa.");
    return 1;
}

CMD:saircasa(playerid, params[]) {
    SetPlayerInterior(playerid, 0);

    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    SetPlayerPos(playerid, x, y, z + 1.0);

    SendClientMessage(playerid, -1, "Voce saiu da sua casa.");
    return 1;
}

CMD:ircasa(playerid, params[]) {
    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, -1, "Apenas administradores podem usar este comando.");

    new id;
    if(sscanf(params, "i", id)) return SendClientMessage(playerid, -1, "Use: /ircasa [id]");
    if(id < 0 || id >= MAX_CASAS) return SendClientMessage(playerid, -1, "ID invalido.");

    SetPlayerPos(playerid, CasaInfo[id][cx], CasaInfo[id][cy], CasaInfo[id][cz]+1.0);
    SendClientMessage(playerid, -1, "Voce foi ate a casa.");
    return 1;
}

CMD:setpreco(playerid, params[]) {
    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, -1, "Apenas admins podem alterar precos.");

    new cid, cpreco;
    if(sscanf(params, "ii", cid, cpreco)) return SendClientMessage(playerid, -1, "Use: /setpreco [id] [preco]");
    if(cid < 0 || cid >= MAX_CASAS) return SendClientMessage(playerid, -1, "ID invalido.");

    CasaInfo[cid][preco] = cpreco;
    SalvarCasa(cid);
    AtualizarCasa(cid);
    SendClientMessage(playerid, -1, "Preco atualizado.");
    return 1;
}

CMD:setinterior(playerid, params[]) {
    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, -1, "Apenas admins podem alterar interiores.");

    new cid, cinterior;
    if(sscanf(params, "ii", cid, cinterior)) return SendClientMessage(playerid, -1, "Use: /setinterior [id] [interior]");
    if(cid < 0 || cid >= MAX_CASAS) return SendClientMessage(playerid, -1, "ID invalido.");

    CasaInfo[cid][interior] = cinterior;
    SalvarCasa(cid);
    SendClientMessage(playerid, -1, "Interior atualizado.");
    return 1;
}



RE: error ao compilar o casas.pwn - PedroDiasSs - 18/08/2025

vlw muito obgridado