RkBlog

Hardware, programming and astronomy tutorials and reviews.

Warunki i opcje w dialogach

Przykłady warunków i efektów w dialogach

Niniejszy tutorial pokazuje kilka akcji i warunków w dialogach. Jeżeli chcesz zastosować akcję istniejącą w grze, a której tu nie ma to wystarczy że zdekompilujesz plik *.dlg postaci, która go używa :)

Warunki

IF ~
HasItem("nazwa pliku itm") - jeżeli ma przedmiot to dany dialog się rozpocznie. Patrz przykład 1.
Gender(LastTalkedToBy,FEMALE) - jeżeli ostatnio gadał z babą to teraz użyje tego dialogu. Dla Faceta będzie to MALE. Patrz przykład 4.
StateCheck(Myself,STATE_CHARMED) - jeżeli zauroczony to wypowie ten dialog. Jest więcej opcji STATE_*. Patrz przykład 5.


Zdarzenia

IF ~~ THEN DO ~
AddexperienceParty(wartość PD) - da PD drużynie. Patrz przykład 1.
TakePartyItem("nazwa pliku itm") - zabierze dany przedmiot. Jeżeli zamiast Take damy Give to da nam przedmiot. Patrz przykład 1.
GivePartyGold(ilość złota) - da lub zabierze (gdy zamiast Give będzie Take) złoto drużynie. Patrz przykład 1.
StartStore("nazwa pliku sto",LastTalkedToBy())~ EXIT - uruchomi sklep, zakończy dialog. Patrz przykład 2.
EXTERN ~nazwa pliku cre~ nr jego części dialogu - Spowoduje że inna postać (NPC) coś powie (np. Montaron i Xzar). Patrz przykład 3.
DestroyItem("nazwa pliku itp") - niszczy przedmiot w ekwipunku NPC. Przykład 6.
ReputationInc(1) - wzrost lub obniżenie (Dec) reputacji. Przykład 6.
Enemy() - NPC stanie się wrogi. Przykład 7.
EscapeArea() - Spowoduje że NPC opuści obszar. Przykład 7.
ChangeEnemyAlly(Myself,ALLY) - Zmienia "nastawnie" siebie lub kogoś z jednego na drugi . Zamias ALLY można dać NEUTRAL czy HOSTILE. Przykład 8.


Przykłady

Oto plik d. Hulla wykorzystujący różne opcje dialogów:

BEGIN Hull
IF ~NumTimesTalkedTo(0)~ THEN BEGIN 0 // from:
SAY ~Ku chwale Andrzeja Leppera.... Nie jestem przystosowany do przyłączania, więc po przyłączeniu gra zawiesi się niestety :P!~
IF ~~ THEN REPLY ~Chcę PD i złota~ DO ~AddexperienceParty(5150)
GivePartyGold(20)~ EXIT
IF ~~ THEN REPLY ~Chcę być sławny~ DO ~ReputationInc(2)~ EXIT
IF ~~ THEN REPLY ~Chcę giwerę~ DO ~GiveItem("staf03",LastTalkedToBy)~ EXIT
IF ~~ THEN REPLY ~Spadaj z Planszy~ DO ~EscapeArea()~ EXIT
IF ~~ THEN REPLY ~Zaraz ci dokopię~ DO ~Enemy()~ EXIT
IF ~~ THEN REPLY ~Potrzebujemy cię na chwilkę~ DO ~ChangeEnemyAlly(Myself,ALLY)~ EXIT
IF ~~ THEN REPLY ~Przyłącz się do nas~ DO ~SetGlobal("hull","LOCALS",1)
JoinParty()~ EXIT
END

IF ~NumTimesTalkedToGT(0)~ THEN BEGIN ReturnDialogue
SAY ~Ku chwale Andrzeja Leppera!~
IF ~~ THEN REPLY ~Chcę PD i złota~ DO ~AddexperienceParty(5150)
GivePartyGold(20)~ EXIT
IF ~~ THEN REPLY ~Chcę być sławny~ DO ~ReputationInc(2)~ EXIT
IF ~~ THEN REPLY ~Chcę giwerę~ DO ~GiveItem("staf03",LastTalkedToBy)~ EXIT
IF ~~ THEN REPLY ~Spadaj z Planszy~ DO ~EscapeArea()~ EXIT
IF ~~ THEN REPLY ~Zaraz ci dokopię~ DO ~Enemy()~ EXIT
IF ~~ THEN REPLY ~Potrzebujemy cię na chwilkę~ DO ~ChangeEnemyAlly(Myself,ALLY)~ EXIT
IF ~~ THEN REPLY ~Przyłącz się do nas~ DO ~SetGlobal("hull","LOCALS",1)
JoinParty()~ EXIT
END




Przykład 1 - Przyniesienie miecza Hullowi


IF WEIGHT #1 ~ReactionGT(LastTalkedToBy,NEUTRAL_UPPER)
HasItem("SW1H12",LastTalkedToBy)
~ THEN BEGIN 1 // from:
SAY #15983 /* ~Dziđki mańy. Gorion nie wychowań ciđ tak őle, co... Mówiîc szczerze masz szczđôcie, öe dorastańeô w Candlekeep. Czasami wydaje mi siđ, öe ôwiat za tymi murami oszalań. Ta cańa afera z powodu braku öelaza. Amn i Wrota Baldura bđdî w stanie wojny, zanim skoňczy siđ ta pora roku, zapamiđtaj moje sńowa. Ja, w kaödym razie jestem na sńuöbie. No, masz tutaj 20 sztuk zńota za uratowanie mi skóry.~ ~Dziđki mańa. Gorion nie wychowań ciđ tak őle, co... Mówiîc szczerze masz szczđôcie, öe dorastańaô w Candlekeep. Czasami wydaje mi siđ, öe ôwiat za tymi murami oszalań. Ta cańa afera z powodu braku öelaza. Amn i Wrota Baldura bđdî w stanie wojny, zanim skoňczy siđ ta pora roku, zapamiđtaj moje sńowa. Ja, w kaödym razie jestem na sńuöbie. No, masz tutaj 20 sztuk zńota za uratowanie mi skóry.~ */
IF ~~ THEN DO ~AddexperienceParty(50)
TakePartyItem("SW1H12")
GivePartyGold(20)
SetGlobal("HelpHull","GLOBAL",1)
~ JOURNAL #16529 /* ~Straönik Bramy musi byď dzisiaj w ponurym nastroju, poniewaö Hull zapńaciń mi cańe 20 sztuk zńota za swój miecz.~ */ EXIT
END


Przykład 2 - Sklep u Winthropa


IF ~~ THEN BEGIN 6 // from: 0.2
SAY #16880 /* ~Hej, spokojnie, dzieciaku. Widzđ, öe zamurowańo ciđ jak to usńyszańeô, a to tylko stary Winthrop draöni siđ z tobî. Domyôlam siđ, öe ômierď Goriona zrobińa wraöenie na takim dzieciaku. Nastđpnym razem zachowam swoje öarty dla siebie.~ */
IF ~~ THEN DO ~StartStore("Inn2616",LastTalkedToBy())
~ EXIT
END



Przykład 3 - Rozmowa Xzara i Montarona.


IF ~~ THEN BEGIN 5 // from:
SAY #104 /* ~No tak, Montaronie. Gdybym zostań przed chwilî napadniđty, to teö byńbym podejrzliwy. Niech i tak bđdzie, nikogo nie uzdrowiđ.~ */
IF ~~ THEN EXTERN ~MONTAR~ 4
END

IF ~~ THEN BEGIN 6 // from:
SAY #217 /* ~Nie bđdđ nikogo winiń za zńe zrozumienie mych... dobrych intencji. Niech sumienie winnych samo sprawđ rozstrzygnie.~ */
IF ~~ THEN EXTERN ~MONTAR~ 5
END


Przykład 4 - Dialog Basillusa. Zwróć uwagę na wytłuszczone frazy.


IF ~~ THEN BEGIN 7 // from: 4.2 3.2
SAY #2357 /* ~Tak dobrze, jak mogńem tego oczekiwaď. Nie byńo to ńatwe, ale znalazńem wiđkszoôď naszej rodziny. Niektórzy nie mogli mnie rozpoznaď, ale pomogńem im sobie przypomnieď.~ */
IF ~Gender(LastTalkedToBy,MALE)
~ THEN REPLY #97 /* ~Niewaöne. Nie widziańem ciđ od czasu... eee... Twierdzy Zhentil. Dziđki bogom, öeômy siđ wydostali bezpiecznie.~ ~Niewaöne. Nie widziańam ciđ od czasu... eee... Twierdzy Zhentil. Dziđki bogom, öeômy siđ wydostali bezpiecznie.~ */ GOTO 8
IF ~Gender(LastTalkedToBy,FEMALE)
~ THEN REPLY #98 /* ~Niewaöne. Nie widziańem ciđ od czasu... eee... Twierdzy Zhentil. Dziđki bogom, öeômy siđ wydostali bezpiecznie.~ ~Niewaöne. Nie widziańam ciđ od czasu... eee... Twierdzy Zhentil. Dziđki bogom, öeômy siđ wydostali bezpiecznie.~ */ GOTO 9...[dialog leci dalej]..

IF ~~ THEN BEGIN 8 // from: 7.0
SAY #2358 /* ~Tak, choď przez chwilđ bańem siđ, öe tylko mnie udańo siđ przeöyď. Bańem siđ, öe tylko mnie...tylko mnie... Kńamiesz. KčAMIESZ! Nie moöesz byď moim ojcem, gdyö on zginîń, kiedy ja... kiedy ja...
IF ~~ THEN BEGIN 9 // from: 7.1
SAY #2359 /* ~Tak, choď przez chwilđ bańem siđ, öe tylko mnie udańo siđ przeöyď. Bańem siđ, öe tylko mnie...tylko mnie... Kńamiesz. KčAMIESZ! Nie moöesz byď mojî matkî, gdyö on zginîń, kiedy ja... kiedy ja...



Przykład 5 - Dialog Basillusa.


IF WEIGHT #0 ~StateCheck(Myself,STATE_CHARMED)
~ THEN BEGIN 14 // from:
SAY #5797 /* ~Jam jest he, he... Bassilus. Jestem wyznawcî wspaniańego Cyrika. Kiedyô mieszkańem z rodzinî w Twierdzy Zhentil, ale potem........... przyszńy olbrzymy i wszystkich zabińy. Ja... ja uciekńem, a oni... zginđli. Ale teraz powrócili. Ja ich tu ôciîgnîńem. Wam teö pomogđ! Stójcie spokojnie!~ */
IF ~~ THEN DO ~Shout(1)
Enemy()
~ JOURNAL #6551 /* ~Kiedy zauroczyliômy Bassilusa, dowiedzieliômy siđ, öe pochodzi on z Twierdzy Zhentil. Zdaje siđ, öe jego rodzina zostańa wymordowana, gdy zniszczono to miasto. To wydarzenie kosztowańo go utratđ zmysńów.~ */ EXIT
END


Przykład 6 - Szalony Brage.


IF ~~ THEN BEGIN 4 // from: 2.0
SAY #735 /* ~Obawiam siđ, öe nic nie mogđ zrobiď dla tych, których skrzywdzińem. Chyba nigdy nie dowiem siđ, co mnie do tego skńonińo. Jakby coô weszńo do mojej gńowy! To chyba przez te lata spđdzone na walce. Zabierzcie mojî broň i zbrojđ, öebym nie skrzywdziń juö nikogo wiđcej! Moöecie ich uöyď, choď wolańbym, öeby zostańy zniszczone. Wszystko splamińa niewinna krew! Ta zbroja to najlepszy pancerz jaki nosińem, a miecz - dopiero co kupiony. Zabierzcie mnie do Nashkel, dńuöej juö tego nie zniosđ.~ */
IF ~~ THEN DO ~DestroyItem("SW2H01")
GiveItem("SW2H03",LastTalkedToBy)
GiveItem("POTN12",LastTalkedToBy)
AddexperienceParty(1000)
ReputationInc(1)
ClearAllActions()
StartCutSceneMode()
StartCutScene("Bragecut")
~ JOURNAL #5742 /* ~Schwytaliômy Brage'a, podobno zimnego mordercđ. Teraz musimy go tylko odstawiď do koszar lub ôwiîtyni w Nashkel. Jeôli oddamy go öońnierzom, na pewno zostanie stracony, ale nie bardzo wiem, co zamierzajî zrobiď kapńani.~ */ EXIT
END


Przykład 7 - Atakowanie Drizzta.


IF ~~ THEN BEGIN 3 // from: 2.0
SAY #2447 /* ~Gdziekolwiek siđ obejrzđ, wszđdzie wrogowie! Nic wam nie zrobińem, wiđc pewnie sprawia wam to przyjemnoôď, a ja nie lubiđ takich, co zabijajî tylko dla zabawy!~ */
IF ~~ THEN DO ~Enemy()
~ EXIT
END
.........
~ THEN BEGIN 5 // from:
SAY #2449 /* ~Gdybyôcie mi pomogli, wiedziańbym, czy spotkanie z wami byńo szczđôliwe, czy nie. Poniewaö tego nie zrobiliôcie, po prostu siđ oddalđ i zapomnđ o cańej sprawie. Niewielu moöe powiedzieď, öe ich spotkanie z Drizztem Do'Urdenem nie przyniosńo öadnych wraöeň. íegnajcie, wrogowie czy przyjaciele.~ */
IF ~~ THEN DO ~IncrementGlobal("DrizztGnolls","GLOBAL",1)
EscapeArea()



Przykład 8 - Korax.


IF ~~ THEN BEGIN 3 // from: 0.2
SAY #4665 /* ~Moja byď grzeczny chńopiec, moja obiecywaď. Moja pomagaď jak wy potrzebowaď pomoc.~ */
IF ~~ THEN DO ~SetGlobalTimer("KoraxHostile","GLOBAL",600)
ChangeEnemyAlly(Myself,ALLY)
ApplySpell(Myself,CHARM_KORAX)
~ EXIT
END
RkBlog

14 July 2008;

Comment article