I to chyba na ździebko głupiej sprawie, bo nie wiem jak zmusić do aktywacji jakiś skrypt bez wyzwalacza, WP etc.
W misji będzie mnóstwo questów. Wyzwalacz dla każdego z nich zlaguje grę każdemu. Chcę, by możliwa akcja włączała się gdy main hero podejdzie do zleceniodawcy. Jak aktywować to inaczej niż wyzwalaczem i WP?
#process
? ("quest01Begin" in stageFlags) and not ("quest01Completed" in stageFlags) and not ("quest01Active" in stageFlags) : [] exec "processQuest01.sqs";
~coś
goto "process"
Flaga to zmienna, która może być 'true' lub 'false'. Nie chodzi o obiekt w edytorze, tylko o zmienną...
'moja_zmienna' = true <- zmienna ma wartość 'prawda'
'moja_zmienna' = false <- zmienna ma wartość 'fałsz'
np: 'moja_zmienna' = alive aP
'moja_zmienna' - > true -> aP żyje
'moja_zmienna' - > false -> aP nie żyje
Nic nie stoi na przeszkodzie mieć wiele takich zmiennych:
'aP_żyje' = alive aP
'coś_się_zdarzyło' = true
'coś_co_się_nie_powinno_zdarzyć' = false
Jeśli masz wiele zmiennych, to zamiast pamiętać jak się która zmienna nazywa, aby testować jakiś warunek, np:
warunek: ((aP distance ktoś) < 5) and (coś_się_zdarzyło) and not (coś_co_się_nie_powinno_zdarzyć)
aktywacja: "1" objStatus "DONE"
Możesz zrobić jedną zmianną, która będzie tablicą takich wartości:
czy quest się rozpoczoł ?
czy quest jest aktywny ?
czy quest już się zakończył ?
Było by głupio, gdyby po misji okazało się że podejdziesz do zleceniodawcy a on na to: 'zrób to' (ponownie).
Może będziesz nawet chciał osiągnąć pewną chronologię zdarzeń (fabuła):
np, tylko jeśli quest_pierwszy_się_zakończył to można_wziąść_następny
Dla każdego questu potrzebujesz takiej flagi:
'quest_się_rozpoczoł'
Kiedy warunki pozwalają (aP jeszcze nie podjoł się questu, aP nie jest w trakcie jego realizacji, aP questu nie zakończył) to:
na gorąco tworzysz nową zmienna:
'quest_się_rozpoczoł' = 'jakaś wartość' (boolean/string/float/array), np:
'quest_się_rozpoczoł' = ["moje parametry dla exec", "godzina", "coś tam", 15645]
to co przypiszesz do 'quest_się_rozpoczoł' nie ma zanczenia, ważne aby dodać tą zmianną do tablicy.
więc dodajesz do tablicy:
moja_tablica_zdarzeń = moja_tablica_zdarzeń + [quest_się_rozpoczoł]
w skrypcie rozpoznasz, że zminna znalazła się w tablicy:
(quest_się_rozpoczoł in moja_tablica_zdarzeń)
i wykonasz jakiś kod:
[quest_się_rozpoczoł] exec "quest_się_rozpoczoł.sqs"
operator 'in' testuje czy "coś" jest w "czymś"
w kodzie który obsluguje quest, kontrolujesz jego przebieg, np:
jakieś warunki potrzebne do jego zakończenia
czekasz na coś
gadasz z kimś przez radio
i cokolwiek chcesz
kiedy warunki potrzebne do zakończenia questu masz spełnione, to usuwasz z tablicy zmienną, która go (szczegółowo) opisuje:
W skrypcie, w warunkach który pozwala na odpalenie skryptu dodatkowo testujesz:
jeśli NIE (quest_się_zakończył in moja_tablica_zdarzeń) to wykonaj kod,
czyli biorąc pod uwagę warunek poprzedni:
not (quest_się_zakończył in moja_tablica_zdarzeń) and (quest_się_rozpoczoł in moja_tablica_zdarzeń) : to wykonaj kod,
exec tworzy wątek, więc ze skryptu do zakończenia questu wychodzić nie musisz.
"True glory consists in doing what deserves to be written, in writing what deserves to be read." - Pliny The Elder
Dobra, zaczaiłem tworzenie zmiennych, ale nadal nie rozumiem jednej rzeczy: jeśli flaga to zmienna, to jak aktywować jakiś skrypt questy czy tablicę zmiennych bez WP/triggera? Skrypt, z tego co wiem, nie może sam siebie uruchomić, tak z zewnątrz. Możliwe, że tutaj to pisałeś, ale umyka mi to
Aha, tylko jeszcze chyba trzeba wziąć pod uwagę fakt, że jest używana zmienna, która odpowiada za kasę. Tutaj masz przykład questu testowego, który zrobiłem by sprawdzić, czy skrypt działa.
Nigdy nie powiedziałem, że skryptu nie musisz odpalić.
Ale zamiast mieć 100 wyzwalaczy (100 wątków i 100x większy lag) i mnóstwo synchronizacji i trudne do ogarnięcia warunki w WP - tworzysz jeden skrypt, który odpalasz RAZ (początek misji). Ten skrypt jest czymś w rodzaju 'rozdzielacza', który działa CIĄGLE. Wykrywa warunki i przekierowywuje dalsze przetwarzanie w konkretne miejsce (taki super-zaawansowany wyzwalacz). Możesz mieć jeden duży skrypt, króry będzie 'rozdzielaczem' i gdzieś tam (goto "tu", goto "tam") będzie kontrolował questy, albo dla każdego questu utwórz nowy (mały) skrypcik, króry skrypt główny we właściwym momencie odpali.
Na początek narysuj sobie diagram swojej fabuły. Jak zadarzenia i jakie postacie, co się z czym łączy, jakie są warunki, itd. Dla każdego questu utwórz kawałek kodu, który rozpozna to o czym wcześniej pisałem (start/koniec questu). Te tittletext to najmniejsze zmartwienie
Gdzieś w skrypcie możesz sprawdzać czy warunki pozwalająca na rozpoczęcie questu są spełnione (substutut WP/wyzwalacza), i dodać odpowiednią flagę. Pętla skryptu to wykryje i pokieruje rozwojem wydarzeń zgodnie z Twoją fabułą.
Sorki, że tłumacze tak abstrakcyjnie. Narazie bawię się kontrolkami, ale w wolnej chwili mogę Ci napisać i wrzucić przykład takiego mechanizmu. Tylko podrzuć pomysł na krótką fabułe (ze dwa nieliniowe questy.
"True glory consists in doing what deserves to be written, in writing what deserves to be read." - Pliny The Elder
Mówisz o playercounter? To jest stan pieniędzy gracza. W tym wypadku jego stan + stan zarobiony na tym queście.
Ja wiem co to oznacza, chodzi mi jedynie o to, ze wywołujesz funkcje hint, i podajesz dodatkowo tą zmienną, ale w tym hincie nigdzie z niej nie korzystasz
Hmm, myślałem o czymś w ten deseń. UWAGA: To ma być tylko pokaz o co mi chodzi, piszę z pamięci i wykorzystam nieużywane wcześniej przeze mnie wartości, będzie kupa błędów
W którymś momencie jeszcze stwierdzisz, że zmienne w jednej tablicy są bardziej skalowalną architekturą ... Używanie warunków co trochę Ci się w końcu znudzi... albo zamęczy.
"True glory consists in doing what deserves to be written, in writing what deserves to be read." - Pliny The Elder