Nitek napísal:Jeżeli zaatakujemy lub zajmiemy budynek czy pojazd danej strony, przegramy. Przydatne, gdy nie chcemy np. by w naszym modzie można było rozwalić dla zabawy całą bazę sojusznika.
W tym przykładzie strona, która powinna zostać nienaruszona to 2, czyli żółty kolor (arabowie). Dodatkowo mamy zmienną (w moim przypadku) "atak_ruskow" - jeżeli zmienimy ją na 1, to do woli możemy atakować i zajmować jednostki gracza żółtego. Całość opatrzona komentarzem po //Kód: Vybrať všetko
Export wczesny_atak, atak_ruskow; // tworzymy zmienne Every 0$1 trigger GetLives(FilterAllUnits([f_side,2]))<1000 and atak_ruskow=0 do // Skrypt sprawdza "zdrowie" jednostek (w tym przypadku wszystkie jednostki strony 2) i jeżeli jakaś z nich ma mniej niż 1000 (czyli inaczej 100%) i drugi warunek spełnia wymagania (czyli atak_ruskow wynosi 0) to wykonywany jest poniższy skrypt. Begin wczesny_atak=1; // zamiast dawać kilka razy komendę "YouLost" lepiej jest zrobić to w ten sposób, ponieważ jeżeli się zdecydujemy dodać np. krótki dialog przed przegraną to nie musimy dodawać tego w każdym miejscu oddzielnie, a tylko raz i mieć to z głowy End; On VehicleCaptured(new_identifier, old_identifier, old_side, capturing_unit) do // tutaj mamy wydarzenie, a niżej sprawdzamy niektóre czynniki Begin if old_side=2 and Getside(capturing_unit)=3 then // jeżeli strona pojazdu przed przejęciem to 2, a jednostka przejmująca to 3 (czyli w tym przypadku to my) to skrypt się uruchomi if atak_ruskow=0 then wczesny_atak=1; // jeżeli zmienna wynosi 0 to właściwe działanie skryptu zostanie wykonane Enable; // jeżeli wszystkie warunki nie zostaną spełnione to "Enable" przy następnym przejęciu pozwoli nam ponownie sprawdzić wszystkie warunki i ewentualnie wykonać skrypt End; On BuildingCaptured(captured_building, old_side, capturing_unit) do // tym razem skrypt dotyczy budynków, a nie pojazdów Begin if old_side=2 and Getside(capturing_unit)=3 then if atak_ruskow=0 then wczesny_atak=1; Enable; End; Every 0$1 trigger wczesny_atak=1 do // gdy zmienna "wczesny_atak" zostanie ustawiona na 1 (standardowo wynosi 0) to wyskoczy nam komunikat o przegranej grze; możemy oczywiście dodać np. dialog czy inne akcje, aby urozmaicić grę. Begin YouLost('WczesnyAtak'); End;
Author: Nitek & SerpentSerpent napísal:Bardzo fajne tylko już istnieją eventy na coś takiego.
Zamiast tego every można dać:
Kód: Vybrať všetko
Wczytać funkcję: export you_attack_al, you_cap_veh, you_cap_b, al_betray; Export function IfYouAttack; begin you_attack_al := {jakaś wartość, powyżej 0 np.3} 3; you_cap_veh := {jakaś wartość, powyżej 0} you_cap_b := {jakaś wartość, powyżej 0} al_betray := false; end; Następnie: On Contact(side1,side2) do begin If side1 = twoja strona and side2 = pozycja soja then begin you_attack_al = you_attack_al - 1; If you_attack_al < 1 and al_betray = false then YouLost(''); end; end; // Przejęcie On VehicleCaptured(new_identifier, old_identifier, old_side, cap_unit) do begin If old_side = strona soja and GetSide(cap_unit) = twoja strona then begin you_cap_veh = you_cap_veh - 1; If you_cap_veh < 1 and al_betray = false then YouLost(''); end; end; // Budynki On BuildingCaptured(captured_building, old_side, cap_unit) do begin If old_side = soja strona and GetSide(cap_unit) = twoja strona then begin you_cap_b = you_cap_b - 1; If you_cap_b < 1 and al_betray = false then YouLost(''); end; end;
Wystarczy jeszcze dać jeszcze zmianę al_betray na true gdy sojusznik będzie wrogiem.
Wartości są po to by za pierwszym razem gdy zaatakujemy soja nie było losta lecz za "x" razem.
Topic: http://forum.original-war.net/viewtopic.php?f=42&t=2993