[FilterScript] Sistema de Casas [Dini2]
#1

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(playerid, reason)
{
    
SalvarDadosCasa(playerid);
    return 
1;
}
public 
OnPlayerSpawn(playerid)
{
    if(
PlayerHouse[playerid] != 0)
    {
        new 
c = PlayerHouse[playerid];
        
        
SetPlayerPos(playerid, HOUSE_INFO[c][CASA_POS][0], HOUSE_INFO[c][CASA_POS][1], HOUSE_INFO[c][CASA_POS][2]);
        
MensagemFormatada(playerid, COLOR_AMARELO, "Sua casa %d foi carregada com sucesso...", c);
        
MensagemFormatada(playerid, 0x80FF00FF, "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(playerid, HOUSE_INFO[house][CASA_POS][0], HOUSE_INFO[house][CASA_POS][1], HOUSE_INFO[house][CASA_POS][2]);
        
MensagemFormatada(playerid, COLOR_AMARELO, "Vocк й morador da casa %d, casa carregada com sucesso...", house);
    }
    return 
1;
}
IsPlayerMorador(playerid)
{
    for(new 
c = 1; c != 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 
c = PlayerHouse[playerid];
        
        
format(HOUSE_INFO[c][ULTIMA_DATA], 15, GetData());
        
format(HOUSE_INFO[c][ULTIMA_HORA], 15, GetHora());
        
SalvarCasa(c);
    }
    return 
1;
}
GetNomeMorador(casaid, vaga) /* CasaID - Casa que vocк quer pegar o Valor || Vaga - Vaga de Morador */
{
    new 
string[24];
    
    if(
HOUSE_INFO[casaid][EXISTE_CASA])
    {
        switch(
vaga)
        {
            case 
1: format(string, sizeof(string), HOUSE_INFO[casaid][MORADOR_1]);
            case 
2: format(string, sizeof(string), HOUSE_INFO[casaid][MORADOR_2]);
            case 
3: format(string, sizeof(string), HOUSE_INFO[casaid][MORADOR_3]);
        }
    }
    return 
string;
}
ColocarMorador(casaid, player, vagaid) // - casaid-do player que tб oferecendo, player-oque vai ser morador, vagaid vaga na casa.
{
    if(
HOUSE_INFO[casaid][EXISTE_CASA])
    {
        switch(
vagaid)
        {
            case 
1: format(HOUSE_INFO[casaid][MORADOR_1], 24, PlayerName(player));
            case 
2: format(HOUSE_INFO[casaid][MORADOR_2], 24, PlayerName(player));
            case 
3: format(HOUSE_INFO[casaid][MORADOR_3], 24, PlayerName(player));
        }
    }
    return -
1;
}
public 
OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
    if(
newkeys & KEY_SECONDARY_ATTACK)
    {
        for(new 
c = 1; c != MAX_DYNAMIC_HOUSES; ++c)
        {
            if(
HOUSE_INFO[c][EXISTE_CASA])
            {
                if(
IsPlayerInRangeOfPoint(playerid, 3.0, HOUSE_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] == 1)
                    {
                        
GameTextForPlayer(playerid, "~r~Casa Trancada!", 5000, 1);
                    }
                    else
                    {
                        
SetPlayerPos(playerid, HOUSE_INFO[c][CASA_INTERIOR][0], HOUSE_INFO[c][CASA_INTERIOR][1], HOUSE_INFO[c][CASA_INTERIOR][2]);
                        
SetPlayerInterior(playerid, HOUSE_INFO[c][INTERIOR]);
                        
SetPlayerVirtualWorld(playerid, HOUSE_INFO[c][CASA_WORLD]);
                        
EmCasa[playerid] = c;
                        
MensagemFormatada(playerid, -1, "Bem vindo a casa id %d.", c);
                    }
                }
                else if(
GetPlayerInterior(playerid) != 0 && IsPlayerInRangeOfPoint(playerid, 3.0, HOUSE_INFO[EmCasa[playerid]][CASA_INTERIOR][0], HOUSE_INFO[EmCasa[playerid]][CASA_INTERIOR][1], HOUSE_INFO[EmCasa[playerid]][CASA_INTERIOR][2]))
                {
                      
SetPlayerPos(playerid, HOUSE_INFO[EmCasa[playerid]][CASA_POS][0], HOUSE_INFO[EmCasa[playerid]][CASA_POS][1], HOUSE_INFO[EmCasa[playerid]][CASA_POS][2]);
                    
SetPlayerInterior(playerid, 0);
                    
SetPlayerVirtualWorld(playerid, 0);
                    
EmCasa[playerid] = 0;
                }
            }
        }
    }
    return 
1;
}
            
CriarCasa(playerid, preco)
{
    for(new 
c = 1; c != MAX_DYNAMIC_HOUSES; ++c)
    {
        if(!
HOUSE_INFO[c][EXISTE_CASA])
        {
            new 
Float:xPos[3];
             
GetPlayerPos(playerid, xPos[0], xPos[1], xPos[2]);
            new 
file[40];
            
format(file, 40, "/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 
p = 0; p != 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; i != MAX_PLAYERS; ++i) // Pra quem tiver na casa
        
{
            if(
EmCasa[i] == house && GetPlayerVirtualWorld(i) == house)
            {
                
SetPlayerPos(i, HOUSE_INFO[house][CASA_POS][0], HOUSE_INFO[house][CASA_POS][1], HOUSE_INFO[house][CASA_POS][2]);
                
SetPlayerInterior(i, 0);
                
SetPlayerVirtualWorld(i, 0);
                
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; p != 3; ++p)
        {
            
HOUSE_INFO[house][CASA_POS][p] = 0.0;
            
HOUSE_INFO[house][CASA_INTERIOR][p] = 0.0;
        }
        
        new 
file[40];
        
format(file, 40, "/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(file, 40, "/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 
Float: X = HOUSE_INFO[house][CASA_POS][0];
        new 
Float: Y = HOUSE_INFO[house][CASA_POS][1];
        new 
Float: Z = HOUSE_INFO[house][CASA_POS][2];
        
HOUSE_INFO[house][MAP_ICON] = CreateDynamicMapIcon(X, Y, Z, HOUSE_INFO[house][DONO] == 1 ? 32 : 31, 0, -1, -1, -1, 150.0);
        
        
format(gstring, sizeof(gstring), "{C4C4C4}Casa %d, {%s}%s\n{C4C4C4}Preзo: {00FF40}%s.", house, HOUSE_INFO[house][DONO] == 1 ? ("FF8080") : ("00FF40"), HOUSE_INFO[house][DONO] == 1 ? ("Possui Proprietбrio") : ("А Venda"), FormatarNumero(HOUSE_INFO[house][VALOR_CASA]));
        
HOUSE_INFO[house][LABEL] = CreateDynamic3DTextLabel(gstring, -1, X, Y, Z, 150.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0);
        
        
HOUSE_INFO[house][PICKUP] = CreateDynamicPickup(HOUSE_INFO[house][DONO] == 1 ? PICKUP_CASA_COMPRADA : PICKUP_CASA_VENDA, 23, X, Y, Z, -1);
        
        return 
house;
    }
    return -
1;
}
LoadCasas()
{
    for(new 
c = 1; c != MAX_DYNAMIC_HOUSES; ++c) if(c < MAX_DYNAMIC_HOUSES)
    {
        new 
file[50];
        
        
format(file, 50, "/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], 24, File_GetString(file, "PROPRIETБRIO"));
            
format(HOUSE_INFO[c][MORADOR_1], 24, File_GetString(file, "MORADOR 1"));
            
format(HOUSE_INFO[c][MORADOR_2], 24, File_GetString(file, "MORADOR 2"));
            
format(HOUSE_INFO[c][MORADOR_3], 24, File_GetString(file, "MORADOR 3"));
            
format(HOUSE_INFO[c][ULTIMA_DATA], 15, File_GetString(file, "ULTIMA DATA"));
            
format(HOUSE_INFO[c][ULTIMA_HORA], 15, File_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 s = 0; s != 5; ++s)
            {
                new 
SlotArma[50];
                
                
format(SlotArma, sizeof(SlotArma), "SLOT ARMA %d", s + 1);
                
HOUSE_INFO[c][SLOTARMA][s] = File_GetInt(file, SlotArma);
                
                new 
MunicaoArma[50];
                
                
format(MunicaoArma, sizeof(MunicaoArma), "MUNIЗГO ARMA %d", s + 1);
                
HOUSE_INFO[c][MUNICAOARMA][s] = File_GetInt(file, MunicaoArma);
            }
            new 
Float: X = HOUSE_INFO[c][CASA_POS][0];
            new 
Float: Y = HOUSE_INFO[c][CASA_POS][1];
            new 
Float: Z = HOUSE_INFO[c][CASA_POS][2];
            
HOUSE_INFO[c][MAP_ICON] = CreateDynamicMapIcon(X, Y, Z, HOUSE_INFO[c][DONO] == 1 ? 32 : 31, 0, -1, -1, -1, 150.0);
            
format(gstring, sizeof(gstring), "{C4C4C4}Casa %d, {%s}%s\n{C4C4C4}Preзo: {00FF40}%s.", c, HOUSE_INFO[c][DONO] == 1 ? ("FF8080") : ("00FF40"), HOUSE_INFO[c][DONO] == 1 ? ("Possui Proprietбrio") : ("А Venda"), FormatarNumero(HOUSE_INFO[c][VALOR_CASA]));
            
HOUSE_INFO[c][LABEL] = CreateDynamic3DTextLabel(gstring, -1, X, Y, Z, 150.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0);
            
HOUSE_INFO[c][PICKUP] = CreateDynamicPickup(HOUSE_INFO[c][DONO] == 1 ? PICKUP_CASA_COMPRADA : PICKUP_CASA_VENDA, 23, X, Y, Z, -1);
        }
    }
}
SalvarCasa(house)
{
    new 
file[50];
    
format(file, 50, "/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 s = 0; s != 5; ++s)
        {
            new 
SlotArma[50];
            
format(SlotArma, sizeof(SlotArma), "SLOT ARMA %d", s + 1);
            
File_SetInt(file, SlotArma, HOUSE_INFO[house][SLOTARMA][s]);
            
// ------------- //
            
new MunicaoArma[50];
            
format(MunicaoArma, sizeof(MunicaoArma), "MUNIЗГO ARMA %d", s + 1);
            
File_SetInt(file, MunicaoArma, HOUSE_INFO[house][MUNICAOARMA][s]);
        }
                
        return 
house;
    }
    return -
1;
}
RetirarMorador(house, vaga)
{
    new 
file[50];
    
format(file, 50, "/Casas/House%d.ini", house);
    if(
HOUSE_INFO[house][EXISTE_CASA] && File_Exists(file))
    {
        switch(
vaga)
        {
            case 
1: format(HOUSE_INFO[house][MORADOR_1], 24, "Ninguem");
            case 
2: format(HOUSE_INFO[house][MORADOR_2], 24, "Ninguem");
            case 
3: format(HOUSE_INFO[house][MORADOR_3], 24, "Ninguem");
        }
    }
}
RemoverMoradores(house)
{
    new 
file[50];
    
format(file, 50, "/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 
c = 1; c != MAX_DYNAMIC_HOUSES; ++c)
    {
        if(
HOUSE_INFO[c][EXISTE_CASA])
        {
            if(
IsPlayerInRangeOfPoint(playerid, 3.0, HOUSE_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(playerid, COLOR_ERRO, "Essa casa jб й sua.");
                    
                if(
HOUSE_INFO[c][DONO] == 1)
                    return 
SendClientMessage(playerid, COLOR_ERRO, "Essa casa jб tem um dono.");
                if(
GetPlayerMoney(playerid) < HOUSE_INFO[c][VALOR_CASA])
                    return 
SendClientMessage(playerid, COLOR_ERRO, "Vocк nгo tem dinheiro suficiente.");
                    
                if(
PlayerHouse[playerid] != 0)
                    return 
SendClientMessage(playerid, COLOR_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], 24, PlayerName(playerid));
                
format(HOUSE_INFO[c][ULTIMA_DATA], 15, GetData());
                
format(HOUSE_INFO[c][ULTIMA_HORA], 15, GetHora());
                
RemoverMoradores(c);
                
                
RefreshCasa(c);
                
SalvarCasa(c);
                
                
// -------------------------- //
                
                
MensagemFormatada(playerid, 0xFF8040FF, "Casa %d adquirida com sucesso por %s.", c, FormatarNumero(HOUSE_INFO[c][VALOR_CASA]));
                
SetPlayerPos(playerid, HOUSE_INFO[c][CASA_INTERIOR][0], HOUSE_INFO[c][CASA_INTERIOR][1], HOUSE_INFO[c][CASA_INTERIOR][2]);
                
SetPlayerInterior(playerid, HOUSE_INFO[c][INTERIOR]);
                
SetPlayerVirtualWorld(playerid, HOUSE_INFO[c][CASA_WORLD]);
                
                
format(gstring, sizeof(gstring), "~r~-~w~%d", HOUSE_INFO[c][VALOR_CASA]);
                
GameTextForPlayer(playerid, gstring, 6000, 1);
                
                
PlayerHouse[playerid] = c;
                
EmCasa[playerid] = c;
            }
        }
    }
    return 
1;
}
CMD:vendercasa(playerid)
{
    for(new 
c = 1; c != MAX_DYNAMIC_HOUSES; ++c)
    {
        if(
HOUSE_INFO[c][EXISTE_CASA])
        {
            if(
IsPlayerInRangeOfPoint(playerid, 3.0, HOUSE_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(playerid, COLOR_ERRO, "Vocк nгo й dono dessa casa.");
                
// --------------------------- //
                
GivePlayerMoney(playerid, HOUSE_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(playerid, 0xFF8040FF, "Casa %d vendida por sucesso por %s.", c, FormatarNumero(HOUSE_INFO[c][VALOR_CASA] / 3));
                
                
format(gstring, sizeof(gstring), "~w~+~g~%d", HOUSE_INFO[c][VALOR_CASA] / 3);
                
GameTextForPlayer(playerid, gstring, 6000, 1);
                
                
PlayerHouse[playerid] = 0;
                
EmCasa[playerid] = 0;
            }
        }
    }
    return 
1;
}
CMD:trancarcasa(playerid)
{
    for(new 
c = 1; c != MAX_DYNAMIC_HOUSES; ++c)
    {
         if(
IsPlayerInRangeOfPoint(playerid, 3.0, HOUSE_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 ? 0 : 1;
                    
                if(
HOUSE_INFO[c][CASA_TRANCADA] == 1) GameTextForPlayer(playerid, "~r~Casa trancada", 5000, 1);
                else 
GameTextForPlayer(playerid, "~w~Casa Aberta!", 5000, 1);
                    
                
SalvarCasa(c);
            }
        }
    }
    return 
1;
}
CMD:sacarcofre(playerid, params[])
{
    static
        
valor;
        
    if(
sscanf(params, "d", valor))
        return 
SendClientMessage(playerid, COLOR_ERRO, "Uso: /sacarcofre [valor]");
        
    if(
valor < 1 || valor > MAX_VALOR_SACAR_COFRE)
        return 
SendClientMessage(playerid, COLOR_ERRO, "O Valor tem que ser entre 1 e "#MAX_VALOR_SACAR_COFRE".");
    
if(!EmCasa[playerid])
        return 
SendClientMessage(playerid, COLOR_ERRO, "Vocк nгo estб em nenhuma casa.");
        
    new 
c = EmCasa[playerid];
    
    if(
valor > HOUSE_INFO[c][COFRE])
        return 
SendClientMessage(playerid, COLOR_ERRO, "Vocк nгo tem toda essa quantia no cofre.");
        
    
GivePlayerMoney(playerid, valor);
    
HOUSE_INFO[c][COFRE] -= valor;
    
    
MensagemFormatada(playerid, COLOR_AMARELO, "Vocк sacou a quantia de %s na casa %d.", FormatarNumero(valor), c);
    return 
1;
}
CMD:depositarcofre(playerid, params[])
{
    static
        
valor;
    if(
sscanf(params, "d", valor))
        return 
SendClientMessage(playerid, COLOR_ERRO, "Uso: /depositarcofre [valor]");
    if(
valor < 1 || valor > MAX_VALOR_SACAR_COFRE)
        return 
SendClientMessage(playerid, COLOR_ERRO, "O Valor tem que ser entre 1 e "#MAX_VALOR_DEPOSITO_COFRE".");
    
if(!EmCasa[playerid])
        return 
SendClientMessage(playerid, COLOR_ERRO, "Vocк nгo estб em nenhuma casa.");
    new 
c = EmCasa[playerid];
    if(
valor > GetPlayerMoney(playerid))
        return 
SendClientMessage(playerid, COLOR_ERRO, "Vocк nгo tem toda essa quantia em suas mгos.");
    
GivePlayerMoney(playerid, - valor);
    
HOUSE_INFO[c][COFRE] += valor;
    
MensagemFormatada(playerid, COLOR_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(playerid, params[])
{
    static
        
id,
        
type;
        
    if(
sscanf(params, "dd", id, type))
        return 
SendClientMessage(playerid, COLOR_ERRO, "Uso: /morador [playerid] [1-vaga1, 2-vaga2, 3-vaga3]");
        
    if(!
IsPlayerConnected(id))
        return 
SendClientMessage(playerid, COLOR_ERRO, "Esse jogador nгo estб conectado(a).");
    if(!
PlayerHouse[playerid])
        return 
SendClientMessage(playerid, COLOR_ERRO, "Vocк nгo tem uma casa.");
        
    if(
PlayerHouse[id] != 0)
        return 
SendClientMessage(playerid, COLOR_ERRO, "Esse jogador jб tem uma casa.");
        
    if(
type < 1 || type > 3)
        return 
SendClientMessage(playerid, COLOR_ERRO, "O Tipo de vaga й entre 1 e 3.");
        
    new 
house = IsPlayerMorador(id);
    
    if(
house != -1)
        return 
SendClientMessage(playerid, COLOR_ERRO, "Esse jogador jб й morador de alguma casa.");
    if(
RecebeuMorador[id] > 0)
        return 
SendClientMessage(playerid, COLOR_ERRO, "Esse jogador jб estб recebendo uma oferta de casa.");
    new 
c = PlayerHouse[playerid];
    
    if(
type == 1 && strcmp(HOUSE_INFO[c][MORADOR_1], "Ninguem", false)) SendClientMessage(playerid, COLOR_ERRO, "A Vaga 1 jб tem morador, remova-o primeiro.");
    else if(
type == 2 && strcmp(HOUSE_INFO[c][MORADOR_2], "Ninguem", false)) SendClientMessage(playerid, COLOR_ERRO, "A Vaga 2 jб tem morador, remova-o primeiro.");
    else if(
type == 3 && strcmp(HOUSE_INFO[c][MORADOR_3], "Ninguem", false)) SendClientMessage(playerid, COLOR_ERRO, "A Vaga 3 jб tem morador, remova-o primeiro.");
    
    if(
GetDistanceBetweenPlayers(playerid, id) < 5.0 && IsPlayerInRangeOfPoint(playerid, 3.0, HOUSE_INFO[c][CASA_POS][0], HOUSE_INFO[c][CASA_POS][1], HOUSE_INFO[c][CASA_POS][2]) && IsPlayerInRangeOfPoint(id, 3.0, HOUSE_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(id, COLOR_AMARELO, "Digite /aceitar para aceitar para ser morador vaga %d da casa %d.", VagaMorador[id], c);
    }
    return 
1;
}
CMD:removermorador(playerid, params[])
{
    static
        
vaga;
        
    if(
sscanf(params, "d", vaga))
        return 
SendClientMessage(playerid, COLOR_ERRO, "Use: /removermorador [1-vaga1, 2-vaga2, 3-vaga3]");
        
    if(
vaga < 1 || vaga > 3)
        return 
SendClientMessage(playerid, COLOR_ERRO, "O Tipo de vaga й entre 1 e 3.");
        
    new 
c = PlayerHouse[playerid];
    
    if(
IsPlayerInRangeOfPoint(playerid, 3.0, HOUSE_INFO[c][CASA_POS][0], HOUSE_INFO[c][CASA_POS][1], HOUSE_INFO[c][CASA_POS][2]))
    {
        
MensagemFormatada(playerid, COLOR_VERMELHO, "Vocк removeu o Morador(a) %s da Vaga %d.", GetNomeMorador(c, vaga), vaga);
        
RetirarMorador(c, vaga);
    }
    return 
1;
}
CMD:aceitar(playerid, params[])
{
    if(
RecebeuMorador[playerid] == 0 && PlayerOffMorador[playerid] == INVALID_PLAYER_ID)
        return 
SendClientMessage(playerid, COLOR_ERRO, "| ERRO | Vocк nгo recebeu oferta de moradia");
        
     
MensagemFormatada(playerid, COLOR_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], playerid, VagaMorador[playerid]);
    
     
RecebeuMorador[playerid] = 0;
      
VagaMorador[playerid] = 0;
       
PlayerOffMorador[playerid] = INVALID_PLAYER_ID;
    return 
1;
}
CMD:recusar(playerid, params[])
{
    if(
RecebeuMorador[playerid] == 0 && PlayerOffMorador[playerid] == INVALID_PLAYER_ID)
        return 
SendClientMessage(playerid, COLOR_ERRO, "| ERRO | Vocк nгo recebeu oferta de moradia");
    
MensagemFormatada(playerid, COLOR_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(playerid, params[])
{
    if(!
IsPlayerAdmin(playerid))
        return 
SendClientMessage(playerid, COLOR_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(playerid, preco);
    
    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.", id, preco);
    return 
1;
}
CMD:deletarcasa(playerid, params[])
{
    if(!
IsPlayerAdmin(playerid))
        return 
SendClientMessage(playerid, COLOR_ERRO, "Vocк nгo й um admin Rcon.");
        
    static
        
id;
        
    if(
sscanf(params, "d", id))
        return 
SendClientMessage(playerid, -1, "Uso: /deletarcasa [houseid]");
    static
        
c;
        
    
c = DeletarCasa(id);
    
    if(
c == -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(playerid, params[])
{
    if(!
IsPlayerAdmin(playerid))
        return 
SendClientMessage(playerid, COLOR_ERRO, "Vocк nгo й um admin Rcon.");
        
    static
        
id;
        
    if(
sscanf(params, "d", id))
        return 
SendClientMessage(playerid, -1, "Uso: /refresh [houseid]");
        
    static
        
c;
        
    
c = RefreshCasa(id);
    
    if(
c == -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(playerid, params[])
{
    if(!
IsPlayerAdmin(playerid))
        return 
SendClientMessage(playerid, COLOR_ERRO, "Vocк nгo й um admin Rcon.");
        
    static
        
id;
        
    if(
sscanf(params, "d", id))
        return 
SendClientMessage(playerid, -1, "Uso: /salvarcasa [houseid]");
        
    static
        
c;
        
    
c = SalvarCasa(id);
    
    if(
c == -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(playerid, COLOR_ERRO, "Vocк nгo й um admin Rcon.");
        
    for(new 
c = 1; c != MAX_DYNAMIC_HOUSES; ++c) DeletarCasa(c);
    
    
SendClientMessage(playerid, -1, "Todas as casas foram deletadas.");
    return 
1;
}
CMD:refreshall(playerid)
{
    if(!
IsPlayerAdmin(playerid))
        return 
SendClientMessage(playerid, COLOR_ERRO, "Vocк nгo й um admin Rcon.");
        
    for(new 
c = 1; c != MAX_DYNAMIC_HOUSES; ++c) RefreshCasa(c);
    
SendClientMessage(playerid, -1, "Todas as casas foram refrescadas.");
    return 
1;
}
CMD:editarcasa(playerid, params[])
{
    if(!
IsPlayerAdmin(playerid))
        return 
SendClientMessage(playerid, COLOR_ERRO, "Vocк nгo й um admin Rcon.");
        
    static
        
houseid,
        
edit[32],
        
string[128];
        
    if(
sscanf(params, "ds[32]S()[128]", houseid, edit, string))
    {
        
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 < 1 || 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.", houseid, novovalor);
    }
    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 < 1 || 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.", houseid, quantiacofre);
    }
    return 
1;
}
CMD:dinheiro(playerid)
{
    
GivePlayerMoney(playerid, 100000);
    return 
1;
}
stock GetPlayerID(pNick[])
{
    for(new 
i; i != MAX_PLAYERS; ++i)
    {
        if(!
strcmp(PlayerName(i), pNick, false)) return i;
    }
    return -
1;
}
stock GetDistanceBetweenPlayers(playerid, giveplayerid)
{
    new 
Float:distancia;
    new 
Float:x1, Float:y1, Float:z1;
    new 
Float:x2, Float:y2, Float:z2;
    
GetPlayerPos(playerid, x1, y1, z1);
    
GetPlayerPos(giveplayerid, x2, y2, z2);
    
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(playerid, Name, 24);
    return 
Name;
}
stock GetData()
{
    new
        
string[15], dia, mes, ano;
    
getdate(ano, mes, dia);
    
format(string, 15, "%d/%d/%d", dia, mes, ano);
    return 
string;
}
stock GetHora()
{
    new
        
string[15], hora, minuto, segundo;
    
gettime(hora, minuto, segundo);
    
format(string, 15, "%d:%d:%d", hora, minuto, segundo);
    return 
string;
}
stock FormatarNumero(amount)
{
    new
        
rmoney[22] = "$$", ret_valstr[50];
    
format(ret_valstr, sizeof(ret_valstr), "%d", amount);
    
strcat(rmoney, ret_valstr);
    
strcat(rmoney, ",00");
    new 
l = strlen(rmoney) - 3;
    while((
l -= 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.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)