Twój pomysł, Mark, mnie nie zadowala, niestety. Ten sposób jest trochę okrężną drogą.
Jakbym miał to zrobić (a najprawdopodobniej to zrobię) listami, to wywoływałbym tę funkcję za każdym razem, jak się przechodzi do nowego światu / wczytuje grę, ale musi być jeszcze inny sposób, łatwiejszy...
EDIT: Mark, dzięki Tobie wpadłem na pomysł, żeby jednym loopem podczas wczytywania gry / przechodzenia do nowego światu wypełniać zmienne (int) numerami instance przedmiotów, a potem losowanie tych zmiennych poprzez r_MinMax(x,y), albo poprzez robienie dwóch zmiennych, które będą przyjmować liczbę początkową i liczbę końcową itema (czyli pierwszy item ma numer 49209, to int1 = 49209, a ostatni to 129597 i int2 = 129597), lecz potem pojawia się jeszcze jeden problem, a dokładnie, to nie wiem czy aby na pewno instance przedmiotów mają ostatniNumer+1, a nie ostatniNumer + (>1)...
EDIT: Pobierając ID ostatniego i pierwszego itema listami, dostaję stacktrace error. Zaś robienie dokładnie jak Mark napisał też nie działa, bo:
1) Itemy nie zawsze mają te same ID - zależy to od tego, kiedy item został widziany przez grę (tak samo jest z mobami, który jest bliżej, ten dostaje szybciej swój numer) i to mnie dziwi...
2) Instance ID itemów nie są równo +1, każdy item jest większy o jakiś
inny numer, więc jak nam wylosuje numer, w którym nie ma itema, to daje error. Czyli Nóż na wilki jest pierwszy, a jego ID to 14854, a laga jest druga i jej ID to 14644 (przykładowe ID, nie spamiętałem ID które sprawdzałem).
. Nie tędy droga.
Skrypt, jakby kogoś interesowało
var int firstID;
var int lastID;
func void B_GetItemID()
{
var zCListSort list; list = _^(MEM_World.voblist_items);
var int block; block = 0;
while (list.next);
//{
list = _^(list.next);
if (list.data)
{
if (!block)
{
firstID = list.data;
block = true;
};
lastID = list.data;
};
end;
//}
};
func int ReturnItemID() { return r_MinMax(firstID, lastID); };