SSGamers - 13 Anos online por você.

#SSGamers - A Comunidade que mais crescer no brasil!

Participe do fórum, é rápido e fácil

SSGamers - 13 Anos online por você.

#SSGamers - A Comunidade que mais crescer no brasil!

SSGamers - 13 Anos online por você.

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Chegou o novo tema 6.5.5 - SSGamers - Servidores online de qualidade - Aproveite e entre para nossa comunidade, inscreva-se já! - Ouça nossa web radio - Veja nossas novidades - Participe dos nossos setores de jogos online - Parcerias aberta fale já com um administrador.

    [Tutorial] Criando gangzone dominável por checkpoint

    Weslley_Script
    Weslley_Script
    SS - Fundador
    SS - Fundador


    Steam Steam : WeslleySSGames
    Zello : WeslleySSGames
    Mensagens : 11644
    Moedas : 1032954
    Data de inscrição : 06/10/2011
    Idade : 29
    Localização : Brasil

    [Tutorial] Criando gangzone dominável por checkpoint Empty [Tutorial] Criando gangzone dominável por checkpoint

    Mensagem por Weslley_Script Sáb 8 Abr 2023 - 6:27

    Um amigo me pediu pra mim fazer um tutorial para ele de como criar gangzones domináveis ​​(sei que ja tem inъmeros, mas nunca vi um que mostre o nome da gang ), entгo resolvi postar aqui para todos Farei esse tutorial em 4 partes pra [Tutorial] Criando gangzone dominável por checkpoint Mrgreenninguйm [Tutorial] Criando gangzone dominável por checkpoint Razz

    endoidar [Tutorial] Criando gangzone dominável por checkpoint Mrgreen

    Parte 1
    peão Код:

    Código:
    #include <cpstream> // include para que os checkpoints funcionem

    #define MAX_GANGS 3 // maximo de gangs, aqui no caso serгo 3 gangs

    #define ZONE_TIME 20 // tempo para dominar em segundos

    forward ZoneCheckpointChecker ( ) ; // declara o callback para checar as gangzones

    static cpzone [ MAX_PLAYERS ] [ MAX_GANGS + 1 ] ,lastcp [ MAX_PLAYERS ] ; // getar checkpoint e salvar o ultimo checkpoint em que você passou

    new gang1,gang2,gang3,cpgang1,cpgang2,cpgang3; // declaração dos checkpoints e das gangzones

    new GangNames [ 3 ] [ ]  =  // nome das gangues para aparecer 'A gangue X doiminou mais um território'
    {
        "Gang 1" ,
        "Gang 2" ,
        "Gang 3"
    } ;

    new pgzcolor [ MAX_GANGS + 1 ]  =  // cores para os jogadores
         0x007900AA, 0xFF0080AA, 0x400040AA   // igual
    } ;
    new gzcolor [ MAX_GANGS + 1 ]  =  // núcleos para as gangzones
    {
         0x007900AA, 0xFF0080AA, 0x400040AA  // igual
    } ;


    Explicação parte 1:

    1- As cores para as gangzones e para os players devem ser as mesmas nas duas arrays para não bugar.

    2- É nescessário esses dois arrarys, pois na callback a coré setada pelo player que domina, ai caso o player saia do server a gangzone ainda
    estará com a mesma cor e nгo a original.

    3- Caso for add mais gangs atualize o MAX_GANGS de acordo com a quantidade de gangs e os nomes delas na array GangNames.

    4- Para alterar o tempo que levará para dominar a área, basta alterar o valor de ZONE_TIME em segundos.

    Parte 2
    peão Код:

    Código:
    public OnGameModeInit ( )
    {
         SetTimer ( "ZoneCheckpointChecker" , 1000 , true ) ; // timer para um callback
        //gang 1
         AddPlayerClass ( 101 , 2303.6819 , - 1630.4944 , 14.5754 , 189.4422 , 0 , 0 , 0 , 0 , 0 , 0 ) ; // skin para uma gangue 1
        //gang 2
         AddPlayerClass ( 105 ,2532.4045 , - 1667.5391 , 15.1688 , 83.0852 , 0 , 0 , 0 , 0 , 0 , 0 ) ; // skin paga a gang 2
        // gang 3
         AddPlayerClass ( 108 , 2155.7913 , - 1665.1510 , 15.0859 , 36.2461 , 0 , 0 , 0 , 0 , 0 , 0 ) ; // pele para uma gangue 3

        gang1 = GangZoneCreate ( 2406.349 , -1764.764 , 2573.673 , -1606.855 ) ; _ _ // cria gangzone para uma gangue 1     gang2 = GangZoneCreate ( 1584.936 , - 1745.026 , 1828.318 , - 1516.057 ) ; // cria gangzone para uma gangue 2     gang3 = GangZoneCreate ( 1835.923 , - 1267.349 , 2075.502 , - 1121.283

    ) ; // cria gangzone para uma gangue 3

         cpgang1 = CPS_AddCheckpoint ( 2495.0383 , -1686.9420 , 13.5140 , 2.0 , 80 ) ; // cria checkpoint para gangue 1     cpgang2 = CPS_AddCheckpoint ( 1722.3857 , -1607.7697 , 13.5469 , 2.0 , 80 ) ; // cria checkpoint para gang 2     cpgang3 = CPS_AddCheckpoint ( 1976.1494 , -

    1234.6455 , 20.0469 , 2.0 , 80 ) ; // cria checkpoint para gangue 3
        #pragma não utilizado cpgang1,cpgang2,cpgang3 // declaraзгo de nгo uso para nгo dar warning
        return  1 ;
    }


    Explicação parte 2 :

    1- Mantenha sempre a mesma ordem entre os checkpoints e as gangzones e os GangZoneShowForPlayer para que sejam dominadas corretamente.

    2- Adicione as Classes sempre dividindo as gangues para você não se enrolar depois.

    3- O pragma ali serve para nгo ficar warning de item nгo usado, sempre que for add uma gangue declare ali o checkpoint para nгo dar warning.

    Parte 3

    peão Код:

    Código:
    public OnPlayerRequestClass ( playerid, classid )
    {
        switch ( classid )
        {
            case  0 :
            {
                 GameTextForPlayer ( playerid, GangNames [ 0 ] , 2000 , 3 ) ;  // nome da gangue
                 SetPlayerTeam ( playerid, 0 ) ; // define o tempo para nгo ocorrer teamkill
            }
            case  1 :
            {
                 GameTextForPlayer ( playerid, GangNames [1 ] , 2000 , 3 ) ; // nome da gangue
                 SetPlayerTeam ( playerid, 1 ) ; // define o tempo para nгo ocorrer teamkill
            }
            case  2 :
            {
                 GameTextForPlayer ( playerid, GangNames [ 2 ] , 2000 , 3 ) ; // nome da gangue
                 SetPlayerTeam ( playerid, 2 ) ; // seta o tempo para nгo ocorrer teamkill
            }
         }
         return 1 ;
    }



    Código:
    public OnPlayerLeaveCheckpoint ( playerid )
    {
        if ( lastcp [ playerid ]  >  0  && lastcp [ playerid ]  <= MAX_GANGS + 1 )
        {
             cpzone [ playerid ] [ lastcp [ playerid ] ]  =  0 ;                   // quando o player sai do checkpoint a contagem é reiniciada e o dominio é abortado
             GangZoneStopFlashForAll (lastcp [ playerid ] -1 ) ; _ } retorna 1 ; } public OnPlayerSpawn ( playerid ) { if ( GetPlayerTeam ( playerid ) == 0 ) SetPlayerColor ( playerid, pgzcolor [ 0 ] ) ; // seta o player com a cor da gangue 1 if ( GetPlayerTeam ( playerid ) == 1 ) SetPlayerColor (


       
         




         
       

    Código:
      ID do jogador, pgzcolor [ 1 ] ) ; // define o jogador com a cor da gangue 2
        if ( GetPlayerTeam ( playerid )  ==  2 ) SetPlayerColor ( playerid, pgzcolor [ 2 ] ) ; // define o player com a cor da gangue 3

         GangZoneShowForPlayer ( playerid, gang1, gzcolor [ 0 ] ) ; // mostra a gangzone da gangue 1
         GangZoneShowForPlayer ( playerid, gang2, gzcolor [ 1 ] ) ;// mostra a gangzone da gang 2
         GangZoneShowForPlayer ( playerid, gang3, gzcolor [ 2 ] ) ; // mostra a gangzone da gang 3
        return  1 ;
    }


    Explicação parte 3:

    1- Em OnPlayerRequestClass caso tenha mais de uma class para a mesma gangue, você coloca por exemplo: "case 0 .. 5" caso a classid for de 0 à 5 elas pertencem à gangue X, sempre aumentando os números do SetPlayerTeam de acordo com o número de gangues e ajustando o nome das gangues na matriz GangNames.

    2- A ordem das classids (skins) deve ser a mesma da array GangNames.

    3- Em OnPlayerSpawn mantenha sempre a mesma ordem entre as GangZoneShowForPlayer e os os itens da OnGameModeInit para que sejam dominadas corretamente.

    4- Em GetPlayerTeam e SetPlayerColor as cores são definidas pela array 'pgzcolor' (mantenha sempre na mesma ordem das gangues).

    5- Em GangZoneShowForPlayer as cores são definidas pela array 'gzcolor'


    Parte 4
    peão Код:

    Código:
    public ZoneCheckpointChecker ( )  // callback para checar as gangzones
    {
        new string [ 75 ] ,tmp [ 10 ] ;
        for ( new i; i != MAX_PLAYERS; ++ i )
        {
            if ( ! IsPlayerConnected ( i ) )  continue ;
            if ( CPS_GetPlayerCheckpoint ( i )  >  0  && CPS_GetPlayerCheckpoint ( i ) <= MAX_GANGS + 1  && gzcolor [ CPS_GetPlayerCheckpoint ( i ) - 1 ]  != GetPlayerColor ( i ) )
            {
                if ( cpzone [ i ] [ CPS_GetPlayerCheckpoint ( i ) ]  < ZONE_TIME )
                {
                     cpzone [ i ] [ CPS_GetPlayerCheckpoint ( i ) ] + + ;
                    formato (tmp, sizeof tmp, "~g~%2d/20" , cpzone [ i ] [ CPS_GetPlayerCheckpoint ( i ) ] ) ;
                    GameTextForPlayer ( i, tmp, 1001 , 4 ) ;
                    GangZoneFlashForAll ( CPS_GetPlayerCheckpoint ( i ) -1 , GetPlayerColor ( i ) ) ;
                }
                senão  se ( cpzone [ i ] [CPS_GetPlayerCheckpoint ( i ) ]  == ZONE_TIME )
                {
                     GameTextForPlayer ( i, "~r~Area ~w~Conquistada" , 4000 , 1 ) ;
                    GivePlayerMoney ( i,GetPlayerMoney ( i )  +  100000 ) ;
                    gzcolor [ CPS_GetPlayerCheckpoint ( i ) -1 ] = GetPlayerColor ( i ) ; _
                    GangZoneStopFlashForAll ( CPS_GetPlayerCheckpoint ( i ) -1 ) ; _                 GangZoneHideForAll ( CPS_GetPlayerCheckpoint ( i ) -1 ) ; _                 GangZoneShowForAll ( CPS_GetPlayerCheckpoint ( i ) -1 , GetPlayerColor ( i ) ) ; formato ( string, sizeof ( string ) ,


                    "*>> [GANGZONES]: Uma gangue '{00FF00}%s{FFFF00}' domina mais um territуrio!" ,GangNames [ GetPlayerTeam ( i ) ] [ 0 ] ) ;
                    PlayerPlaySound ( i, 1058 , 0 , 0 , 0 ) ;
                    SendClientMessageToAll ( 0xFFFF00AA, " " ) ;
                    SendClientMessageToAll ( 0xFFFF00AA, string ) ;
                    SendClientMessageToAll ( 0xFFFF00AA, " " );
                }
            }
        }
        retorna  0 ;
    }


    Explicação parte 4:

    1- Quando for mudar o tempo de dominio coloque o mesmo valor no format da callback em ~g~%2d/20, caso for por, por exemplo, 15 segundos, você escreve ~g~%2d/15.

    2- Caso queria mudar a mensagem de dominio apenas mude o formato das gangzones (sem esquecer os parâmeros %s, %d, etc[Tutorial] Criando gangzone dominável por checkpoint Mrgreen).

    #edit

    3- Caso queria mudar a quantia de dinheiro quando dominar a área é so alterar GivePlayerMoney(i,GetPlayerMoney(i) + 100000) para o valor desejado se[Tutorial] Criando gangzone dominável por checkpoint Mrgreen

    falei algum absurdo ai me corrijam [Tutorial] Criando gangzone dominável por checkpoint Mrgreen, thx - Crueliz0n



    [Tutorial] Criando gangzone dominável por checkpoint D07Xwqb
    [Tutorial] Criando gangzone dominável por checkpoint Yjab9HN

      Data/hora atual: Ter 26 Nov 2024 - 13:41