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

Thema: Scripting: Wenn in der Nähe, dann... && Timer

  1. #1

    Scripting: Wenn in der Nähe, dann... && Timer

    Aloa,

    ich mal wieder mit zwei Fragen:

    1. Ist es möglich, einer Kreatur ein Script zu geben, womit sie jedem beeinflußt, der z.B. näher als 25 Meter kommt?
    2. Wie genau baue ich einen Timer ein, sodaß z.B. im Rahmen eines Script Effects nach 15 Sekunden etwas bestimmtes passiert?

  2. #2
    1. Das ist durchaus möglich. Die Funktion dazu heißt GetDistance, allerdings solltest Du die Abfragen dazu etwas eingrenzen, damit nicht in jedem Frame abgefragt wird, wie nahe der Spieler ist. Das könnte sonst auf die Performance gehen.

    2. Bei einem ScriptEffect kannst Du ausnutzen, dass der Block ScriptEffectFinish am Ende des Zaubers liegt. Das heißt Du gibst einem Zauber die Wirkungsdauer 15 Sekunden, dann läuft der Block ScriptEffectFinish erst nach 15 Sekunden und auch nur einmal.
    Ansonsten heißt die Funktion, die Du suchst, GetSecondsPassed.

  3. #3
    Zitat Zitat von Rung Beitrag anzeigen
    1. Das ist durchaus möglich. Die Funktion dazu heißt GetDistance, allerdings solltest Du die Abfragen dazu etwas eingrenzen, damit nicht in jedem Frame abgefragt wird, wie nahe der Spieler ist. Das könnte sonst auf die Performance gehen.
    Wie genau kann ich das eingrenzen? Sorry für die dumme Frage, aber diesbezüglich bin ich etwas überfragt .

    Zitat Zitat
    2. Bei einem ScriptEffect kannst Du ausnutzen, dass der Block ScriptEffectFinish am Ende des Zaubers liegt. Das heißt Du gibst einem Zauber die Wirkungsdauer 15 Sekunden, dann läuft der Block ScriptEffectFinish erst nach 15 Sekunden und auch nur einmal.
    Das geht so leider nicht. Grund: Der Script Effect dauert 60 Sekunden - aber nach 15 Sekunden soll sich für den Spieler etwas ändern.
    Zitat Zitat
    Ansonsten heißt die Funktion, die Du suchst, GetSecondsPassed.
    Danke!

  4. #4
    1. Hm, wie genau man das eingrenzt, kommt darauf an, was Du damit machen willst. Aber verkehrt sollte diese Zeile am Anfang Deines Scripts nicht sein:
    PHP-Code:
    if ( GetDistance Player 2500 )
        return
    else
        ;
    Code
    endif 
    2. Ich weiß nicht, wie GetSecondsPassed innerhalb eines ScriptEffects reagiert. Ich würde hier auf den ScriptEffectUpdate-Block zurückgreifen. Du müsstest allerdings testen, ob dieser Block wirklich jede Sekunde durchläuft.
    PHP-Code:
    Scriptname MeinMagieEffektScript

    short Start
    short done

    Begin ScriptEffectStart

    set Start to 0

    End

    Begin ScriptEffectUpdate

    if ( Start == 15 )
        if ( 
    done == )
            
    set done to 1
            
    ;Code
        
    endif
    elseif ( 
    Start 15 )
        
    set Start to Start )
    endif

    End

    Begin ScriptEffectFinish

    End 

  5. #5
    Zitat Zitat von Rung Beitrag anzeigen
    Ich weiß nicht, wie GetSecondsPassed innerhalb eines ScriptEffects reagiert.
    Soweit ich sagen kann, genauso wie in einem GameMode-Block. Es gibt auch noch dieses ScriptEffectElapsedSeconds, was ich aber noch nie benutzt habe, da Timer mit GetSecondsPassed in einem Skripteffekt ebenso gut zu realisieren sind.

    Zitat Zitat
    Du müsstest allerdings testen, ob dieser Block wirklich jede Sekunde durchläuft.
    Der Update-Block wird in jedem Frame einmal ausgeführt. Das Skriptbeispiel würde demnach nach 15 Frames den Effekt auslösen, nicht nach 15 sek. Ich würde folgenden Code vorschlagen:

    PHP-Code:
    scn MeinMagieEffektScript

    short Done
    float Timer

    begin ScriptEffectStart

        set Timer to 15

    end

    begin ScriptEffectUpdate

        
    if Done == 0
            set Timer to Timer 
    GetSecondsPassed
            
    if Timer 0
                set Done to 1

                
    Code

            
    endif
        endif

    end 

  6. #6
    Danke Brausebart.
    Wenn der Update-Block einmal jeden Frame durchläuft, funktioniert mein Script natürlich nicht. Und dass GetSecondsPassed in ScriptEffekten ebenso arbeitet, ist eine wertvolle Information.

  7. #7
    Super, danke, hat alles funktioniert!

    Huzzah, und wieder ein neuer Zauberspruch für mein Magieplugin. Jetzt nur noch ein paar für Alteration und ein Meteoritenhagel (oder so) für Destruction und ich bin glücklich ^^.

Berechtigungen

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