Sziasztok!Készítettem egy egyszerû módot arra, hogyan ellenõrizzük, ha egy játékos pénze megváltozik; kezdjünk is neki.
Elõször is, a mód elején hozzuk létre az eljárás prototípusát:
forward OnPlayerChangeMoney(playerid);
Magyarázat:forward - prototípus létrehozása (arra most nem fogok kitérni, hogy pontosan mi is az a prototípus)
OnPlayerChangeMoney - ez az eljárás neve
(playerid) - ez alapján fogunk hivatkozni a játékosra
Hozzunk létre egy új változót is a script elején!
new penz[MAX_PLAYERS];
Magyarázat:
new - ezzel hozzuk létre a változót
penz - ez a változó neve
[MAX_PLAYERS] - ezzel a változót tömbként kezeljük, írhatnánk számmal is a maximális játékost; magyarul ez a változó minden játékosra érvényes.
Állítsuk be az értékét nullára, amikor a játékos csatlakozik:
public OnPlayerConnect(playerid)
{
penz[playerid] = 0;
return 1;
}
Miután lespawnolt, állítsuk át megint az értékét, a GetPlayerMoney(playerid) függvényt felhasználva.
public OnPlayerSpawn(playerid)
{
penz[playerid] = GetPlayerMoney(playerid);
return 1;
}
Azt hiszem ezt sem kell magyaráznom.
Most pedig jön maga az ellenõrzés, és az eljárásunk meghívása...
public OnPlayerUpdate(playerid)
{
if((GetPlayerMoney(playerid) > penz[playerid]) || (GetPlayerMoney(playerid) < penz[playerid]))
{
CallLocalFunction(\"OnPlayerChangeMoney\", \"i\", playerid);
penz[playerid] = GetPlayerMoney(playerid);
}
return 1;
}
Na és akkor most mit csináltunk?
Minden mûveletet az
OnPlayerUpdate eljárás alatt végeztünk el.
Az OnPlayerUpdate az adott játékost vizsgálja, konkrétabban ellenõrzi hogy normálisan csatlakozva van-e, és nem-e fagyott ki, mozog-e, stb.Az
if feltételnél megnéztük, hogy a játékos pénze nagyobb-e, vagy kisebb-e mint maga a változó. Ha valamelyik igaz, akkor meghívjuk az eljárásunkat, a
CallLocalFunction függvénnyel.
Argumentumai: \"OnPlayerChangeMoney\" - ez az eljárásunk neve, ezzel hivatkozunk rá.
\"i\" - ezzel megadjuk az átadott érték formátumát (igazából a játékos ID-jét) => Most a formátum
integer.playerid - ennek (a játékos ID-jének) a formátumát illetve értékét adjuk át az eljárásunknak.
Azt hiszem ennyi lett volna ez a kis téma, és hogy még jobban húzzam az idõt és a téma hosszát, itt van egy .inc kódja, amit én készítettem, és a fenti feljárást tartalmazza:
#include <a_samp>
forward OnPlayerChangeMoney(playerid);
new penz[MAX_PLAYERS];
public OnPlayerConnect(playerid)
{
penz[playerid] = 0;
return 1;
}
public OnPlayerSpawn(playerid)
{
penz[playerid] = GetPlayerMoney(playerid);
return 1;
}
public OnPlayerUpdate(playerid)
{
if((GetPlayerMoney(playerid) > penz[playerid]) || (GetPlayerMoney(playerid) < penz[playerid]))
{
CallLocalFunction(\"OnPlayerChangeMoney\", \"i\", playerid);
penz[playerid] = GetPlayerMoney(playerid);
}
return 1;
}
Végezetül pedig egy példascript:
#include <a_samp>
forward OnPlayerChangeMoney(playerid);
new penz[MAX_PLAYERS];
public OnPlayerFilterScriptInit()
{
return 1;
}
public OnPlayerFilterScriptExit()
{
return 1;
}
public OnPlayerConnect(playerid)
{
penz[playerid] = 0;
return 1;
}
public OnPlayerSpawn(playerid)
{
penz[playerid] = GetPlayerMoney(playerid);
return 1;
}
public OnPlayerUpdate(playerid)
{
if((GetPlayerMoney(playerid) > penz[playerid]) || (GetPlayerMoney(playerid) < penz[playerid]))
{
CallLocalFunction(\"OnPlayerChangeMoney\", \"i\", playerid);
penz[playerid] = GetPlayerMoney(playerid);
}
return 1;
}
public OnPlayerChangeMoney(playerid)
{
SendClientMessage(playerid, -1, \"Megváltozott a pénzed!\");
return 1;
}
Köszönöm, hogy elolvastad!Rupert