
#include < a_samp >
#include < sscanf >
#include < dof2 >
#include < zcmd >
#define MAX_HOUSES 100
enum InfoH
{
hID,
Float:hIcone[3],
hPreco,
hDono[120],
hCofre,
hAluguel,
hCarro,
Float:hCarroPos[3],
hInterior,
Text3D:hText,
hPickUp
}
new HInfo[MAX_HOUSES][InfoH];
new arquivo_casa[120];
main(){ print("Sistema de casas");}
public OnGameModeInit()
{
UsePlayerPedAnims();
DisableInteriorEnterExits();
SetGameModeText("HOUSE SCRIPT");
AddPlayerClass(23, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
// Criaзгo de casas automбticamente
for(new i = 0; i < MAX_HOUSES; ++i)
{
Carregar_Casa(i);
if(DOF2_FileExists(arquivo_casa[i]))
{
new str[120];
format(str, sizeof(str), "Casa %d\nDono %s\nAluguel %d", HInfo[i][hID], HInfo[i][hDono], HInfo[i][hAluguel]);
Create3DTextLabel(str, -1, HInfo[i][hIcone][0], HInfo[i][hIcone][1], HInfo[i][hIcone][2], 40.0, 0, 0);
HInfo[i][hPickUp] = CreatePickup(1273, 1, HInfo[i][hIcone][0], HInfo[i][hIcone][1], HInfo[i][hIcone][2], -1);
}
}
return 1;
}
public OnGameModeExit()
{
DOF2_Exit();
return 1;
}
public OnPlayerRequestClass(playerid, classid)
{
SpawnPlayer(playerid);
return 1;
}
public OnPlayerConnect(playerid)
{
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
for(new i = 0; i < MAX_HOUSES; ++i)
{
Salvar_Casa(i);
}
return 1;
}
public OnPlayerSpawn(playerid)
{
for(new i = 0; i < MAX_HOUSES; ++i)
{
if(!DOF2_FileExists(arquivo_casa[i]))
{
new str[120];
format(str, sizeof(str), "Casa %d\nDono %s\nAluguel %d", HInfo[i][hID], HInfo[i][hDono], HInfo[i][hAluguel]);
Create3DTextLabel(str, -1, HInfo[i][hIcone][0], HInfo[i][hIcone][1], HInfo[i][hIcone][2], 40.0, 0, 0);
HInfo[i][hPickUp] = CreatePickup(1273, 1, HInfo[i][hIcone][0], HInfo[i][hIcone][1], HInfo[i][hIcone][2], -1);
}
}
return 1;
}
public OnPlayerDeath(playerid, killerid, reason)
{
return 1;
}
CMD:criarcasa(playerid, params[])
{
if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, -1, "Vocк nгo tem permisгo para usar este comando!");
new id, intr, preco;
if(sscanf(params, "ddd", id, intr, preco)) return SendClientMessage(playerid, -1, "/criarcasa id interior preco");
new Float:Pos[3];
GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]);
HInfo[id][hInterior] = intr;
HInfo[id][hID] = id;
HInfo[id][hCofre] = 0;
HInfo[id][hCarro] = 265;
HInfo[id][hPreco] = preco;
HInfo[id][hAluguel] = 0;
HInfo[id][hCarroPos][0] = 0, HInfo[id][hCarroPos][1] = 0, HInfo[id][hCarroPos][2] = 0;
new str[120];
format (str, sizeof(str), "O Administrador %s criou uma casa id %d valor: %d", GetNome(playerid), id, preco);
SendClientMessageToAll(-1, str);
HInfo[id][hIcone][0] = Pos[0], HInfo[id][hIcone][1] = Pos[1], HInfo[id][hIcone][2] = Pos[2];
Criar_Casa(id); // Funciona !
SpawnPlayer(playerid);
return 1;
}
Criar_Casa(casaid)
{
format(arquivo_casa, sizeof(arquivo_casa), "casas/casa %d.ini", HInfo[casaid][hID]); // Cria um arquivo com o id da casa
if(!DOF2_FileExists(arquivo_casa)) // verifica se existe
{
new xty[180];
format(xty, sizeof(xty), "casa %d", HInfo[casaid][hID]); // se nгo existir cria (ex: casa 1 )
DOF2_CreateFile(arquivo_casa); // cria o arquivo serб isso que faltava ?
}
if(DOF2_FileExists(arquivo_casa)) // verifica se existe
{
format(arquivo_casa, sizeof(arquivo_casa), "casas/casa %d.ini", HInfo[casaid][hID]);
DOF2_SetString(arquivo_casa, "Dono", "Ninguйm");
DOF2_SetInt(arquivo_casa, "ID", HInfo[casaid][hID]);
DOF2_SetInt(arquivo_casa, "Preco", HInfo[casaid][hPreco]);
DOF2_SetInt(arquivo_casa, "Aluguel", HInfo[casaid][hAluguel]);
DOF2_SetInt(arquivo_casa, "Carro", HInfo[casaid][hCarro]);
DOF2_SetInt(arquivo_casa, "Interior", HInfo[casaid][hInterior]);
DOF2_SetFloat(arquivo_casa, "Iconex", HInfo[casaid][hIcone][0]);
DOF2_SetFloat(arquivo_casa, "Iconey", HInfo[casaid][hIcone][1]);
DOF2_SetFloat(arquivo_casa, "Iconez", HInfo[casaid][hIcone][2]);
DOF2_SetFloat(arquivo_casa, "CarroPosx", HInfo[casaid][hCarroPos][0]);
DOF2_SetFloat(arquivo_casa, "CarroPosy", HInfo[casaid][hCarroPos][1]);
DOF2_SetFloat(arquivo_casa, "CarroPosz", HInfo[casaid][hCarroPos][2]);
DOF2_SaveFile();
}
}
Carregar_Casa(casaid)
{
format(arquivo_casa, sizeof(arquivo_casa), "casas/%d.ini", HInfo[casaid][hID]);
new txt[120];
format(txt, sizeof(txt), "%s", DOF2_GetString(arquivo_casa, "Dono"));
HInfo[casaid][hDono] = txt;
HInfo[casaid][hID] = DOF2_GetInt(arquivo_casa, "ID");
HInfo[casaid][hPreco] = DOF2_GetInt(arquivo_casa, "Preco");
HInfo[casaid][hAluguel] = DOF2_GetInt(arquivo_casa, "Aluguel");
HInfo[casaid][hCarro] = DOF2_GetInt(arquivo_casa, "Carro");
HInfo[casaid][hInterior] = DOF2_GetInt(arquivo_casa, "Interior");
HInfo[casaid][hIcone][0] = DOF2_GetFloat(arquivo_casa, "Iconex");
HInfo[casaid][hIcone][1] = DOF2_GetFloat(arquivo_casa, "Iconey");
HInfo[casaid][hIcone][2] = DOF2_GetFloat(arquivo_casa, "Iconez");
HInfo[casaid][hCarroPos][0] = DOF2_GetFloat(arquivo_casa, "CarroPosx");
HInfo[casaid][hCarroPos][1] = DOF2_GetFloat(arquivo_casa, "CarroPosy");
HInfo[casaid][hCarroPos][2] = DOF2_GetFloat(arquivo_casa, "CarroPosz");
}
Salvar_Casa(casaid)
{
format(arquivo_casa, sizeof(arquivo_casa), "casas/%d.ini", HInfo[casaid][hID]);
DOF2_SetInt(arquivo_casa, "Dono", HInfo[casaid][hDono]);
DOF2_SetInt(arquivo_casa, "ID", HInfo[casaid][hID]);
DOF2_SetInt(arquivo_casa, "Preco", HInfo[casaid][hPreco]);
DOF2_SetInt(arquivo_casa, "Aluguel", HInfo[casaid][hAluguel]);
DOF2_SetInt(arquivo_casa, "Carro", HInfo[casaid][hCarro]);
DOF2_SetInt(arquivo_casa, "Interior", HInfo[casaid][hInterior]);
DOF2_SetFloat(arquivo_casa, "Iconex", HInfo[casaid][hIcone][0]);
DOF2_SetFloat(arquivo_casa, "Iconey", HInfo[casaid][hIcone][1]);
DOF2_SetFloat(arquivo_casa, "Iconez", HInfo[casaid][hIcone][2]);
DOF2_SetFloat(arquivo_casa, "CarroPosx", HInfo[casaid][hCarroPos][0]);
DOF2_SetFloat(arquivo_casa, "CarroPosy", HInfo[casaid][hCarroPos][1]);
DOF2_SetFloat(arquivo_casa, "CarroPosz", HInfo[casaid][hCarroPos][2]);
DOF2_SaveFile();
}
stock GetNome(playerid)
{
new pNome[MAX_PLAYER_NAME];
GetPlayerName(playerid, pNome, 24);
return pNome;
}
public OnGameModeInit()
{
UsePlayerPedAnims();
DisableInteriorEnterExits();
SetGameModeText("HOUSE SCRIPT");
AddPlayerClass(23, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
// Criaзгo de casas automбticamente
for(new i = 0; i < MAX_HOUSES; ++i)
{
Carregar_Casa(i);
if(DOF2_FileExists(arquivo_casa[i]))
{
new str[250];
format(str, sizeof(str), "Casa %d\nDono %s\nValor %d\nAlguel %d", HInfo[i][hID], HInfo[i][hDono], HInfo[i][hPreco], HInfo[i][hAluguel]);
Create3DTextLabel(str, -1, HInfo[i][hIcone][0], HInfo[i][hIcone][1], HInfo[i][hIcone][2], 40.0, 0, 0);
HInfo[i][hPickUp] = CreatePickup(1273, 1, HInfo[i][hIcone][0], HInfo[i][hIcone][1], HInfo[i][hIcone][2], -1);
}
}
return 1;
}
|
Irmгo, tu cria muitos tуpicos sobre o mesmo assunto, chill the fuck out.
|
|
Depois vгo ficar tristes quando a board Br for apagada junta com as outras.
|
|
Em primeiro lugar, parabйns por nгo desistir e tentar criar um cуdigo prуprio, vocк teve esforзo e com isso vocк tem meu apreзo. Mas tem diversos problemas sйrios em seu cуdigo, as funcionalidades do seu sistema estгo muito acopladas e pouco coesas, recomendo firmemente que refaзa as suas funзхes. Por exemplo, Criar_Casa й dividida em dois lugares, e isso nгo й legal, o ideal seria que toda a lуgica da criaзгo de uma casa se concentrasse apenas na funзгo. Podemos tambйm observar que hб vбrios fragmentos de lуgicas espalhados pelas callbacks do seu script, e isso nгo й seguro.
Sobre o erro, vocк cria as pickups e 3dtexts toda vez que alguйm spawna caso o arquivo da casa exista, isso nгo vai funcionar como vocк quer, o problema estб aн. Imagine o que aconteceria caso 50 jogadores spawnassem? Pois bem, isso nгo vai funcionar. Pense em outra soluзгo, acredito que vocк possa lidar com isso. |
#include < a_samp >
#include < sscanf >
#include < dof2 >
#include < zcmd >
#define MAX_HOUSES 100
enum InfoH
{
hID,
Float:hIcone[3],
hPreco,
hDono[25],
hCofre,
hAluguel,
hCarro,
Float:hCarroPos[3],
hInterior,
Text3D:hText,
hPickUp
}
new HInfo[MAX_HOUSES][InfoH];
new EstaEmCasa[MAX_PLAYERS];
new arquivo_casa[120];
main(){ print("Sistema de casas");}
public OnGameModeInit()
{
UsePlayerPedAnims();
DisableInteriorEnterExits();
SetGameModeText("HOUSE SCRIPT");
AddPlayerClass(23, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
// Criaзгo de casas automбticamente
for(new i = 0; i < MAX_HOUSES; ++i)
{
Carregar_Casa(i);
if(DOF2_FileExists(arquivo_casa[i]))
{
new str[250];
format(str, sizeof(str), "Casa %d\nDono %s\nValor %d\nAluguel %d", HInfo[i][hID], HInfo[i][hDono], HInfo[i][hPreco], HInfo[i][hAluguel]);
Create3DTextLabel(str, -1, HInfo[i][hIcone][0], HInfo[i][hIcone][1], HInfo[i][hIcone][2], 40.0, 0, 0);
HInfo[i][hPickUp] = CreatePickup(1273, 1, HInfo[i][hIcone][0], HInfo[i][hIcone][1], HInfo[i][hIcone][2], -1);
}
}
return 1;
}
/*
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if(newkeys == KEY_YES )
{
for(new i = 0; i < MAX_HOUSES; ++i)
{
if (IsPlayerInRangeOfPoint(playerid, 2, HInfo[i][hIcone][0], HInfo[i][hIcone][1], HInfo[i][hIcone][2]));
{
new str[120];
format(str, sizeof(str),"Vocк entrou na casa %d", HInfo[i][hID]);
SendClientMessage(playerid, -1, str);
}
}
}
return 1;
}
*/
new cont;
public OnPlayerPickUpPickup(playerid, pickupid)
{
for(new i = 0; i < MAX_HOUSES; ++i)
{
if(pickupid == HInfo[i][hPickUp]) // verifica corretamente a casa que o player estб em cima !
{
if(cont == 0) // pra nгo ficar floodando a mensagem
{
// SetPlayerInterior(playerid, HInfo[i][hInterior]);
EstaEmCasa[playerid] = HInfo[i][hID];
new str[120];
// format(str, sizeof(str), "Vocк estб na casa %d", HInfo[i][hID]);
format(str, sizeof(str), "Vocк estб na casa %d", EstaEmCasa[playerid]); //
SendClientMessage(playerid, -1, str);
cont ++;
}
}
}
return 1;
}
CMD:zerar(playerid) // teste
{
cont = 0;
return 1;
}
public OnGameModeExit()
{
DOF2_Exit();
for(new i = 0; i < MAX_HOUSES; ++i) { Salvar_Casa(i); }
return 1;
}
public OnPlayerRequestClass(playerid, classid)
{
SpawnPlayer(playerid);
return 1;
}
public OnPlayerConnect(playerid)
{
for(new i = 0; i < MAX_HOUSES; ++i)
{
if(!DOF2_FileExists(arquivo_casa[i]))
{
Carregar_Casa(i);
new str[120];
format(str, sizeof(str), "Casa %d\nDono: %s\nValor %d\nAluguel %d", HInfo[i][hID], HInfo[i][hDono], HInfo[i][hPreco], HInfo[i][hAluguel]);
Create3DTextLabel(str, -1, HInfo[i][hIcone][0], HInfo[i][hIcone][1], HInfo[i][hIcone][2], 40.0, 0, 0);
HInfo[i][hPickUp] = CreatePickup(1273, 1, HInfo[i][hIcone][0], HInfo[i][hIcone][1], HInfo[i][hIcone][2], -1);
}
}
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
for(new i = 0; i < MAX_HOUSES; ++i) { Salvar_Casa(i); }
return 1;
}
public OnPlayerSpawn(playerid) // Mostra corretamente as informaзхes
{
for(new i = 0; i < MAX_HOUSES; ++i)
{
if(!DOF2_FileExists(arquivo_casa[i]))
{
Carregar_Casa(i);
new str[120];
format(str, sizeof(str), "Casa %d\nDono: %s\nValor %d\nAluguel %d", HInfo[i][hID], HInfo[i][hDono], HInfo[i][hPreco], HInfo[i][hAluguel]);
Create3DTextLabel(str, -1, HInfo[i][hIcone][0], HInfo[i][hIcone][1], HInfo[i][hIcone][2], 40.0, 0, 0);
HInfo[i][hPickUp] = CreatePickup(1273, 1, HInfo[i][hIcone][0], HInfo[i][hIcone][1], HInfo[i][hIcone][2], -1);
}
}
return 1;
}
public OnPlayerDeath(playerid, killerid, reason)
{
return 1;
}
CMD:criarcasa(playerid, params[])
{
// if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, -1, "Vocк nгo tem permisгo para usar este comando!");
new id, intr, preco;
if(sscanf(params, "ddd", id, intr, preco)) return SendClientMessage(playerid, -1, "/criarcasa id interior preco");
new Float:Pos[3];
GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]);
HInfo[id][hInterior] = intr;
HInfo[id][hID] = id;
HInfo[id][hCofre] = 250;
HInfo[id][hCarro] = 265;
HInfo[id][hPreco] = preco;
HInfo[id][hAluguel] = 500;
HInfo[id][hCarroPos][0] = 0;
HInfo[id][hCarroPos][1] = 0;
HInfo[id][hCarroPos][2] = 0;
new str[120];
format (str, sizeof(str), "O Administrador %s criou uma casa id %d valor: %d", GetNome(playerid), id, preco);
SendClientMessageToAll(-1, str);
HInfo[id][hIcone][0] = Pos[0], HInfo[id][hIcone][1] = Pos[1], HInfo[id][hIcone][2] = Pos[2];
Criar_Casa(id); // Funciona !
SpawnPlayer(playerid);
return 1;
}
Criar_Casa(casaid)
{
format(arquivo_casa, sizeof(arquivo_casa), "casas/casa %d.ini", HInfo[casaid][hID]);
if(!DOF2_FileExists(arquivo_casa))
{
DOF2_CreateFile(arquivo_casa);
}
if(DOF2_FileExists(arquivo_casa))
{
format(arquivo_casa, sizeof(arquivo_casa), "casas/casa %d.ini", HInfo[casaid][hID]);
DOF2_SetInt(arquivo_casa, "ID", HInfo[casaid][hID]);
DOF2_SetString(arquivo_casa, "Dono", "Ninguem");
DOF2_SetInt(arquivo_casa, "Preco", HInfo[casaid][hPreco]);
DOF2_SetInt(arquivo_casa, "Aluguel", HInfo[casaid][hAluguel]);
DOF2_SetInt(arquivo_casa, "Carro", HInfo[casaid][hCarro]);
DOF2_SetInt(arquivo_casa, "Interior", HInfo[casaid][hInterior]);
DOF2_SetFloat(arquivo_casa, "Iconex", HInfo[casaid][hIcone][0]);
DOF2_SetFloat(arquivo_casa, "Iconey", HInfo[casaid][hIcone][1]);
DOF2_SetFloat(arquivo_casa, "Iconez", HInfo[casaid][hIcone][2]);
DOF2_SetFloat(arquivo_casa, "CarroPosx", HInfo[casaid][hCarroPos][0]);
DOF2_SetFloat(arquivo_casa, "CarroPosy", HInfo[casaid][hCarroPos][1]);
DOF2_SetFloat(arquivo_casa, "CarroPosz", HInfo[casaid][hCarroPos][2]);
DOF2_SaveFile();
}
}
Carregar_Casa(casaid)
{
/*
format(arquivo_casa, sizeof(arquivo_casa), "casas/casa %d.ini", HInfo[casaid][hID]);
format(HInfo[casaid][hDono], 25, HInfo[casaid][hDono], "%s", DOF2_GetString(arquivo_casa, "Dono"));
*/
new string[25];
format(string, sizeof(string), "%s", DOF2_GetString(arquivo_casa, "Dono"));
HInfo[casaid][hID] = DOF2_GetInt(arquivo_casa, "ID");
HInfo[casaid][hDono] = string;
HInfo[casaid][hPreco] = DOF2_GetInt(arquivo_casa, "Preco");
HInfo[casaid][hAluguel] = DOF2_GetInt(arquivo_casa, "Aluguel");
HInfo[casaid][hCarro] = DOF2_GetInt(arquivo_casa, "Carro");
HInfo[casaid][hInterior] = DOF2_GetInt(arquivo_casa, "Interior");
HInfo[casaid][hIcone][0] = DOF2_GetFloat(arquivo_casa, "Iconex");
HInfo[casaid][hIcone][1] = DOF2_GetFloat(arquivo_casa, "Iconey");
HInfo[casaid][hIcone][2] = DOF2_GetFloat(arquivo_casa, "Iconez");
HInfo[casaid][hCarroPos][0] = DOF2_GetFloat(arquivo_casa, "CarroPosx");
HInfo[casaid][hCarroPos][1] = DOF2_GetFloat(arquivo_casa, "CarroPosy");
HInfo[casaid][hCarroPos][2] = DOF2_GetFloat(arquivo_casa, "CarroPosz");
}
Salvar_Casa(casaid)
{
format(arquivo_casa, sizeof(arquivo_casa), "casas/casa %d.ini", HInfo[casaid][hID]);
DOF2_SetInt(arquivo_casa, "Dono", HInfo[casaid][hDono]);
DOF2_SetInt(arquivo_casa, "ID", HInfo[casaid][hID]);
DOF2_SetInt(arquivo_casa, "Preco", HInfo[casaid][hPreco]);
DOF2_SetInt(arquivo_casa, "Aluguel", HInfo[casaid][hAluguel]);
DOF2_SetInt(arquivo_casa, "Carro", HInfo[casaid][hCarro]);
DOF2_SetInt(arquivo_casa, "Interior", HInfo[casaid][hInterior]);
DOF2_SetFloat(arquivo_casa, "Iconex", HInfo[casaid][hIcone][0]);
DOF2_SetFloat(arquivo_casa, "Iconey", HInfo[casaid][hIcone][1]);
DOF2_SetFloat(arquivo_casa, "Iconez", HInfo[casaid][hIcone][2]);
DOF2_SetFloat(arquivo_casa, "CarroPosx", HInfo[casaid][hCarroPos][0]);
DOF2_SetFloat(arquivo_casa, "CarroPosy", HInfo[casaid][hCarroPos][1]);
DOF2_SetFloat(arquivo_casa, "CarroPosz", HInfo[casaid][hCarroPos][2]);
DOF2_SaveFile();
}
stock GetNome(playerid){
new pNome[MAX_PLAYER_NAME];
GetPlayerName(playerid, pNome, 24);
return pNome; }