My4tic
15.01.2006, 21:05:39
Właśnie ojciec siedział przy kompie i grał w OGame (www.ogame.pl) i tak zastanawiałem się jak jest zrobiona ta gra.
Chodzi mi o symulacje walk o okreslonym czasie.
Np. ktos wysyła flote, która uderza w jakąś tam planete za 45 min.
Czy to jest zrobione przez crona? Skrypt uruchamiający się w każdej sekundzie i sprawdzający czy przypadkiem któryś z userów nie atakuje innego? To chyba byloby strasznie obciążające serwer?
Mamy np.
[czas startu] + [czas lotu] = [czas ataku] > zapis do SQL
i cron uruchamiający sie co 1 sek. sprawdza czasy ataków i dalej symuluje walki.
Jeszcze zastanawia mnie czy czas wykonania takiego skryptu nie bylby większy od 1 sek. Przy kilku tysiącach userów jak to ma miejsce na OG to chyba tak.
Nie wiem czy jasno opisałem o co mi chodzi ale mam nadzieje ze sobie poradzicie

-- edit --
Jakby kogoś interesowało to przed chwilą znalazłem zlecenie w podobnych klimatach:
http://forum.php.pl/index.php?showforum=12
bela
15.01.2006, 21:15:33
Chyba łatwiej odpalić serwer aplikacji, niekoniecznie napisany w php, ale też tam można. Jest on odpalony z shella i chodzi na okrągło. Jest w nim pętla, w praktyce nieskończona dzięki której skrypt działa ciągle.
My4tic
15.01.2006, 21:24:09
Serwer aplikacji? Czyli pod samym php cięzko będzie coś takiego zrobić? Chyba troche nieoptymalnie...
bela
15.01.2006, 21:47:08
Czemu? Poszukaj projektu Hive. Był laurentem konkursu Zenda, w dodatku napisany przez Polaka.
My4tic
15.01.2006, 21:52:07
Dzięki. Na pewno poczytam o tym. Jakby ktoś miał jeszcze jakieś pomysły to będę wdzięczny
hwao
15.01.2006, 22:27:42
Co wy... to jest ogame

Poprostu jak ktos wywoluje akcje zwiazana z iloscia floty a do tej pory symulacja nie zostala przeprowadzona zostaje ona wygenerowan i dane zostaje zupdejtowane
IMHO
mike
15.01.2006, 22:30:38
Uważam podobnie jak ~hwao.
Szczeże ątpię żeby tam jaieś serwery chodziły.
Po prosu zawsze keidy jest żądanie pokazania jakiejś operacji wszystkie algorytmy sę puszczane w ruch i widac tylko ich wyniki.
Sam właśnie pisze podobna grę i takie rozwiązania będe stosował.
My4tic
15.01.2006, 22:39:47
Proszę jaśniej

Chyba nie rozumiem... przecież to gra online. Flota leci ileś tam czasu... 'obrońca' sie może zalogować i w tym czasie wysłać flote. Gdy 'agresor' doleci to juz tam nic nie będzie - czyli symulacja musi być prowadzona w czasie kiedy flota uderza. Czyli skrypt symulujący walke musi być uruchomiony w czasie uderzenia więc jakoś ten czas musi być sprawdzany?
ActivePlayer
15.01.2006, 22:52:16
mike
15.01.2006, 22:58:59
Powiedzmy leci sobie flota. Zainteresowani wynikami są Obońca i Agresor.
Jeśli czas jaki potrzebny jest na dolecenie jeszcze sięnie skończył a nastąpiło żądanie wyników, to pokazana jest informacjia kiedy doleci (data dolotu - data obecna). Nie ważne kto prosi o wyniki.
Jesli natomiast czas się skończył to wcale serwer nie musi wykonać algorytmów walki dopóki ktoś o nie nie poprosi.
Jesli ktoś to zrobi (nieważne czy Agresor czy Obrońca) to serwer wykonuje algorytmy i pokazuje wynik (który jest też zapisywany).
Jeśli o wyniki poprosi kolejny to już widzi wyniki wygenerowane.
Do tego nic nie musi chodzić cały czas.
Po co ma chodzić serwer, który będzie wykonywał algorytmy w chwili kiedy nikt nie prosi o wyniki tych obliczeń?
My4tic
15.01.2006, 23:08:44
Hmmm... słusznie :-) Chyba już poźno bo dopiero teraz złapałem o co chodzi :-) Dzięki.
Ale przecież Obrońca może w czasie lecenia floty wroga np. rozbudowac obronę i efekt stracia będzie inny, prawda?
Radarek
18.01.2006, 17:07:38
No pewnie ze bedzie inny, bo przeciez "symulacja" walki zostanie przeprowadzona przy pierwszym rzadaniu wyniku (zalogowaniu), ale juz po dotarciu floty do celu. Czyli dopoki flota leci mozesz sobie spokojnie budowac obrone i bedzie to uwzglednione podczas symulacji walki.
SHiP
18.01.2006, 21:25:01
No tak tylko załużmy że jest taka sytuacja
mike_mech wysyła do mnie 100 cieżkich myśliwców zostało 5 minut do ich wyladowania na mojej planecie. Ja buduje 200 dzialek i wylogowuje sie... Ani ja ani mike_mech nie gramy przez kilka dni. następnie wchodze loguje sie, generuje mi sie walka tyle że juz z działkami które napewno nie zdążyły by sie wybudować w 5 minut ;] I mike_mech dostaje w dupe

Problem dotyczy również resztek po walce w przestrzeni
EDIT:
Moim zdaniem obnliczanie wyników starć nie zależy tylko od agresora i obrońcy a od każdego gracza. Po prostu za kazdym razem sprawdzane jest czy nie ma w bazie zadnej walki która powinna sie wygenerować. Jesli jest to jest generowana...
Radarek
18.01.2006, 21:44:48
Niekoniecznie. Przeciez skrypt symulujacy ma dostep do tego kiedy zaczales budowac dzialka obronne i o ktorej walka miala sie rozpoczac. Wtedy tych dzialek nie bierze do symulacji.
DeyV
18.01.2006, 23:03:34
Niestety - nie może to wyglądać w sposób przedstawiony przez mike_mech'a
W tym konkretnym przypadku dlatego, ponieważ zainteresowanych jest więcej, niż tylko ageresor i obrońca.
Są jeszcze sepy

które czekają na złom...
Chyba że odpowiednie sprawdzanie podpięte byloby zarówwno pod odpowiednie zachowania agresora i obrońcy, ale - dodatkowo - również pod akcję podglądu galaktyki każdego, kto wejdzie do odpowiedniego układu.
Jeśli jednak poszlibyśmy tym tropem - musielibyśmy odpalać całą kolejkę zdarzeń związanych z danymi osobami i planetami w okreslonym ukladzie.
Troszkę to skomplikowane by było...
Puciek
18.01.2006, 23:08:39
@DeyV: skomplikowane ale jednak wydajniejsze niz kron
mike
19.01.2006, 00:56:22
Cytat(DeyV @ 2006-01-18 23:03:34)
Są jeszcze sepy

które czekają na złom...
(...) No tak całkowicie zapomniałem o reszcie :roll2:
Dawno już w to nie grałem.
Jednak
cron.
Radarek
19.01.2006, 01:44:29
Albo jakis programik, ktory robi za symulator wszystkich czynnosci, na okraglo uruchomiony, jak jest cos do zasymulowania to robi to, a wynik zapisuje do bazy, jak nie ma to czeka.
mike
19.01.2006, 08:27:49
Cytat(Radarek @ 2006-01-19 01:44:29)
Albo jakis programik, ktory robi za symulator wszystkich czynnosci, na okraglo uruchomiony, jak jest cos do zasymulowania to robi to, a wynik zapisuje do bazy, jak nie ma to czeka.
Skrypt w
creon'ie :?:
hwao
19.01.2006, 09:03:56
Co Wy gadacie, tu przeciez wcale nie trzeba
cron'a.
To da sie napisac poprostu jak ktos potrzebuje tych danych to sa parsowane 1 raz i tyle... myslicie ze skad bylo tyle bugow?
taki cron obciazyl by tak baze ze nie wiem czy by to w ogole dzialalo

btw: myslicie czemu ze przegladanie galaktyki tyle trwa?
Radarek
19.01.2006, 13:34:25
Cytat(mike_mech @ 2006-01-19 07:27:49)
Cytat(Radarek @ 2006-01-19 01:44:29)
Albo jakis programik, ktory robi za symulator wszystkich czynnosci, na okraglo uruchomiony, jak jest cos do zasymulowania to robi to, a wynik zapisuje do bazy, jak nie ma to czeka.
Skrypt w
creon'ie :?:
Niekoniecznie

. Rozumiem, ze cronowy skrypt musialby byc uruchamiany co jakis czas (1min?), a program o ktorym mowie moglby byc uruchamiany raz, dzialalby caly czas (przez co nie tracilby czasu na uruchamianie). Mnie i tak wydaje sie, ze nie ma wykonywanych symulacji, tylko podczas rzadania dostepu do danych, ktore wymagaja zasymulowania tego co stalo sie w przeszlosci jest to robione.
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.