Construction Set Skriptthread zum Construction Set

So, ich glaube ich habs jetzt. Nun brauche ich nur noch einen Befehl. Wie bringe ich den NPC dazu, sich aus seinem Inventar voll auszurüsten? Momentan rüstet er sich immer nur mit Waffen aus, lässt Rüstung aber unangetastet und bleibt nackt.
 
also sowas wie "equipallitems" gibts glaub ich nich...du könntest aber einfach für alle objekte der truhe einen
"<npc-ref>.equipitem <gegenstands-ID>"
befehl machen.oder probier mal "setalert 1" da nimmt der npc zumindest die waffe raus und evtl zieht er sich auch rüstung an..is aber nur ne vermutung.denn wenn erin "alarm-bereitschaft" ist sollte er sich schon wappnen.anosnten denke ich dass er die rüstung spätestens dann anzieht wenn er in eienn kampf verwickelt wird.
 
Das mit der konkreten Objekt-ID geht nicht, da er ja alles mögliche ausrüsten soll, was er so bekommt und nicht spezielle Rüstungsteile. Selbst bei einem Angriff rüstet er sich momentan nicht aus.
 
Hallo, ich hätte auch noch mal eine Frage.
Dieses Skript löst eine Queststage aus beim Tod eines NPC. Wenn ich aber eine ganze Gruppe von NPC töten möchte, was die nächste Stage auslösen soll, wie müsste ich das Script verändern? Die ganze Gruppe hat eine eigene Faction, falls das relevant ist.

scn Scriptname

Short DoOnce

Begin OnDeath
If DoOnce == 0
if getstage "Questname" == 40
SetStage "Questname" 50
Set DoOnce to 1
Endif
Endif
End
 
quest-script:

scn name
short killed
begin gamemode
if killed==X (X=anzahl der gesamt-gegner)
setstage <quest-ID> X
endif
end
---------------------------------
script der auf jedem npc liegen muss:

scn name
begin ondeath
set <quest-ID>.killed to ( <quest-ID>.killed + 1)
end
--------------------------------------
bei dem quest-script ist ein "doonce" nicht nötig da eine queststufe nur einmal erreicht werden kann (es sei denn du hast ein häkchen bei "allow repeated queststages")
 
  • Like
Reaktionen: Arielle 1000
Das könnte man über ein Quest-Script machen:

Code:
SCN GruppenKillQuestScript

Short Once

Begin GameMode

if(Once == 0)
 if(<Ref1>.getDead) && (<Ref2>.getDead) ; und so weiter
     if(getstage <Quest> == <Stage>)
           set Once to 1
           setstage <Quest> <Stage>
        endif
     endif
  endif

end
EDIT: @ W@ldmeister: Man muss doch nicht immer alles so kompliziert für Anfänger im Skripten machen. :-D
 
  • Like
Reaktionen: Arielle 1000
:p ich mach meine
"wie-viele-gegner-muss-ich-töten-damit-dies-und-jenes-passiert-scripts immer so" hehe^^

ich mag die "
if [...] && if[...] && if[...]"-teile nich so...
 
Reicht es nicht aus, wenn ich das bestehende Script so belasse und bei "Begin OnDeath" die einzelnen Referenzen der zu tötenden NPC aufliste? Alles andere soll ja so bleiben.
 
Nein, weil "Begin OnDeath" bedeutet, dass dieser Script erst ausgeführt wird, sobald das Objekt, auf dem das Scirpt liegt (normalerwiese NPC :p), stirbt.
Du köntest höchstens in deinem Script einen GameMode-Block einfügen, in dem das ganze Zeug abgefragt wird. Das Script kann dann trotzdem auf dem NPC bleiben.
 
  • Like
Reaktionen: Arielle 1000
@Arielle: Wenn ein Actor tot ist, wird das Skript, das auf ihm liegt nicht weiter ausgeführt. "GameMode" bringt also nichts bei einem toten NPC.
Zur Frage: Du brauchst auf jeden Fall eine übergeordnete Variable, also eine Globale oder eine Quest-Variable. Wenn du schon ein Quest-Skript hast, würde ich eine Quest-Variable benutzen. Dann legst du so ein Skript auf die Gegner:
Code:
scn name

Begin onDeath

set <Variable> to (<Variable> + 1)
if <Varable> == x ;Anzahl der Gegner
 setStage ...
endif

end
 
  • Like
Reaktionen: Arielle 1000
@ Kahmul: Doch :lol:
Allerdings wäre das unsinnig

Code:
scn QuestScript

short count

Code:
scn NPCScript

Begin OnDeath
set [QuestID].count to [QuestID].count +1
If ([QuestID].count == X) ;X steht für die Anzahl der zu tötenden Gegner
setStage [QuestID] [QuestStage]
Endif
End

Den NPCScript musst du lediglich auf alle NPCs legen, die sterben sollen.

Grüße
Gildur
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Arielle 1000
@Arielle: Wenn ein Actor tot ist, wird das Skript, das auf ihm liegt nicht weiter ausgeführt. "GameMode" bringt also nichts bei einem toten NPC.
Zur Frage: Du brauchst auf jeden Fall eine übergeordnete Variable, also eine Globale oder eine Quest-Variable. Wenn du schon ein Quest-Skript hast, würde ich eine Quest-Variable benutzen. Dann legst du so ein Skript auf die Gegner:
Code:
scn name

Begin onDeath

set <Variable> to (<Variable> + 1)
if <Varable> == x ;Anzahl der Gegner
 setStage ...
endif

end

Okay, das wusste ich nicht. :-D

Code:
scn QuestScript

short count
Code:
scn NPCScript

Begin OnDeath
set [QuestID].count to [QuestID].count +1
If ([QuestID].count == X) ;X steht für die Anzahl der zu tötenden Gegner
setStage [QuestID] [QuestStage]
Endif
End
Den NPCScript musst du lediglich auf alle NPCs legen, die sterben sollen.

Grüße
Gildur

Aber mein Quest-Script dürfte doch auch funktionieren. :p
 
  • Like
Reaktionen: Arielle 1000
Stimmt.

Allerdings hat er Nachteile, zB. ist es mehr Arbeit (Referenzen vergeben, diese ins Script eintragen etc.) und desweiteren arbeitet die Quest mit GameMode, das heißt der Script läuft die ganze Zeit im Hintergrund. An sich wahrscheinlich kaum bemerkbar, aber wenn es sich häuft und jeder nur noch GameMode benutzt, könnte das schon einige FPS kosten. Deshalb sollte man an GameMode sparen wo man kann - meiner Meinung nach. :p

Aber an sich ist dein Script natürlich genau so funktionsfähig.
 
  • Like
Reaktionen: Arielle 1000
Kahmuls Script funktioniert, ich habe es gerade ingame ausprobiert. Allerdings erst, nachdem ich dieses Script auf alle Gegner gesetzt habe, was aus seinem Beitrag nicht so ganz deutlich hervorging. Aber dank euer aller Mithilfe konnte ich das ergänzen, und jetzt klappt alles so wie es sollte.
Ihr habt euch alle ein Danke verdient.

Lg
Arielle
 
Nein, es liegt auf Objekt. Das hattest du zwar erwähnt, dass ich es als Quest-Skript machen soll, habe ich aber wohl unbewusst nicht beachtet. Aber das Skript steht und funktioniert jetzt, ich möchte lieber nichts mehr daran ändern.:D

p.s. Hast du Neuigkeiten zu meiner PN?
 
Ich möchte einen NPC mit folgendem Script belegt, sobald ich ein Amulett anziehen spawnt vor mir ein NPC, den ich anspreche, er fragt mich draufhin wohin ich will und ich habe mehrere Anklickmöglichkeiten, je nachdem portet er mich dahin worauf ich geklickt habe.

Jedoch weiß ich nicht, wie ich das genau in einen NPC einfüge, zuviele Stage, Get und Value befehle die ich nicht ganz verstehe, kann mir das jemand erklären?
 
Das Skript würde ich eher auf das Amulett legen:
Code:
scn name

Begin onEquip player

<NPC-Ref>.moveTo player

end

Die Teleportfunktionen schreibst du in die Result-Skripts der Dialoge:
Code:
player.moveTo <Marker-Ref>
 
  • Like
Reaktionen: Athelyst