Artifacts/pl
From Original War Support Wiki
Tutorial By: Serpent
Source: OWEditor Identify, Sand of Siberia Mod
Contents | 
Typy Artefaktów
Każdy artefakt różni się wielkością. Artefakt 1 może być przenoszony przez inżyniera.
Programowanie Artefaktów
Wyszukiwanie artefaktów na mapie
FindArtifact(art_num); // art_num oznacza number artefaktu (1 - 5)
Przykład
coords := FindArtifact(1); x := coords[1]; y := coords[2];
SetArtifactRes
SetArtifactRes(side, boolean);
- side - oznacza stronę do której odnosi się funkcja.
 - boolean - prawda lub fałsz.
 
Umożliwia włączenie/wyłączenie badania technologii artefaktu (tech_artifact).
SetArtifactUse
SetArtifactUse(side, art_icon, art_behav, building);
- side - oznacza stronę do której odnosi się funkcja.
 - art_icon - określa wygląd (i pozycję) guzika, przyjmuje jeden z następujących stałych: 
art_exp_left art_exp_mid art_exp_right art_use_atom art_use_cube art_use_dead art_use_exclamation art_use_eye art_use_hand art_use_human art_use_power art_use_sibdestruct art_use_sibexplosion art_use_tau art_use_teleport
Wygląd każdego guzika można sprawdzić w Interface/Nacja/1024/GameScreen/buttons.tga.
 - art_behav - określa zachowanie guzika:
- art_no - kasuje guzik.
 - art_gray - blokuje guzik (guzik staje się szary).
 - art_instant - zwykły guzik (jak w przypadku technologii).
 - art_place - po kliknięciu pojawia się specjalny kursor którym zaznaczamy dane miejsce.
 - art_unit - po kliknięciu pojawia się specjalny kursor którym zaznaczamy daną jednostkę.
 
 - building - identyfikator budynku.
 
On ArtifactUsed
Wywołuje się gdy funkcja SetArtifactUse została wykonana.
On ArtifactUsed(side, param1, param2, param3) do
- side - zwraca numer strony która użyła artefaktu.
 - param1 - zwraca typ guzika który został kliknięty (na przykład: art_use_eye).
 - param2 - bazuje na zachowaniu guzika. Dla art_instant zwraca 0. Dla art_unit zwraca identyfikator zaznaczonej jednostki. Dla art_place zwraca koordynat x zaznaczonego miejsca.
 - param3 - bazuje na zachowaniu guzika. Dla art_instant i art_unit zwraca 0. Dla art_place zwraca koordynat y zaznaczonego miejsca.
 
On ArtifactResearchComplete
Wywołuje się gdy technologia artefaktu (tech_artifact) została opracowana.
On ArtifactResearchComplete(building) do
- building - zwraca identyfikator laboratorium.
 
On ArtifactLoaded
Wywołuje się gdy artefakt został załadowany na ciężarówkę.
On ArtifactLoaded(unit, artifact_num) do
- unit - zwraca identyfikator ciężarówki.
 - artifact_num - zwraca numer artefaktu.
 
On ArtifactUnloaded
Wywołuje się gdy artefakt został wyładowany z ciężarówki.
On ArtifactUnloaded(unit, artifact_num) do
- unit - zwraca identyfikator ciężarówki.
 - artifact_num - zwraca numer artefaktu.
 
Przykładowy Kod
On ArtifactResearchComplete(lab) do
begin
if GetSide(lab) = your_side then
   player_res_art := true; // odblokowuje guzik artefaktu
End;
Every 0$01 trigger FilterAllUnits([[f_side, your_side], [f_or, [f_btype, b_lab_full], [f_btype, b_lab_siberium]]]) and player_res_art do
var x, y, lab, coords;
begin
enable;
coords := FindArtifact(1); // koordynaty, obecne położenie artefaktu
x := coords[1];
y := coords[2];
lab := NearestUnitToXY(FilterAllUnits([[f_side, your_side], [f_or, [f_btype, b_lab_full], [f_btype, b_lab_siberium]]]), x, y); // lab id
if player_artifact_ready = false then // jeżeli artefakt nie jest gotowy
   if GetDistUnitXY(lab, x, y) < 6 then // jeżeli dystans artefaktu od laboratorium jest mniejsze od 6
      begin
      if BuildingStatus(lab) = bs_idle then // jeżeli laboratorium nie pracuje
         SetArtifactUse(your_side, art_exp_left, art_instant, lab) // odblokuj guzik
          else
           SetArtifactUse(your_side, art_exp_left, art_gray, lab); // zablokuj guzik
      end
       else
        SetArtifactUse(your_side, art_exp_left, art_gray, lab); // zablokuj guzik
if player_artifact_ready then // if artifact ready
   if GetDistUnitXY(lab, x, y) < 6 then // jeżeli dystans artefaktu od laboratorium jest mniejsze od 6
      begin
      if BuildingStatus(lab) = bs_idle then // if lab not working
         SetArtifactUse(your_side, art_icon, art_unit, lab) // odblokuj guzik
          else
           SetArtifactUse(your_side, art_icon, art_gray, lab); // zablokuj guzik
      end
       else
        SetArtifactUse(your_side, art_icon, art_gray, lab); // zablokuj guzik
End;
On ArtifactUsed(s, icon, cr1, cr2) do
var x, y, i, lab, side;
begin
x := FindArtifact(1)[1];
y := FindArtifact(1)[2];
lab := NearestUnitToXY(FilterAllUnits([[f_side, your_side], [f_or, [f_btype, b_lab_full], [f_btype, b_lab_siberium]]]), x, y);
if icon = art_exp_left then // jeżeli gracz wcisnął guzik art_exp_left 
   begin
   SetSpecResearch(lab, time_res_art, true); // odpal specjalne badania w laboratorium
   SetArtifactUse(your_side, art_exp_left, art_no, lab); // ukryj guzik
   end;
if icon = art_icon then // jeżeli gracz wcisnął guzik art_icon
   begin
   if cr1 in FilterAllUnits([f_type, unit_building]) then // jeżeli zaznaczona jednostka to budynek
   begin
   side := GetSide(cr1);
   if FilterAllUnits([[f_side, side], [f_btype, b_siberite_power]]) > 0 then
      begin
      for i in FilterAllUnits([[f_side, side], [f_or, [f_btype, b_oil_power], [f_btype, b_solar_power], [f_btype, b_siberite_power]]]) do
          SetLives(i, 1); // niszczy wszystkie elektrownie
      player_res_art := false; // blokuje artefakt
      SetArtifactUse(your_side, art_icon, art_gray, lab); // blokuje guzik
      Wait(time_to_reuse); // odlicza odpowiedni czas
      player_res_art := true; // odblokowuje artefakt
      end;
   end;
   end;
End;
On SpecResearchComplete(lab) do // jeżeli specjalne badania zostały zakończone
begin
if GetSide(lab) = your_side then 
   begin
   SetArtifactUse(your_side, art_exp_left, art_no, lab); // ukryj guzik
   player_artifact_ready := true; // artefakt jest gotowy
   Hint('ArtVulcano'); // wyświetl podpowiedź
   end;
End;
On SpecResearchCancel(lab, progress) do // jeżeli ktoś przerwał badania w trakcie
begin
SetArtifactUse(your_side, art_exp_left, art_instant, lab);  // odblokuj guzik
end;
// Code from Sand of Siberia Mod by Serpent



  

