HX3 Foren

HX3 Foren (http://hx3.de/)
-   Editing & Scripting (http://hx3.de/editing-scripting-167/)
-   -   Verständnisproblem #include / call compile .... (http://hx3.de/editing-scripting-167/verstaendnisproblem-include-call-compile-21245/)

Wesley Pipes 07.01.2012 15:18

Verständnisproblem #include / call compile ....
 
Hallo ich hoffe Ihr könnt mir bei einer Verständnisfrage weiterhelfen:

Ich habe eine setup.sqf angelegt, in der ich über verschiedene define-Schalter das Spiel entsprechend starten will. Im Moment sieht es so aus:

coa_setup.sqf:
Code:

coa_setup_done = false;

// Debug-System

// Einträge bestimmter Variablen-Werte in die Arma2OA.rpt zu Fehlersuche.
#define __debug_log__


coa_setup_done = true;

Meine init.sqf sieht wie folgt aus:
Code:

######################
# Initialisierung
######################
*/

//#include "Scripts\coa_setup.sqf";


waitUntil{!(isNil "BIS_fnc_init")};

sleep 0.5;


if (isNil "coa_setup_done") then {
    call compile preprocessFile "Scripts\coa_setup.sqf";
};

//waitUntil{!(isNil "coa_setup_done")};


   
#ifdef __debug_log__
    diag_Log "++++++++++++++++++++++++++++++++++";
    diag_log "Diagnose-Modus aktiv!";
    diag_log "++++++++++++++++++++++++++++++++++";   
#else
    diag_Log "++++++++++++++++++++++++++++++++++";
    diag_log "Normal-Modus aktiv!";
    diag_log "++++++++++++++++++++++++++++++++++";
#endif



_do = execVM "Scripts\coa_IntroText.sqf";

Gestartet wird Arma2OA mit -showscripterrors

So wenn ich in der init.sqf den #include auskommentiere, funktionieren die defines einwandfrei.

wenn ich #include kommentiere, dann hätte ich erwartet, dass geprüft wird, ob die Variable coa_setup_done NIL ist (ist sie auch habe ich mit einem Hint vor der call compile -Zeile überprüft) - in diesem fall kommt call compile preprocessFile (call compile preprocessFileLineNumbers wurde auch versucht) zum Einsatz und compiliert coa_setup.sqf vor.

Wenn ich es so ausführe (#include kommentiert) , dann wird zwar erkannt, dass coa_setup_done NIL ist aber es wird mir immer der Normal-Modus angezeigt. Und anschließend mit der Durchführung des nächsten Scripts fortgefahren. Also alles was zwischen der If-IsNIL-Abfrage und _do = excecVM... steht wird ignoriert. Selbst wenn ich da noch einen Hint ausgebe, wird dieser ignoriert und mit dem Ausführen des nächsten Scripts fortgefahren.

In der RPT - keine Fehlermeldung

Mache ich den #include - Aufruf in eine description.ext, dann crasht das Spiel mit dem Hinweis, dass der Member coa_setup_done schon definiert wurde (!?)

Ich hoffe ich hab´s nicht zu kompliziert beschrieben und mir kann jemand den entscheidenden Tip geben.

Das Vorgehen habe ich übrigens von xenos Dominations abgeguckt - fragt sich nur ob ich dabei was Entscheidendes übersehen hab.

Danke für Eure Hilfe

Grüße
Wes

Xeno 07.01.2012 16:26

*deleted*

Xeno

Vienna 07.01.2012 16:45

Kann es der Fehler sein, weil am Beginn der Init.sqf ein /* fehlt?

Wesley Pipes 07.01.2012 17:00

Hi Xeno,

danke erst mal - wobei so richtig begriffen hab ich´s noch nicht... :ugly:

Zu Erstens - die description.ext war ursprünglich erst mal aussen vor - die habe ich nur während meiner Fehlersuche angelegt und versucht mein coa_setup.sqf darüber einzubinden - Ergebnis war dann der BTD - aber nach Deiner Erklärung nachvollziehbar.

Zu Zweitens - ich wollte eigentlich den #include raushalten, da ich doch sonst in jedem Script in dem ich eine ifdef -Abfrage mache; die coa_setup.sqf neu includen muss (oder?).

zu Drittens - klaro heißt die coa_setup.sqf :D

zu Viertens - werde ich versuchen

zu Fünftens - kapiert

Vielen Dank erst mal - kannst mir bitte noch sagen, ob ich bei "zu Zweitens" auf dem Holzweg bin?

@ Vienna - Nein ich habe nur beim Kopieren des Scripts hier rein nicht den kompletten Header mitgenommen - also /* ist in der init vorhanden.

Grüße
Wes

Xeno 07.01.2012 18:18

Zitat:

Zitat von Wesley Pipes (Beitrag 401436)
Zu Zweitens - ich wollte eigentlich den #include raushalten, da ich doch sonst in jedem Script in dem ich eine ifdef -Abfrage mache; die coa_setup.sqf neu includen muss (oder?).

*deleted*

Xeno

Wesley Pipes 07.01.2012 19:19

danke schön @ xeno

wobei dieses blainclude schon wieder Fragen aufwirft - aber das lass ich jetzt mal, da ich blainclude (was immer das auch ist :oh:) noch nie benutzt habe.

Vielen Dank für die schnelle Hilfe

Grüße
Wes

Wesley Pipes 08.01.2012 12:02

sry für Doppel-Post - edit nicht mehr möglich.

Okay nachdem ich jetzt endlich von meiner langen Leitung runter bin (und mein Alk-Pegel auch wieder etwas unten) weiß ich jetzt auch was (bla bla) blainclude ist ..... :rolleyes: :D.

Grüße Wes

Vienna 08.01.2012 13:52

Zitat:

Zitat von Wesley Pipes (Beitrag 401436)
Zu Zweitens - ich wollte eigentlich den #include raushalten, da ich doch sonst in jedem Script in dem ich eine ifdef -Abfrage mache; die coa_setup.sqf neu includen muss (oder?).

Wo ist hier ein Problem?

Man kann Testzeilen mit if-then und einer globalen Variablen in allen Skripten gleichzeitig ein- und ausschalten. Es ist aber sicher besser #ifdef-#endif zu verwenden, weil dann im normalen Programmlauf alle diese Abfragen vollständig entfernt sind.

z.B., setzt man in der coa_setup.sqf die Variable:

#define __debug_log__

und bindet in allen anderen Skripten dieses Skript mit:

#include "coa_setup.sqf"

ein.

Nach dem Testen setzt man dann in der coa_setup.sqf die Zeile auf Kommentar:

//#define __debug_log__

und alle Testzeilen sind bei der Ausführung aus den Skripts vollständig gelöscht.

Will man nur ein einzelnes Skript testen, dann dort die Variable direkt definieren.

Wesley Pipes 08.01.2012 21:56

Servus Vienna,

danke für Deinen Input - im Endeffekt habe ich´s auch so gelöst. Ich dachte aber, dass es im normalen Spielablauf ein Problem sein könnte, wenn ich in "jedem zweiten" Script die coa_setup.sqf mittels #include "neu einlesen" muss. (so mein Verständnis)
Ich bin noch ziemlich in der Lernphase was scripten betrifft und hab noch nicht so ganz den Backround bzw. das Verständnis zu manchen Sachen - aber dafür lerne (und fehlversuche) ich ja :D.

Und wenn ich wirklich auf gar keinen Nenner mehr komme bitte ich die Profis um Hilfe :D. Aber davor gehen einige dilletantische Fehlversuche voraus. :cool:

Grüße
Wes


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:44 Uhr.

Angetrieben durch vBulletin, Entwicklung von Philipp Dörner & Tobias


SEO by vBSEO 3.2.0 ©2008, Crawlability, Inc.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116