NNPlaya wrote:Przeanalizuj sobie powyższy kod i ten tekst. Chcesz, żeby wróg wyprodukował pojazd w fabryce. Od tego jest funkcja ComConstruct. (Nie wpisałem jej tutaj z wymaganymi, parametrami, tylko dałem przykład.) W argumentach przyjmuje ona identyfikator warsztatu/fabryki oraz nazwy pożądanych części. Zajrzyj do spisu funkcji SAILa po więcej informacji. Wracając do funkcji ComConstruct - wszystko fajnie, pojazd zostanie zmontowany przez mechaników (lub nie, jeśli nie będzie ich w warsztacie lub braknie prądu ), lecz jak teraz wydasz komendę ataku pojazdowi? Ano nie da rady tego zrobić. Na pewno? Jest na to rozwiązanie przedstawione w kodzie - przypisujemy ComConstruct do zmiennej. Od teraz odwołując się do tej zmiennej będziemy mogli wydawać rozkazy pojazdowi, który został do niej przypisany (identycznie, gdybyśmy na mapie postawili wehikuł i dali mu identyfikator poprzez edytor). Dalej widać, że do drugiej zmiennej przypisano nie ComConstruct, lecz AddComConstruct. Różni się ona od tej pierwszej tym, iż Add oznacza dodanie rozkazu do kolejki, co pozwala na rozkazanie produkcji określonych pojazdów w fabryce w ustalonej przez nas serii. Dobrze, więc mamy kod jak powyżej, lecz jak teraz sprawdzić, czy zostały wyprodukowane wszystkie pożądane pojazdy? Teraz posłużymy się zdarzeniami SAILa. Konkretnie chodzi mi o VehicleConstructed:Code: Select all
export czolg1, czolg2; Starting Begin czolg1 = ComConstruct(); czolg2 = AddComConstruct(); enable(01); end;
Zdarzenie VehicleConstructed jest wywoływane za każdym razem, gdy zostaje wybudowany pojazd. Jednocześnie zwraca dwa argumenty do operacji - odniesienia do pojazdu i fabryki. W powyższym kodzie sprawdzam, czy pierwszy argument ident_pojazdu, jest odniesieniem do tego samego wehikułu, co czolg2 - wcześniej przypisany do komendy ComConstruct.Code: Select all
on VehicleConstructed(ident_pojazdu, ident_fabryki) MARKED 01 do Begin if ident_pojazdu = czolg2 then Begin ComAgressiveMove(czolg1, 34, 53); ComAgressiveMove(czolg2, 34, 53); Disable(01); end; end;
Cały kod:A teraz najlepsze: nie sprawdzałem, czy na pewno działa. To Twoje zadanie na dziśCode: Select all
export czolg1, czolg2; Starting Begin czolg1 = ComConstruct(); czolg2 = AddComConstruct(); enable(01); end; on VehicleConstructed(ident_pojazdu, ident_fabryki) MARKED 01 do Begin if ident_pojazdu = czolg2 then Begin ComAgressiveMove(czolg1, 34, 53); ComAgressiveMove(czolg2, 34, 53); Disable(01); end; end;
[ Dodano: Sob Sie 16, 2008 11:44 pm ]
Ajć i prawie zapomniałem: w kodzie są też instrukcje enable i disable. Zdarzenie SAILa trzeba bowiem podtrzymywać do życia tak samo jak bloki every, z tego co sobie przypominam, wcześniej już o nich pisałem. (I Radzio jak zwykle wcisnął swoje słuszne trzy grosze )
Author: NNPlaya & RadzioRadzio wrote:To znów je wcisnę Poza tym, że nie podałeś parametrów dla funkcji ComConstruct, to wszystko powinno działać. Nie rozumiem jednak, po co dałeś enable(01);, skoro zdarzenie i tak będzie domyślnie enabled. Zdarzenia nie wymagają podtrzymywania przy życiu. Bez wydawania komend enable/disable pozostają żywe. Można nimi oczywiście manipulować tak, jak every, więc np. w bloku zdarzenia nie musiałeś podawać numeru do zablokowania (disable(01);), bo domyślnie (czyli bez podania parametru) zablokowany zostaje blok, w którym znajduje się disable, czyli właśnie ten, który chciałeś zablokować.
PS: Cieszę się, że ktoś korzysta z tutka o zdarzeniach w SAILu. To naprawdę potężne narzędzie
Topic: http://forum.original-war.net/viewtopic.php?t=1241