Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

Zapisywanie - Odczytywanie z/do pliku.


  • Zamknięty Temat jest zamknięty
17 odpowiedzi w tym temacie

#1 KariiO

    Super Hero

  • Power User

Reputacja: 396
Wszechpomocny

  • Postów:1 133
  • GG:
  • Imię:Korneliusz
  • Lokalizacja:Cieszyn
Offline

Napisano 27.07.2011 23:53

Jak mogę zapisać zmienne które przechowują litery (nazwa[id]) i liczby (ilosc[id]) do pliku np. depozyt.txt , a w danym momencie po prostu to odczytać ?
  • +
  • -
  • 0

#2 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 555
Godlike

  • Postów:11 984
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 28.07.2011 01:07

Dokumentacja AMXX.pl: Core >> file
i
str_to_num - odczyt liczby (kownertuje string na liczbe)
num_to_str - zapis liczby (konwertuje liczbe na string)
  • +
  • -
  • 1

#3 KariiO

    Super Hero

  • Autor tematu
  • Power User

Reputacja: 396
Wszechpomocny

  • Postów:1 133
  • GG:
  • Imię:Korneliusz
  • Lokalizacja:Cieszyn
Offline

Napisano 05.08.2011 19:14

Nie znam się na zapisywaniu różnych rzeczy do plików więc jakby co z góry sorry.

Wiec załóżmy że wcześniej utworzyłem plik tekstowy w cstrike o BAZAR i chciałbym do niego zapisać:
	new ilosc_pieniedzy[32], nazwa_gracza[32][128]
	nazwa[id] = str_to_num(nazwa_gracza);
	ilosc[id] = str_to_num(ilosc_pieniedzy);
write_file("BAZAR.txt", "Nazwa gracza: %i Ilosc pieniedzy: %s",nazwa[id],ilosc[id]);//linia 0

Czy to starczy?
  • +
  • -
  • 0

#4 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 07.08.2011 14:35

zamiast czy starczy zapytaj czy się kompiluje, od razu podpowiadam, że nie

dane zapisywane w write_file() muszą być sformatowane wcześniej; formatex
  • +
  • -
  • 1

#5 KariiO

    Super Hero

  • Autor tematu
  • Power User

Reputacja: 396
Wszechpomocny

  • Postów:1 133
  • GG:
  • Imię:Korneliusz
  • Lokalizacja:Cieszyn
Offline

Napisano 07.08.2011 14:45

Tak to ma wyglądać czy nie ?
formatex(nazwa_gracza[0] ,sizeof(nazwa_gracza) - 1 ,Nie wiem co tutaj...)
formatex(ilosc_pieniedzy[0] ,=sizeof(ilosc_pieniedzy) - 1 ,Nie wiem co tutaj...)

  • +
  • -
  • 0

#6 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 07.08.2011 14:48

nie tak ;P
static szLine[64];
formatex(szLine, charsmax(63), "Nick = %s, kasa = %d", nazwa_gracza[0], str_to_num(ilosc_pieniedzy[0]));
write_file("Bazar.txt", szLine);

  • +
  • -
  • 1

#7 KariiO

    Super Hero

  • Autor tematu
  • Power User

Reputacja: 396
Wszechpomocny

  • Postów:1 133
  • GG:
  • Imię:Korneliusz
  • Lokalizacja:Cieszyn
Offline

Napisano 07.08.2011 14:54

Ok dzięki za to.

Zapiszę mi to wszystko w jednej linijce ?

I jeszcze jakbym mógł sprawdzić ile jest lini w tym pliku tekstowym (ilość linijek potrzebna mi jest do pętli w menu :) )
  • +
  • -
  • 0

#8 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 07.08.2011 14:58

file_size

i ustaw dobrą flagę

flag
0 - zwraca długość w bajtach
1 - zwraca ilość linii
2 - zwraca 1, jeśli plik zakończony jest znakiem nowej linii


  • +
  • -
  • 1

#9 KariiO

    Super Hero

  • Autor tematu
  • Power User

Reputacja: 396
Wszechpomocny

  • Postów:1 133
  • GG:
  • Imię:Korneliusz
  • Lokalizacja:Cieszyn
Offline

Napisano 07.08.2011 15:13

Ok.

Czy to menu które będzie dodawało co linie jedną opcje w menu zadziała : ?


public XXX(id)
{
	if(is_user_bot(id)) return PLUGIN_CONTINUE;
	
	iSize = file_size("Bzar.txt", 1);

	new text[512]
	new menu = menu_create("Menu :","YYY")
	
	menu_setprop(menu, MPROP_EXITNAME, "Wyjdz");
	menu_setprop(menu, MPROP_BACKNAME, "Poprzednia strona");
	menu_setprop(menu, MPROP_NEXTNAME, "Nastepna strona");

	for(new i=0;i<iSize;i++)
	{   
			formatex(text, 511,"Nick: %s Ilosc: %i",nazwa[i], ilosc[i])
			menu_additem(menu,text)
	}
	menu_display(id,menu,0)
	return PLUGIN_CONTINUE;
}

public YYY(id,menu,item) 
{
	if(item == MENU_EXIT){
		menu_destroy(menu);
		return PLUGIN_CONTINUE;
	}
	switch(item) 
	{ 
	case 0: 
		{	
			Tutaj chcialbym bo to 1. linia zeby z niej odejmowalo ilosc[id] z kasy. Czyli wybieram pierwsza opcje o odejmuje mi ilosc[id] z kasy.		
		}
	case 1: 
		{	
			To samo tylko tutaj juz z drugiej lini.	
		}
	
	menu_destroy(menu);
	return PLUGIN_CONTINUE;
}

Tylko mam jeszcze wątpliwości co do tworzenia case 0 , case 1 itd...bo ja nie bd. wiedział ile ich jest wiec chyba tez bd. trzeba petle...
Wcześniej przed wyświetleniem menu bd. trzeba odczytać tez z pliku chyba :P?
  • +
  • -
  • 0

#10 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 07.08.2011 15:20

no musisz przeczytać zawartość pliku: albo read_file() aż do momentu kiedy zwróci 0, albo
new fp=fopen("Bazar.txt", "rt");

while(!feof(fp)){
    fgets(fp, szLine, 63);
}
case`y są w porządku, ale nie zamknąłeś switch{ }
wystarczy że item >= 0 i wtedy możesz użyć write_file(plik, linia, item)


Dlaczego nie użyjesz nvault?
  • +
  • -
  • 1

#11 KariiO

    Super Hero

  • Autor tematu
  • Power User

Reputacja: 396
Wszechpomocny

  • Postów:1 133
  • GG:
  • Imię:Korneliusz
  • Lokalizacja:Cieszyn
Offline

Napisano 07.08.2011 15:24

Tzn. case'y właśnie wydaję mi się że są źle bo co będzie jeżeli będą 4 opcje a case'y tylko na 3 ?
Po prostu nie bd. wiedział ile jest opcji...

A jeżeli mam nick mogę jakoś sprawdzić czy dany gracz jest na serwerze i np. ustawić mu xxx[id]=1 ?

Myślałem że z nvault więcej roboty :P

Użytkownik KariiO edytował ten post 07.08.2011 15:26

  • +
  • -
  • 0

#12 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 07.08.2011 15:30

Jest funkcja od szukania graczy
new player = find_player ( "a", "KariiO") ;
if(player){
    xxx[player] = 10000;
}

  • +
  • -
  • 1

#13 KariiO

    Super Hero

  • Autor tematu
  • Power User

Reputacja: 396
Wszechpomocny

  • Postów:1 133
  • GG:
  • Imię:Korneliusz
  • Lokalizacja:Cieszyn
Offline

Napisano 07.08.2011 15:36

W public client_disconnect(id) chciałbym zrobić że jeżeli gracz się rozłącza a w Bazar.txt jest jego nick to usuwa całą linie z tym nickiem przykład:

Nazwa:przyklad1 Ilosc:przyklad1
Nazwa:przyklad2 Ilosc:przyklad2  // <- całą tą linie ma usunąć...

Wraz z enterem bo nie chciałbym takiego efektu:
Nazwa:przyklad1 Ilosc:przyklad1

  • +
  • -
  • 0

#14 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 07.08.2011 15:46

Hmm jeżeli po wyjściu gracza tracone mają być wszystkie informacje o nim to ja się zastanawiam jaki sens ma przechowywanie ich w pliku? RAM jest o wiele szybszy i możesz zrobić zwyczajne tablice na te dane
  • +
  • -
  • 0

#15 KariiO

    Super Hero

  • Autor tematu
  • Power User

Reputacja: 396
Wszechpomocny

  • Postów:1 133
  • GG:
  • Imię:Korneliusz
  • Lokalizacja:Cieszyn
Offline

Napisano 07.08.2011 15:49

Może opiszę co to ma być:
Przykładowo mam przedmiot wystawiam go na bazar za konkretną ceną. W tym momencie przechowuję nick swój w celu wyrzucenia mi tego itemu po wylicytowaniu go przez kogoś innego na bazarze + dania mi kasy za wylicytowanie go , cenę aby wyświetlało w menu , i id przedmiotu aby po prostu dać go osobie która go wylicytowała)
Menu ma być żeby można było licytować.
  • +
  • -
  • 0

#16 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 07.08.2011 17:35

Łatwiej to zrobić z użyciem zwykłych tablic. Jak chcesz mieć te aukcje zapisywane co mapę to serializuj je w pliku przy każdej operacji dodaj/usuń. Do serializacji możesz użyć fwrite_blocks i fread_blocks.
W ten sposób w tablicy możesz robić co chcesz,a dane będą automatycznie przenoszone na nową mapę.

Dołączam tę nieco wolniejszą, ale przystępniejszą (bo tekstową) wersję serializacji
Spoiler

  • +
  • -
  • 1

#17 KariiO

    Super Hero

  • Autor tematu
  • Power User

Reputacja: 396
Wszechpomocny

  • Postów:1 133
  • GG:
  • Imię:Korneliusz
  • Lokalizacja:Cieszyn
Offline

Napisano 07.08.2011 17:46

Łatwiej to zrobić z użyciem zwykłych tablic. Jak chcesz mieć te aukcje zapisywane co mapę to serializuj je w pliku przy każdej operacji dodaj/usuń. Do serializacji możesz użyć fwrite_blocks i fread_blocks.
W ten sposób w tablicy możesz robić co chcesz,a dane będą automatycznie przenoszone na nową mapę.

Dołączam tę nieco wolniejszą, ale przystępniejszą (bo tekstową) wersję serializacji

Spoiler

Dzięki wielkie , nie wiedziałem że można tak zrobić :P
Wielki +

Bd. miał czas zobaczę czy się w tym odnajdę :D
  • +
  • -
  • 0

#18 Adminek AMXX.PL

    Admin :)

  • Bot

Reputacja: 156
Profesjonalista

  • Postów:7 492
  • Lokalizacja:AMXX.PL
Offline

Napisano 08.08.2011 20:25

Wiadomość wygenerowana automatycznie


Ten temat został zamknięty przez moderatora.

Powód: Rozwiązane

Jeśli się z tym nie zgadzasz, Dołączona grafika raportuj ten post, a moderator lub administrator rozpatrzy go ponownie.


Z pozdrowieniami,
Zespół AMXX.PL




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych