Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MySQL][JavaScript]Automatyczne dodawanie liczby do wartości rekordu, Co pewien czas.
TimeMaster
post 2.08.2012, 19:47:15
Post #1





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 8.09.2011

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
bpskiba
post 2.08.2012, 19:56:40
Post #2





Grupa: Zarejestrowani
Postów: 340
Pomógł: 49
Dołączył: 3.07.2009
Skąd: Rzeszów

Ostrzeżenie: (0%)
-----


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....
Go to the top of the page
+Quote Post
nospor
post 2.08.2012, 19:59:49
Post #3





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Na moje logiczne myślenie taki skrypt musi działać po stronie serwera...
Tak a do jego odpalania używa się CRONa


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
PatroL14
post 2.08.2012, 20:00:24
Post #4





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 2.08.2012

Ostrzeżenie: (0%)
-----


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ć.
Go to the top of the page
+Quote Post
bpskiba
post 2.08.2012, 20:34:01
Post #5





Grupa: Zarejestrowani
Postów: 340
Pomógł: 49
Dołączył: 3.07.2009
Skąd: Rzeszów

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Tuminure
post 3.08.2012, 08:00:50
Post #6





Grupa: Zarejestrowani
Postów: 178
Pomógł: 49
Dołączył: 16.04.2012
Skąd: Bytom

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
mmmmmmm
post 3.08.2012, 10:08:17
Post #7





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

Ostrzeżenie: (0%)
-----


http://dev.mysql.com/doc/refman/5.5/en/create-event.html
Go to the top of the page
+Quote Post
PatroL14
post 3.08.2012, 10:35:15
Post #8





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 2.08.2012

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Tuminure
post 3.08.2012, 11:49:41
Post #9





Grupa: Zarejestrowani
Postów: 178
Pomógł: 49
Dołączył: 16.04.2012
Skąd: Bytom

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Tuminure 3.08.2012, 11:56:26
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 09:11