Maniac Mansion Mania Forum

MMM-Werkzeugkiste => Technik => Newbies => Thema gestartet von: Non-Trouble Maker am 30. November 2008, 18:31:39

Titel: Der Give-Script
Beitrag von: Non-Trouble Maker am 30. November 2008, 18:31:39
Hallo,

ich wollte mal fragen wie der Geb-Gegenstand-an-Person-Script funktioniert?
Ich weiß gerademal das man zuerst if (UsedAction(A_GIVE_TO)) {eingeben, aber wie es dann weitergeht weiß ich nicht. :(

Könnt ihr mir helfen?
Titel: Re: Der Give-Script
Beitrag von: Siel am 30. November 2008, 19:40:30
Das müsst wenn ich recht entsinne auch in den AGS-Tutorials stehen. Aber trotzdem nochmal hier die erklärung:

Du möchtest natürlich, dass nur bei einem ganz bestimmten gegenstand etwas passiert, daher musst du folgende if-Klammer einbauen:
Zitat von: AGS-Code
if (character [GetPlayerCharacter ()].activeinv == *Inventory-Nummer hier*) {
  (Auszuführende Aktionen)
}
Bei den anderen Gegenständen soll vermutlich ein standartsatz kommen, sowas wie "nein danke, das möchte ich nicht", solltest du am ende des codes so was wie das hier einfügen:
Zitat von: AGS-Code
else {
  DisplaysSpeech(*Charakter-Nummer hier*, "Nein danke, dass möchte ich nicht.");
}

Hoffe ich konnte weiterhelfen.
Titel: Re: Der Give-Script
Beitrag von: Mister L am 01. Dezember 2008, 11:01:35
Ich glaube, das funktioniert so nicht.
Man muss bedenken, dass die "Gib"-Funktion in MMD dazu da war, Gegenstände zwischen den 3 Spielfiguren auszutauschen.
Wenn man die Starterpacks unverändert benutzt "verschwinden" mit dem "Give-To"-Befehl die Gegenstände in den "Inventaren" der Figuren (sofern es sich um die MM-Kids handelt).  :-\ 
Titel: Re: Der Give-Script
Beitrag von: Siel am 01. Dezember 2008, 15:20:55
Ich habs mal probiert und es ging wirklich nicht. Daher hier die Lösung, die bei mir funktioniert hat:

Der Befehl A_GIVE_TO bringt tatsächlich nichts. Daher  muss man die AGS-eigene Funktion Use inventory on charakter anstattvon Any click on character verwenden.
Dann sieht der Code wieder ganz normal aus, bis auf dass man sich die A_GIVE_TO if-Klammer sparen kann.
Titel: Re: Der Give-Script
Beitrag von: Non-Trouble Maker am 13. Dezember 2008, 11:35:33
Ich hab jetzt ein Problem, dass ich nicht folgen kann,
wie ich die Gebe-Funktion einbauen kann. :'(

Also wie kann ich ihn am einfachsten ausführen?
Titel: Re: Der Give-Script
Beitrag von: Mister L am 13. Dezember 2008, 12:56:23
Ich mach das jetzt immer so:

Bei "use inventory on character":
if(MovePlayer(cJim.x-50, cJim.y))
    {
      player.FaceCharacter(cJim);
      FaceCharacter (JIM, GetPlayerCharacter());
      Wait (5);


if (player.activeinv == 1)
{
DisplaySpeech (JIM,  "Geld?");
DisplaySpeech (JIM,  "Hier, mitten in der Wüste haben wir keine Verwendung für Geld!");
DisplaySpeech (JIM,  "Ich besitze kein Geld und möchte auch keines.");
  }


  else DisplaySpeech (GetPlayerCharacter(),  "Das gebe ich besser nicht her.");
 
}

Und bei "any click on character:
if(MovePlayer(cJim.x-50, cJim.y))
    {
     player.FaceCharacter(cJim);
     Wait (5);
  }


if(UsedAction(A_WALK_TO)){


 FaceDirection(GetPlayerCharacter(), DIR_RIGHT);
 }

else if(UsedAction(A_LOOK_AT)){

DisplaySpeech(GetPlayerCharacter(),"Das ist Jim McGarmond, der Chauffeur.");

}


else if(UsedAction(A_TALK_TO)){

  player.FaceCharacter(cJim);
  FaceCharacter (JIM, GetPlayerCharacter());
GUIOff (0);
GUIOff (1);
Wait(1);
RunDialog (3);
}


else if(UsedAction(A_PICK_UP) || UsedAction(A_USE)){

DisplaySpeech(GetPlayerCharacter(),"Der ist wirklich nicht mein Typ.");

}
else if(UsedAction(A_OPEN)){
  player.Say("Keine Chance.");
}

else if(UsedAction(A_PUSH)){
player.Say("So gut kenne ich den Herrn nicht.");
 
}

else if(UsedAction(A_PULL)){
  player.Say("Ich will keinen unnötigen Ärger!");
}

else if(UsedAction(A_CLOSE)){
  player.Say("Wie soll das denn gehen?");
 
}

else if(!UsedAction(A_USE_INV) && !UsedAction(A_GIVE_TO)){
Unhandled();
}   

Dann geht auch der Gib-Befehl.  :)
Titel: Re: Der Give-Script
Beitrag von: 1mal_volltanken am 11. September 2009, 22:41:43
Hallo!

Habe da ein Problem:

Habe es mit dem GIVE_TO und USE_INV_onCharacter genauso programmiert, wie MisterL es hier aufgeführt hat.

Im Spiel klappt dieser Befehl beim ersten mal (meistens) noch einwandfrei. Spätestens wenn ich diese Interaktion zum zweiten Mal durchführe, steigt AGS aus;
mit folgender Fehlermeldung:

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

in Global script (line 1882)
from Global script (line 1932)
from Global script (line 2280)

Error: FaceCharacter: invalid character specified


Das steht in den angegebenen Zeilen:

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

1932   unhandled_event (0, 0);

2280 else Unhandled();



Arbeite mit 2.72-Starter-Paket für ManiacDungeon.

Kennt Ihr dieses Problem? Wär klasse, wenn mir jemand helfen könnte.


BG
der Volltanker

Titel: Re: Der Give-Script
Beitrag von: Chrisu am 11. September 2009, 23:53:55
Hi,

es kann passieren, dass sich zum Zeitpunkt des Aufrufs der Zeile mit der if-Abfrage an den Mauskoordinaten gar kein Character befindet. Folglich liefert der Teil "GetCharacterAt (mouse.x, mouse.y)" auch keinen gültigen Character, was die FaceCharacter-Funktion dann mit dem zitierten Fehler "invalid character specified" quittiert. Besser ist es daher, die if-Abfrage noch mit einem "GetLocationType" zu verknüpfen, um sicherzustellen, dass bei x/y auch tatsächlich ein Character ist.

Gruß,
Chrisu
Titel: Re: Der Give-Script
Beitrag von: NsMn am 12. September 2009, 00:45:17
Aber ist es nicht so, das sich die FaceCharacter-Funktion sowieso noch in der Afrage befindet, ob der Charakter bei mouse.x/mouse.y größer als 0 und kleiner als 6 (es war doch 6...) ? Dann dürfte sowas auch nicht auftreten - Es kann sein, dass man tatsächlich vor FaceCharacter schon den Mauszeiger bewegt hat, aber dann wäre auch ein GetLocationType nutzlos...

Die beste Lösung wäre vllt, nur einmalig den Wert von GetCharacterAt() in einer Variable speichert, und GetCharacterAt überall im Give-Script durch diese Variable ersetzt.

Sch***e... hab' ans falsche Script gedacht  :-[
Titel: Re: Der Give-Script
Beitrag von: Rocco am 12. September 2009, 00:47:20
http://www.adventure-treff.de/forum/viewtopic.php?p=185068#p185068
Titel: Re: Der Give-Script
Beitrag von: 1mal_volltanken am 12. September 2009, 20:03:16
Hatte schon selbst nen Weg gefunden, diesen Bug zu entschärfen! ;)

Und zwar habe ich in folgender Leiste...

else if(!UsedAction(A_USE_INV) && !UsedAction(A_GIVE_TO)){
Unhandled();
}   

das Unhandled entfernt, dass es dann so aussah:

else if(!UsedAction(A_USE_INV) && !UsedAction(A_GIVE_TO)){

}   

...und tatsächlich! Es stürzt nicht mehr ab! :)


BG
der Volltanker
Titel: Re: Der Give-Script
Beitrag von: KhrisMUC am 13. September 2009, 04:10:22
Könnte ich mal den umliegenden Code sehen?
Das sieht mir nämlich nicht nach einer guten Lösung aus.
Titel: Re: Der Give-Script
Beitrag von: Endres am 14. September 2009, 17:48:21
Ja, leere If's wäre so wie eine Mathematische Klammer ohne Inhalt. z.B.: (3*(5-4))*3=9 3*(      )*3=9
;)
Also wenn aber Unhandled den Fehler verursacht, könnte das auch so ernsthafte Probleme zeigen!
Titel: Re: Der Give-Script
Beitrag von: 1mal_volltanken am 14. September 2009, 19:22:27
Könnte ich mal den umliegenden Code sehen?
Das sieht mir nämlich nicht nach einer guten Lösung aus.

Diese Zeile ist in dem "Any click on character"-Script.

Alles weiter befindet sich in "Use inventory on character".

Darunter sind dann alle "if (player.activeinv == 1)" und "else if (player.activeinv == 2)" zu setzen, ggf. abgeschlossen mit einem "else Unhandled();".


Naja. Wichtig ist, dass es funktioniert. Nicht, dass es nachvollziehbar aussieht.  ;D

Denke die Aufteilung für "Any click" und "Use inventory" eignet sich so auch für Hotspots und Objects, da es mit der "(Used_Action(USE_INV))" in dem "Any click"-Script sehr unübersichtlich wird, wodurch beim abspeichern immer Fehlermeldungen auftreten, dass entweder zu viele oder zu wenige geschwungene Klammern vorhanden sind. :)


BG
der Volltanker
Titel: Re: Der Give-Script
Beitrag von: Rayman am 15. Januar 2011, 20:47:51
-Hat sich erledigt-