Mapcio
6.05.2012, 16:56:14
Witajcie.
Jestem jednym z webmasterów największego polskiego serwera gry Silkroad Online.
Aktualnie postanowiliśmy zrobić ranking najlepszych graczy na serwerze, jednak
mam dość duży problem. Nie jest to problem dotyczący możliwości czy nie wiedzy,
po prostu nie mam pojęcia jak się do tego zabrać.
Pokrótce co mam mniej więcej do zrobienia:
1. Gracz 1 i gracz 2 wchodzą na stronę, logują się i wybierają termin pojedynku.
Opis: Proste, nie wymaga pomocy.
2. O ustalonej przez graczy godzinie skrypt teleportuje ich do wyznaczonego miejsca i zaczynają walczyć.
Opis: Proste, poza tym tylko, że nie wiem jak wywołać skrypt o danej godzinie(może jakiś javascript?)
3.Gracze walczą, jeżeli którykolwiek z nich umrze skrypt zlicza ilość jego śmierci. Który gracz umrze pierwszy 3 razy przegrywa.
Opis: W bazie danych mamy przy każdym graczu kolumnę: current hp(aktualny stan zdrowia). Według mnie należało by zrobić
to tak, że gdy hp jednego z delikwentów spadnie do 0 odpalamy skrypt który dodaje ilość zgonów do tabeli z pojedynkami.
Gdy ilość zgonów wyniesie 3 przerywamy pojedynek i wyłaniamy zwycięzce.
No i tutaj problem, jak wywołać skrypt gdy hp wyniesie 0? Odświeżać skrypt wywołujący co 0,1s i sprawdzać hp?
Takie troche nie profesjonalne, pozatym, delikwent ma możliwość natychmiastowego respawnu(pojawienia się na nowo z 100% życia)
Więc mogą być sytuacje, gdzie system nie zarejestruje zgonu.
Proszę o pomoc :[
Trochę o mechanizmie gry:
Gra nie jest przez przeglądarkę(bo ktoś by mógł tak wnioskować z opisu), natomiast mamy dostęp ze strony do jej bazy mssql.
ShadowD
6.05.2012, 17:03:18
Jak jedyne co masz to dostęp do bazy to będzie spory problem z #3, nie przeskoczysz tego chyba że dopiszecie jakiś plugin do gry podczepiony pod respawn, w momencie ożywiania będzie dodawał +1 do bazy, inaczej tak jak mówisz w czasie "sleep()" ktoś będzie mógł się ożywić i będziesz miał problem, z kolei jeśli się nie ożywi tylko będzie leżał będzie ciężko odróżnić czy ponownie umarł czy jeszcze nie ożył, więc tak jak na początku bez pluginu do samej gry nie zdziałacie za dużo w tej materii.
#2 po prostu cron ustawiasz go co powiedzmy 10 minut, sprawdzasz czy w danym momencie jest ktoś kto ma mieć pojedynek jeśli tak teleportujesz, pojedynki będą mogły rozgrywać się o 12:10, 12:30 itd. Możesz czas dostosować do swoich preferencji.
Kod
No i tutaj problem, jak wywołać skrypt gdy hp wyniesie 0? Odświeżać skrypt wywołujący co 0,1s i sprawdzać hp?
Websocketem, albo czymś o podobnym. W zależności czego użyjecie do komunikacji gra <=> mysql.
Cytat
O ustalonej przez graczy godzinie skrypt teleportuje ich do wyznaczonego miejsca i zaczynają walczyć.
Cron?
redeemer
6.05.2012, 17:07:30
Co do #3 to można by pokombinować z triggerami w bazie.
Mapcio
6.05.2012, 18:21:09
Zerknąłem teraz w bazę, mamy jeszcze kolumnę która zapisuje współrzędne ostatniego zgonu danego gracza(z dokładnością do 5 miejsca po przecinku)
Zastanawiam się czy była by możliwość, żeby użytkownik umarł w tym samym miejscu kilka krotnie(z dokładnością do 5 miejsca po przecinku O_o?).
Tym bardziej, że postacie sporo się przesuwają podczas pojedynków. Myślę, żeby wykorzystać zmianę właśnie tych koordów po zgonie i liczyć każde ich zmiany
jako śmierć gracza. Tylko teraz pytanie. Jaki delay na skrypcie który ma zliczać zgony, i jak to z głową poskładać w całość.
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.