Tworzenie ruchomej bramy, Trigger Mover i switch 46947 15

O temacie

Autor

Zaczęty 20.01.2008 roku

Wyświetleń 46947

Odpowiedzi 15

Kazzmir
  • Gość
Cytat: Aeron link=topic=58.msg27276#msg27276 date=Feb 14 2007, 11:23\'
W tym tutorialu opiszę jak używać opcji: Trigger Mover (wymagana jest znajomość podstawowych funkcji programu)


Do czego służy Trigger Mover?
Przede wszystkim służy do twożenia ruchomych bram. Ma wiele zastosowań. Można go używać także z innymi vobami.

Jak zrobić bramę?
Zaczynamy!

1. Zaznacz opcję pokazaną na rysunku u góry.
2. W dowolnym miejscu zrób insert.



3. Wpisznazwę Mover#msgote author=Aeron link=topic=58.msg27276#msg27276 date=Feb 14 2007, 11:23\']W tym tutorialu opiszę jak używać opcji: Trigger Mover (wymagana jest znajomość podstawowych funkcji programu)


Do czego służy Trigger Mover?
Przede wszystkim służy do twożenia ruchomych bram. Ma wiele zastosowań. Można go używać także z innymi vobami.

Jak zrobić bramę?
Zaczynamy!

1. Zaznacz opcję pokazaną na rysunku u góry.
2. W dowolnym miejscu zrób insert.



3. Wpisznazwę Movera Ważne! aby nie wpisywać polskich znaków, należy pamiętać także o tym, że gdy nazwę wpiszemy małymi literami, spacer zmieni je na duże. Będzie to potrzebne w dalszej części tutorialu.

Przykład:


Obecnie wygląda to tak:


4. W okienku Objects w polu visual Wpisujemy nazwę przedmiotu z którym masz Mover ma współpracować, ja sobie wybrałem kraty.

OC_LOB_GATE_BIG.3DS
5. Wciskamy Apply

I widzimy coś takiego:


6. Ustawiamy kraty w odpowiedniej pozycji, tak aby było łatwo stworzyć klatki animacji.
7. Kraty na razie zostawiamy w spokoju. Teraz zajmijmy się czymś co uruchomi naszego Mover#msgote author=Aeron link=topic=58.msg27276#msg27276 date=Feb 14 2007, 11:23\']W tym tutorialu opiszę jak używać opcji: Trigger Mover (wymagana jest znajomość podstawowych funkcji programu)


Do czego służy Trigger Mover?
Przede wszystkim służy do twożenia ruchomych bram. Ma wiele zastosowań. Można go używać także z innymi vobami.

Jak zrobić bramę?
Zaczynamy!

1. Zaznacz opcję pokazaną na rysunku u góry.
2. W dowolnym miejscu zrób insert.



3. Wpisznazwę Movera. Może to być dźwignia lub kołowrót. W tym celu zrób insert Switch#msgote author=Aeron link=topic=58.msg27276#msg27276 date=Feb 14 2007, 11:23\']W tym tutorialu opiszę jak używać opcji: Trigger Mover (wymagana jest znajomość podstawowych funkcji programu)


Do czego służy Trigger Mover?
Przede wszystkim służy do twożenia ruchomych bram. Ma wiele zastosowań. Można go używać także z innymi vobami.

Jak zrobić bramę?
Zaczynamy!

1. Zaznacz opcję pokazaną na rysunku u góry.
2. W dowolnym miejscu zrób insert.



3. Wpisznazwę Movera:



8. I znowu w polu visual wpisujemy nazwę dźwigni/kołowrotu

dźwignia:
LEVER_1_OC.MDS
kołowrót:
VWHEEL_1_OC.MDS
9. Ja wybrałem dźwignię. Wciskamy Apply

I teraz gdy mamy już wszystkie elementy wizualne, przyszła pora na konfiguracje.

Konfiguracja dźwigni (switch#msgote author=Aeron link=topic=58.msg27276#msg27276 date=Feb 14 2007, 11:23\']W tym tutorialu opiszę jak używać opcji: Trigger Mover (wymagana jest znajomość podstawowych funkcji programu)


Do czego służy Trigger Mover?
Przede wszystkim służy do twożenia ruchomych bram. Ma wiele zastosowań. Można go używać także z innymi vobami.

Jak zrobić bramę?
Zaczynamy!

1. Zaznacz opcję pokazaną na rysunku u góry.
2. W dowolnym miejscu zrób insert.



3. Wpisznazwę Movera)




WAŻNE! W miejscu TriggerTarget wpisujemy nazwę Naszej bramy (Mover#msgote author=Aeron link=topic=58.msg27276#msg27276 date=Feb 14 2007, 11:23\']W tym tutorialu opiszę jak używać opcji: Trigger Mover (wymagana jest znajomość podstawowych funkcji programu)


Do czego służy Trigger Mover?
Przede wszystkim służy do twożenia ruchomych bram. Ma wiele zastosowań. Można go używać także z innymi vobami.

Jak zrobić bramę?
Zaczynamy!

1. Zaznacz opcję pokazaną na rysunku u góry.
2. W dowolnym miejscu zrób insert.



3. Wpisznazwę Movera) (Tylko bez byków ;)  ) W moim przypadku: BRAMA1

Konfiguracja bramy (Mover#msgote author=Aeron link=topic=58.msg27276#msg27276 date=Feb 14 2007, 11:23\']W tym tutorialu opiszę jak używać opcji: Trigger Mover (wymagana jest znajomość podstawowych funkcji programu)


Do czego służy Trigger Mover?
Przede wszystkim służy do twożenia ruchomych bram. Ma wiele zastosowań. Można go używać także z innymi vobami.

Jak zrobić bramę?
Zaczynamy!

1. Zaznacz opcję pokazaną na rysunku u góry.
2. W dowolnym miejscu zrób insert.



3. Wpisznazwę Movera)

(Jest dosyć spora więc dam więcej screenów)




Jeśli czegoś nie pomyliłeś powinno to wyglądać tak:



A teraz najtrudniejsza część całej zabawy: Twożenie klatek animacji Mover#msgote author=Aeron link=topic=58.msg27276#msg27276 date=Feb 14 2007, 11:23\']W tym tutorialu opiszę jak używać opcji: Trigger Mover (wymagana jest znajomość podstawowych funkcji programu)


Do czego służy Trigger Mover?
Przede wszystkim służy do twożenia ruchomych bram. Ma wiele zastosowań. Można go używać także z innymi vobami.

Jak zrobić bramę?
Zaczynamy!

1. Zaznacz opcję pokazaną na rysunku u góry.
2. W dowolnym miejscu zrób insert.



3. Wpisznazwę Movera

10. Naciśnij na bramę i w okienku Objectpages powinieneś zobaczyć coś takiego:



11. Naciśnij przycisk New key
12. Naciśnij "M" i przesuń w dowolnym kierunku bramę, ja przesunąłem ku dołowi, ponieważ chce aby po przesunięciu wajchy dźwigni krata opadła na dół uniemożliwiając wejście do obozu. Po przesunięciu naciśnij "M"
13. Naciśnij ponownie New key
14. Znowu "M" i przesuwamy ku górze, do punktu początkowego. Znowu "M"
15. I w okienku Objects Klikamy na Apply.

Gotowe!

Teraz aby sprawdzić poprawność działania zaznaczamy dźwignie, w okienku Objectpages wybieramy z listy: TRIGGER i Wciskamy Send.

Powinniśmy zobaczyć jak brama zjeżdża w dół. Ponowne kliknięcie Send Spowoduje otwarcie bramy.
Objaśnienia niektórych opcji TriggerMover#msgote author=Aeron link=topic=58.msg27276#msg27276 date=Feb 14 2007, 11:23\']W tym tutorialu opiszę jak używać opcji: Trigger Mover (wymagana jest znajomość podstawowych funkcji programu)


Do czego służy Trigger Mover?
Przede wszystkim służy do twożenia ruchomych bram. Ma wiele zastosowań. Można go używać także z innymi vobami.

Jak zrobić bramę?
Zaczynamy!

1. Zaznacz opcję pokazaną na rysunku u góry.
2. W dowolnym miejscu zrób insert.



3. Wpisznazwę Movera


Move Speed - Szybkość przemieszczania się. Domyślnie ustawione jest 0.3, aby obiekt poruszał się szybciej należy zwiększyć wartość.

posLerp Type - Rodzaj ruchu obiektu. Dostępne wartości to CURVE - Wygładzone, z zaokrągleniami itp. LINEAR - bez wygładzeń, idealne do robienia animacji, spadających kamieni itp.

speedType - Rodzaj rozpoczynania, lub zakończenia animacji. Dostępne wartości to CONST - Bez spowolnień. SLOW_START_END - Powolny start i koniec. SLOW_START - Powolny start. SLOW_END - Powolny koniec. Pozostałe SEG_SLOW_START_END, SEG_SLOW_START, SEG_SLOW_END, Właściwie niczym się nie różnią.

W opcjach w kategorii Sound można ustawić, dźwięk rozpoczynania, zakańczania, oraz w trakcie trwania animacji.

Aktualizacja: 08:54 20.05.2007


Autor zastrzega sobie prawo do kopiowania tego Tutorialu
[/color]
 


pawbuj

pawbuj

Użytkownicy
posty1623
Propsy135
ProfesjaSkrypter
  • Użytkownicy
mała garść dodatkowych informacji odnośnie moverów ( a w tutkach nie było o tym mowy)

1) w gothic 1 movery przestają działać za pomocą przełączników po wczytaniu save;a .

należy je robić przy uzyciu funkcji onstate i odp. doboru skryptów

2) aby zrobić untrigger wystarczy jedna klatka ruchu dla triggera i zaznaczona opcja reactonuntrigger: TRUE

3) w spacerze brama moźe działać właściwie, podczas gry niekoniecznie poprzez kolidowanie z innymi vobami statycznymi

4) warto dodac dodatkowe efekty sfx  (w g1 większość bram jest ich pozbawiona).

5) nie kopiujemy moverów! radzę robić od nowa , często dochodzi do crasshy!


 

chicken

chicken

RaveN Studio
posty1230
Propsy559
ProfesjaNierób
  • RaveN Studio

chicken
RaveN Studio

Tworzenie ruchomej bramy, Trigger Mover i switch
#3 2015-03-31, 12:30(Ostatnia zmiana: 2015-03-31, 15:05)
Rozwiązałem problem z zacinającymi się oCMobSwitcher'ami  w G1.
Potrzebny Ikarus/LeGo.
Init_Swata: ( lub użyć Tick Tocka / hooka )
FF_Apply(FixStuckedSwitchers);
Gdzieś pod spodem:
func int Hlp_Is_oCMobSwitch (var int ptr) {
    if (!ptr) { return 0; };
   
    const int oCMobSwitch_vtbl = 8245988; // Yea, it doesn't exist in Ikarus :/
    var int vtbl; vtbl = MEM_ReadInt (ptr);

    return (vtbl == oCMobSwitch_vtbl);
};
func void FixStuckedSwitchers() {

    var oCNpc her; her = Hlp_GetNpc (hero);

    if (!Hlp_IsValidNpc (hero))
    || (!her.focus_vob) { return; };
   
    if (Hlp_Is_oCMobSwitch (her.focus_vob)) {
   
        var oCMobInter mob; mob = _^ (her.focus_vob);
        if (Hlp_StrCmp (mob.triggerTarget, "")) { return; };
       
        var zCMover mov; mov = _^ (MEM_SearchVobByName (mob.triggerTarget));
           
        if (mob.state == 0)
        && (mov.moverState == 0) {
            mob.state = 1;
            mob.state_target = 1;
        };
    };
};
I tyle, nic nie trzeba więcej robić.

Chciałem na początku z przeszukiwaniem listy oCMobSwitcher'ów, ale to za długo by trwało.

Tutaj wersja dla rutyn:
func void FixStuckedSwitchers(var C_Npc slf) {

    var oCNpc her; her = Hlp_GetNpc (slf);

    if (!Hlp_IsValidNpc (slf))
    || (!her.focus_vob) { return; };
   
    if (Hlp_Is_oCMobSwitch (her.focus_vob)) {
   
        var oCMobInter mob; mob = _^ (her.focus_vob);
        if (Hlp_StrCmp (mob.triggerTarget, "")) { return; };
       
        var zCMover mov; mov = _^ (MEM_SearchVobByName (mob.triggerTarget));
           
        if (mob.state == 0)
        && (mov.moverState == 0) {
            mob.state = 1;
            mob.state_target = 1;
        };
    };
};

pawbuj

pawbuj

Użytkownicy
posty1623
Propsy135
ProfesjaSkrypter
  • Użytkownicy
sprawdzałem przed chwilą, niestety nie działa po save(wersja dla hero).uruchamiałem przez ff_applyonce
 

chicken

chicken

RaveN Studio
posty1230
Propsy559
ProfesjaNierób
  • RaveN Studio
Działa, bo testowałem.
Na czym sprawdzałeś?

pawbuj

pawbuj

Użytkownicy
posty1623
Propsy135
ProfesjaSkrypter
  • Użytkownicy
Działa, bo testowałem.
Na czym sprawdzałeś?
na bramie w SO

daję save , po zamknięciu mob_bs był na s1, po wczytaniu ponownie s0.

http://ifotos.pl/zobacz/gateJPG_wexsrpq.jpg
 

chicken

chicken

RaveN Studio
posty1230
Propsy559
ProfesjaNierób
  • RaveN Studio
No i chuj, że ma.
Nawet nie sprawdziłeś, czy działają, wnioskujesz to po samej teorii... 

pawbuj

pawbuj

Użytkownicy
posty1623
Propsy135
ProfesjaSkrypter
  • Użytkownicy
No i chuj, że ma.
Nawet nie sprawdziłeś, czy działają, wnioskujesz to po samej teorii...
sprawdziłem, nie działa.po to zrobiłem ss, żeby pokazać efekt - zaraz potem złapałem za kołowrót.

tylko bez wulgaryzmów
 

chicken

chicken

RaveN Studio
posty1230
Propsy559
ProfesjaNierób
  • RaveN Studio
Włączyłem gre, zamknąłem bramę SO, zapisałem, wyłączyłem gre, wczytałem zapis, brama SO otworzyła się.
Coś najebałeś.

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Poinformuję, że trzeba włączyć nową grę, zapisać i dopiero wtedy wczytać. Zapewne tak nie robisz.
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.

pawbuj

pawbuj

Użytkownicy
posty1623
Propsy135
ProfesjaSkrypter
  • Użytkownicy
bralem; nowa gra. dodam printa i sprawdze czy funkcja jest inicjowana.chicken jak zainicjowales ten skrypt?
 

chicken

chicken

RaveN Studio
posty1230
Propsy559
ProfesjaNierób
  • RaveN Studio
Rozwiązałem problem z zacinającymi się oCMobSwitcher'ami  w G1.
Potrzebny Ikarus/LeGo.
Init_Swata: ( lub użyć Tick Tocka / hooka )
FF_Apply(FixStuckedSwitchers);
Gdzieś pod spodem:
func int Hlp_Is_oCMobSwitch (var int ptr) {
    if (!ptr) { return 0; };
   
    const int oCMobSwitch_vtbl = 8245988; // Yea, it doesn't exist in Ikarus :/
    var int vtbl; vtbl = MEM_ReadInt (ptr);

    return (vtbl == oCMobSwitch_vtbl);
};
func void FixStuckedSwitchers() {

    var oCNpc her; her = Hlp_GetNpc (hero);

    if (!Hlp_IsValidNpc (hero))
    || (!her.focus_vob) { return; };
   
    if (Hlp_Is_oCMobSwitch (her.focus_vob)) {
   
        var oCMobInter mob; mob = _^ (her.focus_vob);
        if (Hlp_StrCmp (mob.triggerTarget, "")) { return; };
       
        var zCMover mov; mov = _^ (MEM_SearchVobByName (mob.triggerTarget));
           
        if (mob.state == 0)
        && (mov.moverState == 0) {
            mob.state = 1;
            mob.state_target = 1;
        };
    };
};
I tyle, nic nie trzeba więcej robić.

Chciałem na początku z przeszukiwaniem listy oCMobSwitcher'ów, ale to za długo by trwało.

Sawik

Sawik

Moderator działu
Rebel
posty4772
Propsy3197
ProfesjaNierób
  • Moderator działu
  • Rebel
FF_ApplyOnce działa jak sama nazwa wskazuje tylko raz. 
 
Życzę wam seksu analnego po stronie biernej.
Dropbox +500 mb na start
LowPoly
Wykonanie modelu niskopoligonowego to sztuka kompromisu. Nie jest to jedynie uproszczenie modelu wysokopoligonowego, ale głęboka modyfikacja oraz podejmowanie decyzji często zmieniających wygląd pierwotny obiektu, tak by przy najmniejszej ilości trójkątów uzyskać jak najwierniej odwzorowany kształt oryginału. Nie można też zapomnieć o tym iż musi nadal wyglądać przekonywająco i tak balansować by uzyskać efekt optymalny.

Podstawowym założeniem jest, że model nie powinien mieć zbędnych, niewidocznych dla gracza detali włączonych w geometrie. Większość obiektów jakie znajdują się w grze powinna prezentować się najlepiej z odległości około 3-5 metrów. Wszelkie detale, które zanikają, wydają się płaskie lub zlewają się z bryłą modelu należy uznać za zbędne i pozostawić je na normal mapie.

Fakt, iż gracz będzie w stanie podejść bliżej do obiektu i zobaczyć go z mniejszej niż 3m odległości nie powinno stanowić większego problemu, gdyż większą rolę odgrywają wtedy tekstury oraz dodatkowy detal zależny od materiału obiektu. To właśnie kompromis między wydajnością, a szczegółowością otoczenia.

Detal, którego nie widać z 3-5 metrów nie powinnien istnieć w geometrii modelu.
Krawędzie znajdujące się blisko siebie, które zlewają się z większej odległości należy uprościć do wspólnej płaszczyzny

gothic1210
  • Gość
Kto chętny napisać nowy, ładny tut? 
 

pawbuj

pawbuj

Użytkownicy
posty1623
Propsy135
ProfesjaSkrypter
  • Użytkownicy
Tworzymy w spacerze ocTriggerScript , który nazwyamy np.EVT_WHEEL_01_TRIGGERSCRIPT

w opcji script func dodajmy :EVT_WHEEL_01_ONSTATEFUNC

przykładowa metoda naprawy bugu bez Lego  i ikarusa.
METODA BEZ IKARIUSA
NA KOŁOWROCIE DODAJEMY
trigger target :EVT_WHEEL_01_TRIGGERSCRIPT
condition func     :evt_wheel_01_conditionfunc
onstate :evt_wheel_01

 w skryptach
func int evt_wheel_01_conditionfunc()
{
return TRUE;
};

func void evt_wheel_01_s0()
{
Wld_SendUntrigger("EVT_OW_STARTLOCKOUT_MOVER");
GATE_01_STATE = 0;
};

func void evt_wheel_01_s1()
{
if(!GATE_01_STATE)
{
Wld_SendTrigger("EVT_OW_STARTLOCKOUT_MOVER");
GATE_01_STATE = 1;
};
};
*/
 


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