Autor |
|
Garak
Admin
     

Dabei seit: Juli 2002
Geschlecht: 
Herkunft: Cardassia Prime
Beiträge: 9257
 |
|
Eigenwillige Scriptbefehle |  |
Einige Befehle der Scriptsprache haben seltsame Eigenarten, die beim debuggen jede Menge Zeit kosten beziehungsweise gute scriptideen zum scheitern verurteilen - andere sind nicht in der Hilfedatei vermerkt, leisten aber doch mehr oder weniger gute Dienste. Zeit für einen Sammelthread dieser Macken! Gebt bitte die jeweilige Morrowindversion dazu an.
if(bedingung)
elseif(bedingung)
else
endif
Ja, selbst das ganz gewöhnliche if/else/endif hat Macken - und zwar eine Begrenzung der Länge des Blockes zwischen if und endif. Überschreitet diese nämlich den Wert von knapp 70 Befehlszeilen ( Kommentare werden nicht gezählt) kommt es zu unerklährlichen EXPRESSION/LEFT EVAL - Fehlern bei der Ausführung.
Bestätigt für Morrowind 1.2
drop ItemID, Anzahl
Legt den entsprechenden Gegenstand an die Füße des Players, egal auf wen der Befehl angewandt wird. Die entsprechenden Gegenstände verschwinden aber korrekt aus dem Inventar des Adressaten, falls sie dort vorhanden sind.
Bestätigt für Morrowind 1.2
cast SpellID, ZielID
Akzeptiert seltsamerweise nur "Player" als ZielID - dafür können auch leblose Gegenstände den Zauber aussprechen.
AFAIK für alle Versionen
GetMasserphase - GetSecundaphase
Die Funktionen, die den Status der Monde abfragen, funktionieren nur in Aussenbereichen korrekt. In Interiors wird der beim letzten Aussenaufenthalt aktuelle Wert geliefert. Ausserdem haben beide Monde immer die selbe Phase, auch wenn sich dass mit dem Handbuch von "The elder scrolls adventures - Redguard" beisst...
Beachte: die Tribunal-Aussenbereiche sind technisch Interiors!
AFAIK für alle Versionen
GetHealthGetRatio
liefert den aktuellen Bruchteil der Hitpoints von denen vom gesunden Zustand. Ist an sich dokumentiert, steht aber fälschlicher Weise als "GetHealthRatio" im Helpfile.
alle Versionen
Getinterior
Undokumentiert. Ergibt 1 für Interiorzellen, 0 für Exterior. Beachte: die Tribunal-Aussenbereiche sind technisch Interiors!
Alle Versionen
while (bedingung)
endwhile
Klassische While-Schleife, der Block wird ausgefürt, solange die Bedingung erfüllt ist. Ist wahrscheinlich deshalb undokumentiert, weil es elendig langsam ist!
Alle Versionen
PS: Post 1000 
__________________ drei mal dürft ihr raten, wer grade seine Signatur geschrottet hat...geht aber wieder - allerdings solltet Ihr noch die Finger von den Avataren lassen 
|
|
24.04.2003, 20:09 |
|
Noxx
The Knight who says Ni
     

Dabei seit: Oktober 2002
Geschlecht: 
Herkunft: Langerhanssche Inseln
Beiträge: 11482
 |
|
haste mal in ''Morrowind Scripting for Dummies 5'' (zb auf rpgworld-online) reingeguckt? da steht auch einiges drinne was einschränkungen und bugs betrifft.
__________________
''is sex with a tamagotchi sodomy?''
Original von Garak:
Sex ist grundsätzlich Veto-behaftet.
Ni
|
|
24.04.2003, 23:20 |
|
iladrion
Craftsman
 

Dabei seit: September 2002
Geschlecht: keine Angabe
Herkunft:
Beiträge: 288
 |
|
Zitat: Original von Garak
if(bedingung)
elseif(bedingung)
else
endif
Ja, selbst das ganz gewöhnliche if/else/endif hat Macken - und zwar eine Begrenzung der Länge des Blockes zwischen if und endif. Überschreitet diese nämlich den Wert von knapp 70 Befehlszeilen ( Kommentare werden nicht gezählt) kommt es zu unerklährlichen EXPRESSION/LEFT EVAL - Fehlern bei der Ausführung.
Bestätigt für Morrowind 1.2
Das kann ich nicht bestätigen, habe viel längere Verschachtelungen (hunderte...). Aber es gibt ne Grenze, bei der der Editor irgendwann beim saven warnt "Error: Too many nestings". Ist also nicht von der Anzahl der Zeilen, sondern von der Anzahl der Verschachtelungen abhängig.
Ausserdem gibt es ne maximal Länge für Scripts... hab ich schonmal erreicht, hab dann mit globalen Scripten angefangen. Ist wenn mans richtig macht eh viel besser...
Zitat:
cast SpellID, ZielID
Akzeptiert seltsamerweise nur "Player" als ZielID - dafür können auch leblose Gegenstände den Zauber aussprechen.
AFAIK für alle Versionen
Sorry, stimmt auch nicht, hab nen NPC der Wunderbar per Cast auf sich selber zaubert. Aber wie es scheint, ist Cast nur für Zauber funktionabel mit der Reichweite "Berührung", auch wenn er die dann durchaus auf Reichweite zaubert (?!)
Leblose Gegenstände kann ich bestätigen, hab Teppiche und Runen und solche Dinge zum Zaubern gebracht...
Zitat:
while (bedingung)
endwhile
Klassische While-Schleife, der Block wird ausgefürt, solange die Bedingung erfüllt ist. Ist wahrscheinlich deshalb undokumentiert, weil es elendig langsam ist!
Alle Versionen
Is doch Dokumentiert ! Schau mal genau nach... Da wo auch if...else...endif erklärt ist...
Zitat:
PS: Post 1000 
Meinen Herzlichen...
__________________ keep on modding...
|
|
25.04.2003, 07:00 |
|
Garak
Admin
     

Dabei seit: Juli 2002
Geschlecht: 
Herkunft: Cardassia Prime
Beiträge: 9257
 |
|
Das if-Problem bezog sich nicht auf die nestings sondern auf die Spannweite: Ich hab das entdeckt, als ich mal seehr viele programmzeilen zwischen if und endif hatte und dieser mir unerklärliche EXPRESSION/LEFT EVAL aufgetreten ist - ich fang also an, verdächtige Zeilen auszukommentieren, und es klappt wieder -> denke also, es lag an genau diesen Zeilen, die aber genau in der schreibweise in an deren scripts funktionierten -> kommentiere also auf gut Glück andere Zeilen aus, und es funktioniert wieder - mit den vorher auskommentierten Teilen!!! Hab dann rausgefunden, dass ich JEDE BELIEBIGE ZEiLE auskommentieren konnte, damit es funktioniert...
Ergo: Grosse Bedingung aufgeteilt ( in die mitte ein endif und wieder ein if mit der selben bedingung) und allles läuft glatt
Zu Cast: Einen optischen cast on self kann ich auch erzeugen, auch wenn ich als TargetID den player angebe. Der effekt trifft dann trotzdem den NPC. Wenn man den caster selbst als target angibt, funktioniert es nicht!!!. Hab es grade noch mal mit der US 1.2 nachgeprüft - target-spells funktionieren problemlos mit targetID player, on Touch funktioniert auch mit player, wenn auch unabhängig von der distanz. Beides funktioniert nicht für andere Ziele ( das opfer stand direkt daneben ) - wenn das bei Dir anders ist, muss es an der version liegen!
bei While hast Du mich erwischt - langsam ist das teil trotzdem...
@Nebula: Mag sein, dass es in Scripting for dummies erwähnt wird, aber mit dem Argument können wir das Forum dichtmachen.... übrigens hab ich SFD nie gelesen und muss dir das mal so glauben...
__________________ drei mal dürft ihr raten, wer grade seine Signatur geschrottet hat...geht aber wieder - allerdings solltet Ihr noch die Finger von den Avataren lassen 
|
|
25.04.2003, 10:45 |
|
iladrion
Craftsman
 

Dabei seit: September 2002
Geschlecht: keine Angabe
Herkunft:
Beiträge: 288
 |
|
@Garak:
zu IF...:
hmmm, ich bin mir aber sicher das ich mehr als 70 Zeilen in ner If-Schleife hab, aber ich werds nochmal ganz genau prüfen und dir dann das ergebnis Mitteilen. Hab Heute schon mehrfach daneben gelegen, sollte mal wieder mehr im Konjunktiv schreiben...
Zu Cast:
Ich bin mir Sicher der heilt sich und nicht mich... Habs doch grad vorhin gesehen...
"NPCID"->cast "heart heal" "NPCID"
das klappt bei mir...
(DV+Tribunal v1.4.1313)
zu while:
was solls, is ja kein Wettbewerb hier. Hab ne while-Schleife, die merkt man nicht, beim auto-leveln meines NPCs... Naja, is aber auch egal, da sie einwandfrei funktioniert, also kein Thema hier.
Aber ich hab auch noch was Neues:
Positon/Positioncell mit NPCs:
verwendet man folgende Zeile für einen NPC
"NPCID"->position 50000 10000 2000 180
so kommt der NPC wunderbar dort an, wo er hin soll (so gut wie immer, manchmal klappt es auch nicht), falls sich der Spieler in Reichweite der Koordinaten befindet.
Aber:
In ca. 20% der Fälle hat der NPC danach übelste Clipping-Fehler, dh Teile seiner Rüstung sind durchsichtig (sprich man kann durch ihn durchgucken), verdreht oder man sieht vorne den Rücken, oder vom ganzen NPC ist nur die Schulterklappe zu sehen. Und das so schlimm, das er manchmal nur nach sehr genauem rumsuchen zu finden ist. Hat man ihn gefunden, muss man ihn per Follow über ne Zellen-grenze schleppen oder per Companion-Share die Rüstungsteile aus- und wieder anziehen, damit der Grafikfehler verschwindet.
Übrigens: Auch wenn obiger Befehl direkt im Script des NPCs läuft, muss die ID wie oben davorstehen, sonst passiert einfach überhaupt nichts....
__________________ keep on modding...
Dieser Beitrag wurde von iladrion am 25.04.2003, 16:25 Uhr editiert.
|
|
25.04.2003, 16:25 |
|
Hazard_X
Bard
  

Dabei seit: April 2003
Geschlecht: 
Herkunft: Hannover
Beiträge: 33
 |
|
RemoveItem sollte man nur auf 'stapelbare' Items anwenden. Wenn man allerdings Items mit einem Script versieht tauchen die alle einzeln im Inventar auf. Der RemoveItem Befehl versucht jedoch trotzdem, den Gegenstand von einem Stapel abzuziehen, sodass man beim ersten anwenden des Befehls einen Stapel mit 0 Gegenständen hat (ist so nicht zu sehen) und beim zweiten anwenden prinzipiell einen Stapel mit -1 Gegenständen. Da eine negative Zahl im Prinzip Computerintern nichts anderes ist als eine sehr hohe positive Zahl hat man plötzlich einen Stapel mit extrem vielen Gegenständen... sehr unschön.
Sollte jemand zufällig eine möglichkeit finden trotzdem noch Gegenstände aus dem Inventar zu löschen sollte er sich bitte mal bei mir melden. *verzweifel*
__________________ Meine Mods findet ihr hier:
---> HAZARDX.COM <---
|
|
28.04.2003, 16:55 |
|
iladrion
Craftsman
 

Dabei seit: September 2002
Geschlecht: keine Angabe
Herkunft:
Beiträge: 288
 |
|
Zitat: Original von Hazard_X
Sollte jemand zufällig eine möglichkeit finden trotzdem noch Gegenstände aus dem Inventar zu löschen sollte er sich bitte mal bei mir melden. *verzweifel*
hab mal probiert, wie die engine reagiert, wenn man nach dem Removeitem "ITEMID" 1 noch nen Drop "ITEMID" 1 durchführt, war so ne idee von mir, aber das gibt nen schönen C2D
Nochmal wegen if...elseif -Blocklänge:
Hab gerade nochmal nachgezählt, habe 121 Zeilen in einem Block ohne eval-Fehler.
@Garak: Kannst dir das in IOTDv1.2beta in IOTD_Herbak_script anschauen, der if (gotBonus == 2)-Block geht von Zeile 616 bis 737, ohne eine leer- oder kommentarzeile dazwischen. Ist aber in v1.06 auch nahezu identisch drin.
Da muß noch irgendwas anderes reinspielen bei deinem eval-Problem.
__________________ keep on modding...
Dieser Beitrag wurde von iladrion am 29.04.2003, 13:57 Uhr editiert.
|
|
29.04.2003, 13:57 |
|
Havelock2
Warrior
    

Dabei seit: April 2003
Geschlecht: 
Herkunft: Ankh-Morpork
Beiträge: 95
 |
|
Zitat aus Skripting for Dummies bei der Problembeseitigung von Left und Right Eval:
Both of the above can also be caused by not having spaces at the proper places. Always leave a space between parantheses and function calls, variables etc. Das war bei mir schon mal so, aber ob das der Grund ist?
__________________ Meine Mod:
Etyram
Thanks to Rhuarc
|
|
03.05.2003, 16:27 |
|
Garak
Admin
     

Dabei seit: Juli 2002
Geschlecht: 
Herkunft: Cardassia Prime
Beiträge: 9257
 |
|
sorry, aber den fehler hatte ich vorher schon ausgeschlossen, der ist mir auch schon begegnet... Allerdings passieren mir in der letzten zeit die seltsamsten dinge: in einem Script mit sehr vielen Variablen hat eine Variable ständig einen INFIX TO POSTFIX fabriziert, was normalerweise auf einen fehler bei set henweist - eigenartiger weise lies sich das durch einfügen einer Dummyvariable, die im script nicht verwendet wird, an dieser Position der Variablendefinition beheben - manchmal wünsch ich mir die Kontrolle über die CPU wieder, die ich mit Assembler auf dem C64 hatte 
__________________ drei mal dürft ihr raten, wer grade seine Signatur geschrottet hat...geht aber wieder - allerdings solltet Ihr noch die Finger von den Avataren lassen 
|
|
04.05.2003, 22:44 |
|
|