Construction Set Skriptthread zum Construction Set

Weist nicht ob jemand schon das mal gefragt:? hat aber wie heißt der Script der dafür sorgt das der Spieler wenn er einen neuen Charakter macht im Kerker startet den ich wollte mal einen alternativ Start machen:-D




mfg Fat_Ed
 
Dies wird nicht über ein Script gesteuert.
Und zwar über die Oblivion.ini die Unter My Games Oblivion Liegt.
Im CS kannst du die Cell +Z/Y/X Achse nachgucken und dann in den ersten zeilen:
Code:
[General]
SStartingCell=

SStartingCellY=
SStartingCellX=
SStartingWorld=
....
Angeben

Mfg yves
 
  • Like
Reaktionen: Fat_Ed
Ich glaube, ich wurde übersehen, also stell ich meine Frage noch mal konkreter

Ich möchte eine Script machen, die es Ermöglicht, eine bestimmte Zauberrolle zu kopieren
Sie würde auf eine (Schreib)Feder gelegt
Sie hieße dann ungefähr:
Code:
scn Myscript

Short done

ref Scroll

onEquip player
[INDENT]message "Wählt eure Gewünschte Rolle"
[/INDENT][INDENT]set done to 1

[/INDENT]end

begin Menumode

[INDENT]if done == 1
[INDENT]set Scroll to ObjectChoseninMenu

set done to 0

player.additem Scroll 1
[/INDENT]endif
[/INDENT]end

Also, das ist jetzt Stark vereinfacht, erstens reicht es, wenn man eine Feder hat, man Braucht KEIN Pergament und Tinte, zweitens geht es so mit jedem Item, das ist aber wie gesagt nicht meine Frage, denn:

Wie heißt dieser Befehl "ObjectChoseninMenu" wirklich. Ein Befehl, der das Object wiedergibt, was im Inventar gewählt wurde. Gibt es den denn überhaupt. Danke

Bitte korrigiert keine Syntax oder Logikfehler in meiner Obigen Script, darum gehts nicht, das ist nur, damit man's besser Versteht
 
Den Befehl gibt es nicht.

Hier -> http://www.scharesoft.de/joomla/index.php?option=com_content&task=view&id=367&Itemid=73 <- kannst Du ganz wunderbar den Umgang mit Messagebox - Scripten erlernen, wodurch es Dir möglich sein wird, ein Script zu schreiben, das ein kleines Menu erscheinen lässt, in dem mehrere Auswahlmöglichkeiten bestehen um eine bestimmte Sache zu machen - zum Beispiel eine Spruchrolle ins Inventar des Spielers einfügen.

Änder einfach das Script im tutorial ab und passe es Deinen Wünschen an.

Übrigens gefällt mir der Gedanke zum Spruchrollenkopieren einen leeren Zettel zu benötigen.

Gruß,
Nyarlat Ho Tep

scn SchriftrollekopierenSCRIPT

short Button
short Pagecontroled

Begin OnEquip ;Starte bei Ausrüstung mit dem gegenstand auf dem ich liege

if Pagecontroled == 0 GetActionref == player ;Wenn Setienkontrolle nicht an ist und Spieler ist gleich mich benutzende Referenz
messagebox "Wollt Ihr die Schritrolle in Eurem Inventar kopieren?" "Ja" "nein" ;Gib eine Messagebox mit "Text" und "Button0" "und Button1"
set Pagecontroled to 1 ;und mach die Seitenkontrolle an
endif

Begin Gamemode ;Starte bei Spielstart und frage mich bei jeder Frame ab
if Pagecontroled == 1 ;Wenn Seitenkontrolle an ist
set Button to getButtonPressed ;Stelle Button gleich mit getButtonPressed
if button == 0 && Pagecontroled == 1 ;Wenn JA gewählt und Seitenkontrolle an
if player.getitemcount ScrollRestoreHealthTouch1Novice >= 1;wenn Spieler diese Rolle 1mal oder mehrmals hat
player.additem ScrollRestoreHealthTouch1Novice 1 ;dann gib Spieler noch so eine Rolle
messagebox "Ihr habt die Schriftrolle kopiert" ;und sage ihm bescheid
set Pagecontroled to 0 ;und mach die Seitenkontrolle aus.
else
;Andernfalls (von if pagecontrolled == 1)
messagebox "Ihr habt keine Schriftrolle bei Euch die Ihr kopieren könnt." ;Gib diesen Text aus
set Pagecontroled to 0 ;und mach die Seitenkontrolle aus.
endif
elseif button == 1 && Pagecontroled == 1 ; Wenn Seitenkontrolle an und Knopf 2 gedrückt wurde
return ;Mach gar nichts und schließe die Messagebox
set Pagecontroled to 0 ;und mach die Seitenkontrolle aus.
endif
endif
end

Legst Du dieses Script auf die Feder, wirst Du (wahrscheinlich, wenn ich nichts vergessen habe und ich keinen Fehler gemacht habe) Eine Box bekommen, die, wenn Du die im Script stehende Schriftrolle im Inventory hast, diese noch einmal ins Inventory bekommen. Das Script kannst Du noch dadurch erweitern, das Du den roten Text kopierst, DIREKT nach dem else einfügst und das else in ein elseif abänderst. Dann musst Du natürlich noch den Namen für die nächste Rolle im neu eingefügten Text abändern, damit die nächste Rolle abgefragt wird.

NACHTEIL:
Du wirst wahrscheinlich ziemlich komische Ergebnisse erzielen wenn Du mehrere Rollen im Inventory hast. Wie gesagt ist die auch nur ein Anstoß, ein Beispiel.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Unbekannter
Weil ich über deine Art ja nur bestimmte Rollen und nicht jede beliebige Kopieren kann, hab ich das mal so gemacht:
Code:
scn Toolsscrollscript

ref Scroll
short done
short button
begin OnEquip
    Toolsscrollcontainer1.removeallitems
        if done == 0
            messagebox "Wollt ihr eine Rolle Kopieren?","Ja","Nein"
            set done to 1
        endif
    end
begin Menumode
    if done == 1
        set button to getbuttonpressed
            if button == 0 && player.getitemcount Inkwell01 >= 1 && player.getitemcount BlankSheet >= 1
                set done to 2
            else
                set done to 0
                message "Ihr braucht Tinte und Pergament"
            endif
    endif

    if done == 2
        Toolsscrollcontainer1.activate
        message "Deponiert NUR eine Rolle"
        set done to 3
    endif
    end

begin Gamemode
    if done == 3
        set scroll to Toolsscrollcontainer1.getinventoryobject 0
            if scroll.getbookisscroll == 1
                player.additem Scroll 2
                player.removeitem Inkwell01 1
                player.removeitem BlankSheet 1
                set done to 0
            else
                message "Ihr habt keine Rolle deponiert"
                set done to 0
                Toolsscrollcontainer1.activate
            endif
    endif
end

Leider läuft es nicht und wenn man die Feder Aktiviert kommt die Meldung Ihr braucht Tinte und Pergament, auch wenn man beides hat

th for Help
 
Hm.

Ersetze mal
if button == 0 && player.getitemcount Inkwell01 >= 1 && player.getitemcount BlankSheet >= 1
set done to 2
else
set done to 0
message "Ihr braucht Tinte und Pergament"
endif
if button == 0
if player.getitemcount Inkwell01 >= 1 && player.getitemcount BlankSheet >= 1
set done to 2
else
set done to 0
message "Ihr braucht Tinte und Pergament"
endif
endif

Meine Vermutung (die nicht stimmen muss):
Im Script wird die Bedingung nur erfüllt solange button 1 gedrückt IST. Da ein Menumode Block in jeder frame durchlaufen wird, ist die Bedingung eine Frame nach dem drücken von button 0 nicht mehr erfüllt und die Ausgabe ist negativ.

Was ich geändert habe: Durch die Teilung der einen Bedingung in zwei nacheinander abgefragte sollte die Bedingung (Papier & Tinte) NACH dem drücken noch erfüllt sein, solange der Spieler sie im Inventory hat.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Unbekannter
Das drücken von Knöpfen in Messageboxen wird immer im GameMode abgefragt.

Das Equippen läuft erst, wenn man das Inventar schließt, also im GameMode. MenuMode brauchst du nicht.
 
Ich könnte einen Script gebrauchen, der sich erst dann aktiviert sobald man eine bestimmte Interior- oder Exteriorzelle betritt und den Player-Avatar per Zufallsprinzip nach Verstreichen einer gewissen Zeitspanne in eine von z.B. 5 Zellen teleportiert. Es kann auch ein Script sein, der nur mit dem Script Extender funktioniert.

Danke für eventuelle hilfreiche Antworten.
 
Du kannst mit GetInCell eine bestimmte Zelle abfragen.

Code:
scriptname ...

short zufalltele

begin GameMode
if (player.GetInCell [Cell-ID] == 1)
    set zufalltele to GetRandomPercent
endif

if (zufalltele <= 19)
    player.moveto [Ref-ID XMarker1]
elseif (zufalltele <= 39)
    player.moveto [Ref-ID XMarker2]
elseif (zufalltele <= 59)
    player.moveto [Ref-ID XMarker3]
elseif (zufalltele <= 79)
    player.moveto [Ref-ID XMarker4]
elseif (zufalltele <= 99)
    player.moveto [Ref-ID XMarker5]
endif
end

Das ist jetzt ohne Zeit, da hab ich gerade keine Zeit zu. Läuft mit einem timer.

Die Prozentwerte kannst du beliebig verschieben und erweitern (im Bereich 0-99) und natürlich kannst du noch weitere Zellen abfragen mit || (= oder).

"zufalltele" kannst du auch umbenennen.

Für Ref-ID XMarkerX setzt du jeweils die Ref-ID eines XMarkers ein. Dafür platzierst du einfach in jeder gewünschten Teleportzelle einen und weist die Ref-ID zu.

Das Script selber als Quest-Script (ohne OBSE).
 
Begleiter

Hallo!

Ich habe ein Script geschrieben, das einen Begleiter steuern soll.
Aus diesem liegt das Script, und er hat ein AI-Package mit Player verfolgen.

Code:
scn SotANFollowerScript


short buttonMain
short buttonMenu
short button

Begin OnActivate player

set button to -1
MessageBox "Was wollt ihr befehlen?", "Bewegung" "2" "Verhalten" "Kampfstil" "Beenden"
set buttonMain to GetButtonPressed

set buttonMenu to 0
if ( button == 0 )
set buttonMenu to 1
MessageBox "Was verlangt ihr von eurem treuen Gehilfen?", "Folgt mir" "Bleibt hier" "Vergießt Blut" "Seid vorsichtig" "Geht mir aus den Augen" "Beenden"

elseif (button == 1 )
set buttonMenu to 2
MessageBox "Wie soll ich mich verhalten?", "Gehen" "Rennen" "Schleichen" "Beenden"

elseif ( button == 2 )
set buttonMenu to 3
MessageBox "Womit soll ich an eurer Seite kämpfen?", "Klinge" "Bogen" "Magie" "Beenden"

endif

End


Begin Gamemode

set button to GetButtonPressed

if ( buttonMenu == 1)
 if ( button == 0 )
 SetActorValue Energy 75

 elseif ( button == 1 )
 SetActorValue Energy 0

 elseif (button == 2 )
 SetActorValue Aggression 100

 elseif ( button == 3 )
 SetAlert 1

 elseif ( button == 4 ) 
 movetomarker SotANFollowStartMarker

 endif
elseif ( buttonMenu == 2)
 if ( button == 0 )
 Message "Gehen"

 elseif ( button == 1 )
 Message "Rennen"

 elseif (button == 2 )
 Message "Schleichen"

 endif
elseif ( buttonMenu == 3)
 if ( button == 0 )
 Message "Kinge"

 elseif ( button == 1 )
 Message "Bogen"

 elseif (button == 2 )
 Message "Magie"

 endif
endif

end


short timerdead

Begin OnDeath

set timerdead to 5
set timerdead to (timerdead - GetSecondsPassed)

if timerdead == 4
PlayMagicShaderVisuals #EFFECT# 
endif

if timerdead == 3
Resurrect 1
endif

if timerdead == 1
StopMagicShaderVisuals #EFFECT#
endif

if timerdead == 0
Message "Der Begleiter hat sich geheilt und steht nun wieder zu euren Diensten"
set timerdead to 6
endif

End

Wie kann ich die fehlenden Dinge realisieren? Ich das Script sonst korrekt?

mfg Tach810i
 
---Beitrag bitte löschen---
 
Zuletzt bearbeitet von einem Moderator:
Ich habe jetzt beiden GEändert, so dass meine Script so aussieht:

Code:
scn Toolsscrollscript

ref Scroll
short done
short button
begin OnEquip
    Toolsscrollcontainer1.removeallitems
        if done == 0
            messagebox "Wollt ihr eine Rolle Kopieren?","Ja","Nein"
            set done to 1
        endif
    end
begin Gamemode
    if done == 1
        set button to getbuttonpressed
            if button == 0
                 if player.getitemcount Inkwell01 >= 1 && player.getitemcount
BlankSheet >= 1 [B][I](Eigentlich eine Zeile)[/I][/B]
                    set done to 2
                else
                set done to 0
                message "Ihr braucht Tinte und Pergament"
            endif
    
    elseif button == 1
            set done to 0
        endif
    endif

    if done == 2
        Toolsscrollcontainer1.activate
        message "Deponiert NUR eine Rolle" 10
        set done to 3
    endif

    if done == 3
        set scroll to Toolsscrollcontainer1.getinventoryobject 0
            if scroll.getbookisscroll == 1
                player.additem Scroll 2
                player.removeitem Inkwell01 1
                player.removeitem BlankSheet 1
                set done to 0
            else
                message "Ihr habt keine Rolle deponiert"
                set done to 0
                Toolsscrollcontainer1.activate
            endif
    endif
end


Also, wenn man jetzt die Feder Aktiviert und die BEnötigten Materialien hat, bekommt man zwar die Nachricht "Deponiert NUR eine Rolle", aber der Container öffnte nicht und man erhält gleich die Nachricht "Ihr habt keine Rolle deponiert"

Was kann ich tun???

thx for help
 
Eine Vermutung:

Gamemode Blöcke laufen, wie gesagt, in jeder Frame durch. Das bedeutet für Dein Script:

Wenn Du JA oder NEIN drückst, wird die Variabel done auf 1 gesetzt.

Hat der Spieler nun Tinte und Papier dabei (huch, wo ist die Feder abgeblieben?), wird die Variabel done auf 2 gesetzt.

Nun läuft der gm.-Block aber weiter durch und checkt im nächsten if Block ob done gleich 2 ist, worauf sie ja eben gesetzt wurde.

Dann, sobald done auf 2 ist, wird aber die Variabel automatisch auf 3 gesetzt, weshalb der output IMMER der des letzten if Blocks ist.

Noch etwas:

Toolsscrollcontainer1.getinventoryobject 0

Was bezweckt dieser Teil der Zeile? getinventoryobject gibt es nicht als Funktion oder verstehe ich hier irgendwas falsch? Und was ist Toolsscrollcontainer? Der Referenzname eines containers? Oder ein Platzhalter, nur für dieses Beispielscript?
 
Das Toolsscrollcontainer ist die ReferenzID eines Containers, der in einer Leeren Zelle ist:

Da ich den Script nur so machen konnte, erkläre ich noch mal, was ich machen will:

Die Messagebox floppt auf und wenn man ja drückt und alles hat, was man braucht, soll sich der Container öffnen.

Später wird eine eine Ref-Variabele auf den Inhalt des Containers gesetzt, GetInvetoryObject ist ein-ObseCommand:
http://cs.elderscrolls.com/constwiki/index.php/GetInventoryObject

Wenn man dann eine Rolle deponiert hat, wird sie Kopiert, sonst soll sich der Container nochmal öffnen, damit man evtl Falsch eingelegte Objekte wiedernehmen kann


Das was du unten Beschrieben hast:
Eine Vermutung:

Gamemode Blöcke laufen, wie gesagt, in jeder Frame durch. Das bedeutet für Dein Script:

Wenn Du JA oder NEIN drückst, wird die Variabel done auf 1 gesetzt.

Hat der Spieler nun Tinte und Papier dabei (huch, wo ist die Feder abgeblieben?), wird die Variabel done auf 2 gesetzt.

Nun läuft der gm.-Block aber weiter durch und checkt im nächsten if Block ob done gleich 2 ist, worauf sie ja eben gesetzt wurde.

Dann, sobald done auf 2 ist, wird aber die Variabel automatisch auf 3 gesetzt, weshalb der output IMMER der des letzten if Blocks ist.
will ich ja gerade bezwecken, so wird einfach nur garantiert, dass jeder Block pro Ja-Click nur einmal ausgeführt wird. Mein Hauptproblem ist im Moment, dass sich der Container nicht öffnet:
Kann das daran liegen


  • Das der Container keinen Mesh hat
  • oder das der Container in einer anderen Cell ist, als der Player
  • oder ist das der Falsche Befehl
thx for help
 
Hi,
ich würde auch noch ein Script benötigen. Wenn der Player eine Leiche findet soll ein Questbucheintrag ausgelöst werden.
Danke