Rozwój
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
- Listy
- Poradnik na błędy OTTD
- Trams
- Biblioteki SI
- Forum
- Forum FAQ
- Zachowanie SI
- Użycie krótkich nazw
SIy
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:
- Ustawienia nigdy się nie zmieniają podczas działania. Ustawiasz je przed rozpoczęciem gry, i to jest ostateczne. //Z wyjątkiem ustawienia za pomocą AICONFIG_INGAME.
- Ustawienia są zawsze liczbami całkowitymi.
- Zmiana pliku info.nut podczas działania OpenTTD spowoduje, że program NIE zauważy, że wartości zadeklarowane w funkcji GetSettings() uległy zmianie. Powinieneś ponownie uruchomić program (nie tylko grę), aby zaczął działać.
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).