Trebam savjet/pomoc

Započeo letecitanjur, Maj 23, 2024, 03:00:41 PRE PODNE

prethodna tema - sledeća tema

0 članova i 1 gost pregledaju ovu temu.

Pitanje/savjet: Savjet/pomoc
Opširnije: Potpuno sam novi u mysqlu i uhvatio sam se sa ORM raditi, i sta se tice pospreme igraca tu sam shvatio kako funkcionira za saveat/loadat itd. i po toj semi bi mogao napraviti za vozila/firme/kuce al ajde to mi sad nije bitno

nije mi jasno par stvari

public LoadingPlayer(playerid, race_check)
{
    g_MysqlRaceCheck[playerid]++;

    GetPlayerName(playerid, Player[playerid][Name], MAX_PLAYER_NAME);

    new ORM: ormid = Player[playerid][ORM_ID] = orm_create("players", g_SQL);

    orm_addvar_int(ormid, Player[playerid][TU SAD STA POSTAVLJA], "TU ODAKLE UZIMA");
    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ostalo..
}
Tu mi je jasno  orm_addvar_int(ormid, Player[playerid][ID], "id");, znaci uzima informacije preko ormida i tako zna iz koje tabele uzima podatke, i tako dok posprema

eh sad mene zanima kako se koristi orm_addvar_int u slucaju sta imam u y_ini serverinfo,tipa kolko registriranih igraca,ukupno killova,smrti itd itd.



Dodatno: pa eto ako ima ko voljan da mi da neki primjer kako bi on to uradio,tipa samo da pospremi i ucita stvar za kolko ima registriranih igraca, bio bi jako zahvalan :)

to znam radit sa y_ini, cak bi sa easy mysql znao to napraviti,ali zelim taj orm shvatiti,al me muci sta nisam neki znalac i najlakse skuzim na drugim primjerima,jbg skriptam u slobodno vrijeme haha

Kreiranje tablice u MySQL bazi

Prvo, kreiraj tablicu server_stats u svojoj MySQL bazi podataka ako već nisi

new query[128];
format(query, sizeof(query), "CREATE TABLE IF NOT EXISTS server_stats (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), value INT)");
mysql_tquery(db_handle, query);

Spremanje i čitanje iz y_ini

U tvom y_ini fajlu, pretpostavljam da imaš sekciju serverinfo s ključevima poput registered_players, total_kills, itd.

#include <YSI\y_ini>

// ... (ostatak tvog koda)

// Čitanje iz y_ini
new serverinfo_file = INI_Open("server.ini"); // Ili putanja do tvog y_ini fajla
new registeredPlayers = INI_GetInt(serverinfo_file, "serverinfo", "registered_players", 0); // 0 je defaultna vrijednost ako ključ ne postoji
INI_Close(serverinfo_file);

// Spremanje u y_ini
new serverinfo_file = INI_Open("server.ini");
INI_SetInt(serverinfo_file, "serverinfo", "registered_players", registeredPlayers);
INI_Close(serverinfo_file);

Spremanje i čitanje iz baze podataka

Za spremanje podataka iz y_ini u bazu, možeš koristiti mysql_tquery slično kao u prethodnom primjeru

new query[256];
format(query, sizeof(query), "INSERT INTO server_stats (name, value) VALUES ('registered_players', %d) ON DUPLICATE KEY UPDATE value = %d", registeredPlayers, registeredPlayers);
mysql_tquery(db_handle, query);

Za čitanje iz baze, također koristi mysql_tquery i callback funkciju

new query[128];
format(query, sizeof(query), "SELECT value FROM server_stats WHERE name = 'registered_players'");
mysql_tquery(db_handle, query, "OnServerInfoFetched");

// ...

forward OnServerInfoFetched(row:MysqlResult:);
public OnServerInfoFetched(row[])
{
    if (row)
    {
        new registeredPlayers = row[0];
        printf("Broj registriranih igrača iz baze: %d", registeredPlayers);
    }
    return 1;
}

Primjena u LoadingPlayer funkciji

U tvojoj LoadingPlayer funkciji, ne moraš koristiti orm_addvar_int za podatke o serveru. Umjesto toga, možeš pročitati podatke o serveru (npr., registeredPlayers) iz y_ini fajla ili baze podataka i koristiti ih kako ti treba. Na primjer, možeš ih ispisati igraču prilikom spajanja ili ih koristiti za neku drugu logiku u tvojoj skripti.

Ovaj pristup pretpostavlja da koristiš YSI biblioteku za rad s INI fajlovima. Ako ne koristiš YSI, možeš koristiti standardne Pawn funkcije za rad s datotekama (fopen, fread, itd.).
Ovo je samo osnovni primjer. U praksi, vjerojatno ćeš htjeti ovo organizirati u funkcije za lakše korištenje i održavanje.

Taj ORM zvuci kao brutalna stvar, i u PHP, C# i slicno je jako dobra stvarcica. U pawn, po meni jako beskorisno. Sama rec Object Relational Mapping kaze da se odnosi na objekte koje naravno pawn nema.

new ORM:settingsORM= orm_create("server_settings", g_SQL);
//Predpostavimo da je antiCheatKicksCount promeniva, a anitCheatKicks kolona u tabeli.
orm_addvar_int(ormid, antiCheatKicksCount, "antiCheatKicks");

Sve je jako prosto i odvratno. Isto tako mozes kombinovati query i orm, i u slucaju za top liste i koliko cega ima ja bih koristio obican query.
Jedna mana ORM-a je da ne mozes odluciti sta se cuva kad pozoves orm_save, nego se cuva sve (u slucaju samp mysql plugina)