Autor Thema: Hilfe bei Script genommenes Item erscheint erneut?  (Gelesen 5787 mal)

dridrops

  • Tentakelschleim
  • *
  • Beiträge: 5
    • Profil anzeigen
Hilfe bei Script genommenes Item erscheint erneut?
« am: 17. Juni 2018, 13:59:53 »
Hallo zusammen,
bin neu hier und habe mal begonnen meine Ideen für ein MMM Projekt zu verwirklichen bzw erstmal zu testen.
Ich arbeite mit dem AGS 3.4.1 und dem SP vom dave: Dave-SP v1.1 AGS 3.4 (v1.1).
Das man zb. mit einem Schraubendreher eine Klemmende Schublade aufbekommt und ähnliches das läuft.
Nun möchte ich aber den Schraubendreher in einem Schrank oder so verstecken, funktioniert auch soweit.
Nehme ich ihn aber heraus, schließe die Tür öffne sie erneut ist ein weiterer Schraubendreher da.
Wie kann ich das verhindern?

Weitere Idee beim öffnen einer weiteren Schranktür, soll was herausfallen und man erst dran kommen wenn
diese Tür verschlossen wurde, hier habe ich noch keine genaue Idee.

Desweiteren soll Sandy Dave helfen, aber erst nachdem Dave sie gefunden hat. Sprich eine bestimmte Aktion voraus geht
Die Aktion wäre das Dave ein Objekt findet mit diesem Spricht danach soll Sandy aus diesem Raum im Spiel Starten und Das Objekt verschwunden sein natürlich auch nicht wieder erscheinen wenn man an den Ort zurück kehrt. 

Bedanke mich schon mal für jede Hilfe und oder Script beispiele.

Cone Arex

  • Mod
  • alter Tentakel
  • **
  • Beiträge: 2326
  • Geschlecht: Männlich
  • Skandal-Entwickler und Idiot
    • Profil anzeigen
    • Conequest
Re: Hilfe bei Script genommenes Item erscheint erneut?
« Antwort #1 am: 17. Juni 2018, 15:33:43 »
Willkommen im Forum.

Zitat
Nehme ich ihn aber heraus, schließe die Tür öffne sie erneut ist ein weiterer Schraubendreher da.
Wie kann ich das verhindern?
Du musst überprüfen, ob der Schraubenzieher bereits genommen wurde. Dafür gibt es grundsätzlich zwei Möglichkeiten:

1. Du überprüfst, ob der Spieler den Gegenstand im Inventar hat. Das geht ganz leicht.
if (player.HasInventory(iName))
{
  // Code um den Gegenstand zu nehmen.
}
else
{
  // Code wenn der Gegenstand bereits genommen wurde.
}
Statt iName musst den jeweiligen Namen des Items eintragen.

2. Du legst eine boolische Variable an und überprüfst den Wert dieser Variable.
bool hatSchraubenzieher;Der Teil deklariert die Variable und kommt an den Anfang dem Room-Scripts, also noch vor der ersten function.

Und dann wie oben weiter.
if (!hatSchraubenzieher)
{
  // Code um den Gegenstand zu nehmen.
  // ...
  hatSchraubenzieher = true;
}
else
{
  // Code wenn der Gegenstand bereits genommen wurde.
}
Wichtig ist dann natürlich, die Variable auf true zu setzen, sobald der Gegenstand genommen wurde.
Die erste Methode ist ideal, wenn der Spieler den Gegenstand das ganze Spiel über behält. Wenn man die Gegenstand verliert oder verlieren kann, muss die zweite Methode verwendet werden.

Zitat
Weitere Idee beim öffnen einer weiteren Schranktür, soll was herausfallen und man erst dran kommen wenn
diese Tür verschlossen wurde, hier habe ich noch keine genaue Idee.
Habe ich das richtig verstanden: Der Spieler öffnet eine Schranktür -> nichts passiert. Anschließend schließt er die Schranktür wieder -> etwas fällt heraus? In dem Fall einfach eine boolische Variable anlegen wie oben (z.B. bool istRausgefallen;) und in der Schließen-Verzweigung dann soetwas schreiben:
...
else if (UserAction(eActClose))
{
  Wait(5);
  if (!istRausgefallen)
  {
    objectName.Visible = true;
    istRausgefallen = true;
  }
  // Ab hier normal weiter, als wäre es bereis rausgefallen.
}
...
Ich nehme an, du realisiert das herausfallende Objekt als object. Dann musst du es einfach nur mittels Visible einschalten.

Zitat
Desweiteren soll Sandy Dave helfen, aber erst nachdem Dave sie gefunden hat. Sprich eine bestimmte Aktion voraus geht
Die Aktion wäre das Dave ein Objekt findet mit diesem Spricht danach soll Sandy aus diesem Raum im Spiel Starten und Das Objekt verschwunden sein natürlich auch nicht wieder erscheinen wenn man an den Ort zurück kehrt.
Ich habe jetzt nicht so ganz verstanden, was genau passieren soll, sobald Dave mit den Objekt interagiert hat. (Mit Objekten "sprechen" ist afaik nicht möglich.) So das Objekt verschwinden und Sandy stattdessen erscheinen oder ist Sandy einfach in einem Raum und hilft Dave erst, sobald mit dem Objekt interagiert wurde? Oder soll der Spieler dann Sandy steuern?


Folge mir auf X und itch.io

Cmdr

  • volljähriger Tentakel
  • *****
  • Beiträge: 751
    • Profil anzeigen
Re: Hilfe bei Script genommenes Item erscheint erneut?
« Antwort #2 am: 17. Juni 2018, 18:33:23 »
(Mit Objekten "sprechen" ist afaik nicht möglich.)

Das ist so nicht ganz richtig.
Richtig wäre :
Das "sprechen" mit Objekten ist in den Starterpacks codeseitig deaktiviert und für einen Anfänger nicht so einfach lösbar.
« Letzte Änderung: 17. Juni 2018, 18:40:54 von Cmdr »

dridrops

  • Tentakelschleim
  • *
  • Beiträge: 5
    • Profil anzeigen
Re: Hilfe bei Script genommenes Item erscheint erneut?
« Antwort #3 am: 17. Juni 2018, 20:19:54 »
Erstmal danke für die Hilfen, werde mich gleich ran machen und testen.
Möchte halt nit zuviel verraten falls ich auf die Idee komme es zu veröffentlichen.
Heist aber ich muss das bei jedem Objekt machen was ich ins Inventar nehmen will, welche durch visible erst erscheinen sollen?
Beispiel 1 von dir kommt bei die zu öffnende Tür?
Ich teste mal, mal sehen was ich raus bzw hin bekomme.

Beim 2ten Hilferuf ist es das das Objekt ( ja ich verwirkliche es mit Objekte) durch öffnen der Schranktür
heraus fällt man aber erst dran kommt wenn sie geschlossen ist. Mit Visible kann ich das soweit verwirklichen muss aber
auch hier verhindern das der Gegenstand immer wieder erscheint.

Wegen Sandy, da steckt sie (Objekt) in dem Strahlenschutzanzug, wird irgendwann gefunden und soll dann mit gespielt werden können.
Wenn es zu umständlich ist das der Strahlenschutzanzug (Sandy) mir antwortet bzw ich ein richtiges Gespräch führen kann dann reicht
es mir wenn Dave allein was spricht das bekomme ich hin.

Danke
 

Cmdr

  • volljähriger Tentakel
  • *****
  • Beiträge: 751
    • Profil anzeigen
Re: Hilfe bei Script genommenes Item erscheint erneut?
« Antwort #4 am: 17. Juni 2018, 21:17:57 »
Wenn der Strahlenanzug Sandy sein soll und auch reden soll, ist es besser, wenn du wirklich dafür Sandy nimmst und ihr eine neue View zuweist, die eben den Strahlenanzug darstellt.

dridrops

  • Tentakelschleim
  • *
  • Beiträge: 5
    • Profil anzeigen
Re: Hilfe bei Script genommenes Item erscheint erneut?
« Antwort #5 am: 17. Juni 2018, 21:26:45 »
So habe das mit dem"if (player.HasInventory(iName))" getestet. Nee entweder habe ich was falsch verstanden oder
es ist noch nicht so leicht wie gehofft.
Vielleicht liegt es daran das ich nicht genau weis wo der Code hinkommt oder das ich nicht weis ob ich anstatt "// Code um den Gegenstand zu nehmen."
und "// Code wenn der Gegenstand bereits genommen wurde."was anderes eintragen soll und wenn halt nicht weis was.
Kurz um es hat nicht Funktioniert.

So sieht mein Code zum Aufnehmen eines Gegenstandes aus, hab auch keine Idee wie ein Code aussehen soll wenn der Gegenstand bereits aufgenommen wurde.
function oSchraubendreher_AnyClick()
{
  if (any_click_move(200, 122, eDirectionUp))
  {
     if (UsedAction(eActLookAt))
     {
     Wait(5);
     player.Say("Cool ein Schraubendreher. Kann man immer gebrauchen!");
         }
          else if (UsedAction(eActPickUp))
         {
          oSchraubendreher.Visible = false;
          player.AddInventory(iSchraubendreher);
         }
       else Unhandled();
    }
}

@Cmdr
danke. nach der Unterhaltung bzw Entdeckung von Sandy soll sie normal erscheinen.
denke erstmal ein Problem nach dem anderen lösen. Bin heut etwas schwer von begriff.

Cmdr

  • volljähriger Tentakel
  • *****
  • Beiträge: 751
    • Profil anzeigen
Re: Hilfe bei Script genommenes Item erscheint erneut?
« Antwort #6 am: 17. Juni 2018, 21:52:46 »
Ok, eins nach dem anderen. Also erstmal dein Code zum nehmen des Objektes.
Als allererstes versuche einmal, deinen Code richtig einzurücken - das macht es gleich viel übersichtlicher.
Die geschweiften Klammern (öffnende und schließende) die zusammen gehören, gehören übereinander, alles was darin ist, mit einem Tabulator eingerückt.
Kann allerdings auch sein, dass das Forum deine Formatierung zerstört hat - in dem Fall ignorier meinen Tipp einfach.

function oSchraubendreher_AnyClick()
{
  if (any_click_move(200, 122, eDirectionUp))
  {
     if (UsedAction(eActLookAt))
     {
       Wait(5);
       player.Say("Cool ein Schraubendreher. Kann man immer gebrauchen!");
     }
     else if (UsedAction(eActPickUp))
     {
          oSchraubendreher.Visible = false;
          player.AddInventory(iSchraubendreher);
     }
       else Unhandled();
    }
}


Wenn ich das richtig verstanden habe, willst du, dass oSchraubendreher nicht mehr erscheint, wenn der Spieler ihn schon hat. In dem Fall musst du an der Stelle, an der das Objekt sichtbar gestellt wird, die Abfrage einbauen - also beim Öffnen der Schublade etc:

[...]
if(!player.HasInventory(iSchraubendreher))
{
   oSchraubendreher.Visible = true;
}
[...]

Das "!" in der if-Klammer vor dem player.HasInventory... ist eine Negation. Da bedeutet, dass der Block nur ausgeführt wird, wenn der Spieler den Schraubendreher NICHT hat.

dridrops

  • Tentakelschleim
  • *
  • Beiträge: 5
    • Profil anzeigen
Re: Hilfe bei Script genommenes Item erscheint erneut?
« Antwort #7 am: 19. Juni 2018, 18:58:39 »
Danke das hat funktioniert.
Auch danke für den Tipp mit einrücken und den Klammern. Da durch erspare ich mir einiges an Arbeit und Fehlersuche.
Somit und mit .visible ist mein 2ter Punkt auch abgearbeitet.

Jetzt wäre noch das mit dem Char der erst nach einer bestimmten Aktion erscheinen soll.
Erst als dieser Strahlenschutzanzug. Nach der Aktion Spielbar in richtiger Gestallt.

Cone Arex

  • Mod
  • alter Tentakel
  • **
  • Beiträge: 2326
  • Geschlecht: Männlich
  • Skandal-Entwickler und Idiot
    • Profil anzeigen
    • Conequest
Re: Hilfe bei Script genommenes Item erscheint erneut?
« Antwort #8 am: 19. Juni 2018, 19:11:42 »
Charakter in einen Raum setzen:
CharakterName.ChangeRoom(Raumnummer, optionale X-Koordinate, optionale Y-Koordinate, optionale Blickrichtung);
Charaktergrafik ändern:
CharakterName.ChangeView(ViewName oder Nummer);
CharakterName.SpeechView = ViewName oder Nummer;

Charakter zur spielbaren Figur machen:
CharakterName.SetAsPlayer();
« Letzte Änderung: 19. Juni 2018, 19:13:16 von Cone Arex »


Folge mir auf X und itch.io

KhrisMUC

  • Moderator
  • volljähriger Tentakel
  • *****
  • Beiträge: 989
    • Profil anzeigen
Re: Hilfe bei Script genommenes Item erscheint erneut?
« Antwort #9 am: 21. Juni 2018, 14:41:32 »
Da AGS den Status von Objekten über das Verlassen des Raums hinaus speichert, sind Variablen oder andere Checks i.d.R. nicht notwendig, wenn man die Objekte richtig plaziert und entsprechende Baselines setzt.

Mit anderen Worten, die Schranktür sollte ein Objekt sein, dass das Schraubendreher-Objekt verdeckt; wenn man die Schranktür nun öffnet (und sich das Schranktür-Objekt verändert), wird der Schraubendreher automatisch sichtbar und kann damit mitgenommen werden. Er muss also nicht manuell sichtbar gemacht werden, und damit hat sich der Bug bzw. haben sich die Checks erledigt.

Sprechen mit einem Objekt ist problemlos möglich, wenn man einfach stattdessen einen Charakter nimmt. Ich würde einfach den Strahlenschutz-Charakter in den Raum stellen und auf die Sprech-Aktion reagieren.

Cmdr

  • volljähriger Tentakel
  • *****
  • Beiträge: 751
    • Profil anzeigen
Re: Hilfe bei Script genommenes Item erscheint erneut?
« Antwort #10 am: 21. Juni 2018, 16:34:54 »
Da AGS den Status von Objekten über das Verlassen des Raums hinaus speichert, sind Variablen oder andere Checks i.d.R. nicht notwendig, wenn man die Objekte richtig plaziert und entsprechende Baselines setzt.

Mit anderen Worten, die Schranktür sollte ein Objekt sein, dass das Schraubendreher-Objekt verdeckt; wenn man die Schranktür nun öffnet (und sich das Schranktür-Objekt verändert), wird der Schraubendreher automatisch sichtbar und kann damit mitgenommen werden. Er muss also nicht manuell sichtbar gemacht werden, und damit hat sich der Bug bzw. haben sich die Checks erledigt.

Das setzt allerdings voraus, dass die geschlossene Schranktür ein Objekt darstellt, während die offene Tür in den Hintergrund eingearbeitet ist.
In den MMM-Starterpacks ist jedoch meist das umgekehrte der Fall.

Sprechen mit einem Objekt ist problemlos möglich, wenn man einfach stattdessen einen Charakter nimmt. Ich würde einfach den Strahlenschutz-Charakter in den Raum stellen und auf die Sprech-Aktion reagieren.

Wie bereits gesagt macht es eh nur Sinn, den Strahlenanzug als Charakter zu realisieren, insbesondere wenn dieser sprechen und sich bewegen soll.
Am besten also Sandy nehmen und wie von Cone beschrieben die View auf den Strahlenanzug ändern.

dridrops

  • Tentakelschleim
  • *
  • Beiträge: 5
    • Profil anzeigen
Re: Hilfe bei Script genommenes Item erscheint erneut?
« Antwort #11 am: 21. Juni 2018, 18:21:59 »
Danke für Tipps, werde die nächsten Tage nicht zum Testen kommen sobald ich soweit bin gebe ich rückmeldung.
Nochmal Danke