SAIL Produkcja pojazdu, , wysiad kierowcy i powrot do fabryk

Wszystko o modach, patchach i błędach w OW oraz ogólnym programowaniu.
Antworten
Benutzeravatar
Jeanks
Soldier level 6
Soldier level 6
Beiträge: 305
Registriert: Fr Feb 16, 2007 1:34 pm
Wohnort: Grudziądz

SAIL Produkcja pojazdu, , wysiad kierowcy i powrot do fabryk

Beitrag von Jeanks »

Chcę wybudować dwie bryki a kierowca który w nim jest ma udać się w dany punkt wysiąść i wrócić do fabryki. Zrobiłem tak i kod zatrzymał się na produkcji a pojazdy stoją. Innym sposobem kierowca wysiadł tuż po wyjechaniu z fabryki zamiast dotrzeć do bazy wtedy wysiąść i wrócić.

1.

Code: Alles auswählen

Export czolg1,czolg2;
Export budowniczy;

Every 0$1 trigger GetDistUnits(fac1,abc)<10 or   GetDistUnits(fac1,abc1)<10 or GetDistUnits(fac1,abc2)<10 do
Begin
czolg1 = addcomconstruct(fac1, ru_heavy_tracked,engine_combustion,control_manual,ru_gatling_gun);
czolg2 = addcomconstruct(fac1, ru_medium_tracked,engine_combustion,control_manual,ru_gun);
end;

on VehicleConstructed(un, fab) do
Begin
   if fab = fac1 then if un= czolg2  then if budowniczy= FilterAllUnits([f_class,class_mechanic]) then
      AddComAgressiveMove([czolg1,czolg2],112,72);
      AddComExitVehicle(budowniczy);
      AddComEnterUnit(budowniczy,fac1);

end;
2.

Code: Alles auswählen

Export czolg1,czolg2;
Export budowniczy;

Every 0$1 trigger GetDistUnits(fac1,abc)<10 or   GetDistUnits(fac1,abc1)<10 or GetDistUnits(fac1,abc2)<10 do
Begin
czolg1 = addcomconstruct(fac1, ru_heavy_tracked,engine_combustion,control_manual,ru_gatling_gun);
czolg2 = addcomconstruct(fac1, ru_medium_tracked,engine_combustion,control_manual,ru_gun);
end;

on VehicleConstructed(un, fab) do
Begin
   if fab = fac1 then if un= czolg1 or czolg 2  then if budowniczy= FilterAllUnits([f_class,class_mechanic]) then
      AddComMoveToArea(un,arena);
      AddComExitVehicle(budowniczy);
      AddComEnterUnit(budowniczy,fac1);

end;

Próbowałem nawet prostszy kod

3.

Code: Alles auswählen

on VehicleConstructed(un, fab) do
Begin
  if fab = fac1 then  if un= czolg2   then
      ComAgressiveMove([czolg1,czolg2],112,72);

end;
I nic pojazdy wyjechały z fabryki i stoją ;/


Kombinuje i kombinuje i biorą mnie diabli. Pomocy. kod na "budowniczego" jest dobry bo jak mówię raz kierowca wysiadł z pojazdu w przypadki 2) o ile dobrze go napisałem bo mam sklere
Jeanks zgarnia wszystko ot co xD
Benutzeravatar
Moonstrider
Soldier level 4
Soldier level 4
Beiträge: 110
Registriert: Fr Nov 09, 2007 11:10 pm
Kontaktdaten:

Beitrag von Moonstrider »

Imo po prostu nie próbujesz używać bardziej 'zaawansowanych' funkcji SAILa :P

Code: Alles auswählen

var kierowca;
On Vehicle Constructed(un,fab) do
Begin
 if fab=fac1 then
  Begin
   if un=czolg1 or un=czolg2 then
    Begin
     kierowca=IsDrivenBy(un);
     ComMoveXY(kierowca,xx,yy);
     AddComExitVehicle(kierowca);
     AddComEnterUnit(kierowca,fac1);
    end;
  end;
end;
Ewentualnie, jeśli IsDrivenBy(veh:id) nei będzie spełniać swojej roli użyjesz funkcji UnitsInside(id):

Code: Alles auswählen

var units, kieowca;
units=UnitsInside(un);
kierowca=units[1];
Seek your own truth. Always.
Benutzeravatar
Jeanks
Soldier level 6
Soldier level 6
Beiträge: 305
Registriert: Fr Feb 16, 2007 1:34 pm
Wohnort: Grudziądz

Beitrag von Jeanks »

Moonstrider hat geschrieben:Imo po prostu nie próbujesz używać bardziej 'zaawansowanych' funkcji SAILa :P

Code: Alles auswählen

var kierowca;
On Vehicle Constructed(un,fab) do
Begin
 if fab=fac1 then
  Begin
   if un=czolg1 or un=czolg2 then
    Begin
     kierowca=IsDrivenBy(un);
     ComMoveXY(kierowca,xx,yy);
     AddComExitVehicle(kierowca);
     AddComEnterUnit(kierowca,fac1);
    end;
  end;
end;
Ewentualnie, jeśli IsDrivenBy(veh:id) nei będzie spełniać swojej roli użyjesz funkcji UnitsInside(id):

Code: Alles auswählen

var units, kieowca;
units=UnitsInside(un);
kierowca=units[1];
Taki zaawansowany kod ze neidziała w jednym ani drugim przypadku. Pewnie wiem dlaczego. Bo nie kompilowałeś i niesprawdziłeś czy działa. Kompilacja odrazu daję błędy wiec troche kdo przekabaciłem. A drugie czemu niedziała dałem kierowce jako

Code: Alles auswählen

budowniczy=FilterAllUnits([f_class,class_mechanic]);
W co raczej wątpie bo raz mi to zadziałało wiec jest to problem tego, ze coś połknołeś w kodzie albo przez niezrobienie kompilacji wypisałęś kod z głowy i niedziała pzdr a ja się męcze z tym dalej.

Całey kod "nasz" wyglądal tak

Code: Alles auswählen

Export czolg1,czolg2;
var units, budowniczy;

Every 0$1 trigger GetDistUnits(fac1,abc)<10 or   GetDistUnits(fac1,abc1)<10 or GetDistUnits(fac1,abc2)<10 do
Begin
czolg1 = addcomconstruct(fac1, ru_heavy_tracked,engine_combustion,control_manual,ru_gatling_gun);
czolg2 = addcomconstruct(fac1, ru_medium_tracked,engine_combustion,control_manual,ru_gun);
end;

On VehicleConstructed(un,fab) do
Begin
 if fab=fac1 then
  Begin
   if un=czolg1 or un=czolg2 then
    Begin
     if budowniczy=FilterAllUnits([f_class,class_mechanic]) then
      Begin
     units=UnitsInside(un);
budowniczy=units[1];
     ComMoveToArea(budowniczy,arena);
     AddComExitVehicle(budowniczy);
     AddComEnterUnit(budowniczy,fac1);
    end;
  end;
end;
end;
a za peirwszym razem tak jak dałeś w pryzkładzie ze zamiast UnitsInSide(un) dałem IsDrivedBy czy cos takiego ;p
Jeanks zgarnia wszystko ot co xD
Benutzeravatar
Moonstrider
Soldier level 4
Soldier level 4
Beiträge: 110
Registriert: Fr Nov 09, 2007 11:10 pm
Kontaktdaten:

Beitrag von Moonstrider »

LOL! PO pierwsze to Cię zdziwię, bo oba kody mi się w edytorze kompilowały. Po drugie skoro zmieniasz podstawiony pod nos kod to nie miej do nikogo oprócz siebie pretensji, że nie działa... Wogle odechciało mi się już Ci pomagać, bo ciągle modyfikujesz podany kod, i bez przerwy jęczysz, że nadal nie działa, a wyjaśnić konkretnie już nie łaska...
Seek your own truth. Always.
Benutzeravatar
Jeanks
Soldier level 6
Soldier level 6
Beiträge: 305
Registriert: Fr Feb 16, 2007 1:34 pm
Wohnort: Grudziądz

Beitrag von Jeanks »

ku**a ;] Dotrze to do Ciebie, że kod przy kompilowaniu Twój dawał błędy ? więc musiałem zrobić tak by nie dawał. Poza tym jak nie napisałeś zmiennej dla kierowcy to jakim cudem ma Ci ten kod dzialać ? :D. cHYBA, ŻE KIEROWCA To u Ciebie ID jakiegoś konkrenego ludzika z mapy (lub stworzonego w SAILU) to sorry ale wtedy nie zrozumiałeś mojego problemu ;] bo u mnie te ID ma się odnosić dla każdego jedngo mechanika ;] tak jak ID czolg1 dla kazdego pojazdu z gatlingiem pzdr
Jeanks zgarnia wszystko ot co xD
Benutzeravatar
Moonstrider
Soldier level 4
Soldier level 4
Beiträge: 110
Registriert: Fr Nov 09, 2007 11:10 pm
Kontaktdaten:

Beitrag von Moonstrider »

Widzę, że z Tobą trzeba jak z dzieckiem. Dobze więc. Wklej następujący kod:

Code: Alles auswählen

Export czolg1,czolg2; 

Every 0$1 trigger GetDistUnits(fac1,abc)<10 or   GetDistUnits(fac1,abc1)<10 or GetDistUnits(fac1,abc2)<10 do 
Begin 
czolg1 = addcomconstruct(fac1, ru_heavy_tracked,engine_combustion,control_manual,ru_gatling_gun); 
czolg2 = addcomconstruct(fac1, ru_medium_tracked,engine_combustion,control_manual,ru_gun); 
end;

var kierowca; 
On VehicleConstructed(un,fab) do 
Begin 
 if fab=fac1 then 
  Begin 
   if un=czolg1 or un=czolg2 then 
    Begin 
     kierowca=IsDrivenBy(un); 
     ComMoveToArea(kierowca,arena); 
     AddComExitVehicle(kierowca); 
     AddComEnterUnit(kierowca,fac1); 
    end; 
  end; 
end;
a jeśli nie będzie działać:

Code: Alles auswählen

Export czolg1,czolg2; 

Every 0$1 trigger GetDistUnits(fac1,abc)<10 or   GetDistUnits(fac1,abc1)<10 or GetDistUnits(fac1,abc2)<10 do 
Begin 
czolg1 = addcomconstruct(fac1, ru_heavy_tracked,engine_combustion,control_manual,ru_gatling_gun); 
czolg2 = addcomconstruct(fac1, ru_medium_tracked,engine_combustion,control_manual,ru_gun); 
end;

var kierowca, units; 
On VehicleConstructed(un,fab) do 
Begin 
 if fab=fac1 then 
  Begin 
   if un=czolg1 or un=czolg2 then 
    Begin 
     units=UnitsInside(un); 
     kierowca=units[1];
     ComMoveToArea(kierowca,arena); 
     AddComExitVehicle(kierowca); 
     AddComEnterUnit(kierowca,fac1); 
    end; 
  end; 
end;
Jeśli oba nie będą działać to nic nie zmieniając zaraportuj treść błędów, bo u mnie kody kompilują się bez problemu; co to są te abc?!
Seek your own truth. Always.
Benutzeravatar
Jeanks
Soldier level 6
Soldier level 6
Beiträge: 305
Registriert: Fr Feb 16, 2007 1:34 pm
Wohnort: Grudziądz

Beitrag von Jeanks »

abc to ID ludzików ;] zaraz sprawdzę kod. Tu niechodzi tylko o to zeby się skompilował ale jeżeli niebedzie znowu działać to dlatego, że gra niebędzie wiedziała ktoto jest "kierowca" pzdr zaraz EDIt BEDZIE


EDIT: tak jak mówiłem znów to samo. Błędu nie ma w kompilacji ale gra szuka ID "kierowca" i niemoże się go doszukać wiec po wyjechaniu czołgu z factory, czołg stoi jak wół ponieważ mechanik który jest w środku nie ma ID "kierowca" ;].

Zrozum mi chodzi żeby każdy jeden mechanik który wyjedzie tym czołgiem z factory (bo może to bym obojętnie kto) ma mieć przypisane ID "kierowca". Ty dałes mi kod tka jakby kierowca to był jeden ludek tylko czaisz ? Dlatego ten kod Twój co podałeś nie będzie działać dopóki nie będzie w pojeździe koleś z mapy o ID "kierowca" ale nie o to mi chodzi. Kierowca ma być przyporządkowany do 6 mechaników którzy są w factory ;]

Jednym słowem musi być filter na tych mechaników
Jeanks zgarnia wszystko ot co xD
Benutzeravatar
Moonstrider
Soldier level 4
Soldier level 4
Beiträge: 110
Registriert: Fr Nov 09, 2007 11:10 pm
Kontaktdaten:

Beitrag von Moonstrider »

Code: Alles auswählen

     kierowca=IsDrivenBy(un);

Code: Alles auswählen

     units=UnitsInside(un); 
     kierowca=units[1];
To jest kierowca. W pierwszym przypadku jest to jednostka prowadząca pojazd, jeśli pojazd(un) został wyprodukowany w fac1 i ma id czolg1 lub czolg2. Teraz trzeba sprawdzić która konkretnie część kodu nie działa.

po paru minutach: Ha xD wyobraź sobie, że kod działa poprawnie bez jednego if (w obu przypadkach) xD

Code: Alles auswählen

Export czolg1,czolg2; 

Every 0$1 trigger GetDistUnits(fac1,abc)<10 or   GetDistUnits(fac1,abc1)<10 or GetDistUnits(fac1,abc2)<10 do 
Begin 
czolg1 = addcomconstruct(fac1, ru_heavy_tracked,engine_combustion,control_manual,ru_gatling_gun); 
czolg2 = addcomconstruct(fac1, ru_medium_tracked,engine_combustion,control_manual,ru_gun); 
end; 

var kierowca; 
On VehicleConstructed(un,fab) do 
Begin 
 if fab=fac1 then 
  Begin 
   //if un=czolg1 or un=czolg2 then 
    //Begin 
     kierowca=IsDrivenBy(un); 
     ComMoveToArea(kierowca,arena); 
     AddComExitVehicle(kierowca); 
     AddComEnterUnit(kierowca,fac1); 
    //end; 
  end; 
end;
Jeśli w fac1 nie produkujesz więcej pjazdów, to nie ma sensu siędalej bawić. A jeśli jednak to if jest Ci potrzebne, spróbuj zamienić pierwsze if:

Code: Alles auswählen

 if fab=fac1 and (un=czolg1 or un=czolg2) then 
Napisz jakie są wyniki :P
Seek your own truth. Always.
Benutzeravatar
Jeanks
Soldier level 6
Soldier level 6
Beiträge: 305
Registriert: Fr Feb 16, 2007 1:34 pm
Wohnort: Grudziądz

Beitrag von Jeanks »

To jest genialne działa ;o;o ale jakim cudem xDD ?
Jeanks zgarnia wszystko ot co xD
Benutzeravatar
Moonstrider
Soldier level 4
Soldier level 4
Beiträge: 110
Registriert: Fr Nov 09, 2007 11:10 pm
Kontaktdaten:

Beitrag von Moonstrider »

Ale który przypadek działa? ten z tą ostatnią linijką w moim poście czy bez?
A pozatym jak już kiedyś napisałem: SAIL jest zrobiony tak, że nie należy martwić się o extetykę czy prostotę kodu, ale o to żeby wogle działał xD
Seek your own truth. Always.
Benutzeravatar
Jeanks
Soldier level 6
Soldier level 6
Beiträge: 305
Registriert: Fr Feb 16, 2007 1:34 pm
Wohnort: Grudziądz

Beitrag von Jeanks »

Ten pierwszy myslę że un nie może mieć przypisanych ID bo sam w kodzie VehicleConstructed oznacza każdy jeden pojazd prowadzony dlatego jak przypisało mu się ID to nie działał.
Jeanks zgarnia wszystko ot co xD
Benutzeravatar
Moonstrider
Soldier level 4
Soldier level 4
Beiträge: 110
Registriert: Fr Nov 09, 2007 11:10 pm
Kontaktdaten:

Beitrag von Moonstrider »

Jeanks nie filozuj, albo chociaż wymyśl jakieś pożądne bzdury :P zobacz pierwsze if, fabryka przecież też oznacza każdą fabrykę w której konstruowany jest pojazd. Jeszcze poexperymentuję z tym kodem żeby wstawić ten warunek z id.
Seek your own truth. Always.
Antworten