Radzio wrote:Komendy *Com* nie zwracają żadnych wartości AFAIR, więc:
Code: Select all
b1=addcombuild(inz,b_bunker,133,69,3);
b2=addcombuild(inz,b_bunker,137,76,3);
nie ma sensu. Wywal przypisania stąd.
A daj coś takiego:
Code: Select all
on BuildingComplete(b) do
begin
if GetBType(b) = b_breastwork then
begin
Bunkry := Bunkry + 1;
case Bunkry of
1: begin b1 := b; ComEnterUnit(s1, b); end;
2: begin b2 := b; ComEnterUnit(s2, b); end;
end;
end;
end;
on UnitDestroyed(un) do
begin
case un of
b1: ComMoveXY(s1, 167, 97);
b2: ComMoveXY(s2, 167, 97);
end;
end;
To teraz Cię może Radziu zagnę.
Code: Select all
var b1, b2;
STARTING
Begin
b1 = combuild(inz, b_bunker,47,45,3);
end;
on BuildingComplete(b) do
begin
if b = b1 then
begin
ComEnterUnit(sold, b1);
end;
end;
To działa tak, jak AmaVi by tego sobie życzył. Wystarczyło magiczne var b1, b2; przed STARTING.
Nie wiem, co to są wartości AFAIR (z początku cytowanego postu, vide przypomnienia), lecz pamiętam z dawnych czasów, że da się tak odwołać do zbudowanego pojazdu, budynku. W kodzie ALTARu nieraz tak było.

Z tym, że oni tego używali raczej lokalnie, w stylu masowa produkcja ruskich czołgów.
A tutaj skoro b1=.... jest w Begin...end po STARTING, wiadomo że zakres ważności zmiennej b1 się skończył razem z tym endem i taka zmienna poza tym blokiem zwyczajnie nie istnieje.
Na przyszłość, dla potomnych: ta instrukcja var na początku to nic innego, jak zadeklarowanie zmiennej globalnej (dla modułu, w którym aktualnie się znajduje, jeśli chcemy to mieć dla wszystkich, użyjmy export). To ma sens, ponieważ jakby nie było identyfikatory wszystkich jednostek postawionych na mapie w edytorze to zmienne globalne, do których spokojnie w najgłębszych czeluściach nie-wiadomo-już-który-raz-zagnieżdzonej pętli można się odwołać.
Pozdrawia NNPlaya, stary modder i programista ;p