PDA

Zobacz pełną wersję : Outsourcing inteligencji



Pitazboras
16-04-2011, 02:17
TL;DR
Poniższa propozycja jest dosyć długa i miejscami trochę techniczna, więc jeśli chcesz uniknąć odczucia że nic nie rozumiesz albo że na czytanie zmarnowałeś kwadrans swojego cennego życia, poniżej zamieszczam streszczenie propozycji.
Propozycja polega na dodaniu trzeciej - obok trybu prostego i zaawansowanego - opcji tworzenia inteligencji. W tej opcji gra aby określić co ma robić nasza postać łączyłaby się z zewnętrznym serwerem, na którym gracz uprzednio umieścił własny program inteligencji.

Problem
Jestem pod wrażeniem, jak zaawansowany jest obecnie system tworzenia skryptów (aka inteligencji), jednak pewnych rzeczy nawet najbardziej rozbudowany mechanizm nie jest w stanie zapewnić.
Wystarczy rozejrzeć się po forum, żeby zobaczyć, czego potrzebują gracze:

więcej poleceń - jak się łatwo przekonać, nie trzeba strasznie kombinować, żeby nasz skrypt się rozrósł do nieprzyzwoitych rozmiarów;
więcej rodzajów warunków - można rozbudowywać możliwości w nieskończoność, a i tak znajdzie się ktoś, kto potrzebuje warunku, którego w systemie nie ma.

Mogę też dodać parę rzeczy od siebie:

różne skrypty ze względu na różnych przeciwników - czasem może się zdarzyć, że inaczej chcemy walczyć z jednymi potworkami, a inaczej z innymi;
uproszczenie konstrukcji poleceń;
możliwość łatwej edycji tekstowej inteligencji (klikanie bywa zdecydowanie bardziej czasochłonne).

Listę można jeszcze pewnie ciągnąć, każdy z nas ma zapewne własne "marzenia" odnośnie tego, co w inteligencji warto byłoby dodać, a co zmienić. Część z tych propozycji łatwo wprowadzić, ale są też trudne czy wręcz niemożliwe przy obecnej konstrukcji mechanizmu inteligencji.
Pojawia się pytanie: Czy dałoby się stworzyć (najlepiej niewielkim wysiłkiem pracy adminów) system inteligencji, który dawałby identyczne (lub możliwie bliskie) możliwości co walki manualne? Myślę, że tak.

Rozwiązanie: Outsourcing

Jeśli jest coś, czego nie potrafimy zrobić wydajniej, taniej i lepiej niż konkurenci, nie ma sensu, żebyśmy to robili i powinniśmy zatrudnić do wykonania tej pracy kogoś, kto zrobi to lepiej niż my.
Popatrzmy na ten cycat cytat w drugą stronę - skoro z powodów technicznych admin nie jest w stanie nas w pełni zadowolić, to zróbmy to własną ręką na własną rękę. Wystarczy, aby gra zapewniła nam skromny interfejs do tworzenia własnego mechanizmu inteligencji.
Plan działania
W jednym zdaniu: Zamiast opierać się na wewnętrznych rozwiązaniach, gra pytałaby zewnętrzny, wskazany przez nas serwer, jaki ruch ma wykonać nasza postać.
Nieco konkretniej ja to widzę tak:
(używane skróty: SMFO - serwer gry, SG - serwer wskazany przez gracza w konfiguracji inteligencji)

Wszystko zaczyna się w momencie rozpoczęcia walki. SMFO nawiązuje połączenie z SG i przekazuje mu dane dotyczące początkowych warunków walki (lista przeciwników, liczba i rodzaj możliwych do użycia przedmiotów, gemów itp.).
Po każdej turze - bez względu na to czy naszej, czy przeciwnika - SMFO przekazuje SG informację o tym co się w danej turze wydarzyło.
Ciekawe rzeczy się dzieją, gdy nadchodzi nasza tura i mamy zadecydować co w niej robić.

SMFO wysyła do SG pytanie pt. "Co chcesz zrobić?";
SG cośtam sobie robi (może liczyć optymalne ruchy na farmie komputerów zombie, pytać kosmitów o radę, czy cokolwiek innego, SMFO nie musi nic o tym wiedzieć);
SG wysyła SMFO odpowiedź "Użyj zaklęcia X"/"Zaatakuj fizycznie"/itp.



Q&A
Okej, a tak serio to co naprawdę będzie robić SG?
Na SG może działać napisany przez nas program w naszym ulubionym języku programowania. Jego zadaniem będzie odbieranie danych dostarczonych przez SMFO i udzielanie odpowiedzi gdy nadejdzie nasza kolejka.
A co jeśli coś pójdzie nie tak?
Outsourcing byłby opcją wysokiego ryzyka - gdyby cokolwiek poszło nie tak (niepoprawny adres serwera, zbyt długi czas oczekiwania na odpowiedź, bezsensowna (niemożliwa do wykonania) odpowiedź itd. postać wykonywałaby jakąś domyślną akcję, np. atak fizyczny pierwszego przeciwnika.
Czy taka opcja nie daje zbyt dużych możliwości?
Do SG dostarczane byłyby wyłącznie informacje dostępne z poziomu walki manualnej, więc możliwości byłyby tylko takie - i aż takie - jakie daje nam walka manualna.
Nie umiem programować i/lub nie mam możliwości ustawienia własnego serwera. Mam zrezygnować z automatycznych walk?
Przedstawiona propozycja byłaby oczywiście opcją - obok przycisków z trybem prostym/zaawansowanym byłby przycisk "tryb dla krejzoli". Jeśli nie chcesz korzystać z tej możliwości, to dla Ciebie nic się nie zmieni.
Okej, to jak będą wyglądać "wiadomości" wysyłane przez SMFO do SG?
To oczywiście temat na dłuższą dyskusję, ale proponuję najprostsze możliwe rozwiązanie: wszystkie treści wysyłane przez SMFO byłyby zawarte w danych POST, w formacie np. JSON, ze strukturą określoną przez administrację. Ważne, żeby do każdej wiadomości był dostarczany unikalny id walki, żeby SG mógł "śledzić" jej przebieg i podejmować decyzje na podstawie poprzednich zdarzeń/informacji.
No dobra, a odpowiedzi SG?
Ponownie - temat na dłuższą dyskusję, ale i tu proponuję jak najprostsze rozwiązanie. Odpowiedź na "co robić?" może składać się z kilku liczb (od 2 do 4), mniej-więcej odpowiadających pozycji w menu walki manualnej wybranej przez nas opcji. Czyli - pierwsza liczba określałaby czy ma to być atak, zaklęcie, zdolność czy przedmiot; druga - który to ma być czar/zdolność/przedmiot; trzecia - liczbę gwiazdek; czwarta - cel naszego działania, czyli numer przeciwnika lub sprzymierzeńca (powiedzmy że przeciwnicy numerowani byliby liczbami ujemnymi).
Na przykład:
"1 -1" - atak fizyczny pierwszego przeciwnika
"3 1 4 1" - użycie pierwszej zdolności na poziomie 4 gwiazdek na pierwszym sprzymierzeńcy
"4 2 2" - użycie drugiego przedmiotu z plecaka na drugim sprzymierzeńcy
Jak wyglądałoby ustawienie takiej metody inteligencji?
Tak jak wspominałem wcześniej - z poziomu gry należałoby wybrać opcję "tryb dla krejzoli", a tam wystarczyłoby wypełnić jedno pole tekstowe - adres SG. Cała reszta znalazłaby się po stronie SG.
Nie rozumiem ani jednego zdania z tej propozycji...
Przepraszam :(

benerit
16-04-2011, 06:13
Nie przejdzie, gra by musiała wysyłać pełen komplet danych dla takiego systemu. Prawie wszystkie dane, które by wysyłała są aktualnie ujęte w systemie i nie trzeba zewnętrznego systemu do gry. Zresztą po co wszystko automatyzować od czego głowa?
Skrypty na inteligencję są proste, ich implementacja nie jest skomplikowana, problem polega na tym, że na potrzeby dodatkowego polecenia należy zacząć rozważać i pilnować dodatkowej zmiennej. A skoro by to już admini zaimplementowali to mogliby bez problemu zaimplementować resztę. Czasem dobranie się do zmiennej i przebudowa fragmentów kodu jest trudniejsza od implementacji warunków.
Pomysł chybiony:
- za dużo transferów
- dodanie nowych poleceń by wymagało dodanie zmiennych (co sprawa, że paczka danych zmienia specyfikację i admini wciąż mają pracę)
- ile osób by z tego korzystało? Ile osób potrafi napisać zewnętrzny system? A może ktoś by napisał i zarabiał na tym?
- admini mają więcej ważniejszych rzeczy niż udostępnianie specyfikacji i współpraca przy tworzeniu takiego systemu.

Pitazboras
16-04-2011, 07:13
Nie przejdzie, gra by musiała wysyłać pełen komplet danych dla takiego systemu.
Musiałaby wysyłać tylko te dane, które i tak już wysyła na potrzeby walk manualnych. De facto jakby się komuś nudziło, to może taką akcję przeprowadzić już teraz, tylko jak się nie ma danych podanych na tacy, to roboty jest znacznie więcej, poza tym prawdopodobnie uznane by to było za używanie botów, które jest przez regulamin zabronione.

Prawie wszystkie dane, które by wysyłała są aktualnie ujęte w systemie i nie trzeba zewnętrznego systemu do gry.
Jak już pisałem - nie prawie wszystkie, a dokładnie wszystkie - nie chcę niczego poza tym, co już jest stworzone z okazji walk manualnych, chcę tylko zautomatyzować proces podejmowania decyzji.

Zresztą po co wszystko automatyzować od czego głowa?
Czy Ty przypadkiem takim stwierdzeniem nie sugerujesz, że wszystkie walki powinny być manualne? Poza tym żeby stworzyć odpowiedni automat, trzeba bardziej używać głowy niż do walki manualnej, to chyba jasne.


Skrypty na inteligencję są proste, ich implementacja nie jest skomplikowana, problem polega na tym, że na potrzeby dodatkowego polecenia należy zacząć rozważać i pilnować dodatkowej zmiennej. A skoro by to już admini zaimplementowali to mogliby bez problemu zaimplementować resztę. Czasem dobranie się do zmiennej i przebudowa fragmentów kodu jest trudniejsza od implementacji warunków.
Nie rozumiem :( Co rozumiesz przez pilnowanie czy dobieranie się do dodatkowej zmiennej? I dlaczego uważasz, że to taki problem?


- za dużo transferów
Transferów byłoby MNIEJ niż przy walce manualnej.

- dodanie nowych poleceń by wymagało dodanie zmiennych (co sprawa, że paczka danych zmienia specyfikację i admini wciąż mają pracę)
Nie bardzo rozumiem jakie zmienne i polecenia masz na myśli, w każdym razie jeśli admini planują dodać do systemu walki coś zupełnie nowego, to i tak zmiany w interfejsie walki manualnej będą o wiele poważniejsze, niż zmiany specyfikacji "paczki danych" - bo to najczęściej kwestia dodania jednego pola w obiekcie JSON-owym.


- ile osób by z tego korzystało? Ile osób potrafi napisać zewnętrzny system? A może ktoś by napisał i zarabiał na tym?
Ile osób potrafi napisać zewnętrzny system? Nie mam pojęcia - ale myślę, że sporo. Mam trochę do czynienia z osobami w wieku gimnazjalnym (do których zapewne targetowana jest gra) i naprawdę spora ich część zajmowała się kiedyś pisaniem prostych stron internetowych przy użyciu języków działających po stronie serwera (najczęściej PHP). Stworzenie zewnętrznego systemu sprowadza się prawie do tego samego.


- admini mają więcej ważniejszych rzeczy niż udostępnianie specyfikacji i współpraca przy tworzeniu takiego systemu.
Nie twierdzę, że nie - choć myślę, że po ich stronie pracy nie byłoby tak dużo, a prawdopodobnie o wiele mniej niż ciągłe rozbudowywanie "trybu zaawansowanego" w obecnym systemie.

benerit
16-04-2011, 08:02
Przy walkach manualnych ilość przesyłanych informacji do gracza jest zdecydowanie mniejsza niż ty byś chciał otrzymywać. Takie dane jak statystyka walki (np ilość krytyków, kto czym ostatnio zaatakował) leżą sobie na serwerze, gracz ich nigdy nie otrzymuje. Aktualnie (pomijając grafikę, która ładuje się raz) gra przesyła tylko aktualny stan walki + akcja. Ty byś chciał otrzymywać jeszcze pełną statystykę. Już teraz to spory wektor danych. Teraz w 99% przypadków niewykorzystywany, Ty byś chciał aby po każdej turze serwer ją odczytywał i wysyłał... (teraz odczytuje i wysyła rzeczy tylko mu potrzebne).
Zapominasz również że w walce automatycznej serwer NIC NIE PRZESYŁA poza wynikiem. Przebieg walki jest na serwerze i zapisany do pliku, który ewentualnie przeglądarka raportów może otworzyć.
Zacznij od opłacenia adminom wydajniejszego serwera, a może zaczną wysyłać Tobie dane :)

Jacek
16-04-2011, 08:13
Ciekawy pomysł i jak najbardziej da się zrobić. Pewne problemy mogły by wyniknąć w przypadku problemów z połączeniem. Trzeba by też porządnie zdefiniować API. Jest z tym trochę roboty.

@benerit
Wszystkie warunki dostępne w skrypcie może obliczyć człowiek z dobrą pamięcią lub kartką. Jak ktoś by chciał mieć dostęp do informacji np. o % krytyków, to by sobie po prostu sam to liczył z napływających ruchów.

benerit
16-04-2011, 08:45
Wszystkie warunki dostępne w skrypcie może obliczyć człowiek z dobrą pamięcią lub kartką. Jak ktoś by chciał mieć dostęp do informacji np. o % krytyków, to by sobie po prostu sam to liczył z napływających ruchów.
Co ma piernik do wiatraka? Mowa jest o automatycznych walkach. Nie jest problemem napisanie skryptu nakładkowego na walkę manualną, gdzie będę sobie z chatu walki czytał informacje i zapisywał gdzie trzeba. Już nawet planowałem sobie zrobić przydatny skrypt, który na podstawie walki wypisywałby informacje o przeciwniku (ilość many, zakres parametrów, użyta liczba itemów i czarów etc.). Nie jest problemem zrobienie własnego skryptu walki na walkę manualną.
Jednak twórca tematu pisze o walkach automatycznych.

Ale skoro macie czas to miłej zabawy. Skorzysta na tym z 10 osób.

Pitazboras
16-04-2011, 09:11
Przy walkach manualnych ilość przesyłanych informacji do gracza jest zdecydowanie mniejsza niż ty byś chciał otrzymywać. Takie dane jak statystyka walki (np ilość krytyków, kto czym ostatnio zaatakował) leżą sobie na serwerze, gracz ich nigdy nie otrzymuje. Aktualnie (pomijając grafikę, która ładuje się raz) gra przesyła tylko aktualny stan walki + akcja. Ty byś chciał otrzymywać jeszcze pełną statystykę. Już teraz to spory wektor danych. Teraz w 99% przypadków niewykorzystywany, Ty byś chciał aby po każdej turze serwer ją odczytywał i wysyłał... (teraz odczytuje i wysyła rzeczy tylko mu potrzebne).
Ewidentnie nie doczytałeś co pisałem - chcę dostawać wyłącznie dane, które są dostępne w walce manualnej. Statystyki w postaci ilości krytyków itp. są całkowicie zbędne, bo jeśli będą mi przydatne, to mogę sobie to policzyć sam na własnym serwerze. Innymi słowy chcę, jak to ująłeś, aby "gra przesyła tylko aktualny stan walki + akcja". Tyle całkowicie wystarcza.
Zapominasz również że w walce automatycznej serwer NIC NIE PRZESYŁA poza wynikiem. Przebieg walki jest na serwerze i zapisany do pliku, który ewentualnie przeglądarka raportów może otworzyć.
Nie zapominam. Transfer kontra moc obliczeniowa - więcej będzie wysyłane, ale mniej będzie liczone przez sam serwer. Czy to się opłaci z punktu widzenia wydajności? Nie wiem, ale raczej nie powinno wprowadzić wielkich narzutów.

Jacek
16-04-2011, 09:49
Chodziło mi tylko o to, że nie trzeba będzie przesyłać pełnych statystyk.
Nie mówię, że to będzie zrobione. Raczej nie prędko. Po prostu stwierdzam, że pomysł ma sens i nie jest bardzo trudny w realizacji.

Tomi
16-04-2011, 21:02
Skorzysta na tym z 10 osób.
Z tym to się muszę zgodzić ;)
To bardziej taki eksperyment niż coś co wypłynie na szersze wody. Taki mechanizm z którego by skorzystał np. Jacek, gdyby to on był graczem i pewnie dlatego mu się to spodobało, hehe. Ja myślę, że lepiej najpierw zrobić rzeczy dla większego grona osób.

Pomijając czasochłonność czy trudności implementacyjne, to widzę w tym wszystkim kluczowy problem: nie ma co mówić o równych szansach w walkach auto (np. turniejowych gdyby były) pomiędzy osobami korzystającymi z tego rozwiązania, a zwykłymi śmiertelnikami, którzy używają tego co daje im system inteligencji zawarty w grze.