Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL][JavaScript]Automatyczne dodawanie liczby do wartości rekordu
Forum PHP.pl > Forum > Przedszkole
TimeMaster
Witam.
Tworzę prostą gierkę przeglądarkową (tak dla zabawy i nauki).
Jednak mam problem ze stworzeniem skryptu "produkcji zasobów".

Z połączeniem i wyborem bazy/tabeli/rekordu nie ma problemów...

Jednak chciałem użyć operatora:
  1. $zmienna+=300
tak by z każdą aktualizacją dodawało do danego rekordu liczbę 300.

Jednak jakim skryptem rozwiązać problem auto aktualizacji? Tak by co np. 30 min dodawało te 300 do rekordu.
Na moje logiczne myślenie taki skrypt musi działać po stronie serwera... Jeżeli się mylę proszę mnie poprawić smile.gif

Czy ma ktoś jakieś pomysły?
bpskiba
Najpierw należy przemyśleć kilka rzeczy
1 co należy zapamiętać w bazie danych
2 co należy liczyć po stronie serwera
3 co należy robić po stronie klienta w przeglądarce

Coś takiego jak produkcja zasobów realizowane musi być w trzech miejscach. Przemyśl....
nospor
Cytat
Na moje logiczne myślenie taki skrypt musi działać po stronie serwera...
Tak a do jego odpalania używa się CRONa
PatroL14
Powinieneś stworzyć osobny plik o nazwie "cron.php" i dodać do niego zapytanie sql, że ma dodawać do danego gracza ileś tam zasobów.
Poszukaj gdzieś na necie widziałem kiedyś darmowy cron, wtedy sobie podajesz adres do tego pliku i ustawiasz, że co 30 minut ma go uruchamiać.
bpskiba
Po mojemu należy to zrealizować wszędzie po trochu smile.gif

W bazie zapamiętać ilość początkową, prędkość przyrostu i znacznik czasu przy której mamy ilość początkową.
Po stronie serwera na podstawie powyższego i bieżącego znacznika czasu da się obliczyć obecny stan zasobów
Bazę należy aktualizować cronem lub z pomocą jakiegoś zdarzenia w grze (logowanie użytkownika, szpiegowanie, zwiększenie poziomu użytkownika itp)
Po stronie przeglądarki również miło będzie jak poziom zasobów będzie się zwiększał bez konieczności odświeżania
Tuminure
Czy aby na pewno cron to dobry pomysł? W przypadku kilku graczy nie ma większego problemu - co jednak, gdy graczy będzie kilka tysięcy, z czego wielu nieaktywnych?
Czy jest sens dodawania +300 do każdego rekordu co 30 minut (biorąc pod uwagę, że aktualnie zalogowanych będzie zaledwie niewielki procent użytkowników)?

Wydaje mi się, że w wielu grach przeglądarkowych jest to zrobione bez crona, a po prostu takie rzeczy są sprawdzane przy każdorazowym odświeżeniu strony.
PatroL14
Nawet lepszym sposobem będzie, który będzie nawet przyciągał graczy do gry ustawienie w cron tak aby dodawało te 300 surowców tylko zalogowanym użytkownikom.
Tuminure
Cytat
Nawet lepszym sposobem będzie, który będzie nawet przyciągał graczy do gry ustawienie w cron tak aby dodawało te 300 surowców tylko zalogowanym użytkownikom.

O ile dobrze rozumiem, to każdy ma dostawać te surowce, a nie tylko zalogowani. Dlatego właśnie zrezygnowałbym z crona dla takiego zadania. Często w grach przeglądarkowych spotykany jest mechanizm, który działa tak, żeby kliknąć i wrócić za np. godzinę, by np. zobaczyć wynik walki, zlecić postaci nowe zadanie itd.

Po prostu w bazie danych, w miejscu gdzie trzymane są dane użytkownika, dodałbym kolumnę, która odpowiadałaby za czas ostatniej aktualizacji surowców. Wtedy przy każdorazowym sprawdzaniu, czy użytkownik jest zalogowany, sprawdzałbym też czy nie minęło więcej niż (wielokrtoność) 30 minut od ostatniego dodania surowców. Następnie dodawałbym do kolumny z ostatnią aktualizacją (wielokrotność) 30 minut, a także do surowców (wielokrotność) 300 jednostek. Wtedy przy każdym odświeżeniu strony/przejśćiu gdzieś indziej wykonywany jest jeden "select" w bazie danych oraz jeden "if". Jeżeli "if" okaże się prawdą, następuje "update" w bazie. Przy takim rozwiązaniu, choć mamy sporo selectów (aż jeden na odświeżenie strony tongue.gif), to nie wykonujemy zbędnych update'ów dla osób, które aktualnie nie grają.

Dodatkowo można to wpisać do sesji lub ciasteczek, by zlikwidować tego selecta.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.