Arvore_OnPlayerKeyStateChange(playerid, newkeys, oldkeys) { for(new i = 0; i < MAX_ARVORES; i++) { if(IsPlayerInRangeOfPoint(playerid, 1.0, Arvores[i][0], Arvores[i][1], Arvores[i][2])) { if(PRESSED(KEY_FIRE)) { if(ArvoreVida[i] != 0) { Bateu[i]++; ArvoreVida[i] -= 5; PlayerPlaySound(playerid,1190,0.0,0.0,0.0); if(Bateu[i] == 20 || ArvoreVida[i] <= 0) { MatarArvore(i); Bateu[i] = 0; pInfo[playerid][pMadeira] += 5; GameTextForPlayer(playerid,"~w~+5 Madeiras",2500, 3); SendClientMessage(playerid, -1, "Veja quantas madeiras / metais vocк tem use /metais"); } }else{ SendClientMessage(playerid, 0xA3A3A3FF, "essa arvore jб foi cortada!!"); } } } } return 1; }
new lastTreeHit[MAX_PLAYERS] = {0, 0, 0, ...}; //variбvel pra controlar o tempo da ъltima vez que ele bateu na бrvore
Arvore_OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if(PRESSED(KEY_FIRE)) //Como hб uma grande quantidade de telcas que chamam esta callback, vocк deve checar se o jogador apertou a tecla que vocк quer logo no inнcio para nгo desperdiзar processamento
{
if ((GetTickCount() - lastTreeHit[playerid]) > 1000) //Checa se jб passou 1 segundo
{
for(new i = 0; i < MAX_ARVORES; i++)
{
if(IsPlayerInRangeOfPoint(playerid, 1.0, Arvores[i][0], Arvores[i][1], Arvores[i][2]))
{
if(ArvoreVida[i] != 0)
{
lastTreeHit[playerid] = GetTickCount(); //Salva o tempo atual
Bateu[i]++;
ArvoreVida[i] -= 5;
PlayerPlaySound(playerid,1190,0.0,0.0,0.0);
if(Bateu[i] == 20 || ArvoreVida[i] <= 0)
{
MatarArvore(i);
Bateu[i] = 0;
pInfo[playerid][pMadeira] += 5;
GameTextForPlayer(playerid,"~w~+5 Madeiras",2500, 3);
SendClientMessage(playerid, -1, "Veja quantas madeiras / metais vocк tem use /metais");
}
} else {
SendClientMessage(playerid, 0xA3A3A3FF, "essa arvore jб foi cortada!!");
}
}
}
}
}
return 1;
}
// crio uma variбvel para armazenar o valor do gettime.
new intTempo[MAX_PLAYERS];
Arvore_OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
for(new i = 0; i < MAX_ARVORES; i++)
{
if(IsPlayerInRangeOfPoint(playerid, 1.0, Arvores[i][0], Arvores[i][1], Arvores[i][2]))
{
if(PRESSED(KEY_FIRE))
{
if(ArvoreVida[i] != 0)
{
// se o tempo que peguei agora menos o tempo que peguei anteriormente for maior que 2 (segundos) continuo a funзгo
if((gettime() - intTempo[playerid]) > 2 )
{
Bateu[i]++;
ArvoreVida[i] -= 5;
PlayerPlaySound(playerid,1190,0.0,0.0,0.0);
intTempo[playerid] = gettime();
if(Bateu[i] == 20 || ArvoreVida[i] <= 0)
{
MatarArvore(i);
Bateu[i] = 0;
pInfo[playerid][pMadeira] += 5;
GameTextForPlayer(playerid,"~w~+5 Madeiras",2500, 3);
SendClientMessage(playerid, -1, "Veja quantas madeiras / metais vocк tem use /metais");
}
}
else return Send(playerid, -1, "Erro clicou muito rapido");
}
else
{
SendClientMessage(playerid, 0xA3A3A3FF, "essa arvore jб foi cortada!!");
}
}
}
}
return 1;
}
Vocк tem duas Opзхes SetTimerEx() ou gettime(), recomendo que utilize a funзгo gettime.
Exemplo: PHP код:
|
Arvore_OnPlayerKeyStateChange(playerid, newkeys, oldkeys) { if(pInfo[playerid][EstaJogando] == 1) { for(new i = 0; i < MAX_ARVORES; i++) { if(IsPlayerInRangeOfPoint(playerid, 1.0, Arvores[i][0], Arvores[i][1], Arvores[i][2])) { if(PRESSED(KEY_FIRE)) { if(ArvoreVida[i] != 0) { TogglePlayerControllable(playerid, 0); ApplyAnimation(playerid, "BASEBALL", "Bat_3", 4, false, 1, 1, 0, 2000, 1); if((gettime() - intTempo[playerid]) > 2 ) { Bateu[i]++; ArvoreVida[i] -= 10; PlayerPlaySound(playerid,1190,0.0,0.0,0.0); TogglePlayerControllable(playerid, 1); ClearAnimations(playerid); intTempo[playerid] = gettime(); if(Bateu[i] == 10 || ArvoreVida[i] <= 0) { MatarArvore(i); Bateu[i] = 0; pInfo[playerid][pMadeira] += 5; GameTextForPlayer(playerid,"~w~+5 Madeiras",2500, 3); SendClientMessage(playerid, -1, "Veja quantas madeiras / metais vocк tem use /metais"); } } }else{ SendClientMessage(playerid, 0xA3A3A3FF, "essa arvore jб foi cortada!!"); } } } } } return 1; }
vlw man, slg eu coloquei pra qnd o jogador bater ele ficar travado mas tem horas que buga e n conseuge mais se mexer
olha como eu fiz Код:
Arvore_OnPlayerKeyStateChange(playerid, newkeys, oldkeys) { if(pInfo[playerid][EstaJogando] == 1) { for(new i = 0; i < MAX_ARVORES; i++) { if(IsPlayerInRangeOfPoint(playerid, 1.0, Arvores[i][0], Arvores[i][1], Arvores[i][2])) { if(PRESSED(KEY_FIRE)) { if(ArvoreVida[i] != 0) { TogglePlayerControllable(playerid, 0); ApplyAnimation(playerid, "BASEBALL", "Bat_3", 4, false, 1, 1, 0, 2000, 1); if((gettime() - intTempo[playerid]) > 2 ) { Bateu[i]++; ArvoreVida[i] -= 10; PlayerPlaySound(playerid,1190,0.0,0.0,0.0); TogglePlayerControllable(playerid, 1); ClearAnimations(playerid); intTempo[playerid] = gettime(); if(Bateu[i] == 10 || ArvoreVida[i] <= 0) { MatarArvore(i); Bateu[i] = 0; pInfo[playerid][pMadeira] += 5; GameTextForPlayer(playerid,"~w~+5 Madeiras",2500, 3); SendClientMessage(playerid, -1, "Veja quantas madeiras / metais vocк tem use /metais"); } } }else{ SendClientMessage(playerid, 0xA3A3A3FF, "essa arvore jб foi cortada!!"); } } } } } return 1; } |
Arvore_OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if(pInfo[playerid][EstaJogando] == 1)
{
for(new i = 0; i < MAX_ARVORES; i++)
{
if(IsPlayerInRangeOfPoint(playerid, 1.0, Arvores[i][0], Arvores[i][1], Arvores[i][2]))
{
if(PRESSED(KEY_FIRE))
{
if(ArvoreVida[i] != 0)
{
TogglePlayerControllable(playerid, 0); // congelado
ApplyAnimation(playerid, "BASEBALL", "Bat_3", 4, false, 1, 1, 0, 2000, 1); // animaзгo de 2000 ms
SetTimerEx("descongelarLenhador", 2000, false, "i", playerid); // desparo o timer para 2000 ms
if((gettime() - intTempo[playerid]) > 2 )
{
Bateu[i]++;
ArvoreVida[i] -= 10;
PlayerPlaySound(playerid,1190,0.0,0.0,0.0);
ClearAnimations(playerid);
intTempo[playerid] = gettime();
if(Bateu[i] == 10 || ArvoreVida[i] <= 0)
{
MatarArvore(i);
Bateu[i] = 0;
pInfo[playerid][pMadeira] += 5;
GameTextForPlayer(playerid,"~w~+5 Madeiras",2500, 3);
SendClientMessage(playerid, -1, "Veja quantas madeiras / metais vocк tem use /metais");
}
}
}
else
{
SendClientMessage(playerid, 0xA3A3A3FF, "essa arvore jб foi cortada!!");
}
}
}
}
}
return 1;
}
forward descongelarLenhador(playerid); public descongelarLenhador(playerid)
{
ClearAnimations(playerid);
TogglePlayerControllable(playerid, 1);
SendClientMessage(playerid, -1, "[DEBUG] DESCONGELADO");
return 1;
}
dispare um timer com o tempo da animaзгo:
PHP код:
|
Arvore_OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if(pInfo[playerid][EstaJogando] == 1)
{
for(new i = 0; i < MAX_ARVORES; i++)
{
if(IsPlayerInRangeOfPoint(playerid, 1.0, Arvores[i][0], Arvores[i][1], Arvores[i][2]))
{
if(PRESSED(KEY_FIRE))
{
if(ArvoreVida[i] != 0)
{
TogglePlayerControllable(playerid, 0);
ApplyAnimation(playerid, "BASEBALL", "Bat_3", 4, false, 1, 1, 0, 1000, 1);
SetTimerEx("controle", segundos(2), false, "i", playerid);
if((gettime() - intTempo[playerid]) > 2 )
{
Bateu[i]++;
ArvoreVida[i] -= 10;
PlayerPlaySound(playerid,1190,0.0,0.0,0.0);
ClearAnimations(playerid);
intTempo[playerid] = gettime();
if(Bateu[i] == 10 || ArvoreVida[i] <= 0)
{
MatarArvore(i);
Bateu[i] = 0;
pInfo[playerid][pMadeira] += 5;
GameTextForPlayer(playerid,"~w~+5 Madeiras",2500, 3);
SendClientMessage(playerid, -1, "Veja quantas madeiras / metais vocк tem use /metais");
}
}
}else{
SendClientMessage(playerid, 0xA3A3A3FF, "essa arvore jб foi cortada!!");
}
}
}
}
}
return 1;
}
forward controle(playerid);
public controle(playerid)
{
ClearAnimations(playerid);
TogglePlayerControllable(playerid,0);
TogglePlayerControllable(playerid,1);
return 1;
}