Maniac Mansion Mania Forum

MMM-Werkzeugkiste => Technik => Thema gestartet von: Der Kompaniechef am 11. Juni 2012, 13:26:37

Titel: Inventar öffnen schließen usw.
Beitrag von: Der Kompaniechef am 11. Juni 2012, 13:26:37
Moin wollte mal was wissen:
Ich möchte das man ein handy benutzen kann ohne es mit etwas anderen benutzt werden kann.
z.B. Benutze handy: das Akku ist alle
Außerdem möchte das beim Öffnen einer Truhe den Satz: Die ist abgeschloßen. haben
Bitte schritt für schritt schreiben wie das geht habe keine ahnung davon ;)
Ich benutze Ags 3.2
MfG JPJF
Titel: Re: Inventar öffnen schließen usw.
Beitrag von: KhrisMUC am 12. Juni 2012, 09:26:03
Mit dem Handy sollte es klappen, wenn Du es z.B: "Handy>u" nennst und dann Code für "interact with inventory item" einträgst. Soweit ich weiß sind das die beiden Vorgänge, die fürs Benutzen alleine nötig sind.

Was ist bei der Truhe das Problem? Soll die später mal aufgeschlossen werden können?
Oder soll einfach immer nur der Satz kommen und das wars?
Titel: Re: Inventar öffnen schließen usw.
Beitrag von: Der Kompaniechef am 12. Juni 2012, 14:41:30
Am besten wär ein scriptbeispiel.
Ich habe keinen Plan wie der script bei Inventargegeständen aussieht (öffnen, schließen usw)
Titel: Re: Inventar öffnen schließen usw.
Beitrag von: Kami am 12. Juni 2012, 21:02:02
Du wählst das InventoryItem aus und klickst auf den Blitz bei den Eigenschaften.
Dort klickst du auf "Use inventory on this item" und dann auf die drei Punkt rechts.
Es sollte sich jetzt das GlobalScript geöffnet haben, und du solltest eine neue Funktion sehen:
function iTaschenlampeOff_UseInv()
{

}
Damit hast du das Standardverhalten, nämlich das Ändern des Modus auf BenutzenMit überschrieben.
Dort Schreibst du jetzt rein:
 if( UsedAction(eActUse) )
  {
    player.Say("das Akku ist alle");
  }
  else
  {
    Unhandled_Inventory();
  }
Bei der Truhe wäre es schon wichtig zu wissen, was damit später geschehen soll, auch wenn du beispielsweise das Handy noch aufladen willst oder so, musst du das noch ein bischen erweitern.

Macht dir das Starterpack Probleme, dann findest du hier und in den Sourcen verschiedener Starterpacks aber auf jeden Fall gute Hilfe.
Titel: Re: Inventar öffnen schließen usw.
Beitrag von: 1mal_volltanken am 12. Juni 2012, 23:13:33
Generell funktionieren für die Inventory Items die gleichen Scripts wie auch für die Hotspots und Objects, nur dass es eben aufs Inventory Item bezogen ist.
Wenn Du ein Starterpak hast, kannst Du die Scripts auch per Copy+Paste einsetzen und entsprechend verändern.

Für die Truhe könnte das Script so aussehen:

[ags]
MovePlayer(160,136); FaceDirection(GetPlayerCharacter(), DIR_LEFT);
 
if (UsedAction (A_WALK_TO)) {

}

else if (UsedAction (A_LOOK_AT)) player.Say("Sieht solide aus!");

else if (UsedAction (A_OPEN)) {
  player.Say("Die Truhe ist verschlossen!");
  Wait(10);
  player.Say("Vielleicht brauche ich einen Schlüssel!");
}

else Unhandled();

[/ags]


Ich hoffe mal, dass mir hier kien Syntax-Fehler unterlaufen ist, aber so in etwa kannst Du es übernehmen.
Normalerweise findest Du solche Scripts auch im Starterpak, wenn Du die Rooms und danach die Hotspots, Objects, etc. editierst.


BG
der Volltanker

Titel: Re: Inventar öffnen schließen usw.
Beitrag von: Kami am 13. Juni 2012, 11:28:29
Gerelles:
Es ist manchmal etwas tricky herauszufinden, welches Event das richtige ist. Ich hätte beispielsweise für das einfache Benutzen _Interact erwartet, es ist aber _UseInv. Für andere Aktionen wie Öffnen und Schließen wird es _OtherClick sein. AGS ist an der Stelle nicht so flexibel, dass mann für jede mögliche Aktion genau ein Event hat. Die Starterpacks haben da etwas drumherum gebaut. Es ist daher in der Regel notwendig die benutzte Aktion abzufragen. Dies geschieht bei den neueren Starterpacks mit UsedAction. Auch solltest du nicht vergessen für nicht abgefragte Aktionen irgendetwas zu tun. Hierfür bieten die Starterpacks Funktionen wie Unhadled und Unhandled_Inventory.
Um eine nicht abgeschlossene Truhe zu öffnen musst du zunächst im richtigen Event auf die entsprechende Aktion prüfen. Anschließend gibt es verschiedene Möglichkeiten. Du kannst zum einen den Inhalt der Truhe direkt in dein Inventar übernehmen und/oder die Truhe durch eine offene Truhe austauschen und/oder den Inhalt erst beim einer weiteren Aktion wie z.B. Anschauen der Truhe übernehmen. Verschlossenen Truhen werden noch komplizierter, aber wenn du uns genau sagst, was du mit der Truhe vorhast, dann kann dir sicher jemand ein komplettes Beispiel mit verschließbarer truhe und heraus oder hineintubarem Inhalt heraussuchen oder zusammenstellen.
Titel: Re: Inventar öffnen schließen usw.
Beitrag von: Der Kompaniechef am 13. Juni 2012, 18:38:59
Moin also:
Der code
function iTaschenlampeOff_UseInv()
{

}
Damit hast du das Standardverhalten, nämlich das Ändern des Modus auf BenutzenMit überschrieben.
Dort Schreibst du jetzt rein:

Code:

  if( UsedAction(eActUse) )
  {
    player.Say("das Akku ist alle");
  }
  else
  {
    Unhandled_Inventory();
  }

Hat nicht funktioniert weil 1. eActUse nicht anerkannt wird und 2. Unhandled_Inventory(); laut ags nicht benutzbar ist.
Hab dann den Code so geschrieben:

function iHandy_UseInv()
{
 if( UsedAction(A_USE) )
  {
    player.Say("das Akku ist alle");
  }
  else
  {
    }
  }
Ags meckert jetzt nicht mehr aber es hat keine auswirkung auf das inventar-object
Titel: Re: Inventar öffnen schließen usw.
Beitrag von: Der Kompaniechef am 13. Juni 2012, 18:47:59
sorry für doppel
Ich habe mein problem jetzt gelöst:

function iHandy_Interact()
  {
if (UsedAction (A_USE)) {
    DisplaySpeech(GetPlayerCharacter(),"Das Akku ist leer.");
  } 
  else {
    DisplaySpeech(GetPlayerCharacter(),"Das bringt es nicht.");
  }
}

Kann das Handy jetzt so benutzen wie ich es haben wollte
Titel: Re: Inventar öffnen schließen usw.
Beitrag von: Kami am 13. Juni 2012, 21:01:47
Hat nicht funktioniert weil 1. eActUse nicht anerkannt wird und 2. Unhandled_Inventory(); laut ags nicht benutzbar ist.
Tja, es kommt halt darauf an, welches Starterpack du benutzt... ;-) Aber schön, dass es jetzt tut wie du willst.
Titel: Re: Inventar öffnen schließen usw.
Beitrag von: KhrisMUC am 14. Juni 2012, 02:02:42
UseInv wird sowieso nicht hergenommen, um ein Inventaritem alleine zu benutzen, egal, welches Starterpack man verwendet.

Wie bereits erwähnt, muss man die default action auf "use" setzen, indem man ">u" an den Namen hängt, und dann das Interact-Event verwenden.
Trotzdem macht es einen Unterschied, ob man vorher auf "Benutze" klickt. I.d.R. muss man nämlich nicht vorher auf "Benutze" klicken, um einen Inventargegenstand mit etwas Anderem zu benutzen; es reicht, einfach den Inventargegenstand anzuklicken. In diesem Fall wird jedoch das alleinige Benutzen ignoriert, was man durchaus als Bug in den Starterpacks auslegen kann.

Meines Wissens ist es so, dass bei "Gehe zu" oder "Nimm" ein Klick auf einen Inventargegenstand diesen immer als aktives Item auswählt, während die Abfrage, ob ein IG alleine benutzt werden soll, nur bei vorher ausgewähltem "Benutze" erfolgt.

Übrigens ist es der Akku(mulator).

Brauchst Du noch Hilfe bei der Truhe...?
Titel: Re: Inventar öffnen schließen usw.
Beitrag von: Der Kompaniechef am 14. Juni 2012, 14:07:20
Die truhe macht keine Probleme mehr
Titel: Re: Inventar öffnen schließen usw.
Beitrag von: ZAK am 14. Juni 2012, 15:32:24
ich arbeite mit AGS 3.2 und habe folgendes ausprobiert:

[ags]function iHandy_UseInv()
{
if (player.ActiveInventory == iLadekabel)
  {
    player.LoseInventory(iLadekabel);
    aSound4.Play();
    player.LoseInventory(iHandy);
    aSound4.Play();
    Wait(10);
    aSound1.Play();
    Wait(40);
    player.Say("Ich habe das Ladekabel angschlossen.");
    aSound4.Play();
    player.AddInventory(iHandyLadekabel);
    }
    else if (UsedAction(eActUse))
    {
     Wait(5);
     player.Say("Der Akku ist leer.");
     }
    else Unhandled();
}[/ags]
Titel: Re: Inventar öffnen schließen usw.
Beitrag von: KhrisMUC am 14. Juni 2012, 20:14:41
Und...?
Klappt es nicht, oder was ist das Problem?
Titel: Re: Inventar öffnen schließen usw.
Beitrag von: ZAK am 15. Juni 2012, 08:53:02
Und...?
Klappt es nicht, oder was ist das Problem?
bei mir klappt es wunderbar...
JPJF wollte doch ein Skriptbeispiel...
Titel: Re: Inventar öffnen schließen usw.
Beitrag von: KhrisMUC am 15. Juni 2012, 17:56:34
Das ist natürlich nett, aber bitte poste kein fehlerhaftes Skript mit falscher Einrückung.