SA-MP Forums Archive
[FilterScript] Sistema de Casas [Dini2] - 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)
+----- Forum: Lançamentos/Releases (https://sampforum.blast.hk/forumdisplay.php?fid=56)
+----- Thread: [FilterScript] Sistema de Casas [Dini2] (/showthread.php?tid=665177)



Sistema de Casas Dinвmico [dini2] + Rбpido - GuiKommander - 24.03.2019

As Funзхes Que vocк vai usar abaixo:

Code:
/*

Statis -- >

CriarCasa(playerid, Preco); 		-----> Criar Casa
DeletarCasa(casa id); 				-----> Deletar Casa
RefreshCasa(casa id); 				-----> Refrescar Casa
LoadCasas(); 						----> Logar todas casas
SalvarCasa(casa id);				----> Salvar um id de casa
SalvarDadosCasa(playerid);          ----> Salvar o Ultimo Login do Donoo

Extra >>

RetirarMorador(casa id, vaga); 		----> Retirar um morador especifico
RemoverMoradores(casa id); 			----> Remover Todos os Moradores
IsPlayerMorador(playerid);          ----> Verificar se й morador de alguma casa
GetNomeMorador(houseid, vagaid);    ----> Pegar o Nome do Morador de tal casa.

Comandos >>

Para ADmins >>

/criarcasa [preзo da nova casa]
/deletarcasa [casaid]
/refresh [casaid]
/salvarcasa [casaid]
/refreshall
/editarcasa [casaid] [tipo] [valor]

Para Players >>

/comprarcasa
/vendercasa
/trancarcasa
/sacarcofre [valor]
/depositarcofre [valor]
/morador [id do player]
/removermorador [vagaid]
/aceitar
/recusar

*/
PHP Code:
#include <a_samp>
#include <ZCMD>
#include <dini2>
#include <sscanf2>
#include <streamer>
main(){}
new 
gstring[256];
#define     MensagemFormatada(%1,%2,%3,%4) do{format(gstring,sizeof(gstring),%3,%4 );SendClientMessage(%1,%2,gstring );}while(IsPlayerConnected(-1))
#define     MensagemFormatadaAll(%1,%2,%3) do{format(gstring,sizeof(gstring),%2,%3 );SendClientMessageToAll(%1,gstring );}while(IsPlayerConnected(-1))
#define File_Exists                 dini_Exists
#define File_CreateFile             dini_Create
#define File_SetString                dini_Set
#define File_SetInt                 dini_IntSet
#define File_SetFloat                dini_FloatSet
#define File_SetBool                dini_BoolSet
#define File_GetString                dini_Get
#define File_GetInt                    dini_Int
#define File_GetFloat                dini_Float
#define File_GetBool                dini_Bool
#define MAX_DYNAMIC_HOUSES          10 /* Coloque aqui o Mбximo de casas */
#define PICKUP_CASA_COMPRADA        19524
#define PICKUP_CASA_VENDA           1273
#define MAX_VALOR_CASA              500000
#define MAX_VALOR_COFRE             100000
#define MAX_VALOR_SACAR_COFRE       50000
#define MAX_VALOR_DEPOSITO_COFRE    50000
#define COLOR_AMARELO               0xFFFF00FF
#define COLOR_ERRO                  0xFF8080FF
#define COLOR_VERMELHO              0xFF7D7DFF
new PlayerHouse[MAX_PLAYERS]; // Vai ter que criar o salvamento
new EmCasa[MAX_PLAYERS];
enum InfoCasa
{
    
ID_CASA,
    
bool:EXISTE_CASA,
    
DONO,
    
PROPRIETARIO[24],
    
MORADOR_1[24],
    
MORADOR_2[24],
    
MORADOR_3[24],
    
ULTIMA_DATA[15],
    
ULTIMA_HORA[15],
    
Float:CASA_POS[3],
    
Float:CASA_INTERIOR[3],
    
INTERIOR,
    
VALOR_CASA,
    
COFRE,
    
CASA_TRANCADA,
    
CASA_WORLD,
    
SLOTARMA[5],
    
MUNICAOARMA[5],
    
MAP_ICON,
    
Text3D:LABEL[30],
    
PICKUP,
}
new 
HOUSE_INFO[MAX_DYNAMIC_HOUSES][InfoCasa];
public 
OnGameModeInit()
{
    
LoadCasas();
    return 
1;
}
public 
OnPlayerDisconnect(playeridreason)
{
    
SalvarDadosCasa(playerid);
    return 
1;
}
public 
OnPlayerSpawn(playerid)
{
    if(
PlayerHouse[playerid] != 0)
    {
        new 
PlayerHouse[playerid];
        
        
SetPlayerPos(playeridHOUSE_INFO[c][CASA_POS][0], HOUSE_INFO[c][CASA_POS][1], HOUSE_INFO[c][CASA_POS][2]);
        
MensagemFormatada(playeridCOLOR_AMARELO"Sua casa %d foi carregada com sucesso..."c);
        
MensagemFormatada(playerid0x80FF00FF"Te vimos pela ъltima vez na casa em: %s, %s."HOUSE_INFO[c][ULTIMA_HORA], HOUSE_INFO[c][ULTIMA_DATA]);
    }
    static
        
house;
        
    
house IsPlayerMorador(playerid);
    
    if(!
PlayerHouse[playerid] && house != -1)
    {
        
SetPlayerPos(playeridHOUSE_INFO[house][CASA_POS][0], HOUSE_INFO[house][CASA_POS][1], HOUSE_INFO[house][CASA_POS][2]);
        
MensagemFormatada(playeridCOLOR_AMARELO"Vocк й morador da casa %d, casa carregada com sucesso..."house);
    }
    return 
1;
}
IsPlayerMorador(playerid)
{
    for(new 
1!= MAX_DYNAMIC_HOUSES; ++c)
    {
        if(
HOUSE_INFO[c][EXISTE_CASA])
        {
            if(!
strcmp(HOUSE_INFO[c][MORADOR_1], PlayerName(playerid), true) ||
            !
strcmp(HOUSE_INFO[c][MORADOR_2], PlayerName(playerid), true) ||
            !
strcmp(HOUSE_INFO[c][MORADOR_3], PlayerName(playerid), true)) return c;
        }
    }
    return -
1;
}
SalvarDadosCasa(playerid)
{
    if(
PlayerHouse[playerid] != 0)
    {
        new 
PlayerHouse[playerid];
        
        
format(HOUSE_INFO[c][ULTIMA_DATA], 15GetData());
        
format(HOUSE_INFO[c][ULTIMA_HORA], 15GetHora());
        
SalvarCasa(c);
    }
    return 
1;
}
GetNomeMorador(casaidvaga/* CasaID - Casa que vocк quer pegar o Valor || Vaga - Vaga de Morador */
{
    new 
string[24];
    
    if(
HOUSE_INFO[casaid][EXISTE_CASA])
    {
        switch(
vaga)
        {
            case 
1format(stringsizeof(string), HOUSE_INFO[casaid][MORADOR_1]);
            case 
2format(stringsizeof(string), HOUSE_INFO[casaid][MORADOR_2]);
            case 
3format(stringsizeof(string), HOUSE_INFO[casaid][MORADOR_3]);
        }
    }
    return 
string;
}
ColocarMorador(casaidplayervagaid// - casaid-do player que tб oferecendo, player-oque vai ser morador, vagaid vaga na casa.
{
    if(
HOUSE_INFO[casaid][EXISTE_CASA])
    {
        switch(
vagaid)
        {
            case 
1format(HOUSE_INFO[casaid][MORADOR_1], 24PlayerName(player));
            case 
2format(HOUSE_INFO[casaid][MORADOR_2], 24PlayerName(player));
            case 
3format(HOUSE_INFO[casaid][MORADOR_3], 24PlayerName(player));
        }
    }
    return -
1;
}
public 
OnPlayerKeyStateChange(playeridnewkeysoldkeys)
{
    if(
newkeys KEY_SECONDARY_ATTACK)
    {
        for(new 
1!= MAX_DYNAMIC_HOUSES; ++c)
        {
            if(
HOUSE_INFO[c][EXISTE_CASA])
            {
                if(
IsPlayerInRangeOfPoint(playerid3.0HOUSE_INFO[c][CASA_POS][0], HOUSE_INFO[c][CASA_POS][1], HOUSE_INFO[c][CASA_POS][2]))
                {
                    if(
PlayerHouse[playerid] != && HOUSE_INFO[c][CASA_TRANCADA] == 1)
                    {
                        
GameTextForPlayer(playerid"~r~Casa Trancada!"50001);
                    }
                    else
                    {
                        
SetPlayerPos(playeridHOUSE_INFO[c][CASA_INTERIOR][0], HOUSE_INFO[c][CASA_INTERIOR][1], HOUSE_INFO[c][CASA_INTERIOR][2]);
                        
SetPlayerInterior(playeridHOUSE_INFO[c][INTERIOR]);
                        
SetPlayerVirtualWorld(playeridHOUSE_INFO[c][CASA_WORLD]);
                        
EmCasa[playerid] = c;
                        
MensagemFormatada(playerid, -1"Bem vindo a casa id %d."c);
                    }
                }
                else if(
GetPlayerInterior(playerid) != && IsPlayerInRangeOfPoint(playerid3.0HOUSE_INFO[EmCasa[playerid]][CASA_INTERIOR][0], HOUSE_INFO[EmCasa[playerid]][CASA_INTERIOR][1], HOUSE_INFO[EmCasa[playerid]][CASA_INTERIOR][2]))
                {
                      
SetPlayerPos(playeridHOUSE_INFO[EmCasa[playerid]][CASA_POS][0], HOUSE_INFO[EmCasa[playerid]][CASA_POS][1], HOUSE_INFO[EmCasa[playerid]][CASA_POS][2]);
                    
SetPlayerInterior(playerid0);
                    
SetPlayerVirtualWorld(playerid0);
                    
EmCasa[playerid] = 0;
                }
            }
        }
    }
    return 
1;
}
            
CriarCasa(playeridpreco)
{
    for(new 
1!= MAX_DYNAMIC_HOUSES; ++c)
    {
        if(!
HOUSE_INFO[c][EXISTE_CASA])
        {
            new 
Float:xPos[3];
             
GetPlayerPos(playeridxPos[0], xPos[1], xPos[2]);
            new 
file[40];
            
format(file40"/Casas/House%d.ini"c);
            if(!
File_Exists(file))
            {
                
File_CreateFile(file);
                
// ------------ //
                
HOUSE_INFO[c][EXISTE_CASA] = true;
                
HOUSE_INFO[c][ID_CASA] = c;
                
HOUSE_INFO[c][VALOR_CASA] = preco;
                
HOUSE_INFO[c][COFRE] = 0;
                for(new 
0!= 3; ++p) { HOUSE_INFO[c][CASA_POS][p] = xPos[p]; }
                
HOUSE_INFO[c][CASA_WORLD] = c;
                
// ------------ //
                
format(HOUSE_INFO[c][PROPRIETARIO], 24"Ninguem");
                
format(HOUSE_INFO[c][MORADOR_1], 24"Ninguem");
                
format(HOUSE_INFO[c][MORADOR_2], 24"Ninguem");
                
format(HOUSE_INFO[c][MORADOR_3], 24"Ninguem");
                
format(HOUSE_INFO[c][ULTIMA_DATA], 24"00/00/0000");
                
format(HOUSE_INFO[c][ULTIMA_HORA], 24"00:00:00");
                
                
RefreshCasa(c);
                
SalvarCasa(c);
                return 
c;
            }
        }
    }
    return -
1;
}
DeletarCasa(house)
{
    if(
HOUSE_INFO[house][EXISTE_CASA])
    {
        for(new 
i!= MAX_PLAYERS; ++i// Pra quem tiver na casa
        
{
            if(
EmCasa[i] == house && GetPlayerVirtualWorld(i) == house)
            {
                
SetPlayerPos(iHOUSE_INFO[house][CASA_POS][0], HOUSE_INFO[house][CASA_POS][1], HOUSE_INFO[house][CASA_POS][2]);
                
SetPlayerInterior(i0);
                
SetPlayerVirtualWorld(i0);
                
EmCasa[i] = 0;
                
SendClientMessage(i, -1"<!> Essa casa foi deletada, portanto, vocк foi automaticamente expulsa dela.");
            }
        }
        
        
HOUSE_INFO[house][EXISTE_CASA] = false;
        
HOUSE_INFO[house][ID_CASA] = 0;
        
HOUSE_INFO[house][DONO] = 0;
        
        for(new 
p!= 3; ++p)
        {
            
HOUSE_INFO[house][CASA_POS][p] = 0.0;
            
HOUSE_INFO[house][CASA_INTERIOR][p] = 0.0;
        }
        
        new 
file[40];
        
format(file40"/Casas/House%d.ini"house);
        if(
File_Exists(file))
            
dini_Remove(file);
            
        if(
IsValidDynamicMapIcon(HOUSE_INFO[house][MAP_ICON]))
            
DestroyDynamicMapIcon(HOUSE_INFO[house][MAP_ICON]);
            
        if(
IsValidDynamic3DTextLabel(HOUSE_INFO[house][LABEL]))
            
DestroyDynamic3DTextLabel(HOUSE_INFO[house][LABEL]);
            
        if(
IsValidDynamicPickup(HOUSE_INFO[house][PICKUP]))
            
DestroyDynamicPickup(HOUSE_INFO[house][PICKUP]);
            
        return 
house;
    }
    return -
1;
}
RefreshCasa(house)
{
    new 
file[40];
    
format(file40"/Casas/House%d.ini"house);
        
    if(
HOUSE_INFO[house][EXISTE_CASA] && File_Exists(file))
    {
        if(
IsValidDynamicMapIcon(HOUSE_INFO[house][MAP_ICON]))
            
DestroyDynamicMapIcon(HOUSE_INFO[house][MAP_ICON]);
        if(
IsValidDynamic3DTextLabel(HOUSE_INFO[house][LABEL]))
            
DestroyDynamic3DTextLabel(HOUSE_INFO[house][LABEL]);
        if(
IsValidDynamicPickup(HOUSE_INFO[house][PICKUP]))
            
DestroyDynamicPickup(HOUSE_INFO[house][PICKUP]);
            
        new 
FloatHOUSE_INFO[house][CASA_POS][0];
        new 
FloatHOUSE_INFO[house][CASA_POS][1];
        new 
FloatHOUSE_INFO[house][CASA_POS][2];
        
HOUSE_INFO[house][MAP_ICON] = CreateDynamicMapIcon(XYZHOUSE_INFO[house][DONO] == 32 310, -1, -1, -1150.0);
        
        
format(gstringsizeof(gstring), "{C4C4C4}Casa %d, {%s}%s\n{C4C4C4}Preзo: {00FF40}%s."houseHOUSE_INFO[house][DONO] == ? ("FF8080") : ("00FF40"), HOUSE_INFO[house][DONO] == ? ("Possui Proprietбrio") : ("А Venda"), FormatarNumero(HOUSE_INFO[house][VALOR_CASA]));
        
HOUSE_INFO[house][LABEL] = CreateDynamic3DTextLabel(gstring, -1XYZ150.0INVALID_PLAYER_IDINVALID_VEHICLE_ID0);
        
        
HOUSE_INFO[house][PICKUP] = CreateDynamicPickup(HOUSE_INFO[house][DONO] == PICKUP_CASA_COMPRADA PICKUP_CASA_VENDA23XYZ, -1);
        
        return 
house;
    }
    return -
1;
}
LoadCasas()
{
    for(new 
1!= MAX_DYNAMIC_HOUSES; ++c) if(MAX_DYNAMIC_HOUSES)
    {
        new 
file[50];
        
        
format(file50"/Casas/House%d.ini"c);
        
        if(
File_Exists(file))
        {
            
HOUSE_INFO[c][ID_CASA] = File_GetInt(file"ID CASA");
            
HOUSE_INFO[c][EXISTE_CASA] = File_GetBool(file"EXISTE CASA");
            
HOUSE_INFO[c][DONO] = File_GetInt(file"POSSUI PROPRIETБRIO");
            
// ----------------------------- //
            
format(HOUSE_INFO[c][PROPRIETARIO], 24File_GetString(file"PROPRIETБRIO"));
            
format(HOUSE_INFO[c][MORADOR_1], 24File_GetString(file"MORADOR 1"));
            
format(HOUSE_INFO[c][MORADOR_2], 24File_GetString(file"MORADOR 2"));
            
format(HOUSE_INFO[c][MORADOR_3], 24File_GetString(file"MORADOR 3"));
            
format(HOUSE_INFO[c][ULTIMA_DATA], 15File_GetString(file"ULTIMA DATA"));
            
format(HOUSE_INFO[c][ULTIMA_HORA], 15File_GetString(file"ULTIMA HORA"));
            
// ----------------------------- //
            
HOUSE_INFO[c][CASA_POS][0] = File_GetFloat(file"POSIЗГO X");
            
HOUSE_INFO[c][CASA_POS][1] = File_GetFloat(file"POSIЗГO Y");
            
HOUSE_INFO[c][CASA_POS][2] = File_GetFloat(file"POSIЗГO Z");
            
HOUSE_INFO[c][CASA_INTERIOR][0] = File_GetFloat(file"INTERIOR X");
            
HOUSE_INFO[c][CASA_INTERIOR][1] = File_GetFloat(file"INTERIOR Y");
            
HOUSE_INFO[c][CASA_INTERIOR][2] = File_GetFloat(file"INTERIOR Z");
            
HOUSE_INFO[c][INTERIOR] = File_GetInt(file"INTERIOR DA CASA");
            
// ----------------------------- //
            
HOUSE_INFO[c][VALOR_CASA] = File_GetInt(file"VALOR DA CASA");
            
HOUSE_INFO[c][COFRE] = File_GetInt(file"COFRE DA CASA");
            
HOUSE_INFO[c][CASA_TRANCADA] = File_GetInt(file"CASA TRANCADA");
            
HOUSE_INFO[c][CASA_WORLD] = File_GetInt(file"CASA WORLD");
            
// ----------------------------- //
            
            
for(new 0!= 5; ++s)
            {
                new 
SlotArma[50];
                
                
format(SlotArmasizeof(SlotArma), "SLOT ARMA %d"1);
                
HOUSE_INFO[c][SLOTARMA][s] = File_GetInt(fileSlotArma);
                
                new 
MunicaoArma[50];
                
                
format(MunicaoArmasizeof(MunicaoArma), "MUNIЗГO ARMA %d"1);
                
HOUSE_INFO[c][MUNICAOARMA][s] = File_GetInt(fileMunicaoArma);
            }
            new 
FloatHOUSE_INFO[c][CASA_POS][0];
            new 
FloatHOUSE_INFO[c][CASA_POS][1];
            new 
FloatHOUSE_INFO[c][CASA_POS][2];
            
HOUSE_INFO[c][MAP_ICON] = CreateDynamicMapIcon(XYZHOUSE_INFO[c][DONO] == 32 310, -1, -1, -1150.0);
            
format(gstringsizeof(gstring), "{C4C4C4}Casa %d, {%s}%s\n{C4C4C4}Preзo: {00FF40}%s."cHOUSE_INFO[c][DONO] == ? ("FF8080") : ("00FF40"), HOUSE_INFO[c][DONO] == ? ("Possui Proprietбrio") : ("А Venda"), FormatarNumero(HOUSE_INFO[c][VALOR_CASA]));
            
HOUSE_INFO[c][LABEL] = CreateDynamic3DTextLabel(gstring, -1XYZ150.0INVALID_PLAYER_IDINVALID_VEHICLE_ID0);
            
HOUSE_INFO[c][PICKUP] = CreateDynamicPickup(HOUSE_INFO[c][DONO] == PICKUP_CASA_COMPRADA PICKUP_CASA_VENDA23XYZ, -1);
        }
    }
}
SalvarCasa(house)
{
    new 
file[50];
    
format(file50"/Casas/House%d.ini"house);
        
    if(
HOUSE_INFO[house][EXISTE_CASA] && File_Exists(file))
    {
        
File_SetInt(file"ID CASA"house);
        
File_SetBool(file"EXISTE CASA"HOUSE_INFO[house][EXISTE_CASA]);
        
File_SetInt(file"POSSUI PROPRIETБRIO"HOUSE_INFO[house][DONO]);
        
        
// ----------------------------- //
        
        
File_SetString(file"PROPRIETБRIO"HOUSE_INFO[house][PROPRIETARIO]);
        
File_SetString(file"MORADOR 1"HOUSE_INFO[house][MORADOR_1]);
        
File_SetString(file"MORADOR 2"HOUSE_INFO[house][MORADOR_2]);
        
File_SetString(file"MORADOR 3"HOUSE_INFO[house][MORADOR_3]);
        
File_SetString(file"ULTIMA DATA"HOUSE_INFO[house][ULTIMA_DATA]);
        
File_SetString(file"ULTIMA HORA"HOUSE_INFO[house][ULTIMA_HORA]);
        
        
// ----------------------------- //
        
        
File_SetFloat(file"POSIЗГO X"HOUSE_INFO[house][CASA_POS][0]);
        
File_SetFloat(file"POSIЗГO Y"HOUSE_INFO[house][CASA_POS][1]);
        
File_SetFloat(file"POSIЗГO Z"HOUSE_INFO[house][CASA_POS][2]);
        
File_SetFloat(file"INTERIOR X"HOUSE_INFO[house][CASA_INTERIOR][0]);
        
File_SetFloat(file"INTERIOR Y"HOUSE_INFO[house][CASA_INTERIOR][1]);
        
File_SetFloat(file"INTERIOR Z"HOUSE_INFO[house][CASA_INTERIOR][2]);
        
File_SetInt(file"INTERIOR DA CASA"HOUSE_INFO[house][INTERIOR]);
        
// ----------------------------- //
        
File_SetInt(file"VALOR DA CASA"HOUSE_INFO[house][VALOR_CASA]);
        
File_SetInt(file"COFRE DA CASA"HOUSE_INFO[house][COFRE]);
        
File_SetInt(file"CASA TRANCADA"HOUSE_INFO[house][CASA_TRANCADA]);
        
File_SetInt(file"CASA WORLD"HOUSE_INFO[house][CASA_WORLD]);
        
        
// ----------------------------- //
        
        
for(new 0!= 5; ++s)
        {
            new 
SlotArma[50];
            
format(SlotArmasizeof(SlotArma), "SLOT ARMA %d"1);
            
File_SetInt(fileSlotArmaHOUSE_INFO[house][SLOTARMA][s]);
            
// ------------- //
            
new MunicaoArma[50];
            
format(MunicaoArmasizeof(MunicaoArma), "MUNIЗГO ARMA %d"1);
            
File_SetInt(fileMunicaoArmaHOUSE_INFO[house][MUNICAOARMA][s]);
        }
                
        return 
house;
    }
    return -
1;
}
RetirarMorador(housevaga)
{
    new 
file[50];
    
format(file50"/Casas/House%d.ini"house);
    if(
HOUSE_INFO[house][EXISTE_CASA] && File_Exists(file))
    {
        switch(
vaga)
        {
            case 
1format(HOUSE_INFO[house][MORADOR_1], 24"Ninguem");
            case 
2format(HOUSE_INFO[house][MORADOR_2], 24"Ninguem");
            case 
3format(HOUSE_INFO[house][MORADOR_3], 24"Ninguem");
        }
    }
}
RemoverMoradores(house)
{
    new 
file[50];
    
format(file50"/Casas/House%d.ini"house);
    if(
HOUSE_INFO[house][EXISTE_CASA] && File_Exists(file))
    {
        
format(HOUSE_INFO[house][MORADOR_1], 24"Ninguem");
        
format(HOUSE_INFO[house][MORADOR_2], 24"Ninguem");
        
format(HOUSE_INFO[house][MORADOR_3], 24"Ninguem");
    }
    return 
1;
}
CMD:comandos(playerid)
{
    
SendClientMessage(playerid, -1"{00FFFF}Comandos para admins:");
    
SendClientMessage(playerid, -1"{00FFFF}/criarcasa /deletarcasa /refresh /salvarcasa /deletarall /refreshall");
    
SendClientMessage(playerid, -1"{00FFFF}/editarcasa");
    
SendClientMessage(playerid, -1"{FFFF00} /comprarcasa /vendercasa /trancarcasa");
    return 
1;
}
CMD:comprarcasa(playerid)
{
    for(new 
1!= MAX_DYNAMIC_HOUSES; ++c)
    {
        if(
HOUSE_INFO[c][EXISTE_CASA])
        {
            if(
IsPlayerInRangeOfPoint(playerid3.0HOUSE_INFO[c][CASA_POS][0], HOUSE_INFO[c][CASA_POS][1], HOUSE_INFO[c][CASA_POS][2]))
            {
                if(!
strcmp(HOUSE_INFO[c][PROPRIETARIO], PlayerName(playerid), false))
                    return 
SendClientMessage(playeridCOLOR_ERRO"Essa casa jб й sua.");
                    
                if(
HOUSE_INFO[c][DONO] == 1)
                    return 
SendClientMessage(playeridCOLOR_ERRO"Essa casa jб tem um dono.");
                if(
GetPlayerMoney(playerid) < HOUSE_INFO[c][VALOR_CASA])
                    return 
SendClientMessage(playeridCOLOR_ERRO"Vocк nгo tem dinheiro suficiente.");
                    
                if(
PlayerHouse[playerid] != 0)
                    return 
SendClientMessage(playeridCOLOR_ERRO"Vocк jб possui uma casa, venda-a primeiro.");
                
// --------------------------- //
                
                
GivePlayerMoney(playerid, - HOUSE_INFO[c][VALOR_CASA]);
                
                
HOUSE_INFO[c][DONO] = 1;
                
format(HOUSE_INFO[c][PROPRIETARIO], 24PlayerName(playerid));
                
format(HOUSE_INFO[c][ULTIMA_DATA], 15GetData());
                
format(HOUSE_INFO[c][ULTIMA_HORA], 15GetHora());
                
RemoverMoradores(c);
                
                
RefreshCasa(c);
                
SalvarCasa(c);
                
                
// -------------------------- //
                
                
MensagemFormatada(playerid0xFF8040FF"Casa %d adquirida com sucesso por %s."cFormatarNumero(HOUSE_INFO[c][VALOR_CASA]));
                
SetPlayerPos(playeridHOUSE_INFO[c][CASA_INTERIOR][0], HOUSE_INFO[c][CASA_INTERIOR][1], HOUSE_INFO[c][CASA_INTERIOR][2]);
                
SetPlayerInterior(playeridHOUSE_INFO[c][INTERIOR]);
                
SetPlayerVirtualWorld(playeridHOUSE_INFO[c][CASA_WORLD]);
                
                
format(gstringsizeof(gstring), "~r~-~w~%d"HOUSE_INFO[c][VALOR_CASA]);
                
GameTextForPlayer(playeridgstring60001);
                
                
PlayerHouse[playerid] = c;
                
EmCasa[playerid] = c;
            }
        }
    }
    return 
1;
}
CMD:vendercasa(playerid)
{
    for(new 
1!= MAX_DYNAMIC_HOUSES; ++c)
    {
        if(
HOUSE_INFO[c][EXISTE_CASA])
        {
            if(
IsPlayerInRangeOfPoint(playerid3.0HOUSE_INFO[c][CASA_POS][0], HOUSE_INFO[c][CASA_POS][1], HOUSE_INFO[c][CASA_POS][2]))
            {
                if(
strcmp(HOUSE_INFO[c][PROPRIETARIO], PlayerName(playerid), false))
                    return 
SendClientMessage(playeridCOLOR_ERRO"Vocк nгo й dono dessa casa.");
                
// --------------------------- //
                
GivePlayerMoney(playeridHOUSE_INFO[c][VALOR_CASA] / 3);
                
HOUSE_INFO[c][DONO] = 0;
                
                
format(HOUSE_INFO[c][PROPRIETARIO], 24"Ninguem");
                
format(HOUSE_INFO[c][ULTIMA_DATA], 15"00/00/0000");
                
format(HOUSE_INFO[c][ULTIMA_HORA], 15"00:00:00");
                
                
//Opcional
                
if(IsPlayerConnected(GetPlayerID(HOUSE_INFO[c][MORADOR_1])))
                {
                    
MensagemFormatada(GetPlayerID(HOUSE_INFO[c][MORADOR_1]), -1"%s acaba de vender sua casa, e vocк perdeu seus direitos de morador 1."PlayerName(playerid));
                    return 
1;
                }
                else if(
IsPlayerConnected(GetPlayerID(HOUSE_INFO[c][MORADOR_2])))
                {
                    
MensagemFormatada(GetPlayerID(HOUSE_INFO[c][MORADOR_2]), -1"%s acaba de vender sua casa, e vocк perdeu seus direitos de morador 2."PlayerName(playerid));
                    return 
1;
                }
                else if(
IsPlayerConnected(GetPlayerID(HOUSE_INFO[c][MORADOR_3])))
                {
                    
MensagemFormatada(GetPlayerID(HOUSE_INFO[c][MORADOR_3]), -1"%s acaba de vender sua casa, e vocк perdeu seus direitos de morador 3."PlayerName(playerid));
                    return 
1;
                }
                
RemoverMoradores(c);
                
RefreshCasa(c);
                
SalvarCasa(c);
                
                
MensagemFormatada(playerid0xFF8040FF"Casa %d vendida por sucesso por %s."cFormatarNumero(HOUSE_INFO[c][VALOR_CASA] / 3));
                
                
format(gstringsizeof(gstring), "~w~+~g~%d"HOUSE_INFO[c][VALOR_CASA] / 3);
                
GameTextForPlayer(playeridgstring60001);
                
                
PlayerHouse[playerid] = 0;
                
EmCasa[playerid] = 0;
            }
        }
    }
    return 
1;
}
CMD:trancarcasa(playerid)
{
    for(new 
1!= MAX_DYNAMIC_HOUSES; ++c)
    {
         if(
IsPlayerInRangeOfPoint(playerid3.0HOUSE_INFO[c][CASA_POS][0], HOUSE_INFO[c][CASA_POS][1], HOUSE_INFO[c][CASA_POS][2]))
           {
             if(
PlayerHouse[playerid] == c)
               {
                
HOUSE_INFO[c][CASA_TRANCADA] = HOUSE_INFO[c][CASA_TRANCADA] == 1;
                    
                if(
HOUSE_INFO[c][CASA_TRANCADA] == 1GameTextForPlayer(playerid"~r~Casa trancada"50001);
                else 
GameTextForPlayer(playerid"~w~Casa Aberta!"50001);
                    
                
SalvarCasa(c);
            }
        }
    }
    return 
1;
}
CMD:sacarcofre(playeridparams[])
{
    static
        
valor;
        
    if(
sscanf(params"d"valor))
        return 
SendClientMessage(playeridCOLOR_ERRO"Uso: /sacarcofre [valor]");
        
    if(
valor || valor MAX_VALOR_SACAR_COFRE)
        return 
SendClientMessage(playeridCOLOR_ERRO"O Valor tem que ser entre 1 e "#MAX_VALOR_SACAR_COFRE".");
    
if(!EmCasa[playerid])
        return 
SendClientMessage(playeridCOLOR_ERRO"Vocк nгo estб em nenhuma casa.");
        
    new 
EmCasa[playerid];
    
    if(
valor HOUSE_INFO[c][COFRE])
        return 
SendClientMessage(playeridCOLOR_ERRO"Vocк nгo tem toda essa quantia no cofre.");
        
    
GivePlayerMoney(playeridvalor);
    
HOUSE_INFO[c][COFRE] -= valor;
    
    
MensagemFormatada(playeridCOLOR_AMARELO"Vocк sacou a quantia de %s na casa %d."FormatarNumero(valor), c);
    return 
1;
}
CMD:depositarcofre(playeridparams[])
{
    static
        
valor;
    if(
sscanf(params"d"valor))
        return 
SendClientMessage(playeridCOLOR_ERRO"Uso: /depositarcofre [valor]");
    if(
valor || valor MAX_VALOR_SACAR_COFRE)
        return 
SendClientMessage(playeridCOLOR_ERRO"O Valor tem que ser entre 1 e "#MAX_VALOR_DEPOSITO_COFRE".");
    
if(!EmCasa[playerid])
        return 
SendClientMessage(playeridCOLOR_ERRO"Vocк nгo estб em nenhuma casa.");
    new 
EmCasa[playerid];
    if(
valor GetPlayerMoney(playerid))
        return 
SendClientMessage(playeridCOLOR_ERRO"Vocк nгo tem toda essa quantia em suas mгos.");
    
GivePlayerMoney(playerid, - valor);
    
HOUSE_INFO[c][COFRE] += valor;
    
MensagemFormatada(playeridCOLOR_AMARELO"Vocк depositou a quantia de %s na casa %d."FormatarNumero(valor), c);
    return 
1;
}
new 
RecebeuMorador[MAX_PLAYERS]; // Pelo ID da casa
new VagaMorador[MAX_PLAYERS]; // Pela Vaga
new PlayerOffMorador[MAX_PLAYERS]; // Id do Player Que mandou Oferta de Moradia.
CMD:morador(playeridparams[])
{
    static
        
id,
        
type;
        
    if(
sscanf(params"dd"idtype))
        return 
SendClientMessage(playeridCOLOR_ERRO"Uso: /morador [playerid] [1-vaga1, 2-vaga2, 3-vaga3]");
        
    if(!
IsPlayerConnected(id))
        return 
SendClientMessage(playeridCOLOR_ERRO"Esse jogador nгo estб conectado(a).");
    if(!
PlayerHouse[playerid])
        return 
SendClientMessage(playeridCOLOR_ERRO"Vocк nгo tem uma casa.");
        
    if(
PlayerHouse[id] != 0)
        return 
SendClientMessage(playeridCOLOR_ERRO"Esse jogador jб tem uma casa.");
        
    if(
type || type 3)
        return 
SendClientMessage(playeridCOLOR_ERRO"O Tipo de vaga й entre 1 e 3.");
        
    new 
house IsPlayerMorador(id);
    
    if(
house != -1)
        return 
SendClientMessage(playeridCOLOR_ERRO"Esse jogador jб й morador de alguma casa.");
    if(
RecebeuMorador[id] > 0)
        return 
SendClientMessage(playeridCOLOR_ERRO"Esse jogador jб estб recebendo uma oferta de casa.");
    new 
PlayerHouse[playerid];
    
    if(
type == && strcmp(HOUSE_INFO[c][MORADOR_1], "Ninguem"false)) SendClientMessage(playeridCOLOR_ERRO"A Vaga 1 jб tem morador, remova-o primeiro.");
    else if(
type == && strcmp(HOUSE_INFO[c][MORADOR_2], "Ninguem"false)) SendClientMessage(playeridCOLOR_ERRO"A Vaga 2 jб tem morador, remova-o primeiro.");
    else if(
type == && strcmp(HOUSE_INFO[c][MORADOR_3], "Ninguem"false)) SendClientMessage(playeridCOLOR_ERRO"A Vaga 3 jб tem morador, remova-o primeiro.");
    
    if(
GetDistanceBetweenPlayers(playeridid) < 5.0 && IsPlayerInRangeOfPoint(playerid3.0HOUSE_INFO[c][CASA_POS][0], HOUSE_INFO[c][CASA_POS][1], HOUSE_INFO[c][CASA_POS][2]) && IsPlayerInRangeOfPoint(id3.0HOUSE_INFO[c][CASA_POS][0], HOUSE_INFO[c][CASA_POS][1], HOUSE_INFO[c][CASA_POS][2]))
    {
        
RecebeuMorador[id] = c;
        
VagaMorador[id] = type;
        
PlayerOffMorador[id] = playerid;
        
MensagemFormatada(idCOLOR_AMARELO"Digite /aceitar para aceitar para ser morador vaga %d da casa %d."VagaMorador[id], c);
    }
    return 
1;
}
CMD:removermorador(playeridparams[])
{
    static
        
vaga;
        
    if(
sscanf(params"d"vaga))
        return 
SendClientMessage(playeridCOLOR_ERRO"Use: /removermorador [1-vaga1, 2-vaga2, 3-vaga3]");
        
    if(
vaga || vaga 3)
        return 
SendClientMessage(playeridCOLOR_ERRO"O Tipo de vaga й entre 1 e 3.");
        
    new 
PlayerHouse[playerid];
    
    if(
IsPlayerInRangeOfPoint(playerid3.0HOUSE_INFO[c][CASA_POS][0], HOUSE_INFO[c][CASA_POS][1], HOUSE_INFO[c][CASA_POS][2]))
    {
        
MensagemFormatada(playeridCOLOR_VERMELHO"Vocк removeu o Morador(a) %s da Vaga %d."GetNomeMorador(cvaga), vaga);
        
RetirarMorador(cvaga);
    }
    return 
1;
}
CMD:aceitar(playeridparams[])
{
    if(
RecebeuMorador[playerid] == && PlayerOffMorador[playerid] == INVALID_PLAYER_ID)
        return 
SendClientMessage(playeridCOLOR_ERRO"| ERRO | Vocк nгo recebeu oferta de moradia");
        
     
MensagemFormatada(playeridCOLOR_AMARELO"Vocк aceitou a moradia de %s."PlayerName(PlayerOffMorador[playerid]));
      
MensagemFormatada(PlayerOffMorador[playerid], COLOR_AMARELO"O Jogador %s aceitou a oferta de moradia na vaga %d."PlayerName(playerid), VagaMorador[playerid]);
    
ColocarMorador(RecebeuMorador[playerid], playeridVagaMorador[playerid]);
    
     
RecebeuMorador[playerid] = 0;
      
VagaMorador[playerid] = 0;
       
PlayerOffMorador[playerid] = INVALID_PLAYER_ID;
    return 
1;
}
CMD:recusar(playeridparams[])
{
    if(
RecebeuMorador[playerid] == && PlayerOffMorador[playerid] == INVALID_PLAYER_ID)
        return 
SendClientMessage(playeridCOLOR_ERRO"| ERRO | Vocк nгo recebeu oferta de moradia");
    
MensagemFormatada(playeridCOLOR_ERRO"Vocк recusou a moradia de %s."PlayerName(PlayerOffMorador[playerid]));
     
MensagemFormatada(PlayerOffMorador[playerid], COLOR_ERRO"O Jogador %s recusou a oferta de moradia na vaga %d."PlayerName(playerid), VagaMorador[playerid]);
    
RecebeuMorador[playerid] = 0;
     
VagaMorador[playerid] = 0;
      
PlayerOffMorador[playerid] = INVALID_PLAYER_ID;
    return 
1;
}
CMD:criarcasa(playeridparams[])
{
    if(!
IsPlayerAdmin(playerid))
        return 
SendClientMessage(playeridCOLOR_ERRO"Vocк nгo й um admin Rcon.");
    static
        
preco;
    
    if(
sscanf(params"d"preco))
        return 
SendClientMessage(playerid, -1"Uso: /criarcasa [preзo]");
    static
        
id = -1;
    
    
id CriarCasa(playeridpreco);
    
    if(
id == -1)
        return 
SendClientMessage(playerid, -1"O Servidor jб excedeu o mбximo de casas.");
        
    
MensagemFormatada(playerid, -1"Casa ID: %d | Preзo: %d, Criado com sucesso."idpreco);
    return 
1;
}
CMD:deletarcasa(playeridparams[])
{
    if(!
IsPlayerAdmin(playerid))
        return 
SendClientMessage(playeridCOLOR_ERRO"Vocк nгo й um admin Rcon.");
        
    static
        
id;
        
    if(
sscanf(params"d"id))
        return 
SendClientMessage(playerid, -1"Uso: /deletarcasa [houseid]");
    static
        
c;
        
    
DeletarCasa(id);
    
    if(
== -1)
        return 
SendClientMessage(playerid, -1"Essa casa nгo existe no servidor.");
    
    
MensagemFormatada(playerid, -1"Casa ID: %d destruida com sucesso!"id);
    return 
1;
}
CMD:refresh(playeridparams[])
{
    if(!
IsPlayerAdmin(playerid))
        return 
SendClientMessage(playeridCOLOR_ERRO"Vocк nгo й um admin Rcon.");
        
    static
        
id;
        
    if(
sscanf(params"d"id))
        return 
SendClientMessage(playerid, -1"Uso: /refresh [houseid]");
        
    static
        
c;
        
    
RefreshCasa(id);
    
    if(
== -1)
        return 
SendClientMessage(playerid, -1"Essa casa nгo existe no servidor.");
        
    
MensagemFormatada(playerid, -1"Casa ID: %d refrescada com sucesso."id);
    return 
1;
}
CMD:salvarcasa(playeridparams[])
{
    if(!
IsPlayerAdmin(playerid))
        return 
SendClientMessage(playeridCOLOR_ERRO"Vocк nгo й um admin Rcon.");
        
    static
        
id;
        
    if(
sscanf(params"d"id))
        return 
SendClientMessage(playerid, -1"Uso: /salvarcasa [houseid]");
        
    static
        
c;
        
    
SalvarCasa(id);
    
    if(
== -1)
        return 
SendClientMessage(playerid, -1"Essa casa nгo existe no servidor.");
        
    
MensagemFormatada(playerid, -1"Casa ID: %d salva com sucesso."id);
    return 
1;
}
CMD:deletarall(playerid)
{
    if(!
IsPlayerAdmin(playerid))
        return 
SendClientMessage(playeridCOLOR_ERRO"Vocк nгo й um admin Rcon.");
        
    for(new 
1!= MAX_DYNAMIC_HOUSES; ++cDeletarCasa(c);
    
    
SendClientMessage(playerid, -1"Todas as casas foram deletadas.");
    return 
1;
}
CMD:refreshall(playerid)
{
    if(!
IsPlayerAdmin(playerid))
        return 
SendClientMessage(playeridCOLOR_ERRO"Vocк nгo й um admin Rcon.");
        
    for(new 
1!= MAX_DYNAMIC_HOUSES; ++cRefreshCasa(c);
    
SendClientMessage(playerid, -1"Todas as casas foram refrescadas.");
    return 
1;
}
CMD:editarcasa(playeridparams[])
{
    if(!
IsPlayerAdmin(playerid))
        return 
SendClientMessage(playeridCOLOR_ERRO"Vocк nгo й um admin Rcon.");
        
    static
        
houseid,
        
edit[32],
        
string[128];
        
    if(
sscanf(params"ds[32]S()[128]"houseideditstring))
    {
        
SendClientMessage(playerid, -1"/editarcasa [casaid] [edit]");
        
SendClientMessage(playerid, -1"[EDITS]: valor, cofre");
        return 
1;
    }
    
    if(!
HOUSE_INFO[houseid][EXISTE_CASA])
        return 
SendClientMessage(playerid, -1"Essa casa nгo existe no servidor.");
        
    if(!
strcmp(edit"valor"true))
    {
        new
            
novovalor;
        
        if(
sscanf(string"d"novovalor))
            return 
SendClientMessage(playerid, -1"/editarcasa [casaid] [valor] [novo valor]");
            
        if(
novovalor || novovalor MAX_VALOR_CASA)
            return 
SendClientMessage(playerid, -1"O Novo valor tem que ser entre 1 e "#MAX_VALOR_CASA".");
            
        
HOUSE_INFO[houseid][VALOR_CASA] = novovalor;
        
RefreshCasa(houseid);
        
SalvarCasa(houseid);
        
        
MensagemFormatada(playerid, -1"Preзo da Casa: %d mudada com sucesso para %d."houseidnovovalor);
    }
    else if(!
strcmp(edit"cofre"true))
    {
        new
            
quantiacofre;
        if(
sscanf(string"d"quantiacofre))
            return 
SendClientMessage(playerid, -1"/editarcasa [casaid] [cofre] [novo valor cofre]");
        if(
quantiacofre || quantiacofre MAX_VALOR_COFRE)
            return 
SendClientMessage(playerid, -1"O Novo valor tem que ser entre 1 e "#MAX_VALOR_COFRE".");
        
HOUSE_INFO[houseid][COFRE] = quantiacofre;
        
RefreshCasa(houseid);
        
SalvarCasa(houseid);
        
MensagemFormatada(playerid, -1"Cofre da Casa: %d mudada com sucesso para %d."houseidquantiacofre);
    }
    return 
1;
}
CMD:dinheiro(playerid)
{
    
GivePlayerMoney(playerid100000);
    return 
1;
}
stock GetPlayerID(pNick[])
{
    for(new 
i!= MAX_PLAYERS; ++i)
    {
        if(!
strcmp(PlayerName(i), pNickfalse)) return i;
    }
    return -
1;
}
stock GetDistanceBetweenPlayers(playeridgiveplayerid)
{
    new 
Float:distancia;
    new 
Float:x1Float:y1Float:z1;
    new 
Float:x2Float:y2Float:z2;
    
GetPlayerPos(playeridx1y1z1);
    
GetPlayerPos(giveplayeridx2y2z2);
    
distancia floatsqroot(floatpower(floatabs(floatsub(x2,x1)),2)+floatpower(floatabs(floatsub(y2,y1)),2)+floatpower(floatabs(floatsub(z2,z1)),2));
    return 
floatround(distancia);
}
stock PlayerName(playerid)
{
    new 
Name[25];
    
GetPlayerName(playeridName24);
    return 
Name;
}
stock GetData()
{
    new
        
string[15], diamesano;
    
getdate(anomesdia);
    
format(string15"%d/%d/%d"diamesano);
    return 
string;
}
stock GetHora()
{
    new
        
string[15], horaminutosegundo;
    
gettime(horaminutosegundo);
    
format(string15"%d:%d:%d"horaminutosegundo);
    return 
string;
}
stock FormatarNumero(amount)
{
    new
        
rmoney[22] = "$$"ret_valstr[50];
    
format(ret_valstrsizeof(ret_valstr), "%d"amount);
    
strcat(rmoneyret_valstr);
    
strcat(rmoney",00");
    new 
strlen(rmoney) - 3;
    while((
-= 3) > 2)
    {
        
strins(rmoney"."l);
    }
    if(
amount 0)
    {
        
strins(rmoney"-"0);
    }
    return 
rmoney;

Necessбrio ter a pasta ''Casas'' no ScriptFiles.

Code:
Versгo 0.1 - Inicializaзгo do Projeto
Versгo 0.2 - Cуdigo Melhorado em algumas Partes +Algumas funзхes extras
Versгo 0.3 - Bug de quando o player entra na casa maior que ''1'' e quando ele sai da mesma, entra no ID 1. + BUGS CORRIGIDOS.