SSGamers - 12 Anos online por você.

#SSGamers - A Comunidade que mais crescer no brasil!

Participe do fórum, é rápido e fácil

SSGamers - 12 Anos online por você.

#SSGamers - A Comunidade que mais crescer no brasil!

SSGamers - 12 Anos online por você.

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Chegou o novo tema 6.5.5 - SSGamers - Servidores online de qualidade - Aproveite e entre para nossa comunidade, inscreva-se já! - Ouça nossa web radio - Veja nossas novidades - Participe dos nossos setores de jogos online - Parcerias aberta fale já com um administrador.

    [Tutorial] Criando casas para vender.

    Weslley_Script
    Weslley_Script
    SS - Fundador
    SS - Fundador


    Steam Steam : WeslleySSGames
    Zello : WeslleySSGames
    Mensagens : 11378
    Moedas : 1031971
    Data de inscrição : 06/10/2011
    Idade : 28
    Localização : Brasil

    [Tutorial] Criando casas para vender. Empty [Tutorial] Criando casas para vender.

    Mensagem por Weslley_Script Sáb 15 Abr 2023 - 11:45

    Introdução

    ->Este tutorial você precisa saber o basico do ZCMD se eu fiz isso com apenas strcmp em OnPlayerCommandText as pessoas tiveram problemas.
    ->Tambem é utilizado a include streamer(Basta procurar essa include no forum).

    Comeзando

    Em primeiro lugar temos que colocar a include samp,include streamer a ZCMD e criar nossas variaveis.
    Devemos ter uma variável para armazenar o banco de dados, o resultado do banco de dados e a string de formato para a nossa consulta. DB tag está conectado ao banco de dados e a variável DBResult está conectada ao resultado da consulta.
    Код:

    Código:
    #include <a_samp>
    #include <zcmd>
    #include <streamer>



    novo BD:banco de dados, DBResult:resultado da consulta, fquery[300];

    Abaixo estão alguns que definem que estamos usando para que possamos editá-los facilmente a qualquer hora que queremos. Temos a definição MAX_HOUSES que é usada para criar uma variável houseinformation. É bom estar atento à quantidade de casas que você usa, porque o MAX_HOUSES quanto menor, menor é a variável e o tamanho do AMX. MAX_HOUSES_PER_PLAYER é usado posteriormente em nosso script para definir o número de casas que um jogador pode ter.
    Код:

    Código:
    #define MAX_HOUSES 300 //MAX_HOUSES é 300 .
    #define MAX_HOUSES_PER_PLAYER 2 //MAX_HOUSES_PER_PLAYER estÁ 2
    #define databasename "housedb.db" //O DatabaseName é atualmente housedb.db


    precisamos criar agora nosso enum e as informações das variáveis..
    Код:

    Código:
    enum hinfo
    {
     owner[24], // Armazena o nome do proprietário da casa
     Hname[100], //Armazena o nome da casa.
     costprice, // Armazena o preço de custo da casa
     Float:EnterPos[3], // vai armazenar a posição do checkpoint da casa
     Float:TelePos[3], // Ela é a posição que é enviada para se entrar na casa
     sellprice, //Permite-nos vender a casa pelo preço que foi escolhido
     interiores, //Permite definir o interior do jogador
     Text3D:textid, //São as informações em 3D textlabel que fica fora da nossa casa mudei para gametext to 3D text porque é a maneira mais fácil.
     checkpointidx[2]
    };

    new HouseInformation[MAX_HOUSES][hinfo], houseid;
    novo Interno[MAX_PLAYERS], InternoCP[MAX_PLAYERS];


    A primeira coisa é em primeiro lugar, precisamos ter as duas linhas seguintes sob OnGameModeInit ou sob OnFilterScriptInit. Precisamos em primeiro lugar utilizar a função db_open para conectar nosso servidor samp com o banco de dados SQLite. Nуs usamos a variбvel do banco de dados acima para salvar o nosso nъmero de banco de dados nele. Em segundo lugar, precisamos fazer a nossa tabela se ela nгo existe. Você não precisa manter essa linha no sistema porque ele só precisa ser chamado uma vez. A função db_query nos permite GET / STORE / SET informações no nosso banco de dados. Neste caso, estamos criando nossa mesa. A tabela nos permite armazenar informações e pode ser usada para adicionar mais funções, como vamos dizer que um carro da casa. Para este tutorial, estamos apenas usando-a para armazenar o nome de proprietários.
    Код:

    Código:
    public OnFilterScriptInit()
    {
     banco de dados = db_open(nome do banco de dados);
     db_query(database, "CRIAR TABELA SE NÃO EXISTIR `HOUSEINFO` (nome da casa varchar(51), dono da casa varchar(25))");
     retornar 1;
    }


    Agora vamos fazer o trabalho básico de redefinir as variáveis ​​para -1 (Nenhum ID de casa está sob esta variável).
    Код:

    Código:
    public OnPlayerConnect(playerid)
    {
     Interno[playerid] = -1;
     InternoCP[playerid] = -1;
     retornar 1;
    }


    Agora vamos começar a parte mais difícil! Nуs vamos fazer a nossa funзгo que cria as nossas casas. Ele também pode consultar nosso banco de dados para ver se há alguém que é dono da casa. Nуs estaremos usando uma funзгo de aзхes que cria uma ъnica linha que podemos usar para armazenar todas as informaзхes de uma vez. O formato de nossas açoes :copyright:
    Код:

    Código:
    CreateHouse(HouseName[], CostP, Float:EnterX, Float:EnterY, Float:EnterZ, Float:TeleX, Float:TeleY, Float:TeleZ, SellP, Interiorx)


    Код:

    Código:
    HouseName[] - O nome que voce quer dar para a casa (EX:Mansao1)
    CostP - O preço que você quer dar para a casa (Ex: 500000)
    Float:EnterX - O ponto de entrada da casa X (Ex: 1264.53433)
    Float:EnterY - O ponto de entrada da casa Y (Ex: 2625.6436)
    Float:EnterZ - O ponto de entrada da casa Z(Ex: 200.532)
    Float:TeleX - O teleporte X,tele para o interior (Ex: 432.4234)
    Float:TeleY - O teleporte Y,tele para o interior(Ex: 4216.4152)
    Float:TeleZ - O teleporte Z,tele para o interior(Ex: 10.53672)
    SellP - O preço de quando o dono vende a casa (Ex: 200000)
    Interiorx - O id do interior que vamos se teleportar


    Quando ele consulta o banco de dados na parte inferior, o que estamos fazendo é encontrar se a casa tem um proprietário, se assim ele vai armazenar o nome de proprietários em várias informações da casa. Se não houver nenhum proprietário para uma casa, um serviço variável será deixado em branco. feito isso usando
    a instrução SELECT.
    Код:

    Código:
    SELECIONE [VARIÁVEL] DE [NOME DA TABELA] ONDE [OUTRA VARIÁVEL] = [UM VALOR]
    VARIÁVEL = Dono da casa
    TABLENAME = HOUSEINFO
    OUTRA VARIÁVEL = nome da casa
    A VALUE = o nome da nossa casa

    .

    Em seguida, usamos db_num_rows para verificar se houve alguma linha com o nosso nome da casa que buscamos. Se não houver nenhuma linha com o nome da casa (sem dono), então vamos apenas liberar o resultado com db_free_result. Se há uma linha, vamos buscar esse valor usando db_get_field_assoc. Para mais informações sobre SQLite, visite https://sampwiki.blast.hk/wiki/SQLite

    Agora também temos que adicionar o nosso entrar e sair checkpoints em nosso script usando CreateDynamicCP. Ele cria os postos de controle e armazena o IDS em checkpointid [0] para o CP entrar e checkpointid [1] para a CP saída. Também vamos fazer a nossa variável texto com informações 3D CreateDynamic3DTextLabel e armazená-lo no textid variável.

    Код:

    Código:
    estoque CreateHouse(HouseName[], CostP, Float:EnterX, Float:EnterY, Float:EnterZ, Float:TeleX, Float:TeleY, Float:TeleZ, Interiorx, SellP)
    {
     format(HouseInformation[houseid][Hname], 100, "%s", HouseName);
     HouseInformation[houseid][costprice] = CostP;
     HouseInformation[houseid][EnterPos][0] = EnterX;
     HouseInformation[houseid][EnterPos][1] = EnterY;
     HouseInformation[houseid][EnterPos][2] = EnterZ;
     HouseInformation[houseid][TelePos][0] = TeleX;
     HouseInformation[houseid][TelePos][1] = TeleY;
     HouseInformation[houseid][TelePos][2] = TeleZ;
     HouseInformation[houseid][sellprice] = SellP;
     HouseInformation[houseid][interiores] = Interiorx;
     format(fquery, sizeof(fquery), "SELECT donacasa informações nome dacasa = '%s'", HouseName);
     queryresult = db_query(banco de dados, fquery);
     if(db_num_rows(queryresult) != 0) db_get_field_assoc(queryresult, "dono da casa", HouseInformation[houseid][owner], 24);
     HouseInformation[houseid][checkpointidx][0] = CreateDynamicCP(EnterX, EnterY, EnterZ, 1.0);
     //CreateDynamicCP(Float:x, Float:y, Float:z, Float:size);
     HouseInformation[houseid][checkpointidx][1] = CreateDynamicCP(TeleX, TeleY, TeleZ, 1.0, 15500000+houseid, Interiorx);
     //CreateDynamicCP(Float:x, Float:y, Float:z, Float:size, worldid, interiorid);
     if(!HouseInformation[houseid][owner][0]) format(fquery, sizeof(fquery), "Nome da casa: %s \n Preço da casa:$%d \n Preço de venda: $%d", HouseName, CostP , SellP);
     else if(HouseInformation[houseid][owner][0] != 0) format(fquery, sizeof(fquery), "Nome da casa: %s \n Proprietário: %s", HouseName, HouseInformation[houseid][owner]) ;
     HouseInformation[houseid][textid] = CreateDynamic3DTextLabel(fquery, 0xFFFFFF, EnterX, EnterY, EnterZ + 0.5, 50.0);
     //CreateDynamic3DTextLabel(const text[], color, Float:x, Float:y, Float:z, Float:drawdistance, attachplayer = INVALID_PLAYER_ID, attachvehicle = INVALID_VEHICLE_ID, testlos = 0, worldid = -1, interiorid = -1, playerid = -1, Float:distância = 100,0);
     caseiro ++;
     retornar 1;
    }


    Agora vamos fazer as nossas pequenas funções que serão usadas mais tarde. Eles são para definir e excluir o proprietário de uma determinada casa. Estamos usando duas consultas SQL básico. Uma inserção ser
    Код:

    Código:
    INSERIR EM [TABELA] ([CAMPO1], [CAMPO2]) VALORES ([VALOR1], [VALOR2])
    TABLENAME - HOUSEINFO
    FIELD1 - nome da casa
    FIELD2 - proprietário
    VALUE1 - Nosso valor de nome de casa
    VALUE2 - Nosso valor do proprietário


    E o outro sendo APAGAR
    Код:

    Código:
    EXCLUIR DE [NOME DA TABELA] ONDE [CAMPO] = [VALOR]
    TABLENAME - HOUSEINFO
    CAMPO - nome da casa
    VALUE - o nome da casa


    ------------------------------**------------------ -------------------------------
    Код:

    Código:
    estoque SetOwner(HouseName[], nome do proprietário[], houseids)
    {
     format(fquery, sizeof(fquery), "INSERT INTO `HOUSEINFO` (`housename`, `houseowner`) VALUES('%s', '%s')", HouseName, ownername);
     db_query(banco de dados, fquery); //SQLITE
     format(HouseInformation[houseids][owner], 24, "%s", nomedoproprietário);
     format(fquery, sizeof(fquery), "Nome da casa: %s \n Proprietário: %s", HouseName, HouseInformation[houseids][owner]);
     UpdateDynamic3DTextLabelText(HouseInformation[houseids][textid], 0xFFFFFF, fquery); //Rótulo de texto.
     retornar 1;
    }

    stock DeleteOwner(HouseName[], houseids)
    {
     format(HouseInformation[houseids][owner], 24, "%s", "\0");
     format(fquery, sizeof(fquery), "DELETE FROM `HOUSEINFO` WHERE `housename` = '%s'", HouseName);
     db_query(banco de dados, fquery); //SQLITE.
     format(fquery, sizeof(fquery), "Nome da casa: %s \n Preço da casa:$%d \n Preço de venda: $%d", HouseName, HouseInformation[houseids][costprice], HouseInformation[houseids][sellprice] );
     UpdateDynamic3DTextLabelText(HouseInformation[houseids][textid], 0xFFFFFF, fquery); //Rótulo de texto.
     retornar 1;
    }


    Antes de fazermos os comandos /comprar e /vender vamos usar o callback OnPlayerEnterDynamicCheckpoint para definir a posição dos jogadores dentro ou fora da casa. oferecemos um loop sinalizador cada checkpoint variável em nossas casas atuais para ver se o ponto de verificação é um dos checkpoints nossa casa.


    Agora, em primeiro lugar verificamos se o jogador é o proprietário para que ele possa entrar imediatamente na casa.
    Se assim for, vamos teleportar ele para dentro da casa.

    Em seguida ele verifica se o jogar é o proprietário se não for enviar uma mensagem para o mesmo.

    Por fim, usamos o callback OnPlayerExitDynamicCP para sair do ponto de verificação
    Код:

    Código:
    public OnPlayerEnterDynamicCP(playerid, checkpointid)
    {
     for(new x; x<houseid; x++) //Percorre todos os IDs de casas atuais.
     {
     if(HouseInformation[x][checkpointidx][0] == checkpointid) //Se o ponto de verificação de entrada for um ponto de verificação de entrada.
     {
     if(InHouse[playerid] != -1)
     {
     Interno[playerid] = -1;
     retornar 1;
     }
     InternoCP[playerid] = x;
     novo Pnome[24];
     GetPlayerName(playerid, Pname, 24);
     if(HouseInformation[x][owner][0] != 0 && !strcmp(Pname, HouseInformation[x][owner][0]))
     {
     SetPlayerPos(playerid, HouseInformation[x][TelePos][0], HouseInformation[x][TelePos][1], HouseInformation[x][TelePos][2]);
     SetPlayerInterior(playerid, HouseInformation[x][interiores]);
     SetPlayerVirtualWorld(playerid, 15500000 + x);
     }
     if(!HouseInformation[x][owner][0]) SendClientMessage(playerid, -1, "Esta casa esta á venda use /comprar para adiquiri-là");
     retornar 1;
     }
     if(HouseInformation[x][checkpointidx][1] == checkpointid)
     {
     if(InHouse[playerid] == -1)
     {
     Interno[playerid] = x;


    Creditos: The_hight



    [Tutorial] Criando casas para vender. D07Xwqb
    [Tutorial] Criando casas para vender. Yjab9HN

      Data/hora atual: Qua 1 maio 2024 - 22:00