Skočit na obsah


Script Editor Kviz


  • Please log in to reply
33 odpovědí na toto téma

#1 Host_gGeorg_*

Host_gGeorg_*
  • Host

Odesláno 15.08.2007 10:31

Nasledujici kod je v eventu OnPercive straznika, ktery si zavola strazniho psa
.
.
.

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?
  • 0

#2 Brudrafon

Brudrafon

    Starší mistr

  • Hráč
  • PipPipPipPipPipPipPipPip
  • 1979 Příspěvků:
  • Location:Doma

Odesláno 15.08.2007 11:09

v prvnim bude jednicka a v druhym ten object toho psa ?
  • 0

#3 Ter Leeloo II

Ter Leeloo II

    Cechmistr

  • Admin
  • PipPipPipPipPipPipPipPipPip
  • 2528 Příspěvků:
  • Gender:Male

Odesláno 15.08.2007 11:36

A proc? No asi proto, ze SetLocalObject (Int) si v objektu neuklada referenci na hodnotu, ale primo hodnotu :yes:
A stejne jsem si to radsi vyzkousel :dntknw:
  • 0

#4 Mantor

Mantor

    Znalec

  • Hráč
  • PipPipPipPipPipPip
  • 1109 Příspěvků:
  • Location:Bratislava
  • Interests:RPG hry, film, bojove umenia, scifi a fantasy literatura

Odesláno 15.08.2007 11:44

V prvom 1 , ale ten druhy ten druhy vrati invalidny objekt imho
  • 0

#5 Altharian

Altharian

    Mistr

  • WB
  • PipPipPipPipPipPipPip
  • 1494 Příspěvků:
  • Gender:Male

Odesláno 15.08.2007 11:44

nNew==1, protože int je hodnotový typ,
oNew==null, protože objekt je referenční typ
  • 0

#6 Ter Leeloo II

Ter Leeloo II

    Cechmistr

  • Admin
  • PipPipPipPipPipPipPipPipPip
  • 2528 Příspěvků:
  • Gender:Male

Odesláno 15.08.2007 11:55

No, ale tohle mi fungovalo ...

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?
  • 0

#7 Altharian

Altharian

    Mistr

  • WB
  • PipPipPipPipPipPipPip
  • 1494 Příspěvků:
  • Gender:Male

Odesláno 15.08.2007 12:07

No, pravda je, že nwn scripting neznám, a i object zde může být hodnotový typ. Ale to bych se zřejmě dočetl v nějaké dokumentaci.

Já teda vycházel ze zkušeností .Netu.
  • 0

#8 Host_gGeorg_*

Host_gGeorg_*
  • Host

Odesláno 15.08.2007 12:13

Nejblize spravne odpovedi je zatim Mantor a Altharian.

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

  • 0

#9 Brudrafon

Brudrafon

    Starší mistr

  • Hráč
  • PipPipPipPipPipPipPipPip
  • 1979 Příspěvků:
  • Location:Doma

Odesláno 15.08.2007 12:16

Nejblize spravne odpovedi je zatim Altarian.

Zobrazit příspěvek

To jako ze zmenou konstanty se zmeni ta hodnota ve vsech jinych objktech? To by byla pekna prasarnicka :o)

Mozna by stalo za to se podivat jak vlastne funguje DestroyObject :o))
  • 0

#10 Brudrafon

Brudrafon

    Starší mistr

  • Hráč
  • PipPipPipPipPipPipPipPip
  • 1979 Příspěvků:
  • Location:Doma

Odesláno 15.08.2007 12:34

Object destruction occurs after the script that calls it completes.

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 :dntknw:

BTW: pokud tam funguji ukazatele, tak znicit nejaky object a pak se ho nekde dozadovat je moc velka cunarna :o)
  • 0

#11 Altharian

Altharian

    Mistr

  • WB
  • PipPipPipPipPipPipPip
  • 1494 Příspěvků:
  • Gender:Male

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)

Zobrazit příspěvek


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

  • 0

#12 Brudrafon

Brudrafon

    Starší mistr

  • Hráč
  • PipPipPipPipPipPipPipPip
  • 1979 Příspěvků:
  • Location:Doma

Odesláno 15.08.2007 13:04

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.

Zobrazit příspěvek

Beru to ciste z obecneho programatorskeho hlediska.

Pokud neco znicim, tak to musim povazovat za znicene a nemuzu vyuzivat "nedokonalosti" jakehokoliv jazyka.
  • 0

#13 Altharian

Altharian

    Mistr

  • WB
  • PipPipPipPipPipPipPip
  • 1494 Příspěvků:
  • Gender:Male

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.

Zobrazit příspěvek


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říš).
  • 0

#14 Ter Leeloo II

Ter Leeloo II

    Cechmistr

  • Admin
  • PipPipPipPipPipPipPipPipPip
  • 2528 Příspěvků:
  • Gender:Male

Odesláno 15.08.2007 13:14

Nejblize spravne odpovedi je zatim Mantor a Altharian.

Ter, duvod proc se ten 3ti textik objevil i kdyz by nemel bude v jinem Kvizu ^^

Zobrazit příspěvek

Dobre, tak jsem si rikal, ze tim chces naznacit, ze to co je v oNEW ma byt presne receno OBJECT_INVALID

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.

Zobrazit příspěvek


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?
  • 0

#15 Brudrafon

Brudrafon

    Starší mistr

  • Hráč
  • PipPipPipPipPipPipPipPip
  • 1979 Příspěvků:
  • Location:Doma

Odesláno 15.08.2007 13:35

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))
  • 0

#16 Host_gGeorg_*

Host_gGeorg_*
  • Host

Odesláno 15.08.2007 13:37

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))

Zobrazit příspěvek

zadani nebylo uplne presne.
Melo tam byt :Jake budou hodnoty za pul minuty.

Kazdopadne tva odpoved byla spatna tak jako tak :dntknw:
  • 0

#17 Brudrafon

Brudrafon

    Starší mistr

  • Hráč
  • PipPipPipPipPipPipPipPip
  • 1979 Příspěvků:
  • Location:Doma

Odesláno 15.08.2007 13:38

Kazdopadne tva odpoved byla spatna tak jako tak  :dntknw:

Zobrazit příspěvek

O tomhle se s tebou budu hadat. :o)
  • 0

#18 Host_gGeorg_*

Host_gGeorg_*
  • Host

Odesláno 15.08.2007 13:43

Beru to ciste z obecneho programatorskeho hlediska.

Pokud neco znicim, tak to musim povazovat za znicene a nemuzu vyuzivat "nedokonalosti" jakehokoliv jazyka.

Zobrazit příspěvek

Pokud souhlasis s timhle je tva odpoved spatna. :dntknw:
  • 0

#19 Brudrafon

Brudrafon

    Starší mistr

  • Hráč
  • PipPipPipPipPipPipPipPip
  • 1979 Příspěvků:
  • Location:Doma

Odesláno 15.08.2007 13:49

Pokud souhlasis s timhle je tva odpoved spatna.  :dntknw:

Zobrazit příspěvek

Pletes jablka s hruskama.

Takze pro me ztraci smysl dale debatovat.
  • 0

#20 Host_gGeorg_*

Host_gGeorg_*
  • Host

Odesláno 15.08.2007 14:05

Dobre no tak rozlusteni:

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
  • 0

#21 Ter Leeloo II

Ter Leeloo II

    Cechmistr

  • Admin
  • PipPipPipPipPipPipPipPipPip
  • 2528 Příspěvků:
  • Gender:Male

Odesláno 15.08.2007 14:13

Prima ...

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 :dntknw:
  • 0

#22 Host_gGeorg_*

Host_gGeorg_*
  • Host

Odesláno 15.08.2007 14:15

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 :dntknw:

Priste se budu vice zamyslet nad presnejsim zadanim.

Příspěvek upravil gGeorg: 15.08.2007 14:24

  • 0

#23 Brudrafon

Brudrafon

    Starší mistr

  • Hráč
  • PipPipPipPipPipPipPipPip
  • 1979 Příspěvků:
  • Location:Doma

Odesláno 15.08.2007 15:07

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

Zobrazit příspěvek

Odkdy ma stroj a cas vliv na chovani scriptu ? To jsou nejake novinky z rise IT ?
  • 0

#24 Host_gGeorg_*

Host_gGeorg_*
  • Host

Odesláno 15.08.2007 15:34

Odkdy ma stroj a cas vliv na chovani scriptu ? To jsou nejake novinky z rise IT ?

Zobrazit příspěvek

Napis si par takovych scriptu, zkus si je doma a pak je zkus na servru plnem hracu. Budes mozna prekvapen. :dntknw:
  • 0

#25 Brudrafon

Brudrafon

    Starší mistr

  • Hráč
  • PipPipPipPipPipPipPipPip
  • 1979 Příspěvků:
  • Location:Doma

Odesláno 15.08.2007 16:20

Napis si par takovych scriptu, zkus si je doma a pak je zkus na servru plnem hracu. Budes mozna prekvapen.  :dntknw:

Zobrazit příspěvek

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.
  • 0

#26 Host_gGeorg_*

Host_gGeorg_*
  • Host

Odesláno 15.08.2007 16:38

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.

Zobrazit příspěvek

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. :dntknw:
  • 0

#27 Brudrafon

Brudrafon

    Starší mistr

  • Hráč
  • PipPipPipPipPipPipPipPip
  • 1979 Příspěvků:
  • Location:Doma

Odesláno 15.08.2007 16:39

Zkus cokoli co obsahuje Destroy nebo Create

Zobrazit příspěvek

A proc mi to nemuzes poslat abysme meli stejne testovaci vzorky ?
  • 0

#28 Ter Leeloo II

Ter Leeloo II

    Cechmistr

  • Admin
  • PipPipPipPipPipPipPipPipPip
  • 2528 Příspěvků:
  • Gender:Male

Odesláno 15.08.2007 16:48

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  :dntknw:

Zobrazit příspěvek

Predevsim dukazem je script cislo dve, kde neni rusena PC, ale skutecne vytvorena instance creatury.

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.

zadani nebylo uplne presne.
Melo tam byt :Jake budou hodnoty za pul minuty.

Zobrazit příspěvek

Je toto 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.
  • 0

#29 Host_gGeorg_*

Host_gGeorg_*
  • Host

Odesláno 15.08.2007 17:22

Pridej si do fce reportAfterState tenhle kod:

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. :dntknw:
  • 0

#30 Ter Leeloo II

Ter Leeloo II

    Cechmistr

  • Admin
  • PipPipPipPipPipPipPipPipPip
  • 2528 Příspěvků:
  • Gender:Male

Odesláno 15.08.2007 18:20

Ok, beru ... duvod?
Nicmene tam neni ani proklamovany OBJECT_INVALID, jakto?
  • 0




0 uživatelů si čte toto téma

0 členů, 0 návětěvníků, 0 anonymních