#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; }