Morvan - początek moddingu

Wszelkie pytania na temat SAIL'a i modowania OW.
User avatar
Serpent
Soldier level 10
Soldier level 10
Estonia
Posts: 4175
Joined: Tue Jul 07, 2009 9:13 pm
Location: Polska - EuroStan ZSRE
Contact:

Re: Morvan - początek moddingu

Post by Serpent »

To co mówi MasterKilller to jest sposób ale bardzo nieefektywny, zamiast przelatywać pętlą po wszystkich małpach wystarczy sprawdzić która z nich jest najbliżej, a następnie sprawdzić odległość do tej małpy.

Poszukaj kodów na to co napisałem, ewentualnie użyj tej gotowej funkcji ;)
https://forum.original-war.net/viewtopi ... =42&t=4517

Co do every, cóż lepiej stworzyć sobie własny licznik i na nim operować.

Code: Select all

Przykład:
Export licznik;
Every 1 do
licznik := 0$00; // albo samo 0

Every 0$01 do // możesz dodać warunek
begin
enable; // zapętla every
licznik := licznik + 0$01; // 
End;

// Tutaj operujesz za pomocą licznika np.
Every 0$01 trigger licznik >= 5$00 do
begin
enable; // zapętla every żeby co 5 minut resetować licznik
licznik := 0$00; // reset licznika
End;
Epickie teksty:
Marek1906: jak zrobic aby sail był zielony?
Kvantovy: Wszystko normalne, wszystko w koło było dziwne
Kvantovy:: To jest fajne, że to nie jest takie głupie
Kvantovy:: remove sos from kanapeczka
Kvantovy:: zdarzają się rzezy które sie filozofom nie śniły
Cenwen: problemem jest gejostwo
"Taki z niego fizyk jak ze mnie baletnica" - Profesor Scholtze o Kvantovym.
JAKBYŁ BYM CZECHEM TO BYM ROZŁOŻYŁ NAMIOT ~Kvanciak
Morvan
Soldier level 2
Soldier level 2
Posts: 32
Joined: Fri Aug 05, 2016 11:04 pm

Re: Morvan - początek moddingu

Post by Morvan »

Z every niestety tak jak myślałem. Swój licznik i co sekundę go sprawdzać. Miałem nadzieję, że będzie coś lepszego wbudowanego, ale nie wadzi. W języku skryptowym trzeba zawsze wiecej pokombinowac :)

Jeszcze dużo funkcji wbudowanych nie znam, a ciężko czasami je wychwycić z całej listy bez dobrego opisu i wiedzieć co dokładnie robi. Zdecydowanie przydałoby się zedytowac SailBase :(

No to teraz muszę w kodzie pozmieniać wszystkie every :D
Morvan
Soldier level 2
Soldier level 2
Posts: 32
Joined: Fri Aug 05, 2016 11:04 pm

Re: Morvan - początek moddingu

Post by Morvan »

Za pomocą funkcji chciałem sprawdzać czy ktoś próbuje oswajać małpy. Zrobiłem to przez on Command(comm) if comm=84 then ...
Działa, jest okay.

Ale też chciałem sprawdzić kto (edit. nie kto, ale czy jedna konkretna osoba) próbuje złapać małpkę. Znalazłem funkcję GetTaskList. Być może jest jeszcze jakiś inny sposób żeby to sprawdzić, ale chciałbym się właśnie skupić na tej funkcji, bo coś nie umiem się w niej połapać.

http://screenshot.sh/oAdKY71vuYcNI

w spisie funkcji Zone znalazłem krótki opis. Przede wszystkim, co to jest: "siiiiib (UDatStr - zadanie...)" UDatStr wystepuje rowniez wyzej jak na zdjeciu w postaci .pas. Czy mamy gdzies dostep do tego pliku? Tam 'powinien' byc spis wszystkich stalych?

Tutaj zaś nie mam pojęcia co to są za symbole, nigdzie ich nie znalazłem : ['F','H','M','U','V','a','h','u','v','~','^','>','+',';','4','{']) OR (GetTaskList(Mercenary1)[1]='B' AND GetTaskList(Mercenary1)[5]=36)

GetTaskList(Mercenary1)[1]

Tutaj natomiast nie rozumiem dlaczego to występuje w postaci dwuwymiarowej, opis wg. mnie wyjasnia, ze zwraca tablice jednowymiarowa, w ktorej znajduja sie wartosci dot. [task, x, y, par1, par2, patrol]
czyli wg mnie. GetTaskList(Mercenary1)[1] - powinno zwrocic mi jakie ma zadanie
(x, y to parametry na mapie - gdzie sie teraz znajduje postac albo gdzie ma zrobic owe zadanie - par1, par2, patrol to nie wiem do czego sie odnosi)
Jeszcze pomyslalem ewentualnie, ze postac GetTaskList(Mercenary1)[1][2] zwraca mi ew. zadanie zaplanowane jako drugie w kolejnosci?

Próbowałem to przetestować niestety słabo mi to wyszło.

W swoim kodzie spróbowałem zrobić coś takiego : if GetTaskList(Doctor)[1][1]=84 then begin 'doctor lapie malpki'
albo
GetTaskList(Doctor)[1]=84 then begin 'doctor lapie malpki'

Oba fragmenty nie dzialaja tak jak bym chcial.

Wracając do opisu funkcji od Zone i próbując przejśc przykladowy kod krok po kroku:

Code: Select all

on Command(comm) marked 601 do // trigger s Kurtem a Mercenary1, aby nedelali nic, co nemaji // zalacza command zawsze kiedy jakakolwiek jednostka dostanie zadanie (marked 601) - nie wiedzialem, ze eventy tez mozna markowac. Enable i disable tutaj rowniez dzialaja? Z tego co czytalem event mozna wpisac w kodzie tylko raz, czyli nie powinno byc drugi raz on Command...??
var i; 
begin {...} 
if IsOK(Mercenary1) then //jezeli zyje Mercenary to idziemy dalej
if GetTaskList(Mercenary1)<>[] then begin // jezeli pobrana lista nie jest pusta to idziemy dalej
for i:=1 to (0+GetTaskList(Mercenary1)) do begin // od 1 do ... co ma oznaczac te zero? Do dlugosci tablicy, czyli ile jest w niej wartosci (z opisu wywnioskowalem, ze ma byc ich 7 - zawsze? wg. [task,x,y,obj,par1,par2,patrol]) 
if (GetTaskList(Mercenary1)[i][1] in ['F','H','M','U','V','a','h','u','v','~','^','>','+',';','4','{']) OR (GetTaskList(Mercenary1)[i][1]='B'  // no i tutaj wlasnie nie mam pojecia co oznaczaj te piekne symbole oraz jak dokladnie dziala ta petla i sprawdzanie
AND GetTaskList(Mercenary1)[i][5]=36) then // no i ta piatka, skad mialaby sie tutaj wziac
else begin RemoveTasks(Mercenary1); // jezeli robi cos czego nie powinien to ma usunac jego zadania
D_MercRefuseBuild; // tego nie sprawdzalem i w sumie nie wiem co to jest, ale malo istotne dla mnie teraz.
end; end; end; end;
User avatar
Serpent
Soldier level 10
Soldier level 10
Estonia
Posts: 4175
Joined: Tue Jul 07, 2009 9:13 pm
Location: Polska - EuroStan ZSRE
Contact:

Re: Morvan - początek moddingu

Post by Serpent »

Code: Select all

Export Function WantTame(sci, unit);
begin
if GetTaskList(sci) > 0 then
   begin
   if GetTaskList(sci)[1][1] = 'T' and GetTaskList(sci)[1][4] = unit then
      result := true
       else
        result := false;
   end
    else
     result := false;
End;
Ta funkcja sprawdza czy dany naukowiec chce oswoić daną małpę.
Epickie teksty:
Marek1906: jak zrobic aby sail był zielony?
Kvantovy: Wszystko normalne, wszystko w koło było dziwne
Kvantovy:: To jest fajne, że to nie jest takie głupie
Kvantovy:: remove sos from kanapeczka
Kvantovy:: zdarzają się rzezy które sie filozofom nie śniły
Cenwen: problemem jest gejostwo
"Taki z niego fizyk jak ze mnie baletnica" - Profesor Scholtze o Kvantovym.
JAKBYŁ BYM CZECHEM TO BYM ROZŁOŻYŁ NAMIOT ~Kvanciak
User avatar
0dd1
ArCamp Developer
Posts: 334
Joined: Tue Jul 01, 2014 3:01 pm

Re: Morvan - początek moddingu

Post by 0dd1 »

Morvan wrote: Tutaj natomiast nie rozumiem dlaczego to występuje w postaci dwuwymiarowej, opis wg. mnie wyjasnia, ze zwraca tablice jednowymiarowa, w ktorej znajduja sie wartosci dot. [task, x, y, par1, par2, patrol]
GetTaskList zwraca listę zadań czyli [ [zadanie1], [zadanie2], ... ]

Nawet jeśli jest tylko jedno to będzie [ [zadanie1] ]

Dlatego jeśli napiszesz GetTaskList(Mercenary1)[1] to zwróci coś takiego:
[literka komendy, x, y, id, 0, 0, 0]

Teraz o ile dobrze pamiętam:
Każda komenda ma przypisaną literkę, przy czym trzeba rozróżnić duże od małych. Nie wiem czy jest jakiś spis, ja zawsze sprawdzałem każdą której potrzebowałem samemu.

x i y to koordynaty celu tego zadania, czyli tutaj małpy

id też odnosi się do celu, czyli id małpy (tu trochę nie jestem pewien)

pozostałe działają tylko w niektórych przypadkach (np pamiętam że jedno z nich rozróżnia podłożenie miny czasowej od zdalnej) w większości przypadków, gdy nie są do niczego potrzebne, to po prostu 0.
Morvan wrote: W swoim kodzie spróbowałem zrobić coś takiego : if GetTaskList(Doctor)[1][1]=84 then begin 'doctor lapie malpki'
albo
GetTaskList(Doctor)[1]=84 then begin 'doctor lapie malpki'
Funkcja GetTaskList(Doctor)[1][1] zwróci literkę zadania (oswajanie to 'T' - jak wyżej). Cyfr do komend używa się przy evencie On Command.

Czyli powinno być if GetTaskList(Doctor)[1][1]='T' ale tutaj sprawdzasz tylko pierwsze zadanie z całej listy. Czyli jeśli przytrzymasz shift i wydasz kilka zadań z oswajaniem na końcu, to nie zadziała. Przynajmniej dopóki oswajanie nie przejdzie na pierwsze miejsce na liście.
Do it!
User avatar
Serpent
Soldier level 10
Soldier level 10
Estonia
Posts: 4175
Joined: Tue Jul 07, 2009 9:13 pm
Location: Polska - EuroStan ZSRE
Contact:

Re: Morvan - początek moddingu

Post by Serpent »

0dd1 wrote: Czyli powinno być if GetTaskList(Doctor)[1][1]='T' ale tutaj sprawdzasz tylko pierwsze zadanie z całej listy. Czyli jeśli przytrzymasz shift i wydasz kilka zadań z oswajaniem na końcu, to nie zadziała. Przynajmniej dopóki oswajanie nie przejdzie na pierwsze miejsce na liście.
Moim zdaniem to właśnie lepiej żeby sprawdzało obecnie wykonywaną czynność a nie planowaną gdyż plany jak wiadomo mogą się zmienić :P
Epickie teksty:
Marek1906: jak zrobic aby sail był zielony?
Kvantovy: Wszystko normalne, wszystko w koło było dziwne
Kvantovy:: To jest fajne, że to nie jest takie głupie
Kvantovy:: remove sos from kanapeczka
Kvantovy:: zdarzają się rzezy które sie filozofom nie śniły
Cenwen: problemem jest gejostwo
"Taki z niego fizyk jak ze mnie baletnica" - Profesor Scholtze o Kvantovym.
JAKBYŁ BYM CZECHEM TO BYM ROZŁOŻYŁ NAMIOT ~Kvanciak
User avatar
0dd1
ArCamp Developer
Posts: 334
Joined: Tue Jul 01, 2014 3:01 pm

Re: Morvan - początek moddingu

Post by 0dd1 »

Ale np. jeśli chcesz uniemożliwić coś graczowi anulując komendę gdy tylko zostaje wydana, to trzeba sprawdzić całą listę zadań, bo można to zabezpieczenie oszukać wydając tą zakazaną komendę jako drugą.

Oczywiście wszystko zależy od tego co i jak dokładnie chcesz zrobić. Chciałem tak ogólnie zwrócić na to uwagę bo można się na tym oszukać.
Do it!
Morvan
Soldier level 2
Soldier level 2
Posts: 32
Joined: Fri Aug 05, 2016 11:04 pm

Re: Morvan - początek moddingu

Post by Morvan »

Super, dzięki za odpowiedzi. Czyli GetTaskList jako task zwraca jakaś literę, listy liter z opisem do czego one się odnoszą niestety nie posiadamy. W sumie patrzę, że to mogą być nawet jakieś symbole tak jak w poradniku tj. > ~ itd. Dziwny pomysł...

A istnieje chociaż lista jakie to mogą być zadania, czy po prostu wszystkie takie same jakie występuje w Command, ale wiadomo pod innym symbolem?
User avatar
Serpent
Soldier level 10
Soldier level 10
Estonia
Posts: 4175
Joined: Tue Jul 07, 2009 9:13 pm
Location: Polska - EuroStan ZSRE
Contact:

Re: Morvan - początek moddingu

Post by Serpent »

Stwórz sobie nową pustą mapę, postaw jakąś jednostkę z identem i w sailu wpisz:

Code: Select all

Every 0$01 do
begin
enable;
display_strings := GetTaskList(jednostka);
End;
Zacznij wykonywać różne czynności i obserwuj wyświetlany wynik.
Epickie teksty:
Marek1906: jak zrobic aby sail był zielony?
Kvantovy: Wszystko normalne, wszystko w koło było dziwne
Kvantovy:: To jest fajne, że to nie jest takie głupie
Kvantovy:: remove sos from kanapeczka
Kvantovy:: zdarzają się rzezy które sie filozofom nie śniły
Cenwen: problemem jest gejostwo
"Taki z niego fizyk jak ze mnie baletnica" - Profesor Scholtze o Kvantovym.
JAKBYŁ BYM CZECHEM TO BYM ROZŁOŻYŁ NAMIOT ~Kvanciak
Morvan
Soldier level 2
Soldier level 2
Posts: 32
Joined: Fri Aug 05, 2016 11:04 pm

Re: Morvan - początek moddingu

Post by Morvan »

Serpent wrote:Stwórz sobie nową pustą mapę, postaw jakąś jednostkę z identem i w sailu wpisz:

Code: Select all

Every 0$01 do
begin
enable;
display_strings := GetTaskList(jednostka);
End;
Zacznij wykonywać różne czynności i obserwuj wyświetlany wynik.
Wiem o co chodzi, okay skoro to jedyna droga :d
Morvan
Soldier level 2
Soldier level 2
Posts: 32
Joined: Fri Aug 05, 2016 11:04 pm

Re: Morvan - początek moddingu

Post by Morvan »

Serpent wrote:To co mówi MasterKilller to jest sposób ale bardzo nieefektywny, zamiast przelatywać pętlą po wszystkich małpach wystarczy sprawdzić która z nich jest najbliżej, a następnie sprawdzić odległość do tej małpy.

Poszukaj kodów na to co napisałem, ewentualnie użyj tej gotowej funkcji ;)
https://forum.original-war.net/viewtopi ... =42&t=4517
Wracając do tego. W poprzednim przykładzie od MasterKiller trzeba było przejrzeć wszystkie małpy. W Twoim przykładzie trzeba sprawdzać wszystkich żołnierzy wrogich, ponieważ niewystarczy sprawdzić tylko najbliższą małpę do pojedynczej jednostki, ponieważ ta druga jednostka może nie widzieć tej samej małpy i atak się nie uaktywni. Zatem muszę i tak 'przelecieć' wszystkich żołnierzy żeby sprawdzić, która małpa jest najbliżej. Wydaje mi się, że jednak funkcja See(side, unit) będzie opcją najlepszą, ponieważ wystarczy przejść wszystkie małpy i sprawdzi czy dany side widzi tę małpę, już ręcznie nie muszę sprawdzać wszystkich żołnierzy.

Brakuje tutaj funkcji See(Side, side) :)
MasterKiller
Soldier level 6
Soldier level 6
Posts: 343
Joined: Tue Aug 09, 2011 5:51 pm

Re: Morvan - początek moddingu

Post by MasterKiller »

Trzeba by policzyć złożoność obliczeniową xD.

Co do tej twojej funkcji, to zawsze możesz ją sobie sam napisać :D
Wszyscy jesteśmy żołnierzami: WYDANE
https://original-war.net/files.php?id=174
Morvan
Soldier level 2
Soldier level 2
Posts: 32
Joined: Fri Aug 05, 2016 11:04 pm

Re: Morvan - początek moddingu

Post by Morvan »

MasterKiller wrote:Trzeba by policzyć złożoność obliczeniową xD.

Co do tej twojej funkcji, to zawsze możesz ją sobie sam napisać :D
Owszem, ale to bedzie funkcja oparta na innych wbudowanych funkcjach - przydalaby sie taka wlasnie wbudowana funkcja.

Jest jakis dokladny opis wszystkich funkcji z Mc... i jak ich uzywac? Z tego co widzialem sa to funkcje zwiazane z AI komputera?
User avatar
Serpent
Soldier level 10
Soldier level 10
Estonia
Posts: 4175
Joined: Tue Jul 07, 2009 9:13 pm
Location: Polska - EuroStan ZSRE
Contact:

Re: Morvan - początek moddingu

Post by Serpent »

Nima i nie będzie. Makra są niedokończone.
Epickie teksty:
Marek1906: jak zrobic aby sail był zielony?
Kvantovy: Wszystko normalne, wszystko w koło było dziwne
Kvantovy:: To jest fajne, że to nie jest takie głupie
Kvantovy:: remove sos from kanapeczka
Kvantovy:: zdarzają się rzezy które sie filozofom nie śniły
Cenwen: problemem jest gejostwo
"Taki z niego fizyk jak ze mnie baletnica" - Profesor Scholtze o Kvantovym.
JAKBYŁ BYM CZECHEM TO BYM ROZŁOŻYŁ NAMIOT ~Kvanciak
MasterKiller
Soldier level 6
Soldier level 6
Posts: 343
Joined: Tue Aug 09, 2011 5:51 pm

Re: Morvan - początek moddingu

Post by MasterKiller »

A jednak ph3nom stworzył chyba najlepsze AI za pomocą makr. Ja sam nie mam za bardzo pojęcia, jak ich używać, nic poza McMove i McRepair nie tykałem :D
Wszyscy jesteśmy żołnierzami: WYDANE
https://original-war.net/files.php?id=174
Post Reply