04.04.2018, 19:22
(
Последний раз редактировалось RazorGuigo; 04.04.2018 в 20:17.
)
este tutorial й uma dica, de como se organizar bem e facilitar a criaзгo de lugares entraveis em seu GameMode
NOTAS:
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.
Codficaзгo:
Estбs sгo as informaзхes que precisam de atenзгo posteriormente
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
a ordem de INTERIORES deve ser a mesma de _Interior, para correspondam igualmente.
Capturar as coordenadas corretas:
Funзхes e Macros:
Exemplos extras:
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!
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!
Veja como ficou simples e pratico! bons treinos e boa sorte!
CREDITOS:
MULTI COLERED FUNCTIONAL CP:
Forum: https://sampforum.blast.hk/showthread.php?tid=635066
GitHub: https://github.com/RodrigoDornelles/MCF-CheckPoint
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 |
Estбs sгo as informaзхes que precisam de atenзгo posteriormente
PHP код:
enum INTERIOR_INFO
{
I_interior,
I_nome[32]
}
PHP код:
enum INTERIORES
{
_MUNDO,
_PREF_LS,
_PREF_SF,
_DP_LS
}
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
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(playerid, Float:x, Float:y, Float:z,wd,i)
{
SetPlayerInterior(playerid, i);
SetPlayerPos(playerid, x,y,z);
SetPlayerVirtualWorld(playerid, wd);
return 1;
}
PHP код:
public OnGameModeInit()
{
CreateButton(244.898437,73.343383,1003.000,"",INTERIOR<_DP_LS>); // SIF
CreateDynamicObject(19273, 247.75360, 72.38390, 1004.00000, 0.00000, 0.00000, 0.00000,INTERIOR<_DP_LS>);//Streamer
CreateCheckPoint("dp", CP_CIRCLE, 0x99FF0000, 249.3933,69.7072, 1003.6406,INTERIOR<_DP_LS>);//MCF-CP
return 1;
}
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.9002, 1003.6406, _:_DP_LS, "~w~Precisone: ~g~~h~(F)~w~ para entrar na delegacia"},
{1568.6914,-1691.1642,5.8906,_:_MUNDO, 246.3030,87.2807, 1003.6406, _:_DP_LS, "~w~Precisone: ~g~~h~(F)~w~ para entrar na delegacia"},
{1525.4456,-1678.0431,5.8906,_:_MUNDO, 246.3030,87.2807, 1003.6406, _:_DP_LS, "~w~Precisone: ~g~~h~(F)~w~ para entrar na delegacia"},
};
public OnGameModeInit()
{
for(new i = 0; i < MAX_TELEPORTES; i++)//criaзгo de todos os CheckPoint de teleporte
CPT[i]=CreateCheckPoint("entrar", CP_INVISIBLE , 0x99FF0000, TELEPORTE_FROM_POS<i>);
//-------------------------------------
CreateDynamicPickup(19197, 1,246.7840,63.9002, 1003.64044, INTERIOR<_DP_LS>);//visual dos pickups sгo bem bonitos
CreateDynamicPickup(19197, 1,246.3030,87.2807, 1003.64044, INTERIOR<_DP_LS>);
CreateDynamicPickup(19197, 1,1553.9879,-1675.4504,16.2953, INTERIOR<_MUNDO>);
CreateDynamicPickup(19197, 1,1525.4456,-1678.0431,5.89060, INTERIOR<_MUNDO>);
CreateDynamicPickup(19197, 1,1568.6914,-1691.1642,5.8906, INTERIOR<_MUNDO>);
//----------------------------------------
return 1;
}
CPEnter:entrar(playerid, CPID)
{
for(new i = 0; i < MAX_TELEPORTES; i++)
{
if(IsPlayerInCP(playerid, CPT[i]))
{
GameTextForPlayer(playerid, _TELE[i][Tmessage], 4000, 4);
LastCPT[playerid]=i;
return 1;
}
}
return 1;
}
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if(GetPlayerState(playerid) != PLAYER_STATE_ONFOOT)
return 1;
if(!PRESSED(KEY_SECONDARY_ATTACK))
return 1;
if(IsPlayerInCP(playerid,CPT[LastCPT[playerid]]))
return TeleportCP(playerid, TELEPORTE_TO_POS<LastCPT[playerid]>);
return 1;
}
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.9002, 1003.6406, _:_DP_LS, "~w~Precisone: ~g~~h~(F)~w~ para entrar na delegacia"},
{1568.6914,-1691.1642,5.8906,_:_MUNDO, 246.3030,87.2807, 1003.6406, _:_DP_LS, "~w~Precisone: ~g~~h~(F)~w~ para entrar na delegacia"},
{1525.4456,-1678.0431,5.8906,_:_MUNDO, 246.3030,87.2807, 1003.6406, _:_DP_LS, "~w~Precisone: ~g~~h~(F)~w~ para entrar na delegacia"},
};
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