![]() |
![]() |
![]()
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: 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ć ![]() Czy ma ktoś jakieś pomysły? |
|
|
![]() |
![]()
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.... |
|
|
![]()
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 |
|
|
![]()
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ć. |
|
|
![]()
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
![]() 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 |
|
|
![]()
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. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 1 421 Pomógł: 310 Dołączył: 18.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
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.
|
|
|
![]()
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 ![]() Dodatkowo można to wpisać do sesji lub ciasteczek, by zlikwidować tego selecta. Ten post edytował Tuminure 3.08.2012, 11:56:26 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 09:11 |