
Script Editor Kviz II.
#1 Host_gGeorg_*
Odesláno 21.09.2007 12:12
mejme kus dialogu ktery vypada takto:
[OWNER] Uz mas nazbirano?
-1. Tady mam tich 20 zubu
- - - [OWNER] Dobra, tady je tva odmena. Mega mec +10 a jeste 100 xp navrch.
-2. Pracuju na tom [End Dialog]
Na 1. je do Action Taken pripojen script
gg_quest_zub_4
--------------------
fnDisapear (object oCreature)
{
/// zde je par radek ktere kolem kouzelnika udelaji effekt mlhy a nasleduje effekt banshee.
}
void main ()
{
object oPC=GetPCSpeaker();
object oMec = CreateItemOnObject("gg_i_megamec", oPC);
GiveXPToCreature(oPC, 100);
fnDisapear (OBJECT_SELF);
DestroyObject(OBJECT_SELF, 0.1);
DestroyObject(oMec , 20.0);
DelayCommand(20.0, SendMessageToPC(oPC, "* smich kouzelnika * uzasny mec ktery ti daroval zmizel ");
}
-----------------------------------
1. Co vsechno se vypise hraci za text?
2. Jakych chyb jsem se dopustil?
(predmet "gg_i_megamec" je v palete a je to dlouhy mec +10)
#2
Odesláno 21.09.2007 21:42
1. pokud skript opravdu probehne bez chyby tak by se melo postave vypsat ze dostala megamec, dostala expy, ztratila megamec, hlaska kouzelnika
2. SendMessageToPC není "action"...? nemelo by tam byt spis neco jako ActionSpeakString....?
Dale mi tam chyby neco co odstrani ty zuby ktere da postava carodejovy
#3 Host_gGeorg_*
Odesláno 22.09.2007 23:01
1. Tak jak rikas to je napsane, a ani syntax error tam neni. Ale nestane se to, proto je to kviz zejo. :)tak ja si zkusim tipnout...
1. pokud skript opravdu probehne bez chyby tak by se melo postave vypsat ze dostala megamec, dostala expy, ztratila megamec, hlaska kouzelnika
2. SendMessageToPC není "action"...? nemelo by tam byt spis neco jako ActionSpeakString....?
Dale mi tam chyby neco co odstrani ty zuby ktere da postava carodejovy
2. Neni. Nemelo. Send Message posle text do praveho okna, (jak se tam vypisuji utoky).
3. Ano chybi, gratuluji :) .
#4 Host_gGeorg_*
Odesláno 24.09.2007 12:23
Tip: Predchozi Kviz o Create/Destroy funkcich.
#5
Odesláno 03.10.2007 07:37
Tak pro zacatek jsou tam syntakticke chyby dve - spatna deklarace funkce fnDisapear - chybi navratovy typ (a disappear je se dvema p) a chybejici zavorka u posledniho DelayCommand.... a ani syntax error tam neni.
void fnDisappear(object oCreature) { /// zde je par radek ktere kolem kouzelnika udelaji effekt mlhy a nasleduje effekt banshee. } void main () { object oPC = GetPCSpeaker(); object oMec = CreateItemOnObject("gg_i_megamec", oPC); GiveXPToCreature(oPC, 100); fnDisappear(OBJECT_SELF); DestroyObject(OBJECT_SELF, 0.1); DestroyObject(oMec , 20.0); DelayCommand(20.0, SendMessageToPC(oPC, "*smich kouzelnika* uzasny mec ktery ti daroval zmizel")); }
Jinak pak:
1)
Ziskani mece
Ziskani XP
po 20s ztraceni mece
2) Chybou je to, ze SendMessageToPC je zpozdeno za DestroyObject NPC DelayCommandem, takze v dobe, kdy by to melo vypsat hlasku se smichem je NPC zruseno nebo v takovem stavu ruseni, ze nemuze vypsat hlasku. NWN Lexicon to komentuje slovy:
Invalid objects can't execute stuff inside DelayCommands, meaning that DelayCommand should not be used in OnDeath events, or after a call to DestroyObject(OBJECT_SELF);
Resenim by mohlo byt treba toto:
DestroyObject(OBJECT_SELF, 20.0); DelayCommand(20.0, SendMessageToPC(oPC, "*smich kouzelnika* uzasny mec ktery ti daroval zmizel")); DestroyObject(oMec , 20.0);Sice NPC zmizi az v dobe, kdy mizi mec, ale aspon to vypise tu hlasku.
A pokud se chceme pozastavovat nad tim, ze chybi DestoyObject na zuby vlka, tak tam predevsim chybi kontrola, zda ty zuby vubec ma

#6 Host_gGeorg_*
Odesláno 03.10.2007 21:20
Hmmm, jsi na dobre stope. add 2Tak pro zacatek jsou tam syntakticke chyby dve - spatna deklarace funkce fnDisapear - chybi navratovy typ (a disappear je se dvema p) a chybejici zavorka u posledniho DelayCommand.
void fnDisappear(object oCreature) {
/// zde je par radek ktere kolem kouzelnika udelaji effekt mlhy a nasleduje effekt banshee.
}
pravda navratovy typ void chybi aj zavorka, psal jsem to z hlavy. dve p neberu jako chybu.
Jinak pak:
1)
Ziskani mece
Ziskani XP
po 20s ztraceni mece
2) Chybou je to, ze SendMessageToPC je zpozdeno za DestroyObject NPC DelayCommandem, takze v dobe, kdy by to melo vypsat hlasku se smichem je NPC zruseno nebo v takovem stavu ruseni, ze nemuze vypsat hlasku. NWN Lexicon to komentuje slovy:
Resenim by mohlo byt treba toto:
[code=auto:0]DestroyObject(OBJECT_SELF, 20.0);
DelayCommand(20.0, SendMessageToPC(oPC, "*smich kouzelnika* uzasny mec ktery ti daroval zmizel"));
DestroyObject(oMec , 20.0);
Sice NPC zmizi az v dobe, kdy mizi mec, ale aspon to vypise tu hlasku.
A pokud se chceme pozastavovat nad tim, ze chybi DestoyObject na zuby vlka, tak tam predevsim chybi kontrola, zda ty zuby vubec ma
Tva rada ale meni to jak jsem si predstavoval ze to bude fungovat.Ja bysem rad aby kouzelnik napred zmizel a pak za 20s zmizel ten mec a hrac dostal Message.
Jeste poznamka k tomu tvemu napadu
Je dobre casovani delat postupne zvlast v kombinaci s Destroyem:
DestroyObject(oMec , 20.0);
DelayCommand(20.0, SendMessageToPC(oPC, "*smich kouzelnika* uzasny mec ktery ti daroval zmizel"));
DestroyObject(OBJECT_SELF, 20.1);
Aano to je hlavni kamen urazu, takhle bysem tam mohl stat a jen zbirat xp :D
#7
Odesláno 03.10.2007 21:35
Vychazel jsem z poznamky o poradi provadeni zpozdeni z Lexiconu:Je dobre casovani delat postupne zvlast v kombinaci s Destroyem
Ozkousel jsem si to v praxi, ze skutecne jsou DelayCommand i zpozdeny DestroyObject spousteny v opacnem poradi, nez byly napsany.As of HotU, DelayCommand()'s order, if used with the same delay, has been swapped for performance reasons.
#9 Host_gGeorg_*
#11 Host_gGeorg_*
Odesláno 03.10.2007 21:57
#13 Host_gGeorg_*
Odesláno 04.10.2007 15:41
#14
Odesláno 04.10.2007 15:57
Nu, ale tva predstava nebyla nikde v zadani zminena, ani tam nebylo napsano, ze se mame starat o spravne reseni - pouze najit chyby. Sve reseni jsem hodil jen tak.Hmmm, jsi na dobre stope. add 2
Tva rada ale meni to jak jsem si predstavoval ze to bude fungovat.Ja bysem rad aby kouzelnik napred zmizel a pak za 20s zmizel ten mec a hrac dostal Message.
Pak tedy treba:
void main () { object oPC = GetPCSpeaker(); object oZuby = GetItemPossessedBy(oPC, "tlii_zuby"); int iPocet = GetItemStackSize(oZuby); if(iPocet >= 20) { if(iPocet > 20) { SetItemStackSize(oZuby, iPocet - 20); } else { DestroyObject(oZuby); } object oMec = CreateItemOnObject("tlii_mec", oPC); GiveXPToCreature(oPC, 100); ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_WAIL_O_BANSHEES), GetLocation(OBJECT_SELF)); ActionJumpToLocation(GetLocation(GetObjectByTag("tlii_hidden"))); // kde tlii_hidden je waypoint v nepristupne lokaci DestroyObject(OBJECT_SELF, 20.0); DelayCommand(20.0, SendMessageToPC(oPC, "*smich kouzelnika* uzasny mec ktery ti daroval zmizel")); DestroyObject(oMec , 20.0); } }
Je to sice podivne reseni, ale funguje

Nevim, jak to nejak jinak resit.
#15 Host_gGeorg_*
Odesláno 04.10.2007 16:10
Pozn. 1. Zuby muzes nicit rovnou. Snizovat stack netreba.
Pozn. 2. Puvodne to mel byt priklad na jednu zajimavou techniku. Je vyhodna i na jine veci.
Tip: AssignCommand()
Edit: jo aha, ty pocitas stim ze to bude opakujici se quest! pak se omouvam ty zuby jsou ok.
Příspěvek upravil gGeorg: 04.10.2007 16:17
#16
Odesláno 16.10.2007 15:45
Hlavne si vzpominam na to, jak lidi pokladali bylinky na zem pred Podivneho Ettina, aby jim nesezral cely stackPozn. 1. Zuby muzes nicit rovnou. Snizovat stack netreba.
Edit: jo aha, ty pocitas stim ze to bude opakujici se quest! pak se omouvam ty zuby jsou ok.

Pozn. 2. Puvodne to mel byt priklad na jednu zajimavou techniku. Je vyhodna i na jine veci.
Tip: AssignCommand()
Tak snad naposledy:
void main () { object oPC = GetPCSpeaker(); object oZuby = GetItemPossessedBy(oPC, "tlii_zuby"); int iPocet = GetItemStackSize(oZuby); if(iPocet >= 20) { if(iPocet > 20) { SetItemStackSize(oZuby, iPocet - 20); } else { DestroyObject(oZuby); } object oMec = CreateItemOnObject("tlii_mec", oPC); GiveXPToCreature(oPC, 100); ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_WAIL_O_BANSHEES), GetLocation(OBJECT_SELF)); DestroyObject(OBJECT_SELF); DestroyObject(oMec , 20.0); AssignCommand(oPC, DelayCommand(20.0, SendMessageToPC(OBJECT_SELF, "*smich kouzelnika* uzasny mec ktery ti daroval zmizel"))); } }
1 uživatelů si čte toto téma
0 členů, 1 návětěvníků, 0 anonymních