Skocz do zawartości
Mario

System głodu.

Rekomendowane odpowiedzi

Cześć. Mam mały problem z systemem głodu. Mam już zrobiony zapis tego do pliku, a linijka do sprawdzania ilości głodu wygląda tak:

if(PlayerInfo[playerid][pGlod] = 100)

Tylko im więcej głodu tym lepiej, jeżeli głód spadnie do 0 to wtedy spadają nam punkty hp. To takie informacje, które może się przydadzą w rozwiązaniu problemu.

 

Ogólnie to jak zrobić to, że jeżeli mamy niski poziom głodu to coś tam się dzieje umiem zrobić, tylko nie wiem, jak wyświetlać poziom głodu w TD. Text Draw wygląda tak: Ikonka głodu: 100%. Nie wiem jeszcze jak zrobić, że co np. 2 minuty głód zmniejsza się o 1%, od 100% w dół, czyli po 2 minutach będzie 99%, a po 4 minutach 98% itd., a stan tego głodu zmienia się w Text Drawie.

 

Nie chodzi mi tu o gotowy kod, tylko o jakieś rady, czy przykłady jak to zrobić. Jeżeli coś jeszcze trzeba dopisać, jakieś informacje czy coś to proszę pisać. Za pomoc like. :)

 

Wiem, że może to są może dla niektórych banalne pytania, ale ja nie jestem jakimś zaawansowanym programistą. :)

Edytowane przez Mario

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Żeby zrobić zmniejszanie głodu to robisz timer graczowi np. w OnPlayerConnect czy OnPlayerSpawn czy po zalogowaniu a w tym publicu który wywołujesz timerem odejmujesz głodu i korzystasz z TextDrawSetString i aktualizujesz textdraw.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

w timerze co 2 minuty daj:

PlayerInfo[playerid][pGlod]--;

a textdraw:

new str[15];
format(str,15,"Ikonka głodu: %d%",PlayerInfo[playerid][pGlod]);

TextDrawSetString(      twojtextdraw[playerid]      ,str);

co do textdrawu to tez w timer co 2 sek daj

 

@edit:

 

 

Żeby zrobić zmniejszanie głodu to robisz timer graczowi np. w OnPlayerConnect czy OnPlayerSpawn czy po zalogowaniu a w tym publicu który wywołujesz timerem odejmujesz głodu i korzystasz z TextDrawSetString i aktualizujesz textdraw.

 

jak będzie miał z 50 graczy na serwie to będzie 50 timerów?? niezła optymalizacja ...

daj jeden globalny co 2 min a w nim pętle  lub jezeli masz timer co 1 minute to zrob zeby kod na zabieranie glodu wykonywał się co drugi raz

czym mniej timerów tym lepiej

Edytowane przez O Jezu Jakie Fajne

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Chyba że kolega zrobi w następujący sposób pobierać czas dołączenia do serwera i czas wyjścia a następnie w globalnym użyć tego.

 

Mam nadzieje że podpowiedziałem ku rozwiązaniu.

 

 

@edit 

 

Jeżeli pobierzesz czas dołączenia i jego aktualny stan głodu z danych możesz śmiało to wykorzystać w globalnym zaczynając odejmowanie od czasy połączenia gracza do serwera albo jego spawnu.

Edytowane przez Cristein

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

W onplayerrequestspawn czyli po kliknieciu spawn w wybieralce zrob

SpawnTime[playerid] = GetTickCount()+2*60*1000; // 2 minuty

A potem w tym ifie.

if( nie jest afk && SpawnTime[playerid]>GetTickCount())

{

Glod--;

}

Ale to wszystko zalezy od tego kiedy gracz kliknie spawn.. pierwsze zabranie glodu bedzie teraz pomiedzy 2 a 4 min gry.. ale jeden zycie w te czy w tamte to nie wiem czy jest sens to dodawac... najwyzej po 10 sek gry zabierze zycie i juz

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Zrobiłem ten system(prawie), tylko mam 4 errory:
C:\Documents and Settings\Administrator PC\Pulpit\GM3.pwn(489) : warning 215: expression has no effect
C:\Documents and Settings\Administrator PC\Pulpit\GM3.pwn(489) : error 001: expected token: ";", but found "]"
C:\Documents and Settings\Administrator PC\Pulpit\GM3.pwn(489) : error 029: invalid expression, assumed zero
C:\Documents and Settings\Administrator PC\Pulpit\GM3.pwn(489) : fatal error 107: too many error messages on one line

Tyczy się to tworzenia Text Drawu, linijka wygląda tak:
 
Glod[i] = TextDrawCreate(28.799980, 430.080108, "100~w~%");
 
Mam tworzenie tego Text Drawa w pętli, tak samo jak opcje od licznika prędkości(w tej samej pętli), wygląda ona tak:
 
for(new i = 0; i < GetMaxPlayers(); i++)
 
Nie wiem za bardzo co tu jest nie tak w tym. :)
 
Edit
 
Jak zmieniłem TD na tworzenie bez pętli, tylko zwykłe to wszystko się przekompilowało, ale to raczej jak tak zostawię to nie będzie to działać prawidłowo, bo miałem podobną sytuację z licznikiem prędkości, wtedy przy kilku graczach na zmianę licznik zmieniał prędkość i pokazywał albo moją, albo czyjąś.
Edytowane przez Mario

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Ta linijka jest dobra, chyba że nie masz new Text:Glod[MAX_PLAYERS];
Pokaż jedną wyżej i jedną niżej.

Masz jakiś błąd w pętli pewnie bo nie zawsze kompilator pokazuje dobrą linijkę, czasem jest to troszkę wyżej np. brak klamry.

Edytowane przez Cliff32

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jednak problem leżał w tym, że nie dodałem na górze przy tworzeniu Text Drawa [MAX_PLAYERS]. To już działa, jednak pojawił się kolejny problem. Licznik głodu, zamiast iść od 100 w dół, idzie od 0 na -, czyli jest na początku, 0%, później -1% itd. Przy rejestracji konta ustawiam głód gracza na 100, ale po rejestracji w pliku pisze 0.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Wcześniej mam w kodzie pokazywanie dialogu, że podaliśmy nieprawidłowe hasło, a później już jest to:

DOF2_CreateFile(USER_FILE(playerid), inputtext);

a pod tym linijki z poszczególnymi danymi, m.i:

DOF2_SetInt(USER_FILE(playerid), "Glod", 100);
       DOF2_SetInt(USER_FILE(playerid), "Zmeczenie", 100);

Jednak problem chyba nie leży w tym, bo jak sprawdziłem zawartość pliku zaraz po rejestracji i nie wychodząc z serwera, to wszystko było prawidłowo, a jak wyszedłem z serwera, to linijka od głodu wyglądała tak: Glod: -2. Chyba coś jest nie tak z całym tym systemem, bo jak pisałem wyżej, nie idzie ten głód od 100 w dół, tylko od 0 na -.

 

Edit

 

Tutaj podaję kod od tego systemu głodu, może ktoś będzie wiedział, dlaczego ten głód nie idzie od 100 w dół, tylko od 0 w dół i na minus.

 

http://pastebin.com/0j3mM6r7

Edytowane przez Mario

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

W OnPlayerConnect albo po poprawnym zalogowaniu/zarejestrowaniu daj:

PlayerInfo[playerid][pGlod] = 100; // tylko, że taki sposób daje 100 głodu po reconnect'cie.
//Więc najlepiej przypisać po zalogowaniu do zmiennej pGlod wartość z pliku. Nie wiem jak to zrobić bo nie umiem zapisu/odczytu z systemem dof2.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

W tym timerze od odejmowania zycia zamien na to

if( nie jest afk){

Glod[pla..]--;

}

if(Glod[pla..]< 0) {glod[pla..]= 0}

Sry ze bez codei musisz zmienic ten kod na swojego enuma ale pisze na fonie ...a zanim napisze to wiesz...

Edytowane przez O Jezu Jakie Fajne

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

@Up, ale to chyba tylko doda to, że jak gracz jest na afk to głód nie spada, a mi na tym nie zależy, bo jak ktoś będzie na afk to może ten głód spadać i tak. :)

 

Co do tego, aby przypisać wartość głód po zalogowaniu, to mam tak to zrobione w odczycie danych przy logowaniu:

 

PlayerInfo[playerid][pGlod] = DOF2_GetInt(USER_FILE(playerid), "Glod");
To jest chyba okej. Mój problem polega na tym, że głód idzie nie od 100 do 0, tylko 0 w dół. Coś chyba musi być nie tak z systemem bo ogólnie był tak: Po zarejestrowaniu się, w pliku miałem linijkę Glod: 100, czyli tak jak ma być. Natomiast po wyjściu z serwera po niedługim czasie, w pliku już było takie coś: Głód: -2. Nie wiem o co chodzi, co jest nie tak. Myślałem, że jest coś źle podczas zapisu danych, przy wychodzeniu z serwera, ale raczej nie, bo wygląda to tak:
DOF2_SetInt(USER_FILE(playerid), "Glod", PlayerInfo[playerid][pGlod]);

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

1. sprawdz w pliku ile masz glodu i napisz tutaj

2. zrob komende ktora ci pokaze poziom glodu jak juz sie zalogujesz itp

3. pokaz textdraw ktory wyswietla glod, chodzi o string wyswietlajacy

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jednak chyba będę musiał ten system zrobić od nowa. Ciągle coś z nim nie tak jest, napiszę go od nowa, trochę inaczej. :)

 

Jak na razie, dziękuję wszystkim za pomoc. Proszę jeszcze nie zamykać tematu, bo jak coś nie będę wiedział podczas tworzenia tego systemu to napiszę. :)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×