Jump to content

script [Include] Statistiky hrářů


Xchos

Recommended Posts

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!

Link to comment
Share on other sites

  • 3 weeks later...

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...