pojawiajaca sie komora

Wszystko o modach, patchach i błędach w OW oraz ogólnym programowaniu.
Post Reply
Lavigo.
Soldier level 1
Soldier level 1
Poland
Posts: 19
Joined: Sun Oct 13, 2019 1:58 pm

pojawiajaca sie komora

Post by Lavigo. »

witamj
mam problem z utworzeniem kodu na komore która by siepojawiała pomimo tego że została zniszczona i zbierała skrzynki z danego obszaru
tzn jest komora i zbiera skrzynki jak sieją zniszczy to chcę żeby siępojawiła i dalej zbierała skrzynki...

znalazłem kod w 15 misji Am ale tam są uwzględnione 3 nacje od razu i mam problem jak go przerobić dla jednej nacji

kod który wynalazłem:
Spoiler:
every 1$0.6 do
var un,
n_cargo,cargo,
side;
begin
for side in cpu_list do
begin
case side of
1: n_cargo:=us_cargo_bay;
2: n_cargo:=ar_cargo_bay;
3: n_cargo:=ru_cargo_bay;
end;
cargo:=FilterAllUnits([ [f_side,side], [f_type,unit_vehicle], [f_weapon,n_cargo] ]);
if not (cargo or FilterUnitsInArea(base_areas[side], [ [f_side,you] ])) then
begin
uc_side:=side;
case side of
1: uc_nation:=nation_american;
2: uc_nation:=nation_arabian;
3: uc_nation:=nation_russian;
end;

uc_direction:=Rand(0,5);
case side of
1: vc_chassis:=us_medium_tracked;
2: vc_chassis:=ar_half_tracked;
3: vc_chassis:=ru_medium_tracked;
end;
vc_engine:=engine_siberite;
case side of
1: vc_control:=control_computer;
2: vc_control:=control_apeman;
3: vc_control:=control_computer;
end;
vc_weapon:=n_cargo;

un:=CreateVehicle;
while GetTag(83) do
wait(0$1);
PlaceUnitArea(un,create_areas[side],false);
end;

end;
enable;
end;
ogarnąłem go jakośtak:
Spoiler:
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;

ale i tak sail przy kompilacji wyrzuca błąd na końcu kodu w end
kombinuje i kombinuje i mi to nie chce przejść...
Last edited by Lavigo. on Sat Nov 02, 2019 7:56 pm, edited 1 time in total.
User avatar
Serpent
Soldier level 10
Soldier level 10
Estonia
Posts: 4175
Joined: Tue Jul 07, 2009 9:13 pm
Location: Polska - EuroStan ZSRE
Contact:

Re: pojawiajaca sie komora

Post by Serpent »

Odnośnie drugiego kodu, zabrakło ci

Code: Select all

end
. Liczb beginów musi być zawsze równa liczbie endów gdyż są to odpowiednio początek i koniec bloku.

Code: Select all

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:

Code: Select all

Starting
begin
ResetFog;
InitVariables;
// ...
End;

Export crates_to_collect;
Function InitVariables;
begin
crates_to_collect := [];
// inne zmienne
End;
Kod na komorę:

Code: Select all

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:

Code: Select all

Every 0$1 do
SpawnCargo(1, spawn_area);
Następnie tworzy kod na zbieranie skrzyń:

Code: Select all

// 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:

Code: Select all

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:

Code: Select all

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 :P
Epickie teksty:
Marek1906: jak zrobic aby sail był zielony?
Kvantovy: Wszystko normalne, wszystko w koło było dziwne
Kvantovy:: To jest fajne, że to nie jest takie głupie
Kvantovy:: remove sos from kanapeczka
Kvantovy:: zdarzają się rzezy które sie filozofom nie śniły
Cenwen: problemem jest gejostwo
"Taki z niego fizyk jak ze mnie baletnica" - Profesor Scholtze o Kvantovym.
JAKBYŁ BYM CZECHEM TO BYM ROZŁOŻYŁ NAMIOT ~Kvanciak
Lavigo.
Soldier level 1
Soldier level 1
Poland
Posts: 19
Joined: Sun Oct 13, 2019 1:58 pm

Re: pojawiajaca sie komora

Post by Lavigo. »

initVariables w bloku startowym sail znalazł jako błąd, po wywaleniu go śmiga

pojawiają się skrzynki i komora chwile stoi ale zaraz zbiera tylko nie zawsze je wkłada do magazynu, czasem czeka i wkłada dopiero przy następnym zbieraniu ?!

jeszcze tylko parę pytań ;)
Spoiler:
PlaceUnitArea(un, area ,false);
to ma w takiej formie pozostać czy za area mam podstawić aree w które ma sie pojawiać komora
Spoiler:
on CrateSpawn(id, x, y, amount, mode) do
tutaj też id, x,y zostawiam?

to samo tu:
Spoiler:
If InArea(x, y, Area100) then
x, y, majątak zostać

bo ogólnie kod ruszył, ale chciałem dopytać ze względu na czasami zastoje komory ;)
User avatar
Serpent
Soldier level 10
Soldier level 10
Estonia
Posts: 4175
Joined: Tue Jul 07, 2009 9:13 pm
Location: Polska - EuroStan ZSRE
Contact:

Re: pojawiajaca sie komora

Post by Serpent »

Podałem ci gotowy kod, nic nie trzeba podmieniać.
pojawiają się skrzynki i komora chwile stoi ale zaraz zbiera tylko nie zawsze je wkłada do magazynu, czasem czeka i wkłada dopiero przy następnym zbieraniu ?!
Zazwyczaj komora ma ładowność 100 jednostek. Jeden zrzut to maksymalnie 50 jednostek, więc komora nie jedzie do magazynu się wyładować gdyż wciąż ma wolne miejsce.

Jeżeli zależy ci na tym aby komora za każdym razem gdy coś podniesie, jechała od razu do magazynu to trzeba zmodyfikować jeden fragment kodu:

Code: Select all

Every 0$1 trigger FilterAllUnits([[f_side, 1], [f_weapon, us_cargo_bay]]) and crates_to_collect do
var i, dep;
begin
enable;

dep := FilterAllUnits([[f_side, 1], [f_or, [f_btype, b_depot], [f_btype, b_warehouse]]]);

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);
        
        if dep then
           AddComGive(i, NearestUnitToUnit(dep, i));
        end;
     end;   
End;
Epickie teksty:
Marek1906: jak zrobic aby sail był zielony?
Kvantovy: Wszystko normalne, wszystko w koło było dziwne
Kvantovy:: To jest fajne, że to nie jest takie głupie
Kvantovy:: remove sos from kanapeczka
Kvantovy:: zdarzają się rzezy które sie filozofom nie śniły
Cenwen: problemem jest gejostwo
"Taki z niego fizyk jak ze mnie baletnica" - Profesor Scholtze o Kvantovym.
JAKBYŁ BYM CZECHEM TO BYM ROZŁOŻYŁ NAMIOT ~Kvanciak
Lavigo.
Soldier level 1
Soldier level 1
Poland
Posts: 19
Joined: Sun Oct 13, 2019 1:58 pm

Re: pojawiajaca sie komora

Post by Lavigo. »

kod ogólnie działa wiec super wielkie dzięki :D
ale i ten lekko zmodyfikowany sięprzyda :d dzieki raz jeszcze :D


edit:
z tym że ten drugi co przed chwilą podałeś jednak nie zawozi skrzyń do magazynu ale ten pierwszy jest ok, tylko dopytać
cchiałem :)
Last edited by Lavigo. on Sun Nov 03, 2019 6:16 pm, edited 1 time in total.
Jakskomiksu
Soldier level 2
Soldier level 2
Poland
Posts: 31
Joined: Sat Nov 26, 2022 4:44 pm

Re: pojawiajaca sie komora

Post by Jakskomiksu »

Odsyłam do starszego, podobnego wątku: viewtopic.php?f=6&t=3712
Post Reply