Odnośnie drugiego kodu, zabrakło ci
. Liczb beginów musi być zawsze równa liczbie endów gdyż są to odpowiednio początek i koniec bloku.
Código: Seleccionar todo
every 1$0.6 do
var un;
begin
for side in cpu_list do
begin
uc_nation:=nation_american;
vc_chassis:=us_medium_tracked;
vc_engine:=engine_siberite;
vc_control:=control_computer;
un:=CreateVehicle;
wait(0$1);
PlaceUnitArea(un,create_areas[nation_american],false);
enable;
end;
end;
Poza tym ten kod będzie tworzyć co minutę nową komorę. Lepiej będzie to jakoś inaczej rozkminić.
Założenia:
- Gracz niebieski (side = 1) zbiera skrzynki za pomocą komory z arei o nazwie Area100.
- W przypadku jej zniszczenia, respawnuje nową komorę i kontynuuje zadanie.
Pierwsze co robimy to inicjalizacja zmiennych:
Código: Seleccionar todo
Starting
begin
ResetFog;
InitVariables;
// ...
End;
Export crates_to_collect;
Function InitVariables;
begin
crates_to_collect := [];
// inne zmienne
End;
Kod na komorę:
Código: Seleccionar todo
Export Function SpawnCargo(side, area);
begin
uc_side := side;
uc_nation := nation_american;
vc_chassis := us_medium_tracked;
vc_engine := engine_siberite;
vc_control := control_computer;
vc_weapon := us_cargo_bay;
un := CreateVehicle;
PlaceUnitArea(un, area ,false);
End;
Stawiamy naszą komorę na mapie:
Następnie tworzy kod na zbieranie skrzyń:
Código: Seleccionar todo
// Event rejestrujący spadające skrzynki
On CrateSpawn(id, x, y, amount, mode) do
begin
// pomijamy artefakty
if GetResourceTypeXY(x, y) = mat_artefact then
exit;
// w tym miejscu można by sprawdzać które dokładnie skrzynki mają być rejestrowane, bierzemy te z Area100
if InArea(x, y, Area100) then
crates_to_collect := Insert(crates_to_collect, crates_to_collect+1, [x, y]);
End;
Odpalamy skrypt na zbieranie skrzynek:
Código: Seleccionar todo
Every 0$1 trigger FilterAllUnits([[f_side, 1], [f_weapon, us_cargo_bay]]) and crates_to_collect do
var i;
begin
enable;
for i in FilterAllUnits([[f_side, 1], [f_weapon, us_cargo_bay]]) do
begin
if not HasTask(i) and GetLives(i) > 250 then
begin
ComCollect(i, crates_to_collect[1][1], crates_to_collect[1][2]);
crates_to_collect := Delete(crates_to_collect, 1);
end;
end;
End;
Ostatnia rzecz to spawn nowej komory:
Código: Seleccionar todo
On UnitDestroyed(un) do
begin
if GetSide(un) = 1 and GetWeapon(un) = us_cargo_bay then
SpawnCargo(1, spawn_area);
End;
Tak bym to widział. Niestety kod pisałem z palca i nie mam jak go przetestować więc pisz w razie problemów
