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





