Wintermute Engine Forum

Czech forum => Technické fórum => Topic started by: Net on October 15, 2007, 10:17:33 PM

Title: Podivné chování save
Post by: Net on October 15, 2007, 10:17:33 PM
Ahoj,
potřeboval bych poradit s ukládáním/načítáním hry.

Když dám uložit hru, tak vše proběhne v pořádku, ale opětovné načtení hry do slotu dělá problémy.
Hru uložím na pozici 1. Tlačítko má taky jméno 1, ale dostanu se k němu přes GetControl(0)  :o

Určitě budu mít někde chybu ve skriptu, ale ani za nic ji nemůžu najít.

Zde je onen skript SAVE.

Code: [Select]
#include "scripts\base.inc"
#include "scripts\keys.inc"

self.xResult = false;

var SelectedSlot;

SetState();

////////////////////////////////////////////////////////////////////////////////
on "zpet"
{
  self.Close();
}

////////////////////////////////////////////////////////////////////////////////
on "uloz_hru"
{
  if(SelectedSlot > 0)
  {
var edit = self.GetControl(ToString(SelectedSlot) + "_ed");
    Game.SaveGame(SelectedSlot, edit.Text);
  Game.LoadWindow("interface\system\mainmenu.window");
  }
}


////////////////////////////////////////////////////////////////////////////////
on "Keypress"
{
  var button;

  if(Keyboard.KeyCode==VK_ESCAPE)
{
    button = self.GetControl("close");
    button.Press();
  }
}

////////////////////////////////////////////////////////////////////////////////
function SetState()
{
  for(var i=1; i<9; i=i+1)
  {
    var SlotButton = self.GetControl(i-1);

    if(Game.IsSaveSlotUsed(i))
    {
      SlotButton.Text = Game.GetSaveSlotDescription(i);
    }
  }
}

////////////////////////////////////////////////////////////////////////////////
on "1"
{
  SelectedSlot = 1;

  var button = self.GetControl("1");
  var edit = self.GetControl("1_ed");
 
  if(Game.IsSaveSlotUsed(1)) edit.Text = button.Text;
 
  button.Visible = false;
  edit.Visible = true;
}

on "2"
{
  SelectedSlot = 2;

  var button = self.GetControl("2");
  var edit = self.GetControl("2_ed");
 
  if(Game.IsSaveSlotUsed(2)) edit.Text = button.Text;
 
  button.Visible = false;
  edit.Visible = true;
}

on "3"
{
  SelectedSlot = 3;

  var button = self.GetControl("3");
  var edit = self.GetControl("3_ed");
 
  if(Game.IsSaveSlotUsed(3)) edit.Text = button.Text;
 
  button.Visible = false;
  edit.Visible = true;
}

on "4"
{
  SelectedSlot = 4;

  var button = self.GetControl("4");
  var edit = self.GetControl("4_ed");
 
  if(Game.IsSaveSlotUsed(4)) edit.Text = button.Text;
 
  button.Visible = false;
  edit.Visible = true;
}

on "5"
{
  SelectedSlot = 5;

  var button = self.GetControl("5");
  var edit = self.GetControl("5_ed");
 
  if(Game.IsSaveSlotUsed(5)) edit.Text = button.Text;
 
  button.Visible = false;
  edit.Visible = true;
}

on "6"
{
  SelectedSlot = 6;

  var button = self.GetControl("6");
  var edit = self.GetControl("6_ed");
 
  if(Game.IsSaveSlotUsed(6)) edit.Text = button.Text;
 
  button.Visible = false;
  edit.Visible = true;
}

on "7"
{
  SelectedSlot = 7;

  var button = self.GetControl("7");
  var edit = self.GetControl("7_ed");
 
  if(Game.IsSaveSlotUsed(7)) edit.Text = button.Text;
 
  button.Visible = false;
  edit.Visible = true;
}

on "8"
{
  SelectedSlot = 8;

  var button = self.GetControl("8");
  var edit = self.GetControl("8_ed");
 
  if(Game.IsSaveSlotUsed(8)) edit.Text = button.Text;
 
  button.Visible = false;
  edit.Visible = true;
}

a LOAD:

Code: [Select]
#include "scripts\base.inc"
#include "scripts\keys.inc"

var SelectedSlot;

SetState();

////////////////////////////////////////////////////////////////////////////////
on "zpet"
{
  self.Close();
}

////////////////////////////////////////////////////////////////////////////////
on "nacti_hru"
{
  if(SelectedSlot > 0) Game.LoadGame(SelectedSlot);
}


////////////////////////////////////////////////////////////////////////////////
on "Keypress"
{
  var button;

  if(Keyboard.KeyCode==VK_ESCAPE){
    button = self.GetControl("zpet");
    button.Press();
  }
}

////////////////////////////////////////////////////////////////////////////////
function SetState()
{
  var thumbnail = self.GetControl("thumbnail");
  for(var i=1; i<9; i=i+1)
  {
    var SlotButton = self.GetControl(i-1);
thumbnail.SetImage("savegame:" + SelectedSlot);

    if(Game.IsSaveSlotUsed(i))
    {
      SlotButton.Text = Game.GetSaveSlotDescription(i);
      SlotButton.Disabled = false;
    }
    else
    {
      SlotButton.Disabled = true;
    }
  }
}

////////////////////////////////////////////////////////////////////////////////
on "1"
{
  SelectedSlot = 1;
}

on "2"
{
  SelectedSlot = 2;
}

on "3"
{
  SelectedSlot = 3;
}

on "4"
{
  SelectedSlot = 4;
}

on "5"
{
  SelectedSlot = 5;
}

on "6"
{
  SelectedSlot = 6;
}

on "7"
{
  SelectedSlot = 7;
}

on "8"
{
  SelectedSlot = 8;
}

Lámu si nad tím hlavu a nevím co dál.

Předem dík za návrhy
Title: Re: Podivné chování save
Post by: Net on October 16, 2007, 09:56:54 AM
Tak nic, problém vyřešen. Z nějakého důvodu to nechtělo brát tlačítka začínající číslem.
Title: Re: Podivné chování save
Post by: Mnemonic on October 16, 2007, 10:11:51 AM
Ona totiz ta metoda GetControl() se chova ruzne podle toho, jestli ji posles text nebo cislo. Kdyz ji posles text, hleda ovladaci prvek s danym jmenem. Kdyz ji posles cislo, vrati ti prvek v danem poradi na okne.
Takze bys musel explicitne tu promennou SelectedSlot prevest na text:

Code: WME Script
  1. this.GetControl(ToString(SelectedSlot));
  2.  
Title: Re: Podivné chování save
Post by: Net on October 16, 2007, 01:10:37 PM
Dík za radu. Dám si na to pozor.  ;)