Construction Set Skriptthread zum Construction Set

Ja hängt aber größtenteils mit AI zusammen, heißt du musst für jedes item was gekauft werden soll ein Package machen. Dann das Item dem NPC adden. Und eventuell auch Geld an den Händler. Was das bringen soll weiß ich aber nicht :(

Ganz Einfach man könnte so einen richtigen Handel von einer Stadt mit der anderen aufbauen.

Aber sag mal wie genau mache ich das denn nun. Das Package bekomme ich ja noch hin, aber wie geht das mit dem Zuweisen der Ware per Script bei einem NPC?

Das Adden an den Spieler kenne ich bereits, Doch das mit NPCs ist mir ein Rätsel.
 
Code:
NPCRef.AddItem ItemREF

Wenn du keine bestimmte Ref zuweisen willst kannst du den Actor aussuchen der das Item aktiviert.
Code:
Set Ref to GetActionRef
Code:
Ref.AddItem ItemREF
 
@ robinH: Meinst du die Ware, mit der ein NPC Handel treiben kann? Das Kontingent eines Händlers befindet sich in seiner "Händlertruhe". Du musst dann den "AddItem"-Befehl auf diese Truhe anwenden...
 
Wie meinst du das genau. Mit welchem Befehl kann ich die Händlertruhe denn ansprechen und

wie kann ich denn ein Tier das die Waren dann addet, dem NPC folgen lassen?
 
Der Befehl AddItem wie auch der Befehl RemoveItem funktioniert auf Spieler/NPCs/Kreaturen/Container.

Das Tier kannst du dem NPC folgen lassen, indem du ein entsprechendes Package erstellst.

Merke (soll jetzt nicht blöd klingen, einfach nur als Gedankenstütze):
Wenn sich ein Lebewesen bewegen soll, braucht es ein Package.

PS:
Aber nur die virtuellen:D
 
  • Like
Reaktionen: robinH
Hallo Fans,

Ich möchte eine Mod anfertigen und habe nun festgestellt das auf einen NPC schon ein Script liegt, man muss aber den NPC ein neues Script geben damit die erste Quest meinen Mod anfängt. Wie kann ich das Problem lösen.

Danke im voraus.
 
Das Original Script

scriptname GlarthirScript

; QUESTS:
; MS38

float timer
float looktimer
short looking
short speaking ; 0 when timer is for his last speech, 1 when timer is just waiting to speak again (delay)

begin OnPackageStart GlarthirMeetPlayer
set ms38.contact to ms38.contact + 1
end

begin OnDeath player
; messagebox "DEBUG: Glarthir killed by the player"
if getstage ms38 == 80
setstage ms38 81
elseif getstage ms38 >= 5 && getstage ms38 <= 100
setstage ms38 82
endif
end

begin OnDeath
; messagebox "DEBUG: Glarthir killed by someone"
if getstage ms38 == 80
setstage ms38 81
else
setstage ms38 100
endif
end

begin OnPackageDone GlarthirRampageKillBP
if player.getlos GlarthirRef == 0 && getinsamecell player == 0
BernadettePenelesRef.kill GlarthirRef
endif
end

begin OnPackageDone GlarthirRampageKillTS
if player.getlos GlarthirRef == 0 && getinsamecell player == 0
ToutiusSextiusRef.kill GlarthirRef
endif
end

begin OnPackageDone GlarthirRampageKillDS
if player.getlos GlarthirRef == 0 && getinsamecell player == 0
DavideSurilieRef.kill GlarthirRef
endif
end

begin OnPackageDone GlarthirGetAxe
set MS38.gotAxe to 1
end

begin OnPackageDone GlarthirRampageGetAxe
set MS38.gotAxe to 1
end


begin gamemode
if getdead == 1
return
endif

if timer > 0
set timer to timer - getsecondspassed
endif

; when player gets close, Glarthir tries to contact him
if getiscurrentpackage GlarthirContactPlayer == 1
; don't do this if the player leaves the area
if player.getincell skingrad == 0 || player.getincell Skingradcastle == 1 || player.isininterior == 1
; messageBox "TEMP: Glarthir stop following"
evp
else
if getdistance player < 600 && getLOS player == 1
; if player turns to look at Glarthir, immediately approach if just waiting between speech
if getstage MS38 < 5 && speaking == 0 && player.getLOS GlarthirRef
set timer to 0
endif

if timer <= 0 && getstage MS38 < 5
if speaking == 0
; first contact with player
set timer to SayTo player, MS38Topic, 1
set speaking to 1
else
; finished talking, put delay in between speech
set timer to 10
set speaking to 0
endif
endif
endif
endif
endif

if MS38.rampage == 2 && getquestrunning MS38 == 1
if timer <= 0 && isincombat == 0
set timer to Say MS38Topic + 5
endif
endif
end

Und das neue Mod Script

SCN Glathireins
short doonce
begin gamemode
if doonce == 0
setstage 000Glatir 5
set doonce to 1
endif
end

Ich möchte bitte das meine Quest nach Glathirs tot anfängt und dann sich ein Textfeld öffnett mit einenTagebucheintrag.
 
Um die Quest nach dem Tod zu starten, muss es OnDeath und nicht GameMode heißen ;)

Ich habe mal das Script in das Originalscript eingefügt:

Code:
scriptname GlarthirScript

; QUESTS:
; MS38

float timer
float looktimer
short looking
short speaking ; 0 when timer is for his last speech, 1 when timer is just waiting to speak again (delay)

short doonce

begin OnPackageStart GlarthirMeetPlayer
set ms38.contact to ms38.contact + 1
end

begin OnDeath player
; messagebox "DEBUG: Glarthir killed by the player"
if getstage ms38 == 80
setstage ms38 81
elseif getstage ms38 >= 5 && getstage ms38 <= 100
setstage ms38 82
endif

if doonce == 0
setstage 000Glatir 5
set doonce to 1
endif

end

begin OnDeath
; messagebox "DEBUG: Glarthir killed by someone"
if getstage ms38 == 80
setstage ms38 81
else
setstage ms38 100
endif

if doonce == 0
setstage 000Glatir 5
set doonce to 1
endif

end

begin OnPackageDone GlarthirRampageKillBP
if player.getlos GlarthirRef == 0 && getinsamecell player == 0
BernadettePenelesRef.kill GlarthirRef
endif
end

begin OnPackageDone GlarthirRampageKillTS
if player.getlos GlarthirRef == 0 && getinsamecell player == 0
ToutiusSextiusRef.kill GlarthirRef
endif
end

begin OnPackageDone GlarthirRampageKillDS
if player.getlos GlarthirRef == 0 && getinsamecell player == 0
DavideSurilieRef.kill GlarthirRef
endif
end

begin OnPackageDone GlarthirGetAxe
set MS38.gotAxe to 1
end

begin OnPackageDone GlarthirRampageGetAxe
set MS38.gotAxe to 1
end


begin gamemode
if getdead == 1
return
endif

if timer > 0
set timer to timer - getsecondspassed
endif

; when player gets close, Glarthir tries to contact him
if getiscurrentpackage GlarthirContactPlayer == 1
; don't do this if the player leaves the area
if player.getincell skingrad == 0 || player.getincell Skingradcastle == 1 || player.isininterior == 1
; messageBox "TEMP: Glarthir stop following"
evp
else
if getdistance player < 600 && getLOS player == 1
; if player turns to look at Glarthir, immediately approach if just waiting between speech
if getstage MS38 < 5 && speaking == 0 && player.getLOS GlarthirRef
set timer to 0
endif

if timer <= 0 && getstage MS38 < 5
if speaking == 0
; first contact with player
set timer to SayTo player, MS38Topic, 1
set speaking to 1
else
; finished talking, put delay in between speech
set timer to 10
set speaking to 0
endif
endif
endif
endif
endif

if MS38.rampage == 2 && getquestrunning MS38 == 1
if timer <= 0 && isincombat == 0
set timer to Say MS38Topic + 5
endif
endif
end

Hoffe, dass ich es richtig zusammengefügt habe :)
 
  • Like
Reaktionen: Piet
Super vielen Dank bjoernret für die schnelle Hilfe.

mfg Piet

@bjoernret, musst leider festellen das Glathir schon Tot war als ich in Skingrad ankam. Aber das sollte eigentlich erst passieren wenn Er von den Stadtwachen, nachdem ich Ihnen davon erzählt habe und die Liste übergeben habe, getötet wird. Oder nachdem der Spieler den Auftrag von Glathir nicht annihmmt und er darauf dann selber mit der Axt alle Verdächtigen töten möchte und dann daraufhin von den Wachen getötet wird. Erst danach sollte dann der erste Questeintrag erfolgen.

mfg Piet
 
Zuletzt bearbeitet:
Du kannst das ganze auch mit einem Script regeln, ohne dass dieses auf Glathir liegen muss, denke ich.

Eine Quest hast du ja eh schon erstellt. Bei dieser stellst du die Stages nun so ein, dass der "richtige" Questanfang erst ab einer späteren Stage ist.

Dann fragst du in einem Script, dass du auf dieses Quest legst, ab, ob Göathir tot und die entsprechende Quest-Stage des normalen Glathir-Quest aus Oblivion.

Ob er tot ist, kannst du per [Glathir-REF-ID].GetDead == 1 abfragen.

Deine Quest muss dann einen Haken bei StartGameEnabled haben. Sowas wie Tagebucheinträge dann eben erst ab einer späteren Stage.

Etwa so:
Stage 0 => Glathir ist noch nicht tot, deswegen passiert nichts.
Stage 5 => Glathir stirbt, wird per Script bemerkt, Stage hochsetzen
Stage 10 => Eigentliche Quest startet
Stage ...
 
  • Like
Reaktionen: Piet
Hallo Fans,

Ich möchte in der Ruine Nornal einen neuen NPC platzieren, der bei Sichkontakt die Spielerfigur auffordert all seine Sachen ihn zu geben, die Sachen sollen dann in einer Truhe nahe dem Ausgang eingelagert werden. So das der Spieler kurz vor verlassen der Ruine seine Sachen wieder aus der Truhe nehmen kann.

Bei der Abgabe seiner Sachen sollte er erstmal eine Bauerkleidung bekommen, damit er nicht ganz ohne Kleidung ist.

In der Hoffnung das Ihr mir helfen könnt, möchte ich nun meinen Text beenden.

Danke im voraus.
 
Versuchs mal so:
Code:
scn NPCSCRIPT

short doonce

Begin GameMode
 if doonce == 0
  if getLOS player == 1
   startConversation player <Topic-ID>
   set doonce to 1
  endif
 endif
end

Im Result-Skript des Topics sollte dann in etwa stehen:
Code:
player.removeAllItems <Container-Ref> 1
player.addItem <Bauernkleidung> 1
 
  • Like
Reaktionen: Piet
@Diarrhoe, ich danke dir für das Script.

Da ich noch Laie auf dem Gebiet bin habe ich dazu noch Fragen. Das Script lege ich auf den neuen NPC, ist das richtig.

Und diese Aussage: Im Result-Skript des Topics sollte dann in etwa stehen:player.removeAllItems <Container-Ref> 1
player.addItem <Bauernkleidung> 1

verstehe ich noch nicht, denn ich weiss nicht wo ich es genauso eintragen muss. Kannst du mir bitte schreiben wo ich die Stelle ( Result-Skript des Topics) im CS finde und was ich genau machen muss.

Vielen Dank im voraus.
 
Also muss ich im Feld Result Script jetzt das player.removeAllItems <Container-Ref> 1
player.addItem <Bauernkleidung> 1 hinein schreiben. Ist das Richtig. und was muss ich dann noch bei Topic alles eintragen. Ich bin totaler Laie und möchte es aber lernen.

Danke im voraus,