Character Eigene Scripts

Fragen zu "Adventure Game Studio"? Hier rein!
Antworten
Philmaster
Verpackungs-Wegwerfer
Verpackungs-Wegwerfer
Beiträge: 59
Registriert: 28.11.2006, 11:40
Wohnort: Österreich

Character Eigene Scripts

Beitrag von Philmaster »

Hi!

Nun habe ich mich schon einigermaßen in AGS eingearbeitet und soweit funktioniert auch alles. Also kann meine Figur nun rumlaufen, Gegenstände aufsammeln, benutzen, mit anderen sprechen, usw. Auch Variablen verwende ich, Aber leider habe ich nun ein Problem, dass ich mittels Hilfedatei und Forumsuche nicht lösen kann:

Ich will, dass mein Character eine Person anspricht und bei jedem ansprechen steigert sich sozusagen deren Ärger über den Spieler. Normalerweise würde ich sowas nun mit int und if lösen, wie ich es bei objekten mache, aber es klappt nicht. Nun nehme ich an, dass es daran liegt, dass ich meine Variable im Unterfenster definiere. Normal müsste man das ja im Raumscript machen, aber das hat keien Einfluss auf den Character...

mein derzeitiges Script unter "talk to character":

int antw=0; (das ist vermutlich der Fehler, aber wo soll ich es reinschreiben??)

antw++;

if (antw==1)
{
player.FaceCharacter(character[2],eBlock);
player.Say("ich will es gratis haben");
Wait(20);
character[2].Say("Zieh Leine!");
}
if (antw==2)
{
player.FaceCharacter(character[2],eBlock);
player.Say("Ich will sofort etwas geschenkt bekommen!");
Wait(20);
character[2].Say("Die Antwort ist nein!");
player.Think("Ich muss es anders versuchen");
}

if (antw>=3)
{
player.FaceCharacter(character[2],eBlock);
player.Say("Guten Tag");
Wait(20);
character[2].Say("Du lernst es wohl nie, was?");
Wait(20);
player.Think("Mist");
}

für Hilfe wäre ich sehr dankbar ;)

Ich hatte mir schon überlegt, ein Objekt hinter den Charakter zu stellen, oder einen Hotspot, um das sozusagen auszutricksen, allerdings sehe ich das dann als sehr umständliche und nicht besonders verlockende Methode...
Ich bin weder, was ich sein werde, noch was ich war.
Benutzeravatar
Sinitrena
Tastatursteuerer
Tastatursteuerer
Beiträge: 678
Registriert: 08.05.2004, 01:01
Wohnort: Frankfurt
Kontaktdaten:

Beitrag von Sinitrena »

Normal müsste man das ja im Raumscript machen, aber das hat keien Einfluss auf den Character...
Charaktere haben niemals etwas mit dem Room Script zu tun, sie stehen immer im Global Script, weil die Handlung, die mit einer Interaktion mit dem Charakter ausgelöst wird, unabhängig vom Raum ist, in dem er sich befindet.
Wenn du dein Global Script öffnest, siehst du auch, dass sich dort alle Charakter-Interaktionen befinden.

Was dein Script betrifft:
Versuch dir klar zu machen was da geschieht: Der Spieler spricht den cha an und der int wird auf 0 gesetzt. Beim nächsten Mal spricht der Spieler den Cha an und der int wird wieder auf 0 gesetzt, usw.
Wenn du den int ganz am Anfang des Global Script definierst, außerhalb jeder Funktion, müsste es relativ problemlos funktionieren. Du kannst dir das =0 übrigens sparen. Ein int hat immer den Anfangswert 0.
http://www.sinitrena.de.vu Meine Spiele: "A very special dog", "A magic stone", "James Bond - Who wants to live again?", "Lonely Night", "Death of an Angel", "The Witch, the Wizard and the Blue Cup", "Emerald Eyes"
Philmaster
Verpackungs-Wegwerfer
Verpackungs-Wegwerfer
Beiträge: 59
Registriert: 28.11.2006, 11:40
Wohnort: Österreich

Beitrag von Philmaster »

Na klar!!! direkt ins Global script, meine Güte ich bin ja regelrecht veblendet^^
Da überlege ich so lange und suche nach unterskripts...

Danke vielmals für die rasche Antwort!!! und danke auch für den Tipp, dank dem ich mir nun das ewige 0 setzten erspare :)

Nun funktioniert alles einwandfrei!

Danke nochmals!
Ich bin weder, was ich sein werde, noch was ich war.
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Beitrag von KhrisMUC »

Noch ein kleiner "Tipp":
Variablen, die ich nur für eine bestimmte Funktion brauche, setze ich immer direkt vor die Funktion, der Organisation halber, nicht an den Anfang. Ist aber natürlich Geschmackssache.
Use gopher repellent on funny little man
Philmaster
Verpackungs-Wegwerfer
Verpackungs-Wegwerfer
Beiträge: 59
Registriert: 28.11.2006, 11:40
Wohnort: Österreich

Beitrag von Philmaster »

Hab ich natürlich nicht gemacht, aber nun, da du es erwähnst, fällt mir auf: ist sicherlich der bessere Weg, da man dann vermutlich sonst irgendwann durcheinander kommt...

Danke auch Dir, für deinen Tipp ;)
Ich bin weder, was ich sein werde, noch was ich war.
Benutzeravatar
Sinitrena
Tastatursteuerer
Tastatursteuerer
Beiträge: 678
Registriert: 08.05.2004, 01:01
Wohnort: Frankfurt
Kontaktdaten:

Beitrag von Sinitrena »

Das ist so ein typischer Fall von: es geht beides und beides hat Vor- und Nachteile. Ich ürde sagen, es ist am besten alle Variablen an einem Punkt im Script einzuführen (und sie durch mit // abgetrennte Kommentare zu erklären) und zwar weil man sie dann immer leicht wiederfindet und es weit unwahrscheinlicher ist zwei Mal zwei ints den gleichen Namen zu geben (was AGS zwar sofort auffällt, aber trotzdem). Kurz gesagt: Ich finde es übersichtlicher alles an einer Stelle zu haben - aber das ist Geschmackssache, wie khris schon sagt. :wink:
http://www.sinitrena.de.vu Meine Spiele: "A very special dog", "A magic stone", "James Bond - Who wants to live again?", "Lonely Night", "Death of an Angel", "The Witch, the Wizard and the Blue Cup", "Emerald Eyes"
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Beitrag von KhrisMUC »

Wo wir schon dabei sind:

Um seine Variablen zu organisieren, bieten sich auch structs an, z.B. könnte man folgendes in den header scheiben:

Code: Alles auswählen

struct struct_MyVars {
  bool Banane_gefunden;
  int naechste_Antwort;
  String Name_der_Hauptperson;
};

struct_MyVars MyVars;
Und nun im Spiel mit Hilfe von auto-complete bequem z.B. das hier tun:

Code: Alles auswählen

  MyVars.Banane_gefunden=true;
  MyVars.naechste_Antwort=3;
  MyVars.Name_der_Hauptperson="Chris";
Natürlich kann man auch mehrere structs verwenden, um die Variablen weiter zu gliedern, idealerweise mit enums:

Code: Alles auswählen

// header

enum tuerzustand {
   offen,
   geschlossen,
   abgesperrt
};

struct st_tueren {
  tuerzustand Haustuer;
  tuerzustand Wohnungstuer;
};

st_tueren Tueren;

// im Raumskript

  Tueren.Haustuer=abgesperrt;
  Tueren.Wohnungstuer=offen;
Ach ja, ich liebe AGS :mrgreen:
Use gopher repellent on funny little man
Philmaster
Verpackungs-Wegwerfer
Verpackungs-Wegwerfer
Beiträge: 59
Registriert: 28.11.2006, 11:40
Wohnort: Österreich

Beitrag von Philmaster »

Uff!! Eine vielzahl an Dingen, die ich noch nicht durchgearbeitet habe ^^

Das mit allen Variablen zu Beginn um Namensgleichheiten zu vermeiden, ist sogesehen natürlich auch wieder ein Vorteil... hmmm muss mir nun wirklich genau überlegen, wie ich das regle, noch habe ich ja nur 4 davon^^

Vielen Dank nochmals an diese Fülle an Informationen! Die Hilfsbereitschaft und Freundlichkeit in diesem Forum ist ja wirklich außergewöhnlich positiv!!
Ich bin weder, was ich sein werde, noch was ich war.
Antworten