Autor Thema: Probleme mit Starterpack AGS3  (Gelesen 45120 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 #75 am: 28. Dezember 2010, 19:07:00 »
Du hast bei der öffne-Funktion ein paar geschweifte Klammern seltsam gesetzt. Und der Zustand des Tresors musste noch geändert werden.
Ich denke mal, es sollte so aussehen:
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;
    Tresor = 2; // Tresor -> "AUF"
    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);
    }
  }
}
...und der Teil unten sollte wohl in die "eActUseInv"-Section (?) - also so:
if (UsedAction (eActUseInv)) {
  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.");
    }
  }
}

Sollte eigentlich funktionieren.

ZAK

  • volljähriger Tentakel
  • *****
  • Beiträge: 503
  • Geschlecht: Männlich
    • Profil anzeigen
Re: Probleme mit Starterpack AGS3
« Antwort #76 am: 28. Dezember 2010, 19:27:54 »
habe das script noch etwas änder müssen, aber jetzt geht es....
...dafür das ich überhaupt keine ahnung habe, habe ich mich aber gut geschlagen.

code:
Zitat
   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;
      Tresor = 2; // Tresor -> "AUF"
      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);
      }
    }
  }

Zitat
   else if (UsedAction (eActUseInventory))
    {
     if (player.ActiveInventory != iSchluesselkarte) 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.");
      }
    }
  }

das mit den kabeln und so muss ich erst noch probieren...
« Letzte Änderung: 28. Dezember 2010, 19:34:14 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 #77 am: 28. Dezember 2010, 20:00:08 »
aber irgendwo scheint noch ein fehler zu sein...

nachdem ich den "tresor" aufgeschlossen habe und die tür wieder zu mache ist der tresor zu, aber beim erneuten offnen sieht der tresor zu aus und der player sagt "ist doch offen"...

code oTresor:
Zitat
function oTresor_AnyClick()
{
    if (any_click_move(895, 135, eDirRight))
   {
      if (UsedAction(eActWalkTo))
      {
      //   Wait(5);
      }
      else if (UsedAction(eActLookAt))
      {
      Wait(5);
         player.Say("Leer.");
      }
      else if (UsedAction(eActOpen))
      {
         PlaySound(1);
         oTresor.Visible = true;
    }
      else if (UsedAction(eActClose))
      {
         Wait(5);
         PlaySound(1);
         oTresor.Visible=false;
      }
      else if (UsedAction(eActPush))
      {
         Wait(5);
         PlaySound(1);
         oTresor.Visible=false;
      }
      else if (UsedAction(eActPull))
      {
         Wait(5);
         player.Say("Ist doch schon offen.");
      }
      else if (UsedAction(eActPickUp))
      {
         Wait(5);
         player.Say("Soll den Schrank da etwa rausreißen?");
      }
      else if (UsedAction(eActUse))
      {
         Wait(5);
         PlaySound(1);
         oTresor.Visible=false;
      }
      else Unhandled();
   }
}

Code hTresor:
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)
      {
      PlaySound(1);
      oTresor.Visible = true;
      Tresor = 2; // Tresor -> "AUF"
      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);
         PlaySound(1);
         oTresor.Visible=false;
      }
      else if (UsedAction(eActPull))
      {
         Wait(5);
         PlaySound(1);
         oTresor.Visible=true;
      }
      else if (UsedAction(eActPush))
      {
      Wait(5);
      player.Say("Ich will nichts kaputt machen.");
    }
    else if (UsedAction (eActUseInventory))
    {
     if (player.ActiveInventory != iSchluesselkarte) player.Say ("Das macht keinen Sinn.");
     else if (Tresor == 1) player.Say("Ist doch offen.");
     else if (Tresor == 2) player.Say("Das behalte ich besser. ");
     else {
      Tresor = 1; // nicht verschlossen aber zu
      player.Say("Jetzt ist der Tresor offen.");
      }
    }
  }
}
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 #78 am: 28. Dezember 2010, 20:27:23 »
Fehler gefunden....!!!!

Code:
Zitat
...
      if (Tresor == 0) player.Say("Er ist verschlossen.");
      else if (Tresor == 2) player.Say("Er ist schon offen.");
      else if(Tresor == 1)
      {
      PlaySound(1);
      oTresor.Visible = true;
      Tresor = 2; // Tresor -> "AUF"       <----------------Tresor = 1; (ist richtig)---------------
...
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 #79 am: 28. Dezember 2010, 20:37:43 »
Praktisch ja... logisch nicht. Denn der Status für "offen" ist ja schließlich "2". ;)
Damit es auch logisch richtig ist, musst du den Status wieder auf "zu", also "1" setzen, sobald wieder geschlossen wird.

Siehe folgt:
else if (UsedAction(eActClose))
{
  Wait(5);
  PlaySound(1);
  oTresor.Visible=false;
  Tresor = 1; <- neu eingefügt: Status auf "ZU".
}

Natürlich macht das alles nicht viel Sinn, wenn du sowieso Objekte verwendest, da kannst du die ganzen Variablen auch gleich ganz weg lassen, aber ich wollte gerade ein bisschen klugscheißern. ;)

ZAK

  • volljähriger Tentakel
  • *****
  • Beiträge: 503
  • Geschlecht: Männlich
    • Profil anzeigen
Re: Probleme mit Starterpack AGS3
« Antwort #80 am: 28. Dezember 2010, 21:11:16 »
das klappt aber so nicht...
...wie ich es im script geändert habe geht alles ( kleiner mankel ist, wenn ich als erstes auf "schliessen" gehe höre ich das "sound" öffnen/schliessen). änder ich irgend welches im script (welches ich wieder reture mache) kann ich die tür auch ohne schlüssel ö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!

ZAK

  • volljähriger Tentakel
  • *****
  • Beiträge: 503
  • Geschlecht: Männlich
    • Profil anzeigen
Re: Probleme mit Starterpack AGS3
« Antwort #81 am: 28. Dezember 2010, 22:32:14 »
ich verstehe die scripts nun gar nicht mehr, erst geht alles, dann änder ich ne kleinigkeit und dann geht alles nicht mehr.... sitze nun schon den halben tag an der einen sache mit dem "tresor"....

code hTresor:
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("Ist doch zu.");
      {
      PlaySound(1);
      oTresor.Visible = true;
      Tresor = 1; // Tresor -> "AUF"
      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);
         PlaySound(1);
         oTresor.Visible=false;
      }
      else if (UsedAction(eActPull))
      {
         Wait(5);
         PlaySound(1);
         oTresor.Visible=true;
      }
      else if (UsedAction(eActPush))
      {
      Wait(5);
      player.Say("Ich will nichts kaputt machen.");
    }
    else if (UsedAction (eActUseInventory))
    {
     if (player.ActiveInventory != iStetoskop) player.Say ("Das macht keinen Sinn.");
     else if (Tresor == 1) player.Say("Ist doch offen.");
     else if (Tresor == 2) player.Say("Das behalte ich besser. ");
     else {
      Tresor = 1; // nicht verschlossen aber zu
      player.Say("Jetzt ist der Tresor offen.");
      }
    }
  }
}

code oTresor
Zitat
function oTresor_AnyClick()
{
    if (any_click_move(895, 135, eDirRight))
   {
      if (UsedAction(eActWalkTo))
      {
      //   Wait(5);
      }
      else if (UsedAction(eActLookAt))
      {
      Wait(5);
         player.Say("Leer.");
      }
      else if (UsedAction(eActOpen))
      {
         PlaySound(1);
         oTresor.Visible = true;
    }
      else if (UsedAction(eActClose))
      {
         Wait(5);
         PlaySound(1);
         oTresor.Visible=false;
      }
      else if (UsedAction(eActPush))
      {
         Wait(5);
         PlaySound(1);
         oTresor.Visible=false;
      }
      else if (UsedAction(eActPull))
      {
         Wait(5);
         player.Say("Ist doch schon offen.");
      }
      else if (UsedAction(eActPickUp))
      {
         Wait(5);
         player.Say("Soll den Schrank da etwa rausreißen?");
      }
      else if (UsedAction(eActUse))
      {
         Wait(5);
         PlaySound(1);
         oTresor.Visible=false;
      }
      else Unhandled();
   }
}

habe nur iSchluesselkarte gegen i Stetoskop getauscht....
ich weiss nicht mehr weiter...
...hat einer mal ein script für mich... ???
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 #82 am: 28. Dezember 2010, 22:52:59 »
Was genau funktioniert denn nicht? Bis jetzt sieht das Script eigentlich ganz OK aus. :-\

Rocco

  • Administrator
  • alter Tentakel
  • *****
  • Beiträge: 2371
  • Geschlecht: Männlich
    • Profil anzeigen
    • Maniac Mansion Mania
    • E-Mail
Re: Probleme mit Starterpack AGS3
« Antwort #83 am: 28. Dezember 2010, 23:43:39 »
überarbeite mal diesen part, das ist ein bisschen konfus, die Klammerung stimt sicher 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("Ist doch zu.");
      {         <------------------------------                // klammer zuviel
      PlaySound(1);
      oTresor.Visible = true;
      Tresor = 1; // Tresor -> "AUF"
      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);
      }
    }

ZAK

  • volljähriger Tentakel
  • *****
  • Beiträge: 503
  • Geschlecht: Männlich
    • Profil anzeigen
Re: Probleme mit Starterpack AGS3
« Antwort #84 am: 29. Dezember 2010, 05:34:01 »
Habe die klammer raus genommen, geht aber immer noch nicht. wenn ich auf "öffne Tresor" gehe passiert das:
player say ("der ist verschlossen") Tresortür geht auf, player say (" Ein Werkzeukasten") (" den nehme ich mal mit") ...werkzeugkasten geht ins Inventar....

gehe ich als erstes mit "schliesse Tresor" an die sache, dann höre ich das geräusch "playsound(4)"....

//Edit:

habe das porblem weitesgehend gelöst...
...so langsam verstehe ich die script's...
« Letzte Änderung: 29. Dezember 2010, 08:20:58 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!

Endres

  • Midlife Crisis Tentakel
  • ******
  • Beiträge: 1264
  • Geschlecht: Männlich
  • En|dres, der
    • ICQ Messenger - 230191486
    • MSN Messenger - enni_puschner@hotmail.de
    • Profil anzeigen
    • e7p.de
    • E-Mail
Re: Probleme mit Starterpack AGS3
« Antwort #85 am: 29. Dezember 2010, 11:01:02 »
Die Klammer war nicht überflüssig, sondern das player.Say - Warum sollte man sagen "Ist doch zu." wenn der Tresor aufgeschlossen ist und geöffnet werden soll..?

else if(Tresor == 1) {
  PlaySound(1);
  oTresor.Visible = true;
  Tresor = 2;
  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);
  }
}

Vergiss bitte nicht die zusätzliche geschlossene Klammer für das else if.

Edit: Was mir gerade wieder auffällt: @Rocco: Können wir nicht mal langsam AGS-Source-Highlighting in das Forum einbauen? ;)


Domi:"irc hab ich mir viren geholt.. icq hab ich nimmer"

KhrisMUC

  • Moderator
  • volljähriger Tentakel
  • *****
  • Beiträge: 989
    • Profil anzeigen
Re: Probleme mit Starterpack AGS3
« Antwort #86 am: 29. Dezember 2010, 11:24:42 »
Zak: Du bist zu hastig und ungeduldig. Programmieren ist nicht wie backen, wo man auch mal bissl nach Schnauze machen kann; alles muss exakt sein.
Dabei hilft es natürlich, wenn man weiß, wann man welche Klammer setzen muss. Und man sollte sich von Anfang an einen der gängigen Einrückungsstile angewöhnen, gerade wenn man viel mit if-else-Zeug arbeiten muss. Das hilft ungemein bei der Fehlerbeseitigung.

Ich verwende diesen hier:

function bla() {

  if (dingens) {
    blablabla();
    zeuch();

    if (a == b) {
      das_noch();
      und_das_auch();
    }
  }
  else {
    wat_anderes();
  }
}

Wie Du siehst, steht die schließende Klammer jeweils unter function/if/else. Viele Leute schreiben die öffnende in die nächste Zeile auf gleiche Höhe, dann stehen die Klammern eines Paares immer untereinander und man hat automatisch die fast leere Zeile, die ebenfalls deutlich zur Übersichtlichkeit beiträgt:

function bla()
{
  if (dings)
  {
    mach_das();
  }
  tu_dies();
}

Du wirst auch feststellen, dass die Bereitschaft zur Hilfe zunimmt, wenn Dein Code lesbarer ist.
« Letzte Änderung: 29. Dezember 2010, 11:26:13 von KhrisMUC »

ZAK

  • volljähriger Tentakel
  • *****
  • Beiträge: 503
  • Geschlecht: Männlich
    • Profil anzeigen
Re: Probleme mit Starterpack AGS3
« Antwort #87 am: 29. Dezember 2010, 11:39:31 »
@KhrisMUC
wie du aus meinen vorherigen scrpits ja sehen kannst schreibe (oder kopiere) die scripts auch so das die "klammern" untereinander sind, hatte nur in meiner verzweiflung (und zu faul etwas immer wieder neu zu schreiben) einfach mit zwischen kopiert.
bisweilen sind meine scripts soweit übersichtlich und sortiert....

bin nun dabei die "Items" miteinander zu kombinieren...
...aber ich bekomme das nicht so hin...
ich habe im Inventar teile einer nachricht die ich nun mit hilfe von "kleber" auf ein "poster" bringen möchte, aber um die nachricht auf dem "poster" lesbar zu machen, sollen erst alle teile aufgeklebt sein.
also "benutze" "teil einer nachricht" mit "kleber", dann "benutze" "teil einer nachricht mit kleber" mit "poster" ( ein teil der nachricht verschwindet aus dem "inventar" und das "poster" wechsellt in "poster mit teil einer nachrich". zum schluss( wenn das letzte teil des puzzle zugefügt ist) soll dann im inventar "poster mit nachricht" sein, welches ich dann (mit hilfe von wand, wo das poster aufgehängt wird) lesbar sein.
hat jemand ein script dafür... ??? oder hilfe...
« Letzte Änderung: 29. Dezember 2010, 11:59:16 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 #88 am: 29. Dezember 2010, 12:56:09 »
Was genau funktioniert denn nicht?
Ich würde für jede Teilnachricht zwei Items machen, eins mit und eins ohne Kleber.
Wenn der Kleber mit Teilnachricht X benutzt wird (oder umgekehrt), verschwindet sie aus dem Inventar und wird durch klebrige Teilnachricht X ersetzt.
Das Poster wiederum zählt mit, wie viele Teilnachrichten schon drauf sind. Sprich, jedesmal, wenn man eine klebrige Teilnachricht mit dem Poster benutzt, verschwindet sie und eine Variable wird eins hochgezählt. Danach wird jedesmal überprüft, ob Variable == Anzahl der Teilnachrichten; falls ja, Poster durch fertiges Poster ersetzen.

Wo genau ist da jetzt das Problem? Bist Du zu faul, Dich selbst damit auseinander zu setzen? Oder verstehst Du einfach nicht, wie man programmiert? Ich checks nicht.

ZAK

  • volljähriger Tentakel
  • *****
  • Beiträge: 503
  • Geschlecht: Männlich
    • Profil anzeigen
Re: Probleme mit Starterpack AGS3
« Antwort #89 am: 29. Dezember 2010, 13:15:03 »
nein, zu faul bin ich nicht.... nur noch anfänger (habe so was noch nie gemacht)
habe die "items" mit "Teil der nachricht" und "Teil der nachricht mit kleber" sowie die "dose mit kleber", "offene dose mit kleber" , "pinsel", "pinsel mit kleber" und "Schraubendreher". bekomme ja noch nicht mal hin das ich mit "benutze Schraubendreher" die "dose mit kleber" öffnen kann...
...ich möchte halt mit dem "schraubendreher" die "dose mit kleber" öffnen können, dann mit "benutze pinsel mit doses mit kleber", "pinsel mit kleber" mit "teil der nachricht" und dann "teil der nachricht mit kleber" mit "poster" benutzen.
beim "werkzeugkasten" hat es komischerweise gut geklappt (da habe ich mit "schau" den "schraubendreher" bekommen)
code:
Zitat
function iWerkzeug_Look()
{
   player.Say("Ein Werkzeugkasten.");
      Wait(5);
         if (Game.DoOnceOnly("Ein Schraubendreher!"))
      {
        Wait(5);
        player.Say("...da ist ein Schraubendreher drin!");
        Wait(5);
        PlaySound(4);
        player.AddInventory(iSchraubendreher);
      }
}

beim "Schraubendreher" geht das irgendwie nicht...
Code:
Zitat
function iSchraubendreher_Interact()
{
  if(UsedAction(eActUse))
  Wait(5);
   if (Game.DoOnceOnly("Öffnen"))
    {
     Wait(5);
     player.Say("...dann mache ich die Dose mal au.!");
        Wait(5);
        PlaySound(4);
        player.AddInventory(iKleber02);
      }
}
Ich bin mal kurz weg, mich suchen. Wenn ich zurück komme bevor ich wieder da bin, sagt mir bitte das ich warten soll!