Inteligencja + on VehicleConstructed

Wszystko o modach, patchach i błędach w OW oraz ogólnym programowaniu.
Awatar użytkownika
Pablo Abruzzi
Soldier level 5
Soldier level 5
Posty: 269
Rejestracja: pn lip 28, 2008 3:09 pm
Lokalizacja: Polska
Kontakt:

Inteligencja + on VehicleConstructed

Post autor: 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:

Kod: Zaznacz cały

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.
Ostatnio zmieniony sob maja 30, 2009 10:05 am przez Pablo Abruzzi, łącznie zmieniany 1 raz.
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
Awatar użytkownika
Birkart
Soldier level 2
Soldier level 2
Posty: 47
Rejestracja: sob wrz 20, 2008 5:38 pm
Lokalizacja: Timbuktu

Post autor: Birkart »

Kod: Zaznacz cały

if czolg2=czolg1 then
na pewno ci tego "if" brakuje
Anarchy
Site Moderator
Chad
Posty: 1223
Rejestracja: czw maja 03, 2007 11:02 am

Post autor: Anarchy »

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

Kod: Zaznacz cały

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
Awatar użytkownika
Pablo Abruzzi
Soldier level 5
Soldier level 5
Posty: 269
Rejestracja: pn lip 28, 2008 3:09 pm
Lokalizacja: Polska
Kontakt:

Post autor: Pablo Abruzzi »

Birkart pisze:

Kod: Zaznacz cały

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
Awatar użytkownika
Moonstrider
Soldier level 4
Soldier level 4
Posty: 110
Rejestracja: pt lis 09, 2007 11:10 pm
Kontakt:

Post autor: 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ć) :

Kod: Zaznacz cały

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:

Kod: Zaznacz cały

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
Posty: 1223
Rejestracja: czw maja 03, 2007 11:02 am

Post autor: Anarchy »

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

Mi działa...
Awatar użytkownika
Pablo Abruzzi
Soldier level 5
Soldier level 5
Posty: 269
Rejestracja: pn lip 28, 2008 3:09 pm
Lokalizacja: Polska
Kontakt:

Post autor: Pablo Abruzzi »

Moonstrider pisze: a na leczenie:

Kod: Zaznacz cały

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:

Kod: Zaznacz cały

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
Awatar użytkownika
Moonstrider
Soldier level 4
Soldier level 4
Posty: 110
Rejestracja: pt lis 09, 2007 11:10 pm
Kontakt:

Post autor: Moonstrider »

Kod: Zaznacz cały

[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ć:

Kod: Zaznacz cały

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.
Awatar użytkownika
Birkart
Soldier level 2
Soldier level 2
Posty: 47
Rejestracja: sob wrz 20, 2008 5:38 pm
Lokalizacja: Timbuktu

Post autor: 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
Awatar użytkownika
Pablo Abruzzi
Soldier level 5
Soldier level 5
Posty: 269
Rejestracja: pn lip 28, 2008 3:09 pm
Lokalizacja: Polska
Kontakt:

Post autor: Pablo Abruzzi »

Moonstrider pisze: 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
Posty: 2898
Rejestracja: pt lip 28, 2006 10:58 am
Lokalizacja: Bialystok, Poland

Post autor: Radzio »

Moonstrider pisze:

Kod: Zaznacz cały

[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ć:

Kod: Zaznacz cały

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ć.
Awatar użytkownika
Pablo Abruzzi
Soldier level 5
Soldier level 5
Posty: 269
Rejestracja: pn lip 28, 2008 3:09 pm
Lokalizacja: Polska
Kontakt:

Post autor: 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
Awatar użytkownika
Moonstrider
Soldier level 4
Soldier level 4
Posty: 110
Rejestracja: pt lis 09, 2007 11:10 pm
Kontakt:

Post autor: Moonstrider »

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

Kod: Zaznacz cały

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.
Awatar użytkownika
Pablo Abruzzi
Soldier level 5
Soldier level 5
Posty: 269
Rejestracja: pn lip 28, 2008 3:09 pm
Lokalizacja: Polska
Kontakt:

Post autor: Pablo Abruzzi »

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

Kod: Zaznacz cały

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
Awatar użytkownika
Gothuk
Site Administrator
Site Administrator
Poland
Posty: 985
Rejestracja: wt wrz 04, 2007 6:10 pm
Lokalizacja: Poland, Warsaw
Kontakt:

Post autor: Gothuk »

try this:

Kod: Zaznacz cały

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
Ostatnio zmieniony ndz maja 31, 2009 7:28 pm przez Gothuk, łącznie zmieniany 1 raz.
ODPOWIEDZ