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 20 von 43

Thema: 2 probleme mit meinem Skript

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    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

  2. #2
    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).

  3. #3
    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

  4. #4
    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.

  5. #5
    Zitat Zitat von Low Post Beitrag anzeigen
    Nö, nicht die Rüstung verzaubern, sondern den NPCs eine Eigenschaft (!= Verzauberung) hinzufügen die das entsprechende erledigt.
    achso mit addspell
    bloß wie deklariere ich dafür die entsprechende ref varieable(also die für Actor)?


    Zitat Zitat von Low Post Beitrag anzeigen
    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.
    das wäre nich so gut da meine performens sowieso schon nichh so doll ist

  6. #6
    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.

  7. #7
    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)

  8. #8
    Mäh, keine Lust mehr.
    Hier eine Eigenschaft-Verteil-Quest aus einem meiner Mods:

    Code:
    scn LPUSfEQuDistributionScript
    
    ;Global: short LPUSfEGlbEnableNPC						; set LPUSfEGlbEnableNPC to 0 if you want to deactivate the NPC-component of this Plugin
    ;Global: float LPUSfEGlfVersion							; Version of "Unarmored Skill for Everyone"
    long lCount
    long lNumber
    float fQuestDelayTime
    ref rCell
    ref rNPC
    ref rScript
    
    Begin Gamemode
    	set rScript to LPUSfEQuDistributionScript
    ;------------------------------------------------------------------------
    ; Conditions
    ;------------------------------------------------------------------------
    	if ( LPUSfEGlfVersion == 0 ) || ( LPUSfEGlbEnableNPC == 0 ) || ( LPUSfEQuInitialization.iShutDown )
    		Return
    	endif
    	if ( rCell != ( Player.GetParentCell ) )
    		set rCell to ( Player.GetParentCell )
    		set lNumber to -1
    	endif
    	if ( lNumber != ( GetNumRefs 35 1 ) )
    		set lNumber to ( GetNumRefs 35 1 )
    		set lCount to 0
    		While ( lCount < lNumber )
    			if ( lCount )
    				set rNPC to ( GetNextRef )
    			else
    				set rNPC to ( GetFirstRef 35 1 )
    			endif
    			let lCount += 1
    			if ( rNPC.GetDead )
    				PrintD ( ASCIIToChar 2 ) + "LPUSfE (" + ( GetFormIDString rScript ) + "):" + ( ASCIIToChar 3 ) + " " + ( rNPC.GetName ) + " (" + ( rNPC.GetFormIDString ) + ") is dead.%r" + ( ASCIIToChar 2 ) + "LPUSfE (" + ( GetFormIDString rScript ) + "):" + ( ASCIIToChar 3 ) + " NPC " + ( ToString lCount ) + " / " + ( ToString lNumber )
    			elseif ( rNPC.GetIsReference Player )
    				PrintD ( ASCIIToChar 2 ) + "LPUSfE (" + ( GetFormIDString rScript ) + "):" + ( ASCIIToChar 3 ) + " " + ( rNPC.GetName ) + " (" + ( rNPC.GetFormIDString ) + ") is the Player.%r" + ( ASCIIToChar 2 ) + "LPUSfE (" + ( GetFormIDString rScript ) + "):" + ( ASCIIToChar 3 ) + " NPC " + ( ToString lCount ) + " / " + ( ToString lNumber )
    			elseif ( rNPC.HasSpell LPUSfEAbMain )
    				PrintD ( ASCIIToChar 2 ) + "LPUSfE (" + ( GetFormIDString rScript ) + "):" + ( ASCIIToChar 3 ) + " " + ( rNPC.GetName ) + " (" + ( rNPC.GetFormIDString ) + ") already has the Unarmored Skill.%r" + ( ASCIIToChar 2 ) + "LPUSfE (" + ( GetFormIDString rScript ) + "):" + ( ASCIIToChar 3 ) + " NPC " + ( ToString lCount ) + " / " + ( ToString lNumber )
    			else
    				rNPC.AddSpell LPUSfEAbMain
    				PrintD ( ASCIIToChar 2 ) + "LPUSfE (" + ( GetFormIDString rScript ) + "):" + ( ASCIIToChar 3 ) + " Added Unarmored Skill to " + ( rNPC.GetName ) + " (" + ( rNPC.GetFormIDString ) + ").%r" + ( ASCIIToChar 2 ) + "LPUSfE (" + ( GetFormIDString rScript ) + "):" + ( ASCIIToChar 3 ) + " NPC " + ( ToString lCount ) + " / " + ( ToString lNumber )
    			endif
    		Loop
    		PrintD ( ASCIIToChar 2 ) + "LPUSfE (" + ( GetFormIDString rScript ) + "):" + ( ASCIIToChar 3 ) + " Cell " + ( GetName rCell ) + " (" + ( GetFormIDString rCell ) + ": %q" + ( GetEditorID rCell ) + "%q) tested.%r" + ( ASCIIToChar 2 ) + "LPUSfE (" + ( GetFormIDString rScript ) + "):" + ( ASCIIToChar 3 ) + " NPCs: " + ( ToString lNumber )
    	endif
    End
    
    Begin Menumode
    ;------------------------------------------------------------------------
    ; Conditions
    ;------------------------------------------------------------------------
    	if ( LPUSfEGlfVersion == 0 ) || ( LPUSfEGlbEnableNPC == 0 ) || ( LPUSfEQuInitialization.iShutDown )
    		Return
    	endif
    	if ( IsPlayerMovingIntoNewSpace ) || ( rCell != ( Player.GetParentCell ) )
    		set rCell to ( Player.GetParentCell )
    		set lNumber to -1
    	endif
    End

    Der Effekt der Eigenschaft wäre dann folgender:
    Code:
    scn aaarmorbrokenc
    
    short next
    short EquipDelay
    long objecthealth
    Begin ScriptEffectUpdate
    	if ( GetEquipped aamodiamelion ) && ( next == 0 )
    		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 ( getEquppedCurrentHealth 2 )
    			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
    			UnEquipItem aamodiamelion
    			EquipItem aamodiamelionbroken
    			setEquippedCurrentHealth objecthealth 2
    			RemoveItem aamodiamelion 1
    		endif
    	endif
    end

  9. #9
    Zitat Zitat
    Mäh, keine Lust mehr.
    Mäh, kann ich verstehen

    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

    PHP-Code:
    scn aavictimsofbroken


    long Count
    long Number
    float fQuestDelayTime
    ref victim
    ref Cell


    begin GameMode

    set fQuestDelayTime to 1
    if ( Cell != ( Player.GetParentCell ) )
            
    set Cell to Player.GetParentCell )
            
    set Number to -1
        
    endif
    if ( 
    Number != ( GetNumRefs 69 1 ) )
            
    set Number to GetNumRefs 69 1 )
            
    set Count to 0
            
    While ( Count Number )
                if ( 
    Count )
                    
    set victim to GetNextRef )
                else
                    
    set victim to GetFirstRef 69 1 )
                endif
                   
    set Count to Count +1
                   
    if victim.getEquippedObject 2 0
                        
    if getIsID aamodiamelion
                                victim
    .addSpell
                        
    elseif getIsID aamodiamelionbroken
                                victim
    .addSpell
                        
    endif
                   endif
             
    loop
    endif
    end 
    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)

  10. #10
    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.

    Code:
    scn aavictimsofbroken
    
    
    long Count
    long Number
    float fQuestDelayTime
    ref victim
    ref Object
    ref Cell
    
    
    begin GameMode
    
    set fQuestDelayTime to 1
    if ( Cell != ( Player.GetParentCell ) )
            set Cell to ( Player.GetParentCell )
            set Number to -1
    endif
    if ( Number != ( GetNumRefs 35 1 ) )
            set Number to ( GetNumRefs 35 1 )
            set Count to 0
            While ( Count <= Number )
                if ( Count )
                    set victim to ( GetNextRef )
                elseif ( Count == Number )
                    set victim to Player
                else
                    set victim to ( GetFirstRef 35 1 )
                endif
                   set Count to Count + 1
                   if Eval ( Object := ( victim.getEquippedObject 2 ) )
                        if Object == aamodiamelion || Object == aamodiamelionbroken
                                victim.addSpell <ID>
                        endif
                   endif
             loop
    endif
    end

  11. #11
    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


    PHP-Code:
    scn aavictimsofbroken


    long Count
    long Number
    float fQuestDelayTime
    ref victim
    ref Object
    ref Cell


    begin GameMode

    set fQuestDelayTime to 1
    if ( Cell != ( Player.GetParentCell ) )
            
    set Cell to Player.GetParentCell )
            
    set Number to -1
    endif
    if ( 
    Number != ( GetNumRefs 35 1 ) )
            
    set Number to GetNumRefs 35 1 )
            
    set Count to 0
            
    while ( Count <= Number )
                if ( 
    Count )
                    
    set victim to GetNextRef )
                elseif ( 
    Count == Number )
                    
    set victim to Player
                    message 
    "player hat object"
                
    else
                    
    set victim to GetFirstRef 35 1 )
                endif
                   
    set Count to Count 1
                   
    if Eval ( Object := ( victim.getEquippedObject 2 ) )
                        if 
    Object == aamodiamelion
                                victim
    .addSpell aamodiamelionbrokenSP
                        
    elseif Object == aamodiamelionbroken
                                victim
    .addSpell aamodiamelionhealthSP
                        
    endif
                   endif
             
    Loop
    endif
    end 
    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)

  12. #12
    ok habe es hinbekommen

Berechtigungen

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