Forum moved to if-forum.org
Autor Nachricht
<  <Answer 'text' Person> funktioniert nicht
ChristianB
BeitragVerfasst am: Di, 10 März 2009 - 3:04  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg

Hilfe! Ich versteh's nicht: Ich habe den Action-Aufruf <Answer 'text' Person> in meinem letzten Spiel problemlos nutzen können. Jetzt bekomme ich bei einem neuen Projekt plötzlich vom Interpreter (Windows Frotz) die Fehlermeldung:

@Attempt to address illegal object 15664. This is normally fatal.

Das Problem ist deform-unabhängig -- mit der englischen Library passiert das gleiche. Hier mal ein völlg jungfräuliches Test-Beispiel, in dem der Fehler auch auftaucht:

Code:
!% +include_path=.\,..\..\Lib\Deform

Constant Story "TITEL";
Constant Headline "^Ein Test^";

Include "Parser";
Include "VerbLib";

Object Testraum "Testraum"
  with 
    description "Hier wird getestet.",
  has light;
 
Object Kalle "Kalle" Testraum
  with  name 'kalle',
  has male animate proper;

[ Initialise;
    location = Testraum;
    <Answer 'text' Kalle>;
    !<Ask Kalle 'text'>;
];

Include "GermanG";


<Ask Kalle 'text'> funktioniert ohne Probleme. Nur mit ##Answer zickt Inform rum. Was ist da los? Kann das jemand reproduzieren?

Grüße aus der Nachtschicht,
Christian
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Martin
BeitragVerfasst am: Di, 10 März 2009 - 9:29  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 25.08.2002
Beiträge: 677
Wohnort: München

Aaaargh, die unseligen Konversationsroutinen von Inform, die es ja leider auch bis I7 geschafft haben. Der Fehler tritt in RunRoutines auf, das leider nicht prüft, ob das erste Argument auch ein Objekt ist. Innerhalb von BeforeRoutines und ähnlichen Routinen wird zwar vor dem Aufruf geprüft, ob das Argument größer als 0 ist, aber nicht, ob es sicht tatsächlich um ein Objekt handelt.

Workaround: In der Routine RunRoutines in Zeile 5301 in parserm.h eine zusätzliche Abfrage einfügen:

Code:
[ RunRoutines obj prop;
    if (~~(obj ofclass Object)) rfalse; ! Nur Objekte, bitte!
    if (obj == thedark && prop ~= initial or short_name or description) obj = real_location;
    if (obj.&prop == 0 && prop >= INDIV_PROP_START) rfalse;
    return obj.prop();
];


Dann läuft's und der Operator .& wird nicht auf das illegale Objekt 'text' angewandt.

Die Aktionen ##Order, ##Ask, ##Tell und ##Answer sind eh ein rechter Krampf, genauso wie die Krücken inp1 und inp2 und das [Topic]-Token.

(Wieso bei ##Consult das Thema nur über consult_from und consult_word abfragbar ist, aber bei ##Ask und ##Tell als second und bei ##Answer als noun, ist mir schleierhaft. Und an vielen Stellen im Parser wird explizit abgefragt, ob die Aktion eine dieser drei Konversationsroutinen ist, und dann wird irgendetwas überhaupt nicht Nachvollziehbares gemacht: "say yes to man" ist <man, ##yes>, aber "say blrfgz to man" ist <##Answer 'blrfgz' man> und zig andere solcher Dinge. Naja.)
_________________
Every silver lining has a cloud.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ChristianB
BeitragVerfasst am: Di, 10 März 2009 - 11:35  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg

Martin hat folgendes geschrieben:
Aaaargh

Du sagst es.

Deine Änderung an RunRoutines spart mir eine Menge Zeit, da ich bestehenden Code verwenden möchte, und jetzt nicht alles umschreiben muss -- Danke!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Alle Zeiten sind GMT + 1 Stunde (MEZ)

Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Seite 1 von 1
if-de :: Forum Foren-Übersicht  >  Inform & Glulx

Neues Thema eröffnen   Neue Antwort erstellen


 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.



Kontakt: Administrator

Powered by phpBB and NoseBleed v1.05