GTA Közösség - A magyar GTA fórum

San Andreas Multiplayer (SA-MP) => SA-MP: Szerverfejlesztés => Tanuljunk PAWN nyelvet => A témát indította: Hun_Norberto - 2013. Január 26. - 12:45:39

Cím: A GetPlayerHealth javitása
Írta: Hun_Norberto - 2013. Január 26. - 12:45:39
Ha használtad már Pawnoban a GetPlayerHealth függvényt, valószinûleg tapasztaltad, hogy csak egy playerid paramétert kér, de aztán figyelmeztet, hogy nem adtál meg mindent. Ez azért van, mert a Pawno a legelsõ include-ból, tehát az \"a_npc.inc\" fájlból tölti be a funkciót, ami jó is lenne, ha NPC-ket csinálnál. Viszont amikor leforditod a szkriptet, akkor már a szkripthez szükséges \"a_samp.inc\"-et tölti be, amiben viszont két paramétert kér.
Szóval, hogy is lehet ezt megjavitani?
Régebben azt a megoldást gondoltam, hogy átnevezed az \"a_npc.inc\" fájlt úgy, hogy ABC-sorrendben az \"a_samp.inc\" fájl van elõl. Ez jó is, ha nem használsz NPC-ket. (Tehát akik nem használnak NPC-ket, használják ezt. Egyszerûbb. Csak ne felejtsék el, hogy emiatt nem megy az NPC-jük, ha esetleg késõbb használják.) Viszont, ha használsz, akkor megoldhatod azzal, hogy ugyanolyanra átirod azt a GetPlayerHealth-ot is, mint az eredeti.
Tehát megnyitod az \"a_npc.inc\" fájlt, megkeresed ezt a sort:
 
native GetPlayerHealth(playerid);

 
Majd átirod erre:
 
native GetPlayerHealth(playerid, &Float:health);

 
Ez lényegében megoldotta már a problémát, viszont ezzel elõjön még egy probléma: az NPC-knél is igy fogja kérni, de nem ez fog mûködni.
Ezért a fájl végére ird be ezt:
 

stock fix_GetPlayerHealth(playerid, &Float:health)
{
    health=GetPlayerHealth(playerid);
}
#if defined _ALS_GetPlayerHealth
#undef GetPlayerHealth
#else
#define _ALS_GetPlayerHealth
#endif
#define GetPlayerHealth fix_GetPlayerHealth

 
Ez készit egy funkciót \"fix_GetPlayerHealth\" néven, amiben két paraméter van, majd törli az eredeti funkciót, és berakja ezt helyette.
Ezután az összes NPC-s szkriptedben át kell irni a GetPlayerHealth(playerid)-t GetPlayerHealth(playerid, health)-ra (és természetesen a playerid helyére nem biztos, hogy konkrétan a \"playerid\" változó került, és a \"health\" változót pedig elõtte létre kell hozni a szkriptekben)
Remélem valakinek hasznos volt ez az információ, én itt nem találtam leirást róla, javitások lehet, hogy már tartalmazzák ezt, de legalább aki eddig nem tudta miért is csinálja/csinálta ezt, most megtudta (remélem).
Cím: A GetPlayerHealth javitása
Írta: Rupert - 2013. Január 26. - 14:52:46
[mod] Szép, hasznos leírás, ezért áthelyeztem. [/mod]
Cím: A GetPlayerHealth javitása
Írta: Hun_Norberto - 2013. Január 31. - 18:25:52
Idézetet írta: Rupert date=1359208366\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"33025\" data-ipsquote-contentclass=\"forums_Topic
Szép, hasznos leírás, ezért áthelyeztem.
 
Köszönöm. :)
Cím: A GetPlayerHealth javitása
Írta: Sramm - 2013. Március 06. - 19:27:11
Vagy az alap a_samp funkciót írod át.
 
stock Float:GetPlayerHealthEx(playerid)
{
new Float:hp;
GetPlayerHealth(playerid,hp);
return hp;
}
#define GetPlayerHealth GetPlayerHealthEx
public OnPlayerConnect(playerid)
{
new Float:h = GetPlayerHealthEx(playerid);
return 1;
}
Cím: A GetPlayerHealth javitása
Írta: Hun_Norberto - 2013. Március 08. - 19:02:39
Idézetet írta: Sramm date=1362594431\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"33025\" data-ipsquote-contentclass=\"forums_Topic
Vagy az alap a_samp funkciót írod át.
 
stock Float:GetPlayerHealthEx(playerid)
{
new Float:hp;
GetPlayerHealth(playerid,hp);
return hp;
}
#define GetPlayerHealth GetPlayerHealthEx
public OnPlayerConnect(playerid)
{
new Float:h = GetPlayerHealthEx(playerid);
return 1;
}

 

Persze, lehet úgy is.