Construction Set Der Scriptthread

Hallo

Könnt ihr ein Script schreiben der für Pflanzen ist?
Ich will das die Pflanzen wie bei Olivion geerntet werden, es gibt zwar ein Plugin für so was aber bei den Plugin ist es so das die Pflanze dann verschwindet.

Also ich stelle mir das ungefähr so vor:
Wen man die Pflanze ernten tut bekommt man in einer Nachricht wo drin steht "Ihr habt etwas Nützliches gefunden" oder "Ihr habt Nichts nützliches gefunden" wie bei Oblivion halt :)

Ist so was eventuell möglich?
Oder vielleicht so ähnlich?
 
Könnt ihr ein Script schreiben der für Pflanzen ist?
Ich will das die Pflanzen wie bei Olivion geerntet werden, es gibt zwar ein Plugin für so was aber bei den Plugin ist es so das die Pflanze dann verschwindet.

Dazu gibt es sogar ein ganzes PI Advanced Herbalism

In dem findest du auch sicher das passende Script. Das sollte schenller gehen, als wenn ich es dir lange erkläre ;)
 
  • Like
Reaktionen: Houdini
Danke, mall schauen was sich da machen lässt:)

EDIT:

So ich hab mir denn Mod jetzt geholt aber wie schon gesagt ist es der Mod wo die Pflanze dann leider verschwindet.
Hier ist ein Script was müsste ich dort ändern, dass die Pflanze dann nicht Verschwindet wen ich sie Ernte?
Fett markieren reicht schon dann Weiß ich was ich bei jeden anderen Script raus löschen müsste :)


Begin jjs_herb_russula011

short pickday
short quantity
short Schance
short Dchance
short Tchance
short pickchance
short getseed
short goodpick
short success
short endme
short addherb
short skillcheck
short ishere

float increase

If (MenuMode==1)
return
endif

if ( getdisabled == 1 )
if ( pickday < dayspassed )
enable
else
return
endif
endif

if ( OnActivate == 1 )
set ishere to 2
else
return
endif

if ( ishere == 2 )
set Schance to ( Herbalism * 2 )
set Dchance to ( ( Herbalism - 38 ) * 3 / 4 )
set Tchance to ( ( Herbalism - 60 ) * 6 / 10 )
set pickchance to ( Random, 101 )
set getseed to ( Herbalism * 4 / 10 )
if ( Schance > pickchance )
set goodpick to 1
set success to 1
endif
if ( success == 1 )
if ( Dchance > pickchance )
set success to 2
endif
endif
if ( success == 2 )
if ( Tchance > pickchance )
set success to 3
endif
endif
if ( success == 0 )
MessageBox "Du beschädigst die Pflanze und findest nichts Brauchbares."
set endme to 1
endif
set ishere to 1
endif

if ( goodpick == 1 )
if ( Herbalism < 100 )
set increase to ( ( 50 / Herbalism ) / 100 )
set Herbalism to ( Herbalism + increase )
set skillcheck to HerbalismStored + 1
if ( skillcheck <= Herbalism )
set HerbalismStored to Herbalism
PlaySound, "skillraise"
Messagebox "Eure Fertigkeit Pflanzenkunde hat sich auf %.0f erhöht!", Herbalism
endif
endif
if ( pickchance > 10 )
set quantity to 1
endif
set quantity to ( quantity * success )
if ( quantity == 0 )
Messagebox "Ihr findet nichts an dieser Pflanze, daß es wert wäre, mitgenommen zu werden."
set endme to 1
endif
if ( quantity > 0 )
set addherb to 1
endif
set goodpick to 0
endif

if ( addherb == 1 )
if ( GetSecundaPhase == 4 )
if ( getseed > pickchance )
player->additem, "shan_seed_russula", 1
Messagebox "Du sammelst eine Leuchtender Russula Spore von dieser Pflanze!"
set quantity to quantity - 2
set getseed to -10
endif
endif
if ( quantity > 1 )
Messagebox "Du sammelst %.0f Leuchtender Russula." quantity
endif
if ( quantity == 1 )
Messagebox "Du sammelst einen Leuchtender Russula."
endif
while ( quantity > 0 )
player->additem, "ingred_russula_01", 1
set quantity to quantity - 1
endwhile
playsound "item misc up"
set endme to 1
set addherb to 0
endif

if ( endme == 1 )
set success to 0
set pickday to dayspassed
set pickday to ( pickday + 29 )
disable
set endme to 0
endif

end
 
Zuletzt bearbeitet:
Du entfernst alle enable und disable aus dem Skript. Allerdings musst du dann noch eine Abfrage einbauen, wann du ernten kannst und zwar in diesen Block:

Code:
if ( OnActivate == 1 )
  if ( pickday < dayspassed )
    set ishere to 2
  endif
else
  return
endif

Wenn du keine Pflanzenkundefertigkeit haben willst, kannst du das ganze Skript natürlich entsprechend kürzer machen. Oder alternativ das Ganze auf Alchemie auslagern.
 
  • Like
Reaktionen: Houdini
Hallo

Ich brauche 2 Scripts einen für eine ganze Innen Zelle und ein für NPCs

Der Script für Innen Zellen soll denn Spieler vergiften, ich hab eine Höhle gemacht die mit Giftsporen verseucht ist und der Script würde es Realistisch gestalten.

Der NPCs Script soll dafür sorgen dass ein NPC von einer bestimmten Gilde\Faction alles und jeden angreift, also auch Monster und andere NPCs die sich in seiner nähe befinden
 
Der Script für Innen Zellen soll denn Spieler vergiften, ich hab eine Höhle gemacht die mit Giftsporen verseucht ist und der Script würde es Realistisch gestalten.

Das Script legst du auf einen (neuen) Activator, dem du als Mesh "EditorMarker.nif" zuweist. Das ist dieser rote Lautsprecher, der nur im CS zu sehen ist. Den platzierst du dann irgendwo in der Zelle.

Dann kommt es darauf an, wie das Gift wirken soll. Nur solange man sich in der Zelle befindet oder solange bis man sich heilt? Wenn letzteres, wie kann man sich heilen: Trank oder Quest?

Ich probiere mal alle Varianten zu erklären.

Gift wirkt nur in der Zelle:

Code:
begin my_gifthoehle1_script

float timer

if ( MenuMode == 1 )
  return
endif

if ( GetJournalIndex "my_gifthoehle_quest" == 100 )  ;hier kannst du eine Abfangbedingung einbauen, wann das Script nicht mehrwirken soll
  return
endif

if ( CellChanged == 1 )
  MessageBox "Ihr seid in einer vergidteten Höhle."
endif

set timer to timer + GetSecondsPassed
if ( timer >= 0.2 )
  Player->ModCurrentHealth -1    ;also 5 Schaden die Sekunde
  set timer to 0
endif

end

So für ein nachwirkendes Script benötigst du ein globales Script. Das wird von dem lokalen Script auf dem Activator ausgelöst und steuert entweder den Schaden direkt oder wiederrum eine Fähigkeit, die den Schaden zufügt. Über das Entdecken von Zaubereffekten auf dem Spieler kann man so das Gift mit einem Trank kurieren.

Der NPCs Script soll dafür sorgen dass ein NPC von einer bestimmten Gilde\Faction alles und jeden angreift, also auch Monster und andere NPCs die sich in seiner nähe befinden

Das geht allgemein nicht. Entweder du lässt den NPC alle umgebenden NPCs explizit angreifen

StartCombat NPC1
StartCombat NPC2

...

Ich weiß allerdings nicht, ob das fiunktioniert, weil ein NPC grundsätzlich nur gegen ein Ziel kämpfen kann.

Eine andere Möglichkeit wäre, alle umgebenden NPCs auf die Guard-Klasse einzustellen und den einzelnen NPC den Spieler angreifen zu lassen. Die Guards würden ihn dann verteitigen.
 
  • Like
Reaktionen: Houdini
Ah danke, also bei den Gift Script soll es nur in einer Zelle wirken. tut mir Leid wen ich es weniger beschrieben habe, aber der Script ist schon der richtige danke nochmal :)

Schade das das mit denn NPC nicht so ganz geht.
 
Ich habe mir mal denn Script angeschaut der bei Socucius Ergalla
ist. Also das ist ja der Typ ganz am Anfang wo man seine Klasse Sternzeichen etc einstellen kann.

Vielleicht ist es Möglich diesen Script auf ein Activator zu legen
so das man seine Klasse gegen eine kleine Gebühr wider ändern kann/könnte.
Wäre so was möglich, wen man zb: 10.000 Draken zahlt und dann dafür seine Klasse,Rasse und sein Sternzeichen wider ändern könnte?

Am ende der Auswahl bekommt man ja alles angezeigt was man eingestellt hat, so das man seinen Namen usw. wider ändern/Korrigieren kann
Vielleicht kann man an Hand von ein neuen Script das wider aufrufen
so das man seine Klasse usw. beliebig ändern kann ohne das man von neuen anfangen muss?


Das hier ist der Script vom Anfang wo man sehen kann wie alles abläuft
begin CharGenClassNPC

;This is on the guy who creates your class.


short state ;tracks state of questioning. -1 when over.
Short NoLore ;blocks discussion of general topics
float timer

if ( menumode == 1)
return
endif

if ( state == -1 )
if ( OnActivate == 1 )
Activate
endif
endif

if ( GetHealth == 0 )
return
endif

;return if you've talked to captain and don't have papers
if ( "CharGen Captain".state == -1 )
SetHello 30
return
endif

;greeting
if ( State == 0 )

"CharGen StatsSheet"->Disable ;hide the actual scroll itself

;disable all the boat stuff outside and the guys
"CharGen Boat"->Disable
"CharGen Boat Guard 1"->disable
"CharGen Boat Guard 2"->disable
"CharGen Dock Guard"->disable
"CharGen_cabindoor"->disable
"CharGen_chest_02_empty"->disable
"CharGen_crate_01"->disable
"CharGen_crate_01_empty"->disable
"CharGen_crate_01_misc01"->disable
"CharGen_crate_02"->disable
"CharGen_lantern_03_sway"->disable
"CharGen_ship_trapdoor"->disable
"CharGen_barrel_01"->disable
"CharGen_barrel_02"->disable
"CharGenbarrel_01_drinks"->disable
"CharGen_plank"->disable

if ( GetDistance, Player < 100 )
if ( State == 0 )
Say "vo\Misc\CharGen Class1.wav", "Ah ja, wir haben Euch erwartet. Wir müssen Eure Daten erfassen, bevor wir Euch offiziell entlassen können. Es gibt einige Möglichkeiten, aus denen Ihr wählen könnt."
DisablePlayerControls
set state to 10
endif
endif

if ( OnActivate == 1 ) ;in case they activate him instead of moving in
if ( State == 0 )
Say "vo\Misc\CharGen Class1.wav", "Ah ja, wir haben Euch erwartet. Wir müssen Eure Daten erfassen, bevor wir Euch offiziell entlassen können. Es gibt einige Möglichkeiten, aus denen Ihr wählen könnt."
DisablePlayerControls
set state to 10
endif
endif

elseif ( State == 10 )
if ( SayDone == 1 )
EnableClassMenu
set State to 12
endif

elseif ( State == 12 )
if ( SayDone == 1 )

set timer to timer + GetSecondsPassed

if ( timer > 1 )
Say "vo\Misc\CharGen Birth.wav", "Sehr gut. Nun, in dem Brief steht, dass Ihr unter einem bestimmten Zeichen geboren wurdet. Unter welchem Zeichen genau?"
set State to 14
set timer to 0
endif

endif

elseif ( State == 14 )
if ( SayDone == 1 )
EnableBirthMenu
set State to 15
endif

elseif ( State == 15 )
if ( SayDone == 1 )

set timer to timer + GetSecondsPassed

if ( timer > 1 )
Say "vo\Misc\CharGen Class2.wav", "Interessant. Nun, bevor ich diese Papiere abstemple, stellt sicher, dass die Informationen auch korrekt sind."
set State to 16
set timer to 0
endif

endif

;show statreview menu
elseif ( State == 16 )
if ( SayDone == 1 )
EnableStatReviewMenu
set State to 17
endif

;show popup messages
elseif ( State == 17 )

if ( SayDone == 1 )

set timer to timer + GetSecondsPassed

if ( timer > 1 )
set timer to 0
EnableStatsMenu
EnablePlayerControls
StartScript RaceCheck ;sets the PCRace global flag for dialogue and such
MessageBox "Euch steht jetzt ein Charaktermenü zur Verfügung, in dem Informationen über den Charakter zu finden sind." "Ok"
set state to 18
endif

endif

elseif ( State == 18 )
if ( Xbox == 1 )
MessageBox "Mit der B-Taste können die Menüs geöffnet bzw. geschlossen werden." "Ok"
else
MessageBox "Mit der rechten Maustaste können die Menüs geöffnet bzw. geschlossen werden." "Ok"
endif

set state to 20

;show papers
elseif ( State == 20 )

Say "vo\Misc\CharGen Class3.wav", "Zeigt Eure Papiere dem Hauptmann, wenn Ihr geht und das Entlassungsgeld bekommt."
"CharGen StatsSheet"->Enable ;make the actual scroll show itself
set State to 30

;show how to pick them up
elseif ( State == 30 )

if ( SayDone == 1 )

set timer to timer + GetSecondsPassed

if ( timer > 1 )
set timer to 0

if ( Xbox == 1 )
MessageBox "Mit der A-Taste könnt Ihr Eure Papiere lesen, wenn Ihr sie anseht. Wählt dann 'Nehmen', um sie aufzunehmen." "Ok"
else
MessageBox "Mit ^ActionActivate könnt Ihr Eure Papiere lesen, wenn Ihr sie anseht. Wählt dann 'Nehmen', um sie aufzunehmen." "Ok"
endif

EnablePlayerViewSwitch
EnableVanityMode

set State to -1

endif

endif

elseif ( State == -1 )

if ( CharGenState != -1 )

;this may need to be here for flow
if ( OnActivate == 1 )
Activate
endif

if ( GetDistance, Player < 180 )

if ( Player->GetItemCount "CharGen StatsSheet" == 0 ) ;does not have sheet yet

if ( SayDone == 1)

set timer to timer + GetSecondsPassed

if ( timer > 5 )
set timer to 0
say, "vo\Misc\CharGen Class4.wav", "Nehmt Eure Papiere und geht zu Hauptmann Gravius."
endif

endif

endif

endif

endif

endif

end CharGenClassNPC
 
ja, das geht aber bei diesen Befehlen muss man aufpassen. In der falschen Reihenfolge darf man die nicht benutzen sonst kanns einen Crash geben. Manche darf man überhaupt nur ein einzige mal nehmen. Ich kann dir leider nicht sagen was die richtige Reihenfolge ist, aber hier findest du ein Mod das schon mal eine Richtige kennt.
Ansonsten kannst du dich auf langwierigen trial-and-error einstellen (was man eigentlich immer hat wenn man etwas zum allersten mal macht)

EDIT: Noch eins gefunden: Klick
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Houdini
Danke, Gut das es schon ein PI gibt wo so was dabei ist.

Ich hab noch eine frage zu denn Gift Script:
Was muss ich dort ändern da mit kein Tagebuch Eintrag kommt?
Neben bei ist mir ein Denkfehler unterlaufen, in der Höhle soll es ja noch Kreaturen geben die gegen das Gift Immun sind, aber da der Script nicht auf Spells ausgelegt ist würden ja die Kreaturen auch daran sterben oder betrifft das dann nur denn Spieler?
begin my_gifthoehle1_script

float timer

if ( MenuMode == 1 )
return
endif

if ( GetJournalIndex "my_gifthoehle_quest" == 100 ) ;hier kannst du eine Abfangbedingung einbauen, wann das Script nicht mehrwirken soll
return
endif

if ( CellChanged == 1 )
MessageBox "Ihr seid in einer vergidteten Höhle."
endif

set timer to timer + GetSecondsPassed
if ( timer >= 0.2 )
Player->ModCurrentHealth -1 ;also 5 Schaden die Sekunde
set timer to 0
endif

end


Ich hab da noch ein Script der das selbe macht aber bei denn hier wirkt es nur wen man sich den Activator nähert. Leider funktioniert er nicht.

Begin Gift_wolke

if ( GetDistance Player < 25 )
player -> addspell "giftwolke_spell1"
else
player -> removespell "giftwolke_spell1"
endif

end
 
Ich hab noch eine frage zu denn Gift Script:
Was muss ich dort ändern da mit kein Tagebuch Eintrag kommt?
Neben bei ist mir ein Denkfehler unterlaufen, in der Höhle soll es ja noch Kreaturen geben die gegen das Gift Immun sind, aber da der Script nicht auf Spells ausgelegt ist würden ja die Kreaturen auch daran sterben oder betrifft das dann nur denn Spieler?

Das betrifft nur den Spieler.

Ich hab da noch ein Script der das selbe macht aber bei denn hier wirkt es nur wen man sich den Activator nähert. Leider funktioniert er nicht.

Begin Gift_wolke

if ( GetDistance Player < 25 )
player -> addspell "giftwolke_spell1"
else
player -> removespell "giftwolke_spell1"
endif

end

Kein Wunder, der Abstand 25 in Editoreinheiten entspricht etwa der Größe des Spielerkopfes. Du kommst einfach nicht nahe genug an den Activator heran. Eine sinnvolle Größe wäre zum Beispiel 1024 (mittelgroßer Raum).
 
  • Like
Reaktionen: Houdini
Da kann ich ja dann lange rumspielen ohne Erfolg.
Ich dachte mit 24 wird wie bei denn zauber der Radius gemeint.
Danke du hast mir sehr geholfen :)
 
Da kann ich ja dann lange rumspielen ohne Erfolg.
Ich dachte mit 24 wird wie bei denn zauber der Radius gemeint.
Danke du hast mir sehr geholfen :)

Natürlich ist damit der Radius gemeint, er wird nur in einer anderen Einheit gemessen :p

Laut MSfD entsprechen 21,5 Editoreinheiten einem Fuß (der Ingame-Einheit), wenn es dir für die Umrechung hilft ;)
 
Also ich hab jetzt Radius 2500 eingestellt und getestet.
Leider Funktioniert der Script nicht.
Es kommt auch keine Fehlermeldung des wegen kann ich nicht sagen wo ran es liegt, Gibt es noch ein alternativen Script?
 
Ja, zum Beispiel das Script, das ich vor 5 Beiträgen gepostet habe :p

Code:
begin my_gifthoehle1_script

float timer

if ( MenuMode == 1 )
  return
endif

if ( CellChanged == 1 )
  MessageBox "Ihr seid in einer vergidteten Höhle."
endif

set timer to timer + GetSecondsPassed
if ( timer >= 0.2 )
  Player->ModCurrentHealth -1    ;also 5 Schaden die Sekunde
  set timer to 0
endif

end

Ansonsten ist es immer sehr hilfreich, wenn du eine Fehlermeldung auch hinschreibst, dann kann man dir normalerweise die Ursache sagen...

Deine Version würde ich wie folgt umfunktionieren:

Code:
Begin Gift_wolke

short doonce

if ( MenuMode == 1 )
  return
endif

if ( doonce == 0 )
  if ( GetDistance Player < 2500 )
    player->addspell "giftwolke_spell1"     ;Leerzeichen entfernt!
    set doonce to 1
  endif
else
    if ( GetDistance Player >= 2500 )
    player->removespell "giftwolke_spell1"      ;Leerzeichen entfernt!
    set doonce to 0
  endif
endif

end
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Houdini
Also das mit denn Gift ist jetzt schon mal fertig.
Ich hab noch einige nützliche Scripts gefunden.
und zwar denn von dem Forever Bogen der Script sorgt dafür das Sich der Köcher am rücken immer anpasst dazu ob man denn Bogen in der Hand hält oder am Rücken hat.
Ich möchte machen das man denn Bogen erst ab ein bestimmten Level tragen kann.
Beide Scripte habe ich schon.
Wen ich mir die anderen Scripte anschaue dann denke ich wen ich 2 Scripte zusammen fügen will muss ich nur aus ein End zu einen endif machen oder?
 
ganz sicher nicht, du musst sachen innerhalb von Dingen wie OnPCEquip/OnActivate zusammenfassen, da von denen nur ein Block ausgeührt wird
End steht wie immer genau einmal an Ende und am Anfang Begin.
Poste doch einfach die Scripts.
 
Zuletzt bearbeitet:
Ich kenne mich mit Scripts zwar nicht aus aber ich weiß das mit end ein script beendet wird.
Ich will die 2 Scripts zusammen fügen:
Begin 5ruestung_block_L5

if (OnActivate == 1)
if (GetLevel < 5 )
MessageBox "Ihr seid nicht würdig, diese Ausrüstung zu tragen."
endif
endif

end
mit denn hier

begin drachenbogen_A_AirForge_sheathe

Short DoOnce

If ( player->getitemcount "drachenbogen" ==0 )
if ( player->getitemcount "1Elipsen" >=1 )
player->removeitem "1Elipsen",1
endif
if ( player->getitemcount "2elipsen" >=1 )
Player->removeitem "2elipsen", 1
endif
return
endif


If ( Player -> HasItemEquipped "drachenbogen" )
If ( Player -> GetWeaponDrawn )
If ( DoOnce == 0 )
player->removeitem "1Elipsen",1
player->additem "2elipsen", 1
player-> equip "2elipsen", 1
set DoOnce to 1
endif
elseif ( DoOnce == 1 )
player-> removeitem "2elipsen", 1
player->additem "1Elipsen", 1
player->equip "1Elipsen",1
set DoOnce to 0
endif
endif
endif

Float timer
Short OnPCEquip
Short arrowCount

If ( MenuMode == 1 )
Return
Endif

If ( OnPCEquip == 0 )
return
endif

If (timer < .5)
Set timer to (timer + GetSecondsPassed)
return
else
Set timer to 0
Endif

Set arrowCount to ( player -> GetItemCount, "drachenpfeil" )

If ( OnPCEquip == 1 )

If ( arrowCount <= 0 )
if ( player->getmagicka >= 8 )
player->additem "drachenpfeil" 15
player->Equip, "drachenpfeil" 15
player->modcurrentmagicka -8
endif
else
if ( player -> HasItemEquipped "drachenpfeil" )
return
endif
player->Equip, "drachenpfeil" 15
endif

endif

End