←  Problemy

AMXX.pl: Support AMX Mod X i SourceMod

»

Odczyt pliku z danymi

Zablokowany

  • +
  • -
ZepA*** - zdjęcie ZepA*** 11.08.2011

Siemka.




Zrobilem sobie plugin czarnalista. Prawie wszystko w nim dziala. Gdy wpisze /dodajgracza wyskakuje mi menu z wszystkimi graczami na serwerze i mozna wybrac ktorego dodac do czarnej listy.

Do tego momentu wszystko dobrze dziala. Jednak gdy wpisze /czarnalista wyskakuje mi mtod z tylko ostatnim graczem dodanym do czarnej listy, a ja chce zeby wczytywalo mi do mtod wszystkich graczy ktorzy sa zapisani w czarnalista.ini

Czy pomoze mi ktos to naprawic?

Załączone pliki


Użytkownik ZepA*** edytował ten post 11.08.2011 19:30
Odpowiedz

  • +
  • -
Fili:P - zdjęcie Fili:P 11.08.2011

Ta pętla for w pokazmotd jest jakaś wadliwa.
Odpowiedz

Dwdov - zdjęcie Dwdov 11.08.2011


for(new i=0; read_file(list_file, i, tekst, 51, len);i++)

Tu się mogę bardzo mylić, ale:
Jest wykonywane kiedy warunek jest spełniony a Ty na starcie dajesz i = 0 czyli jakby false - mam nadzieje że zrozumeisz o co chodzi ; d
Spróbuj tak :

for(new i=0; read_file(list_file, i, tekst, 51, len) != -1;i++)

Użytkownik Dawedov edytował ten post 11.08.2011 20:32
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 11.08.2011

samo for jest dobrze, warunkiem wyjścia z pętli nie jest wartość i tylko wynik funkcji read_file.

To co w pętli to w pętli, a to co ma otaczać listę na początku i końcu + klamry
public zobaczmtod(id)
{
	new tempstring[100];
	new motd[2048];
	new Configsdir[64]
	new list_file[64]
	new tekst[52];
	new len;
	
	get_configsdir(Configsdir, 63)
	format(list_file, 63, "%s/czarnalista.ini", Configsdir)
	
	formatex(motd, charsmax(motd), "<html><body bgcolor=^"#474642^"><font size=^"2^" face=^"verdana^" color=^"FFFFFF^"><strong>");
	formatex(tempstring, charsmax(tempstring), "Czarna Lista</strong><br><br>");
	add(motd, charsmax(motd), tempstring);
	
	for(new i=0; read_file(list_file, i, tekst, 51, len);i++){
		formatex(tempstring, charsmax(tempstring), "^"%s^"", tekst);
		add(motd, charsmax(motd), tempstring);
	}
	
	add(motd, charsmax(motd), "<br></font></body></html>");

	show_motd(id, motd, "Czarna Lista");
}
Odpowiedz

Dwdov - zdjęcie Dwdov 11.08.2011

Fakt, zapomniałem że read_file nadpisuje, a nie dodaje do tablicy lol.
Odpowiedz

  • +
  • -
ZepA*** - zdjęcie ZepA*** 12.08.2011

Wszystko dziala. R3X dzięki. Dawedov tobie tez dziekuje :)


Chcialbym sie jeszcze zapytac jak zrobic aby usunac wyraz z tego pliku? Czyli wpisuje w konsoli np amx_usungracza nick

i mi z pliku czarnalista.ini usuwa gracza?
Użytkownik ZepA*** edytował ten post 12.08.2011 07:31
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 12.08.2011

Usuwanie danych z pliku to kłopotliwa sprawa, musisz przepisać go pomijając wybrane linijki.

Jeśli zadowalają Cię puste linijki to możesz użyć write_file(plik, "", numer_linii_do_usuniecia);

Zadziała to tak

a
b
c


usun b

a

c

Odpowiedz

  • +
  • -
ZepA*** - zdjęcie ZepA*** 12.08.2011

A jezeli to mi sie wszystko w 1 lini zapisuje? Idzie tez tak usuwac?
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 12.08.2011

idzie pozamieniać na spacje, otwórz fopen() z flagą r+, poszukaj tego co masz usunąć i w tym miejscu daj fputs(); z tyloma spacjami, że zakryło cały usuwany napis
Odpowiedz

  • +
  • -
ZepA*** - zdjęcie ZepA*** 12.08.2011

Czyli chodzi o takie cos?

załużmy ze w czarnalista.ini mam

zepa nobek bartek krzysiu

i jak chce usunac nobek to robie takie cos:

fopen ( list_file, r+ )
fputs ( list_file, nobek )
 write_file ( list_file, "     ")




na pewno to jest zle xD

Pomozesz?
Użytkownik ZepA*** edytował ten post 12.08.2011 20:11
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 12.08.2011

Masz rację, źle :)

Nie wiem czy ma sens pisanie takiego kodu, skoro nVault zapewnia Ci całą funkcjonalność jakiej oczekujesz:
- dodawanie
- usuwanie
- wyszukiwanie
- z dodatkowym .inc`em nawet przeglądanie

Do tego wyszukiwanie odbywa się w czasie stałym, niezależnym od wielkości pliku.
Odpowiedz

  • +
  • -
ZepA*** - zdjęcie ZepA*** 13.08.2011

A podasz mi ten dodadkowy inc z vaulta? Na vault to sobie przerobie i moze lepiej mi pojdzie
Odpowiedz
Zablokowany