[Tutorial] Criaзгo de gangzones de um modo simples!
#1

Bom galera, decidi fazer um tutorial sobre um assunto que estava me deixando meio chateado por me dar um pouco de dor de cabeзa..
Nгo sei se isso aconteceu com todos de ao tentar criar uma gangzone ela ficar meio que "bugada", mas enfim, vamos comeзar!

Para resolver este problema fui ler na wiki sa-mp sobre a funзгo GangZoneCreate e vi a seguinte dica para pegar as coordenadas:
Код:
// Como pegar coordenadas.
               (North)
                ymax
            |----------|
            |          |
(West) xmin |          | xmax (East)
            |          |
            |----------|
                ymin
               (South)
Entгo achei uma alternativa para criar gangzone de um modo simples, apenas criando duas funзхes.
As funзхes criadas foram estas:
pawn Код:
stock GangZoneCreateIG(vargz, Float: radius, Float: X, Float: Y)
{
    vargz = GangZoneCreate(X-radius, Y-radius, X+radius, Y+radius);
    GangZoneShowForAll(vargz, 0xC0C0C096);
    printf("(%f, %f, %f, %f)", X-radius, Y-radius, X+radius, Y+radius);
    return true;
}

stock DeleteGangZone(vargz)
    return GangZoneHideForAll(vargz);
Acredito que as funзхes nгo precisam de explicaзхes, porйm, vou resumir o calculo simples que fiz:
pawn Код:
X Min = X - radius // Radius й o perimetro da gangzone.
Y Min = Y - radius // Radius й o perimetro da gangzone.
X Max = X + radius // Radius й o perimetro da gangzone.
Z Max = Y + radius // Radius й o perimetro da gangzone.
Quando usamos a funзгo GangZoneCreateIG ela imprime no sa-mp server as coordenadas para serem colocadas no GangZoneCreate na sequencia correta,
para criar a gangzone e ajustar da forma que eu queria eu criei um gamemode para testes, ele ficou assim:
pawn Код:
#include a_samp
#include zcmd
#include sscanf2

main() return print("Gamemode para testes.");

new gztest;

CMD:criargz(playerid, params[])
{
    new Float: radius, Float: pos[3];
    if(sscanf(params, "f", radius))
        return SendClientMessage(playerid, 0xC0C0C0AA, "Use: /criargz [radius]");
    GetPlayerPos(playerid, pos[0], pos[1], pos[2]);
    GangZoneCreateIG(gztest, radius, pos[0], pos[1]);
    return true;
}

CMD:deletargz(playerid)
{
    DeleteGangZone(gztest);
    return true;
}
Pronto! a partir dai й sу criar e deletar a gangzone aumentando/diminuindo o parвmetro "radius" atй ficar como deseja..
por agora й sу isso, й meu primeiro tutorial entгo por favor peguem leve.. Obrigado pela atenзгo!
Reply
#2

UP: Dicas para o prуximo tutorial :/
Reply
#3

Legal parceiro, ensina a fazer um sistema completo se for possнvel, pois algo bem explicado em pt_br eu ainda nгo vi.

+5
Reply
#4

Entendi seu tutorial , nгo entendia muito de GangZone agora entendi um pouco.
+ Rep
Reply
#5

Quote:
Originally Posted by Schocc
Посмотреть сообщение
Legal parceiro, ensina a fazer um sistema completo se for possнvel, pois algo bem explicado em pt_br eu ainda nгo vi.

+5
Assim que tiver tempo livre irei fazer, agora estou trabalhando no sistema de gangs civis do meu gamemode.. Jб criei as funзхes:
pawn Код:
native CreateGang(playerid, gangname[]);
native LoadGangs();
native LoadGang(gangid);
native CheckGang(playerid);
native ClearSlot(slotid);
native InputMember(membername[]);
native GangZoneCreateIG(vargz, Float: radius, Float: X, Float: Y);
native DeleteGangZone(vargz);
estou pensando em postar como FS mas nгo sei se devo :/
Quote:
Originally Posted by Patrick141
Посмотреть сообщение
Entendi seu tutorial , nгo entendia muito de GangZone agora entendi um pouco.
+ Rep
Obrigado pelo comentбrio! Eu tambйm nгo entendia muito.. Quando descobri este calculo melhorou minha vida e muito kk
Reply
#6

Boa idйia, mas infelizmente nem sempre a GZ vai ter lados idкnticos
Reply
#7

Quote:
Originally Posted by ViniBorn
Посмотреть сообщение
Boa idйia, mas infelizmente nem sempre a GZ vai ter lados idкnticos
Й sу fazer uma modificaзгo na parte do calculo para criar a gangzone..

Funзгo com X e Y ajustбvel:
pawn Код:
stock GangZoneCreateIG(vargz, Float: radius_x, Float: radius_y, Float: X, Float: Y)
{
    vargz = GangZoneCreate(X-radius_x, Y-radius_y, X+radius_x, Y+radius_y);
    GangZoneShowForAll(vargz, 0xC0C0C096);
    printf("(%f, %f, %f, %f)", X-radius_x, Y-radius_y, X+radius_x, Y+radius_y);
    return true;
}
Novo comando:
pawn Код:
new gztest;
CMD:criargz(playerid, params[])
{
    new Float: radius[2], Float: pos[3];
    if(sscanf(params, "ff", radius[0], radius[1]))
        return SendClientMessage(playerid, 0xC0C0C0AA, "Use: /criargz [radius x] [radius y]");
    GetPlayerPos(playerid, pos[0], pos[1], pos[2]);
    GangZoneCreateIG(gztest, radius[0], radius[1], pos[0], pos[1]);
    return true;
}
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)