Je vidět, že kdokoliv dělal na tomhle HS, tak znalosti YSI má extrémně malé. Kromě teoretických chyb(navíc závorka, chybějící středník), je tam využití knihovny srovnatelné asi s použitím návratových hodnot...
(plus hádám, že autor to načítá z alternativní cesty. Lepší je to načítat z přímé, tak kdybys neměl...)
#include <YSI_Storage\y_ini>
#include <YSI_Data\y_iterate>+
#include <sprintf>Jestli ti můžu něco doporučit, tak můj ověřený způsob s tagy a iterátory(funkční ovšem) a k tomu sprintf(). Pokud budeš dělat desítky souboru a cyklovat je, tak stačí drobná chyba v zápisu a celý systém se ti začne hroutit.Navíc je to mnohem jednodušší. Takže, začneš přidáním iterátoru pro své domy. Tak můžeš rovnou cyklit domy a ne vlastní cykly a proměnné(makro na maximum domů můžeš zachovat) :
new Interator: Houses<MAX_HOUSES>;
Taky nezapomeň a další proměnné(informace) o domě jako pozice, jméno majitele, cena apod.
Pak samozřejmě vyčistíme iterátor. Nechceme, aby nám tam lítali nežádoucí informace:
public
OnFilterScriptExit() {
Iter_Clear(Houses);Teď přichází ta dokonalost . Stačí jenom nalézt volný iterátor a začlenit do něj náš další dům. Číslo nalezeného volného iterátoru můžeš použít i jako id domu!
new
house_id = Iter_Free(Houses);
Iter_Add(Houses, Iter_Free(Houses));protože máš id volného baráku, můžeš mu rovnou přiřazovat údaje jaké jméno majitele, cena apod.
PS: jestli chceš zjistit počet přidaných domů, nemusíš nic cyklit, deklarovat proměnnou, nic takového, stačí jenom zjistit počet vložených interátorů:
if (Iter_Count(Houses) == MAX_HOUSES) ...Vybereš si nějaký(jeden), kam budeš všechno ukládat:
new
INI:Soubor = INI_Open("Baraky.sav");A nakonec ukládání údajů. K tomu ještě použiješ tag. Tag ti zajistí, aby se všechny údaje ukládali pod daný barák do seznamu. A abys ses nezdržoval s formátováním, použiješ sprintf(je to i nakonec kratší):
INI_SetTag(Soubor, sprintf("House%i", house_id));
INI_WriteString(Soubor, ...);
INI_WriteInt(Soubor, ...);
INI_WriteString(Soubor, ...);
INI_WriteInt(Soubor, ...);
INI_WriteInt(Soubor, ...);
INI_WriteInt(Soubor, ...);
INI_Close(Soubor);Načítání není o nic těžší. Stačí při načítání všech údaju přidat i načítání tagů. V samotném callbacku pak při načítání hledat jejich tag nejdříve. To stačí hledat jenom slovo House a číslo. Poté přidávat i dané iterátory(protože to jsou jejich id):Zjištěný id pak můžeš používat i rovnou do proměnných.
INI_ParseFile("Baraky.sav" , "NahratData", .bPassTag = true);
public NahratData(tag[], name[], value[]) {
new
sstr[14];
strmid(sstr, tag, 5, strlen(tag));
new
i = strval(sstr);
INI_String(...);
INI_Int(...);
INI_String(...);
Iter_Add(Admins, i);
INI_Int(...)
return (false);
}
POZOR Nepřidávat iterátor jako poslední. Návr. hodnoty načítání ti to znemoží