Geschrieben um 17:48 am 08.01.2015 | Zitat | Editieren | Löschen | |
Mitglied Prof Gumby Beiträge: 327 | Hm, ich frage mich gerade, wie man in Inform 6 Aktionen auf Npc-Befehle manuell umleitet. Es gibt ja die <<Take apple>> Schreibweise, aber das löst eine Aktion ##Take für den Spieler aus, nicht für einen Npc. Hatte jemand schon mal ein ähnliches Problem? Grüße, --MI |
Geschrieben um 18:56 am 08.01.2015 | Zitat | Editieren | Löschen | |
Mitglied Retired Gumby Beiträge: 734 | Kommt drauf an, wo das drinsteht, in before-Statements sollte <<take self>> funktionieren, wo dann Unterscheidungen getroffen werden können. ----- |
Geschrieben um 19:43 am 08.01.2015 | Zitat | Editieren | Löschen | |
Mitglied Prof Gumby Beiträge: 327 | Also ein kleines Beispiel: Ich habe einen Hund als NPC, dem ich Befehle erteilen kann (z.B. "Hund, fass den Mann") und will aber dass das Kommando "Hetz Hund auf Mann" erstere Aktion triggert, also die Orders Rule in dem Hund-Objekt mit dem Kommando <<Attack Mann>> triggert. Also in der Hetz-Aktion
|
Geschrieben um 20:05 am 08.01.2015 | Zitat | Editieren | Löschen | |
Mitglied Retired Gumby Beiträge: 734 | Schwer zu sagen: üblich ist mehr
mit etwas mehr Code könnte ich da etwas mehr sagen, ich bin aber nun kein I6-Experte, hab mich aber schon ordentlich damit beschäftigt. ----- |
Geschrieben um 20:13 am 08.01.2015 | Zitat | Editieren | Löschen | |
Mitglied Prof Gumby Beiträge: 327 | Zu lösen ist es umgekehrt natürlich einfacher, also die Kommando-Aktion in der Orders Rule auf Attack umleiten
Dann steht eben der Ausführungscode in der HetzSub. Mich hätte es aber interessiert, ob es auch anders herum geht, also man quasi "von der HetzSub aus" die Orders Rule beim Hund "manuell" auslösen kann. Dazu habe ich trotz langer Suche in den Dokus nichts gefunden ... |
Geschrieben um 20:34 am 08.01.2015 | Zitat | Editieren | Löschen | |
Mitglied Retired Gumby Beiträge: 734 | Probier's hier mal mit <<Hetz self Mann>>. So ein bisschen Objektorientierung ist in I6 schon drinne: orders kennt die Instanz "Hund" nicht, Self ist Übergabeparameter an externe Routinen. ----- |
Geschrieben um 22:00 am 08.01.2015 | Zitat | Editieren | Löschen | |
Mitglied Prof Gumby Beiträge: 327 | Ich glaube mein Problem ist noch nicht ganz angekommen, ich weiß aber auch nicht wie ich es anders formulieren soll ... Also konkret: kann man eine Order Aktion (Hund, fass den Mann) "manuell" auslösen? Dann haben wir ja nicht die gewohnte Schablone mit <<Aktion noun noun>> sondern einen abweichenden Actor, der ja nicht der Spieler, sondern der NPC ist. |
Geschrieben um 22:29 am 08.01.2015 | Zitat | Editieren | Löschen | |
Mitglied Retired Gumby Beiträge: 734 | Was heißt "manuell auslösen"? Das sieht mir sehr nach einem Persuasion-Problem aus, das in I6 nach meinem Kenntnisstand "von Hand" über jeweilige Routinen für NPCs gelöst werden muss. In I7 könnte ich dafür elegante Lösungen nennen, I6 ist halt anders.. ----- |
Geschrieben um 23:16 am 08.01.2015 | Zitat | Editieren | Löschen | |
Mitglied Prof Gumby Beiträge: 327 | Einfach, ob man eine beliebige Aktion zu einer NPC Aktion umleiten kann. Anders formuliert: Kann man z.B. das Öffnen einer Tür mit einem Schlüssel (was ja normalerweise der Spieler ausführt) von einem NPC machen lassen, der daneben steht und den passenden Schlüssel in der Hand hält. Also die Aktion [Spieler öffnet Tür mit Schlüssel] abbrechen und stattdessen den Befehl: Jim, öffne die Tür mit dem Schlüssel [Spieler befiehlt Jim, die Tür zu öffnen] ausführen lassen, ohne dass es der Spieler eingetippt hat. Das Makro <<...>> übernimmt ja genau diese Funktion, hat aber meiner Meinung nach nicht die Möglichkeit, als Actor den NPC zu bestimmen. Vielleicht geht das ja anders, aber wie? Das Manual sagt dazu nur: Zitat: At any given time, just one action is under way, though others may be waiting to resume when the current one has finished. The current action is always stored in the four variables actor action noun second actor, noun and second hold the objects involved, or the special value nothing if they aren't involved at all. (There's always an actor, and for the time being it will always be equal to player.) action holds the kind of action. Its possible values can be referred to in the program using the ## notation: for example if (action == ##Look) ... tests to see if the current action is a Look. Aber wie setzt man das korrekt, so dass die bestehende Aktion abgebrochen und eine neue stattdessen vom NPC ausgeführt wird? Vielleicht geht es ja auch schlicht nicht ... |
Geschrieben um 09:16 am 09.01.2015 | Zitat | Editieren | Löschen | |
Mitglied Prof Gumby Beiträge: 600 | Was ist, wenn du die vier relevanten globalen Variablen actor, action, noun, second einfach manuell setzt und dann die Originalaktion weiterlaufen lässt? Ansonsten steht da ja noch der magische Satz: Zitat:
In dem Sub könntest du dann ja ebenfalls umleiten oder Variablen setzen, wie's beliebt. |
Geschrieben um 11:25 am 09.01.2015 | Zitat | Editieren | Löschen | |
Mitglied Retired Gumby Beiträge: 734 | Mikawa:
Habs jetzt nicht ausprobiert, nach meinem I6-Verständnis sollte aber ein Dreieckstausch des player-Objekts hinhauen. Um das bellende Beispiel oben zu verwenden, in etwa:
----- |
Geschrieben um 12:05 am 09.01.2015 | Zitat | Editieren | Löschen | |
Mitglied Retired Gumby Beiträge: 734 | Ah, hab grad was gefunden das hilfreich sein könnte: http://inform.onyxring.com/InformGuide.aspx?article=24#redirecting ----- |
Geschrieben um 12:08 am 09.01.2015 | Zitat | Editieren | Löschen | |
Mitglied Prof Gumby Beiträge: 327 | Danke für den hervorragenden Artikel! |