Please login or register.

Login with username, password and session length
Advanced search  

News:

Forum rules - please read before posting, it can save you a lot of time.

Author Topic: Problém s inicializací scény - nastavení defaultních hodnot ve scriptu  (Read 4689 times)

0 Members and 1 Guest are viewing this topic.

xatx

  • Lurker
  • *
  • Karma: 0
  • Offline Offline
  • Posts: 7
    • View Profile

Zdravím!

V "base.inc" mám jednotlivé globální proměnné (stavy scén a postav) nadefinovány takto:

global StateLoghouseOut;

V scene_init.script mám:

// default values
if(StateLoghouseOut == null)
{
  StateLoghouseOut.Visited = false;
  StateLoghouseOut.CameFrom = "Forest_3";
  StateLoghouseOut.IsNaturalWoodIced = "no";
  StateLoghouseOut.BarrelState = "untouched";
  StateLoghouseOut.LogsLookState = "unseen";
 }

////////////////////////////////////////////////////////////////////////////////
// setup scene according to state variables


////////////////////////////////////////////////////////////////////////////////
if(!StateLoghouseOut.Visited)
{
  StateLoghouseOut.Visited = true;

  // this is our first visit in this scene...

  Game.Msg("StateLoghouseOut: " + ToString(StateLoghouseOut));
  Game.Msg("StateLoghouseOut.Visited: " + ToString(StateLoghouseOut.Visited));
  Game.Msg("StateLoghouseOut.CameFrom: " + ToString(StateLoghouseOut.CameFrom));
  Game.Msg("StateLoghouseOut.IsNaturalWoodIced: " + ToString(StateLoghouseOut.IsNaturalWoodIced));
  Game.Msg("StateLoghouseOut.BarrelState: " + ToString(StateLoghouseOut.BarrelState));
  Game.Msg("StateLoghouseOut.LogsLookState: " + ToString(StateLoghouseOut.LogsLookState));
}

Pokud v "base.inc" nastavím StateLoghouseOut na null, pak vše funguje, jak má. Pokud ne,
tak .Visited a .CameFrom mají přednastavené hodnoty, ale ostatní mají v sobě null.

Otázka: Co mají v sobě za hodnotu nově vytvořené a neinicializované globální proměnné?

StateLoghouseOut nastavené na null v base.inc je k ničemu, protože mi při každém vstupu do
scény smaže, co už se v ní událo....

Co s tím? U ostatních scén nemám problém.

Jo a "Game.Msg("StateLoghouseOut: " + ToString(StateLoghouseOut));"
pro jistotu nedělá vůbec nic - vypadá to, že ToString() neumí převést objekt na string (třeba na "object") a
Game.Msg() pak s vráceným výsledkem neumí pracovat a tak nic neudělá. Fujtajbl! :-)

Díky za radu!
X.
Logged

Mnemonic

  • WME developer
  • Administrator
  • Addicted to WME forum
  • *
  • Karma: 41
  • Offline Offline
  • Gender: Male
  • Posts: 5683
    • View Profile
    • Dead:Code Site

Neinicializovane promenne maji hodnotu null. Proc by se v tom popsanem kodu mely vyplnit jen nektere vlastnosti a jine ne, to netusim. Musel bych to zkusit (pozdeji).
Logged
Yes, I do have a twitter account
Please don't send me technical questions in private messages, use the forum. ::wave

Mnemonic

  • WME developer
  • Administrator
  • Addicted to WME forum
  • *
  • Karma: 41
  • Offline Offline
  • Gender: Male
  • Posts: 5683
    • View Profile
    • Dead:Code Site

Zkousel jsem ten kod uvedeny vyse, a funguje mi spravne, tj. vsechny vlastnosti maji vyplneny hodnoty jak by clovek ocekaval. V cem ze je presne problem?
Logged
Yes, I do have a twitter account
Please don't send me technical questions in private messages, use the forum. ::wave

xatx

  • Lurker
  • *
  • Karma: 0
  • Offline Offline
  • Posts: 7
    • View Profile

Kéž bych Ti mohl poslat celý kód... :-) Problém je totiž právě to, že se zinicializují,
jen některé proměnné.

.Visited  -> má požadovanou hodnotu false, která se nastaví, pokud je StateLoghouseOut == null
.CameFrom  -> taky má správnou hodnotu; nastaví se při prvním vstupu na scénu a pak podle toho, odkud hráč přišel

Ostatní proměnné zůstávají na null.

A jak jsem už řekl, vše je OK, pokud v base.inc nastavím (inicializuji) ručně proměnnou StateLoghouseOut na null.

Warum? :-)

možná je to zakletý ještě někde jinde. Zkusím další testy a třeba ještě na něco přijdu...
Logged

xatx

  • Lurker
  • *
  • Karma: 0
  • Offline Offline
  • Posts: 7
    • View Profile

Pokud kód upravím takto:
// default values
if(StateLoghouseOut == null)
{
  StateLoghouseOut.Visited = false;
}


if(!StateLoghouseOut.Visited)
{
  StateLoghouseOut.Visited = true;

  // this is our first visit in this scene...

  StateLoghouseOut.CameFrom = "Forest_3";
  StateLoghouseOut.IsNaturalWoodIced = "no";
  StateLoghouseOut.BarrelState = "untouched";
  StateLoghouseOut.LogsLookState = "unseen";
 
  Game.Msg("StateLoghouseOut: " + ToString(StateLoghouseOut));
  Game.Msg("StateLoghouseOut.Visited: " + ToString(StateLoghouseOut.Visited));
  Game.Msg("StateLoghouseOut.CameFrom: " + ToString(StateLoghouseOut.CameFrom));
  Game.Msg("StateLoghouseOut.IsNaturalWoodIced: " + ToString(StateLoghouseOut.IsNaturalWoodIced));
  Game.Msg("StateLoghouseOut.BarrelState: " + ToString(StateLoghouseOut.BarrelState));
  Game.Msg("StateLoghouseOut.LogsLookState: " + ToString(StateLoghouseOut.LogsLookState));
}


... tak to fachčí. A plóč? :-)
Logged

metamorphium

  • Global Moderator
  • Addicted to WME forum
  • *
  • Karma: 12
  • Offline Offline
  • Gender: Male
  • Posts: 1511
  • Vampires!
    • View Profile
    • CBE  software s.r.o.

zajimave je, ze mne to jede bez problemu (ten tvuj kod). Navic teno typ konstrukci pouzivam v cele hre a na problem jsem nenarazil. Zkus udelat minimalni jednomistnostovou verzi hry a ja se na to muzu podivat...
Logged
J.U.L.I.A. Enhanced Edition, Vampires!, J.U.L.I.A., J.U.L.I.A. Untold, Ghost in the Sheet

xatx

  • Lurker
  • *
  • Karma: 0
  • Offline Offline
  • Posts: 7
    • View Profile

Data pouštět ven nemůžu... :-) Zkusím ještě, jestli se to týká, jen této místnosti. Na dost místech používám default větev v příkazu switch, tak mám možná problém i jinde, ale nevím o tom. Když, tak aspo
Logged
 

Page created in 0.044 seconds with 21 queries.