Statistics v1.0.1
Úvod: Napsal jsem jednoduchou knihovnu pro zavedení statistik do hry. Je to psané pro širokou škálu lidí, takže jsem v tvorbě koukal na univerzálnost. Pro využití je zapotřebí pouze jednoho SQLite souboru ve složce scriptfiles, který si include sám vytvoří, jakmile bude použit. Hráči je přiřazováno unikátní ID, které slouží pro zavedení statistik. Toto ID je generováno na herní přezdívku. Nebudu protahovat a tady uvedu jednoduché příklady implementace: Implementace: nahoru do .pwn
#include <stats>
do OnGameModeInit() případně OnFilterScriptInit() uvedeme následující:
statsInit("stats.sqlite");
statsBeginTransaction(); // Začne transakci - vykoná všechny query najednou. V tomto případě registraci všech názvů statistik.
SetStatName(1, "Připojení");
SetStatName(2, "Nastoupení do vozu");
SetStatName(3, "nejvyšší rychlost");
statsCommit(); // Ukončení transakce a potvrzení.
Jedná se o inicializaci, takže by se měla dodržet konvence o "very first", tedy jako první pokud možno. Poté je potřeba ošetřit zavření databáze. To učiníme v OnGameModeExit() případně OnFilterScriptExit() ..
statsExit();
Pak už se dá jen jednoduše pracovat. Include využívá hojně PlayerVariables a to s prefixem stats_. Do těchto proměnných si ukládá Cache. Cache slouží k tomu, aby se redukovali co nejvíce režijní náklady na databázi. Soubor funkcí: Funkce, které include obsahuje:
native queryLog(bool:state); // slouží k printu dotazů na databázi do server_log.log
native statsInit(name[]); // inicializace statistik
native statsExit(); // odhlášení od statistik
native GetStatName(statid); // returns string[]
native SetStatName(statid, name[]); // returns true/false
native IsPlayerUniqueStatsIDAssigned(playerid); // returns true/false
native AssignPlayerUniqueStatsID(playerid); // returns (int)uniqueID
native GetPlayerUniqueStatsID(playerid); // returns (int)uniqueID
native SetPlayerIntegerStat(playerid, statid, value); //returns true/false
native GetPlayerIntegerStat(playerid, statid); //returns (int)value
native SetPlayerFloatStat(playerid, statid, Float:value); //returns true/false
native Float:GetPlayerFloatStat(playerid, statid); //returns (float)value
Využití: Ukázka z práce tímto includem může být následující:
public OnPlayerConnect(playerid){
AssignPlayerUniqueStatsID(playerid); // Zajistíme unikátní ID pro statistiky hráči.
new connections = GetPlayerIntegerStat(playerid, 1); // Zjistíme hodnotu statistiky.
SetPlayerIntegerStat(playerid, 1, connections+1); // Nastavíme novou hodnotu
}
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
new enters = GetPlayerIntegerStat(playerid, 2); // Zjistíme hodnotu statistiky.
SetPlayerIntegerStat(playerid, 2, enters+1); // Nastavíme novou hodnotu
return 1;
}
public OnPlayerUpdate(playerid)
{
if(IsPlayerInAnyVehicle(playerid))
{
new vehicleid = GetPlayerVehicleID(playerid);
new Float:currentspeed = GetVehicleSpeed(vehicleid);
new Float:maxspeed = GetPlayerFloatStat(playerid, 3);
if(currentspeed>maxspeed) SetPlayerFloatStat(playerid, 3, currentspeed);
}
}
https://github.com/Xchos/samp
V případě chyb mne prosím kontaktujte pomocí emailu uvedeném v souboru stats.inc a já se je pokusím odstranit. Případné dotazy můžete také pokládat přímo do emailu.
Poprosím všechny, co se tuto knihovnu rozhodnou využít aby mě zanechali jako autora tohoto scriptu. Děkuji!