Maniac Mansion Mania Forum

MMM-Werkzeugkiste => Technik => Newbies => Thema gestartet von: mukk am 07. Mai 2007, 18:19:49

Titel: mukks Fragethread ^^
Beitrag von: mukk am 07. Mai 2007, 18:19:49
Also erstma hallo zusammen, finds klasse was ihr hier auffe Beine gestellt habt.

Nu zum Problem: Ich bastel grad an ner Episode, die von Bernards Haus zu Hoagie führt und würde dementsprechend gern komplette Räume aus beiden Packs benutzen. Wenn ich nur die roomxx.crm kopiere, kommen, die sprites oder Objekte nich mit...hab zwar schon gelesen, das man irgendwie exportieren können soll aber ich find nix in der Richtung. Die AGS-Hilfe spuckt auch nichts zu dem Thema aus. Kann mir da wer helfen?

Noch ne Frage die evtl. n bissl allg. is: wenn man in einem Raum Szenen ablaufen lassen will, die zeitlich auseinander liegen und in denen sich auch etwas bei den eingesetzten Objekten ändern soll (bspw. auto in einer szenen da, in der nächsten nich), wärs dann besser, 2 unterschiedliche räume daraus zu machen oder lässt sich das irgendwie im script trennen?

Gruss vom Mukk
Titel: Re: Austausch der Räume zw. Starterpacks
Beitrag von: Bòógieman am 07. Mai 2007, 18:31:25
du kannst die einzelnen grafiken als file speichern und dieses dann im neuen projekt importieren und den objekten des raumes dann zuordnen
eine direkte möglichkeit einen raum mit grafiken zu exportieren fällt mir auf die schnelle auch nicht ein  :-\

du kannst in deinem room-script die einzelnen objekte/hotspots/etc. abhängig von einer globalen variable ein- und ausblenden
das funktioniert auch bei den einzelnen events für hotspots/objekten/charaktere

es ist auf jeden fall besser, wenn du das auf einen raum zusammenfasst anstatt für jede szene einen eigenen raum zu machen
jeder zusätzliche raum benötigt sonst wieder zusätzlichen speicherplatz im fertigen spiel  ;)
Titel: Re: Austausch der Räume zw. Starterpacks
Beitrag von: mukk am 09. Mai 2007, 16:11:56
Danke erstma, bin jetz schon n ganzes Stück weiter  :)

hab dann aber doch nochma ne frage: wie krieg ichs hin, texte im raum an ner bestimmten stelle einzublenden und die farbe zu ändern? und wie kann ich charaktere reden lassen die garnich da sind ohne das so wie bei der frage vorher zu machen und jedesmal schauen zu müssen, in welcher farbe die reden?

wenn ihr mir die befehle nennt, würds schon reichen...aber so find ich da nix zu in der hilfe  :-\
Titel: Re: mukks Fragethread ^^
Beitrag von: Fatal M am 09. Mai 2007, 17:13:39
"texte im raum an ner bestimmten stelle einzublenden":

AGS-Anleitung, Scripting:

Room functions/RawPrint, RawSetColor
oder
Overlay functions and properties/CreateTextual
Titel: Re: mukks Fragethread ^^
Beitrag von: Bòógieman am 09. Mai 2007, 17:19:47
also mit SayBackground kannst du jeden beliebigen charakter (auch welche die nicht im raum sind) einen text sagen lassen, allerdings wird der text einfach zentral im bild ausgegeben (der charakter verwendet dabei auch keine talk-view)
zB cBernard.SayBackground("Hallo!");

mit SayAt kann man die position und breite des textes bestimmen
cBernard.SayAt(100, 20, 220, "Hallo!");

in beiden fällen wird der text mit der aktuellen SpeechColor des charakters angezeigt



oder du machst das ganze via Overlay's, aber das musst du dann selbst in der hilfe nachlesen  ;)
Titel: Re: mukks Fragethread ^^
Beitrag von: mukk am 19. Mai 2007, 14:55:04
und die nächste frage:

ich möchte nachdem ein inventargegenstand benutzt wurde einen raumwechsel machen, ne cutscene ablaufen lassen und wieder zurück in den raum gehen, in dem der gegenstand benutzt wurde. da der player-char in der cutscene nich auftaucht, kann ich ihn im neuen raum ja einfach vertecken, dadurch müsste er dann beim 2. wechsel wieder bei den selben koordinaten mit der selben ausrichtung sein, aber wie krieg ichs hin, dass es auch der selbe raum is?

danke schonma und gruß vom mukk
Titel: Re: mukks Fragethread ^^
Beitrag von: Rocco am 19. Mai 2007, 15:22:49
player.ChangeRoom(player.PreviousRoom);

in PreviousRoom wird immer der vorhergehende raum festgehalten.
Titel: Re: mukks Fragethread ^^
Beitrag von: mukk am 19. Mai 2007, 17:21:04
mh, ich sollte die hilfe wohl hartnäckiger benutzen ... hätt jetz gedacht, dass das komplizierter wär

dankeschön
Titel: Re: mukks Fragethread ^^
Beitrag von: KhrisMUC am 20. Mai 2007, 18:20:22
Nur noch ergänzend:
Falls es beim nächsten Mal keine so praktische Funktion wie PreviousRoom gibt, ist das ein Job für Variablen.
In diesem Fall hättest Du lediglich die Raumnummer in einer Variablen festhalten müssen, um den Spieler wieder zurück zu schicken.
Titel: Re: mukks Fragethread ^^
Beitrag von: Fatal B am 20. Mai 2007, 20:07:32
Sorry wenn ich das Thema mal missbrauche, aber ich hätte mal ne Frage zu "PreviousRoom"

Also wenn mein Spielcharakter mit PreviousRoom wieder den Raum wechselt, steht er immer etwas höher als zuvor.
Ist das ein Fehler bei diesem Befehl, oder muss man noch etwas anderes beachten?

Gruss Fatal B
Titel: Re: mukks Fragethread ^^
Beitrag von: Timer am 20. Mai 2007, 20:23:17
Plaziere ihn doch einfach neu. Er steht wahrscheinlich genau auf den Koordinaten des Raumes, in dem du davor bist. Ich habe den Befehl allerdings nie verwendet, also kann ich nicht aus Erfahrung, sondern nur aus Vermutung reden... Wahrscheinlich gibt es eine bessere Lösung.
Titel: Re: mukks Fragethread ^^
Beitrag von: Fatal B am 20. Mai 2007, 20:53:29
Der Befehl soll den Charakter ja wieder da hin packen wo er her kahm, aber bei mir steht er dann zu weit oben ??? ??? ???
Titel: Re: mukks Fragethread ^^
Beitrag von: Timer am 20. Mai 2007, 20:59:52
Der Befehl transportiert den Char doch bloß in den vorherigen Raum, oder habe ich da etwas falsch verstanden? ???
(Das heißt, es ist eigentlich gar kein Befehl, sondern bloß eine Eigenschaft ;D)
Titel: Re: mukks Fragethread ^^
Beitrag von: KhrisMUC am 21. Mai 2007, 05:12:03
@Fatal B:
Eigentlich dürfte sich bei den Koordinaten nix ändern.
.ChangeRoom() wird immer ganz am Ende der Skriptfunktion ausgeführt; bist Du sicher, dass zwischendurch keine Änderung der Koordinaten erfolgt?
Titel: Re: mukks Fragethread ^^
Beitrag von: Fatal B am 21. Mai 2007, 20:07:37
Habs gelöst :)

Mein Charakter ist (Unsichtbar) durch den Raum gelaufen und dann beim Raumwechsel natürlich ganzwoanders wieder aufgetaucht :-X

Danke Fatal B
Titel: Re: mukks Fragethread ^^
Beitrag von: mukk am 22. Mai 2007, 13:58:12
hab grad n problem...wenn ich in einem best. raum n inventargeganstand mit was anderem benutzen will, verschieben sich alle hotspots solange benutze X mit... da steht...kennt das problem jemand? ich wüßte nich, wie ich das wieder hinkriegen könnt.
hab zwischendurch mit nem plugin experimentiert, seitdem is das so, habs aber schon wieder abgeschaltet
Titel: Re: mukks Fragethread ^^
Beitrag von: steve-o-mat am 22. Mai 2007, 15:54:16
Moin Leutz!
Erstmal noch ein Danke an BlueGryphon! Er hat mir gestern sehr gute Hilfestellungen gegeben, aber ab und an schwirren mir trotz Tuts, der AGS-Hilfe und hartnäckigstem 'learning-by-doing' immer mal wieder Fragen durch den Kopf und ich will hier ja auch niemanden stundenlang bei ICQ belagern!  ;D Deshalb wollt ich auf diesem Weg ein paar Fragen loswerden. (kann ich da jetzt einfach Mukk's Thread zumüllen, oder soll ich wegen der Übersicht halber einen eigenen aufmachen?)
Wo wir hier schonmal bei Textausgaben waren fang ich mal am Besten damit an... ist es möglich einen Dialog mit einem Objekt zu realisieren? (also mit Wahl der Antwort- und Fragemöglichkeiten)
Titel: Re: mukks Fragethread ^^
Beitrag von: Timer am 22. Mai 2007, 16:20:59
@Mukk:
Kann es sein, dass du bei den Inventaritems die Position des Cursors verändert hast (den kleinen gelben Punkt)? Wenn ja, bring ihn wieder an die richtige Stelle (theoretisch durch rumprobieren). Wenn nein, hat es vielleicht das Plugin gemacht. Wenn das überhaupt nichts bringt, warte auf die nächste Antwort ^^.

@steve-o-mat:
Ein Dialog mit einem Objekt ist nicht möglich. Du wirst wohl oder übel einen Charakter draus machen müssen...
Titel: Re: mukks Fragethread ^^
Beitrag von: Bòógieman am 22. Mai 2007, 16:38:18
also ein dialog mit einem objekt IST möglich

ich weiss es jetzt zwar nicht auswendig wie es genau heisst, aber man kann in einem dialog eine globale scriptfunktion mit einem parameter aufrufen
darin kannst du dann mittels SayBackground oder Overlays deinem objekt eine stimme verleihen ;)

allerdings ist es wirklich einfacher statt dem objekt einen charakter zu nehmen  ;)
Titel: Re: mukks Fragethread ^^
Beitrag von: Timer am 22. Mai 2007, 16:43:14
also ein dialog mit einem objekt IST möglich

ich weiss es jetzt zwar nicht auswendig wie es genau heisst, aber man kann in einem dialog eine globale scriptfunktion mit einem parameter aufrufen
darin kannst du dann mittels SayBackground oder Overlays deinem objekt eine stimme verleihen ;)
Und wie willst du den Dialog starten, wenn man nicht mit dem Objekt reden kann? ;) Das Problem liegt hier ja wohl eher darin, dass man den Befehl "Rede mit" auch auf ein Objekt ausüben kann.
Titel: Re: mukks Fragethread ^^
Beitrag von: Bòógieman am 22. Mai 2007, 16:47:09
gut, das ist ein anderes thema
man kann auch bei "benutze objekt" ein RunDialog machen, man muss halt das objekt dann mit "Hey, Finger weg!" den dialog beginnen lassen  ;)
übrigens: "Rede mit" geht auch mit inventargegenständen  ;)
in epi53 spricht klaus auch mal ganz gerne mit seinem inventar  ;D
Titel: Re: mukks Fragethread ^^
Beitrag von: mukk am 22. Mai 2007, 16:51:01
@Timer: jepp das wars, danke dir
nu weiß ich wenigstens, wozu der kleine gelbe punkt gut is ^^
Titel: Re: mukks Fragethread ^^
Beitrag von: Timer am 22. Mai 2007, 17:03:49
@ Bòógieman:
Ja, stimmt, so kann man es machen... Aber was, wenn man dann weiß, dass man mit dem Objekt reden will? Dann ist der "Rede mit"-Befehl viel naheliegender. Der funktioniert aber wieder nicht.
Aber dass man mit Inventargegenständen reden kann, habe ich gar nicht gewusst... Wie bildend Diskussionen sein können ;D.
Titel: Re: mukks Fragethread ^^
Beitrag von: steve-o-mat am 22. Mai 2007, 17:27:04
Ich hab jetzt hier auch nen ganz dummen Fehler irgendwie drin, weiß aber nicht, woran es liegt!? Ich wollte einen Schrank scripten, dann mach ich ja quasi ein Objekt vom offenen Schrank der dann ja quasi nicht "initially visible" sein muss, dann hab ich das Script geschrieben (wie bei allen anderen Objekten auch und bei denen klappt es). Mein Problem ist, das, wenn der Schrank aufgeht, man die offene und die geschlossene Schranktüre sieht?!
Titel: Re: mukks Fragethread ^^
Beitrag von: mukk am 22. Mai 2007, 17:37:02
is das innere des schranks und der hintergrund von der offenen schranktür schwarz? wenn ja musst du nur den hintergrund anders einfärben
Titel: Re: mukks Fragethread ^^
Beitrag von: Bòógieman am 22. Mai 2007, 17:50:41
ja denke auch, dass du beim importieren der grafik eine farbe transparent gemacht hast
aber wenn der geschlossene schrank nicht im hintergrundbild sondern ein eigenes objekt ist, dann könnte es sein, dass das offene schrank objekt mit der baseline hinter dem geschlossenen schrank ist und somit teilweise überlagert wird
Titel: Re: mukks Fragethread ^^
Beitrag von: steve-o-mat am 22. Mai 2007, 18:05:42
*an den Kopf hau* Ich bin so ein Trottel! Danke!
Titel: Re: mukks Fragethread ^^
Beitrag von: steve-o-mat am 22. Mai 2007, 18:34:49
Aber ich hab da trotzdem noch was... wegen den Türen. Mit Tür hab ich das verstanden, aber wie ist denn das nun, wenn ich einfach vor Bernards Haus auf dem Weg ne "Quasi-Tür" zum nächsten Ort haben will? Läuft das dann auch mit ' if (any_click_on_door (...) == 0) Unhandled (); weil dann brauch ich ja auch die "Quasi-Tür" als Objekt. Ich hab das mal mit nem Stück Rasen probiert, aber so richtig geklappt hat es nicht.  :-[
Titel: Re: mukks Fragethread ^^
Beitrag von: Timer am 22. Mai 2007, 18:49:43
Meinst du, wenn man z.B. vor Bernards Haus ist und dann nach links läuft und irgendwo hinkommt?
Titel: Re: mukks Fragethread ^^
Beitrag von: Wegbegleiter am 22. Mai 2007, 18:50:59
Das Tür-Script wäre hier albern, oder wolltest du den Rasen auch öffnen können?
2 sinnvolle Möglichkeiten:
- Leg einfach am Bildrand eine Area an, mit dem Befehl, daß beim Betreten ebendieser ein Raumwechsel stattfinden soll.
- Alternativ kann sich am Bildrand auch ein Hotspot befinden (z.B. mit dem Namen "Haltestelle") und dem darauf liegenden Befehl, daß die Person zum Bildrand laufen soll und dann ein Raumwechsel stattfindet. Dies hat den Vorteil, daß der Spieler besser erkennt, daß es dort noch weitergeht.
Titel: Re: mukks Fragethread ^^
Beitrag von: steve-o-mat am 22. Mai 2007, 19:04:47
Meinst du, wenn man z.B. vor Bernards Haus ist und dann nach links läuft und irgendwo hinkommt?
Genau das mein ich!
2 sinnvolle Möglichkeiten:
- Leg einfach am Bildrand eine Area an, mit dem Befehl, daß beim Betreten ebendieser ein Raumwechsel stattfinden soll.
- Alternativ kann sich am Bildrand auch ein Hotspot befinden (z.B. mit dem Namen "Haltestelle") und dem darauf liegenden Befehl, daß die Person zum Bildrand laufen soll und dann ein Raumwechsel stattfindet. Dies hat den Vorteil, daß der Spieler besser erkennt, daß es dort noch weitergeht.
Danke für den Tip!
Titel: Re: mukks Fragethread ^^
Beitrag von: KhrisMUC am 22. Mai 2007, 20:16:13
Dafür gibt es eine spezielle Funktion:
any_click_walk_look (x, y, dir, lookat)
Mach einen Hotspot, dann benutzt Du diese Funktion in "any click on hotspot" (statt den üblichen Reaktionen).
Z.B. so:if (any_click_walk_look (10, 145, DIR_LEFT, "Da geht's zur Bushaltestelle.") == 0) Unhandled ();Nun machst Du noch eine Region(!) (ein kleiner Bereich um die Koordinaten reicht), die den Spieler bei Betreten in den nächsten Raum schickt.
Titel: Re: mukks Fragethread ^^
Beitrag von: steve-o-mat am 22. Mai 2007, 20:27:45
Hab's schon hin gekriegt... hab ne weile probiert und dann mit nem HotSpot und folgendem Script bei Interaction -> Any click on hotspot -> RunScript   hat es dann geklappt:

if (any_click_move (15, 125, DIR_LEFT))
player.ChangeRoom (17, 600, 135);
Titel: Re: mukks Fragethread ^^
Beitrag von: KhrisMUC am 22. Mai 2007, 20:54:24
1. Die von mir genannte Funktion wurde extra für diesen Zweck geschrieben, also warum sie nicht benutzen?

2. Mit der Funktion kann man den Hotspot automatisch anschauen und erhält die bei look_at angegebene Beschreibung. Praktischer geht's wohl kaum.

(Wir sind hier doch im Newbie-Forum, oder? Warum lässt Du Dir dann nix sagen? Ist nicht persönlich gemeint, aber ich verstehs nicht ganz.)
Titel: Re: mukks Fragethread ^^
Beitrag von: Kaktus am 22. Mai 2007, 21:00:31
KhrisMUC, ich will ein Kind von dir!
Titel: Re: mukks Fragethread ^^
Beitrag von: Timer am 22. Mai 2007, 21:21:39
Ohje, ohje... Was hat denn das mal wieder mit dem Thema zu tun? Kaktus, du hättest einen neuen Thread eröffnen müssen! ;)
Titel: Re: mukks Fragethread ^^
Beitrag von: KhrisMUC am 22. Mai 2007, 21:32:49
Meine Mumu is in der Werkstatt, sorry ;)
Titel: Re: mukks Fragethread ^^
Beitrag von: steve-o-mat am 22. Mai 2007, 21:57:15
Sorry KhrisMUC!
Das sollte jetzt nicht irgendwie abwertend gemeint sein, ich hab ewig versucht das hinzukriegen und war froh, als es endlich geklappt hat. Da ich auch keine richtige Ahnung habe, habe ich die Vorteile deiner Herangehensweise nicht gleich in vollem Maße erfasst, sondern gedacht, es käme auf dasselbe hinaus. Natürlich werde ich mich sofort dran machen, deinen Ansatz auszuprobieren!!!  ;)   Vielen Dank!!!   
Titel: Re: mukks Fragethread ^^
Beitrag von: KhrisMUC am 22. Mai 2007, 22:02:59
Jo, kein Thema :)

Kuck auch mal hier:
http://www.adventure-treff.de/forum/viewtopic.php?t=7529

Da werden die MMM-Funktionen von den Autoren selbst erklärt.
Titel: Re: mukks Fragethread ^^
Beitrag von: steve-o-mat am 22. Mai 2007, 22:40:50
Ich nochmal. Danke für den Link!!!  ;D
Ich dachte mir vorhin nur, dass ich mir mit meiner Methode etwas Arbeit erspare (da weniger Script) und wenn ich den Zeiger über den HotSpot (den ich "m Tollhaus" genannt habe) ziehe, dann steht da ja direkt "Gehe zum Tollhaus". Das war für meine Ansprüche vorhin eigentlich ausreichend...  ;)

(http://img162.imageshack.us/img162/6879/screenshotqg3.th.png) (http://img162.imageshack.us/my.php?image=screenshotqg3.png)

Titel: Re: mukks Fragethread ^^
Beitrag von: mukk am 22. Mai 2007, 22:47:33
So nu ich wieder ^^

also kann ich n object gleichzeitig bewegen und animieren?
ich habs jetz so versucht:

            object[3].SetView(72);
       object[3].Animate(0,5,eRepeat, eNoBlock);
       object[3].Move(1, 155, 3, eBlock);
       player.ChangeRoom(12);

aber damit erscheint nur das ausgangsbild und die szene wechselt in raum 12
Titel: Re: mukks Fragethread ^^
Beitrag von: KhrisMUC am 22. Mai 2007, 23:05:09
Der Code sieht völlig in Ordnung aus.
Mir fallen momentan nur zwei Möglichkeiten ein, entweder hast Du das falsche Objekt erwischt oder es befindet sich bereits an den Koordinaten 1, 155.

Gib sicherheitshalber den Objekten Scriptnamen und benutz oBall.Move(), etc. (geht aber nur im room script).
Titel: Re: mukks Fragethread ^^
Beitrag von: mukk am 22. Mai 2007, 23:11:05
nee, leider stimmt alles...also es kann nich sein, das durch die animation das eigtl. object ausgeblendet wird und sozusagen unsichtbar zur koord. läuft, während die animation stehen bleibt?
das wär jetz irgendwie meine einzige erklärung...
Titel: Re: mukks Fragethread ^^
Beitrag von: KhrisMUC am 23. Mai 2007, 00:19:50
Ne, auf keinen Fall, der Animate-Befehl bewirkt in diesem Fall lediglich, dass AGS intern beim Zeichnen des Objekts die die Sprites durchwechselt, die in der View eingetragen sind.

Andere Frage: wo hast Du dieses Skript verwendet?
Titel: Re: mukks Fragethread ^^
Beitrag von: mukk am 23. Mai 2007, 09:12:20
ne nacht drüber schlafen bringts... da hat n eAnywhere gefehlt...die grafik war zwar auf der walkable, aber nicht die koordinate *peinlich*
 
Titel: Re: mukks Fragethread ^^
Beitrag von: Ha-Ha! am 23. Mai 2007, 20:26:57
Meine Mumu is in der Werkstatt, sorry ;)
[offtopic]Aber wenigstens gibst du zu, dass du eine hast.[/offtopic]
Titel: Re: mukks Fragethread ^^
Beitrag von: KhrisMUC am 23. Mai 2007, 20:44:54
Hab ich mir irgendwann mal auf dem Flohmarkt gekauft, ja. Aber die Gebärmutter hat ein Loch.

@Mukk: Hehe, stimmt, das vergess ich auch gerne, das Objekte sich nach walkable areas richten.
Titel: Re: mukks Fragethread ^^
Beitrag von: mukk am 31. Mai 2007, 14:40:30
nichts wirklich wichtiges, aber manchmal spielen animationen den zugeordneten sound einfach nich ab, weiß jemand woran das liegt?
Titel: Re: mukks Fragethread ^^
Beitrag von: Kaktus am 31. Mai 2007, 14:55:06
Hast du es schon mit Ohren waschen versucht?
Titel: Re: mukks Fragethread ^^
Beitrag von: mukk am 31. Mai 2007, 14:57:58
nee...welcher script-befehl is das?
Titel: Re: mukks Fragethread ^^
Beitrag von: KhrisMUC am 31. Mai 2007, 15:12:22
bEar.Wash(int tool, int intensity);

Aber ohne Spaß beiseite:

Wird bei einer Animation der Sound mal abgespielt und mal nicht, oder funktioniert ein ganz bestimmter Sound nicht, oder wie sonst?
Oder tritt das Problem total zufällig auf? (Was eher schlecht wäre.)
Titel: Re: mukks Fragethread ^^
Beitrag von: mukk am 31. Mai 2007, 15:52:45
nur, dass es bei längeren loops klappt und bei kürzeren nich...ansonsten seh ich da keine unterschiede
Titel: Re: mukks Fragethread ^^
Beitrag von: Rocco am 31. Mai 2007, 17:26:18
vielleicht liegts daran, dass schon zuoft der sound abgespielt wird.
ags erlaubt nur ein paar sounds auf einmal. (weiss jetzt nicht auswendig wieviel 3 oder 5)

if (IsSoundPlaying()==0)
  PlaySound(20);
Titel: Re: mukks Fragethread ^^
Beitrag von: mukk am 12. Juli 2007, 20:35:41
isses möglich bei scrollbaren räumen die durchs script zu skrollen ohne auf den char angewiesen zu sein?
Titel: Re: mukks Fragethread ^^
Beitrag von: Bòógieman am 12. Juli 2007, 21:04:37
ja ist es  ;)
SetViewport heisst das zauberwort  ;D
Titel: Re: mukks Fragethread ^^
Beitrag von: mukk am 28. April 2010, 22:04:39
Hello again...
 ich hab grad ziemlich viel Zeit an der Hand und da is mir meine verstaubte MMM-Episode wieder eingefallen...also mach ich jetz da weiter wo ich vor 3 Jahren aufgehört hab ^^

Ich hab wohl damals wild Hotspot-Inhalte gelöscht oder sowas, jedenfalls hab ich jetzt das Problem, das bei einigen Sachen kein Verb gehighlightet wird und ich find dazu nüscht.
Könnte mir da bitte jemand auf die Sprünge helfen?

gruß vom mukk
Titel: Re: mukks Fragethread ^^
Beitrag von: Bòógieman am 28. April 2010, 22:42:15
am ende der description musst du ein lustiges kürzel anhängen
zB "Tür>o"

>g = A_GIVE_TO
>p = A_PICK_UP
>u = A_USE
>o = A_OPEN
>l = A_LOOK_AT
>s = A_PUSH
>c = A_CLOSE
>t = A_TALK_TO
>y = A_PULL
Titel: Re: mukks Fragethread ^^
Beitrag von: mukk am 28. April 2010, 22:50:35
mh, ok danke, das hilft mir schonma weiter, dazu nochma ne Verständnisfrage: bei einigen Sachen steht einfach nix hinter und da is trotzdem "Schau" an...wieso?

und wo wir schon dabei sind, wie steigere ich ne Variable um 1 ohne den Grundwert zu kennen, also immer wenn der Spieler x macht, wird die Variable erhöht, und sobald die Variable = y ist, passiert z .. also der letzte Teil is klar, nur das + 1 nich...

benutze übrigens AGS 3

[update]hab das grad mal alles probiert und s haut irgendwie nich hin, bei einigen Sachen klappts, bei anderen nich, bei wiederum anderen gehts wie oben schon erwähnt einfach trotzdem....bin verwirrt
Titel: Re: mukks Fragethread ^^
Beitrag von: 1mal_volltanken am 29. April 2010, 02:50:25
Hallo mukk!

Also Möglichkeiten, eine Variable nach dem gewünschten Wert zu ändern, findest Du in folgendem Thread:

http://www.maniac-mansion-mania.de/forum/index.php?topic=1046.0 (http://www.maniac-mansion-mania.de/forum/index.php?topic=1046.0)


BG
der Volltanker
Titel: Re: mukks Fragethread ^^
Beitrag von: Bòógieman am 29. April 2010, 08:12:59
mh, ok danke, das hilft mir schonma weiter, dazu nochma ne Verständnisfrage: bei einigen Sachen steht einfach nix hinter und da is trotzdem "Schau" an...wieso?
weil die standardaktion "Schau an" ist, somit bekommen alle hotspots oder objekte die keine aktion in der description definiert haben "Schau an" als standardselektion

und wo wir schon dabei sind, wie steigere ich ne Variable um 1 ohne den Grundwert zu kennen, also immer wenn der Spieler x macht, wird die Variable erhöht, und sobald die Variable = y ist, passiert z .. also der letzte Teil is klar, nur das + 1 nich...
Variable++;
oder
Variable = Variable + 1;

[update]hab das grad mal alles probiert und s haut irgendwie nich hin, bei einigen Sachen klappts, bei anderen nich, bei wiederum anderen gehts wie oben schon erwähnt einfach trotzdem....bin verwirrt
kommt wahrscheinlich auf das verwendete starterpack an  :-\
die behandlung für die erweiterungen findest du im global script
ich hab jetzt kein AGS zur hand aber wenn du im global script nach 'u' (inklusive der ') suchst, solltest du einen codeblock finden wo die buchstaben zu den aktionen zugewiesen werden
alles was du da findest sollte auch funktionieren
Titel: Re: mukks Fragethread ^^
Beitrag von: mukk am 29. April 2010, 11:19:25
danke schonmal für das variablenkram

die standardaktionsache krieg ich einfach nich hin...ich hab den ganzen raum nochma neu aufgebaut und es is immernoch das gleiche durcheinander, also musses irgendwie im globalscript hängen...sind da irgendwo die türen einzeln definiert? hätt ich vielleicht schonma sagen können, hab das problem nur bei türen im flur im ersten stockwerk im bernard-starter 2.72...
Titel: Re: mukks Fragethread ^^
Beitrag von: Bòógieman am 29. April 2010, 12:06:16
ja, die sind etwas komplizierter
die verwenden >v für variabel
im global script gibt es dann ne stelle wo anhand einer global_int daraus öffnen oder schließen wird
wenn du da also neue türen gemacht hast oder bestehende verändert hast, wird das nicht funktionieren
für neue sachen musst du da in der entsprechenden global script funktion (die ich dir momentan leider nicht sagen kann weil ich kein ags zur hand hab) einen neuen eintrag machen, damit diese tür da auch mitbehandelt wird
Titel: Re: mukks Fragethread ^^
Beitrag von: mukk am 29. April 2010, 12:41:12
hm, hab jetz alles in den griff bekommen bis auf eine tür, die sich richtig öffnet, aber dann auch weiterhin "öffne" anzeigt. Da alle anderen Türen richtig funktionieren bin ich echt ratlos...das schließt ja das globalscript als fehlerquelle wieder aus... jemand ne idee?
ansonsten wär ne genaue angabe, wo ich diese funktionen finde auch hilfreich...stolpere zwar ab und zu über definitionen übers öffnen und schließen aber einzelne türen hab ich noch nirgends entdeckt

gruß und dank, mukk
Titel: Re: mukks Fragethread ^^
Beitrag von: Bòógieman am 29. April 2010, 13:12:58
stell mal sicher, dass der hotspot der tür auf jeden fall ein >v am ende hat und kein >o
und dann handle dich vom aufruf der any_click_on_door function nach innen bis du zu der funktion kommst, wo ein haufen if-else sind die den aktuellen raum und den hotspot checken und je nach zustand der global_int 'o' oder 'c' machen

und in dieser funktion musst du sicherstellen, dass ein eigener else if zweig für deinen raum und deinen hotspot existiert (und für den raum der auf der anderen seite der tür liegt ebenfalls)

wenn das immer noch nicht klappt, hast du wohl die global_int der tür irgendwo anders auf einen falschen wert gesetzt

und wenn das alles nix bringt, stellt sich nur noch die frage:
hast du die tür selber gemacht, oder war die schon im starterpack enthalten?

oder verwendest du da ein neues rulaman starterpack für AGS3.1 das die any_click_on_door funktion durch etwas neues ersetzt hat?
Titel: Re: mukks Fragethread ^^
Beitrag von: mukk am 29. April 2010, 13:52:15
definiere "nach innen handlen" :)

hab grad das hier gefunden:

else if ((r == 2) && (h == 4)) OpenCloseExtension (4, location);

wenn r== 2 raum 2 is und h == 4 der hotspot 4 dann bezieht sich das auf meine problemtür...was bedeutet die 4 vor location?

Die andere, funktionstüchtige Tür im Raum sieht so aus: 

else if ((r == 2) && (h == 2)) OpenCloseExtension (3, location);


Das problem besteht übrigens von der anderen seite der tür genau so
Titel: Re: mukks Fragethread ^^
Beitrag von: Bòógieman am 29. April 2010, 16:34:05
definiere "nach innen handlen" :)
in dem du dir die funktion zeile für zeile ansiehst und bei einem aufruf einer anderen funktion zu dieser gehst und diese dann zeile für zeile ansiehst... usw.
irgendwann wärst du dann zu der besagten stelle gekommen  ;)

hab grad das hier gefunden:

else if ((r == 2) && (h == 4)) OpenCloseExtension (4, location);
jarp, das ist die stelle die ich gemeint habe :D

kurze erklärung
(r == 2) --> hier ist die 2 die raumnummer der tür
(h == 4) --> hier ist die 4 die hotspotnummer der tür
OpenCloseExtension (4, location) --> hier ist die 4 die global_int nummer der tür

Beispiel:
deine tür verbindet raum 2 und raum 3
in raum 2 hat die tür den hotspot 4
in raum 3 hat die tür den hotspot 5
die tür verwendet global_int 6

dann brauchst du folgende zeilen
else if ((r == 2) && (h == 4)) OpenCloseExtension (6, location);
else if ((r == 3) && (h == 5)) OpenCloseExtension (6, location);


EDIT:
ich bin mir nicht mehr sicher, ob die zahl bei OpenCloseExtension nicht doch die objektnummer der türgrafik ist...  :-\
Titel: Re: mukks Fragethread ^^
Beitrag von: mukk am 29. April 2010, 17:39:53
yeaha! das wars, irgendwas war mit der int 4 schräg, hab die einfach bei beiden türen geändert und nu läuft alles wieder wie geschmiert  ;D

dickes danke, boogie
Titel: Re: mukks Fragethread ^^
Beitrag von: mukk am 29. April 2010, 22:24:24
diesmal bin ich auf der Suche nach nem Befehl für ne Textanzeige an einem sich bewegenden Objekt, das sich obendrein noch durch einen scrollbaren hintergrund bewegt...der text sollte idealerweise mit dem objekt mitfahren und nicht blocken...geht sowas? :)
Titel: Re: mukks Fragethread ^^
Beitrag von: Bòógieman am 30. April 2010, 08:13:38
ich weiß noch nicht ganz was du meinst, aber ich gebe mal ein paar tipps die dir evtl. helfen könnten

soll das objekt den text wie ein sprach-text bei player.Say darstellen?
also etwas oberhalb vom objekt und nur für eine gewisse zeit sichtbar?
wenn ja wäre es am einfachsten statt einem objekt nen character zu machen
allerdings ist der text dann immer im aktuell sichtbaren bereich des raums
wenn das objekt das bild nach rechts verlässt, bleibt der text am rechten rand einfach stehen

ansonsten musst du dir in der AGS hilfe die text overlays anschauen
eines erstellen und dieses in der zyklisch aufgerufenen globalen funktion (wo mir gerade der name nicht einfällt, so ähnlich wie repeatedly_executed) immer zu den aktuellen koordinaten des objekts verschieben
bin mir da aber nicht so sicher, ob man ein text overlay auch außerhalb des aktuell sichtbaren bereichs des raumes machen kann  :-\
das könnte man aber bei bedarf ein- und ausblenden ;)

soweit ich weiß gibt es auch grafikfunktionen, mit denen man auf sprites zeichnen kann
evtl. gibt es da auch was um text auf eine grafik zu schreiben

ansonsten gäbe es da noch die möglichkeit, dass du alle möglichen texte schon als grafik vorbereitest und dem objekt beim wechsel die gewünschte grafik zuweist
Titel: Re: mukks Fragethread ^^
Beitrag von: mukk am 30. April 2010, 12:12:47
mh...ich glaube ich bin einfach schlecht darin, probleme zu beschreiben ^^

also ich habe ein fahrendes auto, das auf ner langen straße fährt und ich möchte während der fahrt nen dialog von zwei insassen ablaufen lassen...der text müsste sich also wie bei charakteren mitbewegen. das auto is immer im sichtbaren bereich bzw. es wär verkraftbar, wenn der text gegen eine kante läuft...

Zu den Overlays
Overlay* myOverlay = Overlay.CreateTextual(50,80,120, Game.SpeechFont, 15,"This is a text overlay");

da müsste dann ja an die stelle der koordinaten das rein was du meintest.... da bräucht ich nochma n tipp, mit int Object.X kriegt man nur momentane koordinaten, also keine bewegungen, und was anderes find cih nich :-\
 
Titel: Re: mukks Fragethread ^^
Beitrag von: Bòógieman am 30. April 2010, 13:51:11
du willst also das selbe machen, wie ich mit dem bus in 5th Maniac Birthday?
das hab ich vor kurzem mal genau beschrieben
http://www.maniac-mansion-mania.de/forum/index.php?topic=511.msg27786#msg27786 (http://www.maniac-mansion-mania.de/forum/index.php?topic=511.msg27786#msg27786)

ignoriere einfach den part der sich um die ebenen des busses dreht  ;)

aber wenn du die overlays verwenden willst, musst du das myOverlay als raumvariable (also außerhalb deiner funktion) machen und dann beim repeatedly_execute ereignis des raums dann die koordinaten des overlays neu berechnen anhand des viewports oder der position des player-chars
Titel: Re: mukks Fragethread ^^
Beitrag von: mukk am 30. April 2010, 15:26:24
Ja, das is ziemlich genau das, was ich brauche :)

also wenn ich das richtig rauslese hast du den bus zum charakter gemacht?
Titel: Re: mukks Fragethread ^^
Beitrag von: Bòógieman am 30. April 2010, 15:37:36
jup
und je nach der richtung in die diese charakter gerade schaut, bewegt ein anderer passagier seine lippen beim sprechen ;)
Titel: Re: mukks Fragethread ^^
Beitrag von: mukk am 30. April 2010, 21:10:50
sehr praktisch :)

jetz hab cih bloß das problem, das das automatische scrollen nich ganz passt...kann man das irgendwie verschieben? mit setviewport geht das ja nur mit while und wait und das würde das script sören
Titel: Re: mukks Fragethread ^^
Beitrag von: Bòógieman am 01. Mai 2010, 14:58:02
achja, ich hab da nicht SayAt vewendet, sondern eine eigens geschriebene SayBackgroundAt

dazu fügt man im global script folgendes oben hinzu

Overlay* olSBA;
int iSBAWait = -1;

function SayBackgroundAt(Character *cChar, int iX, int iY, int iWidth, String strText)
{
  olSBA = Overlay.CreateTextual(iX + iWidth/2 - GetTextWidth(GetTranslation(strText), 1)/2, iY, iWidth, 1, cChar.SpeechColor, strText);
  iSBAWait = strText.Length * 5;
}

und in repeatedly_execute_always
function repeatedly_execute_always () {
...
  if(iSBAWait == 0)
  {
    olSBA.Remove();
    iSBAWait--;
  }
  else if(iSBAWait > 0)
    iSBAWait--;
}

im room script sieht das bei mir so aus (cFriends ist der bus)
...
  cFriends.Animate(0, 5, eRepeat, eNoBlock, eForwards);
  while(cFriends.x > 900)
  {
    cFriends.x -= cFriends.WalkSpeedX;
    Wait(1);
  }
  cFriends.Animate(2, 5, eRepeat, eNoBlock, eForwards);
  SayBackgroundAt(cSyd, 0, 15, 180, "Ein Hoch auf unseren Busfahrer! Busfahrer! Busfahrer! Ein Hoch auf unseren Busfahrer! Auf unseren Busfahrer ein Hoch!");
  while(cFriends.x > 300)
  {
    cFriends.x -= cFriends.WalkSpeedX;
    Wait(1);
  }
  cFriends.Animate(3, 5, eRepeat, eNoBlock, eForwards);
  SayBackgroundAt(cEdna, 0, 30, 320, "HALTET GEFÄLLIGST DIE FRESSE!                              ");
  while(cFriends.x > 270)
  {
    cFriends.x -= cFriends.WalkSpeedX;
    Wait(1);
  }
  cFriends.Animate(1, 5, eRepeat, eNoBlock, eForwards);
  while(cFriends.x > -200)
  {
    cFriends.x -= cFriends.WalkSpeedX;
    Wait(1);
  }
...

wenn es aber reicht, dass der text immer and er selben stelle kommt, geht auch SayBackground
und bevor du fragst:
cEdna und cSyd hab ich beim SayBackgroundAt nur verwendet, da diese die passende sprachfarbe haben  ;)
Titel: Re: mukks Fragethread ^^
Beitrag von: mukk am 01. Mai 2010, 15:16:58
vielen dank, so ausgereift braucht ichs garnich ;)

hab jetz bloß noch das problem, dass ich das scrollen mit dem playerchar, also dem auto, noch nach rechts verschieben möchte, also wenn es an die linke kante kommt, dass es später anfängt zu scrollen, haste da noch was auf lager? :)

plus jetzt noch ein neues problem ^^

in allen räumen die ich selber neu eingefügt habe verschwindet der gesprochene text der charaktere unter dem schwarzen balken am oberen bildschirmrand wenn sie weit genug oben stehen... kann mir da jemand sagen, wo man das einstellt?
Titel: Re: mukks Fragethread ^^
Beitrag von: Bòógieman am 02. Mai 2010, 11:26:48
in diesem fall musst du dich selber um das scrollen kümmern mit SetViewport

alternativ ginge es auch noch, dass du die sprites so breit machst wie den bildschirm, so dass halt das auto ganz links ist und rechts einfach mit transparenten pixel aufgefüllt wird
Titel: Re: mukks Fragethread ^^
Beitrag von: mukk am 03. Mai 2010, 19:41:43
Warum geht das so nich  ??? er führt die gebe funktion nich aus, überspringt im script den kompletten teil; Bier ist definitiv 1

Zitat
else if (UsedAction(A_GIVE_TO))
  {
       if (Bier==1)
       {
        if (character [GetPlayerCharacter()].activeinv ==31) 
        {
          Wait(20);
          PlaySound(4);
          LoseInventory(31);
          AddInventory(32);
          Wait(20);
          cMech.SpeechView = 87;
          cMech.Say("Ah, danke, Sir. Sehr zuvorkommend.");
          cMech.SpeechView = 86;
          Bier=2;         
         
        }
        else if (character [GetPlayerCharacter()].activeinv ==32) 
        {
          Wait(20);
          PlaySound(4);
          LoseInventory(32);
          Wait(20);
          cMech.SpeechView = 87;
          cMech.Say("Ah, danke, Sir. Sehr zuvorkommend.");
          cMech.SpeechView = 86;
          Bier=2;                   
        }
       }
      else if (Bier==2)
       {
        if (character [GetPlayerCharacter()].activeinv ==32) 
        {
          player.Say("Er hat schon eins.");
         }
    }
  }
Titel: Re: mukks Fragethread ^^
Beitrag von: Bòógieman am 03. Mai 2010, 20:31:48
hast du schonmal nen breakpoint gesetzt und gecheckt ob er auch zu der if kommt?

ich vermute mal dass entweder
* die else if der ersten zeile garnicht mehr gecheckt wird, da schon eine vorherige (hier nicht sichtbare) bedingung zugetroffen hat
* da evtl. das activeinv was anderes ist als 31 und 32
* du den code evtl. im falschen event-handler gemacht hast (zB statt any_click look_at oder so ;) )
Titel: Re: mukks Fragethread ^^
Beitrag von: mukk am 03. Mai 2010, 20:46:34
jo, hast recht, er kommt nich zum if bier...aber warum...die ganzen funktionen stehen unter any click und 31 und 32 passen auch,look_at und talk_to funktionieren
gibt auch keine unhandled aus
 hier nochma der rest:

Zitat
function cMech_AnyClick()
{
if (MovePlayer (56, 122))
{
  FaceCharacter (GetPlayerCharacter (), MECH);
 
  if (UsedAction (A_LOOK_AT))
   {
  DisplaySpeech(GetPlayerCharacter(),"Der bestellte Handwerker, fleißig bei der Arbeit.");
   }
  else if (UsedAction (A_TALK_TO))
   {
    player.Say("Hallo.");
    cMech.Say("Ah, da sind sie ja, Sir.");
    player.Say("Und kommen sie vorran?");
    cMech.Say("'türlich, Sir. Alles nix neues hier. Dauert nich mehr lange.");
    player.Say("Das ist gut.");
    dMech4.Start();
   } 
  else if (UsedAction(A_GIVE_TO))
   {
    if (Bier==1)
    {
     if (character [GetPlayerCharacter()].activeinv ==31) 
     {
          Wait(20);
          PlaySound(4);
          LoseInventory(31);
          AddInventory(32);
          Wait(20);
          cMech.SpeechView = 87;
          cMech.Say("Ah, danke, Sir. Sehr zuvorkommend.");
          cMech.SpeechView = 86;
          Bier=2;         
         
     }
     else if (character [GetPlayerCharacter()].activeinv ==32) 
     {
          Wait(20);
          PlaySound(4);
          LoseInventory(32);
          Wait(20);
          cMech.SpeechView = 87;
          cMech.Say("Ah, danke, Sir. Sehr zuvorkommend.");
          cMech.SpeechView = 86;
          Bier=2;                   
      }
     }
       else if (Bier==2)
      {
        if (character [GetPlayerCharacter()].activeinv ==32) 
       {
          player.Say("Er hat schon eins.");
       }
      }
   }
}
else Unhandled();
}
Titel: Re: mukks Fragethread ^^
Beitrag von: Bòógieman am 04. Mai 2010, 08:47:11
hast du evtl. das "use inventory on character" event in verwendung?
bin mir nicht sicher, aber mir ist bei AGS3.1.2 auch schon aufgefallen, dass any_click nicht alle actions mitbekommt  :-\

das MovePlayer wird auch fertig und nicht abgebrochen?
mach mal bei jeder einzelnen if der funktion einen breakpoint und debugge, dann solltest du zumindest sehen was er nun wirklich macht
dann siehst du auch ob er bei GIVE_TO überhaupt in diese funktion rein geht
und mach auch bei deiner Bier-abfrage einen else zweig der ohne bedingungen ist
vielleicht hat Bier doch einen anderen wert als du denkst
Titel: Re: mukks Fragethread ^^
Beitrag von: mukk am 04. Mai 2010, 19:23:40
also bier nochmal überprüft, passt

bei den einzelschritten geht er, wie bei bei den anderen befehlen auch in dieses script:

function UsedAction (int test_action){
  return ((used_action == test_action) && (GSagsusedmode != MODE_USEINV)) || ((test_action == A_USE_INV) && (used_action == A_USE) && (GSagsusedmode == MODE_USEINV));
}

das testet wohl irgendwie ob das zurtrifft, kommt aber zu dem schluß, dass das nich der fall ist...

das selbe macht er beispielsweise bei A_LOOK_AT, da wird das script dann aber richtig fortgesetzt....muss also irgendwie an dem A_GIVE_TO hängen...


hast du evtl. das "use inventory on character" event in verwendung?

meinst du, ich sollte das benutzen oder ob das anderweitig in benutzung is? letzteres wäre bei dem char nicht der fall, das script ist alles was mit ihm zu tun hat
Titel: Re: mukks Fragethread ^^
Beitrag von: Bòógieman am 04. Mai 2010, 19:55:38
hab jetzt bei meinem projekt nachgesehen und es verhält sich genau so wie deines
sprich der A_GIVE_TO-check greift ins leere
als alternative hab ich dann das "Use inventory on character" ereignis verwendet, damit klappt es ganz gut
aber stimmt, das ist mir vor langer langer zeit auch mal spanisch vorgekommen  ???

was sagen denn unsere starterpack-experten dazu?
Titel: Re: mukks Fragethread ^^
Beitrag von: mukk am 04. Mai 2010, 20:08:51
unter use inventory on... klappts bei mir auch nich...hast du statt geben benutzen genommen?
Titel: Re: mukks Fragethread ^^
Beitrag von: Bòógieman am 04. Mai 2010, 20:35:19
also bei mir wird das sowohl bei "benutze" als auch bei "gib" ausgeführt  :-\
ist vielleicht eine generelle spiel-option?

bzw. in diesem ereignis darfst du dann nicht mehr mit UsedAction abfragen sondern machst gleich direkt das skript das er bei "gib" ausführen soll
Titel: Re: mukks Fragethread ^^
Beitrag von: mukk am 04. Mai 2010, 21:16:24
ah das klappt, danke
Titel: Re: mukks Fragethread ^^
Beitrag von: mukk am 05. Mai 2010, 10:35:53
hab grad n bissl im adventuretreff rumgelesen und bin dabei hierauf gestoßen:

http://www.adventure-treff.de/forum/viewtopic.php?p=172643#p172643

ist also alles bekannt :)
Titel: Re: mukks Fragethread ^^
Beitrag von: mukk am 06. Mai 2010, 21:19:05
ich bräuchte hilfe beim scripten:

1. ich hätte gern, das bestimmte inventory-items immer oben-links in der inventory-liste auftauchen...gibbets da was?

2. ich bräuchte ein object, dass in einem scrollenden raum immer an der gleichen stelle im "vordergrund" auftaucht, also sowas wie die stoppuhr bei mmd "the race"

ein paar anstöße in die richtige richtung  würden schon reichen :)
Titel: Re: mukks Fragethread ^^
Beitrag von: Mister L am 06. Mai 2010, 21:31:35
Zu 1.)

Das geht mit  player.AddInventory (ilukenöffner,1);

Damit würde der Lukenöffner an Position 1 des Inventars gepackt.

Zu 2 fällt mir nur ein neues GUI ein, weiß nicht ob das die Lösung für dein Problem ist.  :-\
Titel: Re: mukks Fragethread ^^
Beitrag von: mukk am 06. Mai 2010, 22:17:59
jo isses, dankeschön  :)
Titel: Re: mukks Fragethread ^^
Beitrag von: mukk am 24. Mai 2011, 23:03:16
Folgendes Problem:

Sobald ich einem Charakter etwas geben will, wird erst das Script ausgeführt, das bei Use Inventory on Character eingetragen ist, danach (!) springt das Spiel in diese Zeile im GlobalScript:

[ags]string buffer;
    if (type == 2 || type == 6) FaceCharacter (GetPlayerCharacter (), GetCharacterAt (mouse.x, mouse.y));
[/ags]

die Zeile steht unter [ags]function unhandled_event (int xxx, int yyy)[/ags]

darüber steht ne Legende:
Zitat
//Check modes with: if(UsedAction(A_???)), check types by if(type==#). types:
    //1   a hotspot
    //2   a character
    //3   an objekt
    //4   an inventory item.
    //5   inv. item on hotspot
    //6   inv. item on character
    //7   inv. item on objekt
    //8   inv. item on inv. item
    // // You have the string "locationname" that is the name of
    // // what you clicked on, and the string "usedinvname" that is
    // // the name of the item that was used on where you clicked (only for types 5,6,7,8)
    // // REPLACE THIS SAMPLE INTERACTIONS WITH YOURS:

Das Spiel stürzt in dem Moment in dem er im oben genannten Script landet ab falls man die Maus bewegt, da dann ja der gesuchte Charakter nicht mehr unter der Maus ist. Und da AGS erst das Script aus UseInvOnChar ausführt, ist das mehr als wahrscheinlich.

Mein Script bei bspw. Britney sieht so aus:

[ags]function cBritney_UseInv()
{
MovePlayer (40, 130);
FaceCharacter (GetPlayerCharacter (), BRITNEY);

  if (BritneyInv==1)
  {
DisplaySpeech(BRITNEY,"Das will ich nicht.");
  }
  if (BritneyInv==0)
  {
DisplaySpeech(GetPlayerCharacter(),"Das brauch ich noch.");
  }
}[/ags]

Ich hab keine Ahnung, in wie weit ich dadran rumpfuschen darf oder warum er an der Stelle überhaupt in ein Script für unhandled events geht...kann mir da bitte jemand helfen?


Edit: Hab die Zeile jetzt einfach rausgenommen und es scheint alles zu laufen... kurios
Titel: Re: mukks Fragethread ^^
Beitrag von: KhrisMUC am 25. Mai 2011, 00:41:46
Das ist schon bei Maniac Mansion Deluxe so schlampig programmiert gewesen, war aber kein Problem, da Charaktere nur das any_click-Event hatten.
Und da das Gib-Verb ein Spezialfall war, der separat behandelt wurde, wurde die entsprechende Zeile immer unmittelbar nach dem Klick auf den Charakter aufgerufen, d.h. man musste die Maus schon extrem schnell wegbewegen, um den null pointer error zu erzeugen.

Die alten Starterpacks aber sind so umgeschrieben, das Gib und Benutze UseInv aufrufen. Danach wird allerdings trotzdem any_click aufgerufen (das wird von AGS so gehandhabt und lässt sich nicht abstellen).
Wenn also UseInv eine Reaktion erzeugt, z.B. einen kurzen Dialog, dann ist die Maus danach natürlich längst sonstwo gelandet, und am ende von any_click wird dann schön brav Unhandled() aufgerufen, das jedoch den aktuell unter der Maus befindlichen Charakter verwenden möchte. Da ist jedoch in der Regel keiner mehr, und so entsteht der berühmt-berüchtigte Fehler.

Eine vernünftige Lösung muss somit verhindern, dass Unhandled ausgeführt wird, wenn die Aktion sehr wohl "gehandled" wurde, nämlich von UseInv.
Alternativ kann man Benutze und Gib auch wieder in any_click "handlen", dann fällt der Fehler ebenfalls weg.
Neuere Starterpacks haben vermutlich eine dieser Varianten bereits umgesetzt; das Problem hier ist auch, dass Du mit uraltem Code und wahrscheinlich entsprechend einem völlig veralteten AGS und Starterpack arbeitest.

Zum direkten Vergleich:
Alt:
[ags]  DisplaySpeech(GetPlayerCharacter(),"Das brauch ich noch.");[/ags]
Neu:[ags]  player.Say("Das brauch ich noch.");[/ags]

Das geht übrigens schon ab 2.7, d.h. Du musst Dich nicht an den neuen Editor gewöhnen; wenn Du bereits (hoffentlich) mit 2.72 arbeitest, dann würde ich Dir sehr empfehlen, auf neuen Code umzusteigen.
Titel: Re: mukks Fragethread ^^
Beitrag von: mukk am 25. Mai 2011, 01:41:51
Ähm...ja, ich benutze AGS 3.1 und scripte frei nach Frankenstein...kopieren und einfügen was ich grad brauche. Und da die Starter alle alt sind die ich benutze, ist der Code wild durcheinnander...aber s läuft ;)

Muss ich jetzt mit irgendwelchen Konsequenzen rechnen, wenn ich
[ags]string buffer;
    if (type == 2 || type == 6) FaceCharacter (GetPlayerCharacter (), GetCharacterAt (mouse.x, mouse.y));[/ags]
einfach rauslösche?

Alternativ kann man Benutze und Gib auch wieder in any_click "handlen", dann fällt der Fehler ebenfalls weg.

Das klappt nicht, hab ich mehrfach versucht...liegt vielleicht an den alten Startern?
Titel: Re: mukks Fragethread ^^
Beitrag von: KhrisMUC am 25. Mai 2011, 04:25:58
Das Löschen sollte eigentlich keine negativen Folgen haben.

Um Benutze und Gib in any_click packen zu können, muss wahrscheinlich das GlobalScript umgeschrieben werden. Einfach "if (UsedAction(A_GIVE))" verwenden dürfte nicht funktionieren, nein.

Solange alles läuft, würd ich erst mal weitermachen; jetzt noch alles umschreiben macht wahrscheinlich wenig Sinn. :)
Titel: Re: mukks Fragethread ^^
Beitrag von: mukk am 19. Januar 2012, 18:47:36
woohoo, weiter gehts  8)

hab 2 fragen bezüglich des spielercharakters:

1. Kann man die steh-animation irgendwie animieren ohne die idle-animation auf dauerhaft zu stellen? Normal wird ja nur frame 0 der entsprechenden loop benutzt...also irgendwie die ersten 2 frames dafür reservieren o.ä.? Die idle-animation würd ich mir gern für was anderes aufheben

2. Ich benutz ein anderes Gui und möchte, dass sich das Inventar bei tastendruck (kein Problem) und bei Klick auf den Charakter öffnet. Der ist allerdings sehr fizzelig anzuklicken...lässt sich da der Hotspot irgendwie unabhängig vom Sprite festlegen?
Titel: Re: mukks Fragethread ^^
Beitrag von: KhrisMUC am 20. Januar 2012, 22:41:07
1. Nicht durch einen eingebauten Mechanismus; von Hand, also per script geht sowas i.d.R. immer.
Ich hab vor einem Jahr ein entsprechendes Modul gemacht: https://dl.dropbox.com/s/69fk4e4o7h7uokl/IdleIdle.scm?dl=1
Zum Benutzen einfach sowas in game_start:[ags]  player.SetIdleIdleView(3, 4, 10);[/ags]
Dann wird view 3 zum stehen genommen, und view 4 zum "idlen" nach 10 Sekunden.

2. Man kann global die Option "pixel-perfect click detection" deaktivieren. Dann wird bei jedem Charakter oder Object die Transparenz im Sprite ignoriert. Das wirst Du aber nicht wollen, schätze ich.
Alternativ könntest Du einen zweiten Charakter mit Transparenz = 99 verwenden, der dem Spieler per FOLLOW_EXACTLY folgt. Und dann player.Clickable auf false, und den zweiten für click-events hernehmen.
Titel: Re: mukks Fragethread ^^
Beitrag von: mukk am 21. Januar 2012, 17:01:07
Super, genau was ich brauchte  :-*

Ein kleines Problem: Die Idle-Animation setzt erst nach nach ner Sekunde oder so ein, und da sie recht schnell is fällt das doch ziemlich auf...kann man da was dran machen?
Titel: Re: mukks Fragethread ^^
Beitrag von: KhrisMUC am 22. Januar 2012, 02:55:34
Intern wird [ags]  this.SetIdleView(idle, 0);[/ags] verwendet, da kann man also leider nichts machen.

Probier doch bitte mal aus, ob diese Verzögerung unabhängig von meinem Modul auftritt.