Inteligencja + on VehicleConstructed

Wszystko o modach, patchach i błędach w OW oraz ogólnym programowaniu.
User avatar
Pablo Abruzzi
Soldier level 5
Soldier level 5
Posts: 269
Joined: Mon Jul 28, 2008 3:09 pm
Location: Polska
Contact:

Inteligencja + on VehicleConstructed

Post by Pablo Abruzzi »

Jak zrobić, aby jednostki wroga lub sojusznika stały się inteligentne, to znaczy nie walczyły na kamikadze, tylko gdy maja żółte życie(może być 400-500hp) wycofały się do danego punktu, a mechanicy wysiedli naprawili wozy i ruszyli dalej. Tak jak w trzeciej misji rosyjskiej. Proszę o pomoc.

2) Mam problem z kodem na pojazdy. Na początku jest ok, wszystko mi wyprodukowai, no ale kiedy dopisałem to:

Code: Select all

on VehicleConstructed(czolg4, czolg5) MARKED 01 do 
Begin 
   if czolg1 = czolg2 then 
   Begin 
      ComAgressiveMove(czolg1, 34, 53); 
      ComAgressiveMove(czolg2, 34, 53); 
      ComAgressiveMove(czolg3, 34, 53); 
      ComAgressiveMove(czolg4, 34, 53); 
      ComAgressiveMove(czolg5, 34, 53); 
      Disable(01); 
   end; 
end;
to zamiast pięciu pojazdów wyprodukowało mi dwa, jeden pojechał do punktu, a drugi został przed fabryką. Chyba się pomyliłem w tym if i VehicleConstructed, ale nie moge dojść jak to zrobić poprawnie. Proszę o pomoc.
Last edited by Pablo Abruzzi on Sat May 30, 2009 10:05 am, edited 1 time in total.
Si vis pacem, para bellum jeśli chcesz pokoju, gotuj się do wojny.

THE HEROES COMPANY MOD
[progress]100%[/progress]
DONE
http://forum.original-war.net/viewtopic ... 6&start=90
User avatar
Birkart
Soldier level 2
Soldier level 2
Posts: 47
Joined: Sat Sep 20, 2008 5:38 pm
Location: Timbuktu

Post by Birkart »

Code: Select all

if czolg2=czolg1 then
na pewno ci tego "if" brakuje
Anarchy
Site Moderator
Chad
Posts: 1223
Joined: Thu May 03, 2007 11:02 am

Post by Anarchy »

Spróbuj czegoś takiego, może zadziała;P

Code: Select all

if GetLives(poj1)<600 then
commovetoarea(poj1,area);
//jakis kod na wysiadanie, zapomniałem, jak się nazywało, jakieś exitvehicle...
No a dalej, to już chyba nie dotyczy tego tematu:P
User avatar
Pablo Abruzzi
Soldier level 5
Soldier level 5
Posts: 269
Joined: Mon Jul 28, 2008 3:09 pm
Location: Polska
Contact:

Post by Pablo Abruzzi »

Birkart wrote:

Code: Select all

if czolg2=czolg1 then
na pewno ci tego "if" brakuje
Nie napisałem w poście, ale normalnie mam w Sailu. Ponawiam pytanie.

A ten kod gelives... nie działa niestety, brak reakcji.
Si vis pacem, para bellum jeśli chcesz pokoju, gotuj się do wojny.

THE HEROES COMPANY MOD
[progress]100%[/progress]
DONE
http://forum.original-war.net/viewtopic ... 6&start=90
User avatar
Moonstrider
Soldier level 4
Soldier level 4
Posts: 110
Joined: Fri Nov 09, 2007 11:10 pm
Contact:

Post by Moonstrider »

Nie wiem czy eventy są 'wielokrotnego użytku', załóżmy, że są, jeśli nie to sobie zmienisz kod (pozatym chyba nie można ich markować) :

Code: Select all

On VehicleConstructed(poj,fab) do
Begin
 if fab=fabryka1 then //fabryka1 to fabryka, w której produkowane są pojazdy
   if czolg1 then
     if czolg2 then
       if czolg3 then
         if czolg4 then
          Begin
           czolg5=poj;
           Enable(99);
          end
         else
          czolg4=poj
       else
        czolg3=poj
     else
      czolg2=poj
   else
    czolg1=poj;
end;
every 0$2 trigger czolg1 and czolg2 and czolg3 and czolg4 and czolg5 MARKED 99 do
Begin
ComAgressiveMove(czolg1, 34, 53); 
ComAgressiveMove(czolg2, 34, 53); 
ComAgressiveMove(czolg3, 34, 53); 
ComAgressiveMove(czolg4, 34, 53); 
ComAgressiveMove(czolg5, 34, 53);
end;
a na leczenie:

Code: Select all

every 0$1 GetLives(czolg1)<550 do
Begin
ComMoveXY(czolg1,xx,yy);
ComExitVehicle(kierowcaczolgu1);
AddComRepairVehicle(kierowcaczolgu1,czolg1);
repeat
 Begin
 Wait(0$2);
 end
until GetLives(czolg1)=1000;
ComEnterUnit(kierowcaczolgu1,czolg1);
AddComMoveXY(czolg1,novexx,noveyy);
Enable;
end;
Naturalnie można oznaczyć every na naprawianie i włączyć je dopiero przy wyprodukowaniu pojazdu lub rozkazie ruchu.
Hope it helped :)
Seek your own truth. Always.
Anarchy
Site Moderator
Chad
Posts: 1223
Joined: Thu May 03, 2007 11:02 am

Post by Anarchy »

Jakim cudem nie działa? Czekaj, zaraz zobaczę...

Mi działa...
User avatar
Pablo Abruzzi
Soldier level 5
Soldier level 5
Posts: 269
Joined: Mon Jul 28, 2008 3:09 pm
Location: Polska
Contact:

Post by Pablo Abruzzi »

Moonstrider wrote: a na leczenie:

Code: Select all

every 0$1 GetLives(czolg1)<550 do
Begin
ComMoveXY(czolg1,xx,yy);
ComExitVehicle(kierowcaczolgu1);
AddComRepairVehicle(kierowcaczolgu1,czolg1);
repeat
 Begin
 Wait(0$2);
 end
until GetLives(czolg1)=1000;
ComEnterUnit(kierowcaczolgu1,czolg1);
AddComMoveXY(czolg1,novexx,noveyy);
Enable;
end;
Naturalnie można oznaczyć every na naprawianie i włączyć je dopiero przy wyprodukowaniu pojazdu lub rozkazie ruchu.
Za ten pierwszy kod thx, ale drugi... ja mam coś takiego, że jak już ma te 550 hp to odrazu wysiada na polu bitwy próbowałem to czymś oddzielić, ale i to to samo, jedyny spoób to wait.. ale co mam za każdym razem siedzieć ze stoperem w ręku i liczyć ile mu zaimie dotarcie do punktu? Plis pomocy.[/code]

No i jeszcze jedno:

Code: Select all

On VehicleConstructed(poj,fab) do
Begin
if fab=fabR1 then //fabryka1 to fabryka, w której produkowane są pojazdy
if czolg1 then
if czolg2 then
if czolg3 then
if czolg4 then
if czolg5 then
if hg1 then
if hg2 then
if hg3 then
if hg4 then
if czolg6 then
Begin
hg5=poj;
Enable(99);
end
else
czolg6=poj
else
czolg5=poj
else
czolg4=poj
else
czolg3=poj
else
czolg2=poj
else
czolg1=poj
else
czolg6=poj
else
hg4=poj
else
hg3=poj
else
hg2=poj
else
hg1=poj;
end;
every 0$2 trigger czolg1 and czolg2 and czolg3 and czolg4 and czolg5 and czolg6 and hg1 and hg2 and hg3 and hg4 and hg5 MARKED 99 do
Begin
ComAgressiveMove(czolg1, 81, 119);
ComAgressiveMove(czolg2, 81, 119);
ComAgressiveMove(czolg3, 81, 119);
ComAgressiveMove(czolg4, 81, 119);
ComAgressiveMove(czolg5, 81, 119);
ComAgressiveMove(hg1, 81, 119);
ComAgressiveMove(hg2, 81, 119);
ComAgressiveMove(hg3, 81, 119);
ComAgressiveMove(hg4, 81, 119);
ComAgressiveMove(hg5, 81, 119);
end; 
Troche rozszerzyłem produkcje, ale oni i tak nie jada do danego punktu wszyscy stoją pod fabryką. Plis, możecie powiedzieć co mam źle?
Si vis pacem, para bellum jeśli chcesz pokoju, gotuj się do wojny.

THE HEROES COMPANY MOD
[progress]100%[/progress]
DONE
http://forum.original-war.net/viewtopic ... 6&start=90
User avatar
Moonstrider
Soldier level 4
Soldier level 4
Posts: 110
Joined: Fri Nov 09, 2007 11:10 pm
Contact:

Post by Moonstrider »

Code: Select all

[b]Add[/b]ComExitVehicle();
A z tym eventem to strasznie namieszałeś. Przepisz to na nowo i zastanów sięnad kolejnością wstawionych identów.
Poatym zapewne eventy są jednokrotne więc będziesz musiał zrobić:

Code: Select all

On VehicleConstructed(poj,fab) do
Begin
 if fab=fabryka1 then
 czolg1=poj;
end;

On VehicleConstructed(poj1,fab1) do
 if fab1=fabryka1 then
  if czolg1 then
   poj1=czolg2;
  end;
end;

etc...
Rozumiesz?
Seek your own truth. Always.
User avatar
Birkart
Soldier level 2
Soldier level 2
Posts: 47
Joined: Sat Sep 20, 2008 5:38 pm
Location: Timbuktu

Post by Birkart »

Moonstrider napisał:

a na leczenie:
Kod:
every 0$1 GetLives(czolg1)<550 do
Begin
ComMoveXY(czolg1,xx,yy);
ComExitVehicle(kierowcaczolgu1);
AddComRepairVehicle(kierowcaczolgu1,czolg1);
repeat
Begin
Wait(0$2);
end
until GetLives(czolg1)=1000;
ComEnterUnit(kierowcaczolgu1,czolg1);
AddComMoveXY(czolg1,novexx,noveyy);
Enable;
end;

Naturalnie można oznaczyć every na naprawianie i włączyć je dopiero przy wyprodukowaniu pojazdu lub rozkazie ruchu.


Za ten pierwszy kod thx, ale drugi... ja mam coś takiego, że jak już ma te 550 hp to odrazu wysiada na polu bitwy próbowałem to czymś oddzielić, ale i to to samo, jedyny spoób to wait.. ale co mam za każdym razem siedzieć ze stoperem w ręku i liczyć ile mu zaimie dotarcie do punktu? Plis pomocy.[/code]
zamiast ComMove daj AddComMove
zamiast ComExit daj AddComExit
itd.

@ edit
wróć; ComMove niech zostanie = wtedy przerywa poprzednie zadania
User avatar
Pablo Abruzzi
Soldier level 5
Soldier level 5
Posts: 269
Joined: Mon Jul 28, 2008 3:09 pm
Location: Polska
Contact:

Post by Pablo Abruzzi »

Moonstrider wrote: Rozumiesz?
Tak, ale twój kod działał, a wcale nie musiałeś pisać wszystkiego po sto razy, z tylko dodałeś else, możesz to objaśnić??
Si vis pacem, para bellum jeśli chcesz pokoju, gotuj się do wojny.

THE HEROES COMPANY MOD
[progress]100%[/progress]
DONE
http://forum.original-war.net/viewtopic ... 6&start=90
Radzio
Site Administrator
Site Administrator
Poland
Posts: 2898
Joined: Fri Jul 28, 2006 10:58 am
Location: Bialystok, Poland

Post by Radzio »

Moonstrider wrote:

Code: Select all

[b]Add[/b]ComExitVehicle();
A z tym eventem to strasznie namieszałeś. Przepisz to na nowo i zastanów sięnad kolejnością wstawionych identów.
Poatym zapewne eventy są jednokrotne więc będziesz musiał zrobić:

Code: Select all

On VehicleConstructed(poj,fab) do
Begin
 if fab=fabryka1 then
 czolg1=poj;
end;

On VehicleConstructed(poj1,fab1) do
 if fab1=fabryka1 then
  if czolg1 then
   poj1=czolg2;
  end;
end;

etc...
Rozumiesz?
W drugim evencie przestawiłeś poj z czolg; nie widzę też potrzeby rozbijania tego na kilka eventów.

Eventy można markować.
User avatar
Pablo Abruzzi
Soldier level 5
Soldier level 5
Posts: 269
Joined: Mon Jul 28, 2008 3:09 pm
Location: Polska
Contact:

Post by Pablo Abruzzi »

Już całkowicie się w tym pogubiłem może ktoś wytłumaczyć ta sprawę z produkowaniem kilku pojazdów?
Si vis pacem, para bellum jeśli chcesz pokoju, gotuj się do wojny.

THE HEROES COMPANY MOD
[progress]100%[/progress]
DONE
http://forum.original-war.net/viewtopic ... 6&start=90
User avatar
Moonstrider
Soldier level 4
Soldier level 4
Posts: 110
Joined: Fri Nov 09, 2007 11:10 pm
Contact:

Post by Moonstrider »

@Birkart: Taki długi post, a nie wnosi nic nowego xD
@Radzio: Dzięki :)
@Pablo: Opiszę Ci algorytm:

Code: Select all

Po wyprodukowaniu pojazdu:
[b]jeśi fabryka=fabryka1 to:[/b]
 jeśli istnieje pojazd1 to:
  jeśliistnieje pojazd2 to:
   pojazd3=poj;
  a jeśli nie to:
   pojazd2=poj;
 a jeśli nie to:
  pojazd1=poj;
[b]end;[/b]
end; 
Seek your own truth. Always.
User avatar
Pablo Abruzzi
Soldier level 5
Soldier level 5
Posts: 269
Joined: Mon Jul 28, 2008 3:09 pm
Location: Polska
Contact:

Post by Pablo Abruzzi »

Zgodnie z tym co napisałeś Moonstrider, ułozyłem coś takiego:

Code: Select all

On VehicleConstructed(poj,fab) do  
Begin
 if fab=fabR1 then             
if czolg1 then
if czolg2 then
if czolg3 then
if czolg4 then
if czolg5 then
if czolg6 then
if czolg7 then
if czolg8 then
if czolg9 then
Begin
czolg10=poj;                        
Enable(99);
end
end;

every 0$2 trigger czolg1 and czolg2 and czolg3 and czolg4 and czolg5 MARKED 99 do
Begin
ComAgressiveMove(czolg1, 64, 108);
ComAgressiveMove(czolg2, 64, 108);
ComAgressiveMove(czolg3, 64, 108);
ComAgressiveMove(czolg4, 64, 108);
ComAgressiveMove(czolg5, 64, 108);
ComAgressiveMove(czolg6, 64, 108);
ComAgressiveMove(czolg7, 64, 108);
ComAgressiveMove(czolg8, 64, 108);
ComAgressiveMove(czolg9, 64, 108);
ComAgressiveMove(czolg10, 64, 108);
end;
Noi tak samo po wyprodukowaniu pojazdów stoją one przed fabryką nie jadą do punktu. Czy mógłby ktoś poprawić ten kod, proszę.
Si vis pacem, para bellum jeśli chcesz pokoju, gotuj się do wojny.

THE HEROES COMPANY MOD
[progress]100%[/progress]
DONE
http://forum.original-war.net/viewtopic ... 6&start=90
User avatar
Gothuk
Site Administrator
Site Administrator
Poland
Posts: 985
Joined: Tue Sep 04, 2007 6:10 pm
Location: Poland, Warsaw
Contact:

Post by Gothuk »

try this:

Code: Select all

on VehicleConstructed(poj,fab) do  
begin 
if fab=fabR1 then              
  if czolg1 then 
    if czolg2 then 
      if czolg3 then 
        if czolg4 then 
          if czolg5 then 
            if czolg6 then 
              if czolg7 then 
                if czolg8 then 
                  if czolg9 then begin czolg10=poj; Enable(99); end 
                else czolg9=poj
              else czolg8=poj
            else czolg7=poj
          else czolg6=poj
        else czolg5=poj
      else czolg4=poj
    else czolg3=poj
  else czolg2=poj
else czolg1=poj       
end; 

every 0$2 trigger MARKED 99 do 
begin 
ComAgressiveMove([czolg1, czolg2, czolg3, czolg4, czolg5, czolg6, czolg7, czolg8, czolg9, czolg10], 64, 108); 
end;
edit. no dobra niech bedzie i bez islive ^^. co do disable na poczatku to chyba tak oczywiste, ze nie powinno nawet tego wspominac xD
Last edited by Gothuk on Sun May 31, 2009 7:28 pm, edited 1 time in total.
Post Reply