Lists
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

Listy są podstawową częścią interfejsu API NoAI. Pozwalają na szybką i łatwą manipulację wszelkiego rodzaju danymi. Ta strona wyjaśni w prosty sposób, jak z nich korzystać i czego możesz się po nich spodziewać.

Contents

Elementy / Wartości (Items / Values)

AIList to zestaw par element-wartość. Element to zazwyczaj dane, które chcesz zapisać na liście. Na przykład identyfikatory miast. Wartość to niektóre informacje związane z pozycją. Na przykład możesz mieć liczbę mieszkańców miasta jako wartość.

Valuators

Aby filtrować, możesz zastosować rzeczoznawców na liście za pomocą <list>.Valuate(<valuator>) , odpowiednio zmieniają wartość wpisu na liście. Pierwszym parametrem tej funkcji jest funkcja, której chcesz użyć do wyceny pozycji na liście. Powinien zaakceptować co najmniej jedną liczbę całkowitą, która zostanie ustawiona dla elementu, i powinien zwrócić liczbę całkowitą, która stanie się wartością elementu. Możliwe są dodatkowe parametry, wówczas należy je również dodać do Valuatora. Przykład:

list.Valuate(AIBridge.GetPrice, 5);
list.Valuate(AIBridge.GetMaxLength);
function MyVal(bridge_id, myparam)
{
   return myparam * bridge_id; // This is silly
}
list.Valuate(MyVal, 12);

Po zastosowaniu kalkulatora możesz modyfikować (usuwać elementy, sortować itp.) Listę za pomocą funkcji znajdujących się w API docs.

Przykłady list

AIList()

To start, AIList() is the most primary list we have. It doesn't depend in any way on the OpenTTD core. It is a simple list you can fill with items and make valuators for them. As AITownList() is a good example of a bit more complex AIList(), we will discuss that one rather then AIList().

AITownList()

Oczywiście chcesz wiedzieć, które miasta znajdują się na mapie i najprawdopodobniej: które miasto ma najwięcej mieszkańców i jaka jest jego lokalizacja. Do tego mamy AITownList() . Jeśli utworzysz jego instancję, natychmiast wypełni się ona wszystkimi miastami. Możesz chodzić po nich w ten sposób:

foreach (town, value in townlist) { }

To prowadzi wszystkie miasta na liście. Oczywiście, wiedząc, że miasta są tylko częścią AITownList() , możesz również sprawić, że znajdziesz dane dla Ciebie. Na przykład chcemy poznać wszystkie miasta o liczbie mieszkańców powyżej 500. Najpierw nazywamy rzeczoznawcę, który pobiera za nas liczbę mieszkańców na miasto, a następnie odfiltrowujemy z listy wszystkie miasta o liczbie mieszkańców poniżej 500. Pozostała lista miast, w których mieszka ponad 500 osób.

townlist.Valuate(AITown.GetPopulation);
townlist.KeepAboveValue(500);

Jeśli teraz wydrukujesz listę, zobaczysz tylko miasta o liczbie mieszkańców powyżej 500. Oczywiście możesz teraz uzyskać pozycję tych miast, wykonując:

townlist.Valuate(AITown.GetLocation);

Oznacza to jedynie, że liczba ludności przypadająca na miasto jest tracona i zastępowana przez lokalizację.

AIList() Listy AI są automatycznie sortowane. Zwykle jest to wartość malejąca, malejąca (najpierw najwyższa). Możesz zmienić porządek sortowania za pomocą funkcji Sort() (patrz dokumentacja API). Możesz sprawdzić, czy lista jest pusta za pomocą Empty() , lub znaleźć liczbę miast za pomocą Count() . Aby uzyskać więcej informacji, zobacz dokumentację API.

AITileList()

Oprócz listy miejskiej, listy branżowej itp. Mamy również AITileList() . Jest to w rzeczywistości to samo co AITownList() , ale śledzi kafelki. Możesz dodać kafelki do listy, a następnie, na przykład, zobaczyć, jaka jest akceptacja dla określonego ładunku. Lub odfiltruj płytki, których nie można zbudować. Oznacza to, że możesz szybko znaleźć dobre miejsce na stację, o której wiesz, że dostanie dobrą ilość towarów. Możesz także upewnić się, że łączy się on na przykład z drogą miejską za pomocą kalkulatora AIRoad.GetNeighbourRoadCount() .