+++

Wsparcie dla silnika


technicalW trzecim blogu dotyczącym klanów Mod CHihiro podaje trochę więcej technicznych zmian, których musimy dokonać, by bardziej wspomóc klany, oraz jakie zmiany musimy wprowadzić w silniku gry. 


Kiedy po raz pierwszy pomyśleliśmy o aktualizacjach dla klanów, wiedzieliśmy, że musimy sprawić, by silnik gry działał tak, jak ma działać, brzmi to względnie dziwnie. Mamy obecnie system, który pozwala komunikować się całemu światu, pomiędzy grupami graczy (system przyjaciół), więc mogliśmy traktować klan i listę klanowiczów jako coś analogicznego do listy przyjaciół, więc trochę zmodyfikowaliśmy wersje zapisu gry gracza oraz systemu przyjaciół i gotowe! 

Jak bardzo się myliliśmy... Kiedy z bliska przyjrzeliśmy się detalom implementacji, zrozumieliśmy, że klany są dużo bardziej skomplikowaną ideą niż lista graczy. To sprawiło, że zaczęliśmy myśleć bardzo ostrożnie nad architekturą oprogramowania, która została stworzona, by działał ten system ten. 

hr
Dlaczego klany są tak skomplikowane? 

Po pierwsze, jeden gracz potrzebuje określonego dostępu do zapisu gry gracza w dowolnej chwili. Dane klanu powinny być dostępne dla wielu graczy, którzy mogą być na różnych światach. To jest dużo bardziej skomplikowany problem dla RuneScape, niż dla innej gry tego typu, z powodu tego, że jest możliwość zmiany świata. Klany są stworzone dla graczy, którzy mogą być w grze o każdej godzinie. 

Nie możemy więc składować danych o klanie na jednym świecie, potrzebujemy zewnętrznej przestrzeni, by była zawsze dostępna. Trzymanie informacji, do których potrzebny jest dostęp z różnych miejsc, jest trudne. Prostym rozwiązaniem jest stworzenie hazardu (jeśli nie wiesz, co to oznacza, sprawdź ten wpis w Wikipedii). Problem jest w tym, że kiedy wielu graczy próbuje zmienić tą samą część danych w tym samym czasie, spowoduje to desynchronizacje, bądź nawet uszkodzenie systemu klanów. Na przykład, chcesz zmienić range gracza na twoim kanale. 

hr

Obecnie tylko właściciel może to zrobić, dlatego nie ma tu zagrożenia, lecz gdy zezwolimy, by więcej osób mogło zmieniać rangi na kanale, to pomyślcie, co stanie się, gdy dwie osoby będą chciały zmienić range innej osobie w tym samym czasie? Analogicznie wyobraź sobie, że jesteś na lotnisku w odprawie bagażowej i wybierasz swoje miejsce. W przyległej odprawie bagażowej ktoś inny robi to samo i załóżmy, że oboje jesteście w pierwszej linii, więc kiedy się odprawiacie, wszystkie miejsca są wolne. Co się stanie, jeśli oboje wybierzecie te samo miejsce jednocześnie? Jeśli oboje zarezerwujecie to samo miejsce, będzie to największy błąd hazardu (i doprowadzi do tego, że jedno z was będzie poirytowane, gdy wejdzie do samolotu i ktoś inny będzie siedział na twoim miejscu). 

Trochę gorszym rozwiązaniem jest możliwość zarezerwowania tego siedzenia. Idealną możliwością byłoby zarezerwowanie miejsca i powiedzenie drugiej osobie, że to miejsce jest zajęte, jeszcze zanim ona opuści odprawę. Lecz to wymaga, by osoba obsługująca cię wiedziała, co się dzieje u drugiej w czasie rzeczywistym. Jest to dużo bardziej skomplikowana sytuacja, niż gdyby była tylko jedno okienko z odprawą bagażową i jedną kolejką. 


hr

To oznacza, że musimy pracować bardzo ostrożnie z Mod'em Michael, który decyduje, która cześć informacji klanów powinna być tam, gdzie ma być, kiedy i gdzie powinniśmy móc ją przeczytać lub napisać. Niektóre części informacji muszą być możliwe do uaktualnienia na żywo (zmiany dokonywane przez adminów np. zmiana rangi), więc musi być to możliwe z każdego miejsca, musi się zaktualizować samo, gdy zostanie użyte. Ten typ danych będzie umieszczony na nowym serwerze dla ustawień klanów, który będzie używał protokołu w stylu-"listowym". 

Inne informacje typu, ilość wygranych bitw na Clan Wars, wymaga zmiany tylko w momencie zakończenia bitwy i nie musi być zaktualizowana od razu dla wszystkich członków klanu. Więc ten typ danych będzie zapisywany w profilu specyfikacji klanu, który będzie uaktualniał się w momencie, gdy będziemy chcieli zobaczyć te informacje. 

Po drugie, mamy zamiar dodać ekstra pomysł, ponieważ serwer przyjaciół nie jest supportowany i dlatego właśnie powstała idea, by gracz mógł być pełnoprawnym członkiem tylko w jednym klanie. Kolejnym pomysłem jest stworzenie tabeli punktów dla klanów. Sądzimy, że jest to dość ważna rzecz dla klanów, by mogły oceniać 
siebie względem innych. 

hr

Jednakże jeśli pozwolimy graczom, by mogli być w kilku klanach jednocześnie, okaże się to pomyłką. To oznacza, że gracz z dobrymi statystykami mógłby zostać zrekrutowany do wielu klanów w tym samym czasie, tylko po to by pomóc im zdobyć wyższa pozycje w tabeli, co spowodowałoby, że tabela byłaby bezsensowna. 
Dlatego Mod Michael tworzy system, który pozwoli nam przydzielić gracza do jednego klanu, a nam pozwolić sprawdzić to w grze w każdym momencie. 

Mam nadzieję, że zobaczyliście, jak dużo pracy musimy włożyć w silnik, zanim wprowadzimy funkcje dla klanów, na które czekacie. To się dzieje i rozwiązujemy po drodze wiele problemów z tym związanych. Przynajmniej mamy już przejrzystą idee tego, co musimy zrobić. 

By porozmawiać na temat tego bloga, odwiedź ten temat

 


© 2004-2011 Wygląd zaprojektowany przez Bartosz Bociek
Runescape jest znakiem towarowym Jagex Software 1999 - 2011 Andrew Gower and Jagex Ltd.
My nie jesteśmy Jagex Ltd. Teksty kursywą są tłumaczeniem i wraz z obrazkami należą w całości do Jagex Ltd