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
Popatrzmy na tenNapisał Henry Fordcycatcytat w drugą stronę - skoro z powodów technicznych admin nie jest w stanie nas w pełni zadowolić, to zróbmy towł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