Hauptmenü

Neuigkeiten:

Bitte unterstützt uns und bestellt über diese Links bei Amazon  oder HumbleBumble!

FaceCharacter-Bug behoben, aber trotzdem noch drin

Begonnen von fireorange, 07. Mai 2010, 12:13:46

Vorheriges Thema - Nächstes Thema

fireorange

Komische Situation, ich habe sowohl den FaceCharacter-Bug als auch den SetActiveInventory-Bug nach Anleitung aus dem AT behoben, wie ich es immer gemacht habe. Doch diesmal tritt folgender Fehler weiterhin auf :( :

Zitat von: Helli78 in 07. Mai 2010, 04:47:32Übrigens kommt dort auch folgende Meldung, ich weiß nicht, obs an mir (evtl. schnelles Mausklicken??) lag....

---------------------------
Adventure Game Studio
---------------------------
An error has occured. Please contact the game author for support, as this
is likely to be a scripting error and not a bug in AGS.
(ACI version 2.72.920)

in Global script (line 926)
from Global script (line 945)
from Global script (line 1497)

Error: FaceCharacter: characters are in different rooms

---------------------------
OK   
---------------------------


Hab ich was übersehen? :-\ Ich verstehs gerade net.

Bòógieman

möglicherweise machst du ja wirklich ein FaceCharacter auf einen char der nicht im selben raum ist?
Schlachtaman Vibrations, UHYEAH!!!
_________________________________

>>>> Ende der Kommunikation <<<<

fireorange

Das bezweifle ich irgendwie, sonst würde das wahrscheinlich bei jedem Durchspielen passieren.

Na ja, nochmal zum Gesamtüberblick, ich habe folgende zwei Bugs behoben:

Zitat von: Bissiger Witzbold
--------
// if the mode is useinv and the mouse is over the active inv (like "use knife on knife")
    }
    else
    {
      used_action = global_action;
      if (GetCursorMode () == 2)
      {
        if (isAction (A_USE) && IsInventoryInteractionAvailable (GSlocid, MODE_USE) == 1)
        {
          SetLabelColor (ACTION, 0, ActionLabelColorHighlighted);
          RunInventoryInteraction (GSlocid, MODE_USE);
          SetAction (A_DEFAULT);
        }
       else if (GetInvAt (mouse.x, mouse.y) >= 0) SetActiveInventory (GSlocid);
      }
      else
      {
        GSagsusedmode = GetCursorMode ();
        SetLabelColor (ACTION, 0, ActionLabelColorHighlighted);
        if (GetInvAt (mouse.x, mouse.y) >= 0) RunInventoryInteraction (GSlocid, GetCursorMode ());
        SetAction (A_DEFAULT);
      }
    }
  }
  else if (button == RIGHTINV)
--------


Zitat von: Roccound zwar gibts in der Funktion unhandled_event nach dem grünen auskommentierten code so rund um zeile 2000 eine Zeile da steht:
if (type == 2 || type == 6) FaceCharacter (GetPlayerCharacter (), GetCharacterAt (mouse.x, mouse.y));

diese ersetzen durch:

if (type == 2 || type == 6)
    {
    if(GetLocationType(mouse.x,mouse.y)==2)
FaceCharacter (GetPlayerCharacter (), GetCharacterAt (mouse.x, mouse.y));
    }


dann sollte der bug nicht mehr auftreten

1mal_volltanken

Was häufig passieren kann, ist, dass evtl. auch die Charakter-ID vom Charakter-Editor und im Script nicht übereinstimmen. Ganz besonders häufig hatte ich das bei Bernard, weil er offiziell ohne H geschrieben wird, aber in den Starterpacks beim Script-Namen MIT H geschrieben wurde.


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!"

Rayman

Waren die Script-Names der Chars und auch die RoomNumbers stimmig?

Notfalls am Besten den Script durch einen Ähnlichen ersetzen, dann müsste auch der Bug nicht
mehr vorkommen.

fireorange

Rayman, ich weiß leider net, an welcher Stelle das passiert ist und kann auch net sagen, ob es ein spezielles Skript war. Helli konnte es ja auch nicht haargenau rekonstruieren.

Tribble

Zitat von: 1mal_volltanken in 07. Mai 2010, 14:25:43
Was häufig passieren kann, ist, dass evtl. auch die Charakter-ID vom Charakter-Editor und im Script nicht übereinstimmen.
Dass dürfte eigentlich nicht der Grund sein. Denn wenn eine fehlerhafte (sprich im Spiel nicht vorhandene) Char-ID benutzt wird meckert AGS schon beim erstellen des Skriptes.

Zitat von: 1mal_volltanken in 07. Mai 2010, 14:25:43Ganz besonders häufig hatte ich das bei Bernard, weil er offiziell ohne H geschrieben wird, aber in den Starterpacks beim Script-Namen MIT H geschrieben wurde.
*seufz* Wie oft haben wir diesen Fehler jetzt schon beseitigit?
Don't feed the Troll-Haus

rulaman

#7
Bau doch mal folgendes in die FaceCharacter-Funktion ein:


if ( player.Room != character.Room )
{
   player.Say("Fehler* Spieler nicht im selben Raum");
}

Du kannst auch (AGS3 vorrausgesetzt) einen Breakpoint dorthin setzen.

---

Poste doch mal die Zeilen um

in Global script (line 926)
Baden ist die einzige Möglichkeit, den Dreck der Füße an den Hals zu bekommen.

fireorange

Sorry für die späte Antwort, hatte noch andere Sachen zu korrigieren. ;) In den entsprechenden Zeilen steht:

    // characters only face each other after the moving character arrived at the target point
    if (NPCfacesplayer == 1)  FaceCharacter (charid, playerchar);
    FaceCharacter (playerchar, charid);
  }
  return arrived;
}


AGS 3 verwende ich für MMM nach wie vor noch net. ;)

fireorange

Zitat von: rulaman in 09. Mai 2010, 20:11:01
Bau doch mal folgendes in die FaceCharacter-Funktion ein:


if ( player.Room != character.Room )
{
   player.Say("Fehler* Spieler nicht im selben Raum");
}

Da ich den Fehler net beheben konnte, werde ich das wohl tun müssen. Aber wo genau muss ich das jetzt einfügen oder welche Skriptstelle muss ich ersetzen? Beim Global Script bin ich immer sehr vorsichtig.

rulaman

Wie du bereits weiter oben gepostet hattest.


if (type == 2 || type == 6) FaceCharacter (GetPlayerCharacter (), GetCharacterAt (mouse.x, mouse.y));



ersetze es mal durch


if (type == 2 || type == 6)
{
  if ( player.Room != GetCharacterAt (mouse.x, mouse.y).Room )
  {
    player.Say("Character nicht im selben Raum %d %d\n", GetCharacterAt (mouse.x, mouse.y).Room, GetCharacterAt (mouse.x, mouse.y).ID);
  }
  else
  {
    FaceCharacter (GetPlayerCharacter (), GetCharacterAt (mouse.x, mouse.y));
  }
}


So weist du den Raum des Characters den dein Spieler anschauen soll und auch die ID.

PS: Ich habe es nicht getestet.
Baden ist die einzige Möglichkeit, den Dreck der Füße an den Hals zu bekommen.

fireorange

Testen wird eh schwer, da der Fehler sehr selten auftritt bzw. erst zweimal gemeldet wurde und bei mir selbst höchstens dreimal aufgetreten ist. Ich werde es mal versuchen, danke.

rulaman

Versuch doch mal, nach dem Ausführen der Aktion die Maus schnell in diue Inventargui zu schieben, wenn das Skript dann an die Stelle kommt und die Maus ist woanders, dann kann es durchaus zu diesem fehler kommen.
Baden ist die einzige Möglichkeit, den Dreck der Füße an den Hals zu bekommen.

Bòógieman

Zitat von: rulaman in 30. August 2010, 08:29:44
Versuch doch mal, nach dem Ausführen der Aktion die Maus schnell in diue Inventargui zu schieben, wenn das Skript dann an die Stelle kommt und die Maus ist woanders, dann kann es durchaus zu diesem fehler kommen.
das ist doch exakt der bug von dem er im ersten post gesagt hat, dass er ihn schon gefixt hat

Zitat von: FireOrange in 07. Mai 2010, 12:13:46
Komische Situation, ich habe sowohl den FaceCharacter-Bug als auch den SetActiveInventory-Bug nach Anleitung aus dem AT behoben, wie ich es immer gemacht habe. Doch diesmal tritt folgender Fehler weiterhin auf :( :

aber möglicherweise ist es ja dieser bug hier:
http://www.maniac-mansion-mania.de/forum/index.php?topic=1000.msg19322#msg19322
Schlachtaman Vibrations, UHYEAH!!!
_________________________________

>>>> Ende der Kommunikation <<<<

fireorange

Ich wollte es gerade einfügen, aber die folgende Zeile akzeptiert AGS net:

Zitat von: rulaman in 29. August 2010, 20:45:20  if ( player.Room != GetCharacterAt (mouse.x, mouse.y).Room )

Das fehlende Semikolon habe ich ergänzt, danach ging es aber trotzdem net speichern.