Mostrando postagens com marcador Tutoriais. Mostrar todas as postagens
Mostrando postagens com marcador Tutoriais. Mostrar todas as postagens

[Tutorial] Velocímetro Básico

| |
2 comentários



Primeiramente crie a variável global Timer_Velo de preferencia.
pawn Code:
new Timer_Velo;
Em public OnPlayerStateChange, estará verificando se o estado do jogador é de motorista. Caso seja, irá ser criado um tempo que seguira atualizando.

pawn Code:
public OnPlayerStateChange(playerid, newstate, oldstate) {     if( newstate == PLAYER_STATE_DRIVER)     {         Timer_Velo = SetTimer("KMH", 10, true);     }
Agora vamos declarar a callback, que será chamada ao tempo correspondente.
pawn Code:
forward KMH(playerid); // Atualizado by DartakousLien :p public KMH(playerid) {     new Str[80];     format(Str, sizeof(Str), "~w~KM/H:~g~ %d", GetPlayerSpeed(playerid));     GameTextForPlayer(playerid, Str, false, 6); }
Aqui, criamos uma string, que armazenara o valor da velocidade do jogador, que será chamada por uma stock .Valor correspondente será função GameTextForPlayer.

Agora declaração da função extra, que obterá a velocidade de determinado jogador, ocorrendo um processo de verificação.


Creditos da função desconhecido.
pawn Code:
stock GetPlayerSpeed(playerid) {     new Float:ST[4];     if(IsPlayerInAnyVehicle(playerid))     GetVehicleVelocity(GetPlayerVehicleID(playerid),ST[0],ST[1],ST[2]);     else GetPlayerVelocity(playerid,ST[0],ST[1],ST[2]);     ST[3] = floatsqroot(floatpower(floatabs(ST[0]), 2.0) + floatpower(floatabs(ST[1]), 2.0) + floatpower(floatabs(ST[2]), 2.0)) * 100.3;     return floatround(ST[3]); }
 Em public OnPlayerStateChange vamos verificar, se o estado antigo do jogador era motorista. Assim, toda vez que ele sair de um veículo em que ele estivesse dirigindo, a verificação será chamada.
pawn Code:
public OnPlayerStateChange(playerid, newstate, oldstate) {     if( oldstate == PLAYER_STATE_DRIVER)     {         KillTimer(Timer_Velo );     }
Acima, estamos Destruindo o timer, fazendo que a GameTextForPlayer Desapareça .
A public OnPlayerStateChange deve ficar no final das contas assim :

pawn Code:
public OnPlayerStateChange(playerid, newstate, oldstate) {     if( newstate == PLAYER_STATE_DRIVER)     {         Timer = SetTimer("KMH", 10, true);     }         if( oldstate == PLAYER_STATE_DRIVER)     {         KillTimer(Timer_Velo);     }     return 1; }
Em fim, espero que tenham entendido.
Minhas intenções foram ajudar, estou aqui em casa deu certo, ficou como eu esperava.

Imagens:

--

--
Download ou informações

/siren System [ZCMD]

| |
0 comentários
                                                        COMANDOS:
 /Siren 1  
 /Siren 2  
 /Siren 3  
                                                                     /Siren1                                            
                                                                 /Siren2

                                                                 /Siren3


                                                
Download ou informações

Sistema de Salário para cada Org.

| |
0 comentários
                           Bom aki esta um cod que peguei no forum samp è muito util para
    servidores RPG ,RP emfim é um codigo que seta o salario para cada org
                                                                       

                                                                   PASTEBIN
                                                   
Download ou informações

[Tutorial] Criando gangzone dominável por checkpoint

| |
0 comentários

Olá galera da Detona SAMP, hoje eu vim postar uma tutorial para vocês de como criar gangzones domináveis (sei que já tem inúmeros, mas nunca vi um que mostre o nome da gang), então resolvi postar aqui para todos.

Essa tutorial será divida em 4 partes para ficar mais fácil.


Parte 1


 #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 da 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 gangs para aparecer 'A gang X doiminou mais um território'  
 {  
   "Gang 1",  
   "Gang 2",  
   "Gang 3"  
 };  
 new pgzcolor[MAX_GANGS+1] = // cores para os plaeyrs  
   0x007900AA, 0xFF0080AA, 0x400040AA // igual  
 };  
 new gzcolor[MAX_GANGS+1] = // cores 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- É necessário essas duas arrarys, pois na callback a cor é setada pelo player que dominou, 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, só altere o valor de ZONE_TIME em segundos.


Parte 2


 public OnGameModeInit()  
 {  
   SetTimer("ZoneCheckpointChecker", 1000, true); // timer para a callback  
   //gang 1  
   AddPlayerClass(101,2303.6819,-1630.4944,14.5754,189.4422,0,0,0,0,0,0); // skin para a gang 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); //skin para a gang 3  
   gang1 = GangZoneCreate(2406.349, -1764.764, 2573.673, -1606.855); // cria gangzone para a gang 1  
   gang2 = GangZoneCreate(1584.936, -1745.026, 1828.318, -1516.057); // cria gangzone para a gang 2  
   gang3 = GangZoneCreate(1835.923, -1267.349, 2075.502, -1121.283); // cria gangzone para a gang 3  
   cpgang1 = CPS_AddCheckpoint(2495.0383,-1686.9420,13.5140,2.0,80); // cria checkpoint para gang 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 gang 3  
   #pragma unused 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 gangs para você não se enrolar depois.

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

Parte 3


 public OnPlayerRequestClass(playerid, classid)  
 {  
   switch(classid)  
   {  
     case 0:  
     {  
       GameTextForPlayer(playerid, GangNames[0], 2000, 3); // nome da gang  
       SetPlayerTeam(playerid, 0); // seta o time para não ocorrer teamkill  
     }  
     case 1:  
     {  
       GameTextForPlayer(playerid, GangNames[1], 2000, 3); // nome da gang  
       SetPlayerTeam(playerid, 1); // seta o time para não ocorrer teamkill  
     }  
     case 2:  
     {  
       GameTextForPlayer(playerid, GangNames[2], 2000, 3); // nome da gang  
       SetPlayerTeam(playerid, 2); // seta o time para não ocorrer teamkill  
     }  
    }  
    return 1;  
 }  
 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);  
   }  
   return 1;  
 }  
 public OnPlayerSpawn(playerid)  
 {  
   if(GetPlayerTeam(playerid) == 0) SetPlayerColor(playerid, pgzcolor[0]); // seta o player com a cor da gang 1  
   if(GetPlayerTeam(playerid) == 1) SetPlayerColor(playerid, pgzcolor[1]); // seta o player com a cor da gang 2  
   if(GetPlayerTeam(playerid) == 2) SetPlayerColor(playerid, pgzcolor[2]); // seta o player com a cor da gang 3  
   GangZoneShowForPlayer(playerid, gang1, gzcolor[0]); // mostra a gangzone da gang 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 gang, você coloca por exemplo: "case 0 .. 5" caso a classid for de 0 à 5 elas pertencem à gang X, sempre aumentendo os numeros do SetPlayerTeam de acordo com o numero de gangs e ajustando o nome das gangs na array GangNames.

2- A ordem das classids (skins) devem ser as mesmas 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 setadas pela array 'pgzcolor' (mantenha sempre na mesma ordem das gangs).

5- Em GangZoneShowForPlayer as cores são setadas pela array 'gzcolor' (mantenha sempre na mesma ordem das gangs).

Parte 4

 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)]++;  
         format(tmp, sizeof tmp, "~g~%2d/20", cpzone[i][CPS_GetPlayerCheckpoint(i)]);  
         GameTextForPlayer(i, tmp, 1001, 4);  
         GangZoneFlashForAll(CPS_GetPlayerCheckpoint(i)-1, GetPlayerColor(i));  
       }  
       else if(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));  
         format(string, sizeof(string), "*>> [GANGZONES]: A gang '{00FF00}%s{FFFF00}' dominou mais um território!",GangNames[GetPlayerTeam(i)][0]);  
         PlayerPlaySound(i, 1058, 0, 0, 0);  
         SendClientMessageToAll(0xFFFF00AA, " ");  
         SendClientMessageToAll(0xFFFF00AA, string);  
         SendClientMessageToAll(0xFFFF00AA, " ");  
       }  
     }  
   }  
   return 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 format das gangzones (sem esquecer os parâmeros %s, %d, etc  ).

#edit

3- Caso queria mudar a quantia de dinheiro quando dominar a area é só alterar GivePlayerMoney(i,GetPlayerMoney(i) + 100000) para o valor desejado 


E é isso pessoal, espero que ajude ^^ essa tutorial foi criada por BlackDonelly
Download ou informações

ID PICKUPS

| |
0 comentários
NameIDPreview
Health12401240.png
Armour12421242.png
Info icon12391239.png
Blue house12721273.png
Green house12731272.png
Cash12121212.png
Adrenaline12411241.png
Bribe12471247.png
GTA III sign12481248.png
Bomb from GTA III12521252.png
Photo op12531253.png
Skull12541254.png
Money icon12741274.png
Blue t-shirt12751275.png
Save disk12771277.png
2 Skulls13131313.png
2 Players icon13141314.png
Tiki statue12761276.png
Parachute (with leg straps)13101310.png
Down arrow13181318.png
Drug bundle12791279.png
Download ou informações

DDOS SAMP [2013] With Tutorial

| |
0 comentários
Download ou informações