Construction Set Skriptthread zum Construction Set

Hallo ich bin neu unter den Moddern und bräuchte für meinen ersten Mod dringend 2 Scripte.

1. Einen damit ein Gegenstand nach einer bestimmten Quest in einen Behälter kommt.
2. Einen um durch Knopfdruck eine Keatur aus einer Liste zu beschwören als Arenagegner.

Ich hoffe ihr könnt mir helfen.:?

Lg Brom1994

Du machst in die Quest als Result Script beim Stage rein:
Code:
KistenRef.AddItem ObjektRef, 1

2. Am besten packst du den Gegner von Anfang an irgendwo in die Zelle, so dass der Spieler ihn nicht sieht. Dann makierst du den Spawnpunkt mit einem Marker. (Achtung, dieses Gegner lässt sicht mit diesem Weg nur einmal beschwören). Oder möchtest du, dass der Spieler aus einer Liste von Möglichen Gegner einen Auswählen kann und diesen immer wieder bekämpfen kann?
Code:
scn Was auch immer
short once

Begin OnActivate
if(once == 0)
       GegnerRef.MoveToMarker MarkerRef 0,0,0
       Set once to 1
endif
end

@Todeskeks
Code:
scn WasAuchImmer

short Start
short EndDay

Begin GameMode
if(Start == 0)
	EndDay = GameDaysPassed + 2
	Set Start to 1
elseif(Start == 1)
	If(GameDaysPassed >= EndDay)
		[Your Code goes here]
	endif
endif
end

Warum lässt du das ganze mit dem Hauskauf nicht einfach über einen Dialog ablaufen? Ist doch auch von der Spielwelt her logischer als mit Messageboxen zu reden ;)
 
Zuletzt bearbeitet:
Du brauchst zuerst einen Marker, an dem die Kreaturen erscheinen sollen, und gibst im eine Referenz.
Dann erstellst Du eine Dummy-Cell und stellst dort alle Kreaturen (alle mit neuer ID) hinein und den Marker und gibst allen eine neue Referenz.
Dann legst du das auf den Activator:

Code:
SCN ScriptName

Short Button
Short Move

Begin OnActivate

if(move == 0)
     set move to 1
 else
        return
endif

end

Begin GameMode

if(move == 0)
     return
 elseif(move == 1)
       MessageBox "Welche Kreatur wollt Ihr beschwören?" "Kreatur1" "Kreatur2" "usw"
       set move to 2
    elseif(move == 2)
          set button to (getbuttonpressed)
         if(button == 0)
               <kreatur1>.moveTo <MarkerInArena>
               set move to 0 
               set button to -1
              return
        elseif(button == 1)
                  <kreatur2>.moveTo <MarkerInArena>
                  set move to 0
                  set button to -1
                return
           elseif(button == 2)
                      ; und so weiter
       endif
    endif

end

Und das legst Du auf jede Kreatur (jede hat eine neue ID!):

Code:
SCN ScriptName

begin OnDeath

moveTo <MarkerInDummyCell>
resurrect

end

MfG,
Kahmul.
 
@Todeskeks:
Welche Messagebox meinst du? Etwa: "Hier habt Ihr den Schlüssel."? Oder: "Ihr wollt Euch doch nicht mein neuestes Angebot entgehen lassen..."? Letztere kann ich mir erklären. Beheben kannst du es so:
Code:
SCN zzMarkusScriptzz

short gold
short init

Begin onActivate

if init == 0
 set init to 1
 Messagebox "Ah, ihr wollt meine Wohnung kaufen. Sie kostet nur 3000 Gold. Wenn ihr die Wohnung wirklich wollt sprecht mich einfach nochmal an."
elseif init == 1
 if player.getItemCount Gold001 >= 3000
  player.removeItem Gold001 3000
  player.addItem OstianWohnungSchluessel 1
  zzNehrimSignOstianWohnhauszz.disable
  zzBewohnteWohnungzz.enable
  zzUnbewohnteWohnungzz.disable
  set init to 2
  messagebox "Hier habt ihr den Schlüssel."
 else
  messagebox "Ihr habt nicht genug Gold."
 endif
elseif init == 2
 set init to 3
 messagebox "Ihr wollt euch doch nicht mein neustes Angebot entgehen lassen oder? Da ich weiß das diese Wohnung sehr verkümmert ist schicke euch für 500 Gold jemanden vorbei der für euch alles aufräumt. Also wenn ihr es wollt sprecht mich einfach noch mal an."
elseif init == 3
 if player.getItemCount Gold001 >= 500
  player.removeItem Gold001 500
  zzBasdurSpeakzz.enable
  set init to 4
  messagebox "Ok. Ich schicke ihn euch."
 else
  messagebox "Ihr habt nicht genug Gold."
 endif
endif

end

Wo sollen jetzt die zwei Tage Zeit vergehen?
 
Ich hätte einfach alles, sprich den ganzen Hauskaufdialog in ein richigen Dialog getan, und halt die jeweiligen Aktionen immer in das Result Script...
 
Also das mit dem zwei Tagen hat so nicht geklappt. Es konnte nicht gespeichert werden daher hab ich ihn so umgeändert und es hat funktioniert:
Code:
scn WasAuchImmer
 
short Start
short EndDay
 
Begin GameMode
if(Start == 0)
Set EndDay to GameDaysPassed + 2
    Set Start to 1
elseif(Start == 1)
    If(GameDaysPassed >= EndDay)
        [Your Code goes here]
    endif
endif
end
Ich habs jetzt nicht auf Dialog umgestellt da ich zurzeit zu wenig ahnung davon hab.
Die zweite messagebox arbeitet immernoch nicht richtig daher hab ich sie einfach in die dritte mit reingetan.

edit: Ne die zweite messagebox hat doch funktioniert hatte nur einen minimalen Fehler eingebaut!
 
Zuletzt bearbeitet:
Leg am besten außerhalb des Raumes im Interior einen Activator und lege das Script auf ihn:

Code:
SCN ...

Short Once

Begin gameMode

if(once == 1)
     return
 else
        setstage <quest> <stage>
        set once to 1
    endif
end
 
  • Like
Reaktionen: Darth Andauril
Wo finde ich denn den richtigen Aktivator dafür? Es gibt so viele, und... naja... ;)

Aber, sag mal, geht das nicht auch ohne GameMode? GameMode frisst schnell an der Performance und das spüre ich selbst bei meinem PC mit 1 GB Grafikkarte und Doppelkern-Prozessor...
 
Du kannst ein Script auf die Tür legen:

Code:
scn [I]name[/I]

begin OnActivate
     if getStage [I]<Quest> [/I] == [I]<Stage>[/I]
           setStage [I]<Quest> <Stage>[/I]
     endif
end
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Darth Andauril
Also das mit dem zwei Tagen hat so nicht geklappt. Es konnte nicht gespeichert werden daher hab ich ihn so umgeändert und es hat funktioniert:
Code:
scn WasAuchImmer
 
short Start
short EndDay
 
Begin GameMode
if(Start == 0)
Set EndDay to GameDaysPassed + 2
    Set Start to 1
elseif(Start == 1)
    If(GameDaysPassed >= EndDay)
        [Your Code goes here]
    endif
endif
end
Ich habs jetzt nicht auf Dialog umgestellt da ich zurzeit zu wenig ahnung davon hab.
Die zweite messagebox arbeitet immernoch nicht richtig daher hab ich sie einfach in die dritte mit reingetan.

edit: Ne die zweite messagebox hat doch funktioniert hatte nur einen minimalen Fehler eingebaut!

Tut mir leid, sicher ist das so richtig. Sowas passiert halt, wenn man wie ich fast nur noch in Java Coded, ich muss mich auch jedes mal davon abhalten, die Zeilen mit ";" zu beenden und {} zu benutzen :D

Ich würde von der Möglichkeit mit der Tür abraten, leg lieber in den Innenraum einen Trigger mit dem Code. Zu den Dialogen, schau mal, hier auf Scharesoft ist ein Tutorial von mit zum Thema Dialoge...

@ Dunkle Schwester:
Code:
scn Bla
short once

Begin OnTrigger Player
if(Once == 0)
     SetStage DeineQuest 42
     Set once to 1
endif
end

Das Problem mit dem Türscript oben ist, dass in dieser Form die Tür an sich nicht mehr geht.
Wenn müsste es
Code:
scn name

begin OnActivate
     if getStage <Quest> <Stage> == <Stage>
           setStage <Quest> <Stage>
     endif
    Activate
end
heißen.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Darth Andauril
Das könnte an der Art liegen, wie Oblivion Tage zählt oder ähnlichem. Auch meine ich mal gehört zu haben, dass wenn man Zeitbeschleunigung benutzt, wie du es wahrscheinlich getan hast, das irgendwie nicht richtig zu den Tagen gezählt wird...
 
Liegt das Script denn auf einer Quest? Die Verzögerung liegt dann daran, dass Quest-Skripte nur alle 5 Sekunden ausgeführt werden. ;)
 
Ok, habe jetzt noch mal eine Frage:
Ich möchte einen NPC ingame zum Vampier machen, also dass er auf die Abfrage GetVampire == 1 reagiert. Ich habe mit AddSpell schon alle Zauber hinzugefügt, funktioniert aber nicht.
 
Liegt das Script denn auf einer Quest? Die Verzögerung liegt dann daran, dass Quest-Skripte nur alle 5 Sekunden ausgeführt werden. ;)


Nein, das ist nicht so aber wenn die zwei Tage vergangen sind werden etwa 50 Objekte unsichtbar gemacht (also mit .disable) und auch 50 sichtbar gemacht (also mit .enable)