Jump to content
  • 0

pomoc Čtení souboru ve hře


Deejva

Dotaz

Zdravím, potřeboval bych poradit s jednou věcí. Chtěl bych udělat log pro server.. takže by se do souboru zapisovali činnosti, co hráč dělal:

22:15 Deejva si koupil M4

22:16 Deejva napsal PM hráči X: ahoj

22:17 Deejva se odpojil

A když to takhle budu mít zapsané v souboru, jak udělat pro admina ve hře, aby si to mohl přečíst?

Chtěl bych to udělat přes dialog, že bude několik řádků, na každém řádku bude něco z logu, dokud nebude plná tabulka nebo bude plný string

A pokud už se to tam nevejde, budu se moct tlačítkem další podívat dál.

Prosím o rady, jak jednotlivé řádky přečíst, a jak udělat, že až se překlepnu na další stranu, tak tam budou zase další, ty starší věci z logu

Díky :)

Link to comment
Share on other sites

Recommended Posts

  • 0

1. > Ak budeš mať pre každého hráča takýto log tak ty server moc slho nevydrži.

2. > Musíš si spraviť zapisovani pri každej činnosti napr. keď dá príkaz /kill tak zistí jeho meno a pridá to cez napr.DOF2 do niakeho suboru z jeho menom, a potom taktieš vytvorit str a z formatom to prečítať cez dof2 .

Link to comment
Share on other sites

  • 0
  • Globální moderátor
new File:handle = fopen("file.txt", io_read), //vytvoříme si proměnou pro soubor který namapujeme a otevřeme
new buf[128]; //pomocná do které budeme načítat řádky
new string[512]; //sem budeme ukládat string

if(handle) //pokud je soubor otevřen (tedy existuje)
{
	//while(fread(handle, buf)) print(buf); čte dokud neskončí soubor
        //new radek; pokud haže errory že nezná radek tak sem...
        while(freade(handle,buf) || radek < 20)//čte dokud neskončí soubor a nebo je načteno více jak 20 řádků
        {
            format(buf,sizeof(buf),"\n %s",buf);
            radek++;//přidáme že jsme přečetli další řádek
            strcat(string,buf);//odentrujeme a přidáme řádek k ostatním řádkům 
        } 


	fclose(handle); //zavře soubor - VELICE důležité
}
else //pokud selhalo
{
	// Error
	print("The file \"file.txt\" does not exists, or can't be opened.");
}

polopaticky... chápeš?

Link to comment
Share on other sites

  • 0

No nacist si obsah souboru do jedne promene a pak pracovat s tou promenou. To by byla asi nejlepsi varianta. Ale otazkou je jak velkou promenou ? Kdyz promena musi mit pevnou velikost ale soubor ne .D

Link to comment
Share on other sites

  • 0

Dialog text 2048

String 1024 ak sa to nemenilo.

 

Najlepšie by bolo zaplniť string, vypísať, dalšia stranka, vyprazdnit string, precitat dalej atd az dokym neprecitas cely subor.

Link to comment
Share on other sites

  • 0

No, zkusím to tedy, snad se k tomu nějak doklepu


   while(fread(handle,buf) || radek < 20)
   {
       format(buf,sizeof(buf),"%s\n",buf);
       radek++;
       strcat(string2,buf);
   }

Pořád se mi ale přečte všech 30 řádků.. proč?

Link to comment
Share on other sites

  • 0

Já to mám vyřešené takto:

CMD:prikaz(playerid, params[])
{
	if(JeAdmin?)
	{
	    new search[24];
	    if(!sscanf(params, "s[24]", search))
	    {
	        new dialogtext[2048];
	        format(dialogtext, sizeof(dialogtext), "Log: %s\n\n", search);
	        new str[128], count = 0;
	        new File:soubor = fopen("cestaksouboru", io_readwrite);
		    while(fread(soubor, str))
		    {
		        if(count <= 20)
		        {
			        if(strfind(str, search, true) != -1)
			        {
			            count++;
			            strcat(dialogtext, str);
			        }
				}
				else break;
		    }
		    fclose(soubor);
		    ShowPlayerDialog(playerid, DIALOGID , DIALOG_STYLE_MSGBOX, "{FFFFFF}LOG", dialogtext, "Okay", "");
		    return 1;
		}
		else return SCM(playerid, -1, "SYNTAXE: /log [Jméno, důvod, nebo datum]");
	    
	}
	else return ErrorBox(playerid, "Tento prikaz nemuzes pouzivat.");
}
Link to comment
Share on other sites

  • 0

Jo, dal jsem podmínku na řádky pod to a jde to, díky


A jak dosadím do toho dialogu 2000 znaků, když jde do proměnné 1024? Kdybych 2 proměnné s 1000 znakama spojil, tak to je 2000 znaků a nevejde se to tam, když má proměnná 1024

Link to comment
Share on other sites

  • 0

Hmm.. A kolik jde teda dát nejvíc znaků do dialogu? 2048? A do jedné proměnné? 

Do jedne promene ? Zalezi natom jak velkou mas RAM a kolik trpelivosti pri kompilovani :)

new buf[128];
new string2[2048];
while(fread(handle,buf))//precte cely soubor
{
	format(string2,sizeof(string2),"%s%s",buf,string2);
//pocitame s tim ze v buf uz je enter \n a bud dame pred string2.
//Tim zajistime ze pokud bude string2 plny tak se nove data daji nazacatek a stara z konce umazou
}
ShowPlayerDialog(playerid,0,DIALOG_STLE_SMGBOX,"Log",string,"OK","");
//Toto zajisti ze budes mit v promene string2 2048 znaku z konce souboru

samozrejme jde to optimalizovat pomoci fseek kde si posunes kurzor aby jsi zbytecne necetl cely soubor

Link to comment
Share on other sites

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