ta sama "ilosc licznika" po uzyciu...
Oporowiec. 24.01.2014
siema
mam swoj plugin w, ktorym znajduje sie zmienna licznik i nalicza ona ile razy gracz uzyl danej komendy, jest taka mozliwosc zeby "licznik" pozostal ten sam po uzyciu komendy retry lub recconect ?
proszę o przykladowy plugin.
Filip1512
25.01.2014
Najlepiej zrobić zapis nvault bądź mysql, ale z mysql na takie pierdoły będzie zbędny.
Oporowiec. 25.01.2014
ale mi chodzi o to zeby na nowej mapie juz licznik byl zerowany..
@ps
za co dostalem - ?
xenos
29.01.2014
To i tak musisz gdzieś przechowywać te dane, zwykła tablica Ci nie wystarczy.
Gdyż nie masz pojęcia ilu user ów bd wchodziło, chyba że zrobisz ogromną przykładowo 100, do której bd zapisywał nicki.
Tablica 2 wymiarowa -> 1 wymiar = nick 2gi wymiar= "zliczanie';
Tablice przeszukiwałbyś pod względem nicku czy taki nick już istnieje jeżeli tak to ma pobrać z 2giej wartości to "zliczenie" i przypisać do obecnego.
Przy małym serwerze to mogło by zadziałać lecz przy większym nie bardzo,. Jednocześnie trzeba zwrócić uwagę na wydajność( w przypadku optymistycznej wartości jest to algorytm rzędu n^2) więc mało optymalny.
Jednocześnie mający charakterystyczny błąd -> co w momencie przekroczenia ilości osób w tablicy(więcej osób wejdzie niż tablica ma rozmiar)
Wtedy dla tych kolejnych będzie sypał errorami( wyjście poza tablice)
Dodatkowo "powiększenie tablicy" o kolejne rozmiary, zwiększy czas przeszukiwania jej .
Dlatego albo zapis+odczyt z pliku tekstowego
Bądź nvault/mysql;
W przypadku mysqla -> mniejsze obciążenie dla serwera gdyż zapytania wykonywały by się po stronie serwera mysql.
A przy starcie nowej mapy, wykonywała by się komenda czyszcząca daną tabele w mysqlu.
Więc co nowa mapa= to nowe zliczanie.
sebul
29.01.2014
xenos
29.01.2014
zapis do tablicy - wartość N
Funkcja czyszczenia->
Sprawdzająca czy dany gracz jest() (jazda po wszystkich elementach) tablicy -> N
jesli nie to, to wywołaj -> funkcje czasowa, ze za x sek ma usunąć jego z tablicy z tablicy ->liniowe
[usunięc] rekordu - liniowe
I teraz założenie pesymistyczne,
A co w momencie gdy przed usunięciem, a wpisaniem nowej wartości tablica się przepełni?
Błąd ? no wiadomo .
Reconnect zależny od sprzętu więc trzeba też wsiąść pod uwagę tą sferę.
Dlatego nie skróci się czasu "usunięcia" poniżej 1s(nawet do wychwycenia funkcji client_connect). A na poważnych serwerowniach w ciągu 1s chce wbić na serwer 5 graczy gdy serwer jest full.
Więc twoja propozycja jest nie wydajna, oraz posiada błędy krytyczne.
Gdyż nie zakłada wszystkich możliwych opcji.
Ps: dziękuje za minus -1 . Chociaż mój post nie złamał regulaminu oraz rozwiązanie podane nie działa na szkodę klienta, a pkt reputacji są dla niektórych zabawką
(to też można podać pod minus)
GeDox
29.01.2014
Poczytaj o trie i array
@topic
Proponuje wykorzystanie trie z zapisem na nick:)
Edited by GeDox, 29.01.2014 17:02.
sebul
29.01.2014
Jaki błąd? Jak przy pisaniu kodu nie założysz sobie takiej sytuacji, to oczywiście, będzie błąd, ale czy ja gdzieś napisałem, żeby nie brać tego pod uwagę? Przecież samo napisanie to, że można wykorzystać N elementową tablicę, od razu oznacza, że trzeba się zabezpieczyć przed przepełnieniem, dodatkowo tablice, to nie tylko zwykłeI teraz założenie pesymistyczne,
A co w momencie gdy przed usunięciem, a wpisaniem nowej wartości tablica się przepełni?
Błąd ? no wiadomo .
new tablica[32];
tak jak to już wyżej zostało napisane.
Nie wiem jaki związek miało by tutaj wbijanie graczy na serwer, przecież coś zapisuję się tylko przy wychodzeniu gracza i nawet przy 32 slotach, raczej gracze nie wychodzą częściej niż raz na ok. 10 sekund (albo nawet i więcej), więc bez problemu usuwanie można ustawić na jakieś 5-10 sekund po wyjściu gracza.Reconnect zależny od sprzętu więc trzeba też wsiąść pod uwagę tą sferę.
Dlatego nie skróci się czasu "usunięcia" poniżej 1s(nawet do wychwycenia funkcji client_connect). A na poważnych serwerowniach w ciągu 1s chce wbić na serwer 5 graczy gdy serwer jest full.
O błędach krytycznych napisałem, a to czy jest wydajna, na pewno jest lepszym rozwiązaniem niż "zaprzęganie" do tak prostej czynności mysql. A minus? Nie musisz łamać regulaminu, żeby go dostać, nie musisz też działać na czyjąś szkodę, po prostu mam taką możliwość, więc go dałem, a dlaczego? Wywnioskuj to sobie z moich postów, bo za darmo go nie dostałeś.Więc twoja propozycja jest nie wydajna, oraz posiada błędy krytyczne.
Gdyż nie zakłada wszystkich możliwych opcji.
Ps: dziękuje za minus -1 . Chociaż mój post nie złamał regulaminu oraz rozwiązanie podane nie działa na szkodę klienta, a pkt reputacji są dla niektórych zabawką
(to też można podać pod minus)