[FilterScript] Sistema de Casas Muito Simples.
#1

Ontem pedi um sistema de casas, eu criei um sistema para vocкs. Para vocкs comeзarem a estudar e fazer.
Vou comeзar fazer agora meu sistema, TMJ <3
PHP код:
#include <a_samp> 
#include <DOF2> 
#include <zcmd> 
#define MAX_CASAS 200
#define COR_BRANCO 0xFFFFFFFF
new gstring[150];
#pragma tabsize 0
enum Casa{
   
Dono[MAX_PLAYER_NAME+1],
   
Numero,
   
Float:pickupx,
   
Float:pickupy,
   
Float:pickupz
}
new 
Info_Casa[MAX_CASAS][Casa],
    
Texto[80]
;
public 
OnFilterScriptInit()
{
   
CriarCasa(1002051.6018,850.5718,6.7267);
   return 
1;
}
public 
OnFilterScriptExit()
{
    
DOF2_Exit();
    return 
1;
}
static 
CriarCasa(casaidFloat:PickupXFloat:PickupYFloat:PickupZ)
{
    
format(gstring150"/Casas/ID%i.ini"casaid);
    if(!
DOF2_FileExists(gstring)){
      
DOF2_CreateFile(gstring);
      
Info_Casa[casaid][Numero] = casaid;
      
Info_Casa[casaid][pickupx] = PickupX;
      
Info_Casa[casaid][pickupy] = PickupY;
      
Info_Casa[casaid][pickupz] = PickupZ;
      
DOF2_SetInt(gstring"Casa_Numero_Id"casaid);
      
DOF2_SetFloat(gstring"Pickup_X"PickupX);
      
DOF2_SetFloat(gstring"Pickup_Y"PickupY);
      
DOF2_SetFloat(gstring"Pickup_Z"PickupZ);
      
DOF2_SaveFile();
    }else{
      
DOF2_SetFloat(gstring"Pickup_X"PickupX);
      
DOF2_SetFloat(gstring"Pickup_Y"PickupY);
      
DOF2_SetFloat(gstring"Pickup_Z"PickupZ);
      }
      
Info_Casa[casaid][pickupx] = PickupX;
      
Info_Casa[casaid][pickupy] = PickupY;
      
Info_Casa[casaid][pickupz] = PickupZ;
      
format(Texto80"Casa Nъmero %i"Info_Casa[casaid][Numero]);
      
Create3DTextLabel(TextoCOR_BRANCOPickupXPickupYPickupZ70.000);
      
CreatePickup(127323PickupXPickupYPickupZ);
}
CMD:ircasa(playeridparams[]){
    
SetPlayerPos(playerid2051.6018,850.5718,6.7267);
    return 
1;

Reply
#2

Cуdigo ъtil.
Reply
#3

Quote:
Originally Posted by IlanZ
Посмотреть сообщение
Cуdigo ъtil.
Vlw Ilan, graзas a vocк eu aprendi DOF2 kkk.
Reply
#4

Seria melhor nгo salvar os dados ao criar a casa, apenas armazenar na variбvel estaria bom, e claro salvar todas casas no desligamento do servidor e em um timer com tempo de atualizaзгo adequado.

No seu comando deveria ter associado o parвmetro digitado no comando (params) como id da casa, sendo possнvel utilizar esse valor como нndice da variбvel Info_Casa, assim teria a posiзгo do pickup das casas.

Deveria ter salvo tambйm o ID do pickup para ser possнvel deletar a casa corretamente.

Para esse cуdigo ser vбlido como filterscript estes requisitos sгo cortesia da casa, teria ainda que completar pelo menos as funзхes de deletar, atualizar, funcionalidades e etc.

O cуdigo em si nгo estб em um mal formato, melhor que variados.
Reply
#5

Vou te dar algumas dicas sobre seu cуdigo:

1- Nunca use pragma tabsize, isso й coisa de preguiзoso que nгo indenta o prуprio cуdigo pra evitar "warning: loose indentation" no console, pйssima prбtica pra legibilidade de quem vai ler seu cуdigo.

Код:
#pragma tabsize 0
2- PlayerNames sу tem 24 bytes, e se eu nгo me engano, o prуprio sa-mp nгo usa os 24 bytes (acho que sгo 16 ou 20 caracteres no mбximo se me lembro bem), nгo й necessбrio mais do que isso para armazenar a string contendo o nome deles, no caso sу MAX_PLAYER_NAME jб estaria perfeito:

Код:
   Dono[MAX_PLAYER_NAME+1],
3- Й uma boa prбtica usar PascalCase ou snake_case nas variбveis em pawn pra melhorar a legibilidade, eu gostava atй mesmo de usar uma "Pascal_Snake_Case" pra atributos compostos como posiзгo por exemplo, que й importante vocк dar bastante destaque ao elemento principal da variбvel, por exemplo:

Код:
Float:pickupx, 
Float:pickupy, 
Float:pickupz
poderia ser:

Код:
Float: Pickup_X,
Float: Pickup_Y,
Float: Pickup_Z
Percebeu que os elementos "Pickup", "X", "Y" e "Z" ficaram bastante em destaque quando vocк leu? Й muito bom usar desta forma, vocк poderia tambйm fazer PickupX, PickupY e PickupZ que estaria correto (PascalCase), mas nгo daria tanto destaque а separaзгo dos elementos correspondentes, mas isso й uma questгo de gosto.

Para variбveis que contйm uma estrutura, eu uso somente PascalCase, por exemplo:

Код:
new Info_Casa[...][...];
eu faria:

new InfoCasa[...][...];

O mesmo para enumeradores, melhora a legibilidade se estiver tudo junto, porque Casa nгo й um Atributo de Info para ser separado por um underline.


Alguns pontos cruciais que tкm que ser mudados no seu cуdigo:

Quote:

static CriarCasa(casaid, Float:PickupX, Float:PickupY, Float:PickupZ)
{
format(gstring, 150, "/Casas/ID%i.ini", casaid);

Esse trecho de cуdigo tem alйm de pйssimas prбticas, erros muito bбsicos sendo cometidos.

1- Nunca faзa um sistema de criaзгo de coisas que precise de um ID como parвmetro, faзa sua prуpria auto incrementaзгo, crie uma variбvel global, quando o gamemode for iniciado leia todos os elementos persistidos (salvos) daquele tipo e coloque o valor da variбvel global que vocк criou como o id do maior elemento salvo, toda vez que for inserir um novo registro, busque essa variбvel global e incremente +1 e salve os dados da nova casa, dessa forma vai sempre estar ordenado, e pra finalizar, pra ficar bastante completo, retorne sempre o ID do elemento criado na funзгo de criaзгo, por exemplo, a funзгo CriarCasa(...) poderia retornar o ID da casa que foi criada, dessa forma vocк teria muito mais usabilidade no seu cуdigo.

2- Nгo use o prefixo "IDNъmero", jб que as casas estгo sendo salvas dentro de uma pasta especнfica "/Casas", salve somente pelo ID da mesma, ex: "1.ini", "2.ini", "3.ini", melhora muito a legibilidade e futuros sistemas automatizados que vocк precise criar.

3- Seu sistema estб incompleto, ele sу cria uma casa ao iniciar o filterscript/gamemode, faзa um comando usando as dicas que te dei acima para melhorar seu sistema de casas, coloque posiзгo do pickup de entrada, interior, virtual world, entre outras informaзхes ъteis ao seu sistema.
Reply


Forum Jump:


Users browsing this thread: 3 Guest(s)