AIInfo
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

info.nut to plik, w którym mówisz NoAI podstawowe rzeczy o swojej sztucznej inteligencji. Kiedyś był częścią main.nut, ale został oddzielony, aby ułatwić debugowanie (Spójrz tutaj jeśli jesteś zainteresowany szczegółami).

Zobacz też http://noai.openttd.org/docs/trunk/classAIInfo.html dla lepszego (i pełnego) opisu wszystkich funkcji.

Contents

info.nut struktura

Wewnętrzna struktura info.nut jest bardzo prosta i jest zgodna z szablonem przedstawionym poniżej.

class MyNewAI extends AIInfo 
{
  function GetAuthor()        { return "Newbie AI Writer"; }
  function GetName()          { return "MyNewAI"; }
  function GetDescription()   { return "An example AI by following the wiki tutorial"; }
  function GetVersion()       { return 1; }
  function MinVersionToLoad() { return 1; }
  function GetDate()          { return "2007-03-17"; }
  function GetShortName()     { return "MYAI"; }
  function CreateInstance()   { return "MyNewAI"; }
  function GetAPIVersion()    { return "1.0"; }
}

/* Tell the core we are an AI */
RegisterAI(MyNewAI());

Gdzie oczywiście powinieneś zmienić nazwy, jakkolwiek chcesz nazywać wszystko. Po prostu nie zapomnij RegisterAI() i nie zapomnij rozszerzyć AIInfo . Jeśli coś pójdzie nie tak, sprawdź, czy zrobiłeś: RegisterAI(MyNewAI()) . Zwróć uwagę na () po MyNewAI !

Ustawienia

Możliwe jest zezwolenie użytkownikom na zmianę ustawień w twojej AI. Jedynym wymaganiem jest to, abyś powiedział im, które ustawienia. Możesz to zrobić, zmieniając swój info.nut w następujący sposób:

class MyNewAI extends AIInfo 
{
  function GetAuthor()      { return "Newbie AI Writer"; }
  function GetName()        { return "MyNewAI"; }
  function GetDescription() { return "An example AI by following the tutorial at http://wiki.openttd.org/"; }
  function GetVersion()     { return 1; }
  function MinVersionToLoad() { return 1; }
  function GetDate()        { return "2007-03-17"; }
  function GetShortName()   { return "MYAI"; }
  function CreateInstance() { return "MyNewAI"; }
  function GetAPIVersion()  { return "1.0"; }
  
  function GetSettings() 
  {
    AddSetting(
      {
      name = "NameOfSetting", 
      description = "Description of setting", 
      min_value = 0, 
      max_value = 10, 
      easy_value = 10, 
      medium_value = 5, 
      hard_value = 0, 
      custom_value = 5, 
      flags = 0
      });
    AddLabels("NameOfSetting", {
      _0 = "It's off now", 
      _10 = "Maximum"
      });
  }
}

/* Tell the core we are an AI */
RegisterAI(MyNewAI());

Nowe wiersze oczywiście dotyczą Ustawień. W SetSetting ważne jest zdefiniowanie wszystkich właściwości. Jeśli nie, zostanie podany błąd. Teraz w graficznym interfejsie użytkownika na AI będzie dostępna opcja zmiany NameOfSetting między wartościami 0 i 10 lub wstępnie ustawionej wartości, jeśli masz trudności z ustawieniem innym niż 'Custom' . AI:TestAI pokazuje również proste przykłady użycia ustawień bool (włącz/wyłącz ~ on/off).

Dostępne parametry dla AddSetting:

Nazwa Typ Wymagane Opis
name string yes Nazwa ustawienia, do którego odwołujesz się w tym AI, this.GetSetting(name) (member AIController). Znaki ',' i '=' są niedozwolone.
description string yes Opis działania tego ustawienia. Widoczny dla użytkownika w oknie Ustawienia AI.
min_value integer Only if flags doesn't contain AICONFIG_RANDOM. Minimalna wartość ustawienia
max_value integer Only if flags doesn't contain AICONFIG_RANDOM. Maksymalna wartość ustawienia.
easy_value integer yes Wartość domyślna na łatwym poziomie trudności.
medium_value integer yes Wartość domyślna na średnim poziomie trudności.
hard_value integer yes Wartość domyślna na poziomie trudności trudnej.
custom_value integer yes Wartość domyślna na niestandardowym poziomie trudności.
random_deviation integer no, forbidden if flags contain AICONFIG_RANDOM Po uruchomieniu gry wartość ustawienia będzie losowana między wartością_określoną_użytkownika - odchylenie_losowe i wartość_określoną_przez_użytkownika + odchylenie_losowe (user_specified_value - random_deviation and user_specified_value + random_deviation).
step_size integer no Wielkość zmiany wartości za każdym razem, gdy użytkownik kliknie jeden z przycisków.
flags bitset yes Możesz określić następujące flagi (łączenie za pomocą pliku binarnego lub operatora): AICONFIG_RANDOM, AICONFIG_BOOLEAN i AICONFIG_INGAME. Poniżej znajduje się opis tego, co robią.

Flagi

Flaga Opis
AICONFIG_BOOLEAN Sprawia, że ​​ustawienie staje się wyborem logicznym. Jeśli ustawisz tę flagę, nie określaj wartości min_value lub max_value. Wszystkie wartości easy_value, medium_value, hard_value i custom_value powinny mieć wartość 0 lub 1 (nie fałsz/prawda).
AICONFIG_RANDOM Użytkownicy nie ustawią jawnie tej wartości, otrzyma losową wartość między wartością min_value a max_value.
AICONFIG_INGAME Tylko ustawienia z tym zestawem flagi będą mogły zostać zmienione w uruchomionej grze.
AICONFIG_AI_DEVELOPER Od r23169 ukrywa ustawienie, chyba że ai_developer_tools ma wartość true.

It's possible to combine two or more settings together. For example this makes a random boolean: flags = AICONFIG_BOOLEAN | AICONFIG_RANDOM

AddLabels

AddLabels akceptuje dwa parametry, pierwszy do nazwy ustawień definiujących etykiety, a drugi do tabeli z odwzorowaniem wartości na etykiety. Ponieważ identyfikacja nie może zaczynać się cyfrą, pierwszy znak jest ignorowany (podkreślenie w programie). Reszta identyfikatora powinna być rozszerzona, dla tych, które chcesz zdefiniować etykietę. Jeśli nie ma znaczenia, etykieta jest częścią jako liczba. Te etykiety są tylko dla użytkowników, w AI nadal będziesz używać wartości liczbowych, jeśli użyjesz GetSetting().

Odczytywanie wartości ustawień

Teraz w swojej SI możesz poprosić o wartość tego ustawienia:

MyNewAI.GetSetting("NameOfSetting");

Jest kilka rzeczy do zapamiętania:

Informacje debugowania

Jeśli twój plik info.nut nie ładuje się, nie zobaczysz błędów, chyba że włączysz konsolę debugowania z wiersza poleceń gry (rozpocznij grę z parametrami -d ai=5).