Falscher Lösungsansatz? Bitte um Hilfe

Fragen zu "Adventure Game Studio"? Hier rein!
Antworten
Benutzeravatar
RoyBatty
Frischling
Frischling
Beiträge: 8
Registriert: 23.02.2009, 18:00

Falscher Lösungsansatz? Bitte um Hilfe

Beitrag von RoyBatty »

Hab folgendes Problem:
Möchte andere Characters so haben, dass sie im Hintergrund herumgehen und wenn sie angesprochen werden stehen bleiben um zu antworten. Hab mir zwar einen Lösungsansatz überlegt, der funktioniert aber nicht wirklich gscheid:

function room_RepExec()
{
int a;
a=Random (3);
if (a==1)cPeter.Walk(244, 135, eBlock, eWalkableAreas);
if (a==2)cPeter.Walk(365, 132, eBlock, eWalkableAreas);
if (a==3)cPeter.Walk(95, 137, eBlock, eWalkableAreas);
}
Jetzt geht zwar "Peter" brav seine 3 Koordinaten ab, tut das aber nicht im Hintergrund, sondern so offensichtlich, dass der Hauptcharakter nicht handeln kann. Hab leider keine "Walk background" funktion finden können.
Höchstwahrscheinlich is das überhaupt der komplett falsche Lösungsansatz-- und zu den Gesprächstopps bin ich gar nicht erst gekommen!
Vielen Dank im Voraus!
Ps.: Tut mir Leid, falls das Thema im Forum schon einmal gebracht wurde.
Mei Bier is ned deppad!
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Re: Falscher Lösungsansatz? Bitte um Hilfe

Beitrag von KhrisMUC »

eNoBlock statt eBlock.

Das funktioniert so trotzdem nicht, wurde aber schon mehrfach im Forum abgehandelt. Ich bin aber grade zu faul, selbst zu suchen.

Das mit dem Ansprechen ist an sich nicht soo kompliziert; DU musst Dir lediglich überlegen, wie Du es von den Positionen her handhaben willst. Bleiben beide dort, wo sie sind, und rufen sich zu? Geht der Spieler zum NPC? Oder umgekehrt?
Use gopher repellent on funny little man
Benutzeravatar
RoyBatty
Frischling
Frischling
Beiträge: 8
Registriert: 23.02.2009, 18:00

Re: Falscher Lösungsansatz? Bitte um Hilfe

Beitrag von RoyBatty »

Bei eNoBlock feuert das Programm die Befehle zu schnell, und der Charakter steht nur still rum und zuckt in verschiedene Richtungen weil er sich nicht entscheiden kann in welche richt er geht.(Wenns stimmt)
Aber vielen Dank, werd den Thread schon finden, wenn er hier schon mal aufgetaucht ist!
Mei Bier is ned deppad!
Benutzeravatar
Helme
Hobby-Archäologe
Hobby-Archäologe
Beiträge: 147
Registriert: 23.01.2009, 10:13

Re: Falscher Lösungsansatz? Bitte um Hilfe

Beitrag von Helme »

Du musst Timer setzen, z.B. nach dem Fade-In.
Dann wird ständig geprüft, ob ein Timer abgelaufen ist. Wenn das passiert, wird die Aktion durchgeführt und danach muß der Timer wieder gestellt werden.

function room_AfterFadeIn(){SetTimer(X, X);}

function room_RepExec(){if (IsTimerExpired(X)) {.
..;
SetTimer(X, X); }}
Benutzeravatar
RoyBatty
Frischling
Frischling
Beiträge: 8
Registriert: 23.02.2009, 18:00

Re: Falscher Lösungsansatz? Bitte um Hilfe

Beitrag von RoyBatty »

Danke für die Idee mit dem Timer!- hab aber immer noch das Problem, dass mein Charakter, während der Andere geht nicht handlungsfähig ist
Mei Bier is ned deppad!
Benutzeravatar
Timer
Süßwasserpirat
Süßwasserpirat
Beiträge: 260
Registriert: 27.02.2007, 17:35

Re: Falscher Lösungsansatz? Bitte um Hilfe

Beitrag von Timer »

Code: Alles auswählen

function room_RepExec()
{
  if (IsTimerExpired (1)) {
    int a;
    a = Random (3);
    if (a == 1) cPeter.Walk (244, 135, eNoBlock, eWalkableAreas);
    if (a== 2) cPeter.Walk (365, 132, eNoBlock, eWalkableAreas);
    if (a== 3) cPeter.Walk (95, 137, eNoBlock, eWalkableAreas);
    SetTimer (1, 40);
  }
}
...funktioniert bei mir soweit.
Benutzeravatar
Rocco
Adventure-Treff
Adventure-Treff
Beiträge: 1019
Registriert: 25.11.2003, 16:20
Wohnort: Ronville
Kontaktdaten:

Re: Falscher Lösungsansatz? Bitte um Hilfe

Beitrag von Rocco »

versuchs mit dem CharacterControl Modul -> http://www.bigbluecup.com/yabb/index.php?topic=28821.0
Benutzeravatar
RoyBatty
Frischling
Frischling
Beiträge: 8
Registriert: 23.02.2009, 18:00

Re: Falscher Lösungsansatz? Bitte um Hilfe

Beitrag von RoyBatty »

Danke, hat alles perfekt gepasst, jetzt muss ich nur noch meinen Spieler dazu bringen zum NPC zu gehen(da er ihn ja anreden will und nicht über größe distanzen mit ihm "schreien" soll--da hab ichs mit follw.character probiertaber is nicht so wirklich was geworden)--- und das derNPC sich dann auch gefälligst in meine richtung dreht und ihm nicht den Rücken zuwendet.
Tut mir Leid wenn ich schon damit nerv, aber ich bekomm das einfach nicht hin!
Mei Bier is ned deppad!
Benutzeravatar
gff
Profi-Abenteurer
Profi-Abenteurer
Beiträge: 802
Registriert: 09.03.2004, 18:49
Wohnort: Ge
Kontaktdaten:

Re: Falscher Lösungsansatz? Bitte um Hilfe

Beitrag von gff »

Ahoj,
vor das Script daß den Dialog startet,setzt du einfach

Code: Alles auswählen

character[EGO].Walk(155, 122, eBlock);
Damit die Charaktere sich umdrehen:

Code: Alles auswählen

cEgo.FaceCharacter(cMan);
oder

Code: Alles auswählen

character[EGO].FaceLocation(122,333);
Natürlich musst du die Namen im Code noch an die Namen Deiner Figuren anpassen...
Benutzeravatar
RoyBatty
Frischling
Frischling
Beiträge: 8
Registriert: 23.02.2009, 18:00

Re: Falscher Lösungsansatz? Bitte um Hilfe

Beitrag von RoyBatty »

Danke, die Gschicht mit dem Face hab ich jetzt auch hinbekommen...
Das Problem bei dem Walk-Befehl ist, dass ich keine fixen Koordinaten hab-
ich lass den NPC zufällig zu bestimmten Koordinaten gehen-- deshalb kann ich dem player diese nicht anbieten-
ich bräuchte einen Befehl, der sich nicht auf fixe X und Y Werte bezieht sondern auf die derzeitige Position des NPC's.
Mei Bier is ned deppad!
Benutzeravatar
Timer
Süßwasserpirat
Süßwasserpirat
Beiträge: 260
Registriert: 27.02.2007, 17:35

Re: Falscher Lösungsansatz? Bitte um Hilfe

Beitrag von Timer »

Code: Alles auswählen

player.Walk(cPeter.X - 30, cPeter.Y + 20, eBlock);
Ginge es so in der Art?
Benutzeravatar
RoyBatty
Frischling
Frischling
Beiträge: 8
Registriert: 23.02.2009, 18:00

Re: Falscher Lösungsansatz? Bitte um Hilfe

Beitrag von RoyBatty »

Das is eine verdammt gute Idee, so funktioniert es ziemlich gut!Vielen Dank
Mei Bier is ned deppad!
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Re: Falscher Lösungsansatz? Bitte um Hilfe

Beitrag von KhrisMUC »

Vielleicht bin ich grade total auf dem falschen Dampfer, aber bewirkt Timers Code nicht, dass er sich jede Sekunde wieder ein neues Ziel sucht?
Da fehlt imo ein && !cPeter.Moving in der if-Bedingung.

Um zu einem Charakter hinzugehen, könntest Du Folgendes versuchen:

Code: Alles auswählen

int xdest;
if (player.x < cPeter.x) xdest = cPeter.x - 15;
else xdest = cPeter.x + 15;
player.Walk(xdest, cPeter.y, eBlock);
player.FaceCharacter(cPeter);
cPeter.FaceCharacter(player, eBlock);
Use gopher repellent on funny little man
Antworten