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
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
).
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...