Jump to content
  • 0

pomoc OnPlayerGiveDamage vs OnPlayerTakeDamage aneb kdyz nenajdete chybu


KillBill61

Dotaz

OnPlayerGiveDamage se myslim pouziva kdyz se zkoumaji hacky na freeznuta HP

 

public OnPlayerGiveDamage(playerid, damagedid, Float: amount, weaponid)
{
   GetPlayerHealth(damagedid, heal[damagedid]); //zjistime HP po strelbe
   GetPlayerArmour(damagedid, armo[damagedid]);

   if(armo[damagedid] == 0.0)//pokud nema ammo
   {
if(GetPVarInt(damagedid, "zdravi") == heal[damagedid] && GetPVarInt(damagedid, "zdravi2") == 1)//to prvni je porovnavani HP ktere mam zapsane v PVarInt kde jsou PRAVA HP (nejsou cheatnuta) a pak HP po strelbe a to druhy je pokud je anticheat zapnuty coz je zapnuty protoze nejdou cheatnout napriklad pres //hp coz anticheat zatim bere jako cheat
{
SendClientMessageToAll(0xFF0000AA, "[CHEAT] zdravi!");//info pro me (provizorni zmenim)
SetPlayerHealth(damagedid, GetPVarFloat(damagedid, "zdravi")-10.0);//trestik 
}
}
else//pokud ma ammo
{
if(GetPVarInt(damagedid, "vesta") == armo[damagedid] && GetPVarInt(damagedid, "vesta2") == 1)//vse stejne jako u HP (jedna se ale o vestu)
{
SendClientMessageToAll(0xFF0000AA, "[CHEAT] vesta!");
SetPlayerArmour(damagedid, GetPVarFloat(damagedid, "vesta")-10.0);
}
}
   return 1;
}

nechapu proc anticheat nereaguje - kdyz strilim do hrace ktery nema hacky tak spravne anticheat nereaguje na nic ale kdyz strilim do hrace s freeznutyma HP tak jako kdyby bral ze heal[damagedid] klesnul oproti GetPVarInt(damagedid, "zdravi") ale ve skutecnosti je to furt stejne

PS: GetPVarInt(damagedid, "zdravi") se behem toho nijak nemeni a pokud HP klesnou tak anticheat vi ze klesly a ze se nejedna o cheat a ani je nejak nevraci na puvodni hodnotu

proste jako by ty hacky nechali klesnou HP (ted anticheat kontroluje a nic nezjisti) a potom HP znovu narostou

Link to comment
Share on other sites

3 odpovědí na tuto otázku

Recommended Posts

  • 0

takže ako prve GetPVarInt a GetPVarFloat ti nevratia to iste .. su to 2 rôzne

ak nastavuješ SetPVarInt "zdravi" a potom nastaviš SetPVarFloat "zdravi" tak GetPVarInt "zdravi" ti už vrati 0 kedže zdravi už zmenilo typ na float takže ti to podmienkou neprejde pri overovani .. PRIKLAD k chybe:

 

nastaviš napr. SetPVarInt(playerid,"moj_pvar",10); za tym nastaviš SetPVarFloat(playerid,"moj_pvar",10.0); tak podmienka

if(GetPVarInt(playerid,"moj_pvar")==10) ti neprejde pretože GetPVarInt(playerid,"moj_pvar") ti vrati 0

konkretne to je myslene na podmienke

GetPVarInt(damagedid, "zdravi") == heal[damagedid]

a

 

SetPlayerHealth(damagedid, GetPVarFloat(damagedid, "zdravi")-10.0);

 

 

 

, dalšia vec potrebuješ aj nejak obnoviť tie hodnoty napr. po spawnuti hrača alebo zapojiť do toho aj z OnPlayerTakeDamage ktory sa može vyvolať ked napr. hrač spadne abo sa bude topiť vo vode

 

pri robeni anticheatu musiš pracovať s viacerymi možnymi "pripadmi" inač jeho vyhodnotenia nebudu musieť byť pravdive a bude ti to vypisovať hlašky o cheatoch aj na hračoch ktory ich mať nemusia + terajšie cheaty su natoľko "inteligentne" že vedia rozpoznať či im bolo hp upravene nejakym utokom (strelbou, vybuchom a tak ) alebo boli upravene cez funkciu SetPlayerHealth

a ešte nakoniec ti možem odporučiť postupne si "odchytavaj" bloky kodu a vypisuj si stav kolko ma hodnotu HP a kolko malo pred tym a pomože ti to dojsť k chybam prečo ti niečo neprejde podmienkou a tak

Link to comment
Share on other sites

  • 0

takže ako prve GetPVarInt a GetPVarFloat ti nevratia to iste .. su to 2 rôzne

ak nastavuješ SetPVarInt "zdravi" a potom nastaviš SetPVarFloat "zdravi" tak GetPVarInt "zdravi" ti už vrati 0 kedže zdravi už zmenilo typ na float takže ti to podmienkou neprejde pri overovani .. PRIKLAD k chybe:

 

nastaviš napr. SetPVarInt(playerid,"moj_pvar",10); za tym nastaviš SetPVarFloat(playerid,"moj_pvar",10.0); tak podmienka

if(GetPVarInt(playerid,"moj_pvar")==10) ti neprejde pretože GetPVarInt(playerid,"moj_pvar") ti vrati 0

konkretne to je myslene na podmienke

GetPVarInt(damagedid, "zdravi") == heal[damagedid]

a

 

SetPlayerHealth(damagedid, GetPVarFloat(damagedid, "zdravi")-10.0);

 

 

 

, dalšia vec potrebuješ aj nejak obnoviť tie hodnoty napr. po spawnuti hrača alebo zapojiť do toho aj z OnPlayerTakeDamage ktory sa može vyvolať ked napr. hrač spadne abo sa bude topiť vo vode

 

pri robeni anticheatu musiš pracovať s viacerymi možnymi "pripadmi" inač jeho vyhodnotenia nebudu musieť byť pravdive a bude ti to vypisovať hlašky o cheatoch aj na hračoch ktory ich mať nemusia + terajšie cheaty su natoľko "inteligentne" že vedia rozpoznať či im bolo hp upravene nejakym utokom (strelbou, vybuchom a tak ) alebo boli upravene cez funkciu SetPlayerHealth

a ešte nakoniec ti možem odporučiť postupne si "odchytavaj" bloky kodu a vypisuj si stav kolko ma hodnotu HP a kolko malo pred tym a pomože ti to dojsť k chybam prečo ti niečo neprejde podmienkou a tak

no tyvole! :d prectu si tvou prvni vetu a dojde mi to! :d ja jsem to prepisoval ale kdyz jsem daval CTRL+Z tak jsem se nevsiml ze jsem to vratil moc xD - s tim slohem jsi si dal moc velkou praci - ten zbytek jsem chtel teprv udelat :d

Link to comment
Share on other sites

  • 0

OnPlayerGiveDamage se vyvola kdyz hrac postreli hrace to ovsem nemusi znamenat ze ho zranil (Zraneni je v okamziku, kdyz obet vidi ze byla postrelena.). To muze ovlivnit hodne faktoru, jako terba lagy nebo chyba v synchronizaci.

 

OnPlayerTakeDamage se vyvola pokud hrac byl zranen. Ovsem kdyz pouzijes GetPlayerHealth dostanes zivoty, ktere mnel jeste pred zranenim. Ovsem pokud se pokusis odecist amount tak to taky nebude vzdy fungovat, Pokud do hrace strilis napriklad s uzi, tak se nekdy stane ze GetPlayerHealth odesle zivoty po zraneni

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...