World of Gothic Archiv > Editing
Theoretische Verständnisprobleme
Seite 1 von 1  1 
14.11.2003, 15:42 #1
HornOx
Beiträge: 1.458
Theoretische Verständnisprobleme
Hi,
ich versteh ein paar Sachen an den Scripten nicht die zwar eigentlich unwichtig sind aber mich trotzdem interessieren:
  1. Warum steht nirgends ein const NULL=0;? Null kommt ein paar mal in den Scripten vor und verursacht obwohl es nicht defeniert ist keinen fehler beim parsen
  2. Mdl_SetVisualBody erwartet AFAIK als letzten übergabewert eine c_item-Instanz(rüstung), warum gibt es kein Fehler wenn man eine Zahl (-1) übergibt?
  3. Warum wird in den Scripten so andauernd Hlp_GetNpc benutzt? Ein
    code\:
    Grd_213_Torwache.aivar[AIV_TRIGGER3] = 1;
    ist doch einfacher und besser lesbar als das übliche
    code\:
    var C_Npc wache;
    wache = Hlp_GetNpc (Grd_213_Torwache);
    wache.aivar[AIV_TRIGGER3] = 1;
  4. Warum verursacht es einen Fehler beim parsen wenn die letzte Zeile einer Scriptdatei ein Kommentar ist?
  5. to be continued...
14.11.2003, 17:16 #2
Cool Moe Di
Beiträge: 120

mal sehen, ob was richtig beantworten kann :-)

1. Ich denke, dass NULL direkt an C++ übergeben wird - und in C++ ist es definiert.
2. Sind negative Zahlen nicht auch "false"? Womit man mit -1 Gothic sagen würde, dass der NPC keine trägt.
3. Irgendwo stand mal, dass sonst nicht auf den NPC zugegriffen werden kann...ich hab aber noch nicht rausgefunden, wo Zugriffsprobleme dann auftreten...
4. Ich könnte mir vorstellen, dass der Compiler dann das Dateiende-Zeichen nicht findet, weil du es für ihn auskommentiert hast und er dann erst bemerkt, dass die Datei zu Ende ist, wenn der Datenstrom aufhört...aber warum das als Fehler ausgegeben wird? Vielleicht macht das Performanceprobleme oder eine Funktion im Compiler wird falsch ausgeführt...

ciao
Moe
14.11.2003, 17:19 #3
knörx
Beiträge: 440

zu 2.:Ich glaube, der nimmt den Btrag der Zahl, also von 3=3, von 0=0 und von -5=5. Aber im Gunde weiß ichs net
14.11.2003, 18:45 #4
HornOx
Beiträge: 1.458

quote:
1. Ich denke, dass NULL direkt an C++ übergeben wird - und in C++ ist es definiert.
Aber in C++ ist es ein Pointer, kein INT :(
quote:
Sind negative Zahlen nicht auch "false"? Womit man mit -1 Gothic sagen würde, dass der NPC keine trägt.
IIRC ist alles was nicht 0 ist wahr. Aber eigentlich stört mich nur das da c_Item und Int gemischt werden.
14.11.2003, 23:27 #5
NicoDE
Beiträge: 1.398

quote:
Zitat von HornOx
Aber in C++ ist es ein Pointer, kein INT :(
[...]
IIRC ist alles was nicht 0 ist wahr. Aber eigentlich stört mich nur das da c_Item und Int gemischt werden.

Es gibt in Daedalus keine strikte Trennung zwischen Pointern und Integern (IMHO leider, da man schnell mal eine Instanz(-ID) statt einem (erzeugten Instanz-)Objekt übergibt und vis versa).

Hlp_GetNpc() wurde oft benutzt, weil die NPCs in verschiedenen Situationen 'verloren gehen' können (neuer NPC eingefügt - und schon ist die Variable nicht mehr aktuell). Wird oft bei NPCs benutzt, die mit mehreren Instanzen umgesetzt wurden (Leute die Verschwinden und wieder auftauchen, etc.).

Da es keine allumfassenden Konventionen gab, hat jeder Skripter, mehr oder weniger, seinen eigenen Stil entwickelt. Aber alleine durch die Erfahrungen bei Gothic I sehen die Skripte von Gothic II im Vergleich dazu strukturierter und übersichtlicher aus (es ist aber immernoch eine unglaubliche Menge an geschriebenem Text - der auch noch Sinn ergibt :)). Bei den begrenzten Möglichkeiten lassen sich aber umständliche Konstrukte und 'Hacks' kaum vermeiden, wenn man versucht neue Ideen mit den alten Mitteln umzusetzen (manchmal ist ein 'Skripthack' besser zu ertragen als der Aufwand die Engine dafür zu ändern und ewig zu testen, manchmal muss es schnell gehen und manchmal sieht man den Baum vor lauter Wäldern nicht).


In diesem Sinne...
Gruß Nico

ps: 4. kannte ich nocht nicht :)
15.11.2003, 12:16 #6
HornOx
Beiträge: 1.458

Also ist Null ein Schlüsselwort? *ins Wiki eintrag*
[edit]Sind die dynamische Variablen (self, other usw) nicht eigentlich dynamische Instanzen?[/edit]
15.11.2003, 12:40 #7
NicoDE
Beiträge: 1.398

quote:
Zitat von HornOx
Sind die dynamische Variablen (self, other usw) nicht eigentlich dynamische Instanzen?
Es sind globale Skriptvariablen, die allerdings auch der Engine bekannt sind und von der selbigen gelesen und gesetzt werden (haupsächlich beim Aufruf der Enginefunktionen (Externals)).
15.11.2003, 14:03 #8
HornOx
Beiträge: 1.458

klar, mich stört eigentlich nur das sie im script so:
code\:
// Aktueller Npc und der SC
INSTANCE self,other (C_NPC);

// Opfer bei "witness"-Aktionen
INSTANCE victim(C_NPC);

// aktuelles Item
INSTANCE item(C_Item);

// Und der Player immer als globale Instanz
INSTANCE hero(C_NPC);
und nicht so:
code\:
VAR C_NPC self;
VAR C_NPC other;
VAR C_NPC victim;
VAR C_NPC hero;
VAR C_NPC item;
festgelegt sind.
17.11.2003, 16:44 #9
SuperGomez
Beiträge: 72

ALsoooo ich hatte das gleiche Problem, doch dann hab ich alles gelöscht und es ging wieder!!:D
Nee, jetzt im ernst
17.11.2003, 20:36 #10
Horn0x
Beiträge: 64

Will da jemand testen ob ich einen selbsterstellten Thread wegen Spam schließe? *g*
18.11.2003, 00:20 #11
GülleMüller
Beiträge: 472

[EDIT]
(hoffentlich hat das keiner gelesen... *peinlichberührtinsbettsteig*)
[/EDIT]
25.11.2003, 11:50 #12
HornOx
Beiträge: 1.458

Noch was: Der Name der NPC Instanz ist laut der Instanzdefinition ein Array, durch testen hab ich rausbekommen das npc.name==npc.name[0] ist. Kann man npc.name[1] bis npc.name[4] frei verwenden (also ähnlich wie npc.aivar nur mit strings) oder werden die 4 Strings doch für irgendwas verwendet? Veränderungen des Namens werden zwar nicht mitgespeichert aber z.b. bei ZS könnte es trozdem praktisch sein...
Seite 1 von 1  1