Maniac Mansion Mania Forum

MMM-Werkzeugkiste => Technik => Thema gestartet von: Rayman am 04. Januar 2008, 23:29:45

Titel: Gib/Benutze-Aktionen werden mit gewöhnlichen Verben ausgelöst.
Beitrag von: Rayman am 04. Januar 2008, 23:29:45
else if (player.ActiveInventory == inventory[2]) {
  if (MovePlayer(x, y)) {
    FaceDirection(GetPlayerCharacter(), DIR_LEFT);
  }
}
else unhandled();


Sorry, besser konnte ich den Fehler nicht formulieren.

Edit: Wenn ich z.B. einen Gegenstand mit einem Hotspot benutze und dann später irgendein Verb mit dem Hotspot benutze, dann wird dieselbe Aktion freigegeben, die man auch bei der Gegenstand benutzung vorkommt.
Titel: Re: Gib/Benutze-Aktionen werden mit gewöhnlichen Verben ausgelöst.
Beitrag von: Mister L am 05. Januar 2008, 09:52:52
So ganz kapier ich das Problem nicht, aber klingt so als fehlt da ein "else unhandled"  :-\
Poste am Besten mal das Skript.
Titel: Re: Gib/Benutze-Aktionen werden mit gewöhnlichen Verben ausgelöst.
Beitrag von: Kaktus am 05. Januar 2008, 17:50:06
Klingt so, als stünde das if (player.activeinv==xyz)
außerhalb von if (UsedAction (A_USE_INV)) .
Vielleicht hast du irgendwo eine Klammer falsch gesetzt ???
Titel: Re: Gib/Benutze-Aktionen werden mit gewöhnlichen Verben ausgelöst.
Beitrag von: Rayman am 06. Januar 2008, 16:24:42
Mist, jetzt hab ich versehentlich den ersten Post editiert. :o

Aber hab ich in den Code irgendeinen Fehler gemacht?
Titel: Re: Gib/Benutze-Aktionen werden mit gewöhnlichen Verben ausgelöst.
Beitrag von: Link2005 am 06. Januar 2008, 17:14:13
  if (MovePlayer(x, y)) {
Müsste da nicht normalerweise eine Koordinate angegeben sein? ??? also z.B.  if (MovePlayer(12, 34)) {
Titel: Re: Gib/Benutze-Aktionen werden mit gewöhnlichen Verben ausgelöst.
Beitrag von: Bòógieman am 06. Januar 2008, 17:15:36
du musst vorher auf

if (UsedAction (A_USE_INV))

überprüfen, da activeinv das zuletzt ausgewählte inv-item wiedergibt, egal ob es gerade oder zuvor benutzt wird  ;)
Titel: Re: Gib/Benutze-Aktionen werden mit gewöhnlichen Verben ausgelöst.
Beitrag von: Rayman am 06. Januar 2008, 17:20:29
  if (MovePlayer(x, y)) {
Müsste da nicht normalerweise eine Koordinate angegeben sein? ??? also z.B.  if (MovePlayer(12, 34)) {

Ich habe die Koordinaten vorher umgeändert in x und y, bevor ich den Post abgeschickt habe.

du musst vorher auf

if (UsedAction (A_USE_INV))

überprüfen, da activeinv das zuletzt ausgewählte inv-item wiedergibt, egal ob es gerade oder zuvor benutzt wird  ;)

@Bòógieman: Danke, Bòógieman, es hat geklappt! :D ;)
Titel: Re: Gib/Benutze-Aktionen werden mit gewöhnlichen Verben ausgelöst.
Beitrag von: Helpman am 13. Januar 2008, 19:11:26
Hallo, ich habe da so ein ähnliches Problem.
Ich hab bei meinen Object diesen sogenannten USE-Script eingebaut
und wenn ich andere items mit dem Objekt benutze, dann erscheint keine Reaktion. :'(
Was muss man da machen, damit bei andern Items ein Standartkommentar erscheint?
Titel: Re: Gib/Benutze-Aktionen werden mit gewöhnlichen Verben ausgelöst.
Beitrag von: Bòógieman am 13. Januar 2008, 20:12:43
poste mal dein script, mit der beschreibung kann man nicht wirklich viel anfangen  ;)

meinst du mit "sogenannten USE-Script" das hier?
if(UsedAction (A_USE_INV))
?

wenn ja, klingt das ganze so, als ob du nur ein inv-item mit player.ActiveInventory abgefragt hast
im else-zweig musst du Unhandled() verwenden
Titel: Re: Gib/Benutze-Aktionen werden mit gewöhnlichen Verben ausgelöst.
Beitrag von: Rayman am 15. Januar 2008, 21:12:05
Also, ich weiß jetzt auch nicht so genau um welchen Fehler es sich bei dir handelt,
aber ich poste hier nochmal meinen einen Script, den ich Dank Bòógieman's großer Hilfe korrigieren konnte :) :

else if (UsedAction(A_USE_INV)) {
  if (MovePlayer(101, 135)) { 
    FaceDirection(GetPlayerCharacter(), DIR_UP); 
    Wait(5);
  (Your Script);
  }   
else if (player.activeinv == 5) {
  (Your Script);
}
else if (player.activeinv == 6) {
  (Your Script);
}
else if (player.activeinv == 7) {
  (Your Script);
    }
  }
}
else Unhandled();
Titel: Re: Gib/Benutze-Aktionen werden mit gewöhnlichen Verben ausgelöst.
Beitrag von: KhrisMUC am 16. Januar 2008, 01:51:31
So ganz stimmt das aber auch nicht:
  ...
  else if (UsedAction(A_USE_INV)) {
    if (MovePlayer(101, 135)) { 
      FaceDirection(player.ID, DIR_UP); 
      Wait(5);
      ai = player.ActiveInventory.ID;
      if (ai == 5) {
        // code   
      }
      else if (ai == 6) {
        // code
      }
      else if (ai == 7) {
        // code
      }
      else Unhandled();
    }
  }
  else Unhandled();

Ich hab mal aktuellen code benutzt, die Klammern korrigiert und außerdem ein zweites Unhandled eingefügt. Das ist wichtig, da es sonst nicht aufgerufen wird, falls man z.B. InvItem Nr. 8 benutzt. (USE_INV wird benutzt, deswegen wird das untere Unhandled nicht aufgerufen; ein zweites muss rein.)