[Ajuda] PickupIcon, MapIcon e TextLabel automatico
#1

O caso era o seguinte:

A base do meu server й o PPC_Trucking, e estou formatando-o а meu modo. Pesquisei aqui no forum e aprendi todo o passo а passo pra criar uma oficina а cйu aberto, pra podermos usar comandos para trocar a cor do veiculo, adicionar neon e etc. Porйm, mesmo sabendo criar o 3DTextLabel, PickupIcon, percebi algo MUITO FACIL, e que me ajudou MUITO na criaзгo de Oficinas. Enfim, vou tentar explicar o que fiz.

Para os Pontos de Abastecimento do PPC_Trucking, existe uma serie de scripts que, juntos, permitem que seja criado o PickupIcon, 3DTextLabel e MapIcon apenas com a inserзгo das coordenadas. Como teste, editei uma das coordenadas do "AddRefuelPickup" para um outro local, e funcionou como eu imaginava: Foram gerados automaticamente o 3DTextLabel, o MapIcon e o Pickup nas coordenadas que determinei, e os comandos relacionados ao local tbm funcionaram.

O problema:

Eu queria criar um script para criaзгo de OFICINA, que adicionasse automaticamente os icones e textos para as coordenadas especificadas, como ocorre com o Ponto de Abastecimento.

A soluзгo:

Primeiro descartei a ideia de usar MapIcon e PickUp, por considerar desnecessario, pois criei as oficinas proximas a postos de abastecimento que jб tem MapIcon atrelado, e "andando pelo mapa" a propria 3DTextlabel identifica o local da Oficina quando nos aproximamos dele.

Entгo comecei a "copiar" os parametros dos Postos de Abastecimento, fazendo as devidas adaptaзхes para a "Oficina", da seguinte forma:

Na include PPC_Defines:

PHP код:
//Adicionei os enumeradores:
enum TOficinaData
{
    
Float:tx,
    
Float:ty,
    
Float:tz,
    
Local
}
new 
AOficinaPickup[50][TOficinaData]; 
Na include PPC_GameModeInit:

PHP код:
GameModeInit_VehiclesPickups()
{
       
GameModeInit_PickupsIcons();//Na propria include jб tem isso, mas pode ser mudado se preferir
}
//Em outra parte mais abaixo, na mesma include, adicionaremos isso isso:
GameModeInit_PickupsIcons()
{
//Aqui pode ser especificada qualquer coordenada, no formato (x,y,z)
       
AddOficinaPickup(1911.27, -1776.1413.38);
}
//Mais abaixo, na mesma include
AddOficinaPickup(Float:xFloat:yFloat:z)
{
    
    for (new 
isizeof(AOficinaPickup); i++)
    {
        if (
AOficinaPickup[i][Local] == 0)
        {
            
AOficinaPickup[i][tx] = x;
            
AOficinaPickup[i][ty] = y;
            
AOficinaPickup[i][tz] = z;
            
Create3DTextLabel(TXT_Oficina0xFFFF00AAxy0.830.00);
                        
//A TXT_Oficina й o texto que aparcerб na 3DTextLabel, que vamos setar depois em outra Include.
            
break;
        }
    }

Na include PPC_DefTexts:
Aqui defini o texto que aparecerб no lugar de "TXT_Oficina" em "Create3DTextLabel(TXT_Oficina (...) );"

PHP код:
//Eu coloquei nessa include, por ser a padrгo para os textos desse GM
#define TXT_Oficina "{FFFF00}Digite o \"/comando\"\n de sua Oficina" 
Depois disso foi sу compilar o GM e definir os comandos que serгo utilizados na Oficina. Mas como o GM vai saber se estou na Oficina ou nгo?

Simples, basta incluir no comando a funзгo "IsPlayerInRangeOfPoint":

PHP код:
if(IsPlayerInRangeOfPoint(playerid10.0AOficinaPickups[i][tx], AOficinaPickups[i][ty], AOficinaPickups[i][tz])) 
Enfim, muitas coisas nгo sei explicar direito, entгo nгo me aprofundei em detalhes pra nгo confundir mais ainda. Embora nгo seja criado nenhum MapIcon ou PickUp para a oficina, й possivel adicionar isso posteriormente. Quem jб teve contato com o PPC_Trucking vai identificar facilmente a estrutura das PickUps "ARefuelPickup" e adaptadar para a "AOficinaPickup".

Espero que meu tуpico sirva de ajuda para alguem.
Reply
#2

Ninguem? :-/
Reply
#3

Nгo estб muito bem esclarecida a sua dъvida.

Especifique-se melhor.
Reply
#4

Criar script que de crie MapIcons, 3DTextLabel e PickupIcon automaticamente, como dos Pontos de Abastecimento citados acima, mas para criaзгo de Oficina de Pintura.
Reply
#5

Pq nгo faz manual? o.O
Reply
#6

Stroon, sei que й "preguiзa", mas alйm de facilitar o uso, acaba dixando mais organizado, por exemplo, pra cada coordenada tenho que gerar os 3 itens, enquanto o sistema que usaram no GM deixa apenas os 3 scripts genericos pra criar tais itens, bastando apenas digitar "AddRefuelPickup" com as coordenadas que o proprio script s encarrega de fazer o resto
Reply
#7

Copie tudo, altere de rufuel para oficina em todas as variavei, altere o numero da pickup, altere o define do texto da 3d text label, e pronto, ou entao resconstrua um codigo seu... Usando salvamento e ler o ficheiro..
Reply
#8

Vlw Venuz, vou tentar de novo, pq fiz isso e deu varios erros, deve haver algo do "ARefuel" que dveria sr criado para "AOficina" mas nгo encontrei :/
Reply
#9

Galera, voltando ao topico pra avisar: CONSEGUI O QUE EU QUERIA!!!

Antes eu tinha que fazer isso:

-Pegar as coordenadas
-Definir a coordenada como Oficina1, Oficina2, e etc, conforme a quantidade e necessidade
-Criar o 3DTextLabel pro local
-Criar o PickupIcon no local
-Criar o MapIcon pro local


Agora, a unica coisa que faзo, й escrever isso na Include:

"AddOficinaPickup(233.5481,64.8072,2.8994)"

E pronto, tudo o que eu tinha que criar um por um, й criado na coordenada especificada automaticamente, sem dor de cabeзa.


O problema estava na include "PlayerCommands" que primeiro definia os locais das oficinas dessa forma:

PHP код:
#define Oficina1 IsPlayerInRangeOfPoint(playerid, 2.5, -47.7836, 270.6917, 2.2500)
#define Oficina2 IsPlayerInRangeOfPoint(playerid, 10.0, 24.6492, 2418.9697, 22.7578)
#define Oficina3 IsPlayerInRangeOfPoint(playerid, 3.0, 1348.4963, 946.5101, 10.5252)
#define Oficina4 IsPlayerInRangeOfPoint(playerid, 4.0, -547.3569,507.0492,2.5933) 
E depois no Script do comando ficava assim:

PHP код:
 if(Oficina1 || Oficina2 || Oficina3 || Oficina4
Reply
#10

Consegui galera, atualizei tudo no primeiro post

Esse post era de uma duvida minha que nг ohavia sido solucionada por completo, mas agora enfim consegui editar o script como eu queria. Entгo atualizei o primeiro post para adicionar as informaзхes necessarias para solucionar o problema

Antes eu tinha que pegar as coordenadas e setar cada oficina com o "#define Oficina", e depois ainda tinha que incluir a respectiva oficina no comando, caso contrбrio o comando nao funcionava naquele local.

Agora, com o o script generico do "IsPlayerInRangeOfPoint" basta adicionar as coordenadas em "AddOficinaPickups(X ,Y,Z)", e MAIS NADA, e os comandos funcionam normalmente sem precisar altera-los a cada oficina adicionada

Ressucitei o topico pq hб tempos atrбs meu HD queimou, e perdi todas as modificaзхes que eu havia feito no GM, e agora que estou editando tudo de novo desde o inicio. Desculpem por dar esse "Bump" em topico meu jб antigo, mas acredito que isso possa ajudar а mais alguem.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)