[Tutorial] Organizaзгo de Interiores e VirtualWords [Entraveis]
#1

este tutorial й uma dica, de como se organizar bem e facilitar a criaзгo de lugares entraveis em seu GameMode


NOTAS:
  • Eu estou utilizando a include MCF-CP mas nгo й algo essencial
  • Documente bem os Prй-Processamentos ou os deixe, em um local bem visнvel

o que se preocupar?
Vocк armazenara os nomes em matrizes, cada lugar tera seu WD prуprio e vocк nгo deve se preocupar com este numero, apenas com seu respectivo nome.
Quote:

_MUNDO
_PREF_LS
_PREF_SF
_DP_LS

Codficaзгo:
Estбs sгo as informaзхes que precisam de atenзгo posteriormente
PHP код:
enum INTERIOR_INFO
{
    
I_interior,
    
I_nome[32]

a seguir a enumeraзгo de interiores, eles recebem um virtualworld, conforme a ordem, e isso й a grande jogada, vocк nгo se preocupa com nъmeros, apenas com as suas definiзхes, uma dor de cabeзa a menos
PHP код:
enum INTERIORES
{
    
_MUNDO,    
    
_PREF_LS,
    
_PREF_SF,
    
_DP_LS

a ordem de INTERIORES deve ser a mesma de _Interior, para correspondam igualmente.
Capturar as coordenadas corretas:
PHP код:
//primeiro valor й o interior (й a parte visual do mapa que o local pertence)
//segundo valor й o nome (caso precise utilizar em algum momento)
new _Interior[INTERIORES][INTERIOR_INFO]=
{
    {
0,                "Mundo"},
    {
3,                "Prefeitura LS"},
    {
3,                "Prefeitura SF"},
    {
6,                "Delegacia LS"}
}
//sabendo essas informaзхes e as armazenando pode simplesmente esquece-las 
Funзхes e Macros:

PHP код:
//este macro vai te ajudar em diversas aplicaзхes tanto suas quantos de terceiros (SIF,STREAMER,MCF-CP)
#define INTERIOR<%0>    _:%0,_Interior[%0][I_interior]
stock GetWord(i)
    return 
_:i;
stock GetInterior(i)
    return 
_:_Interior[_:i][I_interior];
stock GetInteriorNome(wordid)
    return 
_Interior[_:wordid][I_nome];
//caso nгo tenha um script de teleporte similar, aqui estб o meu:
function TeleportCP(playeridFloat:xFloat:yFloat:z,wd,i)
{
    
SetPlayerInterior(playeridi);
    
SetPlayerPos(playeridx,y,z);
    
SetPlayerVirtualWorld(playeridwd);
    return 
1;

Exemplos extras:

PHP код:
public OnGameModeInit()
{
    
CreateButton(244.898437,73.343383,1003.000,"",INTERIOR<_DP_LS>); // SIF
    
CreateDynamicObject(19273247.7536072.383901004.00000,   0.000000.000000.00000,INTERIOR<_DP_LS>);//Streamer
    
CreateCheckPoint("dp"CP_CIRCLE0x99FF0000249.3933,69.70721003.6406,INTERIOR<_DP_LS>);//MCF-CP
    
return 1;

Exemplo de entraveis:
Nгo documentei e comentei muito este codigo, porque tenho dificuldades de fazer uma explicaзгo extensa,
porem ele estб bastante intuitivo e simples de se entender, nada massivo e complexo!
PHP код:
#include <MCF-CP>
#include <streamer>
//MACROS para facilitar visualisгo e abreviaзгo do codigo
#define TELEPORTE_FROM_POS<%0>    _TELE[%0][FromX],_TELE[%0][FromY],_TELE[%0][FromZ],INTERIOR<INTERIORES:_TELE[%0][Fi]>
#define TELEPORTE_TO_POS<%0>    _TELE[%0][ToX],_TELE[%0][ToY],_TELE[%0][ToZ],INTERIOR<INTERIORES:_TELE[%0][Ti]>
#define MAX_TELEPORTES     5
static CPT[MAX_TELEPORTES];            //CheckPoint Teleporte
static LastCPT[MAX_PLAYERS];        //ultimo CheckPoint de telerpote
enum TELE_INFO
{
    
Float:FromX,
    
Float:FromY,
    
Float:FromZ,
    
Fi,
    
Float:ToX,
    
Float:ToY
    
Float:ToZ,
    
Ti,
    
Tmessage[100]
}
static 
_TELE[MAX_TELEPORTES][TELE_INFO]=
{
    {
246.7840,63.9002,1003.6406,_:_DP_LS,        1553.9879,-1675.4504,16.2953_:_MUNDO"~w~Precisone: ~g~~h~(F)~w~ para sair da delegacia"},
    {
246.3030,87.2807,1003.6406,_:_DP_LS,        1525.4456,-1678.0431,5.8906_:_MUNDO"~w~Precisone: ~g~~h~(F)~w~ para sair da delegacia"},
    {
1553.9879,-1675.4504,16.2953,_:_MUNDO,        246.7840,63.90021003.6406_:_DP_LS"~w~Precisone: ~g~~h~(F)~w~ para entrar na delegacia"},
    {
1568.6914,-1691.1642,5.8906,_:_MUNDO,        246.3030,87.28071003.6406_:_DP_LS"~w~Precisone: ~g~~h~(F)~w~ para entrar na delegacia"},
    {
1525.4456,-1678.0431,5.8906,_:_MUNDO,        246.3030,87.28071003.6406_:_DP_LS"~w~Precisone: ~g~~h~(F)~w~ para entrar na delegacia"},
};
public 
OnGameModeInit()
{
    for(new 
0MAX_TELEPORTESi++)//criaзгo de todos os CheckPoint de teleporte
        
CPT[i]=CreateCheckPoint("entrar"CP_INVISIBLE 0x99FF0000TELEPORTE_FROM_POS<i>);
    
    
//-------------------------------------
    
CreateDynamicPickup(191971,246.7840,63.90021003.64044INTERIOR<_DP_LS>);//visual dos pickups sгo bem bonitos
    
CreateDynamicPickup(191971,246.3030,87.28071003.64044INTERIOR<_DP_LS>);
    
CreateDynamicPickup(191971,1553.9879,-1675.4504,16.2953INTERIOR<_MUNDO>);
    
CreateDynamicPickup(191971,1525.4456,-1678.0431,5.89060INTERIOR<_MUNDO>);
    
CreateDynamicPickup(191971,1568.6914,-1691.1642,5.8906,  INTERIOR<_MUNDO>);
    
//----------------------------------------
    
return 1;
}
CPEnter:entrar(playeridCPID
{
    for(new 
0MAX_TELEPORTESi++)
    {
        if(
IsPlayerInCP(playeridCPT[i]))
        {
            
GameTextForPlayer(playerid_TELE[i][Tmessage], 40004);
            
LastCPT[playerid]=i;
            return 
1;
        }
    }
    return 
1;
}
public 
OnPlayerKeyStateChange(playeridnewkeysoldkeys)
{
    if(
GetPlayerState(playerid) != PLAYER_STATE_ONFOOT)
        return 
1;
    if(!
PRESSED(KEY_SECONDARY_ATTACK))
        return 
1;
    if(
IsPlayerInCP(playerid,CPT[LastCPT[playerid]]))
        return 
TeleportCP(playeridTELEPORTE_TO_POS<LastCPT[playerid]>);
    return 
1;

IMPORTANTE:
estб й a parte que realmente merece atenзгo sua, para criar entraveis, vocк apenas precisa colocar as coordenadas, interiores e textos, o resto jб esta tudo prontinho, organizado, para que facilite ao mбximo a escalabilidade!
PHP код:
static _TELE[MAX_TELEPORTES][TELE_INFO]= 

    {
246.7840,63.9002,1003.6406,_:_DP_LS,        1553.9879,-1675.4504,16.2953_:_MUNDO"~w~Precisone: ~g~~h~(F)~w~ para sair da delegacia"}, 
    {
246.3030,87.2807,1003.6406,_:_DP_LS,        1525.4456,-1678.0431,5.8906_:_MUNDO"~w~Precisone: ~g~~h~(F)~w~ para sair da delegacia"}, 
    {
1553.9879,-1675.4504,16.2953,_:_MUNDO,        246.7840,63.90021003.6406_:_DP_LS"~w~Precisone: ~g~~h~(F)~w~ para entrar na delegacia"}, 
    {
1568.6914,-1691.1642,5.8906,_:_MUNDO,        246.3030,87.28071003.6406_:_DP_LS"~w~Precisone: ~g~~h~(F)~w~ para entrar na delegacia"}, 
    {
1525.4456,-1678.0431,5.8906,_:_MUNDO,        246.3030,87.28071003.6406_:_DP_LS"~w~Precisone: ~g~~h~(F)~w~ para entrar na delegacia"}, 
}; 
Veja como ficou simples e pratico! bons treinos e boa sorte!



CREDITOS:
Quote:
RazorG: Tutorial e Elaboraзгo do Cуdigo!



MULTI COLERED FUNCTIONAL CP:
Forum: https://sampforum.blast.hk/showthread.php?tid=635066
GitHub: https://github.com/RodrigoDornelles/MCF-CheckPoint
Reply


Messages In This Thread

Forum Jump:


Users browsing this thread: 1 Guest(s)