[Projeto] Criando GangZones de forma fбcil
#1

E ae, este й meu primeiro tуpico e resolvi atravйs dele disponibilizar alguns comandos que fiz para facilitar a criaзгo de GangZones quando vocк estб iniciando seu gamemode!

Bem, й um cуdigo simples e que fiz usando o Dini (obrigado pelo criador )
Qualquer dъvida/sugestгo sobre o cуdigo, ou mesmo se vocк fez um de uma maneira melhor, deixe abaixo nos comentбrios para que eu possa desenvolver cada vez mais meu conhecimento sobre essa programaзгo!
Obrigado.

Код:
    //Crie a pasta "GangZones" dentro da pasta 'scriptfiles' no diretуrio do seu server
    //Em cima, no inнcio do gamemode, vocк incluн os cуdigos dini e utils.inc para facilitar o uso dos comandos.
    //Coloque as includes apуs a include do 'a_samp'
    //#include <a_samp>
    //#include <dini>
    //#include <utils>

    //A cor que uso abaixo "Vermelho" vocк pode trocar para qualquer outra cor que vc desejar.
    //Caso deseje mantк-la defina a variбvel no topo do gamemode '#define Vermelho 0xEE0000FF     

    //Na OnPlayerCommandText vocк coloca o cуdigo abaixo.
    if(strcmp(cmd, "/loadgz", true) == 0)
    {
       if(PlayerInfo[playerid][pAdmin] < 10) return SendClientMessage(playerid, Vermelho, "Sem permissгo.");
       new GZName[50];
       GZName = strtok(cmdtext, idx);
       if(!strlen(GZName)) return SendClientMessage(playerid, Vermelho, "Use: '/loadgz [nome]'");
       new ArqGZ[64];
       format(ArqGZ, sizeof(ArqGZ), "GangZones/%s.cfg", GZName);
       if(!dini_Exists(ArqGZ)) return SendClientMessage(playerid, Vermelho, "GangZone inexistente, tente outra!");
       new Float:xi, Float:yi, Float:xf, Float:yf;
       xi = dini_Float(ArqGZ, "PosicaoIniX");
       yi = dini_Float(ArqGZ, "PosicaoIniY");
       xf = dini_Float(ArqGZ, "PosicaoFinX");
       yf = dini_Float(ArqGZ, "PosicaoFinY");

       if( (!dini_Isset(ArqGZ, "PosicaoIniX") ) || (!dini_Isset(ArqGZ, "PosicaoIniY")) ) return SendClientMessage(playerid, Vermelho, "Posiзхes iniciais para a GZ nгo foram definidas. Use o comando /criargz no parвmetro 'posini'.");
       if( (!dini_Isset(ArqGZ, "PosicaoFinX") ) || (!dini_Isset(ArqGZ, "PosicaoFinY")) ) return SendClientMessage(playerid, Vermelho, "Posiзхes finais para a GZ nгo foram definidas. Use o comando /criargz no parвmetro 'posfin'.");
       if(dini_Float(ArqGZ, "PosicaoIniX") > dini_Float(ArqGZ, "PosicaoFinX")) xi = dini_Float(ArqGZ, "PosicaoFinX"), xf = dini_Float(ArqGZ, "PosicaoIniX");
       if(dini_Float(ArqGZ, "PosicaoIniY") > dini_Float(ArqGZ, "PosicaoFinY")) yi = dini_Float(ArqGZ, "PosicaoFinY"), yf = dini_Float(ArqGZ, "PosicaoIniY");

       new GangZone;
       GangZone = GangZoneCreate(xi, yi, xf, yf);
       GangZoneShowForAll(GangZone, GZCor);

       format(string, sizeof(string), "GangZoneCreate(%f, %f, %f, %f);", xi, yi, xf, yf);
       dini_Set(ArqGZ, GZName, string);

       new stringg[512];
       format(stringg, sizeof(stringg), "stock IsPlayerIn%s(playerid)\n{\n   new Float:x, Float:y, Float:z;\n   GetPlayerPos(playerid, x, y, z);\n   if(x >= %f && y >=%f && x <= %f && y <= %f) return 1;\n   else return 0;\n}", GZName, xi, yi, xf, yf);
       dini_Set(ArqGZ, "CodeStock", stringg);

       SendClientMessage(playerid, Amarelo, "GangZone carregada com sucesso!");
       return 1;
    }

    if(strcmp(cmd, "/criargz", true) == 0)
    {
       if(PlayerInfo[playerid][pAdmin] < 10) return SendClientMessage(playerid, Vermelho, "Sem permissгo.");
       new GZName[50];
       GZName = strtok(cmdtext, idx);
       if(!strlen(GZName)) return SendClientMessage(playerid, Vermelho, "Use: '/criargz [nomedagz] posini' para pegar coordenada inicial. 'posfin' para final.");
       new opt[50];
       opt = strtok(cmdtext, idx);
       new Float:x, Float:y, Float:z;

       if(!strlen(opt)) return SendClientMessage(playerid, Vermelho, "Usos possнveis do comando: '/criargz [nome] posini' para a posiзгo inicial. '/criargz [nome] posfin' para posiзгo final");

       if(strcmp(opt, "posini", true) == 0)
       {
         GetPlayerPos(playerid, x, y, z);
         new ArquivoGZ[64];
         format(ArquivoGZ, sizeof(ArquivoGZ), "GangZones/%s.cfg", GZName);
         if(!dini_Exists(ArquivoGZ)) dini_Create(ArquivoGZ);
         dini_FloatSet(ArquivoGZ, "PosicaoIniX", x);
         dini_FloatSet(ArquivoGZ, "PosicaoIniY", y);
         SendClientMessage(playerid, Amarelo, "Arquivo com novos dados de inнcio da GangZone criado");
         return 1;
       }

       if(strcmp(opt, "posfin", true) == 0)
       {
         GetPlayerPos(playerid, x, y, z);
         new ArquivoGZ[64];
         format(ArquivoGZ, sizeof(ArquivoGZ), "GangZones/%s.cfg", GZName);
         if(!dini_Exists(ArquivoGZ)) dini_Create(ArquivoGZ);
         dini_FloatSet(ArquivoGZ, "PosicaoFinX", x);
         dini_FloatSet(ArquivoGZ, "PosicaoFinY", y);
         SendClientMessage(playerid, Amarelo, "Arquivo com novos dados de final da GangZone criado");
         return 1;
       }
       return 1;
    }
No jogo, para criar a GangZone, vocк deverб escolher um ponto de inнcio e digitar o comando "/criargz 'nome da gz' 'posini' " apуs feito isso vocк caminharб atй o ponto oposto, imaginando a diagonal do quadrilбtero a ser formado pelos limites da gangzone, e digitarб "/criargz 'mesmo nome anterior' 'posfin' ".
Feito estes dois passos, para visualizar a gangzone e criar a stock + o cуdigo 'GangZoneCreate...', digite /loadgz 'nome da GZ'.

No final do processo, apуs selecionar a бrea de criaзгo da gangzone, vocк terб, dentro da pasta 'GangZones', as coordenadas da criaзгo da gangzone prontas para serem copiadas para o gamemode juntamente com a stock que verifica se o player estб na бrea da GangZone.

Espero que tenha sido ъtil para alguйm.
Reply
#2

Vocк postou na бrea errada =)

Бrea correta:
http://forum.sa-mp.com/forumdisplay.php?f=56

--

Ao invez de ter usado dini, poderia ter usado alguma outra biblioteca mais recente ou entгo poderia usar fread/fwrite
Reply
#3

@Kuddy
Obrigado pelas dicas!

Malz pelo erro na бrea, nem tinha me ligado :/
Reply
#4

pawn Код:
if(PlayerInfo[playerid][pAdmin] < 10) return SendClientMessage(playerid, Vermelho, "Sem permissгo.");
Os cуdigos mudam de GameMode pra gamemode.
Reply
#5

Quote:
Originally Posted by matheus_alcapone
Посмотреть сообщение
pawn Код:
if(PlayerInfo[playerid][pAdmin] < 10) return SendClientMessage(playerid, Vermelho, "Sem permissгo.");
Os cуdigos mudam de GameMode pra gamemode.
To sabendo, mas isso й fбcil de adaptar pra quem for usar. Pode atй excluir essa linha, й sу pra criar uma gangzone de forma fбcil Dps que criar й sу tirar o comando do gamemode.

Vlw pelo feedback ;]
Reply
#6

Poderia ter feito em ZCMD.
Reply
#7

Qual o segredo para criar GangZones?
Reply
#8

LOL ta todo mundo copiando minha assinatura o iFox copiou de mim e o felipe dele
Reply
#9

Quote:
Originally Posted by matheus_alcapone
Посмотреть сообщение
LOL ta todo mundo copiando minha assinatura o iFox copiou de mim e o felipe dele
Coisa de loco й comigo
Reply
#10

Quote:
Originally Posted by matheus_alcapone
Посмотреть сообщение
LOL ta todo mundo copiando minha assinatura o iFox copiou de mim e o felipe dele
essa ass n foi vc que fez
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)