Autor Thema: Inventar öffnen schließen usw.  (Gelesen 5311 mal)

Der Kompaniechef

  • volljähriger Tentakel
  • *****
  • Beiträge: 689
    • Profil anzeigen
Inventar öffnen schließen usw.
« 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

KhrisMUC

  • Moderator
  • volljähriger Tentakel
  • *****
  • Beiträge: 989
    • Profil anzeigen
Re: Inventar öffnen schließen usw.
« Antwort #1 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?

Der Kompaniechef

  • volljähriger Tentakel
  • *****
  • Beiträge: 689
    • Profil anzeigen
Re: Inventar öffnen schließen usw.
« Antwort #2 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)

Kami

  • Tentakelschleim
  • *
  • Beiträge: 6
    • Profil anzeigen
Re: Inventar öffnen schließen usw.
« Antwort #3 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.
« Letzte Änderung: 13. Juni 2012, 11:05:37 von Kami »

1mal_volltanken

  • Midlife Crisis Tentakel
  • ******
  • Beiträge: 1266
  • Geschlecht: Männlich
  • Traue niemals einem glatzköpfigen Friseur!
    • ICQ Messenger - 327646596
    • Profil anzeigen
Re: Inventar öffnen schließen usw.
« Antwort #4 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

"Tage sind eigentlich wie Nächte...nur nicht ganz so spät!"...hörte ich einmal einen sehr klugen, alten Mann beim Erdnüsse sortieren in der Kneipe sagen, kurz bevor er vom Hocker rutschte.


"Nicht jeder, der aus dem Rahmen fällt, war vorher im Bilde!"

Kami

  • Tentakelschleim
  • *
  • Beiträge: 6
    • Profil anzeigen
Re: Inventar öffnen schließen usw.
« Antwort #5 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.

Der Kompaniechef

  • volljähriger Tentakel
  • *****
  • Beiträge: 689
    • Profil anzeigen
Re: Inventar öffnen schließen usw.
« Antwort #6 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

Der Kompaniechef

  • volljähriger Tentakel
  • *****
  • Beiträge: 689
    • Profil anzeigen
Re: Inventar öffnen schließen usw.
« Antwort #7 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

Kami

  • Tentakelschleim
  • *
  • Beiträge: 6
    • Profil anzeigen
Re: Inventar öffnen schließen usw.
« Antwort #8 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.

KhrisMUC

  • Moderator
  • volljähriger Tentakel
  • *****
  • Beiträge: 989
    • Profil anzeigen
Re: Inventar öffnen schließen usw.
« Antwort #9 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...?

Der Kompaniechef

  • volljähriger Tentakel
  • *****
  • Beiträge: 689
    • Profil anzeigen
Re: Inventar öffnen schließen usw.
« Antwort #10 am: 14. Juni 2012, 14:07:20 »
Die truhe macht keine Probleme mehr

ZAK

  • volljähriger Tentakel
  • *****
  • Beiträge: 503
  • Geschlecht: Männlich
    • Profil anzeigen
Re: Inventar öffnen schließen usw.
« Antwort #11 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]
« Letzte Änderung: 14. Juni 2012, 15:35:49 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: Inventar öffnen schließen usw.
« Antwort #12 am: 14. Juni 2012, 20:14:41 »
Und...?
Klappt es nicht, oder was ist das Problem?

ZAK

  • volljähriger Tentakel
  • *****
  • Beiträge: 503
  • Geschlecht: Männlich
    • Profil anzeigen
Re: Inventar öffnen schließen usw.
« Antwort #13 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...
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: Inventar öffnen schließen usw.
« Antwort #14 am: 15. Juni 2012, 17:56:34 »
Das ist natürlich nett, aber bitte poste kein fehlerhaftes Skript mit falscher Einrückung.