Poprzedni temat «» Następny temat
[TUTORIAL] Dodawanie stanu 'CD_STATE_NOTVALID'
Autor Wiadomość
Lava Del'Vortel 
Avatar Sune
Łasiczy Szperacz


Wiek: 27
Posty: 2998
Podziękowania: 180/58
Wysłany: 2008-10-04, 11:37   [TUTORIAL] Dodawanie stanu 'CD_STATE_NOTVALID'

Tutorial CD_STATE_NOTVALID v.1 by Lava Del'Vortel

I. Co to CD_STATE_NOTVALID?



CD_STATE_NOTVALID to nowy stan jaki możemy wprowadzić do gry. W grze występują różne stany.

Przykładem mogą być:

Kod:

STATE_DEAD (oznacza, że postać jest martwa)
STATE_INVISIBLE (oznacza, że postać jest niewidzialna)
STATE_NORMAL (postać żywa, stan normalny - bez znaczących stanów)


CD_STATE_NOTVALID natomiast oznacza, że postać "nie jest uzasadniona i odpowiednia" do danej np. rozmowy.



II. Skąd nazwa CD_STATE_NOTVALID?



Jak widzimy, użyta jest standardowa nazwa jak przy innych stanach, lecz z prefiksem "CD". Nie ma to związku z żadną płytą, dyskiem czy znaczącym skrótem. Jest to po prostu osobisty prefiks autora pomysłu CD_STATE_NOTVALID czyli CamDawg. Przyjęte jest, że nie zmienia się tego prefiksu.



III. Używanie CD_STATE_NOTVALID.



Używamy tego w połączeniu z triggerem (warunkiem) StateCheck. Przykład:

Kod:

!StateCheck("AviDV",CD_STATE_NOTVALID)


A teraz przykład użycia w skrypcie Xana autorstwa Kulyok:

Kod:

IF
Global("XanIntoxication","GLOBAL",0)
InParty(Myself)
CheckStatGT(Player1,50,INTOXICATION)
OR(11)
AreaCheck("AR0509")
AreaCheck("AR0021")
AreaCheck("AR0406")
AreaCheck("AR0313")
AreaCheck("AR0704")
AreaCheck("AR0709")
AreaCheck("AR0513")
AreaCheck("AR1602")
AreaCheck("AR1105")
AreaCheck("AR2010")
AreaCheck("AR2202")
See(Player1)
!StateCheck(Player1,CD_STATE_NOTVALID)
!StateCheck(Myself,CD_STATE_NOTVALID)
CombatCounter(0)
!See([ENEMY])
THEN
RESPONSE #100
SetGlobal("XanIntoxication","GLOBAL",1)
END


Oznacza to, że postać jest pijana, znajduje się w tawernie, widzi postać główną, jest w drużynie, nie widzi wroga oraz, że (uwaga! Podwójne przeczenie!) nie "nie jest uzasadniona i odpowiednia" do rozmowy. W skrócie: Jest odpowiednia do rozmowy.
Może używać tego skryptu także jako warunku np banteru.



IV. Czemu nie ma tego w oryginalnej grze? Czy występuje tam coś podobnego?



Twórcy po prostu używali innej metody. Jest ona podobna, ale zdarzyło się, że nie działała poprawnie. Podam na tym samym przykładzie co K'aeloree:

Kod:

IsValidForPartyDialogue()


Jak np. dialog Minsca oraz Delona:

Kod:

IsValidForPartyDialogue("Minsc")


Jednak trigger ten działa źle, jeżeli odnosi się do postaci rozpoczynającej dialog. Odnosi się wtedy zawsze jako "False".



V. Ale jak właściwie dodać ten nowy stan do gry?

Aby dodać stan CD_STATE_NOTVALID należy do naszej instalki moda (pliku setup-XXX.tp2 gdzie XXX to nazwa moda) dodać te linijki:

Kod:

// Dodaj stan CD_STATE_NOTVALID
APPEND ~STATE.IDS~ ~0x80101FEF CD_STATE_NOTVALID~
UNLESS ~CD_STATE_NOTVALID~


Pamiętaj, żeby wkleić to na gdzieś na początku pliku, by stan został dodany zanim zostanie skompilowany plik/skrypt gdzie warunek StateCheck z CD_STATE_NOTVALID został użyty.

VI. Podziękowania:

Dziękuję Kulyok i K'aeloree za pomoc w zrozumieniu tego zagadnienia.
Ostatnio zmieniony przez L`f 2014-04-27, 19:09, w całości zmieniany 2 razy  
Podziękuj autorowi tego posta
 
 
 
Więcej szczegółów
Za tę wypowiedź podziękowali:
Kallen
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  
Powered by phpBB modified by Przemo © 2003 phpBB Group