public OnPlayerGiveDamage(playerid, damagedid, Float: amount, weaponid){ new Float: elet, Float: pancel; GetPlayerArmour(damagedid, pancel); GetPlayerHealth(damagedid, elet); if(pancel == 0) return SetPlayerHealth(damagedid, elet-amount); return 1;}
Egész jó, csak egy baj van.. Ha van páncélmellénye, akkor is az életét veszi le.Ha ezt megoldod, akkor tökéletes.
De ha örök élete van, akkor mit számít ha a meglévõ életpontjaiból levonsz valamennyit?Tárolni kellene az élet pontjait a játékosoknak, majd annak az értéket állítgatni az OnPlayerGiveDamage alatt, majd az alapján beállítani az életpontjait.Ez alapján még ki is lehet szûrni, hogy mire vegyen le életet, és mire nem a játékosnak.
new Float:pArmor;GetPlayerArmour(playerid, pArmor);if(pArmor == 0.0) { //te kódod}
Arra céloztam, hogy ha egy tisztességes, nem csaló játékos valamicske elõnnyel akar indulni, például egy DM szerveren, ami tartalmazza ezt a kódot, akkor semmit nem ér vele, mert hiány csak a páncélját sebeznék, de a kód miatt az életét is ugyanúgy viszik, szoval ez így kicsit unfair szerintem.Ezért írtam, hogy meg lehetne oldani úgy, hogy elõször a páncélmellényét viszi le a script, mint alap esetben, után pedig az életét.Egyszerûbben, mivel az örökélet úgyis csak akkor hat, ha nincs páncélja az illetõnek. new Float:pArmor;GetPlayerArmour(playerid, pArmor);if(pArmor == 0.0) { //te kódod} Másik pedig, amit nem értek, hogy ha amount ugye lebegõpontos, és ha lekéred, vagy megváltoztatod a játékos életét, az is lebegõpontos, szoval minek kerekíted floutrounddal.Építõ Kritika xD
Ezért írtam, hogy meg lehetne oldani úgy, hogy elõször a páncélmellényét viszi le a script, mint alap esetben, után pedig az életét.[/quote]Milyen igazad van, erre nem is gondoltam, bõvítek. Másik pedig, amit nem értek, hogy ha amount ugye lebegõpontos, és ha lekéred, vagy megváltoztatod a játékos életét, az is lebegõpontos, szoval minek kerekíted floutrounddal.[/quote]Már nem is tudom, de valamilyen teszteléshez így volt ideális, ezért hagyhattam így.
Másik pedig, amit nem értek, hogy ha amount ugye lebegõpontos, és ha lekéred, vagy megváltoztatod a játékos életét, az is lebegõpontos, szoval minek kerekíted floutrounddal.[/quote]Már nem is tudom, de valamilyen teszteléshez így volt ideális, ezért hagyhattam így.
Leírom másképp, úgy látom nem vetted ki a lényeget.Ha a csalónak 1000000000000 az élet pontja akkor ez a dolog levonja belõle azt amennyivel visszatér az OnPlayerGiveDamage.Akkor mennyit ér a jelenlegi kódod?
if(elet > 100) SetPlayerHealth(damagedid, 100.0 - amount);
public OnPlayerConnect(playerid){SetPVarFloat(playerid, \"elet\", 100.0);return 1;}public OnPlayerDisconnect(playerid, reason){DeletePVar(playerid, \"elet\");return 1;}public OnPlayerGiveDamage(playerid, damagedid, Float: amount, weaponid){newFloat:pancel,Float:elet = GetPVarFloat(damagedid, \"elet\");GetPlayerArmour(damagedid, pancel);if(pancel == 0.0){if((elet - amount) <= 0) SetPlayerHealth(damagedid, 0);elseSetPVarFloat(damagedid, \"elet\", elet - amount);}return 1;}
SetPlayerHealth(damagedid, 100 - amount);
Akkor újabb magyarázat:Ha te beállítod a fenti kóddal az életét 100-ra.És az OnPlayerGiveDamage alatt levon annyit amennyivel visszatér.A csaló hackje visszateszi az életpontját újból 100000000000-re, akkor állandóan csak SetPlayerHealth(damagedid, 100 - amount); életpontja lesz.Edit:DrAkE megoldása már egy kis útmutató lenne.
A csaló hackje visszateszi az életpontját újból 100000000000[/quote]De ilyet nem szoktak.