Don Hard - wszystkie problemy dotyczące modowania

Wszelkie pytania na temat SAIL'a i modowania OW.
Post Reply
User avatar
Don Hard
Soldier level 5
Soldier level 5
Nepal
Posts: 242
Joined: Thu May 28, 2015 7:40 pm
Location: Lechia

Don Hard - wszystkie problemy dotyczące modowania

Post by Don Hard »

Witam.
Mam narazie jedynie dwa pytania:
1. Czy ten kod jest poprawny gdzie:
- posiadam 7 zmiennych reprezentujące przedmioty
- zmienną randomuję od 1 do 10

Code: Select all

every 0$1 do
begin
kluczfr=Rand(1,10);

[...]
- jeżeli zmienna wynosi 1 i postać B znajduje się w arei d1, postać wypowiada dialog i zmienna zmienia wartość.

Code: Select all

if kluczfr=1 and IsInArea(B,d1) then
begin
DialogueOn;
Say(B,'D1-Boris-2');
kluczfr=90;
DialogueOff;
end;
Czy muszę też klepać ten kod 70 razy (7 zmiennych i 10 budynków na mapie) czy istnieje jakieś prostsze rozwiązanie?
Robię to w jednym every, raz randomuję i poprostu sprawdzam if-ami. czy zmienna wynosi tyle i czy postać jest w danej arei, wiem że to jest naprawdę prymitywny kod, ale niestety nie mam innego pomysłu..

Drugie pytanie:
Czy w grze można włączyć w DOWOLNYM momencie muzykę która nie jest soundtrackiem(dla przykładu chciałbym odpalić muzyka.wav jeśli postać jest w arei muzyka)?
User avatar
Nitek
Community Veteran
Community Veteran
Posts: 999
Joined: Mon Apr 13, 2009 4:13 pm
Location: Białystok
Contact:

Re: Don Hard - wszystkie problemy dotyczące modowania

Post by Nitek »

Napisz dokładnie co próbujesz osiągnąć, bo nic nie rozumiem z Twojego posta.
Co masz na myśli pisząc "przedmioty"?
Zawsze postać B mówi dialog i musi być w arei d1? Najłatwiej będzie jak wszystko mi napiszesz to będę mógł Ci podrzucić kod i wytłumaczyć jak działa.
User avatar
Don Hard
Soldier level 5
Soldier level 5
Nepal
Posts: 242
Joined: Thu May 28, 2015 7:40 pm
Location: Lechia

Re: Don Hard - wszystkie problemy dotyczące modowania

Post by Don Hard »

Przepraszam, poprostu ostatnio jestem kłębkiem nerwów, zapewne stąd taka nieczytelność.
Chyba musze się przez chwilę odciąć od Discord'a i innych mediów społecznościowych.

Przez przedmioty, mam na myśli pewne rzeczy które przydadzą się w późniejszych misjach.
Dla przykładu w jednej z misji jeśli wzieliśmy na początku klucz, w późniejszej misji moglibyśmy dać go pewnemu mechanikowi, co przyniosłoby nam korzyści.
Łącznie tych "przedmiotów" jest siedem i chce żeby gra losowała w jakich miejscach się one znajdują(żeby mod miał element losowości).
Postać mówi dialog, że znalazła to i to(żeby gracz wiedział co znalazł, każdy przedmiot ma swój dialog), aktywuje się on w arei.
Mam nadzieję że teraz przybliżem całą sprawę.
User avatar
Nitek
Community Veteran
Community Veteran
Posts: 999
Joined: Mon Apr 13, 2009 4:13 pm
Location: Białystok
Contact:

Re: Don Hard - wszystkie problemy dotyczące modowania

Post by Nitek »

Siedem przedmiotów jest rozsianych w 10 budynkach? Dalej to wszystko jest niezrozumiałe? Napisz swój kod dla 3 różnych przypadków żebym mógł to jakoś zrozumieć.
User avatar
Don Hard
Soldier level 5
Soldier level 5
Nepal
Posts: 242
Joined: Thu May 28, 2015 7:40 pm
Location: Lechia

Re: Don Hard - wszystkie problemy dotyczące modowania

Post by Don Hard »

Ewentualnie mogę zrobić po jednym przedmiocie na budynek.
A jako że nie mogłem dać eventu on EnterBuilding w if to spróbowałem z pomocą arei. (wiem, bardzo prymitywnie).
stworzyłem takie coś:

Code: Select all

every 0$1 do
begin
kluczfr=Rand(1,10);
if kluczfr=1 and IsInArea(B,d1) then
  begin
   DialogueOn;
   Say(B,'D1-Boris-2');
   kluczfr=90;
   DialogueOff;
end;
if kluczfr=2 and IsInArea(B,d2) then
  begin
   DialogueOn;
   Say(B,'D1-Boris-2');
   kluczfr=90;
   DialogueOff;
end;
if kluczfr=3 and IsInArea(B,d3) then
  begin
   DialogueOn;
   Say(B,'D1-Boris-2');
   kluczfr=90;
   DialogueOff;
end;

[...] i tak dalej

Wiem, wszystko to zagmatwane. Zastanawiam się czy nie wywalić tej losowości, ale jeszcze chcę przy tym pokombinować.

EDIT: Na końcu zmieniam zmienną do 90, gdyż chce ją zapisać z pomocą SaveVariable, może tu tkwi problem?


EDIT 2: Postanowiłem po dłuższym czasie usunąć z moda ten pomysł. Dlatego ponawiam drugie pytanie z pierwszego posta.
Last edited by Don Hard on Wed Jul 11, 2018 11:14 am, edited 2 times in total.
User avatar
0dd1
ArCamp Developer
Posts: 334
Joined: Tue Jul 01, 2014 3:01 pm

Re: Don Hard - wszystkie problemy dotyczące modowania

Post by 0dd1 »

Na pewno można dodać coś jako soundtrack, i to w dowolnym momencie włączyć. W Data\GameInit\music.txt masz przypisane pliki wav. Jest 5 nacji (dwie dla arabów i piąty dla menu) i 5 klas muzyki w każdej. Przykładowo można przypisać nowy wav do nacji 5 i klasy 1 (standardowo nie używane). Wtedy w sailu dajesz

Code: Select all

music_nat = 5;
music_class = 1;
kiedy postać wejdzie w area. Tylko chyba trzeba to potem znowu samemu zmienić na standardową muzykę, kiedy już wyjdzie.


O ile dobrze zrozumiałem ten pierwszy problem, to można było po prostu ustawić areę jako zmienną.

Code: Select all

AreaZKluczem = [d1, d2, d2, ... d10][Rand(1, 10)];
i dalej tylko raz

Code: Select all

if IsInArea(B, AreaZKluczem)then
Do it!
User avatar
Prażanin
Soldier level 3
Soldier level 3
Poland
Posts: 65
Joined: Sat Dec 09, 2017 9:14 pm
Location: Praga Północ

Re: Don Hard - wszystkie problemy dotyczące modowania

Post by Prażanin »

Don Hard wrote: Tue Jul 10, 2018 3:09 pm Drugie pytanie:
Czy w grze można włączyć w DOWOLNYM momencie muzykę która nie jest soundtrackiem(dla przykładu chciałbym odpalić muzyka.wav jeśli postać jest w arei muzyka)?
Można również w tym celu użyć komendy SayEffect. Odtworzy ona plik dźwiękowy raz, bez powtarzania, i nie jest traktowany jak dialog (innymi słowy skrypt nie czeka do końca odtwarzania dźwięku, nie pokazuje też napisów).
np.
SayEffect('DMuzyka1');

Plik z muzyką musi być w folderze z dźwiękami dialogów danej misji, więc jeżeli np. to misja 01 kampanii rosyjskiej, to ścieżka dostępu będzie taka: \Sound\Dialogs\RU\01\

Koniecznie plik musi nazywać się XX_nazwapliku.wav, gdzie XX to numer misji, a nazwapliku to nazwa twojego pliku z muzyką.
W tym przypadku plik będzie nazywał się 01_Muzyka1.wav

Jak widać, przed 'Muzyka1' nie ma litery D. Wynika to z faktu, iż gra szukając pliku, "zjada" pierwszą literę w skrypcie SAILa. Z polskiego na nasze: jeżeli w SAILu mamy SayEffect('Muzyka1') to gra szuka pliku 01_uzyka1.wav

Dźwięki mogą się nakładać, więc trzeba z tym uważać. Odtwarzania takiego dźwięku nie można zatrzymać, co w przypadku muzyki może być sporą wadą, ale w przypadku cutscenek może być przydatne. Wszystko zależy od tego, w jaki sposób chcesz, aby to wyglądało.

Polecam także użycie PauseMusic=true (wycisza muzykę vanillową w tle).

Sposób wyżej z dodaniem muzyki jako soundtracku jest przydatny jeżeli chcesz, aby twoja muzyka była odpalana wielokrotnie (w tym przypadku to właściwie jedyny). Wadą jest to, że liczba klas jak i nacji dźwięku jest ograniczona, więc odpada opcja "co misję 3 cutscenki, każda z inną muzyką i jeszcze standardowa w tle", chyba że robisz dajmy na to 5-6 misji. Jednak jeżeli planujesz odpalić tą muzykę tylko w tym jednym momencie, albo tą samą w różnych momentach, to będzie to najlepszy sposób.

Aha, i jest limit soundtracków, jakie można dopisać do music.txt. Nie pamiętam dokładnie ile.
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: Don Hard - wszystkie problemy dotyczące modowania

Post by Serpent »

1. Jeżeli kod wykonujący się w tych warunkach jest mniej więcej podobny to można to zautomatyzować.

Code: Select all

Export triggerList;
Every 0$01 do
var i;
begin
triggerList := [ [a1, 10, 'DD-1', 99], [a2, 20, 'DD-2', 30], [a3, 25, 'DD-3', 5], [a4, 35, 'DD-4', 3] ];  // lista wszystkich mozliwych warunkow [area, wartosc_warunku, dialog, nowa_wartosc]


while (true) do  // lub jakis warunek zamiast true
begin
wait(0$01);

for i = triggerList downto 1 do
    begin
    if IsInArea(Bohater, triggerList[i][1]) and warunek = triggerList[i][2] then
       begin
       DialogueOn;
       Say(Bohater, triggerList[i][3]);
       DialogueOff;

       warunek := triggerList[i][4];
       triggerList := Delete(triggerList, i);
       end;
    end;
end;

End;

2. https://wiki.owsupport.com/index.php?title=PlaySoundXY
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
Post Reply