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
Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 20 von 43

Thema: 2 probleme mit meinem Skript

  1. #1

    2 probleme mit meinem Skript

    hallo

    wie oben erwähnt habe ich 2 Probleme mit folgendem skript

    PHP-Code:
    scn aaarmorbrokenc

    short init
    short next
    short EquipDelay
    long objecthealth
    ref Actor

    Begin onEquip
        
    if init == 0
            set Actor to getcontainer
            set init to 1
        
    endif
    end

    Begin GameMode
        
    if init == 1
            
    if getCurrentHealth getObjectHealth >= && getCurrentHealth getObjectHealth <= 0.75
                message 
    "Rüstung ist beschädigt!"
                
    set next to 1
                   set objecthealth to getObjectHealth aamodiamelion
                Actor
    .addItem aamodiamelionbroken 1
                set init to 0
                  
    if next == 1
                      set EquipDelay to 1
                  
    endif
            endif
        elseif 
    next == 1
            
    if EquipDelay >= 1
                set EquipDelay to EquipDelay 
    1
            
    elseif EquipDelay == 0
                set next to 0
                   Actor
    .UnEquipItem aamodiamelion
                Actor
    .EquipItem aamodiamelionbroken
                   Actor
    .setEquippedCurrentHealth objecthealth 2
                removeMe
            
    endif
        endif
    end 
    1. der skript funktioniert bei mir aber nicht bei NPC´s

    2. setObjectHealth funktioniert nicht <= "GELÖST"

    freue mich über jede hilfe
    Geändert von Orios das auge (15.08.2009 um 23:41 Uhr)

  2. #2
    Heißt das anstatt "SetObjectHealth" nicht "SetHealth"? So war's zumindest in MW.

  3. #3
    ne der befehl heisst so Link

  4. #4
    Was willst du mit SetObjectHealth denn beeinflussen?

    Wenn du die aktuelle "Gesundheit" des Objekts beeinflussen willst ist das der falsche Befehl.
    Dazu benötigst du G/SetCurrentHealth.


    Problem: dazu benötigst du die Referenz des Objekts, da es sich aber in einem Inventar befindet ist es keine Referenz (bzw. bei Ausführung des Scriptes eine temporäre) --> funktioniert nicht



    Lösung: du musst über G/SetEquippedCurrentHealth gehen.


    SetObjectHealth beeinflusst die maximale Gesundheit (wird Ingame nicht angezeigt, das ist nur der prozentuale Wert). Die kannst du im CS aber direkt festlegen, da du die IDs ja augenscheinlich kennst ist der Befehl imho recht sinnfrei.

  5. #5
    danke für die antwort

    ich möchte damit den aktuelle zustand der Rüssi auf der Rüssi übertragen die durch den Skript ausgerüsted wird

    ok hab den Skript jetzt ma Aktualisiert

    es funktioniert aber immer noch nicht

    aamodiamelionbroken hat immer noch 100 %
    Geändert von Orios das auge (15.08.2009 um 19:52 Uhr)

  6. #6
    Code:
    scn aaarmorbrokenc 
    
    short init 
    short next 
    short EquipDelay 
    long objecthealth 
    ref Actor 
    
    Begin onEquip 
        if init == 0 
            set Actor to getself
            set init to 1 
        endif 
    end 
    
    Begin GameMode 
        if init == 1 
            if (( getEquippedCurrentHealth / getObjectHealth aamodiamelion ) >= 0 ) && (( getequippedCurrentHealth / getObjectHealth aamodiamelion ) <= 0.75 )
                message "Rüstung ist beschädigt!" 
                set next to 1 
                   set objecthealth to getObjectHealth aamodiamelion 
    				Actor.addItem aamodiamelionbroken 1 
                set init to 0 
                  if next == 1 
                      set EquipDelay to 1 
                  endif 
            endif 
        elseif next == 1 
            if EquipDelay >= 1 
                set EquipDelay to EquipDelay - 1 
            elseif EquipDelay == 0 
                set next to 0 
    			Actor.UnEquipItem aamodiamelion 
    			Actor.EquipItem aamodiamelionbroken 
    			Actor.setEquippedCurrentHealth objecthealth 2 
    			removeMe 
            endif 
        endif 
    end
    Ich versuch mal mein glück, kanns nicht testen.

  7. #7
    jetzt sagt cs mir

    script error

    Script "aarmorbrokenb" line 18 missing parameter int.

    hab jetzt aber keine ahnung was ich da tuhen soll

  8. #8
    Code:
    scn aaarmorbrokenc 
    
    short init 
    short next 
    short EquipDelay 
    long objecthealth 
    ref Actor 
    
    Begin onEquip 
        if init == 0 
            set Actor to getself
            set init to 1 
        endif 
    end 
    
    Begin GameMode 
        if init == 1 
            if (( getEquippedCurrentHealth 2 / getObjectHealth aamodiamelion ) >= 0 ) && (( getequippedCurrentHealth 2 / getObjectHealth aamodiamelion ) <= 0.75 )
                message "Rüstung ist beschädigt!" 
                set next to 1 
                   set objecthealth to getObjectHealth aamodiamelion 
    				Actor.addItem aamodiamelionbroken 1 
                set init to 0 
                  if next == 1 
                      set EquipDelay to 1 
                  endif 
            endif 
        elseif next == 1 
            if EquipDelay >= 1 
                set EquipDelay to EquipDelay - 1 
            elseif EquipDelay == 0 
                set next to 0 
    			Actor.UnEquipItem aamodiamelion 
    			Actor.EquipItem aamodiamelionbroken 
    			Actor.setEquippedCurrentHealth objecthealth 2 
    			removeMe 
            endif 
        endif 
    end
    Sry hatte die 2 vergessen

  9. #9
    wenn ich jetzt die rüssi anziehe verschwindet se auch gleich wieder (auch aus inventar)
    die neue rüssi taucht denn aber auch net auf

  10. #10
    Du musst natürlich auch GetCurrentHealth verwenden um den Wert zu speichern.

    Probier das mal:
    Code:
    scn aaarmorbrokenc
    
    short init
    short next
    short EquipDelay
    long objecthealth
    ref Actor
    
    Begin onEquip
    	if init == 0
    		set Actor to getcontainer
    		set init to 1
    	endif
    end
    
    Begin GameMode
    	if init == 1
    		if getCurrentHealth / getObjectHealth >= 0 && getCurrentHealth / getObjectHealth <= 0.75
    			message "Rüstung ist beschädigt!"
    			set next to 1
    			set objecthealth to getCurrentHealth
    			Actor.addItem aamodiamelionbroken 1
    			set init to 0
    			;Abfrage war sinnlos (immer wahr), daher entfernt
    			set EquipDelay to 1
    		endif
    	elseif next == 1
    		if EquipDelay >= 1
    			set EquipDelay to EquipDelay - 1
    		elseif EquipDelay == 0
    			set next to 0
    			Actor.UnEquipItem aamodiamelion
    			Actor.EquipItem aamodiamelionbroken
    			Actor.setEquippedCurrentHealth objecthealth 2
    			removeMe
    		endif
    	endif
    end

  11. #11
    es geht
    und ich hatte schon fast aufgegeben^^"

    jetzt bleibt nur noch das problem das der Skript nicht funktioniert wenn ein NPC die rüssi trägt

  12. #12
    Füge doch mal folgendes zu Testzwecken in den Gamemode-Block ein:
    Code:
    if ( ( Actor.GetIsReference Player ) == 0 ) && ( IsFormValid Actor )
    	Print ( Actor.GetName ) + " (" + ( Actor.GetFormIDString ) + ") als Container im Gamemode-Block."
    endif

    Wenn der Gamemode-Block läuft (und sich das Item nicht im Inventar des Spielers befindet) sollte das deine Konsole zuspammen: <Name> (<FormID>) als Container im Gamemode-Block.
    Wenn da nichts erscheint läuft der Gamemode-Block einfach nicht.
    Geändert von Low Post (16.08.2009 um 13:10 Uhr)

  13. #13
    ok ich habe das ma gleich am anfang des blocks eingefügt
    und die konsole wure mit folgendem immer wieder zugespamt

    Error in script b5000eed
    Attempting to call a function on a NULL reference or base object
    Error in script b5000eed
    An expression failed to evaluate to a valid result

    dabei spielte es keine rolle ob ich oder ein npc die rüssi hatte

    kleine frage am rande zu setEquippedCurrentHealth

    was für eine slot id muss ich eigendlich angeben wen ich z.B. eine rüssi wie das Arenagewand nehmen will?

  14. #14
    Oh, sorry. Hab eine Abfrage vergessen.
    Script wurde editiert.

    Zitat Zitat
    was für eine slot id muss ich eigendlich angeben wen ich z.B. eine rüssi wie das Arenagewand nehmen will?
    Seit der neuesten OBSE-Beta (v0018 Beta 3) reicht es aus einen Slot anzugeben, der von der Rüstung verwendet wird. Davor könntest du noch 18 ausprobieren, aber da das Arenagewand auch noch die Füße und Hände besetzt (IIRC) wird das nicht funktionieren.

    Einzige Möglichkeit wäre dann SetCurrentHealth, wofür das Item aber z.B. außerhalb des Inventars (da als Referenz) beeinflusst werden muss. Außerdem wurde das auch erst mit o.g. Beta eingefügt.

  15. #15
    ok die konsole wird nicht zugespamt

    ich habe jetzt allerdings noch ein problem bemerkt

    wenn ich das spiel lade u die rüssi schon an habe wird der begin onEquipp block ja nicht ausgeführt darum habe ich die befehle in den block ma in den gamemod block übernommen und mit einer doonce variable versehen

    siehe hier
    PHP-Code:
    scn aaarmorbrokenb

    short doonce
    short init
    short next
    short EquipDelay
    long objecthealth
    ref Actor

    Begin GameMode
    if ( ( Actor.GetIsReference Player ) == ) && ( IsFormValid Actor )
        Print ( 
    Actor.GetName ) + " (" + ( Actor.GetFormIDString ) + ") als Container im Gamemode-Block."
    endif
     if 
    init == && doonce == 0
        set Actor to getcontainer
        set init to 1
                set doonce to 1
    endif
        if 
    init == 1
            
    if getCurrentHealth getObjectHealth >= && getCurrentHealth getObjectHealth <= 0.75
                message 
    "Rüstung ist beschädigt!"
                
    set next to 1
                set objecthealth to getCurrentHealth
                Actor
    .addItem aamodiamelionbroken 1
                set init to 0
                set EquipDelay to 1
            
    endif
        elseif 
    next == 1
            
    if EquipDelay >= 1
                set EquipDelay to EquipDelay 
    1
            
    elseif EquipDelay == 0
                set next to 0
                Actor
    .UnEquipItem aamodiamelion
                Actor
    .EquipItem aamodiamelionbroken
                Actor
    .setEquippedCurrentHealth objecthealth 2
                removeMe
            
    endif
        endif
    end 
    allerdings funktioniert das nur wenn die rüstung dem entsprechend beschädigt ist und ich das spiel Speicher,neu starte und dann lade
    beim normalem laden (ohne game ausmachen oder cell wechsel funktioniert das nicht
    Geändert von Orios das auge (16.08.2009 um 14:02 Uhr)

  16. #16
    Zitat Zitat
    ok die konsole wird nicht zugespamt
    Bedeutet: entweder hat kein NPC das im Inventar, oder der Gamemode-Block läuft dann einfach nicht ab.



    Zum Script:
    Die Variablen werden eigentlich gespeichert, also sollte es nicht nötig sein das zu ändern.
    Falls du aber unbedingt willst würde ich dir GetEquipped empfehlen.

  17. #17
    zu 1. nein ich habe mir einen x beliebigen Npc ausgesucht und ihn das teil ins inventar geklatscht (kann ich durch ein mod) und in der konsole ist nix erschienen

    zu 2. nee der effeckt ist der gleiche als wenn ich doonce ganz weglasse was bedeuted das ganz viele aamodiamelionbroken im inventar auftauchen aber nicht ausgerüsted werden (die rüstung die angelegt ist bleibt aber auch angelegt)
    Geändert von Orios das auge (16.08.2009 um 15:52 Uhr)

  18. #18
    1.: Da kann man leider nicht großartig etwas dran ändern.

    2.) Hab mir dein Script jetzt nicht angesehen, aber probier mal das hier:
    Code:
    scn aaarmorbrokenc
    
    short next
    short EquipDelay
    long objecthealth
    ref Actor
    
    Begin GameMode
    	if Actor == 0
    		set Actor to GetContainer
    	elseif ( Actor.GetEquipped aamodiamelion ) && ( next == 0 )
    		if getCurrentHealth / getObjectHealth >= 0 && getCurrentHealth / getObjectHealth <= 0.75
    			message "Rüstung ist beschädigt!"
    			set next to 1
    			set objecthealth to getCurrentHealth
    			Actor.addItem aamodiamelionbroken 1
    			set EquipDelay to 1
    		endif
    	elseif next == 1
    		if EquipDelay >= 1
    			set EquipDelay to EquipDelay - 1
    		elseif EquipDelay == 0
    			set next to 0
    			Actor.UnEquipItem aamodiamelion
    			Actor.EquipItem aamodiamelionbroken
    			Actor.setEquippedCurrentHealth objecthealth 2
    			removeMe
    		endif
    	endif
    end

  19. #19
    zu 1. heist das jetzt das ich npc´s doch keine dellen in die rüstung kloppen kann?

    zu 2. thx das hat funktioniert
    Geändert von Orios das auge (16.08.2009 um 17:15 Uhr)

  20. #20
    Zumindest nicht auf diese Art.
    Vermutlich müsstest du den Weg über Eigenschaften mit ScriptEffekt gehen, oder du regelst gleich alles in einem QuestScript.

Berechtigungen

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