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

San Andreas Multiplayer (SA-MP) => SA-MP: Szerverfejlesztés => Segítségkérés => A témát indította: halaloszto100 - 2014. Augusztus 27. - 20:42:23

Cím: Mentés
Írta: halaloszto100 - 2014. Augusztus 27. - 20:42:23
Sziasztok.Az lenne nekem a kérdésem, hogy hogyan lehet egy megadott fájlba több dolgot belementeni dinivel.
Példa:
Van nekem egy olyan fájlom, hogy BannoltJatekosok.ini
és ebbe a fájlba akarom bele menteni a játékosok neveit.
ezzel:
 
BanInfo[playerid][name]

 
Nekem az a bajom, hogy nem pakolja be egymás alá a neveket, hanem mindig az utolsó banolt játékost teszi bele.
A segítséget elõre is köszi. :)
Cím: Mentés
Írta: Andriis - 2014. Augusztus 27. - 20:46:50
Nem lenne egyszerûbb, ha a játékos fájl-jába létrehozol egy Ban=0 sort, majd ha bannolod, átállítod 1-re?
Csak tipp :)
Cím: Mentés
Írta: halaloszto100 - 2014. Augusztus 27. - 20:49:09
Nem, mivel ez egy rendszernek készül, ezt majd be akarom olvasni a mod indulásakor és egy dialogba fel akarom majd tüntetni és majd talán onnan unbanolni is. :)
Cím: Mentés
Írta: Andriis - 2014. Augusztus 27. - 20:55:53
Van ugye az alap bannolás, és azt elmenti. Azt nem lehet valami képpen beolvasni? Most konkrétan nem tõled kérdezem, hanem úgy mindenkitõl :)
Cím: Mentés
Írta: halaloszto100 - 2014. Augusztus 27. - 20:58:09
Nemtudom, de lehet, hogy az csak RCON adminnak lehet és az úgy meg nem jó.
Ui:De ha lehet is akkor is szeretném megtudni, hogy hogyan is kell, mivel ezt a funkciót majd máskor is szeretném alkalmazni. :)
Cím: Mentés
Írta: M1A1 - 2014. Augusztus 27. - 21:16:41
Pl.:
 
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name));
dini_BoolSet(file, name, false);

 
Ha bannolod, akkor true-ra módosítod az értékét. Mikor a játékos csatlakozik, akkor meg lekéred, hogy bannolva van-e. Ha igen, akkor kiírod neki, hogy bannolva vagy, és kickeled.
Lekérdezés:
 
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name));
if(!!dini_Bool(file, name))
{
     Kick(playerid);
     //stb..
}

 
Remélem nem írtam el semmit. Sok sikert!
Cím: Mentés
Írta: halaloszto100 - 2014. Augusztus 27. - 21:30:17
:) Ez szép és jó, de szerintem félreértettük egymást. :) Én nem azt kérdeztem, hogy hogyan kell lementeni, hanem 1 fájlba neveket egymás alá.
Példa:
Random Nevek: Aranka, Józsi, Béla
Na és ezt a 3 nevet egy fájlba beleírni ezzel:
BanInfo[playerid][name]

 
ugybár akkor így valahogy:
 
dini_Set(bfile, \"nev\", BanInfo[playerid][name]);

 
Na és akkor nekem úgy kéne egy fájlba, hogy:
nev = Aranka
nev = Józsi
nev = Béla
ehelyett csak az utolsó banolt játékos van így:
nev = Béla
Aranka és a Józsi nevet nem írja bele.
Remélem érthetõ és köszi azért a segítséget. :)
Cím: Mentés
Írta: M1A1 - 2014. Augusztus 28. - 00:15:13
Nem-nem.. :) Te értesz félre engem.
INI fájlkezelésnél vannak ugye a kulcsok, melyeknek értékük van/lehet. A példádban te létrehozol egy \"name\" kulcsot, és ebbe szeretnéd belementeni a játékos neveket, de ez így nem jó, mert több egy nevet viselõ kulcs nem lehet.
Gondoljuk át egy kicsit. Mi lenne akkor, ha a játékosok nevét kulcsként írnánk ki a fájlba, és ezeknek az értéke egy boolean lenne. Azaz bannolva van-e, vagy nincs az adott játékos. Én így írtam.
 
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name));
dini_BoolSet(file, name, false); //Ezt a részt bejelentkezés után írd. Hozzáadja a játékost a fájlhoz alap false értékkel.

 
Bejelentkezés elõtt pedig ellenõrizd hogy a játékos bannolva van-e:
 
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name));
if(!!dini_Bool(file, name)) //Rákeresünk a nevére kulcsként. Ha az érték igaz, kickeljük, mert bannolva van
{
     Kick(playerid);
     //stb..
}

 
Így a fájl így fog kinézni, ha mondjuk Bélát bannoltad:
Aranka = false
Józsi = false
Béla = true
Cím: Mentés
Írta: halaloszto100 - 2014. Augusztus 28. - 12:23:32
Ahha, értem. :)
Akkor egy ini fájlban nem lehet több egyforma kulcs?
Mert például én még szeretnék bele menteni olyanokat h a játékos ban lejárati dátuma, ideje, stb..
Cím: Mentés
Írta: M1A1 - 2014. Augusztus 28. - 16:49:27
A format-al a neve mellé formázod, hogy \"LDatum\" pl.
 
new dateKey[128], name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name));
format(dateKey, sizeof(dateKey), \"%s_LDatum\", name); //LDatum = Lejárati Dátum
dini_Set(file, dakeKey, \"2014.10.03.11.32\"); //ÉÉÉÉ.HH.NN.ÓÓ.PP

 
Ez kb. így fog kinézni:
Aranka = false
Aranka_LDatum = \"2014.08.31.15.42\"
Józsi = false
Józsi_LDatum = \"2014.10.03.11.32\"
Béla = true
Józsi_LDatum = \"2014.11.02.11.52\"
Lekérdezésnél pedig pl. sscanf-el a dátumot szétszeded, stb.. Az elvet leírtam, a többit ki tudod találni ;)
Cím: Mentés
Írta: blackdog476 - 2014. Augusztus 28. - 17:22:22
Ilyen célra miért nem használsz MySQL plugint? Sokkal jobb, egyszerûbb lenne
Cím: Mentés
Írta: halaloszto100 - 2014. Augusztus 28. - 21:29:28
Köszi a segítséget. :)