Autor Thema: Probleme mit Starterpack AGS3  (Gelesen 56016 mal)

Timer

  • volljähriger Tentakel
  • *****
  • Beiträge: 763
  • Geschlecht: Männlich
    • ICQ Messenger - 275798409
    • AOL Instant Messenger - commandertimer
    • Profil anzeigen
    • Meine Seite
    • E-Mail
Re: Probleme mit Starterpack AGS3
« Antwort #60 am: 23. Dezember 2010, 20:11:14 »
Dass sie immer offen bleiben, lässt sich einfach dadurch machen, dass du diese 2:
...erSchluessel.ID, 2)...in eine 0 veränderst.
-> Die Zahl bestimmt nämlich den Zustand, den die Tür erlangen soll, wenn sie geschlossen wird (2 heißt "versperrt", 0 heißt "geschlossen").

Dass man den Schlüssel dann auch verliert, kann man auf 2 verschiedene Arten machen.

Entweder du willst, dass der Schlüssel immer, bei jeder Tür, bei jedem erfolgreichem Aufschließen verschwindet, dann muss du folgende Stelle in "GlobalScript.asc" suchen und ein paar sachen hinzufügen (das hinzugefügte ist markiert):  else if ( UsedAction(eActUseInventory) && (key >= 0) )
  {
    if (any_click_move(i_XPosition, i_YPosition, l_Direction) )
    {
if ( charInv )
{
if ( charInv.ID == key )
{
if ( this.i_GlobalInt == eDoorLocked )
{
PlaySound(2);
o_Objekt.Visible = true;
this.i_GlobalInt = eDoorOpen;
player.LoseInventory (charInv); <-------****** (markiert) *********
}
}
else
{
if ( this.s_WrongItem != null )
{
player.Say(this.s_WrongItem);
}
else
{
player.Say(s_WrongItemStandard);
}
}
}
    }
  }

...oder es soll nur an einer Stelle, bei einer Tür so sein. Dann musst du es dort vor Ort im Türscript verändern:

Du schreibst einfach unter deine normale Türenscriptzeile:
 
if(Door[eDoorNumTuer17].ClickSpecial(2, 3, iGelberSchluessel.ID, 0) == 0 ) Unhandled();
if ( UsedAction ( eActUseInventory ) && player.ActiveInventory == iGelberSchluessel ) player.LoseInventory (iGelberSchluessel);

Beides ungetestet, könnte aber klappen. :)
« Letzte Änderung: 23. Dezember 2010, 20:12:21 von Timer »

ZAK

  • volljähriger Tentakel
  • *****
  • Beiträge: 503
  • Geschlecht: Männlich
    • Profil anzeigen
Re: Probleme mit Starterpack AGS3
« Antwort #61 am: 24. Dezember 2010, 07:59:20 »
Danke für die hilfe...
...nun schleppe ich mich nicht mehr mir so viele schüssel ab
Ich bin mal kurz weg, mich suchen. Wenn ich zurück komme bevor ich wieder da bin, sagt mir bitte das ich warten soll!

Timer

  • volljähriger Tentakel
  • *****
  • Beiträge: 763
  • Geschlecht: Männlich
    • ICQ Messenger - 275798409
    • AOL Instant Messenger - commandertimer
    • Profil anzeigen
    • Meine Seite
    • E-Mail
Re: Probleme mit Starterpack AGS3
« Antwort #62 am: 24. Dezember 2010, 12:02:38 »
Freut mich. ;)

ZAK

  • volljähriger Tentakel
  • *****
  • Beiträge: 503
  • Geschlecht: Männlich
    • Profil anzeigen
Re: Probleme mit Starterpack AGS3
« Antwort #63 am: 26. Dezember 2010, 01:00:42 »
Ich habe da eine Fehlermeldung mit der ich nichts anfangen kann...

habe das Spiel mit build exe. gespeichert und gestartet, und beim laufen mit player (an bisher nur einer Position) stürzt das Spiel ab.

Fehlermeldung:

Zitat
in "GlobalScript asc.",Line 503
from "GlobalScript asc.",Line 2045

Error: Error running from 'repeatedly_execute':
Error: Array index out of bounds (index: -1, bounds: 0..26)

desweiteren weiss ich nicht wie ich im "raumscript" es so schreibe, das wenn ich ein objekt mit hilfe des Inventar hervor hole und es an mich nehme, das  ich es ein 2tes mal mit dem Inventar nicht mehr machen kann.
bislang kann ich das objekt mit dem Inventar hervor holen und an mich nehmen und es so oft ich will wiederholen und an mich nehmen wie ich will (das will ich aber nicht)
Ich bin mal kurz weg, mich suchen. Wenn ich zurück komme bevor ich wieder da bin, sagt mir bitte das ich warten soll!

Rocco

  • Administrator
  • alter Tentakel
  • *****
  • Beiträge: 2375
  • Geschlecht: Männlich
    • Profil anzeigen
    • Maniac Mansion Mania
    • E-Mail
Re: Probleme mit Starterpack AGS3
« Antwort #64 am: 26. Dezember 2010, 01:55:35 »
damit der inventargegenstand verschwindet musst du in deinen code, logischerweise genau dort wo er verschewinden soll, irgendwas in dieser art schreiben:
player.LoseInventory (iGelberSchluessel);*siehe code von timer*

der andere error kommt von einem array, wo auf ein arrayelement zugegriffen wird, das es nicht gibt.
vielleicht postest du mal die zeilen vom globalscript rund um zeilennummer 503 und 2045, und sagst uns an welcher position genau dein spiel abstürzt,
damit wir mehr sagen können.  :cl



ZAK

  • volljähriger Tentakel
  • *****
  • Beiträge: 503
  • Geschlecht: Männlich
    • Profil anzeigen
Re: Probleme mit Starterpack AGS3
« Antwort #65 am: 26. Dezember 2010, 10:38:00 »
auszuge aus dem "globalsckript" zwecks fehlermeldung:

Zitat
// ============================= ActionBar ===========================================

function UpdateActionBar()
{
  // set the text in the action bar
  String madetext;
  int action = global_action;
  String objekt;
  String item;
   GUIControl *guic;
   madetext = "";
  objekt = SHOWNlocation;
  item = "";
  if (GlobalCondition (5) == 1)
  {
    // write SWITCH TO CHAR
    action = eActSwitchTo;
      guic = GUIControl.GetAtScreenXY(mouse.x, mouse.y);
      if ( null != guic )
      {
         if ( guic.ID == 12 )
         {
            objekt = character[UpperButton()].Name;     <-----------line 503------
         }
         else
         {
            objekt = character[LowerButton()].Name;
         }
      }
  }
  else if (Mouse.Mode == 4)
  {
    // use or give inventory item
    item = player.ActiveInventory.Name;
      item = item.RemoveExtension();
  }
  else if (GlobalCondition (1) == 1)
  {
    // if the mouse is in the inventory and modes Walk or pickup are selected
    action = eActUse;
   }
   madetext = TranslateAction (madetext, action, objekt, item);
  // show action text
   gAktionText.Text = madetext;
   gAktionText.TextColor = ActionLabelColorNormal;
}

Zitat
// ============================= repeatedly_execute ===========================================
// this section after on_mouse_click

#sectionstart repeatedly_execute  // DO NOT EDIT OR REMOVE THIS LINE
function repeatedly_execute ()
{
   DisplaySpeechQ_RE(); // place it before any other script code in rep. exec.
  
  if (IsGamePaused () != 1)
  {
    CheckTimers ();
      InventoryItem *invAt = InventoryItem.GetAtScreenXY(mouse.x, mouse.y);
    // --- for the MovePlayer function ---
    if (GScancelable == 1)
    {
      GScancelable = 0;
      if ( null == invAt ) on_mouse_click (eMouseLeft);
      else on_mouse_click (eMouseLeftInv);
    }
    else if (GScancelable == 2)
    {
      GScancelable = 0;
      CheckDefaultAction ();
      if ( null == invAt ) on_mouse_click (eMouseRight);
      else on_mouse_click (eMouseRightInv);
    }
    CheckDefaultAction ();      <-------------------------line2045-------------
    UpdateActionBar ();
  }
  // change the arrows in the inventory to show if you
  // can scroll the inventory:
   //readonly InventoryItem* InvWindow.ItemAtIndex[];

   InvWindow *invMain = gMainInventory;
   if ( null != invMain.ItemAtIndex[0] )
   {
      if ( 0 != gMainInventory.TopItem )
      {
         // if inventory can scroll up
         gMainInvUp.NormalGraphic = invUparrowONsprite;
         InventoryItem *invItem = InventoryItem.GetAtScreenXY(180, 160);
      
         if (invItem.ID < 0)
            gMainInventory.ScrollUp();
      }
      else
         gMainInvUp.NormalGraphic = invUparrowOFFsprite;
   }
   if ((gMainInventory.TopItem + (gMainInventory.ItemsPerRow * gMainInventory.RowCount)) < gMainInventory.ItemCount)
      gMainInvDown.NormalGraphic = invDownarrowONsprite;
  else
      gMainInvDown.NormalGraphic = invDownarrowOFFsprite;
}
#sectionend repeatedly_execute  // DO NOT EDIT OR REMOVE THIS LINE
« Letzte Änderung: 26. Dezember 2010, 10:44:37 von Zak »
Ich bin mal kurz weg, mich suchen. Wenn ich zurück komme bevor ich wieder da bin, sagt mir bitte das ich warten soll!

ZAK

  • volljähriger Tentakel
  • *****
  • Beiträge: 503
  • Geschlecht: Männlich
    • Profil anzeigen
Re: Probleme mit Starterpack AGS3
« Antwort #66 am: 26. Dezember 2010, 11:07:02 »
das mit dem Schlüssel habe ich ja schon soweit verstanden.
was ich meinte ist... ich habe ein "hotspot" wo ein "object" versteckt ist, welches sichtbar wird wenn ich ein "inventar" benutze. ich nehme das "object" an mich und es verschwindet vom bild. soweit ist alles o.k.
wenn ich nun erneut mit dem "object" den "hotspot" benutze erscheint wieder das selbe "object" welches ich wieder an mich nehmen kann (und wenn ich langeweile habe, kann ich das 100 oder 1000 mal machen).

Code beim "hotspot":
Zitat
    else if (UsedAction(eActPush))
      {
      Wait(5);
      player.Say("Also wirklich...");
    }
     else if (UsedAction(eActUseInventory) && player.ActiveInventory == iStock )
      {
         PlaySound(64);
         oSchluessel.Visible = true;
      Wait(15);
      player.Say("Ich habe ein Schüssel gefunden.");
      }
      else Unhandled();
    }

sobald nun das "object" sichtbar wird, möchte ich das das "object" beim "hotspot" ganz verschwindet und nicht mehr da ist...
Ich bin mal kurz weg, mich suchen. Wenn ich zurück komme bevor ich wieder da bin, sagt mir bitte das ich warten soll!

ZAK

  • volljähriger Tentakel
  • *****
  • Beiträge: 503
  • Geschlecht: Männlich
    • Profil anzeigen
Re: Probleme mit Starterpack AGS3
« Antwort #67 am: 26. Dezember 2010, 13:25:37 »
habe das letztere Problem mit den "objects" gelöst, indem ich ein zusätzliches "object" zu den "hotspots zugefügt habe welches nach anwendung im dem "inventar" verschwindet....
...sicherlich gibt es eine einfache lösung, aber jetzt klappt es wenigstens...!!!


bei dem Problem mit der Fehlermeldung, muss ich zu sagen, das es beim Spielen nicht immer (nur ab und zu) auftaucht. und zwar wenn "nimm" anstatt "gehe zu" aktiviert ist....
« Letzte Änderung: 26. Dezember 2010, 13:28:23 von Zak »
Ich bin mal kurz weg, mich suchen. Wenn ich zurück komme bevor ich wieder da bin, sagt mir bitte das ich warten soll!

KhrisMUC

  • Moderator
  • volljähriger Tentakel
  • *****
  • Beiträge: 989
    • Profil anzeigen
Re: Probleme mit Starterpack AGS3
« Antwort #68 am: 26. Dezember 2010, 19:00:01 »
Das Letzte zuerst:
Game.DoOnceOnly oder Variable verwenden.

Zum Fehler:
Dies hier:
            objekt = character[UpperButton()].Name;ersetzen durch:
            if (UpperButton() >= 0) objekt = character[UpperButton()].Name;
Das Gleiche etwas weiter unten mit LowerButton().

ZAK

  • volljähriger Tentakel
  • *****
  • Beiträge: 503
  • Geschlecht: Männlich
    • Profil anzeigen
Re: Probleme mit Starterpack AGS3
« Antwort #69 am: 27. Dezember 2010, 16:59:02 »
Danke für die hilfe...
...habe bislang noch keine weitere Fehlermeldung bekommen...
Ich bin mal kurz weg, mich suchen. Wenn ich zurück komme bevor ich wieder da bin, sagt mir bitte das ich warten soll!

ZAK

  • volljähriger Tentakel
  • *****
  • Beiträge: 503
  • Geschlecht: Männlich
    • Profil anzeigen
Re: Probleme mit Starterpack AGS3
« Antwort #70 am: 28. Dezember 2010, 08:41:51 »
also das mit dem "Game.DoOnceOnly" habe ich nicht verstanden...

...ich habe einen Schrank und wenn ich ihn öffne möchte ich das das "Object" sichtbar wird und ich es an mich nehmen kann (mit dialog).... soweit klappt auch alles.

nur wenn ich den Schrank erneut öffne, wird das "Object" (mit dem gleichen dialog) wieder sichtbar, das soll aber nicht sein (und es soll der dialog "leer" kommen).
 hat jemand ein Scriptvorschlag... ???

und wie geht das mit dem strom?
ich kenne es aus dem "mm" wo man die "kabel" im einem Raum ( es war der Dachboden) reperieren muss, damit im anderem Raum der Strom bzw. das licht an geht (brauche ich beim Raum ohne licht 2 Räume?)
denn erst komme ich ja in den raum wo es dunkel ist, und wenn die kabel reperiet sind, kann ich den Raum richtig betreten.

Danke
« Letzte Änderung: 28. Dezember 2010, 08:56:34 von Zak »
Ich bin mal kurz weg, mich suchen. Wenn ich zurück komme bevor ich wieder da bin, sagt mir bitte das ich warten soll!

Timer

  • volljähriger Tentakel
  • *****
  • Beiträge: 763
  • Geschlecht: Männlich
    • ICQ Messenger - 275798409
    • AOL Instant Messenger - commandertimer
    • Profil anzeigen
    • Meine Seite
    • E-Mail
Re: Probleme mit Starterpack AGS3
« Antwort #71 am: 28. Dezember 2010, 11:48:15 »
Game.DoOnceOnly ist eine Funktion, mit der du auf einfache Weise bewerkstelligen kannst, dass bestimmte Sachen nur einmal ausgeführt werden.
Verwendet wird es so:
if (Game.DoOnceOnly("oeffne schrank")) {
  oSchrank.Visible = true;
}
Das, was zwischen den geschweiften Klammern steht, wird im ganzen Spiel nur einmal ausgeführt. Wichtig ist nur, dass du bei jeder einmaligen Aktion einen anderen Text in der Klammer stehen hast. Denn sobald an zwei Stellen der gleiche Text steht, werden diese als die gleiche Aktion angesehen und man kann nur eine von ihnen ausführen.

Schrank:
Ich würde es einfach so lösen, dass du das Objekt, das man nehmen kann, beim nehmen nicht "verschwinden" lässt, sondern lediglich so tust.
-> Hä?
--> nicht Objekt.Visible = false, sondern Objekt.Y = 320;
---> Du verschiebst das Objekt außerhalb des sichtbaren Bereichs. Somit wird es zwar offiziell wieder sichtbar, wenn der Spieler wieder den Schrank öffnet, aber er sieht es nicht (und kann es deshalb auch nicht anklicken).

... das ist allerdings nur solange die perfekte Lösung, wenn der Spieler das Objekt selber anklicken und mitnehmen kann.

Wenn er es gleich beim ersten öffnen automatisch mitnehmen soll, machst du es mit DoOnceOnly:

if (UsedAction (eActOpen)) {
  oOffenerSchrank.Visible = true;
  if (Game.DoOnceOnly ("Sieh Zeugs")) {
    oZeugs.Visible = true;
    player.Say ("Ooooh! Zeugs!");
    oZeugs.Visible = false;
    player.AddInventory (iZeugs);
  }
  else player.Say ("Leer.");
  oOffenerSchrank.Visible = false;
}

Für den Rest habe ich gerade keine Zeit, aber ich hoffe, ich habe dir schon mal weiter geholfen. :)

ZAK

  • volljähriger Tentakel
  • *****
  • Beiträge: 503
  • Geschlecht: Männlich
    • Profil anzeigen
Re: Probleme mit Starterpack AGS3
« Antwort #72 am: 28. Dezember 2010, 16:54:04 »
ich weiss.... ich nerve....
...aber ich möchte zusätzlich noch das der schrank vorher verschlossen ist und erst durch ein schlüssel geöffnet werden kann, habe im script (hSchkank_AnyClick mit den dialogen drin und zusätzlich es mit oSchrank_UseInv)kann aber die tür mit Schlüssel und auch so öffnen....
Ich bin mal kurz weg, mich suchen. Wenn ich zurück komme bevor ich wieder da bin, sagt mir bitte das ich warten soll!

KhrisMUC

  • Moderator
  • volljähriger Tentakel
  • *****
  • Beiträge: 989
    • Profil anzeigen
Re: Probleme mit Starterpack AGS3
« Antwort #73 am: 28. Dezember 2010, 17:47:31 »
Junge, Du brauchst Variablen. Du musst den Zustand des Spiels speichern, z.B. ob der Schrank verschlossen ist, oder ob die Kabel repariert sind. Das macht man mit Variablen.
Brauchst Du diese Info nur in einem Raum, reicht eine Raumvariable, d.h. Du schreibst z.B. an den Anfang des Raumskripts:
// Zustand des Schranks, 0 = verschlossen, 1 = zu, 2 = offen
int schrank;

Im Fall der Kabel, wo der Zustand in mehr als einem Raum verändert bzw. abgefragt werden muss, braucht man eine globale Variable. Also Global Variables im Baum aufmachen, neue bool, name "kabel_repariert", Anfangswert "false".

Wenn nun im Raum mit den Kabeln diese repariert werden, benutzt Du
  kabel_repariert = true;Im anderen Raum dann
  if (kabel_repariert) {
    // licht anschalten, etc.
  }
  else player.Say("Ich kann nix sehen, zu dunkel hier.");

Beim Schrank ähnlich:
  // öffnen
  if (schrank == 0) player.Say("Er ist verschlossen.");
  else if (schrank == 2) player.Say("Er ist schon offen.");
  else {
    // schrank öffnen, etc.
    ...
  }

  // use inv
  if (player.ActiveInventory != iSchrankSchluessel) player.Say("Das macht keinen Sinn.");
  else {
    if (schrank == 1) player.Say("Ich werde den Schrank nicht wieder zuschließen, warum auch?");
    else if (schrank == 2) player.Say("Ich werde den Schlüssel nicht in den Schrank legen, warum auch?");
    else {
      schrank = 1; // nicht verschlossen aber zu
      player.Say("Der Schlüssel passt! Ich schließe den Schrank auf.");
    }
  }

ZAK

  • volljähriger Tentakel
  • *****
  • Beiträge: 503
  • Geschlecht: Männlich
    • Profil anzeigen
Re: Probleme mit Starterpack AGS3
« Antwort #74 am: 28. Dezember 2010, 18:45:11 »
bin ja noch anfänger....

habe folgendes am anfang des Raum scrpit geschreiben:

Zitat
 //Zustand des Tresor, 0 = verschlossen, 1 = zu, 2 = offen
int Tresor;
desweiteren im script:

Zitat
function hTresor_AnyClick()
{
   if (any_click_move(895, 135, eDirRight))
   {
      if (UsedAction(eActWalkTo))
      {
      //   Wait(5);
      }
      else if (UsedAction(eActLookAt))
      {
         Wait(5);
         player.Say("Was da wohl drin ist?");
      }
      else if (UsedAction(eActPickUp))
      {
         Wait(5);
         player.Say("Das geht nicht.");
      }
      else if( UsedAction(eActOpen))
      {
      if (Tresor == 0) player.Say("Er ist verschlossen.");
      else if (Tresor == 2) player.Say("Er ist schon offen.");
      else if(Tresor == 1)player.Say("o.k.");
     }
         PlaySound(1);
         oTresor.Visible = true;
      if (Game.DoOnceOnly("Ein Werkzeugkasten")){
        Wait(40);
        player.Say("Ein Werkzeugkasten!");
        Wait(20);
        player.Say("Den nehme ich mal mit.");
        Wait(5);
        PlaySound(4);
        player.AddInventory(iWerkzeug);
      }
    }
      if (UsedAction(eActClose))
      {
         Wait(5);
         player.Say("Der ist doch zu.");
      }
      else if (UsedAction(eActPull))
      {
         Wait(5);
         PlaySound(1);
         oTresor.Visible=true;
      }
      else if (UsedAction(eActPush))
      {
         Wait(5);
         player.Say("Ich will nichts kaputt machen.");
    }
    if (player.ActiveInventory != iScluesselkarte) player.Say("Das macht keinen Sinn.");
    else {
    if (Tresor == 1) player.Say("Ich werde den Schrank nicht wieder zuschließen, warum auch?");
    else if (Tresor == 2) player.Say("Ich werde den Schlüssel nicht in den Schrank legen, warum auch?");
    else {
      Tresor = 1; // nicht verschlossen aber zu
      player.Say("Der Schlüssel passt! Ich schließe den Schrank auf.");
    }
  }
}

aber es klappt nicht....
« Letzte Änderung: 28. Dezember 2010, 18:49:28 von Zak »
Ich bin mal kurz weg, mich suchen. Wenn ich zurück komme bevor ich wieder da bin, sagt mir bitte das ich warten soll!