Autor Thema: Problem: Inventargegenstände verschwinden!  (Gelesen 12550 mal)

Mulle The Maniac

  • Gast
Problem: Inventargegenstände verschwinden!
« am: 24. Oktober 2006, 23:23:36 »
Ich hab da eine Frage (die ich schonmal BlueGryphon gestellt, aber wieder vergessen habe!):

Bei meinem und Bernards Starterpack gibt es den Fehler, dass Inventargegenstände einfach so verschwinden, wenn man sie an die MM-Charaktere weitergibt.

Wie lautet der Befehl dazu? Den würde ich gerne löschen, wenn es möglich ist.

Bòógieman

  • International anerkannter Superheld
  • Globaler Moderator
  • alter Tentakel
  • *****
  • Beiträge: 2667
  • Geschlecht: Männlich
  • Grün Tentakel = Running Sushi!
    • Profil anzeigen
Re: Problem: Inventargegenstände verschwinden!
« Antwort #1 am: 25. Oktober 2006, 08:08:12 »
Ich kann zwar jetzt nicht nachsehen, aber ich denke mal, dass du das bei den "interact with inventory"-Scripts der einzelnen Charakteren finden wirst.
Und wenn da nix ist, wird es wohl im Unhandled() sein.

Wird irgendwas in die Richtung LoseInventoryItem und AddInventoryItem sein.
« Letzte Änderung: 25. Oktober 2006, 08:09:22 von Bòógieman »
Schlachtaman Vibrations, UHYEAH!!!
_________________________________

>>>> Ende der Kommunikation <<<<

Kaktus

  • volljähriger Tentakel
  • *****
  • Beiträge: 755
  • Geschlecht: Männlich
  • Waaaah!
    • Profil anzeigen
    • E-Mail
Re: Problem: Inventargegenstände verschwinden!
« Antwort #2 am: 25. Oktober 2006, 11:58:07 »
Such mal im Globalscript nach der Zeile:
GiveInv (ItemGiven, GSlocid);
und entferne sie.

Helfer in der Not

  • Gast
Re: Problem: Inventargegenstände verschwinden!
« Antwort #3 am: 25. Oktober 2006, 12:12:18 »
Der Fehler tritt übrigens nicht im Bernard-Starterpack auf (zumindest nicht in aktuellen Versionen)

Der Fehler beruht auf  Skript-Überresten aus MMD, wo der Gib-Befehl dazu führte das ein Gegenstand ins Inventar der anderen Figur wechselte (worauf man aber bei nur einer Spielbaren Figur keinen Zugriff mehr hat.)
Erstmals bekannt wurde er nach der Veröffentlichung von Episode 4.

Seit längeren gibt es auch schon einen guten Lösungsansatz: http://www.adventure-treff.de/forum/viewtopic.php?p=104107&highlight=giveinv#104107
Zitat von: khrismuc
Ich hab den betreffenden Teil im global script gefunden:    else if ((GSagsusedmode == 4) && (GetLocationType (mouse.x, mouse.y) == 2) && isAction (A_GIVE_TO) && (GetCharacterAt (mouse.x, mouse.y) < 7))
    {
      SetLabelColor (ACTION, 0, ActionLabelColorHighlighted);
      if (GoToCharacter (GSlocid, 0, 1, 2))
      {
        ItemGiven = character [GetPlayerCharacter ()].activeinv;
        if (IsInteractionAvailable (mrx - GetViewportX (), mry - GetViewportY (), MODE_USEINV) == 1)
        {
          RunCharacterInteraction (GSlocid, MODE_USEINV);
        }
        GiveInv (ItemGiven, GSlocid);
        character [GetPlayerCharacter ()].activeinv = -1;
      }
      SetAction (A_DEFAULT);
    }
1. Man kann nur den Charakteren 1-6 etwas geben (klar), muss man also ändern (1. if-Abfrage)
2. Man muss die Character-Interaction Use inventory on character benutzen, nicht AnyClick.
3. Durch Abfrage einer GlobalInt muss man gegebenenfalls verhindern, dass das Item den Besitzer wechselt.
Man könnte das script auch pauschal so ändern:        if (IsInteractionAvailable (mrx - GetViewportX (), mry - GetViewportY (), MODE_USEINV) == 1)
        {
          RunCharacterInteraction (GSlocid, MODE_USEINV);
        }
        else
        {
          GiveInv (ItemGiven, GSlocid);
          character [GetPlayerCharacter ()].activeinv = -1;
        }
      }
Wenn der NPC das Item tatsächlich erhalten soll, entweder keine Interaction einbauen, oder es ihm in dieser übergeben.

Man sollte halt keine veralteten Versionen als Basis für sein Starterpack benutzen.

Mulle The Maniac

  • Gast
Re: Problem: Inventargegenstände verschwinden!
« Antwort #4 am: 25. Oktober 2006, 15:57:37 »
Danke!

Kaktus

  • volljähriger Tentakel
  • *****
  • Beiträge: 755
  • Geschlecht: Männlich
  • Waaaah!
    • Profil anzeigen
    • E-Mail
Re: Problem: Inventargegenstände verschwinden!
« Antwort #5 am: 25. Oktober 2006, 16:24:43 »
Ich habe die Zeie aus khrismucs script:
        RunCharacterInteraction (GSlocid, MODE_USEINV);
durch
         RunCharacterInteraction (GSlocid, eModeUsermode1);,
ersetzt.
Damit kann man unterschiedliche Aktionen für Benutzen (use inv on char) und Geben (usermode 1) einstellen was mit dem original Script von khrismuc anscheinend nicht möglich ist.

edit: ich habe schwachsinn geschrieben, es ist doch mit khrismucs script mölich, unterschiediche aktionen für geben und benutzen einzustellen. überlest diesen Post einfach.
« Letzte Änderung: 25. Oktober 2006, 17:29:19 von Kaktus »

fireorange

  • Ehrwürdiger Tentakel
  • ********
  • Beiträge: 3992
  • Geschlecht: Weiblich
    • Profil anzeigen
Re: Problem: Inventargegenstände verschwinden!
« Antwort #6 am: 23. April 2020, 20:58:11 »
Kann mir mal jemand erklären, wie ich das Problem (Gib Gegenstand an Person -> verliere Gegenstand für immer) im aktuellen Starterpack löse? Es müsste die neueste Version des Bernard-Starterpacks sein, wenn ich mich nicht irre. Im Skript finde ich aber kein GSlocid, die Skriptsprache hat sich wohl verändert.

Edit: Ich vermute, dass es sich hierbei um die entsprechende Stelle im GS handelt (ich weiß nicht, ob es der vollständige benötigte Ausschnitt ist)? Muss ich "null" irgendwie ersetzen?

      if (GoToCharacter (charAt, 0, 1, 2))
      {
if ( null != invItem )
ItemGiven = invItem.ID;

        if (IsInteractionAvailable (mrx - GetViewportX (), mry - GetViewportY (), eModeUseinv) == 1)
        {
charAt.RunInteraction(eModeUseinv);
        }
        GiveInv (ItemGiven, charAt);
        invItem = null;
      }
      SetAction (eActDefault);
« Letzte Änderung: 23. April 2020, 21:15:22 von FireOrange »

Cmdr

  • volljähriger Tentakel
  • *****
  • Beiträge: 743
    • Profil anzeigen
Re: Problem: Inventargegenstände verschwinden!
« Antwort #7 am: 23. April 2020, 22:14:23 »
Ja, die Starterpacks sind furchtbar geschrieben, ich blicke da auch nie durch.
Ich habe die betroffene Stelle auskommentiert und benutze das Gib-Verb wie die anderen auch.

fireorange

  • Ehrwürdiger Tentakel
  • ********
  • Beiträge: 3992
  • Geschlecht: Weiblich
    • Profil anzeigen
Re: Problem: Inventargegenstände verschwinden!
« Antwort #8 am: 23. April 2020, 22:27:08 »
Hm, wenn ich es auskommentiere, behalte ich zwar das Item, dafür jedoch noch immer keine Reaktion. Die Reaktion, die ich bei "Benutze mit" erhalte, bleibt bei "Gib" aus.

Bei Meteorhead (ab TNS 1 bzw. 13) habe ich den Gib-Button im GS dazu veranlasst, dass er den Befehl "Benutze" ausführt. Keine Ahnung, wie ich das damals gemacht habe. Aber es ist vermutlich auch nicht die eleganteste Lösung... hoffe ich!

Cmdr

  • volljähriger Tentakel
  • *****
  • Beiträge: 743
    • Profil anzeigen
Re: Problem: Inventargegenstände verschwinden!
« Antwort #9 am: 24. April 2020, 05:48:25 »
Entferne einmal in der Methode unhandled_event die Abfrage hinter dem letzten else, dann sollte auch bei Gib ein "Besser nicht." kommen. Ansonsten ist noch irgendwo was krumm.

Cone Arex

  • Mod
  • alter Tentakel
  • **
  • Beiträge: 2323
  • Geschlecht: Männlich
  • Skandal-Entwickler und Idiot
    • Profil anzeigen
    • Conequest
Re: Problem: Inventargegenstände verschwinden!
« Antwort #10 am: 24. April 2020, 06:01:02 »
Lol, genau dieses dämliche Standardverhalten hatte bei Berthold den einzigen Game Breaker ausgelöst (das mit dem Abspann zähle ich nicht).

Wie Cmdr bereits gesagt hat, kommentier die beiden Zeilen aus:
GiveInv (ItemGiven, charAt);
invItem = null;

Danach kannst die Gib-Aktionen ganz normal bei eActGiveTo schreiben. Hast du vielleicht zuviel auskommentiert, das es jetzt trotzdem nicht funktioniert?

EDIT:
Zitat
Es müsste die neueste Version des Bernard-Starterpacks sein
Definitiv nicht. Es muss eine ältere Version sein, als dass das Standardverhalten das der Spieler sich automatisch an der Figur ausrichtet mit der er interagiert, vor einiger Zeit rausgeworfen wurde.

Ich bin übrigens dafür dass wir das Standardverhalten "Spieler verliert Gegenstand, wenn er ihn einer Person gibt" aus den SPs rauswerfen.

EDIT Nummer 2:
Hast du das SP von der MMM-Website gezogen, statt von GitHub? Dann hast du tatsächlich das aktuellste Release, nicht aber die aktuellste Version.
« Letzte Änderung: 24. April 2020, 06:16:02 von Cone Arex »


Folge mir auf X und itch.io

Cmdr

  • volljähriger Tentakel
  • *****
  • Beiträge: 743
    • Profil anzeigen
Re: Problem: Inventargegenstände verschwinden!
« Antwort #11 am: 24. April 2020, 07:48:39 »
Ich bin übrigens dafür dass wir das Standardverhalten "Spieler verliert Gegenstand, wenn er ihn einer Person gibt" aus den SPs rauswerfen.

Absolut! Das Verhalten nützt nur bei Mehrspieler-Episoden und selbst da ist es besser, das nochmal explizit zu definieren.
Bei der Interaktion mit NPCs macht das überhaupt gar keinen Sinn.

fireorange

  • Ehrwürdiger Tentakel
  • ********
  • Beiträge: 3992
  • Geschlecht: Weiblich
    • Profil anzeigen
Re: Problem: Inventargegenstände verschwinden!
« Antwort #12 am: 24. April 2020, 17:46:43 »
Yay, Erfolg! Offenbar hatte ich den Gib-Befehl bisher (oder zumindest bei meinen letzten Spielen) gar nicht richtig definiert, weil nur "eActUseInventory" mit der entsprechenden Reaktion verknüpft war. Wenn ich eActGiveTo nochmal einzeln aufführe funktioniert es aber. Auch wenn es etwas umständlich ist... aber bei einer Mini-Episode wenigstens eine überschaubare Arbeit.

Danach kannst die Gib-Aktionen ganz normal bei eActGiveTo schreiben. Hast du vielleicht zuviel auskommentiert, das es jetzt trotzdem nicht funktioniert?

Doch, genau diese beiden Zeilen hatte ich auskommentiert. Das hilft auch gegen das Item-Sterben. Aber ein Problem bleibt: Die Charaktere ändern ihre "Face-Direction". Genau wie die Jugendlichen bei MMM, wenn ein Item-Tausch stattfindet. Und Marcy dreht zudem eine kleine Runde, läuft erst am Charakter vorbei und dann wieder zurück. Das Problem war mir auch schon beim Skripten der Meteorhead-Episoden aufgefallen.

Hast du das SP von der MMM-Website gezogen, statt von GitHub? Dann hast du tatsächlich das aktuellste Release, nicht aber die aktuellste Version.

Vermutlich habe ich tatsächlich die entsprechende Version von der Webseite heruntergeladen. Ich weiß es aber nicht mehr sicher, da ich ebenso GitHub geöffnet hatte.

Cone Arex

  • Mod
  • alter Tentakel
  • **
  • Beiträge: 2323
  • Geschlecht: Männlich
  • Skandal-Entwickler und Idiot
    • Profil anzeigen
    • Conequest
Re: Problem: Inventargegenstände verschwinden!
« Antwort #13 am: 24. April 2020, 18:32:31 »
Yay, Erfolg! Offenbar hatte ich den Gib-Befehl bisher (oder zumindest bei meinen letzten Spielen) gar nicht richtig definiert, weil nur "eActUseInventory" mit der entsprechenden Reaktion verknüpft war. Wenn ich eActGiveTo nochmal einzeln aufführe funktioniert es aber. Auch wenn es etwas umständlich ist... aber bei einer Mini-Episode wenigstens eine überschaubare Arbeit.
So ist es ja auch gedacht. Ein Block für GiveTo und ein Block für UseInv. Wenn du beides gleich behandeln willst, brauchst auch nicht alles doppelt zu machen. (Sollst du eh nicht. Code-Redundanz ist die Wurzel allen Übels.) Ändere einfach die Bedingung für den Block:
if (UsedAction(eActGiveTo) || UsedAction(eActUseInv))

Aber ein Problem bleibt: Die Charaktere ändern ihre "Face-Direction". Genau wie die Jugendlichen bei MMM, wenn ein Item-Tausch stattfindet. Und Marcy dreht zudem eine kleine Runde, läuft erst am Charakter vorbei und dann wieder zurück. Das Problem war mir auch schon beim Skripten der Meteorhead-Episoden aufgefallen.
Dann hast du definitiv eine alte Version. Das Standardverhalten habe ich schon Oktober 2017 rausgeworfen. Du musst an zwei Stellen die Abfrage nach  if (GoToCharacter (charAt, 0, 1, 2)) entfernen.


Folge mir auf X und itch.io

fireorange

  • Ehrwürdiger Tentakel
  • ********
  • Beiträge: 3992
  • Geschlecht: Weiblich
    • Profil anzeigen
Re: Problem: Inventargegenstände verschwinden!
« Antwort #14 am: 24. April 2020, 19:19:32 »
Ach ja, so habe ich das früher auch schon mal gemacht. Ich wollte "if (UsedAction(eActGiveTo)" und "UsedAction(eActUseInv))" mit einem && verknüpfen. Wie schnell "man" doch Dinge verlernt... ::) ;D

Und die Global-Script-Anpassung hat ebenfalls funktioniert. Damit dürfte sich das Problem erledigt haben. Danke!

Dann hast du definitiv eine alte Version. Das Standardverhalten habe ich schon Oktober 2017 rausgeworfen. Du musst an zwei Stellen die Abfrage nach  if (GoToCharacter (charAt, 0, 1, 2)) entfernen.

Das versteht sich vermutlich von selbst, wenn die aktuellste Version auf der Website aus dem Jahr 2012 stammt. ;)

"Bernard Starterpack - Bernards Haus jetzt auch für die momentan aktuelle AGS-Version 3.21"

Das müsste die Version sein, die ich heruntergeladen habe.