SAIL - Przegrana w wypadku ataku/demontażu jednostki strony

Gotowe kody SAIL'a, informacje na temat moddingu, itd.

Moderator: zoNE

Post Reply
User avatar
zoNE
The Great Uniter & Site Administrator
The Great Uniter & Site Administrator
Posts: 2059
Joined: Fri Feb 17, 2006 3:44 pm
Location: Poland
Contact:

SAIL - Przegrana w wypadku ataku/demontażu jednostki strony

Post by zoNE »

Nitek wrote: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. :P
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 //

Code: Select all

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;
Serpent wrote:Bardzo fajne tylko już istnieją eventy na coś takiego.
Zamiast tego every można dać:

Code: Select all

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.
Author: Nitek & Serpent
Topic: http://forum.original-war.net/viewtopic.php?f=42&t=2993
User avatar
zoNE
The Great Uniter & Site Administrator
The Great Uniter & Site Administrator
Posts: 2059
Joined: Fri Feb 17, 2006 3:44 pm
Location: Poland
Contact:

Re: SAIL - Przegrana w wypadku ataku/demontażu jednostki str

Post by zoNE »

Serpent wrote:Znalazłem znacznie prostszy i skuteczniejszy sposób niż te opisane tutaj.

Oto on:

Code: Select all

// gdzieś w kodzie
if ContactTime([strona_gracza, strona_sojusznika]) < 100 then
   YouLost(''); // przegrałeś
Kod zadziała zarówno w przypadku ataku jak i próby demontażu budynku. Nie zadziała jednak w przypadku przejęcia pojazdu/budynku sojusznika.
Author: Serpent
Topic: https://forum.original-war.net/viewtopi ... =42&t=4687
Post Reply