by Lava Del'Vortel
Wersja 1.0



I. Co to jest 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ć:



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:



!StateCheck("AviDV",CD_STATE_NOTVALID)

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



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:



IsValidForPartyDialogue()

Jak np. dialog Minsca oraz Delona:



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:



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





Podziękowania (za pomocą przycisku POMÓGŁ pod postem), opinie i komentarze