Global Script (LukasArts GUI) für AGS2.7

Fragen zu "Adventure Game Studio"? Hier rein!
Antworten
alexsp

Global Script (LukasArts GUI) für AGS2.7

Beitrag von alexsp »

Hallo,

Das Tutorial auf dieser Seite http://www.adventure-treff.de/fanadv/tu ... asarts.php ist leider nur für die Version 2.6.

Ich würde nur gerne auf die neue AGS Version (2.7) umsteigen, da mir die Verbesserungen dabei gut gefallen, doch ich bekomme das global script in Verbindung mit der Lukas Arts GUI wie es in dem oben genannten Link beschrieben ist nicht mehr zum laufen.

So sieht mein Global Script aus:


// main global script file

#sectionstart game_start // DO NOT EDIT OR REMOVE THIS LINE
function game_start() { // called when the game starts, before the first room is loaded
SetGlobalInt(299,8);
game.items_per_line=4;
game.num_inv_displayed=8;
game.text_speed=7;
}
#sectionend game_start // DO NOT EDIT OR REMOVE THIS LINE


#sectionstart repeatedly_execute // DO NOT EDIT OR REMOVE THIS LINE
function repeatedly_execute() {
// put anything you want to happen every game cycle here
// Die Variablen werden initialisiert
string buffer, text;
int cur_mode, mode;
mode = GetGlobalInt(299);
cur_mode = GetCursorMode();
StrCopy (text, "");

// Je nach Cursor-Modus wird jetzt ein Verb in die Statuszeile geschrieben
if (cur_mode == MODE_WALK) StrCat(text,"Gehe zu ");
else if (cur_mode == MODE_LOOK) StrCat (text,"Schau an ");
else if (cur_mode == MODE_USE) {
if (mode == 7) StrCat(text,"Benutze ");
if (mode == 2) StrCat(text,"Gib ");
}
else if (cur_mode == MODE_TALK) StrCat(text,"Rede mit ");
else if (cur_mode == 5) StrCat(text,"Nimm ");
else if (cur_mode == 4) {
if (mode == 7) {
StrCat(text, "Benutze ");
GetInvName (player.activeinv, buffer);
StrCat(text, buffer);
StrCat(text, " mit ");
}
if (mode == 2) {
StrCat(text, "Gib ");
GetInvName (player.activeinv, buffer);
StrCat(text, buffer);
StrCat(text, " an ");
}
}
else if (cur_mode == 8) {
if (GetGlobalInt(299) == 1) StrCat(text, "Schliesse ");
if (GetGlobalInt(299) == 2) {
StrCat(text,"Gib ");
StrCat(text," mit ");
}
if (GetGlobalInt(299) == 3) StrCat(text, "#ffne ");
if (GetGlobalInt(299) == 4) StrCat(text, "Dr$cke ");
if (GetGlobalInt(299) == 5) StrCat(text, "Ziehe ");
}

// Das Objekt unter dem Cursor finden und an die Statuszeile anhängen
GetLocationName(mouse.x, mouse.y, buffer);
StrCat(text, buffer);
SetLabelText (0, 12, text);
}
#sectionend repeatedly_execute // DO NOT EDIT OR REMOVE THIS LINE


function show_inventory_window () {
// This demonstrates both types of inventory window - the first part is how to
// show the built-in inventory window, the second part uses the custom one.
// Un-comment one section or the other below.

// ** DEFAULT INVENTORY WINDOW
InventoryScreen();
/*
// ** CUSTOM INVENTORY WINDOW
GUIOn (INVENTORY);
// switch to the Use cursor (to select items with)
SetCursorMode (MODE_USE);
// But, override the appearance to look like the arrow
SetMouseCursor (6);
*/
}

#sectionstart on_key_press // DO NOT EDIT OR REMOVE THIS LINE
function on_key_press(int keycode) {
// called when a key is pressed. keycode holds the key's ASCII code
if (IsGamePaused() == 1) keycode=0; // game paused, so don't react to keypresses
if (keycode==17) QuitGame(1); // Ctrl-Q
if (keycode==363) SaveGameDialog(); // F5
if (keycode==365) RestoreGameDialog(); // F7
if (keycode==367) RestartGame(); // F9
if (keycode==434) SaveScreenShot("scrnshot.bmp"); // F12
if (keycode==9) show_inventory_window(); // Tab, show inventory

if (keycode==19) Debug(0,0); // Ctrl-S, give all inventory
if (keycode==22) Debug(1,0); // Ctrl-V, version
if (keycode==1) Debug(2,0); // Ctrl-A, show walkable areas
if (keycode==24) Debug(3,0); // Ctrl-X, teleport to room
}
#sectionend on_key_press // DO NOT EDIT OR REMOVE THIS LINE


#sectionstart on_mouse_click // DO NOT EDIT OR REMOVE THIS LINE
function on_mouse_click(int button) {
// called when a mouse button is clicked. button is either LEFT or RIGHT
if (IsGamePaused() == 1) {} // Wenn das Spiel pausiert ist, dann passiert nix
else if (button == LEFT) {
ProcessClick(mouse.x, mouse.y, GetCursorMode() );
SetCursorMode(MODE_WALK);
}
else if (button==RIGHT) {
if (GetLocationType(mouse.x, mouse.y) == 2) {
SetGlobalInt(299,9);
ProcessClick(mouse.x, mouse.y, MODE_TALK);
SetGlobalInt(299,0);
}
else {
FaceLocation(GetPlayerCharacter(), mouse.x, mouse.y);
ProcessClick(mouse.x, mouse.y, MODE_LOOK);
SetCursorMode(MODE_WALK);
}
}
}
#sectionend on_mouse_click // DO NOT EDIT OR REMOVE THIS LINE


function unhandled_event (int what, int type) {
if (what == 1) {
if (type == 1) Display("Ich sehe nichts Besonderes.");
else if (type == 2) Display("Das kann ich nicht benutzen.");
else if (type == 3) Display("Diese Sachen passen nicht zusammen.");
else if (type == 4) Display("Es antwortet nicht.");
else if (type == 7) Display("Ich kann das nicht nehmen.");
else Display("Nein.");
}
if (what == 2) {
if (type == 0) Display("Ich sehe nichts Besonderes.");
else if (type == 1) Display("Das kann ich nicht benutzen.");
else if (type == 2) Display("Damit kann ich nicht reden.");
else if (type == 3) Display("Diese Sachen passen nicht zusammen.");
else if (type == 5) Display("Ich kann das nicht nehmen.");
else Display("Nein.");
}
if (what == 3) {
if (type == 0) Display("Hübsch, hübsch.");
else if (type == 1) Display("Das lasse ich lieber.");
else if (type == 2) Display("Keine Antwort. Hmm...");
else if (type == 3) Display("Das kann ich so nicht benutzen.");
else if (type == 5) Display("Wie bitte? Nehmen?");
else Display("Nein.");
}
if (what == 4) {
if (type == 1) Display("Da ist nichts.");
else if (type == 2) Display("Da ist nichts.");
else if (type == 3) Display("Nein, wirklich nicht.");
else Display("Die Luft ist kein sehr angenehmer Gesprächspartner.");
}
if (what == 5) {
if (type == 0) Display("Was für ein Prachtstück.");
else if (type == 1) Display("Jetzt nicht.");
else if (type == 2) Display("Damit reden??? Freak!");
else if (type == 3) Display("Die beiden Dinge passen nicht zusammen.");
else Display("Nein.");
}
}

#sectionstart interface_click // DO NOT EDIT OR REMOVE THIS LINE
function interface_click(int interface, int button) {
if (interface == 0) {

if (button == 0) { // gib
SetCursorMode(2);
SetGlobalInt(299,2);
}
if (button == 1) { // oeffne
SetCursorMode(8);
SetGlobalInt(299,3);
}
if (button == 2) { // schau
SetCursorMode(1);
SetGlobalInt(299,8);
}
if (button == 3) { // benutze
SetCursorMode(2);
SetGlobalInt(299,7);
}
if (button == 4) { // schliesse
SetCursorMode(8);
SetGlobalInt(299,1);
}
if (button == 5) { // druecke
SetCursorMode(8);
SetGlobalInt(299,4);
}
if (button == 6) { // nimm
SetCursorMode(5);
SetGlobalInt(299,6);
}
if (button == 7) { // rede
SetCursorMode(3);
SetGlobalInt(299,9);
}
if (button == 8) { // ziehe
SetCursorMode(8);
SetGlobalInt(299,5);
}



if ((button == 10) & (game.top_inv_item < game.num_inv_items - 7))
game.top_inv_item = game.top_inv_item + 4;
if ((button == 9) & (game.top_inv_item > 0))
game.top_inv_item = game.top_inv_item - 4;
}
}
#sectionend interface_click // DO NOT EDIT OR REMOVE THIS LINE





Die erste Fehlermeldung die ich bekomme lautet:

There was an error compiling your script. The Problem was:
in: 'Global script'

Error (line 6): 'items_per_line' is not a public member of 'GameState'

Do you want to fix the script now? (Your game hast not been saved).



Viele Grüsse,
alexsp
strazer

Beitrag von strazer »

Code: Alles auswählen

game.items_per_line=4;
game.num_inv_displayed=8;
Diese Variablen sind schon seit AGS v2.62 schreibgeschützt und in v2.7 Teile des InvWindow GUI Objekts.
Kommentiere sie erstmal aus (// davor schreiben).

Am besten entfernst du auch erstmal das Häkchen in den "General settings" bei "Enforce object-based scripting". Damit kannst du den Code zunächst auf v2.62-Niveau bringen.
Wenn das Skript dann ohne Fehler kompiliert, kannst du das Häkchen wieder aktivieren und das Ganze auf v2.7-Code umschreiben.
alexsp

Beitrag von alexsp »

Danke strazer,

das hat schonmal geklappt. Jetzt kann ich wenigstens schonmal an meinem Adventure weitermachen..

Gibt es denn schon ein global script für die LukasArts GUI, welches auf die v2.7 zugeschnitten ist?

oder
Wo findet man Informationen darüber, wie man das script umschreiben muss?

Viele Grüsse

alexsp
Antworten