Basics
NoAI Framework

NoAI Strona główna

Rozwój

Kamienie Milowe rozwoju
Sugerowane zmiany API

Programowanie SI

Dokumentacja API
Wprowadzenie
plik info.nut
plik main.nut
Podstawy
Poszukiwacz drogi
Użycie pathfinder`a kolei
Zapis / Odczyt danych
Dobrze wiedzieć
Squirrel
Home page
Typowe błędy
Listy
Poradnik na błędy OTTD
Trams
Biblioteki SI
Forum
Forum FAQ
Zachowanie SI
Użycie krótkich nazw

SIy

TestAI
WrightAI
Convoy
SimpleAI
Porównanie AI
Zobacz forum
Zobacz BaNaNaS
Wszystko kategorii NoAI

Zakładamy, że przeczytałeś Introduction , który wyjaśnia, jak dodać AI do OpenTTD. Ta strona wyjaśni, jak dodać kilka prostych rzeczy, aby sztuczna inteligencja mogła coś zrobić. Wynik znajduje się w przykładzie AI.

Contents

Nazywanie firmy

Oczywiście pierwszą rzeczą, którą chcesz zrobić, to nazwać swoją firmę. Chcesz się promować, prawda? Aby zmienić nazwę firmy, musisz załadować klasę AICompany. W Squirrel`u wszystkie klasy są wstępnie załadowane, więc możesz z nich korzystać bezpośrednio.

Teraz zmieńmy nazwę naszej firmy. Funkcja, aby to zrobić, jak mówi nam interfejs API, to SetName. Ten parametr jest ciągiem. Więc rozumiemy:

function MyNewAI::Start()
{
  AICompany.SetName("MyNewAI");
}

Teraz, jeśli zwróciłeś trochę uwagi, natychmiast zauważysz, że jest to sprzeczne z regułą, której uczysz się w Introduction: zwraca Start() , dlatego twoja AI umiera. Ale to tylko dla ilustracji, więc na razie będzie dobrze.

Uruchom OpenTTD, uruchom nową mapę i zobacz, jak twoja SI zmienia firmę nowych narzędzi na MyNewAI .

Nazywanie firmy (zaawansowane)

Ale teraz co się stanie, jeśli twoja AI uruchomi się dwa razy. Nie możesz mieć dwóch AI o tej samej nazwie firmy. Jeśli go uruchomisz, zobaczysz, że drugie imię pozostaje Bez nazwy ('Unnamed'). To jest do bani. Na szczęście możemy sprawdzić wynik działania funkcji, jeśli zadziałała poprawnie. Rozwińmy to trochę i sprawdź wynik. Jeśli to się nie powiedzie, znajdźmy inne imię.

function MyNewAI::Start()
{
  if (!AICompany.SetName("MyNewAI")) {
    local i = 2;
    while (!AICompany.SetName("MyNewAI #" + i)) {
      i = i + 1;
    }
  }
}

To, co się tutaj dzieje, polega na tym, że jeśli nazywanie AI MyNewAI nie powiedzie się, spróbuje MyNewAI #2 . Jeśli to się nie powiedzie, próbuje MyNewAI #3 etc itd. W pewnym momencie powinno to zadziałać, a raczej taki jest pomysł. Masz więc swoją pierwszą sztuczną inteligencję, która robi coś w grze.

Drukowanie wyników debugowania

Aby wydrukować dane wyjściowe do AI Debug Panel , możesz użyć AILog . Te komunikaty są również zapisywane w konsoli ( AILog.Info z ai debugowaniem na poziomie 4 lub wyższym, AILog.Warning z poziomem 3 lub wyższym i AILog.Error z poziomem 1 lub wyższym). Zauważ, że te funkcje akceptują tylko ciąg jako parametr. Jeśli chcesz wydrukować cokolwiek innego, najpierw przekonwertuj go na ciąg. Najłatwiej to zrobić, dodając pusty ciąg, na przykład:

AILog.Info (some_integer + "");

System zdarzeń event

System zdarzeń jest prostym systemem ankiet. Będziesz musiał od czasu do czasu sondować kontroler zdarzeń, aby sprawdzić, czy na stosie są jakieś odpowiednie zdarzenia. Jest to względnie łatwe

while (AIEventController.IsEventWaiting()) {
  local e = AIEventController.GetNextEvent();
  switch (e.GetEventType()) {
    case AIEvent.ET_VEHICLE_CRASHED:
      local ec = AIEventVehicleCrashed.Convert(e);
      local v  = ec.GetVehicleID();
      AILog.Info("We have a crashed vehicle (" + v + ")");
      /* Handle the crashed vehicle */
      break;
  }
}

Co teraz?

To, jak postępować dalej, zależy w dużej mierze od tego, co chcesz zrobić. Najlepiej jest zacząć przeglądać API . Sugerujemy zacząć od sztucznej inteligencji wyłącznie dla pojazdów drogowych. Wiemy, że to jest naprawdę nudne, ale możesz naprawdę zarobić na nich dużo pieniędzy, jeśli zrobisz to poprawnie. Łatwiej jest też tworzyć i rozumieć niż pociągi. Statki i samoloty są również bardzo wykonalne, ale bardziej nudne niż pojazdy drogowe.

Na przykład, jeśli chcesz zbudować drogę i stacje drogowe, sprawdź dokumentację AIRoad . Znajdziesz tam odpowiednie funkcje. Aby uzyskać informacje o stacji, sprawdź AIStation . W przypadku zamówień budowy pojazdów i ustawień sprawdź AIVehicle i AIOrder . Brzmi całkiem logicznie, prawda?

Oczywiście jest wiele rzeczy, które ułatwiają ci życie. Jest na przykład fragment kodu, który ustawia wszystkie twoje polecenia w kolejce na dużej liście i od razu zaczyna je wykonywać na żądanie. Teraz, jeśli ktoś zawiedzie, czego wcześniej nie robił, wszystko cofa. Jest to bardzo przydatne od czasu do czasu, ponieważ przy planowaniu trasy zbudowanie jej mogło wydawać się bezproblemowe, ale do czasu umieszczenia fragmentu drogi może się zdarzyć, że inna firma już zabrała płytkę. Takie fragmenty kodu ułatwiają radzenie sobie w takich sytuacjach. Innymi przykładami są identyfikatory ścieżek i wiele innych.