One strange thing about ManiaScript is that built-in API objects and arrays sometimes behave differently than the ones created by users.
Here’s one such behavior about arrays:
They have two types of keys.
Let me explain that with an example: The Players arrays in CSmMode. (It applies to TM as well.)
This arrays holds several player objects which (like all ManiaScript objects) have their own Ids.
In order to take a specific player object out of the array you can use the player’s Id to reference it.
Additionally you can take the Index of the object in the array.
declare Ident SomeId;
declare PlayerById <=> Players[SomeId];
declare Integer SomeIndex;
declare PlayerByIndex <=> Players[SomeIndex];
This can be really helpful. For example the Scores array gets sorted by points so you can access the best score via:
declare BestScore <=> Scores;
(Because the object with the index 0 has the most points.)
There’s one thing that you have to keep in mind though.
When using the Id to access an element of such an array which has an Integer key by default: It just searches for the object from beginning to the end, it’s not as performant as an actual key (with a lookup-table).
Unfortunately this is an API only feature. Your own arrays don’t support these two key-types.
You can only access their elements with a key of the type which you’ve set when declaring the array.