24.03.2019, 23:23
(
Last edited by GuiKommander; 30/03/2019 at 05:24 PM.
)
As Funзхes Que vocк vai usar abaixo:
Necessбrio ter a pasta ''Casas'' no ScriptFiles.
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;
}
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.