Wintermute Engine Forum

Czech forum => Technické fórum => Topic started by: pirko7 on October 24, 2009, 01:52:00 PM

Title: MIZENÍ VARiables??!! "VY
Post by: pirko7 on October 24, 2009, 01:52:00 PM
Ahoj, můj další problem je v dialogu. Musím to tu rozepsat aby jste aspon trochu pochopily. Mám lokaci v chaloupce kde je babička, tu mám na dvě entity, jedna je zamrzlá a druhá je normální. Budu mluvit hlavně k normalní. Normální babička má script který sem uvedu, je poměrně hodně dlouhý tak vymažu co nejvíce dialogů. Je tam plno otázek IF. A abych je mohl dobře plnit a ptát se, použil jsem proměny VAR, který jsem si vypsal do scriptu místo global, kterých se bojím mít v budoucnu plno. VAR pokud vím platí poze pro danou scenu a pro ten jeden script. Vše funguje dobře do doby, kdy muj actor vyleze z chaloupky, vrátí se do ní a po znovu rozhovoru se mi vytratí  (možná falsne) variables "rozhovor3". Jak je to možné?
SCRIPT:
#include "scripts\base.inc"

//promeny v rozhovoru
var rozhovor1;
var rozhovor2;
var rozhovor3;
var dopisy_po_rozhovoru;

on "rozbitaproteza"
{
actor.Talk("Tahle protéza je rozbitá.");
}

on "kovovaproteza"
{
actor.GoTo(737, 477);
actor.TurnTo(DI_LEFT);
Game.Interactive = false;
actor.PlayAnim("actors\molly\ll\take1.sprite");
actor.PlayAnim("actors\molly\ll\take2.sprite");
Game.DropItem("kovovaproteza");
babicky_zuby.Active = true;
rozhovor1.Active = true;
Game.Interactive = true;
}

on "dopisy"
{
actor.GoTo(737, 477);
actor.TurnTo(DI_LEFT);
Game.Interactive = false;
   
   if(rozhovor2.Active) //babička s protezou
   {
      if(dopisy_po_rozhovoru.Active)
      {
         actor.PlayAnim("actors\molly\ll\take1.sprite");
         actor.PlayAnim("actors\molly\ll\take2.sprite");
         Game.DropItem("dopisy");
         actor.Talk("Babičko, tyhle dopisy jste měla ve schránce. Poslali je ze sirotčince.");
         
         actor.GoTo(760, 477);
         actor.TurnTo(DI_RIGHT);
         actor.Talk("Nějak se mi ta pohádka o vlkovi nezdá, ale kam se potom podělo všechno jídlo?");
         rozhovor3.Active = true;
      }
      else
      {
         actor.Talk("Napřed si s babičkou promluvím.");
      }
   }
   else//babička ještě nemá protezu
   {
   actor.Talk("Ještě ne.");
   }
   
Game.Interactive = true;   
}

on "leftclick"
{
   actor.GoTo(737, 477);
   actor.TurnTo(DI_LEFT);
   Game.Interactive = false;

   if(babicky_zuby.Active)
   {
       if(rozhovor1.Active) //prvni kloudný rozhovor s babičkou
      {
          rozhovor2.Active = true;
         rozhovor1.Active = false;
         dopisy_po_rozhovoru.Active = true;
         this.Talk("Kulivočko, jsi to opravdu ty, chlapče?");
         
         this.Talk("Dobře. Já zatím budu přemýšlet tady u krbu.");
      }
      else
      {
         if(rozhovor3.Active) /////////////////Otevřený DIALOG/////////////////////////////////////////////////////////////////////
         {
            this.Talk("Chlapče, co bys rád?");
            //zakladni
            var resp0;
            var resp1;
            var resp2;
            var resp3;
            var resp4;
            var resp5;

            var jednicka_a;
            var jednicka_b;
            var dvojka_b;
            
            var Responses;
            var Selected;
            var Loop = true;

            while(Loop)
            {
                  // výběr pro hráče
                  Responses[0] = "Kde tady najdu nějaké jídlo, babičko?";
                  Responses[1] = "Můžu se vás zeptat na dědečka?";
                  Responses[2] = "Babičko, mohl bych tady zůstat napořád?";
                  Responses[3] = "Jak je to dlouho, co spadla ta lavina venku?";
                  Responses[4] = "Babičko, nepamatujete si kombinaci trezoru?";
                  Responses[5] = "Už musím jít.";

                  // Zbarveni a nabidka
                  if(resp0.Active)
                  {
                  Game.AddResponse(0, Responses[0], null, null, null, "fonts\pouzite_responses.font");
                  }
                  else
                  {
                  Game.AddResponse(0, Responses[0]);
                  }
                  
                  if(resp1.Active)
                  {
                  Game.AddResponse(1, Responses[1], null, null, null, "fonts\pouzite_responses.font");
                  }
                  else
                  {
                  Game.AddResponse(1, Responses[1]);
                  }
                  
                  if(resp2.Active)
                  {
                  Game.AddResponse(2, Responses[2], null, null, null, "fonts\pouzite_responses.font");
                  }
                  else
                  {
                  Game.AddResponse(2, Responses[2]);
                  }
                  
                  if(resp3.Active)
                  {
                  Game.AddResponse(3, Responses[3], null, null, null, "fonts\pouzite_responses.font");
                  }
                  else
                  {
                  Game.AddResponse(3, Responses[3]);
                  }
               
                  if(jednicka_b.Active)
                  {
                     if(resp4.Active)
                     {
                     Game.AddResponse(4, Responses[4], null, null, null, "fonts\pouzite_responses.font");
                     }
                     else
                     {
                     Game.AddResponse(4, Responses[4]);
                     }
                  }
               
                  if(resp5.Active)
                  {
                  Game.AddResponse(5, Responses[5], null, null, null, "fonts\pouzite_responses.font");
                  }
                  else
                  {
                  Game.AddResponse(5, Responses[5]);
                  }
                  // let the player choose one //DULEŽIT
Title: Re: MIZENÍ VARiables??!!
Post by: metamorphium on October 25, 2009, 12:54:39 PM
Quote from: pirko7
VAR pokud vím platí poze pro danou scenu a pro ten jeden script.

Pokud odejdeš ze scény, tak přece měníš danou scénu, ne? Každopádně používat globální proměnné pro věci, které se táhnou přes více scén jednoduše musíš. :)
Title: Re: MIZENÍ VARiables??!!
Post by: pirko7 on October 25, 2009, 04:11:45 PM
To ano, jako global to sice funguje, ale je to přece pouze pro danej script s danou scenou. Nepracuje to s nějakou jinou, proto nechápu že to zmizne z paměti a variabilní to prostě "zapomene".
Title: Re: MIZENÍ VARiables??!!
Post by: metamorphium on October 26, 2009, 09:55:46 AM
Každá proměnná má rozsah platnosti. Proměnná lokální (var), platí pouze pro script ve kterém je definována. Pak je tato proměnná z paměti uvolněna, takže přijdeš o všechno co do ní dáš.
Globální proměnná (global) platí pro celou hru.
Title: Re: MIZENÍ VARiables??!!
Post by: pirko7 on October 28, 2009, 05:27:31 PM
To by vysvětlovalo me problemy, no a řekněme ž e když je global v jednom scriptu a važese na druhý script v obou jej předepišu například nahoru "global neco;". Nebo stačí napsat do base a nemusím to nikam předepisovat že?. Problem je ale potom v GlobResp. Když pomocí nich řeším barvu responses, budu si hold muset vymýšlet delší názvy že? Aby se to vzajemně neovlivnovalo s jinou psotavou předpokládám dobře?  :)
Title: Re: MIZENÍ VARiables??!!
Post by: metamorphium on October 29, 2009, 10:25:54 AM
ano. názvy proměnných musí být jedinečné. Druhá cesta jsou atributy globálních objektů, ale raději se zatím drž globálních proměnných.

Title: Re: MIZENÍ VARiables??!!
Post by: pirko7 on October 29, 2009, 11:10:21 AM
Dobře děkuju  :).