ok Scripteffeckt wäre schlecht da der Skript ja auch bei verzauberten sachen funktionieren soll
Könntest du mir das mit den Quest Skript vieleicht genauer erklären
sry das ich so blöd frage aber hatte mit Quest´s noch nicht viel am Hut
ok Scripteffeckt wäre schlecht da der Skript ja auch bei verzauberten sachen funktionieren soll
Könntest du mir das mit den Quest Skript vieleicht genauer erklären
sry das ich so blöd frage aber hatte mit Quest´s noch nicht viel am Hut
Um ein QuestScript wirst du nie herumkommen. Entweder um den NPCs die Eigenschaft hinzuzufügen (macht übrigens keinen Unterschied, ob die Rüstung verzaubert wurde oder nicht), oder um den Effekt gleich dort zu erledigen.
QuestScripts unterscheiden sich von sonstigen Scripten nur darin, dass sie keine Referenz haben (sprich: wenn eine Funktion einen CallingActor benötigt muss der angegeben werden), sie mittels StopQuest/StartQuest gestoppt/gestartet werden können und mittels der (lokalen) Variable fQuestDelayTime kontrolliert wird, wie oft ein Gamemode/Menumode-Block läuft.
Ansonsten ist so ziemlich alles gleich: stelle den Typ auf Quest, erstelle eine neu Quest und füge dein Script als das Script der Quest ein. Hin und wieder ist es auch sinnvoll den Haken bei SetGameEnabled zu entfernen (hier wahrscheinlich nicht).
bedeuted das nicht das der skript dadurch Global wird
und das wen ich für jede rüssi ein passenden Skript erstelle das sehr an die performence
geht?
zu scripteffektstart : dadurch muss ich doch automatisch jede rüssi die den skript benutzt verzaubern was ja blöd währ wenn ich den skript für jede rüssi im Spiel benutzen will
Nö, nicht die Rüstung verzaubern, sondern den NPCs eine Eigenschaft (!= Verzauberung) hinzufügen die das entsprechende erledigt.
Performance dürfte hauptsächlich dadurch beeinträchtigt werden, dass du immer jeden NPC neu durchgehen musst. Mehrere Rüstungen (lassen sich btw. auch in einem Script erledigen) machen da den Braten auch nicht mehr fett.
Scripte sind allgemein nicht so Performance-lastig, dass sollte also weniger das Problem sein.
Die umstehenden NPCs kannst du auf mehreren Wegen bekommen:
Zauber mit großer Reichweite auf den Spieler abfeuern (z.B. von einem Activator der vorher über dem Spieler platziert wird). Das Ziel in dem ScriptEffect (GetSelf) ist dann alles, was sich in der Reichweite befindet.
Mittels OBSE-Funktionen GetFirst/NextRef in einem Loop.
Alles muss in regelmäßigen Abständen überprüft werden, da die NPCs ja wandern.
ok wenn ich den skript in einen Questskript umwandeln will
sagt cs folgendes
scripterror "aaarmorbroken" on line 10
reference function "getcontainer" requieres explicit reference in quest script
getContainer funzt also nich Getself geht ine einem GameMode block ja auch net gibt sonst noch was das ich überprüfen kann
das mit den callingActor verstehe ich jetzt net so ganz ^^"
wie füge ich ein Activator über den Spieler ein ??
das mit den zauber ist iwie nich so toll wollte ja nicht immer ein dicken zauber wirken lassen (oder geht das alles auch automatisch ganz ohne visualen Effekten)
Edit: weiss jetzt aber net so ganz wie ich mehrere rüssies in einem skript erlediegen soll
Geändert von Orios das auge (17.08.2009 um 12:08 Uhr)
Mäh, kann ich verstehenZitat
o_ojetzt verstehe ich erst wie sowas aufgebaut ist
auf jedenfall großes danke für alle zeit und müh
2 kleine frage habe ich jedoch noch
ich müsste getFirstRef 69(Actor) 1
nehmen wen ich Player mit einbeziehen will richtig?
was ist Loop? ich vermute ma das ist das für while was endif füt if
//Edit
habe das jetzt so probiert
jetzt sagt er mir allerdings
reference function getIsID requires explicit reference in questSkript
sry das ich dich weiter belästige
Geändert von Orios das auge (17.08.2009 um 15:04 Uhr)
Actor bedeutet NPCs & Kreaturen.
Wenn du den Spieler mit einbeziehen willst mach den einfach am Schluss, wenn der Rest schon durch ist.
Die Fehlermeldung kommt, weil der nicht weiß für welche Referenz er GetIsID überprüfen soll. Für deine Zwecke sollte es ein einfaches == tun.
ok leider passiert nichts
ich habe das folgendermaßen probiert
quest einstellung
priority 60
skript aavictimsofbroken (habe da aus if Object == aamodiamelion || Object == aamodiamelionbroken
if Object == aamodiamelion
victim.addspell aamodiamelionbrokenSP
elseif object == aamodiamelionbroken
viktim.addspell aamodiamelionhealthSP
endif
gemacht sollen ja 2 verschiedene Effekte auftreten sonst habe ich aber nichts geändert
häkchen start game enable
zauber einstellung
type eigenschaft
häkchen Auto-calculate
Effects
effect Skript Effekt
range selbst
school Veränderung
skript aamodiamelionbrokenspell
häkchen Effect is hostile
alles nicht erwähnte habe ich nicht geändert (nur name u ID habe ich jetzt nicht immer angegeben)
muss in game eigendlich die eigenschaft da sichtbar werden wo z.B. anfälligkeit feuer etc steht
edit: ok bei quest hab ich dir Priority auf 0 gesetzt
fuktioniert allerdings immer noch nicht
message taucht nur auf wenn kein NPC in der cell ist
in der ich bin
frage: was macht if (count)?
Geändert von Orios das auge (18.08.2009 um 21:12 Uhr)
ok habe es hinbekommen
Alle Jahre wieder
so nach dem ja so ein Jahr vergangen ist habe ich mal meinen Skript wieder Ausgegraben.
Der sich im laufe der Zeit ein wenig verändert hat und jetzt so Aussieht.
Jetzt habe ich da 2 Problem
1. Script wird wenn ich im Spiel bin und denn lade. (nicht wenn ich Obl gerade gestartet habe ) öfters mal ignoriert (nicht immer aber doch recht oft).
2. nachdem ich die sache mit den Drop eingefügt habe. löst der Script ein CTD in Exterior Bereichen aus, im interior funktioniert es so aber.
Ich nehme an brTestcuirass1Splitter ist ein base object id (sonst würde Drop auch nicht funktionieren).
Dadurch, dass du verwendest benötigst du aber die Referenz.
Die einzige Möglichkeit diese zu bekommen wäre GetFirst/NextRef. Du solltest allerdings (mindestens) einen Frame warten, bis du sie auch verwendest.
Das erklärt zwar nicht den CTD, allerdings warum das Script nach dem ersten Durchlauf nicht mehr funktioniert (wird gestoppt, bis Oblivion neu gestartet wird).
habe mich mal im cswiki schlau gemacht da steht ja irgendwas von While Loop SchleifeZitat
, sorry wegen meiner Unwissenheit aber ich habe keine ahnung wie die funktioniert.
Jep ein Miscitem um´s Genauer zu sagenZitat
das der Script nach dem laden Gerne nicht funktioniert war schon bevor ich die sache mit Drop Reingenommen habe.Zitat
Sprich als der Script noch so aussah
Bei einer While-Schleife wird einfach alles zwischen dem While und Loop (angenommen Break/Continue wird nicht verwendet) so oft wiederholt, bis die While-Bedingung nicht mehr zutrifft. In dem Wiki-Beispiel ist das so lange der Fall, wie GetNextRef einen Wert != 0 ausgibt.
Warum das Script sonst anhält kann ich nur vermuten. Mein Ansatz wäre jetzt, dass ein unequip & equip, die den gleichen Slot betreffen nicht im selben Frame stehen dürfen. Ich würde dazu einfach das unequip weglassen.
Ich würde dir allerdings empfehlen ein paar Print(C)-Befehle einzufügen. Damit kannst du kontrollieren, wie weit das Script durchläuft. Der Fehler ist dann auf jeden Fall danach.
Habe mal versucht so ein While Loop einzubauen
Das war jetzt mein Erster versuch. Führt allerdings nur zum CTD
auf der CS Wiki steht ja irgendwas von ; do something with pDoor innerhalb der While Loop Schleife heißt das ich muss da jetzt noch was anderes machen als nur GetNextRef![]()
Geändert von Orios das auge (01.10.2010 um 19:27 Uhr)
Da britem eine Referenz ist (GetFirst/NextRef gibt nur Referenzen aus) wird es nie gleich dem base object brTestCuirass1Splitter sein. Versuch mal folgenden While-Loop:
Was den CTD betrifft:
Konsole lässt sich da ja schwer überprüfen, von daher musst du auf den (undokumentierten) Befehl dbg_echo zurückgreifen. Der verwendet die gleiche Syntax wie PrintC, schreibt den Inhalt aber nicht nur in die Konsole, sondern auch in die Datei obse.log im Oblivion-Verzeichnis.
Der Befehl sollte aber nur zum De-bugging (Fehlersuche) verwendet werden und aus der Release-Version wieder gelöscht werden.
Ok jetzt gibt es kein CTD mehr (auch nicht im Exterior 8))
allerdings Passieren jetzt andere Merkwürdige dinge o_O
1. Der Bildschirm wird für ein Bruchteil einer Sekunde Schwarz
2. Der Gegner Steckt danach die waffe weg und Zieht sie wieder erneut
3. Die Musik wird zurück gesetzt
und 4. bei 3 meiner 8 Versuche wurde das Wetter nach dem Blackscreen geändert
und Moveto scheint nicht zu Funktionieren (Der Gegenstand brTestcuirass1Splitter erscheint vor der Brust von Player und nicht ein Stück über´m Kopf so wie es bei moveto 0,0,150 ja eigendlich sein soll)
Hier der Script
und die Obse.log
Zitat
Das weist auf einen Syntax-Fehler hin: Eine Funktion, die einen best. Wert benötigt wird mit einer Null-Referenz/base object aufgerufen.Zitat
Probier mal den ScriptViewer aus, da kannst du sehen, was die Offset-Werte bedeuten (stehen für eine Position im Script).
Ich vermute, dass es die While-Schleife selbst ist. Das passiert aber nur, wenn keiner der entsprechenden Werte brTestcuirass1Splitter als Base Object hat. Sicher, dass du den richtigen Filter bei GetFirstRef verwendest?