Autor Thema: FaceDirection Problem  (Gelesen 3059 mal)

Rondo

  • kleiner Tentakelsaugknopf
  • **
  • Beiträge: 62
    • Profil anzeigen
FaceDirection Problem
« am: 02. April 2007, 18:13:05 »
Für einen Bug kann ich leider keine Lösung finden, da ich nicht verstehe an was es liegt. Es geht darum, dass sich der Player nicht umdreht, wenn er mit einem anderen Charakter rede. Er bleibt einfach stehen und reagiert auf den FaceDirection Befehl scheinbar nicht. Das was mich an diesem Fehler verwirrt ist, dass er nur bei einem Charakter auftritt und nur bei dem Talk-Befehl. Hier der Code des Charakters mit dem dier Player redet:

Zitat
  // script for Character 8 (Dr. Fred): Any click on character
if(MovePlayer(100, 140)) {   
   FaceDirection(GetPlayerCharacter(), DIR_UP);
  if(UsedAction(A_WALK_TO)) {}
  else if(UsedAction(A_LOOK_AT)){
      character[4].Say("Das ist Dr.Fred,");
      character[4].Say("er ist fast so oft blau wie ein Alkoholiker.");
   }
   else if(UsedAction(A_TALK_TO)){
      if (GetGlobalInt(433) == 1){
         dialog[19].Start();
      }      
      else if (character[4].InventoryQuantity[ihg.ID] == 15){
         dialog[20].Start();
      }
      else {
         dialog[18].Start();
      }
   }
   else if(UsedAction(A_USE_INV)){
      if (character [GetPlayerCharacter ()].activeinv == 15) {
         LoseInventory(15);
         PlaySound(28);
         character[8].Say("Danke,");
         character[8].Say("hier nimm mein Handy,");
         character[8].Say("aber gib es mir wieder!");
         AddInventory(21);
         PlaySound(28);
         object[5].Visible = false;
      }
      else character[8].Say("Damit kann ich nichts anfangen.");
   }
   else Unhandled();

 

Mister L

  • Boss der T.I.A.
  • Globaler Moderator
  • Ehrwürdiger Tentakel
  • *****
  • Beiträge: 3106
  • Geschlecht: Männlich
  • "R.I.P. Clever & Smart † 1958 -2023"
    • Profil anzeigen
    • Maniac Mansion - Night of the Meteor
Re: FaceDirection Problem
« Antwort #1 am: 02. April 2007, 19:26:34 »
Ich seh da bei "Talk_to" gar kein FaceDirection!  :-\

else if(UsedAction(A_TALK_TO)){
      if (GetGlobalInt(433) == 1){
      FaceDirection(GetPlayerCharacter(), DIR_UP);
      Wait (1);
      dialog[19].Start();

Probiers mal so.
« Letzte Änderung: 02. April 2007, 19:29:04 von Mister L »

Bòógieman

  • International anerkannter Superheld
  • Globaler Moderator
  • alter Tentakel
  • *****
  • Beiträge: 2654
  • Geschlecht: Männlich
  • Grün Tentakel = Running Sushi!
    • Profil anzeigen
Re: FaceDirection Problem
« Antwort #2 am: 02. April 2007, 19:32:01 »
Ich seh da bei "Talk_to" gar kein Face_direction!  :-\
doch doch, ist gleich der erste befehl nach MovePlayer  ;)

bin mir jetzt nicht sicher ob es das ist, aber ich kann mich an was erinnern, dass im bernard-starterpack (und wahrscheinlich in den meisten darauf basierenden starterpacks) noch code-fragmente aus MMD enthalten sind
für manche charaktere wird die Talk_To aktion durch das global script beeinflusst...  :-\
da gabs mal nen thread im AT dazu  ;)
Schlachtaman Vibrations, UHYEAH!!!
_________________________________

>>>> Ende der Kommunikation <<<<

Rondo

  • kleiner Tentakelsaugknopf
  • **
  • Beiträge: 62
    • Profil anzeigen
Re: FaceDirection Problem
« Antwort #3 am: 02. April 2007, 19:55:15 »
Der Vorschlag von Mister L hab ich versucht, leider ohne Erfolg. Es scheint egal zu sein wo der Befehl steht (oder wie oft ;)). Selbst wenn ich im Dialog als erstes ein script aufrufe, dreht er sich trotzdem nicht um. Auch ein veränderter Befehl funktioniert nicht.

Zitat
character[4].FaceLocation(character[4].x, character[4].y-1);

Der Fehler mach mich noch verrückt.  :'(

€ Ich finde leider den Beitrag im AT Forum nicht

€2: Ich hab die Lösung, aber warum es geht ist mir ein Rätsel  ???, der einzige Unterschied ist ein sehr kurzes Wait().

Zitat
  // script for Character 8 (Dr. Fred): Any click on character
if(MovePlayer(100, 140)) {
    FaceDirection(GetPlayerCharacter(), DIR_UP);
  if(UsedAction(A_WALK_TO)) {}
  else if(UsedAction(A_LOOK_AT)){
      character[4].Say("Das ist Dr.Fred,");
      character[4].Say("er ist fast so oft blau wie ein Alkoholiker.");
   }
   else if(UsedAction(A_USE_INV)){
      if (character [GetPlayerCharacter ()].activeinv == 15) {
         LoseInventory(15);
         PlaySound(28);
         character[8].Say("Danke,");
         character[8].Say("hier nimm mein Handy,");
         character[8].Say("aber gib es mir wieder!");
         AddInventory(21);
         PlaySound(28);
         object[5].Visible = false;
      }
      else character[8].Say("Damit kann ich nichts anfangen.");
   }
   else if(UsedAction(A_TALK_TO)){
     Wait(1);
      if (GetGlobalInt(433) == 1){
         dialog[19].Start();
      }      
      else if (character[4].InventoryQuantity[ihg.ID] == 15){
         dialog[20].Start();
      }
      else {
         dialog[18].Start();
      }
   }
      else Unhandled();

« Letzte Änderung: 02. April 2007, 20:01:14 von Rondo »

Bòógieman

  • International anerkannter Superheld
  • Globaler Moderator
  • alter Tentakel
  • *****
  • Beiträge: 2654
  • Geschlecht: Männlich
  • Grün Tentakel = Running Sushi!
    • Profil anzeigen
Re: FaceDirection Problem
« Antwort #4 am: 02. April 2007, 20:23:32 »
das was ich gemeint habe ist das hier:
http://www.adventure-treff.de/forum/viewtopic.php?t=8500&start=45
ab dem 4. letzten eintrag  ;)

allerdings glaube ich mittlerweile, dass das wohl nicht dein problem ist
die sache ist einfach die, dass wenn ein dialog startet, alle animationen eingefroren werden
die charakter-ansicht wurde wohl nicht fertig upgedatet bevor der dialog gestartet ist
durch das wait entsteht dadurch genügend zeit um genau das zu machen  ;)
das fällt auch auf, wenn man bei einem dialog den text per mausklick abbricht und danach wieder eine antwortauswahl kommt, da bleibt die sprechende figur meist mit offenem mund stehen  ;D
Schlachtaman Vibrations, UHYEAH!!!
_________________________________

>>>> Ende der Kommunikation <<<<

KhrisMUC

  • Moderator
  • volljähriger Tentakel
  • *****
  • Beiträge: 988
    • Profil anzeigen
Re: FaceDirection Problem
« Antwort #5 am: 04. April 2007, 00:54:34 »
So ist es.
FaceDirection ist eine Funktion, die die angegebene Richtung in Koordinaten umrechnet und dann den AGS-Befehl FaceLocation aufruft.

FaceLocation ist genauso wie Walk erstmal nicht blockend, d.h. wenn danach ein Dialog o.Ä. startet, kommt der Charakter gar nicht dazu, sich zu drehen.