Maniac Mansion Mania Forum
MMM-Werkzeugkiste => Technik => Thema gestartet von: steve-o-mat am 07. Juni 2007, 21:27:43
-
Hallo Leute!
Wollte grad ein Tür-Script machen, aber das ging voll in die Hose! Ich habe als Vorlage die Hilfe im AT-Forum benutzt.
Ich möchte von Raum 22 (Object: 0 zeigt offene Tür, Hotspot: 1) in Raum 23 (Object: 0, Hotspot: 1). Die GlobalInt, die ich auserkoren habe, ist die 500.
Ich habe bei den "VariableExtensions" nun folgendes geschrieben:
else if ((r == 22) && (h == 1)) OpenCloseExtension (500, location);
else if ((r == 23) && (h == 1)) OpenCloseExtension (500, location);
Im Room-Skript des Raum 22 habe ich unter 'Player enters room (before fadein) folgendes:
SetObjectClickable (0,0);
init_object (500,0);
}
Im Room-Skript des Raums 23 habe ich unter demselben Punkt stehen:
SetObjectClickable (0,0);
init_object (500,0);
}
Im Raum 22 hab ich nun folgendes bei "any-click-on-hotspot" reingescripted:
if (any_click_on_door (500, 0, 403, 95, DIR_UP, 23, 70, 140, DIR_RIGHT) == 0) Unhandled ();
Dann analog dazu das Script im Raum 23:
if (any_click_on_door(500, 0, 70, 140, DIR_LEFT, 22, 403, 95, DIR_DOWN) == 0) Unhandled ();
Jetzt bekomm ich immer die Fehlermeldung:
An internal error has occured. Please note down the following information.
If the Problem persists, contact Chris Jones.
(ACI version 2.72.920)
Error: Unable to create local script: Runtime error: unresolved import 'init_object'
Ich verstehe jetzt nicht, was ich falsch gemacht hab. :-\
Kann mir bitte jemand helfen?
-
ich hab mich jetzt schon lange nicht mehr mit türscripts beschäftigt.
aber ich kann mich nicht mehr daran erinnern dauernd irgendwo init_object geschrieben zu haben
wie kommst du auf init_object?? lass das weg.
und falls doch, dann ist ein object sicher was anderes wie ein GlobalInt.
-
wie kommst du auf init_object?? lass das weg.
Das stand da so in der Hilfe. Na dann probier ichs mal ohne. Danke für den Tipp! :)
-
habs mir grade nochmal angesehen, init_object wird normalerweise verwendet um den zustand der tür einzustellen.
unresolved import 'init_object' deutet jedenfalls darauf hin, dass ags diesen befehl im room script nicht kennt.
mit was für einem starterpack arbeitest du?
-
steht im script header diese zeile drinnen?
import function init_object (int GI, int object); // ca. zeile 94
-
Genau, das steht in Zeile 88 bei mir. Ich habe das neue Bernard-Starterpack.
-
ok, ist wohl ein fehler im starterpack.
bei mir im globalscript gibts die function auf zeile 1013
function init_objekt
mach aus dem k ein c und probiers dann nochmal.
-
Nee, bei mir ist es mit c da, also object.
-
bist du sicher?
im script header ists mit c, ( zeile 88 - import function init_object (int GI, int object); - das stimmt.
aber im global-script ists mit k, ( zeile 1013 dort wo die funtiont definiert ist ) function init_objekt (int GI, int objekt){
das fette k ist das problem und muss geändert werden, schau noch mal nach.
PS: und vergiss meinen ersten post in diesem thread, der ist schwachsinn. ;)
obwohl du diesen befehl normalerweise nur brauchst, wenn du eine offene tür darstellen willst,
für geschlossene türen ist das nicht notwendig.
-
Stimmt, im global Script war es mit k, habs geändert, danke!
Wegen dem ersten Post: Ich weiß von nichts. ;D
Jetzt hab ich aber ne andere Fehlermeldung. :(
in Global script (line 1026)
from Room 22 script (line 8 )
Error:GetGlobalInt: invalid index
Na gut, dass werde ich wohl selber verbockt haben.
Edit: In der Zeile steht der Code
init_object (500,0);
-
es gibt 500 global ints.
das heisst du kannst global ints von 0 bis 499 verwenden, ab 500 bist du im invaliden bereich ;)
-
Achso! Das wusste ich nicht. Na man gut, sonst hätt ich die ganze Nacht gegrübelt. ;)
Hab mich letztens von BlueGryphon beraten lassen, und er meinte ich solle ab 300 anfangen, da wäre ich auf der sicheren Seite, ohne Überschneidungen, aber meine Übervorsicht riet mir zu 500! :)
Na gut, wieder was dazu gelernt... Vielen Dank nochmal für die schnelle Hilfe!!! :D
-
Dieser ganze Türenschmarrn ist sowieso reichlich überholt. Um die Zeile in "any click on hotspot" kommt man nicht herum, aber der Rest ist viel zu umständlich. Das dürfte sich locker mittels einer einzigen Zeile pro Tür in game_start lösen lassen, werd mir das bei Gelegenheit mal anschauen.
-
Dieser ganze Türenschmarrn ist sowieso reichlich überholt. Um die Zeile in "any click on hotspot" kommt man nicht herum, aber der Rest ist viel zu umständlich. Das dürfte sich locker mittels einer einzigen Zeile pro Tür in game_start lösen lassen, werd mir das bei Gelegenheit mal anschauen.
Schon eine elegantere Lösung gefunden, KhrisMUC? :)
Ich habe eine unschöne Macke bei mir entdeckt. Das fiel mir aber schon in einigen Episoden (vorhin erst in Epi10) und im Bernard-Starterpack auf. Bei mir ist es jetzt so:
Ich mache einen Raumwechsel, dann lauft der Char von rechts her etwas in die Mitte des neuen Raums und wenn ich dann auf nen Hotspot in der Mitte des Raumes klicke, dann springt der Char blitzartig in die linke Ecke des Raumes und läuft von dort zum Hotspot.
Ist das ein Fehler irgendwo im Script und reparabel? Oder muss ich mich damit abfinden?
-
Ne, hab mich noch nicht damit beschäftigt. Bei Gelegenheit :)
Zum Problem:
Das ist leider ein unschöner Bug in AGS, der anscheinend nur bei scrollenden Räumen auftritt (auch in anderen Spielen, nicht nur in MMM-Zeugs). Muss ein Glitch im Pathfinding sein.
Die Problematik wurde schon des öfteren im AGS-Forum bemängelt, leider ist der Fehler aber schlecht reproduzierbar.
Keine Ahnung, ob Version 2.8 hier Abhilfe schafft.
-
Danke für die schnelle Hilfe KhrisMUC! :)
Noch was anderes... wir hatten das Thema schonmal: "any_click_walk_look"
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.
Das hat damals mir bei mir nicht so recht geklappt, da hab ich erstmal an anderen Sachen weitergearbeitet. Ich wollte jetzt noch so einen Raumwechsel machen und bin da wieder drüber gestolpert. Nun wollte das jetzt dahingehend umändern, aber ich bekomme dann ne Fehlermeldung:
There was an error compiling your script. The problem was:
In: 'Room 12 script'
Error (line 278): Type mismatch: cannot convert 'const string' to 'string'
...
In der Zeile steht bei mir:
if (any_click_walk_look (520, 135, DIR_RIGHT, "Da geht's zum See.") == 0) Unhandled ();
Hab auch nochmal im 'Hilfreiche Funktionen in MMM'-Thread (http://www.adventure-treff.de/forum/viewtopic.php?t=7529) im AT nachgeschaut, aber da steht es auch so geschrieben.
Leider sagt mir die Fehlermeldung gar nichts... Kann mir vielleicht wer helfen?
Kann es sein, dass da irgendwas im GlobalScript fehlt/falsch geschrieben ist?
Vielen Dank im Voraus!
-
du könntest versuchen im gloal script die Zeile:
function any_click_walk_look (int x, int y, int dir, string lookat){
durch
function any_click_walk_look (int x, int y, int dir, const string lookat){
zu ersetzen.
-
ist auch ein fehler im starterpack,
schau im globalscript ( bei mir auf zeile 1001 ) , dort steht die function:
function any_click_walk_look (int x, int y, int dir, string lookat){
daraus machst du
function any_click_walk_look (int x, int y, int dir, const string lookat){
dasselbe im scriptheader (bei mir auf zeile 92)
aus
import function any_click_walk_look (int x, int y, int dir, string lookat);
machst du
import function any_click_walk_look (int x, int y, int dir, const string lookat);
dann müsste die fehlermeldung weg sein.
das wird übrigens bei allen funktionen der fall sein, die string statt const string verwenden, vermute ich mal.
aber da die fast niemand verwendet fällt es normalerweise keinem auf.
-
Vielen Dank euch beiden! Jetzt funktioniert es wieder einwandfrei. 8)