Allgemein
News
News-Archiv
Partner
Netzwerk
Banner
Header
Media
Downloads
Impressum

The Elder Scrolls
Arena
Daggerfall
Spin-offs
Romane
Jubiläum
Reviews
Welt von TES
Lore-Bibliothek
Namens-
generator

FRPGs

Elder Scrolls Online
Allgemein
Fraktionen
Charakter
Kargstein
Technik
Tamriel-
Manuskript

Media

Skyrim
Allgemein
Lösungen
Tipps & Tricks
Steam-Kniffe
Review
Media
Plugins & Mods

Oblivion
Allgemein
Lösungen
Tipps & Tricks
Technik
Charakter
Media
Plugins & Mods
Kompendium

Morrowind
Allgemein
Lösungen
Tipps & Tricks
Media
Plugins & Mods

Foren
The Elder Scrolls Online
Hilfe & Diskussion

Skyrim
Hilfe & Diskussion
Plugins & Mods

Ältere TES-Spiele
TES-Diskussion
Oblivion-Plugins
Morrowind-Plugins

Community
Taverne zum Shalk
Adventures of Vvardenfell
Tales of Tamriel
Ergebnis 1 bis 13 von 13

Thema: Skript Problem

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1

    Skript Problem

    Hallo erstmal!
    Also ich versuch grad nen Zauber zu skripten.
    Ich spiel mal mit offenen Karten: Er soll einen toten NPC wiederbeleben, aber nur wenn der Spieler einen speziellen, gefüllten, schwarzen Seelenstein im Inventar hat.
    Falls nicht, soll eine Message den Spieler über den fehlenden Seelenstein informieren und beenden. Falls es klappt, wird 1 Seelenstein aus dem Inventar des Spielers entfernt.
    Alles schön ung gut, nur momentan funktioniert NICHTS.
    Das Skript sieht bislang so aus:
    Zitat Zitat
    scn ZDtotenbeschwoerung

    float reanimation
    ref target

    begin ScriptEffectStart

    set reanimation to 0
    if { player.GetItemCount ZDBlackSoulGemFilled >= 1 }
    set reanimation to 1
    player.disable ZDBlackSoulGemFilled 1

    endif
    end

    begin ScriptEffectStart

    set target to GetSelf
    if { reanimation == 1 }
    target.resurrect

    else
    message "Du brauchst einen gefüllten schwarzen Seelenstein"
    endif
    end
    Ich hab mir zwei der entsprechenden Seelensteine ins Inventar getan, nen NPC gekillt, Zauber gecastet, aber es hat rein garkeine Auswirkungen.
    Wäre dankbar für jede Hilfe.

    MfG,
    Thorn

  2. #2
    Zitat Zitat
    scn ZDtotenbeschwoerung

    ref target

    begin ScriptEffectStart

    if player.GetItemCount ZDBlackSoulGemFilled >= 1

    player.removeitem ZDBlackSoulGemFilled 1
    set target to GetSelf
    target.resurrect

    else

    message "Du brauchst einen gefüllten schwarzen Seelenstein"
    endif

    end
    wieso einfach, wenn es doch auch kompliziert geht

    sollte ich den script jetzt verschlechtbessert haben, dann sry. bin halt ein etwas schlampiger scripter

    edit: ich glaub, das ganze geht auch ohne das id-speichern und dann target.resurrect
    Zitat Zitat
    scn ZDtotenbeschwoerung


    begin ScriptEffectStart

    if player.GetItemCount ZDBlackSoulGemFilled >= 1

    player.removeitem ZDBlackSoulGemFilled 1
    resurrect

    else

    message "Du brauchst einen gefüllten schwarzen Seelenstein"
    endif

    end

  3. #3
    RemoveItem ich wusste doch das an Disable was nicht optimal ist. Naja ich probiers mal aus und meld dann mal das Ergebnis.

    EDIT
    Ergebnis: Unbefriedigend
    Da funktioniert auch nichts...

  4. #4
    Hm, also ich weiß gerade nicht, wie das auswählen des Ziels funktioniert und ob es mit "ref target" getan ist.
    Mit "scripteffectstart" kann ich auch nicht viel anfangen, ich hätte es jetzt erstmal
    begin onhit targetID versucht, aber wenn es so gemacht wird, dann müsste das so schonmal stimmen.
    Was unnötig ist, sind die Klammern die du in die If-Sentence gesetzt hast.. man braucht keine Klammern [habe ich auch noch in keinem Script gesehen oO].
    Ich glaube auch eine ganz normale "Short" Variable dürfe völlig ausreichen.
    Außerdem musst du diese Variabele garnicht auf 0 setzen, das müsste sie von sich aus schon sein, weil sie ja leer, also 0 ist.
    Was nicht funktioniert ist "player.disable". Da musst du den removeitem objectID, count befehl benutzen
    Warum du dann den If-Block beendest blicke ich im moment auch noch nicht so ganz.
    Der zweite ergibt jedenfalls nicht viel Sinn.
    Warum denn "set target to getself" ? Damit wärst DU Ziel des Spruches.
    Hm, lass mich überlegen. Ich würde es mal so probieren:

    scn ZDtotenbeschwoerung

    float reanimation
    ref target

    begin ScriptEffectStart


    if player.GetItemCount ZDBlackSoulGemFilled >= 1 && reanimation == 0 && target.getdead == 1
    set reanimation to 1
    player.removeitem ZDBlackSoulGemFilled, 1
    target.resurrect
    if target.getdead == 0
    messagebox "Lebende NPCs kann man nicht wiederbeleben"
    endif
    else
    messagebox "Du brauchst einen gefüllten schwarzen Seelenstein"
    endif
    end

    Wie gesagt, ich weiß nicht wie das mit dem einholen des Ziels geht, aber wenn das schon durch das sprechen des Spruches funktioniert [vorrausgesetzt man trifft auch], dann sollte es klappen. Sollte..... ^^

  5. #5
    Ja ich denk halt manchmal zu kompliziert.
    Die Klammern beim if sollen nur der Übersichtlichkeit dienen

    @Lagerhaus_Jonny
    Also mit deinem Skript ´funktioniert immerhin schonmal EINE Message. Aber die auch immer. Und zwar "Du brauchst einen gefüllten schwarzen Seelenstein". Egal ob tot oder lebendig, die bloppt immer auf.
    Wobei ich nicht ganz verstehe woher das Spiel wissen soll was target ist. Ist ja momentan bei deinem Skript einfach nur ne Variable...Get Self sollte eigentlich funktionieren, habe ich auch schon bei der Modifikation meines Melonenzaubers verwendet. (da regnen Melonen aufs Ziel herab)

  6. #6
    Zitat Zitat
    Was unnötig ist, sind die Klammern die du in die If-Sentence gesetzt hast
    und genau so wenig braucht es absätze, tabulatorsprünge und dieses ganze zeug, das den script einfach ein wenig übersichtlicher machen.
    schau dir mal nen mw-script an. da hat jede if-abfrage eine solche formatierung
    Zitat Zitat
    Warum denn "set target to getself" ? Damit wärst DU Ziel des Spruches
    nö. es wäre doch sinnlos eine solche funktion ins spiel einzubauen, wenn als ref-var dann immer player rauskommen würde.

    also eigentlich ist ein zauberscript ja wie ein localer script, der sich sozusagen an den npc bzw. an den actor dranhängt, der vom zauber betroffen ist.
    wenn dann etwas steht wie resurrect (NICHT id.resurrect) müsste es eigentlich den betroffenen actor direkt betreffen, ohne dass man ein ziel deklarieren müsste; schließlich fungiert der zauberscript hier ja als eine art localer script (ich wiederhol mich ^^)

  7. #7
    gibt es eigentlich schon im original oblivion einen spell mit dem man tote zum lebenerwecken kann? ohne seelensteine?

  8. #8
    "und genau so wenig braucht es absätze, tabulatorsprünge und dieses ganze zeug, das den script einfach ein wenig übersichtlicher machen.
    schau dir mal nen mw-script an. da hat jede if-abfrage eine solche formatierung"

    kA, ich habe für Morrowind Scriptmäßig noch nix gemacht.

    "also eigentlich ist ein zauberscript ja wie ein localer script, der sich sozusagen an den npc bzw. an den actor dranhängt, der vom zauber betroffen ist.
    wenn dann etwas steht wie resurrect (NICHT id.resurrect) müsste es eigentlich den betroffenen actor direkt betreffen, ohne dass man ein ziel deklarieren müsste; schließlich fungiert der zauberscript hier ja als eine art localer script"

    Ah ja, verstehe.

    @Thorn

    Der Grund warum du die Nachricht immer bekommst, ist wohl die "else" Sache.
    versuche doch einfach mal hinter das else die Gegebenheiten zu hängen, die zutreffen müssen, damit man die Nachricht bekommt. Also z.B. player.GetItemCount ZDBlackSoulGemFilled == 0.
    Ich weiß nicht, ob es den Befehl "elseif" gibt, ich denke schon.. den würde ich dann anstatt dem "else" nehmen.

  9. #9

    Das hab ich mir auch schon gedacht.
    Und das Resultat ist sehr interessant.
    Wenn ich jetzt den Spell auf einen Toten mit den Steinen im Inventar wirke, stürzt das Spiel ab und ich höre gerade noch so das Geräusch, das erklingt wenn ein Item ausm Inventar entfernt wird.

    EDIT
    Ok, alles funktioniert.
    Es lag am Ende am resurrect.
    Mit dem normalen resurrect Befehl wird der NPC lediglich resetet, ohne Animation.
    Das hat das Spiel wohl zum abstürzen gebracht.
    Steht ein 1 dahinter, steht der NPC mit ner Animation wieder auf.
    Jetzt funktioniert alles bestens.
    Vielen Dank an alle die geholfen haben.

  10. #10
    Welches Skript ist jetzt aktuell? Das hier? (Hinweis: [code][/code] Tag ist was feines. )
    Code:
    scn ZDtotenbeschwoerung
    
    float reanimation
    ref target
    
    begin ScriptEffectStart
    
    	if player.GetItemCount ZDBlackSoulGemFilled >= 1 && reanimation == 0 && target.getdead == 1
    		set reanimation to 1
    		player.removeitem ZDBlackSoulGemFilled, 1
    		target.resurrect
    		if target.getdead == 0
    			messagebox "Lebende NPCs kann man nicht wiederbeleben"
    		endif
    	else
    		messagebox "Du brauchst einen gefüllten schwarzen Seelenstein"
    	endif
    end
    Und ich kann dir sagen, warum es knallt...target wird nie gesetzt, also versucht du etwas zu ressurecten, das gar nicht existiert. Boom.

    An sich sollte man kein target brauchen, da das Skript direkt auf dem getroffen NPC/Monster ausgeführt wird. Sollte theoretisch so klappen:

    Code:
    scn ZDtotenbeschwoerung
    
    begin ScriptEffectStart
    
    	if ( getDead == 0 )
    		messagebox "Lebende Wesen kann man nicht wiederbeleben"
    	elseif ( player.getItemCount ZDBlackSoulGemFilled == 0 )
    		messagebox "Du brauchst einen gefüllten schwarzen Seelenstein"
    	else
    		player.removeitem ZDBlackSoulGemFilled 1
    		resurrect 1
    	endif
    end
    resurrect 1 is ein bissi schöner, da steht der NPC auf und beamt sich nicht einfach in die aufrechte Position.

  11. #11
    Äh ok, kommst ein bisschen zu spät, aber egal.
    Wie im Edit zu lesen geht jetz alles.
    Die reanimation Variable wurde überflüssig.
    Wen interessiert, das finale Skript sieht so aus (mit [code] Tag ) :
    Code:
    scn ZDtotenbeschwoerung
    
    ref target
    
    begin ScriptEffectStart
    
     set target to GetSelf
     if { player.GetItemCount ZDBlackSoulGemFilled >= 1 && target.getdead == 1 }
     player.removeitem ZDBlackSoulGemFilled, 1
     resurrect 1
    
    elseif { target.getdead == 0 }
     messagebox "Lebende NPCs kann man nicht wiederbeleben"
    elseif { player.GetItemCount ZDBlackSoulGemFilled == 0 }
     messagebox "Du brauchst einen gefüllten schwarzen Seelenstein"
    
    endif
    end

  12. #12
    Naja. Wie auch immer. Der target Kram ist imho trotzdem überflüssig. Du setzt target zwar per getSelf, benutzt es aber für resurrect gar nicht. Sollte auch für getDead so funzen. Hau wech den Scheiß.

  13. #13
    Dann benutz ich es halt für resurrect!
    Ich mag mein target und steh dazu!
    Das lässt das ganze komplizierter wirken.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •