
Script Editor Kviz
#1 Host_gGeorg_*
Odesláno 15.08.2007 10:31
.
.
.
int nDogs = 1;
object oGuardDog = CreateObject( OBJECT_TYPE_CREATURE, "gg_strazni_pes", GetLocation(OBJECT_SELF) );
SetLocalInt( OBJECT_SELF, "GUARD_SWARM",nDogs );
SetLocalObject( OBJECT_SELF, "oGUARD_DOG",oGuardDog );
.
.
.
nDogs = 0;
DestroyObject(oGuardDog);
// ---------------------------------
// Jakou hodnotu budou mit nyni promene :
int nNEW = GetLocalInt (OBJECT_SELF, "GUARD_SWARM");
object oNEW = GetLocalObject(OBJECT_SELF, "oGUARD_DOG" );
// a proc?
#2
Odesláno 15.08.2007 11:09
#3
Odesláno 15.08.2007 11:36

A stejne jsem si to radsi vyzkousel

#4
Odesláno 15.08.2007 11:44
#5
Odesláno 15.08.2007 11:44
oNew==null, protože objekt je referenční typ
#6
Odesláno 15.08.2007 11:55
void main() { int nDogs = 1; object oPC = GetLastUsedBy(); SetLocalInt( OBJECT_SELF, "GUARD_SWARM",nDogs ); SetLocalObject( OBJECT_SELF, "oGUARD_DOG",oPC ); nDogs = 0; int nNEW = GetLocalInt (OBJECT_SELF, "GUARD_SWARM"); object oNEW = GetLocalObject(OBJECT_SELF, "oGUARD_DOG" ); FloatingTextStringOnCreature("00 | old: " + IntToString(nDogs) + " | stored: " + IntToString(nNEW), oPC, 1); FloatingTextStringOnCreature("01 | old: " + IntToString(nDogs) + " | stored: " + IntToString(nNEW), oNEW, 1); DestroyObject(oPC); object oDNEW = GetLocalObject(OBJECT_SELF, "oGUARD_DOG" ); FloatingTextStringOnCreature("02 | old: " + IntToString(nDogs) + " | stored: " + IntToString(nNEW), oDNEW, 1); }
... kdyby se ulozila reference, ktera se DestroyObject() zrusi ... tak by mi nevyskocil ten treti textik, ne?
#7
Odesláno 15.08.2007 12:07
Já teda vycházel ze zkušeností .Netu.
#8 Host_gGeorg_*
Odesláno 15.08.2007 12:13
Ter, duvod proc se ten 3ti textik objevil i kdyz by nemel bude v jinem Kvizu ^^
Příspěvek upravil gGeorg: 15.08.2007 12:23
#10
Odesláno 15.08.2007 12:34
Dle tohoto by se tam mel dat object toho psa
Ale jeste tam bude nejak figurovat to vytvareni toho psa
Caution should be used when setting a string on an object that has just been created. Instead of just using SetLocalString(object, string, string), one should use ActionDoCommand(SetLocalString(object, string, string)) to force the command to be added to the created creature's action queue. This ensures the string will be set, even on a freshly created object. Speculation suggests that this problem occurs because the "spawning initialization process" is still finishing on a newly created object, and it is difficult to determine exactly when "spawning initialization process" will complete.
Setting strings on objects just created can fail to work. Use ActionDoCommand(void) to set a string on a newly created object. This bug appears in all of the SetLocal* functions (each has been annotated to reference this function for an the work around to this problem).
Takze podle me oboje to na necem zfailuje

BTW: pokud tam funguji ukazatele, tak znicit nejaky object a pak se ho nekde dozadovat je moc velka cunarna :o)
#11
Odesláno 15.08.2007 12:52
BTW: pokud tam funguji ukazatele, tak znicit nejaky object a pak se ho nekde dozadovat je moc velka cunarna :o)
Proč by to měla být čunárna? Když budeš mít před samotným použítím (nebo hned po setnutí) objektu test na to, jestli objekt něco obsahuje, tak je to v pořádku.
Edit: Což by tam mělo být vždycky po setnutí, ten test.
Příspěvek upravil Altharian: 15.08.2007 13:02
#12
Odesláno 15.08.2007 13:04
Beru to ciste z obecneho programatorskeho hlediska.Proč by to měla být čunárna? Když budeš mít před samotným použítím (nebo hned po setnutí) objektu test na to, jestli objekt něco obsahuje, tak je to v pořádku.
Edit: Což by tam mělo být vždycky po setnutí, ten test.
Pokud neco znicim, tak to musim povazovat za znicene a nemuzu vyuzivat "nedokonalosti" jakehokoliv jazyka.
#13
Odesláno 15.08.2007 13:11
Beru to ciste z obecneho programatorskeho hlediska.
Pokud neco znicim, tak to musim povazovat za znicene a nemuzu vyuzivat "nedokonalosti" jakehokoliv jazyka.
No já to myslel tak, že pokud máš
object oNEW = GetLocalObject(OBJECT_SELF, "oGUARD_DOG" );
tak by měl následovat nějaký test
if (oNEW != null) ...
protože ta samotna funkce GetLocalObject ti nemusí vrátit to co chceš.
Jinak souhlasím, že pokud objekt zničíš, tak bys ho neměl nadále používat (dokud ho znovu nevytvoříš).
#14
Odesláno 15.08.2007 13:14
Dobre, tak jsem si rikal, ze tim chces naznacit, ze to co je v oNEW ma byt presne receno OBJECT_INVALIDNejblize spravne odpovedi je zatim Mantor a Altharian.
Ter, duvod proc se ten 3ti textik objevil i kdyz by nemel bude v jinem Kvizu ^^
Tak jsem zkusil toto ...
void main() { object oPC = GetLastUsedBy(); int nDogs = 1; object oGuardDog = CreateObject(OBJECT_TYPE_CREATURE, "x2_duergar002", GetLocation(OBJECT_SELF)); FloatingTextStringOnCreature("oGuardDog: " + ObjectToString(oGuardDog), oPC, 1); SetLocalInt(OBJECT_SELF, "GUARD_SWARM", nDogs); SetLocalObject(OBJECT_SELF, "oGUARD_DOG", oGuardDog); nDogs = 0; int nNEW = GetLocalInt (OBJECT_SELF, "GUARD_SWARM"); FloatingTextStringOnCreature("00 | old: " + IntToString(nDogs) + " | stored: " + IntToString(nNEW), oPC, 1); DestroyObject(oGuardDog); object oNEW = GetLocalObject(OBJECT_SELF, "oGUARD_DOG"); FloatingTextStringOnCreature("02 | old: " + ((oGuardDog == OBJECT_INVALID) ? "true" : ObjectToString(oGuardDog)) + " | stored: " + ((oNEW == OBJECT_INVALID) ? "true" : ObjectToString(oNEW)), oPC, 1); }
Nicmene vzdy dojde na vyhodnoceni funkci ObjectToString(oGuardDog) a ObjectToString(oNEW) a jejich hodnoty jsou vzdy stejne. Mozna je to tim, co psal Brudra?
Object destruction occurs after the script that calls it completes.
Jinak proc se mi vypsal ten 3. radek v prvnim uvedenem kodu bych leda tipnul (pokud by neplatilo vysse uvedene), ze DestroyObject() nemuze zrusit instanci PC?
#15
Odesláno 15.08.2007 13:35
Autor nerekl v jaky okamzik. Jestli po dobehnuti scriptu, nebo jen na konci vytazene sekce. Takze moje odpoved je spravne :o))
#16 Host_gGeorg_*
Odesláno 15.08.2007 13:37
zadani nebylo uplne presne.A vubec zadani bylo nepresne.
Autor nerekl v jaky okamzik. Jestli po dobehnuti scriptu, nebo jen na konci vytazene sekce. Takze moje odpoved je spravne :o))
Melo tam byt :Jake budou hodnoty za pul minuty.
Kazdopadne tva odpoved byla spatna tak jako tak

#18 Host_gGeorg_*
#20 Host_gGeorg_*
Odesláno 15.08.2007 14:05
prikaz SetLocalObject () uklada pointer, neboli predava odkazem.
prikazy SetLocalNeco-jineho () ukladaji primo hodnotu, neboli predava hodnotou
Presto ze vsechny vypadaji stejne dela kazdy neco jineho. toto byla pointa Kvizu.
Prikazem Destroy jsi si znicil hodnotu promene ulozenou SetLocalObject (), pointer tak bude ukazovat na OBJECT_INVALID
Kazdopadne jak rikas obecne bys mel predpokladat ze kdyz neco znicis je to znicene. A tak bys mel predpokladat ze je znicena.
Pokus Ter mel dve chyby. 1 nejde nicit postavicky hracu, 2. destroy chvilli trva a tak se stihl vypsat jeste speakstring
#21
Odesláno 15.08.2007 14:13
Kazdopadne nechci se tu hadat o nejakem exaktnim vyjadrovani, nicmene za puvodne danych podminek nemuzes rict, ze Brudra nemel pravdu, muj script je dukazem.
Ale jinak jsme aspon o trosku chytrejsi

#22 Host_gGeorg_*
Odesláno 15.08.2007 14:15

Priste se budu vice zamyslet nad presnejsim zadanim.
Příspěvek upravil gGeorg: 15.08.2007 14:24
#24 Host_gGeorg_*
#25
Odesláno 15.08.2007 16:20
Mohla by mi ta jista skupina ktera ma podle me naucenou tuhle vetu poslat nejaky ukazkovy script. Ktery se doma chova nejak a na serveru pod zatezi jinak a pak pripadnou opravu daneho scriptu.Napis si par takovych scriptu, zkus si je doma a pak je zkus na servru plnem hracu. Budes mozna prekvapen.
Diky.
#26 Host_gGeorg_*
Odesláno 15.08.2007 16:38
Zkus cokoli co obsahuje Destroy nebo Create. Kdyztak se podivej do historie verzi kdyz se zkousela babule nebo kdyz se zkousela jeji kopie Quick, treba.Mohla by mi ta jista skupina ktera ma podle me naucenou tuhle vetu poslat nejaky ukazkovy script. Ktery se doma chova nejak a na serveru pod zatezi jinak a pak pripadnou opravu daneho scriptu.
Diky.

#28
Odesláno 15.08.2007 16:48
Predevsim dukazem je script cislo dve, kde neni rusena PC, ale skutecne vytvorena instance creatury.Ono, to ze zrovna na tvem pocitaci se tento script chova tak jak jsi napsal neznamena ze se tak bude chovat i jinde a jindy ... . Pokud bys destroyem nenicil hrace ( ktery je primo napsany ze se neda tudiz ten pokus nedokazuje vubec nic ) ale jiny objekt, tak by se to obcas vypsat stihlo a obcas ne
![]()
Jinak bohuzel u zdroju, kde jsem cerpal nebylo uvedeno, ze nelze rusit instance typu PC.
NWN Toolset rika:
// Destroy oObject (irrevocably).
// This will not work on modules and areas.
NWN Lexicon:
Irrevocably destroys oObject. This will not work on modules or areas, but does work on anything else.
Je toto za pul minuty?zadani nebylo uplne presne.
Melo tam byt :Jake budou hodnoty za pul minuty.
void reportAfterState() { object oNEW = GetLocalObject(OBJECT_SELF, "oGUARD_DOG"); FloatingTextStringOnCreature("02 | oNEW: " + ((oNEW == OBJECT_INVALID) ? "true" : ObjectToString(oNEW)), GetLastUsedBy(), 1); } void main() { object oPC = GetLastUsedBy(); int nDogs = 1; object oGuardDog = CreateObject(OBJECT_TYPE_CREATURE, "x2_duergar002", GetLocation(OBJECT_SELF)); FloatingTextStringOnCreature("oGuardDog: " + ObjectToString(oGuardDog), oPC, 1); SetLocalInt(OBJECT_SELF, "GUARD_SWARM", nDogs); SetLocalObject(OBJECT_SELF, "oGUARD_DOG", oGuardDog); nDogs = 0; int nNEW = GetLocalInt (OBJECT_SELF, "GUARD_SWARM"); FloatingTextStringOnCreature("01 | old: " + IntToString(nDogs) + " | stored: " + IntToString(nNEW), oPC, 1); DestroyObject(oGuardDog); DelayCommand(30.0f, reportAfterState()); }
Ano, je. Zrusila se instance "hlidaciho psa"? Ne, nezrusila. Proc? Protoze se zrusi az po skonceni scriptu ... no.
Taaakze na kvizovou otazku odpovedel dobre Brudra, Mantor a Altharian.
#29 Host_gGeorg_*
Odesláno 15.08.2007 17:22
FloatingTextStringOnCreature( "Sila: " +IntToString( GetAbilityScore( oNEW,ABILITY_STRENGTH,TRUE )), GetLastUsedBy(), 1 ); FloatingTextStringOnCreature( "Obratnost: " +IntToString( GetAbilityScore( oNEW,ABILITY_DEXTERITY,TRUE )), GetLastUsedBy(), 1 ); FloatingTextStringOnCreature( "HP: " +IntToString( GetCurrentHitPoints(oNEW)), GetLastUsedBy(), 1 );Nevim co tam je ulozene, ale ta potvora to rozhodne neni.

#30
Odesláno 15.08.2007 18:20
Nicmene tam neni ani proklamovany OBJECT_INVALID, jakto?
1 uživatelů si čte toto téma
0 členů, 1 návětěvníků, 0 anonymních