Construction Set NPC need Help

Shazhar

Neuankömmling
1. Also is es möglich (sollte ja;) ), meinem NPC während eines Wander Befehls (Schedule-time 15-21 uhr) zu sagen, er solle ab 18-21 uhr seine Torch02 halten/equip? habe schon diverses probiert.. :mad: Torch is auch im Inventory..
Ich blick da nicht so ganz durch bei den Conditions für AI-Packs.. oder muss ich das woanders einstellen ?
Gibts dazu irgendwo ein TUT? vorzugsweise DE?
-hatte erfolg mit UseItemAt aber da steht der einfach bis um 21uhr an selber stelle..

2. Muss ich meinem NPC umbedingt Händler zuweisen, damit er Handel treibt, oder kann ich auch sagen er solle z.B. Thief sein ??

3. für was reicht eine Condition, wann brauchts ein skript und wann ne quest ?? :huh:

Bin Dankbar für alle TipsundTricks :D
 
Hallo Shazhar,

zu Deiner 1. Frage:
Ohne Skript, nur über die AI-Package, wird es nicht gehen. In den meisten Fällen entscheidet die AI selbstständig in Abhängigkeit von den Lichtverhältnissen, ob ein NPC seine Fackel entzündet oder wegsteckt. Wenn es z.B. um 18 Uhr noch hell genug ist, wird der NPC normalerweise die Fackel nicht verwenden. Andersherum wird er sie nach 21 Uhr nicht freiwillig ablegen, wenn's ihm dann zu dunkel ist. Das nachfolgende kleine Skript sollte funktionieren, allerdings nicht perfekt:

Code:
scn NPCSkript

short HatFackel

begin GameMode

	if GameHour > 18 && GameHour < 21 && HatFackel == 0
		AddItem Torch02, 1
		EquipItem Torch02, 1
		set HatFackel to 1
	
	elseif GameHour >= 21 && HatFackel
		UnequipItem Torch02
		RemoveItem Torch02, 1
		set HatFackel to 0
	endif

end

Das Skript muss auf dem NPC laufen. Zwischen 18 und 21 Uhr bekommt er einmalig eine Fackel ins Gepäck und rüstet diese aus. Die 1 hinter EquipItem Torch02 bewirkt, dass der NPC die Fackel nicht ablegen kann. Um 21 Uhr wird ihm die Fackel dann wieder weg genommen. Eine Fackel, die er nicht hat, kann er schließlich auch nicht anzünden! ;)

Der Schönheitfehler an der Sache ist, dass die AI immer noch versucht, die Fackel wegzustecken, wenn es ihr zu hell ist. Das wird durch das mittels der 1 erzwungene EquipItem zwar verhindert, doch man hört noch alle paar Sekunden das Geräusch, als würde der NPC die Fackel wegstecken. Ob und wie man das abstellen könnte, habe ich noch nicht herausgefunden.

Grüße, Achim
 
  • Like
Reaktionen: Shazhar
Cool Danke nochmals, das funzt genauso..!!! :-D

Nun aber noch eine ander Frage:
Da ich meinem NPC ja nur EIN Script geben kann (in der "Eigenschaftskartei");
und mein NPC nicht NUR Fackeln tragen soll, sondern,z.B. wenn er ein best. Item erhält zu einem best. Ort gehen soll...
Ist meine Frage nun, ob es wohl möglich ist eine weitere Variable anzuknüpfen?

Musste das etwa so aussehen ??

...
set HatFackel to 0

endif
end

short xxyUnbekannt

beginn OnAdd [Obj.ID] [Editorname meines NPC]
...
...
endif
end

:? kann das sein? Oder muss man das anders lösen? :huh:
 
Zuletzt bearbeitet:
Grundsätzlich kann man selbstverständlich mehrere Blocktypen in einem Skript verwenden. Prinzipiell ist es auch egal, an welcher Stelle in einem Skript man Variablen deklariert, solange dies nur vor deren erster Verwendung geschieht. Der besseren Übersichtlichkeit halber empfiehlt es sich aber, sämtliche Variablen am Anfang des Skriptes zu deklarieren.

Das OnAdd würde allerdings so nicht funktionieren. Ein OnAdd-Block wird ausgeführt, sobald das damit geskripte Objekt einem Container hinzugefügt wird. Wenn Du auf diese Weise erreichen willst, dass etwas passiert, sobald Dein NPC einen bestimmten Gegenstand erhält, musst Du also ein Skript mit dem entsprechenden OnAdd-Block auf dem Gegenstand(!) (und nicht im Skript des NPC) laufen lassen.

Alternativ könntest Du im GameMode-Block im Skript des NPC abfragen, ob er diesen bestimmten Gegenstand im Gepäck hat und davon abhängig eine Aktion auslösen. Das könnte dann z.B. so aussehen:

Code:
scn NPCSkript

short HatFackel
short MachWas

begin GameMode

	if GameHour > 18 && GameHour < 21 && HatFackel == 0
		AddItem Torch02, 1
		EquipItem Torch02, 1
		set HatFackel to 1
	
	elseif GameHour >= 21 && HatFackel
		UnequipItem Torch02
		RemoveItem Torch02, 1
		set HatFackel to 0
	endif
	
	if (GetItemCount [ObjID] > 0) && (MachWas == 0)
		set MachWas to 1
		;
		; Hier den auszuführenden Code einfügen
		;
	endif	

end
 
  • Like
Reaktionen: Shazhar