Maniac Mansion Mania Forum

MMM-Werkzeugkiste => Technik => Thema gestartet von: Splattermaster am 12. Juli 2007, 13:05:39

Titel: Objekte durch den Button "Ziehen" verändern?
Beitrag von: Splattermaster am 12. Juli 2007, 13:05:39
hi,
bin grad dabei einigen räumen etwas leben einzuhauchen und stoße auf folgendes problem:

ich habe in einem raum ein object gesetzt. nun soll dieses durch den button "Ziehen" seine aussehen (bildfolge)verändern.
habe von diesen object mehrere bilder mit der veränderung erstellt und in den sprite-manager geladen.
habe auch schon die bildreihenfolge in die views gesetzt.
das object habe ich natürlich auch auf "visible" gesetzt, sonst kann man es ja nicht sehen.

muß ich den einen hotspot darauf setzen? es ist ja kein bestandteil des hintergrundes.  ???
ich denke ja, das die lösung im script des objects liegt. da es ja die option gibt "interaction" , "any_click_on_object".

wie muß ich das script gestallten, daß er auf einen bestimmten "view" diese bildreihenfolge abholt?

hab schon einiges ausprobiert, aber er bricht immer mit einer fehlermeldung ab. kann mir jemand
helfen bei diesem kleinen script?

beste grüße
splattermaster

Titel: Re: Objekte durch durch den Button "Ziehen" verändern?
Beitrag von: KhrisMUC am 12. Juli 2007, 13:20:57
Hier ein Beispiel für das any_click_on-Script:

  if (MovePlayer (275, 133)) {   // Koordinaten, zu denen der Spielcharakter läuft
    FaceDirection(player.ID, DIR_RIGHT);     // Blickrichtung
    Wait(5);
   
    if (UsedAction (A_LOOK_AT)) {
      if (verzogen) player.Say("Das hab ich schön verzogen. Huiuiuiui!");
      else player.Say("An diesem Ding kann ich ziehen.");
    }
   
    else if (UsedAction (A_PULL)) {
      if (verzogen) {
        player.Say("Bringt nix, da noch weiter dran zu ziehen.");
      }
      else {
        oObjekt.SetView(VIEWNUMMER);           // hier die Nummer der View eintragen
        oObjekt.Animate(0, 3, eOnce);             // loop 0, delay 3
        Wait(10);
        player.Say("Das hab ich aber sauber verzogen...");
        verzogen=true;
      }
    }

    else Unhandled ();
  }

Wenn Du die beiden Fenster wieder geschlossen hast, drückst du Strg-E. Im sich öffnenden Room script fügst Du ganz am Anfang, vor der ersten Funktion, Folgendes ein:
bool verzogen;
Wichtig: statt oObjekt musst Du den Script-O Name Deines Objektes nehmen.
Name ist die offizielle Bezeichnung, die später der Spieler sieht.
Script Name ist die interne Bezeichnung, sie muss einmalig sein.
Daraus macht AGS den Script-O Name, den du drunter ablesen kannst. Der muss im Skript verwendet werden.
Titel: Re: Objekte durch durch den Button "Ziehen" verändern?
Beitrag von: steve-o-mat am 12. Juli 2007, 13:25:31
Argh so ein Mist, jetzt hab ich mir die Finger wundgetippt, um hier zu helfen und dann war der KhrisMUC einfach schneller...  ;)

btw, sowas ähnliches gabs glaub ich irgendwo schonmal in Mukk's Fragethread (http://www.maniac-mansion-mania.de/forum/index.php?topic=333.0).


Aber es würde doch theoretisch noch

object[x].SetView(72);
object[x].Animate(0, 3 ,eRepeat, eNoBlock);

gehen, oder ist das jetzt auch veraltet?
Titel: Re: Objekte durch durch den Button "Ziehen" verändern?
Beitrag von: Splattermaster am 12. Juli 2007, 13:28:11
hi,
danke für die schnelle antwort. das "verzogen" ist, nehme ich an, eine variable oder?

gruß
splattermaster
Titel: Re: Objekte durch durch den Button "Ziehen" verändern?
Beitrag von: KhrisMUC am 12. Juli 2007, 13:38:53
steve:
Nein, aber im room script kann man ja den O Name verwenden, wozu dann Nummern jonglieren? :)

splattermaster:
Genau, vom Typ bool, d.h. entweder true oder false. Anfangs false (so wie ints anfangs 0 sind), nach dem Ziehen wird sie auf true gesetzt.
Titel: Re: Objekte durch durch den Button "Ziehen" verändern?
Beitrag von: Splattermaster am 12. Juli 2007, 13:51:38
hi,
hab grad mal alles eingetipt und die änderungen vorgenommen.
wollte ich grad ausprobieren und er bricht immer
mit dem fehler ab (undefined symbole 'verzogen').

hab im global script "bool verzogen;" aber zugefügt.

was hab ich falsch gemacht?

mfg
splattermaster
Titel: Re: Objekte durch durch den Button "Ziehen" verändern?
Beitrag von: KhrisMUC am 12. Juli 2007, 13:53:38
Nicht im global script, im room script!
Titel: Re: Objekte durch durch den Button "Ziehen" verändern?
Beitrag von: steve-o-mat am 12. Juli 2007, 13:55:41
Hmm was mir spontan auffällt, ist, dass KhrisMUC geschrieben hat, dass du es in das RoomScript schreiben musst, nicht ins GlobalScript.  ???   Kann es daran liegen?

Mist, ich war schon wieder zu langsam...  :'(   ;)
Titel: Re: Objekte durch durch den Button "Ziehen" verändern?
Beitrag von: Splattermaster am 12. Juli 2007, 14:08:22
geändert...aber,
folgende frage hab ich noch:

player.ID   (welcher name wird anstell von 1.) "player" und 2.) "ID" gesetzt?
1.) im Charakter Editor "Full name", "Script name" oder "Script-o name" ?
2.) etwa die ID im Charakter Editor (1,2,3...usw.)

player.Say (wird alles durch den charakternamen ersetzt?)


mfg
splattermaster

p.s.:haltet ich nicht für blöd, aber das verstehe ich noch nicht.
Titel: Re: Objekte durch durch den Button "Ziehen" verändern?
Beitrag von: steve-o-mat am 12. Juli 2007, 14:13:40
Wenn du player.Say nimmst, meinst du damit automatisch die gerade handelnde Figur.
Falls du wenn anders nehmen willst, musst du meines Wissens cDave.Say nehmen zum Beispiel.

player.Say ("Cool!");   //aktuelle Spielfigur spricht
cDave.Say ("Cool!");    //Dave spricht

Genauso bei player.ID bzw. cDave.ID.

Als Beispiel:
FaceDirection (player.ID, DIR_LEFT);    //lässt die die aktuelle Spielfigur na links schauen
FaceDirection (cDave.ID, DIR_LEFT);    //lässt Dave nach links schauen

Edit: Hab zum besseren Verständnis Beispiele zugefügt, mach ich das nächste mal gleich, sorry.
Titel: Re: Objekte durch durch den Button "Ziehen" verändern?
Beitrag von: Splattermaster am 12. Juli 2007, 14:21:07
hier mal das script wie ich es momentan drin hab:

#sectionstart object0_a  // DO NOT EDIT OR REMOVE THIS LINE
function object0_a() {
  // script for Object 0 (Gemälde): Any click on object
if (MovePlayer (121,54))

FaceDirection (player.ID, DIR_LEFT);
Wait (5);
if (UsedAction (A_LOOK_AT))
{
if (verzogen) cFredd.Say ("Das hab ich schön verzogen.");
else cFredd.Say (An diesem Ding kann ich ziehen.");
}
else if (UsedAction (A_PULL))
{
if (verzogen)
{
cFredd.Say("Bringt nix, da noch weiter dran zu ziehen.");
}
else
{
BILD1.SetView (1);
BILD1.Animate (0, 3, eOnce);
Wait (10)
cFredd.Say ("Das hab ich aber sauber verzogen...");
verzogen=true;
}
}
else Unhandled ();
}
}
#sectionend object0_a  // DO NOT EDIT OR REMOVE THIS LINE


wenn ich das drin habe bricht er mir
mitdem fehler : RUNTIME error : unexpectd eof
ab.


Titel: Re: Objekte durch durch den Button "Ziehen" verändern?
Beitrag von: Splattermaster am 12. Juli 2007, 14:39:09
hinbekommen.
waren einige fehler drin die ich korrigiert habe.
danke für eure mühe...jetzt funktioniert es.

habt nochmal vielen dank

beste grüße
splattermaster
Titel: Re: Objekte durch durch den Button "Ziehen" verändern?
Beitrag von: steve-o-mat am 12. Juli 2007, 14:43:31
Ich mache das immer ein wenig anders...

if (any_click_move (121, 54, DIR_LEFT))    // jetzt läuft er erst mal generell, egal was für ne Handlung kommt dahin.

if (UsedAction (A_LOOK_AT))
  {
  if (verzogen)
   {
    cFRED.Say ("...");
    }
  else
    {
     cFRED.Say ("...");
    }
  }
else .....

Ansonsten fällt mir aber nichts schwerwiegendes auf bis auf das das eigentlich cFRED heissen müsste. Ich weiß jetzt nicht, ob du da nen Schreibfehler bei diesem
BILD1.SetView (1);   drin hast. Ich mach es halt immer so:

object[x].SetView(72);
object[x].Animate(0, 3 ,eRepeat, eNoBlock);
Vielleicht probierst du mal, ob das so klappen tut, weil dann hättest du da den Fehler drin.
Also wirklich weiterhelfen kann ich grad net so recht... :-\
Ich probiers gleich mal bei mal bei mir.

Und nutze beim nächsten mal lieber die Code-Funktion ({code}{/code} musst bloß eckige Klammern verwenden) beim Posten, wegen der Übersicht.  ;)

Na dann hat es sich ja schon wieder erledigt... vielleicht sollte ich doch mal nen 10-Finger-Schreibkurs mitmachen.  ;)
Titel: Re: Objekte durch durch den Button "Ziehen" verändern?
Beitrag von: Splattermaster am 12. Juli 2007, 14:56:56
hi,
hat alles geklappt wie ich es wollte. ist zwar nur ein kleiner teil in einem großen raum, aber mit viel witz wie ich denke. wirst es ja bald zu sehen bekommen.  :-*

nochmals danke an alle

splattermaster  ;)
Titel: Re: Objekte durch durch den Button "Ziehen" verändern?
Beitrag von: KhrisMUC am 12. Juli 2007, 15:04:21
splattermaster:
Der eof-Fehler bedeutet immer, dass Du irgendwo bei einem Text ein Anführungszeichen vergessen hast.
In diesem Fall hier:
else cFredd.Say (An diesem Ding kann ich ziehen.");Copy&Paste nächstes Mal? ;)

steve:
Deine Einrückungen sind ja vogelwild... :o Und auch nicht einheitlich...
Mein Schema wird von AGS automatisch so eingerückt ;D
Wenn nach if/else if/else nur ein Befehl kommt, braucht man übrigens keine {}, das erhöht die Übersicht.
Und:
Zitat
im room script kann man ja den O-Name verwenden, wozu dann Nummern jonglieren? :)
Titel: Re: Objekte durch durch den Button "Ziehen" verändern?
Beitrag von: steve-o-mat am 12. Juli 2007, 15:19:27
Hehe, sorry.  :-[
Ja stimmt, da muss ich dir Recht geben, ich tu mich hier im Forum immer etwas schwerer mit Scripts posten, weil man ja in AGS die Autovervollständigung hat. Und mit der Einrückung klappt es da auch besser.   ;D 

Ja und wegen dem einen Befehl... das handhabe ich da auch ohne {}, weiß gar nicht was mich da geritten hat.   :o

Wegen dem O-Name... hab ich mir schon aufgeschrieben, werd ich demnächst mal so ausprobieren.
Aber ich hab cleverer Weise immer ne Liste mit den belegten GlobalInts, Inventargegenständen mit Nummern, speziellen Views usw. beim Scripten anbei liegen, deswegen tu ich mich dannn mit Zahlenspielen eigentlich net so schwer.   8)
Titel: Re: Objekte durch durch den Button "Ziehen" verändern?
Beitrag von: KhrisMUC am 12. Juli 2007, 15:29:30
"Hm, das mit dem 'auf den Füßen gehen' werd ich demnächst mal ausprobieren.
Aber ich hab mir clevererweise kleine Kissen unter die Knie gebunden, jetzt bluten die beim Spazierengehen nicht mehr ganz so doll." ;D ;D

Ne, Spass, jeder muss da seine eigenen Methoden entwickeln. :)
Aber wart nicht zu lang mit dem Ausprobieren, sonst ärgerst Du Dich nur ;)

Übrigens kann man ganz normal durch AGS navigieren und alle Nummern nachschauen, wenn man direkt das Room script aufmacht. Nur der Weg über den Interaction-Editor blockiert den Rest.
Titel: Re: Objekte durch durch den Button "Ziehen" verändern?
Beitrag von: steve-o-mat am 12. Juli 2007, 15:36:16
Aber wart nicht zu lang mit dem Ausprobieren, sonst ärgerst Du Dich nur ;)

Wenn du das sagst, nehm ich mir das immer zu Herzen, ich hab es schon bei any_click_walk_look bemerkt, dass es günstiger ist, deine Ratschläge zu befolgen.    :)
Ausserdem: Wenn du das sagst kommt das ja auch nicht von ungefähr, ne.  ;)
Nagut, genug geschleimt...  ;D
Titel: Re: Objekte durch durch den Button "Ziehen" verändern?
Beitrag von: KhrisMUC am 12. Juli 2007, 16:05:25
Dafür hab ich bei Bernards Room wirklich überall
if (MovePlayer()) {
  FaceDirection();
  Wait(5);
  ...
verwendet.
Und was seh ich grade: das von Dir verwendete any_click_move() macht das alles auf einmal :)
Titel: Re: Objekte durch durch den Button "Ziehen" verändern?
Beitrag von: steve-o-mat am 12. Juli 2007, 16:22:26
 ;D

Naja, aber das Wait(5); muss man trotzdem noch überall hinschreiben...   ;)

Obwohl, das müsste man doch aber sicherlich ganz leicht in die Funktion integrieren können, oder?
Titel: Re: Objekte durch den Button "Ziehen" verändern?
Beitrag von: KhrisMUC am 12. Juli 2007, 16:49:29
Bei mir isses drin:
function any_click_move(int x, int y, int dir){
  int result = MovePlayer (x, y);
  if (result)
  {
    FaceDirection(GetPlayerCharacter (), dir);
    Wait(5);
  }
  return result;
}
Titel: Re: Objekte durch den Button "Ziehen" verändern?
Beitrag von: steve-o-mat am 12. Juli 2007, 20:06:52
Stimmt, bei mir auch...  :-[  Grml!    *aufschreib-und-Notiz-an-Monitor-kleb:* In Zukunft immer erst denken, dann vorsichtshalber trotzdem nachschauen und dann erst labern...   ;)