Please login or register.

Login with username, password and session length
Advanced search  

News:

For WME related articles and tutorials visit WME Resource Center.

Author Topic: Prosim o rady  (Read 5388 times)

0 Members and 1 Guest are viewing this topic.

Alice

  • Lurker
  • *
  • Karma: 0
  • Offline Offline
  • Posts: 3
    • View Profile
Prosim o rady
« on: June 27, 2005, 11:55:57 AM »

Mam tu nekolik problemu:
1) S definovanim stavu scen, nejak jsem se do toho zamotala. Kde se presne definuji stavy scen a jak? Z manualu jsem to nepochopila.
2) Jak mam vkladat nove postavy do sceny, aby byly interaktivni? Mam je jako entity, ale nevim, jak nastavit, aby se hlavni postava nezobrazovala pod nimi.
3) Jde nejak zamezit dalsimu pohybu hlavni postavy (napriklad narazi na nepritele a ten ho nechce pustit dal?)
Pripadne jeste take jak udelat, aby postava nemohla jit do urcitych dveri, pokud nema v inventari predmet A (ktery vznikne kombinaci predmetu B a C) a pokud ma jen B nebo C, aby rikala ruzne hlasky (vztahujici se jen k onomu predmetu).

Predem dekuji. Alice
Logged

kracho

  • Lurker
  • *
  • Karma: 0
  • Offline Offline
  • Posts: 22
    • View Profile
Re: Prosim o rady
« Reply #1 on: June 27, 2005, 02:29:20 PM »

Nevim co presne myslis se stavem scen, ale skus se podivat do scriptu ktery mas u kazdej sceny: scene_init.script, mas tam radek kde je napsane: // default values  ....bla bla bla a pak //add scene states here,    tak by to malo byt tam.

Pokial chces aby bola entita alebo actor interactivni musis to napsat primo bud  v "nejaky_nazov.entity" alebo "nejaky_nazov.actor", kde zadas hodnotu INTERACTIVE = TRUE

ad3, pokud chces aby ho nepustil treba do nejakych dveri, staci si udelat script dvere.script, kde napises neco jako:

on "LeftClick"
{
  if(splnena_nejaka_podminka) ///treba musi podplatit muza co ho nechce pustit, nebo zabit :-)
  {
    Game.ChangeScene("nejakaScena.scene");
  }
  else
  {
    najakyMuz.Talk("Pres tyhle dvere se nedostanete pane!");
  }
}


Podobne to udelas s vecma v inventari.
Dufam ze to bude fungovat.
Logged

Mnemonic

  • WME developer
  • Administrator
  • Addicted to WME forum
  • *
  • Karma: 41
  • Offline Offline
  • Gender: Male
  • Posts: 5683
    • View Profile
    • Dead:Code Site
Re: Prosim o rady
« Reply #2 on: June 27, 2005, 03:18:24 PM »

1) Taky asi uplne nechapu, co mas na mysli stavem scen.

2) Co se entit tyce, je potreba, aby jejich sprite mel vychozi bod tam, kde se jakoby dotykaji zeme, cili u lidi v miste chodidel. Vychozi bod se nastavi ve SpriteEditu (hotspot). Pak se budou spravne prekryvat s hlavni postavou.

3) Jak uz psal Kracho, pri kliknuti treba na dvere by se testovala pritomnost predmetu v inventari, jako:

Code: [Select]
on "LeftClick"
{
  if(!Game.IsItemTaken("nejaky_predmet")) actor.Talk("Tam se nedostanu, potrebuji XXX.");
  else Game.ChangeScene("dalsi_scena.scene");
}
Logged
Yes, I do have a twitter account
Please don't send me technical questions in private messages, use the forum. ::wave

Alice

  • Lurker
  • *
  • Karma: 0
  • Offline Offline
  • Posts: 3
    • View Profile
Re: Prosim o rady
« Reply #3 on: June 28, 2005, 07:54:55 AM »

U tech stavu scen mi jde o to, aby se scena trochu zmenila, kdyz do ni postava znova prijde. Napriklad neco zmizi nebo se objevi, nebo je ji neco dovoleno, objevi se nova nabidka rozhovoru apod. - a to jeste s nejakou podminkou. Jak mam presne napsat ten kod? Porad mi to haze chyby.

Snazim se vsecko delat presne podle dema, co tam je, vesmes to, co mi radite, mam nastaveno, i hotspot i interactive=true, ale porad to nejde. Musi se tato entita definovat i v samotne scene? (pak by to bylo jasne, dala bych ji nize nez floor, ale v demu ten OldGuy ve scene definovany neni.)
Logged

Mnemonic

  • WME developer
  • Administrator
  • Addicted to WME forum
  • *
  • Karma: 41
  • Offline Offline
  • Gender: Male
  • Posts: 5683
    • View Profile
    • Dead:Code Site
Re: Prosim o rady
« Reply #4 on: June 28, 2005, 09:43:58 AM »

Quote
U tech stavu scen mi jde o to, aby se scena trochu zmenila, kdyz do ni postava znova prijde. Napriklad neco zmizi nebo se objevi, nebo je ji neco dovoleno, objevi se nova nabidka rozhovoru apod. - a to jeste s nejakou podminkou. Jak mam presne napsat ten kod? Porad mi to haze chyby.
Vsechno se da velice jednoduse vyresit pomoci globalnich promennych a podminek.
Globalni promennou zadefinujes treba nekde na zacatku skriptu, jako

global JmenoPromenne;

Tohle musis napsat vsude, kde tu promennou budes pouzivat. Promenna pak drzi nejakou hodnotu po celou dobu, kdy hra bezi.
Kdyz nastane nejaka akce, ktera ma ovlivnovat stav sceny, tak promenne nastavis nejakou hodnotu (vetsinou staci logicka hodnota, cili true nebo false).

JmenoPromenne = true;

Tohle udelas napriklad kdyz hrac promluvi s nejakou postavou atd. ( HracMluvilSPepou = true; )

No a pak uz staci jen pozmenit scenu na zaklade techto stavovych promennych. Kazda scena ma prirazen skript s nazvem scene_init.script, ktery se spusti ve chvili, kdy se scena nahrava. To je ta vhodna chvile. Cili rekneme, ze chceme dosahnout toho, aby kdyz je ta nase promenna nastavena na true, tak aby se objevila ve scene nejaka entita, treba stul. Stul je normalne soucast sceny, pridana ve SceneEditu, ale budeme ho schovavat/rozsvecet v zavislosti na promenne.
Ve scene_init.script nejake sceny by pak stalo:

var Stul = Scene.GetNode("stul"); // rekneme si scene o objekt "stul"
if(JmenoPromenne==true) Stul.Active = true;
else Stul.Active = false;

Cili "pokud JmenoPromenne se rovna true, udelej stul aktivnim, jinak ho udelej neaktivnim".
A tot vse, s timhle jednoduchym mechanismem se vystaci tak v 80% pripadu :)


Quote
Snazim se vsecko delat presne podle dema, co tam je, vesmes to, co mi radite, mam nastaveno, i hotspot i interactive=true, ale porad to nejde. Musi se tato entita definovat i v samotne scene? (pak by to bylo jasne, dala bych ji nize nez floor, ale v demu ten OldGuy ve scene definovany neni.)
Entita muze byt budto primo ve scene, nebo se da nahrat ze souboru. OldGuy v demu se nahrava ze souboru (ve scene_init_script najdes neco jako Scene.LoadEntity("cesta\oldguy.entity");
Pro spravne razeni objektu ve scene je hlavne dulezite poradi prvku sceny, jak je poskladas ve SceneEditu. Je to hodne podrobne popsano ve Scene Tutorialu v dokumentaci. Kdyz to strucne shrnu, ve scene jsou jednak "pevne" casti, takove jakoby kulisy (to je to, co se definuje ve SceneEditu) a v tech kulisach se pak prohaneji "zive" objekty, cili actori a volne entity (jako jsou Molly a OldGuy v demu). U techhle "zivych" objektu je potreba, aby mely hotspot v miste, kde stoji na zemi (viz vyse), protoze podle toho se pak ridi, jak se vzajemne prekryvaji.

Takhle kdyz to po sobe ctu, vzdycky mi to pripada ukrutne slozite, ale neni tomu tak, opravdu :) Tohle jsou ty zaklady, ktere jakmile clovek pochopi, vsechno ostatni uz je brnkacka.
Logged
Yes, I do have a twitter account
Please don't send me technical questions in private messages, use the forum. ::wave

Alice

  • Lurker
  • *
  • Karma: 0
  • Offline Offline
  • Posts: 3
    • View Profile
Re: Prosim o rady
« Reply #5 on: June 29, 2005, 09:10:20 AM »

Uz to funguje. Entitu jsem nakonec musela definovat pres Scene Edit, protoze se stale spatne zobrazovala pri volani pres scene_init. Kdyz definuju oboje, co ma prednost?

Jinak uz v tom kodu zacinam mit jasno. Diky!
to Mnemonic: Tohle forum je skvele, a WME taky. Docela se divim, ze takovou vec davas zdarma. Musis byt sileny fanda do adventur, zes neco takoveho stvoril. :)

Logged
 

Page created in 0.044 seconds with 23 queries.