Stara Cytadela (Efekt zapadającej się podłogi) 4450 17

O temacie

Autor Laren

Zaczęty 11.11.2016 roku

Wyświetleń 4450

Odpowiedzi 17

Laren

Laren

Użytkownicy
posty183
Propsy54
ProfesjaGrafik 3D
  • Użytkownicy
Witam. Jestem w trakcie robienia świątyni i potrzebuję efektu w którym bohater idzie a po chwili zarywa się pod nim podłoga i wpada do kompleksu jaskiń. Pamiętam ,że efekt taki był wykorzystany w G1 Stara Cytadela ,nie mam jak to sprawdzić... czy wiecie jak wykonać taki efekt ,że po wejściu w dany obszar włącza się przełącznik i podłoga się zarywa?  (wiem jak się robi otwieranie bram itp ale przez wciśnięcie przełącznika a w tym przypadku nie mam pojęcia jak to zrobić?)
 

gothic1210
  • Gość
O ile dobrze kojarzę to trzeba zrobić triggertouch i pod niego podpiąć podłogę.
 

Laren

Laren

Użytkownicy
posty183
Propsy54
ProfesjaGrafik 3D
  • Użytkownicy
Aha... Robiłeś kiedyś coś takiego? Znasz może jakiś poradnik o tym?
 

gothic1210
  • Gość
Nie robiłem. Raczej nie ma na ten temat poradników. Przeanalizuj sobie trigger touch w spacerze.
 

Laren

Laren

Użytkownicy
posty183
Propsy54
ProfesjaGrafik 3D
  • Użytkownicy
Właśnie zrobiłem to podobnie jak otwieranie bramy tyle ,że przełącznik to ''triggertouch'' bez grafiki a podłoga jest zCmover (jak w przypadku bramy) gdy chodzę w pobliżu przy przełączniku podłoga nie spada... cóż będę musiał zainstalować G1 i sprawdzić na jakiej zasadzie to działa... dziękuję za odpowiedzi w moim temacie gothic1210 :)
 

gothic1210
  • Gość
Ale w G1 to jest pod przycisk. :)
 

Laren

Laren

Użytkownicy
posty183
Propsy54
ProfesjaGrafik 3D
  • Użytkownicy
Nie pamiętam już... pod przycisk...  jest jeszcze jedna alternatywa... dzięki za informację nie będę musiał marnować czasu na instalowanie.
 

Laren

Laren

Użytkownicy
posty183
Propsy54
ProfesjaGrafik 3D
  • Użytkownicy
Odświeżam temat. Zabrałem się jeszcze raz za zrobienie zapadającej się podłogi.
W tym celu postanowiłem przejrzeć w spacerze zeny światów między innymi z dodatku Noc Kruka i znalazłem w świątyni Adanosa pułapkę, która polega na otwarciu się podłogi pod bohaterem.
Przejrzałem pliki i postanowiłem zrobić identyczną... niestety nie działa ona właściwie wyrzuca mnie z programu zaraz po tym jak wejdę na niewidoczny zCVob, który uruchamia zapadnię.
Po za tym przełącznik, który odpowiada za uruchomienie zapadni nie ma czerwonego obszaru działania jak na screenie a zrobiłem mam nadzieję wszystko jak na obrazku... Wiecie jak wykonać prawidłowo taki przełącznik?



 

TheKetrab

TheKetrab

Użytkownicy
posty334
Propsy217
ProfesjaProducent
  • Użytkownicy
Zrób trigger. Wyznacz jego pole. Ustaw cDyn na TRUE i ReactOnTouch (czy inne - nie pamiętam).
W triggertarget wpisz PULAPKA.

Zrob Mover. Ustaw go na jego pierwotną pozycję. Wyłącz opcję M (żebyś nie przesuwał strzałkami movera) i kliknij w KeyFrame'ach 'nowy klucz'. Ciągle będzie 0. Kliknij M, przesuń na dół (bo się zapada) i znowu M (odznacz przesuwanie). 'Nowy klucz'. I powinieneś móc zmieniać pozycje -> początkową i końcową swojego movera strzałeczkami pod napisem KeyFrames. Ustaw NAME movera jako: PULAPKA.

Dotknięcie początkowego triggera powinno aktywować mover, czyli przesuwać go na dół.
 

Laren

Laren

Użytkownicy
posty183
Propsy54
ProfesjaGrafik 3D
  • Użytkownicy
TheKetrab działa :) Dzięki:) Tylko mam jeden problem nie wiem jak wyznaczyć pole trigger'a? muszę postacią nachodzić na przełącznik szukać go... 
Wiesz jak wyznaczyć jego pole?
 

Paradoxal

Paradoxal

Użytkownicy
posty617
Propsy978
NagrodyV
Profesjabrak
  • Użytkownicy
Wydaje mi się że tak,



W polu Define Boundingbox ustaw wartości jakie cie interesują.
 

TheKetrab

TheKetrab

Użytkownicy
posty334
Propsy217
ProfesjaProducent
  • Użytkownicy
Alternatywa do podanego wyżej rozwiązania jest zaznaczenie triggera, edit the bbox. I obok triggera pojawia ci się dwa szescianiki (bbboxy), które możesz zaznaczyć i przesuwać wyznaczając pole triggera.
 

Laren

Laren

Użytkownicy
posty183
Propsy54
ProfesjaGrafik 3D
  • Użytkownicy
ShadowAssassin  i  TheKetrab  dziękuję za pomoc :) Obie opcje są pomocne:)  Dzięki jeszcze raz:)


Ps. Wszystko fajnie mi wyszło tylko brakuje mi efekt dźwięku... czy wiecie może gdzie w Triggerze ustawić dźwięk podczas gdy on się uruchomi?

Mam jeszcze jeden problem mianowicie jak ustawić by trigger był jednorazowego użytku? To znaczy po włączeniu go pierwszy raz już więcej się nie uruchamia.

 

TheKetrab

TheKetrab

Użytkownicy
posty334
Propsy217
ProfesjaProducent
  • Użytkownicy
Proszę bardzo:
jeśli napisałeś ten skrypt PULAPKA, o ktorym ci powiedziałem, to wystarczy dodać linijkę:
Snd_Play ("TWOJ_DZWIEK");
Jeśli jednak mówimy o np kracie, która się otwiera, to dźwięki dzielą się na trzy różne:
-kiedy zaczyna się przemieszczać,
-kiedy się przemieszcza,
-kiedy kończy się przemieszczać.

Nazwy musimy wprowadzić do MOVERA w podfolder sound (w Spacerze) w taki oto sposób:
sfxOpenStart: GATE_START
sfxOpenEnd: GATE_STOP
sfxMoving: GATE_LOOP
sfxCloseStart: GATE_START
sfxCloseEnd: GATE_STOP

Oczywiście nie musimy używać dźwięku otwierającej się kraty.
Wystarczy w folderze ...\_Work\data\Sound\SFX wpisać np. _START i zobaczymy jakie dźwięki udostępnia nam Gothic :)

Edit: jeśli chodzi o to, by był jednorazowego użytku, to musisz albo zrobić funkcję ConditionFunc, która zwróci TRUE tylko za pierwszym razem, albo po prostu w onStateFunc (czyli mówię tu o funkcji PULAPKA) dopisać zmienną OneTime:

var int aktywowalesPulapkeOneTime;
func void PULAPKA_S1()
{
   if(aktywowalesPulapkeOneTime==FALSE)
   {
      //otworz krate i zrob to co tam masz zrobic
      aktywowalesPulapkeOneTime=TRUE;
   };
};
 

Laren

Laren

Użytkownicy
posty183
Propsy54
ProfesjaGrafik 3D
  • Użytkownicy
TheKetrab dziękuję za odpowiedz:) lecz do końca nie wiem co i jak mianowicie gdzie wpisać
Snd_Play ("TWOJ_DZWIEK"); ?

Jak stworzyć funkcję ConditionFunc? lub gdzie jest onStateFunc?

Tu mam dwa screeny triggera i movera czy mógłbyś zaznaczyć mi co i jak?



 

TheKetrab

TheKetrab

Użytkownicy
posty334
Propsy217
ProfesjaProducent
  • Użytkownicy
Lekkie zmiany:

1. Nazwij mover: MOVER_PULAPKA.
2. Utwórz TriggerScript i nazwij go: PULAPKA.
3. Jeśli w twoim zwykłym triggerze TriggerTarget to PULAPKA, to teraz twój trigger jest połączony z TriggerScriptem.
4. TriggerScript ma na dole opcję onStateFunc. Ustaw: onStateFunc: PULAPKA.
5. Co to znaczy 'onStateFunc: PULAPKA'? To znaczy: wywołaj funkcję PULAPKA_S1 (w skrypcie z dopiskiem _S1, w Spacerze bez tego dopisku). Ale tutaj przyznaję, że strzeliłem byka, bo nie otworzyłem Spacera i dokładnie nie sprawdziłem, tylko pisałem z głowy :P
A więc poprawię się: TriggerScript na dole ma opcję ScriptFunc. Tam dopisz: PULAPKA.
6. Utwórz funkcję. W dowolnym pliku napisz:
var int aktywowalesPulapkeOneTime;
func void PULAPKA_S1()
{
   if(aktywowalesPulapkeOneTime==FALSE) //blokada, żeby działo się to tylko jeden raz
   {
      Wld_SendTrigger ("MOVER_PULAPKA"); //dzięki temu poruszysz moverem
      Snd_Play ("LEVELUP"); //dzięki temu wywołasz dowolny dźwięk z folderu: ...\_Work\data\Sound\SFX lub SPEACH
     //możesz np. jakiś krzyk Zombie, whatever. Jeśli chodzi ci o dźwięk poruszania się twojej pułapki (jak np. otwieranej kraty), to w poprzednim poście napisałem, jak to zrobić).

      //tu możesz dopisać jeszcze jakieś wpisy do dziennika 'ojej, zapadła się podłoga, co ja teraz zrobię?!'

      aktywowalesPulapkeOneTime=TRUE; //dzięki temu ta funkcja wykona się tylko jeden raz.
   };
};

7. O co chodzi z tym onStateFunc i ConditionFunc?
Łatwo jest zblokować jakimś warunkiem TriggerScripta. Wystarczy dopisać w funkcji w skryptach:
if(godzina jest 20-23){ zrób coś tam }; // a jak nie jest to oczywiście nie zrobi.onStateFunc i ConditionFunc używa się w MobInternach. Ławkach, przełącznikach, skrzyniach.
Pokażę na przykładzie. Weźmy stwórzmy skrzynię -> ma ona w swoich opcjach onStateFunc i ConditionFunc.
W dowolnym miejscu w skryptach stwórzmy obie funkcje:
func void SKRZYNIA_S1() //z dopiskiem _S1
{
        AI_Teleport (NASZ_229_Ayan, "TOT");
B_StartOtherRoutine (NASZ_229_Ayan,"Dead");
Wld_InsertNpc (OZYWIENIEC, "NASZ_OZYWIENIEC_40");
Snd_Play ("MFX_GhostVoice");

B_LogEntry (TOPIC_Monastir_bogowie, "Jasna cholera... [...]");
};

func int COND_SKRZYNIA()
{
if (PotworZabity == TRUE)
{
return TRUE;
}
else {
AI_Output (hero, hero,"DIA_NASZ_FunkcjaPrzelecz_55_00"); //Jakaś magiczna aura blokuje dostęp do skrzyni...
};
};

I musimy wkleić odpowiednio nazwy do opcji onStateFunc i ConditionFunc w Spacerze (tę pierwszą nie trzeba dużymi literami, ale condition func trzeba dużymi literami wywołać w Spacerze; ale to tylko taka uwaga z doświadczenia. Zawsze lepiej pisać onStateFunc i ConditionFunc w Spacerze dużymi literami :D ).

Ktoś może powiedzieć, że mogłem dać warunek w funkcji onState, a ja powiem: 'Tak, masz rację. Ale wtedy klęknę do skrzyni i ją otworzę i nic się nie stanie. A przecież nie o to mi chodzi. Jeśli np. chcemy zrobić coś takiego, że nie możesz klęknąć do szkrzyni, bo jej właściciel stoi zbyt blisko to co? To właśnie skorzystasz z opcji ConditionFunc. Bo zanim hero klęknie i otworzy skrzynie, to wykona się funkcja, która powie: 'nie, nie możesz otworzyć tej skrzyni, bo ktoś jest w pobliżu!'.

Mam nadzieję, że nie namieszałem za bardzo... :)
 

Laren

Laren

Użytkownicy
posty183
Propsy54
ProfesjaGrafik 3D
  • Użytkownicy
... Powoli zaczajam... zatrzymałem się na jednym podpunkcie...
''6. Utwórz funkcję. W dowolnym pliku napisz:''
W jaki sposób mogę utworzyć funkcję ?
 

TheKetrab

TheKetrab

Użytkownicy
posty334
Propsy217
ProfesjaProducent
  • Użytkownicy
Umieść go w dowolnym pliku z rozszerzeniem *.d
Np. w dowolnym pliku z dialogami w folderze _Work\data\Scripts\Content\Story\Dialoge.
Wklej tam po prostu kawałek kodu, który napisałem.
 


0 użytkowników i 1 Gość przegląda ten wątek.
0 użytkowników
Do góry