Construction Set Skriptthread zum Construction Set

Also,der NPC ist in einem Interior. Ich betrette es und möchte mit ihm reden. Anschließend verlasse ich das Interior und betrette ein neues. Wenn ich das neue Interior betrette soll der NPC disablen, so meinte ich das.

grüße bertie
 
"Begin onHit" funktioniert nur auf NPCs und Kreaturen, also nicht auf Items. Du könntest aber eventuell versuchen, einen NPC zu erstellen, mit der Mesh des Buches, auf dem dann dieses Skript liegt...
Funktioniert der script dann mit allen npcs/creatures? Da es etwas allgemeines sein soll und nicht nur bei einem bestimmten npc. Außerdem soll der player den gegenstand noch ver zaubern können.
 
Das Skript muss auf eine Kreatur bzw. einen NPC.
Ich würde es allerdings noch soweit abändern:
Code:
scn name

Begin onHitWith todesdolch
 if player.getItemEquipped todesdolch == 1 && getDead == 0
  kill
 endif
end
Das Skript musst du auf jeden NPC legen, der den gewünschten Effekt erzielen soll. Wenn du dir die Mühe nicht machen willst jeden NPC damit zu belegen (auch um möglichen Inkompatibilitäten vorzubeugen), solltest du auf die bewährte Alternative mit einem Skripteffekt zurückgreifen. Dann kann man den Dolch zwar nicht verzaubern, aber wer so eine Waffe hat braucht eigentlich auch keine Verzauberung...
 
  • Like
Reaktionen: death-lord
Da ich etwas ungeduldig bin frage ich einfach nochmal :oops:

Code:
scn Scriptbeispiel

begin OnActivate

if Player getincell Beispielzelle 
NPCRef.disable
endif 
end

Was ist an diesem Script falsch? Ich schreib mal ganz genau auf was passieren sollte:

Der Player spricht den NPC, der soll mit dem Spieler einen Dialog führen. Der Player verlässt das Interior und betritt ein neues. Sobald der Spieler das neue Interior betretten hat soll der NPC disablen. Mein Problem ist jetzt, das sich der NPC gar nicht ansprechen lässt. (Der Script soll erst nach dem betretten des zweiten Interiors wirksam werden)

grüße bertie
 
Ich hab mir das Tutorial angeschaut und der NPC disabeld nun. Mein Problem hat sich damit erledit. Ich danke trotzdem allen, die mir geholfen haben.

grüße bertie
 
Zuletzt bearbeitet:
Hi..


Ich benötige zwei Scripte,
das erste soll einen Stab belegen. Wenn der Spieler den Stab nicht besitzt, sollen 10 existierende Kreaturen ihn angreifen und/oder ganz normale Gegner werden, die ein bisschen umhertaumeln^^, wenn er ihn jedoch ausgerüstet hat, sollen sie ihm folgen und mit dem Spieler kämpfen.

beim Zweiten Script geht es darum, dass ein anderer Stab solche lila-mystik-schüsse schießt, welche bei Aufprall eine Kreatur erzeugen. Wenn man ihn zweimal benutzt, sollen auch zwei Kreaturen erscheinen, maximal sollte man aber nur 6 gleichzeitig zaubern können.

da ich mit Scripts mal so gar nich klarkomme, brauche ich wiedereinmal dringend eure Hilfe, ich danke euch im vorraus
 
Hi..


Ich benötige zwei Scripte,
das erste soll einen Stab belegen. Wenn der Spieler den Stab nicht besitzt, sollen 10 existierende Kreaturen ihn angreifen und/oder ganz normale Gegner werden, die ein bisschen umhertaumeln^^, wenn er ihn jedoch ausgerüstet hat, sollen sie ihm folgen und mit dem Spieler kämpfen.
Ich gehe davon aus, dass nicht besitzt nicht ausgerüstet heißt ;)

Zuerst brauchst du für die Kreaturen eine Fraktion, die mit der PlayerFraktion auf Hass steht. Nennen wir sie CreatureFaction.

Außerdembrauchst du eine Global CreatureFollow mit Wert 0 und ein Follow Package mit der Bedingung CreatureFollow == 1.
Code:
scn Wasauchimmer

Begin GameMode
If Player.GetEquiped ObjectBaseId == 1
SetFactionReaction CreatureFaction PlayerFaction + 200
Set CreatureFollow to 1
elseif GetFactionReaction CreatureFaction PlayerFaction < 0 && Player.GetEquiped ObjectBaseId == 1
Creature1.StartCombat Player
....
Creature10.StartCombat Player
elseif GetFaction Reaction CreatureFaction PlayerFaction > 0 && Player.GetEquiped ObjectBaseId != 1
SetFactionReaction CreatureFaction PlayerFaction - 200
return
endif
end

beim Zweiten Script geht es darum, dass ein anderer Stab solche lila-mystik-schüsse schießt, welche bei Aufprall eine Kreatur erzeugen. Wenn man ihn zweimal benutzt, sollen auch zwei Kreaturen erscheinen, maximal sollte man aber nur 6 gleichzeitig zaubern können.

da ich mit Scripts mal so gar nich klarkomme, brauche ich wiedereinmal dringend eure Hilfe, ich danke euch im vorraus

Einen Skript zu schreiben, der einfach nur beim Zaubern(bzw. schießen) eine Kreatur beim Spieler erzeugt ist nicht schwer, diese aber am Aufschlagspunkt zu spawnen, ist verdammt schwer. Du müsstest sagen, was du willst.
 
Ich habe im Laufe der nächsten Quest Stufe mein Schmiede Script von oben um 2 schmiedbare Materialien erweitert.

Nun sieht er so aus
Code:
If Step == 0
    Return
ElseIf Step == -10 && ( Player.GetStage SmithApprentice >= 25 )
    Set Step to 10
    MessageBox "Welches Rohmaterial möchtet Ihr verarbeiten?","Eisen","Feineisen",[COLOR=Blue]"Stahl"[/COLOR],[COLOR=Red]"Feinstahl"[/COLOR],"zurück"
Set Button to -1 
ElseIf Step == 10
    Set Button to GetButtonPressed
    If Button == 0 && ( Player.GetItemCount OreNugget <= 3 )
        MessageBox "Ihr besitzt nicht genug Rohmaterial!"
    Set Step to 0
    EndIf
    If Button == 0 && ( Player.GetItemCount OreNugget >= 4 )
    Player.RemoveItem OreNugget 4
    Player.AddItem WeapIronDaggerSA 1
    Set Step to 0

ElseIf Button == 1 && ( Player.GetItemCount OreNugget <= 1 ) && ( Player.GetItemCount Gem0GoldNugget <= 1 )
    MessageBox "Ihr besitzt nicht genug Rohmaterial!"
    Set Step to 0
EndIf
If Button == 1 && ( Player.GetItemCount OreNugget >= 2 ) && ( Player.GetItemCount Gem0GoldNugget >= 2 )
    Player.RemoveItem OreNugget 2
    Player.RemoveItem Gem0GoldNugget 2
    Player.AddItem WeapIronDaggerFineSA 1
    Set Step to 0
[COLOR=Blue]
ElseIf Button == 2 && ( Player.GetItemCount OreNugget <= 1 ) && ( Player.GetItemCount Gem0SilverNugget <= 1 )
    MessageBox "Ihr besitzt nicht genug Rohmaterial!"
    Set Step to 0
EndIf
If Button == 2 && ( Player.GetItemCount OreNugget >= 2 ) && ( Player.GetItemCount Gem0SilverNugget >= 2 )
    Player.RemoveItem OreNugget 2
    Player.RemoveItem Gem0SilverNugget 2
    Player.AddItem WeapSteelDaggerSA 1
    Set Step to 0[/COLOR]

[COLOR=Red]ElseIf Button == 3 && ( Player.GetItemCount OreNugget <= 1 ) && ( Player.GetItemCount Gem0SilverNugget == 0 ) && ( Player.GetItemCount Gem0GoldNugget == 0 )
    MessageBox "Ihr besitzt nicht genug Rohmaterial!"
    Set Step to 0
EndIf
If Button == 3 && ( Player.GetItemCount OreNugget >=2 ) && ( Player.GetItemCount Gem0SilverNugget >= 1 ) && ( Player.GetItemCount Gem0GoldNugget >= 1 )
    Player.RemoveItem OreNugget 2
    Player.RemoveItem Gem0SilverNugget 1
    Player.RemoveItem Gem0GoldNugget 1
    Player.AddItem WeapSteelDaggerFineSA 1
    Set Step to 0[/COLOR]

ElseIf Button == 4
    Return
EndIf
EndIf

ElseIf Step == -1
    Set Button to GetButtonPressed
    If Button == 0
        Set Step to -10
    ElseIf Button == 1
        Set Step to 0
    EndIf
EndIf
End

Eisen und Feineisen funktionieren nach wie vor. Nur was hab ich bei Button 2 und 3 also (Stahl und Feinstahl) falsch gemacht?

Hat ma einer eine Idee? Wäre nett, danke. Hab hier einen totalen Durchhänger und komme nicht weiter.
 
Da gibts schon Mods dafür, schau dir z.B.: Shipping in Cyrodiil von Fellan an oder Jason1s Pilotable Pirateship(da gibts auch eine fliegende Version)!
Kannst die Autoren ja um Erlaubnis für die Scripts fragen!
 
Zuletzt bearbeitet:
ObjectHealth

2. Problem:

Ich will jetzt mehrere selbsterstelle Waffen mit einem SetObjectHealth Script (OBSE) belegen. Nur weiß ich nicht genau wie ich den anwenden soll. Der Script soll dafür sorgen, dass diese Waffen von vornherein kaputt sind ohne Conditions oder MessageBox o.ä. ohne SchnickSchnack. Nach Möglichkeit soll nur 1 Script für alle Waffen benutzt werden können. Geht das?

Hab mir das in etwa mit "Begin GameMode" usw. gedacht.

Kann mir einer helfen.
 
Ich hätte da auch noch ne Frage:


Wie bekomme ich es hin, dass ein Object (bzw. eine Tür) Bei dem ich "Anfangs verborgen" Aktiviert habe, erscheint wenn zb. der player in der Diebes Gilde Rang 2 hat???
 
Ich hätte da auch noch ne Frage:


Wie bekomme ich es hin, dass ein Object (bzw. eine Tür) Bei dem ich "Anfangs verborgen" Aktiviert habe, erscheint wenn zb. der player in der Diebes Gilde Rang 2 hat???

Code:
scn <Name>

Short Doonce (<- soll nur 1x gemacht werden)

Begin GameMode


If ( Player.GetFactionRank <Gilde> 2 ) && ( Doonce == 0 )
     <TürRef>.enable
     Set Doonce to 1
Endif
End
Die Tür muss dazu ein Ref Object sein, ein Haken an Initially Disabled und Persitant Refference.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: n108freestyle
2. Problem:

Ich will jetzt mehrere selbsterstelle Waffen mit einem SetObjectHealth Script (OBSE) belegen. Nur weiß ich nicht genau wie ich den anwenden soll. Der Script soll dafür sorgen, dass diese Waffen von vornherein kaputt sind ohne Conditions oder MessageBox o.ä. ohne SchnickSchnack. Nach Möglichkeit soll nur 1 Script für alle Waffen benutzt werden können. Geht das?

Hab mir das in etwa mit "Begin GameMode" usw. gedacht.

Kann mir einer helfen.

Zum Beispiel so:
Code:
scn name

short doonce
long BaseHealth1
long BaseHealth2

Begin GameMode
 if doonce == 0
  set BaseHealth1 to getObjectHealth
  setObjectHealth ((getObjectHealth * 20) + 0.1)
  set BaseHealth2 to getObjectHealth
  set doonce to 1
 elseif doonce == 1
  if getCurrentHealth / BaseHealth2 * 100 > 1
   setObjectHealth BaseHealth1
   set doonce to 2
  endif
 endif
end

Habs jetzt nur indirekt hinbekommen, weil man afaik nicht den aktuellen Health-Wert verändern kann. Und getestet hab ichs auch nicht.
 
Sagt mal wie kann man den Lebenspunkteschaden bei Schildtreffern veringern. Und den stattdessen auf die Ausdauer legen. Das Lustige ist wenn man mit der Waffe Blockt verliert man keine Lebenspunkte.

Fände es viel logischer, wenn man bei Schildtreffern Ausdauer verliert, anstatt Lebenspunkte.

Nur wie macht man das?
 
Ich habe ein Proble mit diesem Script: Er funktioniert nur in Teilen

scn LiteOverhaulSpeedMode

ref Currentweapon
short Active
short ON

begin Gamemode

set currentweapon to player.getequippedobject 16

if ON == 0
message "Speedmode Möglich"
set ON to 1
endif

;activate
if iskeypressed 72 == 1 && Active == 0 && currentweapon != 0
message "Speedmode Aktiviert"
currentweapon.modweaponspeed 5.0
set Active to 1
if currentweapon.getweight <= 10.0
player.addspell LiteOverhaulPowerCost1
elseif currentweapon.getweight <= 20.0
player.addspell LiteOverhaulPowerCost2
elseif currentweapon.getweight <= 30.0
player.addspell LiteOverhaulPowerCost3
elseif currentweapon.getweight <= 40.0
player.addspell LiteOverhaulPowerCost4
elseif currentweapon.getweight <= 50.0
player.addspell LiteOverhaulPowerCost5
endif
endif

;reset

if active == 1 && currentweapon != player.getequippedobject 16
message "Speedmode beendet"
currentweapon.modweaponspeed -5.0
set Active to 0
player.dispel LiteOverhaulPowerCost1
player.dispel LiteOverhaulPowerCost2
player.dispel LiteOverhaulPowerCost3
player.dispel LiteOverhaulPowerCost4
player.dispel LiteOverhaulPowerCost5
endif
;unactivate
if active == 1 && iskeypressed 72 == 0 && Currentweapon == player.getequippedobject 16
message "Speedmode beendet"
currentweapon.modweaponspeed -5.0
set active to 0
set currentweapon to 0
player.dispel LiteOverhaulPowerCost1
player.dispel LiteOverhaulPowerCost2
player.dispel LiteOverhaulPowerCost3
player.dispel LiteOverhaulPowerCost4
player.dispel LiteOverhaulPowerCost5
endif
end

Was der Script machen soll:

Durch gedrückt halten einer Taste wird die Geschwindigkeit der Waffe, die man Ausgerüstet hat, drastisch erhöht. Jedoch bekommt man einen Effekt, der Die Ausdauer schwächt, der von Gewicht der Waffe abhängig ist.
Wenn man die Waffe wechselt, wird das ganze beendet, sowie wenn man die Taste loslässt

Was nicht funktioniert

1. Die Waffe wird weder schneller, noch langsamer

2. Ich erhalte immer des ersten Effekt, obwohl die Waffe mehr als 10 wiegt.

3. Wenn ich die Waffen wechsele, läuft das ganze weiter, wenn ich den Key loslasse beendet es jedoch, das soll ja so sein

Was kann ich tun?

thx
 
Zum Beispiel so:
Code:
scn name

short doonce
long BaseHealth1
long BaseHealth2

Begin GameMode
 if doonce == 0
  set BaseHealth1 to getObjectHealth
  [COLOR=Red]setObjectHealth ((getObjectHealth * 20) + 0.1)[/COLOR]   [COLOR=Red]<- Missing Parameter Value[/COLOR]
  set BaseHealth2 to getObjectHealth
  set doonce to 1
 elseif doonce == 1
  if getCurrentHealth / BaseHealth2 * 100 > 1
   setObjectHealth BaseHealth1
   set doonce to 2
  endif
 endif
end
Habs jetzt nur indirekt hinbekommen, weil man afaik nicht den aktuellen Health-Wert verändern kann. Und getestet hab ichs auch nicht.

Kam eine Fehlermeldung -> s.o.

Kann mir auch einer zu folgendem Script helfen?

Ich habe im Laufe der nächsten Quest Stufe mein Schmiede Script von oben um 2 schmiedbare Materialien erweitert.

Nun sieht er so aus
Code:
If Step == 0
    Return
ElseIf Step == -10 && ( Player.GetStage SmithApprentice >= 25 )
    Set Step to 10
    MessageBox "Welches Rohmaterial möchtet Ihr verarbeiten?","Eisen","Feineisen",[COLOR=Blue]"Stahl"[/COLOR],[COLOR=Red]"Feinstahl"[/COLOR],"zurück"
Set Button to -1 
ElseIf Step == 10
    Set Button to GetButtonPressed
    If Button == 0 && ( Player.GetItemCount OreNugget <= 3 )
        MessageBox "Ihr besitzt nicht genug Rohmaterial!"
    Set Step to 0
    EndIf
    If Button == 0 && ( Player.GetItemCount OreNugget >= 4 )
    Player.RemoveItem OreNugget 4
    Player.AddItem WeapIronDaggerSA 1
    Set Step to 0

ElseIf Button == 1 && ( Player.GetItemCount OreNugget <= 1 ) && ( Player.GetItemCount Gem0GoldNugget <= 1 )
    MessageBox "Ihr besitzt nicht genug Rohmaterial!"
    Set Step to 0
EndIf
If Button == 1 && ( Player.GetItemCount OreNugget >= 2 ) && ( Player.GetItemCount Gem0GoldNugget >= 2 )
    Player.RemoveItem OreNugget 2
    Player.RemoveItem Gem0GoldNugget 2
    Player.AddItem WeapIronDaggerFineSA 1
    Set Step to 0
[COLOR=Blue]
ElseIf Button == 2 && ( Player.GetItemCount OreNugget <= 1 ) && ( Player.GetItemCount Gem0SilverNugget <= 1 )
    MessageBox "Ihr besitzt nicht genug Rohmaterial!"
    Set Step to 0
EndIf
If Button == 2 && ( Player.GetItemCount OreNugget >= 2 ) && ( Player.GetItemCount Gem0SilverNugget >= 2 )
    Player.RemoveItem OreNugget 2
    Player.RemoveItem Gem0SilverNugget 2
    Player.AddItem WeapSteelDaggerSA 1
    Set Step to 0[/COLOR]

[COLOR=Red]ElseIf Button == 3 && ( Player.GetItemCount OreNugget <= 1 ) && ( Player.GetItemCount Gem0SilverNugget == 0 ) && ( Player.GetItemCount Gem0GoldNugget == 0 )
    MessageBox "Ihr besitzt nicht genug Rohmaterial!"
    Set Step to 0
EndIf
If Button == 3 && ( Player.GetItemCount OreNugget >=2 ) && ( Player.GetItemCount Gem0SilverNugget >= 1 ) && ( Player.GetItemCount Gem0GoldNugget >= 1 )
    Player.RemoveItem OreNugget 2
    Player.RemoveItem Gem0SilverNugget 1
    Player.RemoveItem Gem0GoldNugget 1
    Player.AddItem WeapSteelDaggerFineSA 1
    Set Step to 0[/COLOR]

ElseIf Button == 4
    Return
EndIf
EndIf

ElseIf Step == -1
    Set Button to GetButtonPressed
    If Button == 0
        Set Step to -10
    ElseIf Button == 1
        Set Step to 0
    EndIf
EndIf
End

Eisen und Feineisen funktionieren nach wie vor. Nur was hab ich bei Button 2 und 3 also (Stahl und Feinstahl) falsch gemacht? Die MessageBox erscheint zwar mit den Auswahlmöglichkeiten, aber wenn ich Stahl oder Feinstahl auswähle passiert nichts. Selbst die Message von wegen "kein Rohmaterial" kommt nicht.
 
Zuletzt bearbeitet:
@Jolina:
Versuch mal das hier:
Code:
If Step == 0
    Return
ElseIf Step == -10 && ( Player.GetStage SmithApprentice >= 25 )
    Set Step to 10
    MessageBox "Welches Rohmaterial möchtet Ihr verarbeiten?","Eisen","Feineisen","Stahl","Feinstahl","zurück"
Set Button to -1

ElseIf Step == 10
    Set Button to GetButtonPressed
    	If Button == 0 && ( Player.GetItemCount OreNugget <= 3 )
        	MessageBox "Ihr besitzt nicht genug Rohmaterial!"
    		Set Step to 0

    	ElseIf Button == 0 && ( Player.GetItemCount OreNugget >= 4 )
    		Player.RemoveItem OreNugget 4
    		Player.AddItem WeapIronDaggerSA 1
    		Set Step to 0

	ElseIf Button == 1 && ( Player.GetItemCount OreNugget <= 1 ) && ( Player.GetItemCount Gem0GoldNugget <= 1 )
    		MessageBox "Ihr besitzt nicht genug Rohmaterial!"
    		Set Step to 0
	ElseIf Button == 1 && ( Player.GetItemCount OreNugget >= 2 ) && ( Player.GetItemCount Gem0GoldNugget >= 2 )
    		Player.RemoveItem OreNugget 2
    		Player.RemoveItem Gem0GoldNugget 2
    		Player.AddItem WeapIronDaggerFineSA 1
    		Set Step to 0

	ElseIf Button == 2 && ( Player.GetItemCount OreNugget <= 1 ) && ( Player.GetItemCount Gem0SilverNugget <= 1 )
    		MessageBox "Ihr besitzt nicht genug Rohmaterial!"
    		Set Step to 0

	ElseIf Button == 2 && ( Player.GetItemCount OreNugget >= 2 ) && ( Player.GetItemCount Gem0SilverNugget >= 2 )
    		Player.RemoveItem OreNugget 2
    		Player.RemoveItem Gem0SilverNugget 2
    		Player.AddItem WeapSteelDaggerSA 1
    		Set Step to 0

	ElseIf Button == 3 && ( Player.GetItemCount OreNugget <= 1 ) && ( Player.GetItemCount Gem0SilverNugget == 0 ) && ( Player.GetItemCount Gem0GoldNugget == 0 )
    		MessageBox "Ihr besitzt nicht genug Rohmaterial!"
    		Set Step to 0

	ElseIf Button == 3 && ( Player.GetItemCount OreNugget >=2 ) && ( Player.GetItemCount Gem0SilverNugget >= 1 ) && ( Player.GetItemCount Gem0GoldNugget >= 1 )
    		Player.RemoveItem OreNugget 2
    		Player.RemoveItem Gem0SilverNugget 1
    		Player.RemoveItem Gem0GoldNugget 1
   		Player.AddItem WeapSteelDaggerFineSA 1
    		Set Step to 0

	ElseIf Button == 4
    		Return
	EndIf


ElseIf Step == -1
    Set Button to GetButtonPressed
    If Button == 0
        Set Step to -10
    ElseIf Button == 1
        Set Step to 0
    EndIf
EndIf
End

Oblivion steht nicht darauf, immer If und Elseif abwechselnd zu haben. Wenn es so nicht geht, versuch mal für jeden Button (beide 0er, 1er...etc) block Einen If-ElseIf-Endif.