Portal SAMP
[Tutorial] Loja Avancada Com Interior e Apertando F - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Guias e Tutoriais (https://portalsamp.com/forumdisplay.php?fid=7)
+--- Tópico: [Tutorial] Loja Avancada Com Interior e Apertando F (/showthread.php?tid=137)



Loja Avancada Com Interior e Apertando F - SrGhost_ - 16/10/2020

Tutorial

Este E Um Tutorial Para Iniciantes Irei Tentar Deixar O Mais Claro Possível E Com Esse Tutorial Qualquer Vai Sair Desse Post Sabendo Fazer Um Porém Não Depende Do De Min, Vai Da Sua Capacidade E Esforço De Querer Aprender..

Talvez O Post Fica Meio Grande Mas Irei Explicar Tudo Detalhado

Objetivo: Criar Uma Loja De Armas Ou Skins Com Interior E Apertando "F" Para Comprar E Entrar Na Loja Ao Chegar No Pick Up

1° Escolhendo Interior

Iremos Começar Do Início Precisamos De Um Local Para O Personagem Entrar Então Iremos atrás De Um Interior que você pode encontrar No Link Abaixo

Interiores


Após escolher seu interior iremos por em prática na sua Gamemode, para este tutorial irei pegar uma padrão que todos conhecem que no caso ea prefeitura perto da dp


[attachment=3]
[attachment=4]

Como Pode Ver Na Primeira Imagen O Módulo E

Nome/ID/ Coordenadas

Ok, olhou as imagens ? Agora podemos prosseguir..

2° Pegando Posição De Entrada

Vamos De Inicio Pegar As Coordenadas Da Entrada Da Prefeitura, Para Isso Basta Você Ir até o local Próximo A Porta E Usar /save Entrada
( lembrando que precisa estar em algum serve local host ou qualquer um que seja online )

Após Fazer isso abra o arquivo

Documents > GTA San Andreas User Files > SAMP > savedpositions

Abra o arquivo txt e irá aparecer as coordenadas

Aqui está as coordenadas que peguei próximo a porta de prefeitura


AddPlayerClass(23, 1480.9655,-1769.6793,18.7958,0,0,0,0,0,0); // /save

Estará assim Porém ainda Não Podemos Usar Para Definir Nossa Entrada então faremos o seguinte

Não Utilizamos
Utilizamos

23,1480.9655,-1769.6793,18.7958,0,0,0,0,0,0


Então após separar os codigos finalmente podemos botar em prática

Codigo final > 1480.9655,-1769.6793,18.7958

3° Escolhendo Pickup

Bom, precisamos criar um Pick Up na entrada e por isso recomendo a usar esse site para escolher seu id..

Id Dos Pickup

Bom, Irei Escolher O Id 1318 Que No Caso E aquela Seta Branca

[attachment=5]

Ok, tudo pronto escolhemos coordenadas e id do pickup agora vamos por em prática..

4° Criando Pickup

Primeiro você localize sua public Gamemode init


Código:
public OnGameModeInit()
{
    return 1;
}


Como pode ver a public está vazia mas caso já tenha uma não precisa apagar e só adicionar as função na mesma

Agora iremos criar o Pickup


Código PHP:
CreatePickup(131811480.9655,-1769.6793,18.7958); 

Como pode ver colocamos o Id ( 1318)
E essa são nossas coordenadas ( 1480.9655,-1769.6793,18.7958 )

No final ira ficar assim...


Código:
public OnGameModeInit()
{
    CreatePickup(1318, 1, 1480.9655,-1769.6793,18.7958);
    return 1;
}

Após isso seu Pick Up já está criado in game  Big Grin agora vamos colocar a função de ao chegar perto dele nos entrar no interior que escolhemos ali em cima..

5° Definindo Pickup

Iremos colocar o seguinte código no topo do gm


Código PHP:
new EntradaPref
[s]
Agora voltamos na públic Gamemodeinit e faremos o seguinte


Código:
public OnGameModeInit()
{
    EntradaPref = CreatePickup(1318, 1, 1480.9655,-1769.6793,18.7958);
    return 1;
}


Pronto Nosso Pick Up Está Definido  Big Grin

6° Colocando Ação No Pickup

Bom Para Isso Usaremos  A Public OnPlayerPickup


Código PHP:
public OnPlayerPickUpPickup(playeridpickupid)
{
    return 1;


Está aí nossa públic caso não tenha e só copiar e colar no seu gm, agora vamos por em prática..

Primeiro você irá fazer dessa forma


Código PHP:
public OnPlayerPickUpPickup(playeridpickupid)
{
    if(pickupid == EntradaPref)
    {
        SetPlayerInterior(playerid3); 
        SetPlayerPos(playerid385.7066,173.7077,1008.3828);
    }
    return 1;


Aqui colocamos interior 3 que escolhemos no ínicio do tutorial
EA coordenada que está no site do começo do tutorial...

Bom, agora você pode entrar no interior Big Grin  agora teremos que criar a saída correto ? E quase a mesma coisa...

Iremos pegar a posição perto da porta com o /save após isso iremos criar um Pickup

Voltamos novamente na Gamemodeinit e criamos outro Pickup


Código:
public OnGameModeInit()
{
    EntradaPref = CreatePickup(1318, 1, 1480.9655,-1769.6793,18.7958);
    SaidaPref = CreatePickup(1318, 1, 389.4673,173.6694,1008.3828);
    return 1;
}

Pronto aqui já fui direto e já defini o Pickup então não podemos esquecer de definir ele no topo do gm


Código PHP:
new EntradaPref;
new 
SaidaPref

Definimos Os Pickup Eles Já Estão criados agora vamos definir o Pick para sair da loja


Código PHP:
public OnPlayerPickUpPickup(playeridpickupid)
{
    if(pickupid == EntradaPref)
    {
        SetPlayerInterior(playerid3); 
        SetPlayerPos(playerid385.7066,173.7077,1008.3828);
    }
    else if(pickupid == SaidaPref)
    {
        SetPlayerInterior(playerid0); 
        SetPlayerPos(playerid1480.7062,-1766.8220,18.7958);
    }
    return 1;


Como podem ver setamos o Interior 0 que no caso eo mundo externo
Ea posição onde ele irá spawn

OBS: Nunca Esqueça De Colocar O player Pra spawn um pouco a frente do pickup porque se não o personagem fica em um loop infinito entrando e saindo de interior..

Exemplo se o pickup de entrada estiver  criado em (12345) você não pode colocar o pro player spawn em ( 12345 )

7° Textlabel

Já podemos criar a nossa loja mas porém detalhes nunca e d+ né então para deixar um pouco mais daorinha iremos criar um text3d que no caso seria um texto 3d

Bom, para criar usaremos a Gamemodeinit também fazermos da seguinte forma



Código PHP:
Create3DTextLabel(" texto\n texto",corCoordenadas200); 

Isso ea base do Textlabel

Bom, como pode ver as coordenadas nos já temos agora precisamos de uma cor que você pode escolher uma nesse site...

Cores Aqui

Após escolher sua cor vamos por em prática

Nas coordenadas iremos colocar a entrada da prefeitura que no caso ea

Código PHP:
1480.9655,-1769.6793,18.7958 

Então nosso código ficara assim


Código PHP:
Create3DTextLabel(" texto\n texto",cor1480.9655,-1769.6793,18.7958200); 

Já o texto você pode colocar do jeito mas irei colocar um de exemplo

Código PHP:
Create3DTextLabel(" Entrada\n Loja De Armas",cor1480.9655,-1769.6793,18.7958200); 

Bom, ficara assim mas ainda falta a Cor, Irei Escolher Uma Mas Você Pode escolher qualquer uma de sua preferência...

Mas irei fazer de uma forma diferente irei definir uma cor..

No topo do gm junto com as new

Irei colocar
Código PHP:
#define azul 0x46A3FFFF 

No final ficara assim

Código PHP:
new EntradaPref;
new 
SaidaPref;
#define azul 0x46A3FFFF 

Após isso irei deixar o código desse jeito..

Código PHP:
Create3DTextLabel(" Entrada\n Loja De Armas",azul 1480.9655,-1769.6793,18.7958200); 

Prontinho, agora iremos fazer isso com a outra Pick Up no caso a de dentro da prefeitura..

No mesmo local da públic Gamemodeinit

Código PHP:
Create3DTextLabel(" Saida\n Loja De Armas",azul 389.4673,173.6694,1008.3828200); 

Pronto, agora o código final ficara dessa maneira

Código:
public OnGameModeInit()
{
    EntradaPref = CreatePickup(1318, 1, 1480.9655,-1769.6793,18.7958);
    SaidaPref = CreatePickup(1318, 1, 389.4673,173.6694,1008.3828);
    Create3DTextLabel(" Entrada\n Loja De Armas",azul 1480.9655,-1769.6793,18.7958, 20, 0);
    Create3DTextLabel(" Saida\n Loja De Armas",azul 389.4673,173.6694,1008.3828, 20, 0);
    return 1;
}

7° Ícones No mapa

Bom, agora iremos colocar um ícone no mini mapa para isso usaremos

Código PHP:
SetPlayerMapIcon(playeridiconidcoordmarkertypecolor); 

playerid: Deixe sempre assim quer dizer que é pra mostrar o ícone para o id do player que conectar.

iconid: Como esse é o primeiro ícone que você esta colocando, então coloque 1 no proximo 2 e no depois deste 3 e assim adiante...

Coord: As coordenadas de onde vai ficar o ícone

markertype: O id do ícone que você vai por que está na imagem mostrada acima.
color: A Cor do ícone(nuca consegui mudar a cor então deixe 0 mesmo).

Então vamos lá, iremos pegar um id

[attachment=6]

Escolhi o id 6 pois nossa loja será de armar então vamos lá..


Código PHP:
SetPlayerMapIcon(playeridiconidcoord60); 

Agora iremos escolher o local de entrada da loja de armas que no caso pref

Código PHP:
SetPlayerMapIcon(playerid11480.9655,-1769.6793,18.795860); 

Nosso código está pronto agora iremos colocar na public OnPlayerConnect

Código PHP:
public OnPlayerConnect(playerid)
{
    
SetPlayerMapIcon(playerid11480.9655,-1769.6793,18.795860);
    return 
1;



Prontinho está tudo feito


8° Criando O Painel De Compras

iremos criar em dialog pois e mais facil de voces entender..

Código PHP:
ShowPlayerDialog(playerid2500DIALOG_STYLE_LIST"Loja De Armas"" Ak47 \nMp5 ""Selecionar""Fechar"); 

usaremos o  ShowPlayerDialog para ativar a dialog entao no caso

2500 = Id da dialog ( sempre coloque id diferentes pra cada dialog )

DIALOG_STYLE_LIST = Estilo de dialog ( No caso usaremos clicavel )

Loja De Armas = Titulo da dialog

Ak47 = item 1

mp5 = item 2

bom ja temos a base agora vamos colocar a funcao de comprar armas

iremos localizar a public OnDialogResponse caso voce nao tiver basta adicionar em sua gm

Código PHP:
public OnDialogResponse(playeriddialogidresponselistiteminputtext[])
{
    return 1;


e iremos fazer o seguinte

Código PHP:
public OnDialogResponse(playeriddialogidresponselistiteminputtext[])
{
 if(
dialogid == 0)
 {
 if(
response)
 {
 if(
listitem == 0//Ao clicar no primeiro item
        {

         }
         if(listitem == 1//Ao clicar no segundo item
         {

         }
         if(listitem == 2//Ao clicar no segundo item
         {

         }
 }
 }
 return 
1;



Agora Irei Explicar Cada Linha

if(dialogid == 0) > Aqui Iremos Colocar A ID Da Nossa Dialog ( No Caso Escolhemos 2500 Ali Em Cima )

if(listitem == 0) //Ao clicar no primeiro item
        {

         }


Bom Temos Aqui o Primeiro Item E Abaixo As Chaves Onde Nos Ira Colocar Para Setar Arma Ao Player

entao vamos por partes

item 1 sera nossa ak47

entao usaremos

Código PHP:
if(GetPlayerMoney(playerid) < 100) return SendClientMessage(playerid, -1"Voce nao tem R$100 Para Comprar Essa Arma."); 

Sera usado para verificar se o player tem dinheiro o suficiente, esse codigo e meio auto explicativo

Código PHP:
GivePlayerMoney(playerid, -100); 

usaremos essa funcao para cobrar 100 reais ao player por isso sempre deixe -100

Código PHP:
GivePlayerWeapon(playerid3050); 

aqui usaremos a funcao para setar a arma ao player sendo 30 o id da arma e 50 a quantidade de ballas

Código PHP:
SendClientMessage(playeridazul"Compra Efetuada"); 

E Por Ultimo Uma Mensagem...

entao no final ficara assim

Código PHP:
public OnDialogResponse(playeriddialogidresponselistiteminputtext[])
{
 if(
dialogid == 0)
 {
 if(
response)
 {
 if(
listitem == 0//Ao clicar no primeiro item
        {
    if(GetPlayerMoney(playerid) < 100) return SendClientMessage(playerid, -1"Voce nao tem R$100 Para Comprar Essa Arma.");
    GivePlayerMoney(playerid, -100);
    GivePlayerWeapon(playerid3050);
    SendClientMessage(playeridazul"Compra Efetuada");

         }
         if(listitem == 1//Ao clicar no segundo item
         {

         }
 }
 }
 return 
1;


Criamos a acao da ak47 agora iremos colocar a mp5 ea mesma coisa so muda o id da arma

Código PHP:
public OnDialogResponse(playeriddialogidresponselistiteminputtext[])
{
 if(
dialogid == 0)
 {
 if(
response)
 {
 if(
listitem == 0//Ao clicar no primeiro item
        {
             if(GetPlayerMoney(playerid) < 100) return SendClientMessage(playerid, -1"Voce nao tem R$100 Para Comprar Essa Arma.");
             GivePlayerMoney(playerid, -100);
             GivePlayerWeapon(playerid3050);
             SendClientMessage(playeridazul"Compra Efetuada");
         }
         if(listitem == 1//Ao clicar no segundo item
         {
             if(GetPlayerMoney(playerid) < 100) return SendClientMessage(playerid, -1"Voce nao tem R$100 Para Comprar Essa Arma.");
             GivePlayerMoney(playerid, -100);
             GivePlayerWeapon(playerid2950);
             SendClientMessage(playeridazul"Compra Efetuada");
         }
 }
 return 
1;


Pronto criamos a funcao agora vamos colocar para abrir a dialog apertando F

agora va ate o lugar onde voce quer que o player aperta F e use /save apos isso crie um pickup no local apos isso

Localize a Public OnPlayerKeyStateChange Caso Nao Tiver Em Seu GM Basta Criar Uma

Código PHP:
public OnPlayerKeyStateChange(playeridnewkeysoldkeys)
{
 return 
1;


Iremos fazer o seguinte

Código PHP:
public OnPlayerKeyStateChange(playeridnewkeysoldkeys)
{
    if(newkeys == 16)//se apertar f ou enter
    {
        if(IsPlayerInRangeOfPoint(playerid3.0coordenadas))//Verifica se esta na coordenada escolhida
        {
            ShowPlayerDialog(playerid2500DIALOG_STYLE_LIST"Loja De Armas"" Ak47 \nMp5 ""Selecionar""Fechar");
        }
 }
 return 
1;


FIM

Entao e isso esta feito. Esse Eo Primeiro Tutorial Que Fiz Entao Se Estiver Algo Errado Pode Estar Avisando Que Irei Corrigir E Caso Tiver Duvidas Irei Respoder Sem Problemas  Big Grin Espero Ter Ajudado


RE: Loja Avancada Com Interior e Apertando F - NelsonC. - 16/10/2020

Bom tutorial, mas dá para melhorar bastante e também não vejo nada avançado nisso.

Você poderia fazer o sistema dinâmico, criando / editando in-game.


RE: Loja Avancada Com Interior e Apertando F - Silva - 16/10/2020

SetPlayerMapIcon não vai em OnGameModeInit.


RE: Loja Avancada Com Interior e Apertando F - SrGhost_ - 17/10/2020

(16/10/2020 22:22)Silva Escreveu: SetPlayerMapIcon não vai em OnGameModeInit.

Putz Cara E Verdade..

Fica Na public OnPlayerConnect Irei Corrigir...


RE: Loja Avancada Com Interior e Apertando F - Hazard - 17/10/2020

se vocês usam streamer, é só usar isso

Código:
CreateDynamicMapIcon(Float:x, Float:y, Float:z, type, color, worldid = -1, interiorid = -1, playerid = -1, Float:streamdistance = STREAMER_MAP_ICON_SD, style = MAPICON_LOCAL, STREAMER_TAG_AREA areaid = STREAMER_TAG_AREA -1, priority = 0)



RE: Loja Avancada Com Interior e Apertando F - Smith - 06/11/2020

Poderia ser em textdraw


RE: Loja Avancada Com Interior e Apertando F - rafaelkkxj - 24/01/2024

Angel eae irmãzinho poderia me ajudar?
samp037_svr_R2-2-1_win32\gamemodes\tst.pwn(230) : error 017: undefined symbol "coordenadas"
sempre quando vou compilar aparece esse erro, me ajuda pfvv



RE: Loja Avancada Com Interior e Apertando F - Aranha - 24/01/2024

(24/01/2024 15:27)rafaelkkxj Escreveu:
Angel eae irmãzinho poderia me ajudar?
samp037_svr_R2-2-1_win32\gamemodes\tst.pwn(230) : error 017: undefined symbol "coordenadas"
sempre quando vou compilar aparece esse erro, me ajuda pfvv

Qual quer duvida crie um topico nesta aba

https://portalsamp.com/forumdisplay.php?fid=6