Construction Set Skriptthread zum Construction Set

Ach was, kann nie schaden, wenn man sich mal damit beschäftigt. Zumindest einfache Script sind häufig von nutzen, zum Beispiel wenn man mal n kleines Easteregg einbauen will oder so.
 
Ich brauche ein Skript, dass Zaubereffekte auf Waffen erst erscheinen lässt, wenn ein Gegner in der Nähe ist, ich denke nicht, dass ich da mit einem einfach getdistance drankomme ^^. wie kann ich das machen?
 
Du meinst ala Stich aus HdR? ich könnte dir empfehlen, im Script vom warten Menü zu gucken, sofern man das im CS aufrufen kann. Dort ist ja auch sowas, dass man nicht warten kann, wenn ein Gegner in der Nähe ist. Das musst du dann durch das Erscheinen des magischen Schimmerns ersetzen.
 
Wenn du OBSE verwendest könntest du mit einem GetFirstRef-GetNextRef Loop alle NPCs in der Zelle (temporär) einer Ref zuweisen und mit dieser Ref dann GetDistance überprüfen. Am besten überprüfst du mit IsActorEvil, bzw. GetDisposition & GetAgression (Habe ich jetzt leider keine Funktion dafür gefunden, evtl. funktioniert hier GetShouldAttack), bzw. GetIsCreature noch, ob es sich um einen Feind handelt.


der entsprechende Scriptabschnitt würde dann so aussehen:
Code:
int EnemyAround
int Index
ref ActorRef

[...]
set Index to 0
SaveIP 1
if ( Index <= GetNumRefs 69 1 0 )
 set ActorRef to Apple
 if ( Index == 0 )
  set ActorRef to GetFirstRef 69 1 0
 else
  set ActorRef to GetNextRef
 endif
 set Index to ( Index + 1 )
 if ( ( ( ActorRef.GetIsCreature ) || ( ActorRef.IsActorEvil ) || ( ActorRef.GetShouldAttack Player ) ) && ( EnemyAround == 0 ) )
  set EnemyAround to 1
  ;dein Code um den Verzauberungseffekt hinzuzufügen kommt hier hin
  set Index to 0
  Return
 elseif ( ( ( ActorRef.GetIsCreature == 0 ) || ( ActorRef.IsActorEvil == 0 ) || ( ActorRef.GetShouldAttack Player == 0 ) ) && ( EnemyAround ) )
  set EnemyAround to 0
  ;dein Code um den Verzauberungseffekt zu entfernen kommt hier hin
  set Index to 0
  Return
 endif
 RestoreIP 1
endif
[...]


Alternativ könntest du noch mit den (Vanilla-)Befehlen IsInCombat, GetDetected, GetDetectionLevel, GetIsAlerted, GetLOS, IsActorDetected, IsActorAVictim, GetAttacked, GetShouldAttack, o.ä. rumhantieren.
Wie genau das funktionieren könnte kann ich dir nicht sagen, dass ist nur eine Idee.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: elveon
Hab ein Problem undzwar hab ich auf einen Amboss ein Skript gelegt, dass soll überprüfen, ob der Spieler einen WaffenschmiedSkill von 25 oder größer hat, wenn ja soll es eine MessageBox öffnen in dre man auswählen kann, dass man ein SChwert schmieden möchte, wenn man keine 25 Armorer hat soll ein Hinweis darauf ershceinen, dassm na erst seinen Skill verbessern soll.

Aber jetzt zurück zum Fall dass man 25 Armorer hat, wenn man nun auf den Button Schwert schmieden klickt sol überprüft werden, ob der Spieler 3 mal Eisen bei sich hat , das Item wurde sewlbst erstellt. Wenn ja soll ihm ein Eisen-Langschwert hinzugefügt werden und 3 mal Eisen abgenommen, wenn nicht so soll ihm eine Nachricht ersycheinen, dass ihm das nötige Material fehlt, es hat eig. alles funktioniert außer dass der Spieler das Eisen abgenommen bekommt und das Schwert hinzugefügt bekommt, hier ist das Script:

Code:
scn NRSmithScript

short SmithSkill
short IronCount
short Button

begin OnActivate 
	set SmithSkill to player.GetActorValue Armorer
	set IronCount to player.GetItemCount NRIronIngredient
	if SmithSkill >=25
		set Button to -1
		messageBox "Was möchtest du schmieden?", "Ein Schwert"
		set Button to GetButtonPressed
	elseif SmithSkill <25
		messageBox "Du solltest das Schmieden noch ein bisschen üben."
	endif
	if Button == 0 && IronCount >=3
		player.additem WeapIronLongsword 1
		player.removeitem NRIronIngredient 3
	elseif IronCount < 3
		messageBox "Du hast nicht das nötige Material." 
	endif
end
 
Ich weiß zwar nicht, wieso, aber bei mir funktionieren GetButtonPresseds eigentlich nur wirklich zuverlässig, wenn ich sie in einen GameMode-Block schreibe. Also dann:

Code:
scn NRSmithScript

short SmithSkill
short IronCount
short Button
short active

begin OnActivate 
    set SmithSkill to player.GetActorValue Armorer
    set IronCount to player.GetItemCount NRIronIngredient
    if SmithSkill >=25
        messageBox "Was möchtest du schmieden?", "Ein Schwert"
        set active to 1
    elseif SmithSkill <25
        messageBox "Du solltest das Schmieden noch ein bisschen üben."
    endif
end

Begin gameMode
    if active == 1
        set Button to getButtonPressed
        set active to 2
    endif
 
    if Button == 0 && IronCount >= 3 && active == 2
        player.additem WeapIronLongsword 1
        player.removeitem NRIronIngredient 3
        set active to 0
        set Button to -1
    elseif Button == 0 && IronCount < 3 && active == 2
        messageBox "Du hast nicht das nötige Material."
        set active to 0
        set Button to -1
    endif
end
Ô_o
 
  • Like
Reaktionen: Mr. Ping
Danke, allerdings gibt es da noch ein kleines Problem, ich erhalte sämtliche Meldungen, die im GameMode sind nciht, dass heißt, wenn ich nicht genug Material habe, kommt keine Meldung , etc. und auch alles andere was im GameMode-Block passieren sollte passiert nicht, ich krieg auch nix abgenommen und ein Schwert krieg ich auch nicht, ich denke das Problem müsste dann irgendwo im GameMode-Block bzw. dem Übergang darein liegen :/
 
GetSelf gibt, wenn es auf den Player manchmal einen anderen Wert als Player aus, so dass
Code:
set self to Player.GetSelf
if Self == Player
hin und wieder als nicht zutreffenden deklariert wird. Deshalb soll man für die Überprüfung, ob eine gewisse Referenz gemeint ist GetIsReference verwenden, da dort dieser Fehler nicht existiert.
.

Bitte nochma erklären, das hilft mir irgentwie net weiter:huh:
 
GetSelf kannst du ohne bedenken verwenden, wenn du die Ref auf die du es "abfeuerst" (set REF to GetSelf) nur für irgentwelche Funktionen verwendest.


Wenn du es allerdings zum überprüfen verwenden willst, ob es eine best. Ref ist (via GetSelf == die gesuchte Ref) solltest du stattdessen GetIsReference verwenden, da dass keine Probleme beim Versuch den Spieler zu erkennen gibt (GetIsReference Player).
GetIsReference wird 1, wenn die CallingReference die gesuchte Ref ist (hier: Player). Falls dem nicht so ist wird es 0.


Jetzt klarer?
 
ne sry... irgentwie will der sinn dieser Funktion, und zwar der, einfach festzustellen, das es eben irgenteine Referenz ist nicht in meinen Kopf.. muss doch irgendeinen sinn haben
 
ne sry... irgentwie will der sinn dieser Funktion, und zwar der, einfach festzustellen, das es eben irgenteine Referenz ist nicht in meinen Kopf.. muss doch irgendeinen sinn haben

Was? Der Sinn von GetIsReference?


Das ist z.B. dafür Gut, wenn der ScriptEffect nur bei best. Zielen einen Effekt haben soll.
Oder wenn er bei NPCs anders wirken muss wie beim Spieler.

Gibt es viele Anwendungsmöglichkeiten.
 
Danke, allerdings gibt es da noch ein kleines Problem, ich erhalte sämtliche Meldungen, die im GameMode sind nciht, dass heißt, wenn ich nicht genug Material habe, kommt keine Meldung , etc. und auch alles andere was im GameMode-Block passieren sollte passiert nicht, ich krieg auch nix abgenommen und ein Schwert krieg ich auch nicht, ich denke das Problem müsste dann irgendwo im GameMode-Block bzw. dem Übergang darein liegen :/

*hust hust*, weiß keiner mehr was?
 
Hm, nochmal zum Schwerteffekt Script, es klappt nicht, es soll ja der Effekt erst angehen, wenn ein Gegner in der Nähe ist, gibt es da auch eine Lösung ohne OBSE?
 
Dringend!!!!!!

ich brauche unbedingt einen skript der bewirkt das man bei einer messagebox auf die nächste seite bringt ich meine damit das in einer messagebox zB ein paar buttons sind und wenn man auf "weiter" kommt man auf die nächste seite, wo wieder ein paar buttons sind
 
Mein Problem hat sich jetzt gelöst.

@ Shdowrun:

Ich empfehle dir mal das hier: Klick!, sofern du Englsich kannst sollte dir das weiterhelfen, ansonsten such einfahc mal in der Suche vom cs.wiki nach GetButtonPressed, hatm ir grad she geholfen.
 
das mit get button pressed weiss ich schon... nur ich hab ein problem dabei es in mehren seiten darzustellen wie z.B: bei einen Buch (in der Art)
 
Hi Leute.

Ich wollte mal fragen, ob jemand weiß, wie man einen Begleiter dazu bringen kann einfach durch die Gegnd zu laufen und wenn eine Wache weniger als 400 Units an den Begleiter harankommt von ihm angegriffen wird?

Zusammengefasst:

- Begleiter läuft überall herum
- Wenn eine Wache während des Rumlaufens weniger als 400 Units an ihn herankommt, soll sie von ihm angegriffen werden


Es wäre echt klasse, wenn mir da jemand helfen könnte ...

MfG Wave
 
Na gut ... wenn mir niemand mit dieser Frage helfen kann dann halt eine Andere. :lol:

Ich möchte vier Angriffsbefehle in einen "Universal Befehl" packen.
Dass heißt sobald ich einen NPC mit diesem Zauber treffe eine Messagebox erscheint, die mir die Möglichkeiten des Angriffs offenbart.

scn 000UniversalBefehlScript

Ref Target
Short Button

Begin ScriptEffectStart

Mate01Ref.SetActorValue Aggression 5
Mate02Ref.SetActorValue Aggression 5
Mate03Ref.SetActorValue Aggression 5
Mate04Ref.SetActorValue Aggression 5

Mate01Ref.SetFactionRank 0TotenDienerFaction 0
Mate02Ref.SetFactionRank 0TotenDienerFaction 0
Mate03Ref.SetFactionRank 0TotenDienerFaction 0
Mate04Ref.SetFactionRank 0TotenDienerFaction 0

Mate01Ref.EvaluatePackage
Mate02Ref.EvaluatePackage
Mate03Ref.EvaluatePackage
Mate04Ref.EvaluatePackage

Set Target to GetSelf
Set Button to -1

Messagebox "Wie sollen wir vorgehen, Herr?", "An alle! Angriff!", "Mate1 und Mate4, greift an!", "Mate3, stürm vor!", "Mate2! Lähme den Feind, ich will ihn lebend!"

end


Begin GameMode

Set Button to GetButtonPressed

If ( Button == 0 ) && ( Target.GetInFaction 0TotenDienerFaction == 0 )
Set Button to -1
Mate01Ref.StartCombat Target
Mate02Ref.StartCombat Target
Mate03Ref.StartCombat Target
Mate04Ref.StartCombat Target
Elseif ( Button == 1 ) && ( Target.GetInFaction 0TotenDienerFaction == 0 )
Set Button to -1
Mate01Ref.StartCombat Target
Mate04Ref.StartCombat Target
Elseif ( Button == 2 ) && ( Target.GetInFaction 0TotenDienerFaction == 0 )
Mate03Ref.StartCombat Target
Elseif ( Button == 3 ) && ( Target.GetInFaction 0TotenDienerFaction == 0 )
Mate02Ref.SetForceRun 1
Mate02Ref.SetForceSneak 1
Mate02Ref.Cast 0BayazLaehmung Target
endif

end

Dieses Skript funktioniert nur bis zur Messagebox ... :?

Ich hoffe, dass mir jemand bei diesem Problem helfen kann.


MfG Wave