Construction Set Skriptthread zum Construction Set

@Der Dunkelfürst
Dieses Gerücht ist vollkommener Quatsch, sows gibt es im Vanilla Oblivion nicht.

@Thalon Moonk
Tut mir leid, ich kann dir nicht helfen, das ist mir schon wieder ne Nummer zu groß.
 
Bitte mein Script prüfen

Hi Leute

Ich habe folgendes Script geschrieben.

Es soll die Begleitdauer in Tagen hochzählen.
Es soll alle vier Tage 1 Syphatiepunkt ausgeben.

Funktioniert das so?

PHP:
Scriptname KurtKommtMitQuestScript

short StartGameDay
short PointTimer
short KurtBegleitdauer

begin GameMode

;###################################################################
;## PointTimer hochzählen
;###################################################################

if ( KurtRef.KurtFolgtSpieler == 1 )
if ( KurtRef.GetInSameCell Player )

if ( GameDaysPassed >= ( StartGameDay +4 ))
set PointTimer to PointTimer +1

endif
endif
endif

;###################################################################
;## Begleitdauer hochzählen
;###################################################################

if ( KurtRef.KurtFolgtSpieler == 1 )
if ( KurtRef.GetInSameCell Player )

set KurtBegleitdauer to ( GameDaysPassed - StartGameDay )

endif
endif

end GameMode
 
Hi,

ich weis ja nicht ob meine Frage hier nicht beantwortet werden kann oder ob es einfach übersehen wurde :D

http://www.scharesoft.de/joomla/forum/showpost.php?p=446271&postcount=2010

Ich brauch hier Hilfe. Da ich nicht verstehe was da falsch sein soll. Es müsste eingenlich funzen.


Bis denn Thalon


Ich finde es unfreundlich überhauptnicht zu reagieren. Deshalb mal ein Post, auch wenn ich dir nicht helfen kann.

Ich habe mir dein Script angesehen, und versteh überhauptnicht was es bewirken soll. Soviel zu meinem Können. :oops:. Da ich selber gerade erst mit Scripten anfange, kann ich dir nur einmal so einen Gedanken einwerfen.

Ist die Grundvoraussetzung beim Scripten nicht eine Vorgabe? Also WENN (if) DANN (set)?

Vielleicht liegt es ja daran.
 
Du musst die IF Befehle hintereinander hängen, sonst sind sie sinnlos. Zum Inhalt kann ich nichts sagen, aber du musst die IF Befehle so verwenden:

Scriptname KurtKommtMitQuestScript

short StartGameDay
short PointTimer
short KurtBegleitdauer

Begin GameMode

;###################
;## PointTimer hochzählen
;###################

if (KurtRef.KurtFolgtSpieler == 1)&&(KurtRef.GetInSameCell Player)&&(GameDaysPassed >= (StartGameDay +4))

set PointTimer to PointTimer +1

endif

;####################
;## Begleitdauer hochzählen
;####################

if (KurtRef.KurtFolgtSpieler == 1)&&(KurtRef.GetInSameCell Player)
set KurtBegleitdauer to (GameDaysPassed - StartGameDay)
endif

End GameMode

Ob es an sich funktioniert bezweifle ich. Ich verstehe auch nicht so ganz den Sinn des Scripts aber das ist deine Sache ;)
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Eddy Kaschinski
Es soll einfach nur eine Begleitdauer hochzählen. Also wie lange eine Person mit mir Zusammen ist.

Je länger, desto besser. Also alle 4 Tage einen Sympathiepunkt geben.

An diese Sympathiepunkte werden später dann noch bestimmte Situationen/QuestStages hängen. Aber erst einmal benötige ich einen funktionierenden Timer, der auch diese Punkte auswirft.
 
Zuletzt bearbeitet:
Ist die Grundvoraussetzung beim Scripten nicht eine Vorgabe? Also WENN (if) DANN (set)?

Es ist keine Grundvorraussetzung, aber es ist in den meisten Fällen sehr sinnvoll ;)

@ Thalon Mook

Du willst ja prüfen ob der Gegenstand verzaubert ist oder nicht. Das heißt ja schonmal, dass du einen IF Befehl verwenden musst.
Ich glaube ja, dass du einen bestimmte Slot abfragen willst. Du müsstest nun für jeden Slot eine eigene Abfrage machen ob er verzaubert ist oder nicht.

Ich weiß natürlich nicht ob man überhaupt die jeweiligen Slots abfragen kann oder nicht. Das müsstest du erstmal prüfen.

So, nun solltest du weiterarbeiten können :)
 
@ Eddy Kaschinski: schöner Ansatz, so geht das aber leider nicht. Nenn mir mal eine genaue Kondition, wann der Begleiter folgt. Steht er von Spielbeginn an hinter einem oder muss man ihn erst anreden? Diese Information brauche ich.

@ Thalon Mook: Der Script sieht total professionell aus, jedoch geht das so nicht. Bei deinem Script "weiß" das Spiel ja gar nicht, welches Objekt er auf einer Verzauberung abfragen soll. Schwert, Rüstung, Beinschienen?

Wenn du etwas genauer sagen könntest, welches Item oder auf welchem Slot, könnte man es evtl. herausfinden.

MfG Gildur
 
  • Like
Reaktionen: Eddy Kaschinski
@Gildur

Hi, super. Dann gebe ich dir einmal die Infos.

Ich nehme einen Gegenstand. (Ein Item, welches ich nicht benutzen kann. Z.B. eine Kristallkugel.)

Wenn ich dann auf den Gegenstand in meinem Inventar klicke, beginnt das Quest, also NPC folgt.

Das funktioniert alles schon super. Nun soll von diesem Zeitpunkt an der Timer laufen, bzw die Tage der Begleitung hochgezählt werden.

Nur wenn der NPC folgt und in der gleichen Cell wie der Player ist, alle 4 Tage einen Sypathiepunkt auswerfen.

Vielen Dank für deine Hilfe.
 
Dann beginnt eine Quest? Das klingt schon mal super. Erspart mir extra Erklärungen. :lol:

Also der folgende Script wird als Quest-script abgespeichert und auf die Quest gelegt.
Code:
scn Scriptname

short StartDay

If ( [QuestID].GetStage [HöheDerStage] ) && ( StartDay == 0 )
set StartDay to GameDay
Endif

If ( GameDay == StartDay + 4 )
If ( [BegleiterREF].GetInSameCell player )
[BegleiterREF].ModDisposition 1
Endif
set StartDay to GameDay
Endif
Das ist der Script.
 
  • Like
Reaktionen: Eddy Kaschinski
@ Gildur

Das sieht ja schon sehr gut aus, ist aber nicht ganz was ich wollte. Wenn du dir mein (Mißglücktes) Script einmal ansiehst, wollte ich folgendes.

Einen "Sypathietimer", der alle 4 Tage Begleitdauer einen Punkt auswirft.
(Hier werden dann später Queststages drangehängt. Also if Sypathiepunkt xy SetStage xy) Es soll nichts mit dem ModDisposition, also mit der GameSympathie, oder besser Laune im Spiel mir gegenüber zu tun haben.

Zum zweiten benötige ich einen ganz normalen Zähler, der die Begleitdauer hochzählt. (Auch hier werden später QuestStages dranhängen. Also du bist nun 36 Tage mit Kurt zusammen, und er geht dir auf den Sack ;) oder ähnlich.)

Ich dachte immer, man macht sowas mit GameDaysPassed? Aber "Viel lernen ich noch muss."
 
Achso. Also sollen die Sympathiepunkte einfach in einer Variable gespeichert werden? Und das andere... jetzt verstehe ich.
Code:
scn Scriptname

short StartDay
short SptPoints
short PassedDays
short SubDays

If ( [QuestID].GetStage [HöheDerStage] ) && ( StartDay == 0 )
set StartDay to GameDay
set SubDays to GameDay
Endif

If ( PassedDays < GameDay - SubDay )
set PassedDays to PassedDays + 1
Endif

If ( GameDay == StartDay + 4 )
If ( [BegleiterREF].GetInSameCell player )
set SptPoints to SptPoints + 1
Endif
set StartDay to GameDay
Endif
 
  • Like
Reaktionen: Eddy Kaschinski
Also ich hab ja hier nicht das ganze Script gepostet sondern nur mal schemenhaft den Teil der relevant ist. Deshalb hab ich ja auch dazu geschrieben das die Var 'slot' hochgezählt wird.

Ich schreibs nochmal so das es alleine laufen würde.

Code:
scn CheckItems

ref item
ref ench
ref Heinz
short slot
set Heinz to IrgendEinNPC

Begin GameMode
Label 1
set slot to ( slot + 1 )
set item to Heinz.GetEquippedObject slot
set ench to Heinz.GetEnchantment item

if ench
   Message "Ist verzaubert"
else 
   Message "Ist nicht verzaubert"
endif
if slot < 17
  goto 1
endif
end

Das Problem ist einfach das in diesem Fall das Item immer verzaubert ist. Auch wenn ich GetEnchantmentType verwende bekomm ich keinen Wert heraus.

Ich hoffe das ich das nun verständlich formuliert habe :D

Bis denn Thalon
 
Hi Leute,

ich hab ein Problem mit dem Befehl 'GetEnchantment' und 'GetEnchantmentType'

Ich bekomm bei beiden keien Wert raus.

Hier mal mein Script:

[blub]

Weis jemand was ich hier falsch mache ich Verwende OBSE14

Bis denn Thalon

Da ich annehme, dass du das ganze in einem Label-GoTo-Loop machst bist du wahrscheinlich in den Apple-Bug gelaufen. ;)
Aber selbst ohne den würde dein Script nicht funktionieren, da GetEnchantmentType afaik das Enchantment als Paramter benötigt.
Das mit GetEnchantment geht nicht, da GetEquippedObject eine ObjectID ausgibt, du sie aber als RefID verwendest. ;)

Versuch mal folgendes:
Code:
scn EnchantmentCheckScript

short EnchantmentType
short Slot
ref Object
ref Enchantment
ref NPCRef

Begin Gamemode
 if ( IsReference NPCRef )          ;benötigt OBSE v0015 (oder höher), kann zu Not auch weggelassen werden.
  if ( NPCRef.IsActor ) && ( NPCRef.GetIsCreature == 0 )
   SaveIP
   set Object to Apple        ;Apple-Bug, erinnert ihr euch?
   set Object to NPCRef.GetEquippedObject slot
   if ( IsFormValid Object )    ;benötigt OBSE v0015 (oder höher), zur Not sollte ein überprüfen nach != 0 && != Apple ausreichen.
    set Enchantment to Apple
    set Enchantment to GetEnchantment Object
    if ( IsFormValid Enchantment )        ;gleiches wie vorhin. ;)
     set EnchantmentType to GetEnchantmentType Enchantment
     PrintToConsole "NPCRef: %n (%i)%rObject: %n (%i)%rEnchantment: %n (%i)%rEnchantmentType: %.0f%rSlot: %.0f", NPCRef, NPCRef, Object, Object, Enchantment, Enchantment, EnchantmentType, Slot
    else
     PrintToConsole "NPCRef: %n (%i)%rObject: %n (%i)%rSlot: %.0f%rNicht verzaubert.", NPCRef, NPCRef, Object, Object, Slot
    endif
   else
    PrintToConsole "%n (%i) hat kein Object mit Slot %.0f ausgerüstet.", NPCRef, NPCRef
   endif
   if ( Slot <= 20 )
    set Slot to ( Slot + 1 )
    RestoreIP
   else
    set Slot to 0
    set NPCRef to 0
   endif
  endif
 endif
End

Edit: Pff, jetzt doch als ganzes Script. Moment, ich editiere.
Edit²: So, fertig.
Sobalt NPCRef z.B. von einem anderen Script/per Konsole auf eine Referenz eines NPCs gesetzt wird startet das Script. Nach durchlaufen der Slot hört es auf.
Einzige Problem könnte sein, dass die Konsole nicht genügend Zeilen für alle Slots anzeigt. ;)
 
Zuletzt bearbeitet:
Thx für die kompetente Hilfe :good:

Ich dachte mir schon sowas das es an der Ref liegt. Hatte ein anderes Script das die Ref aus dem Inventory holt da hat es gefunzt.

Ist aber ganz schön umständlich nur um rauszubekommen ob das Item verzaubert ist :D

Hmm und mein OBSE auf 15 updaten muss ich ja auch noch.

Naja werd es heute Abend mal testen.

Bis denn Thalon
 
Zuletzt bearbeitet:
Hallo Leute,

kann mir einer das Konzept erklären, daß hinter den ganzen Nth-Befehlen bei OBSE steckt.
Ich hab schon einige KB's an Skripts geschrieben, aber das hab ich bisher nicht geblickt.

Was bedeutet diese "Nth"-Abkürzung eigentlich. Eventuell wäre das schon die Erklärung.:?:

Es grüßt euch alle die Yolanda
 
Das Nth bedeutet, dass das nte "Ding" (Zauber, Ref, etc.) aus ein Liste die alle mit dem Befehl erhalten werden können ausgegeben wird.
Zu beachten ist dabei, dass immer mit 0 zu zählen begonnen wird.


Code:
Player.GetNthSpell 0
Gibt zum Beispiel den ersten Spruch im Spellbook des Spielers aus. Ironischerweise ist das der alphabetisch an der letzten Stelle stehende und somit auch der (im normalen Spellbok) am weitesten unten angezeigt wird.


Code:
Player.[URL="http://cs.elderscrolls.com/constwiki/index.php/GetNthActiveEffectCaster"]GetNthActiveEffectCaster[/URL] 4
Gibt die Referenz aus, die den 5. aktivem Effekt auf dem Spieler gezaubert hat.


Schau dir doch die Wiki-Seite für den jeweiligen Befehl an, da steht eigentlich recht gut beschrieben, was der Befehl macht.
Der Index gibt dann immer die Position an, nach welcher in der "Liste" gesucht werden soll. Das ist eigentlich der ganze Trick bei den Nth-Funktionen, bis auf den Index unterscheiden sie sich nicht von den anderen.
 
  • Like
Reaktionen: Yolanda
@ Low Post
So ich bin am verzweifeln.

Ich hab jetzt das Script mal ausprobiert. Gut ich hab es in mein vorhandenes Script integriert. Das Problem ist nun das alle Items als Verzaubert angezeigt werden. Nur die leeren Slots sind unverzaubert.

Irgend was passt hier noch nicht.

ich hab auch einfach mal das Script 1 zu 1 gegen meins ausgetauscht. Aber wenn ich das dann starte hab ich nen CTD.

Hab halt nach dem Begin GameMode noch folgendes eingetragen das der NPC als Ref dient.

set NPCRef to MeinNpcRef

Also das Script wir über ein Token gestartet auf dem es liegt. Der NPC bekommt es ins Inverntar und dann startet es.

Muss ich das Script anders starten oder übergeben ??

Ich kann Dir auch mal das ganze Script schicken vlt bin ich ja nur blind und hab was übersehen.

Bis denn Thalon
 
hi leute! kann mir jemand helfen, wie ich es anstellt, dass ein npc immer eine bestimmte entfernung von ca 10-20 schritt hält?