Danos Bugados. -
TatuTM - 04.01.2016
Bom eu tenho um servidor de DeathMatch porem uma coisa muito importante no servidor esta bugado o dano, tipo voce acerta um fast (c-bug voce da varios tiros de eagle rapido na pessoa) e tipo vc acerta 7 tiros de eagle na pessoa so conta 3 tiros na vida/colete da pessoa, olha esse video !
https://www.youtube.com/watch?v=xPiKPOH8n-k
intao й esse o bug vou postar abaixo os codigos:
OnPlayerTakeDamage
Код:
public OnPlayerTakeDamage(playerid,issuerid,Float:amount,weaponid)
{
if(Lagduel[playerid] == false) return 1;
if(weaponid == 24) amount = 32;
if(weaponid == 25) amount = 12;
SetPlayerScore(issuerid,GetPlayerScore(issuerid) + floatround(amount) / 10);
PlayerPlaySound(playerid,6401,0,0,0);
new Float:life;
GetPlayerHealth(playerid,life);
if((life - amount) <= 0)
{
Morto[playerid] = true;
SendDeathMessage(issuerid,playerid,weaponid);
DeadPlayer(playerid,issuerid,weaponid);
}
return 1;
}
OnPlayerGiveDamage
Код:
public OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid)
{
if(Aj[playerid] == false && GetPlayerSpecialAction(playerid) == 2) return SetPlayerHealth(playerid,0);
switch(weaponid)
{
case 24: amount = 32;
case 9: amount = 10;
case 38: amount = 0;
}
if(Morto[damagedid] == true) return 1;
if(Lagduel[damagedid] == true) return 1;
PlayerPlaySound(damagedid,6401,0,0,0);
new Float:Life, Float:Coleete, Float:Dano;
GetPlayerArmour(damagedid,Coleete);
GetPlayerHealth(damagedid,Life);
if(Coleete > 0)
{
if(amount > Coleete)
{
Dano = amount - Coleete;
Life = Life - Dano;
SetPlayerArmour(damagedid, 0.0);
SetPlayerHealth(damagedid, Life);
SetPlayerScore(playerid,GetPlayerScore(playerid) + floatround(amount) / 10);
return 1;
}
SetPlayerScore(playerid,GetPlayerScore(playerid) + floatround(amount) / 10);
Coleete = Coleete - amount;
SetPlayerArmour(damagedid, Coleete);
}
if(Coleete < 1)
{
Life = Life - amount;
SetPlayerScore(playerid,GetPlayerScore(playerid) + floatround(amount) / 10);
SetPlayerHealth(damagedid, Life);
if(Life <= 0)
{
Morto[damagedid] = true;
SendDeathMessage(playerid,damagedid,weaponid);
DeadPlayer(damagedid,playerid,weaponid);
}
}
return 1;
}
Me ajudem por favor !
Re: Danos Bugados. -
arakuta - 04.01.2016
Eu que escrevi esse algoritmo jб tem alguns anos, e melhorei ele no hard a pбrtir da v20 para resolver esse problema que vocк citou. O defeito desse algoritmo й que ele trabalha com vida e colete cliente sided, enquanto meu novo algoritmo calcula tudo 100% server sided, eliminando qualquer problema de lag e ping.
Nгo posso passar o algoritmo atual, pois nгo sou mais o dono do servidor e nгo possuo mais o cуdigo fonte, mas posso te dar uma dica de como criб-lo:
Basta criar duas variбveis, uma per-player para colete e outra per-player para vida.
Hookar as funзхes de SetPlayerHealth para que trabalhem com estar variбveis ou criar novas funзхes.
E entгo sempre calcular qualquer dano usando elas, e entгo apуs os cбlculos todos setar o colete e a vida normalmente (apenas para efeitos visuais).
Caso a variбvel de vida chegue a 0, й sу chamar a funзгo DeadPlayer.
Respuesta: Danos Bugados. -
TatuTM - 04.01.2016
poderia fazer isso pra min no codigo sou meio novo em pawno, por favor, ou tem algum outro topico q fale sobre pra min poder estudar?
Re: Danos Bugados. -
JonathanFeitosa - 04.01.2016
Й extremamente errado fazer sistemas de tirar life no OnPlayerGiveDamage. Bom, nгo irб funcionar. Se vocк acertar um tiro no player na tua tela, vai tirar a vida do player. Sempre irб tirar. Mesmo se na tela de quem tu atirou nгo pegou. Nгo й а toa que o samp criou o famoso 'tiro na skin'.
Respuesta: Danos Bugados. -
TatuTM - 04.01.2016
alguem tem algum outro sistema de tiro na skin que nao tenha bugs ?
Respuesta: Danos Bugados. -
TatuTM - 06.01.2016
alguem ?