Buduję MMO i chcę dodać NPC. Chodzi o to, że nie znam podstawowego projektu. Co robi obliczenia, klienci lub serwer? Zrozumiałbym serwer obliczający zdarzenia i reakcje, ale jeśli chodzi o wyszukiwanie ścieżek oraz pozycję i ruch gracza, kto to oblicza?
Kto oblicza AI serwera lub klienta? Nie mogłem sobie wyobrazić serwera obliczającego szukanie ścieżki, pozycję, ruch i tak dalej. Proszę, potrzebuję pomocy w zrozumieniu tego, dzięki, wszystko pomoże.
Odpowiedzi:
Większość MMO ma obecnie wszystko, co zrobiono po stronie serwera, ze względów bezpieczeństwa. Nie można zbytnio obciążać klienta, dlatego jedną z pierwszych rzeczy są procedury AI. Myślę, że większość programistów uważa, że po stronie klienta można zhakować z reguły, a nie wyjątek.
Scalify's Badumna ( http://www.scalify.com/badumna.php ) próbuje odciążyć część klientów, dzięki czemu obliczenia zostaną wykonane po stronie klienta i przesłane do siebie; niektóre dane są również wysyłane do autorytatywnego peera w celu sprawdzenia, zanim zostaną przekazane klientom, podobnie jak serwer dedykowany. Problem polega na tym, że WSZYSTKIE dane w grze wieloosobowej MUSZĄ zostać przesłane przez autorytatywnego partnera, jeśli chcesz zapobiec oszukiwaniu. Przywołałem Badumnę, ponieważ wydawało się to najbliższe temu, czego możesz chcieć, ale nawet to nie będzie w stanie złapać oszustów - może złapać niektórych, ale wszystko, co najważniejsze (tj. Wszystko, właściwie) musi być zrobione na serwerze - bok.
Mógłbym rozwinąć trochę na Badumnie, ponieważ nadal może być to coś, co może ci się przydać (ale nalegam, abyś ponownie rozważył odciążenie wszystkiego, co ważne na klientach, ponieważ klienci będą Oszukiwać).
Badumna oferuje hybrydową architekturę do operacji na danych. Zapewnia programistom całkowitą kontrolę przy podejmowaniu decyzji o tym, co jest krytyczne (i musi zostać zweryfikowane), a co nie (i dlatego może zostać wysłane przez zdecentralizowaną sieć).
Jeśli MMO wymaga weryfikacji każdego bitu informacji, Badumna będzie działać jako rozwiązanie klient-serwer. Uważam jednak, że istnieją różne kategorie aplikacji MMO o różnych wymaganiach. Na przykład dość często MMO będzie miało strefy walki, w których gracze prawdopodobnie będą oszukiwać, dlatego każda informacja musi zostać zweryfikowana. Istnieją jednak również strefy, w których gracze mogą chodzić / biegać / tańczyć / rozmawiać. Takie strefy nie wymagają pełnej weryfikacji i mogą wykorzystywać zdecentralizowaną sieć Badumny i korzystać ze skalowalności, jaką może zaoferować.
Po drugie, Badumna zapewnia dodatkowe funkcje bezpieczeństwa, do których programiści mogą uzyskać dostęp, takie jak ochrona tożsamości (aby użytkownicy nie mogli udawać, że są kimś innym), proxy reklamacji (pozwalające na skonfigurowanie klientów do zgłaszania złośliwych / oszukujących graczy do zaufanego źródła) oraz czarną listę (banowanie złośliwych graczy w grach).
Tak naprawdę nie zgłębiałem Badumny, więc mogą istnieć problemy i funkcje, o których nie wiem, ale przynajmniej rzuciłem na to okiem.
tl; dr: klient powinien być klawiaturą i myszą podłączoną do Internetu.
źródło
Krótka odpowiedź jest taka, że w przypadku standardowej gry MMO obliczenia AI są zawsze wykonywane przez serwer.
W niektórych grach klient będzie próbował przewidzieć sztuczną inteligencję, aby NPC wydawali się szybciej reagować, ale to tylko złudzenie; prawdziwy NPC jest zawsze kontrolowany przez serwer.
źródło
MMO jest serwerem publicznym (internetowym). Wszystko, co chcesz całkowicie kontrolować, nie powinno być publicznie dostępne, w przeciwnym razie ryzykujesz zezwoleniem atakującemu na kontrolowanie NPC. O ile nie wykonujesz szyfrowania poleceń (co wpłynie na wydajność), nie możesz ufać, że klient uruchomi tylko Twój własny kod.
Przewidywanie ruchów NPC na kliencie w celu zrekompensowania opóźnień to świetny pomysł; teoretycznie możesz uwzględnić w programie klienckim tyle zachowań AI, ile chcesz, i okresowo je synchronizować - ale zezwolenie klientowi na dyktowanie zachowania NPC dałoby klientowi możliwość bałaganu w świecie gry. Jeśli klient desynchronizuje się ze świata gry na serwerze, skończysz z niekontrolowanymi nieuczciwymi NPC.
Szkoda, naprawdę, ponieważ dystrybucja sztucznej inteligencji wśród klientów może mieć wpływ na skalowalność.
źródło
Zwykle serwer powinien obliczyć lub zweryfikować wszystkie dane przekazane lub otrzymane od klienta. Ale zależy to od tego, na ile możesz zaufać klientowi i jak ważne jest to obliczenie. Czasami główne obliczenia można wykonać na kliencie, a serwer może być w stanie użyć prostej metody do sprawdzenia poprawności uzyskanych danych.
źródło
Opierając się na innych odpowiedziach, strategia „odciążenia i weryfikacji” może być rzeczywiście przydatna w sytuacjach, w których weryfikacja jest łatwiejsza niż pierwotne obliczenia (lub gdy tylko okazjonalne kontrole na miejscu wystarczyłyby, aby złapać oszustów).
Na przykład, jeśli klient wykonałby wyszukiwanie ścieżki A * i wysłał wyniki do serwera, serwer musiałby tylko sprawdzić, czy a) ścieżka jest poprawna, i b) nie ma krótszej ścieżki. Sprawdzanie poprawności ścieżki powinno być łatwe, a sprawdzanie optymalności może być łatwiejsze niż znalezienie optymalnej ścieżki na początek, ponieważ masz teraz górną granicę długości ścieżek, które musisz sprawdzić. (W szczególności, jeśli klient zwraca ścieżkę prostą, jest on oczywiście optymalny, o ile jest ważny.) Szczerze mówiąc, nie mam pojęcia, czy ta konkretna sztuczka byłaby przydatna w praktyce, ale nie widzę żadnej podstawowej przeszkody do tego.
Pamiętaj jednak, że jeśli odciążysz sztuczną inteligencję NPC do klientów, zhakowany klient może potencjalnie wykorzystać ją do wcześniejszego przewidywania zachowania NPC. W przypadku niektórych rodzajów gier lub sytuacji może to być poważny problem.
źródło
Prawdopodobnie najlepiej jest mieć kilka prostych procedur AI i obliczeń krytycznych dla gry po stronie serwera, a jednocześnie obsługiwać złożone, niekrytyczne dla gry operacje po stronie klienta.
Na przykład serwer wie, gdzie jest wrogi NPC i gdzie są postacie gracza. Gdy postać gracza znajdzie się w zasięgu NPC, można wykonać obliczenia po stronie serwera, aby sprawdzić, czy NPC powinien zaatakować gracza, a także wykonać proste wyszukiwanie ścieżki, aby określić, jak długo NPC dotrze do gracza.
Po przeniesieniu NPC do stanu ataku klient może poradzić sobie z animacją i precyzyjnym wyszukiwaniem ścieżek. Gdy NPC jest wystarczająco blisko klienta, aby zaatakować, serwer może wykonać obliczenia, aby sprawdzić, czy atak uderzył, jakie były obrażenia itp.
Musisz upewnić się, że wszelkie obliczenia, które naprawdę wpływają na wynik gry, są obsługiwane przez serwer i przekazywane klientowi, podczas gdy obliczenia niekrytyczne są obsługiwane przez klienta.
W najprostszym przypadku będziesz utrzymywać klienta w synchronizacji z miejscem, w którym oczekuje się od serwera, serwer zweryfikuje, a następnie klient obliczy ponownie.
źródło