Construction Set Ich brauche Hilfe bei einem Script!

[XXL]Jack

Abenteurer
Also ich hab das Problem das mir immer häufiger mein Npc verloren geht er hat ein follow package aber bleibt manchmal irgendwo hängen...
Diesmal finde ich ihn aber nicht wieder, damit das nich nochmal vorkommt würde ich gerne ein Zauber haben um ihn herzubeamen.
Ich hab mir den Script von einem vorhandenen PI angeschaut:

Scriptname TMSklavinRingScript

short SklavinFollowTemp


begin OnEquip player
Message "Ihr benutzt den Ring, um Alba herbeizurufen..."
TMSklavinRef.MoveTo player, 128, 0, 0
; # fix stuck
set SklavinFollowTemp to TMSklavinRef.GetBaseActorValue Marksman
StopWaiting TMSklavinFollow
if ( SklavinFollowTemp == 0 )
Wait TMSklavinFollow
endif

PlaySound SPLRestorationCast
end


Nun weiß ich nicht wie ich ihn zu einem Zauber umformen kann...
Ich weiß z.B. nicht durch was ich TMSklavinRef ersetzen muss wenn ich einfach den Namen meinem NPC einfüge kommt eine Fehlermeldung
 
Zu einem ZAuber umformen kannst du ihn mit
PHP:
Begin ScriptEffectStart
Script
Dann musst du oben rechts nicht "Object", sondern "Magic Effect" auswählen.
Alles andere sollte ohne Veränderung funktionieren. :)

Bei der Sache mit "TMSklavinref" sieht verdammt nach einer ref-Variable aus... damit kenn ich mich garnicht aus...
 
Versuchs mal mit der 8-Stelligen Nummer, die hinter der ID in der ObjectList steht.
Das Feld is am Anfang verdammt schmal, du musst es erst auseinanderziehen
 
Das nützt leider nichts... Arcanum hat mit der ref-variablen recht ich kenn mich damit aber nicht aus daher bitte ich um Hilfe!
 
Du hast deinen NPC im Editor ja irgendwo in einer Zelle abgesetzt.

DAS ist die Referenz. Und diese Referenz muss persistent sein und sollte sinnigerweise auch einen von dir vergebenen Namen haben, damit Du sie überhaupt per Script ansprechen kannst.

Wenn dein NPC im Editor die Editor ID MeinNPC hat, nennst Du die Referenz im Spiel MeinNPCRef.

Im Script verwendet Du dann MeinNPCRef.MoveTo player
 
[XXL]Jack schrieb:
set SklavinFollowTemp to TMSklavinRef.GetBaseActorValue Marksman
StopWaiting TMSklavinFollow
if ( SklavinFollowTemp == 0 )
Wait TMSklavinFollow
Wofür sind die Zeilen da, für was steht "set SklavinFollowTemp" un "TMSklavinRef.GetBaseActorValue Marksman"?
Und brauch ich den Teil überhaupt für den "beamscript" ?


Würd es nich einfach reichen sowas zu schreiben?:

Scriptname JackfellowScript

Begin ScriptEffectStart
JacksfellowRef.MoveTo player, 128, 0, 0
end
 
Zuletzt bearbeitet:
Wofür sind die Zeilen da, für was steht "set SklavinFollowTemp" un "TMSklavinRef.GetBaseActorValue Marksman"?
Und brauch ich den Teil überhaupt für den "beamscript" ?
Davon brauchst Du nix

Sieht aus, als würde die Eigenschaft "Schütze" benutzt, um bestimmte Zustände von dem Püppi festzustellen. Das heisst, er gibt ihr z.B. den Wert 50 wenn sie folgen soll und das Follow-Package benutzt das als Condition.

Am besten wäre, Du tust so, als hättest Du das nicht gesehen. Gewöhn dir sowas bloss nicht an.

Würd es nich einfach reichen sowas zu schreiben?:

Scriptname JackfellowScript
Begin ScriptEffectStart
JacksfellowRef.MoveTo player, 128, 0, 0
end
jepp

...allerdings solltest Du das nur als Zauber machen, wenn das PI niemand ausser dir selber benutzen wird.

Wenn das als zauber gemacht wird, trainiert der Spieler damit zwangsläufig eine Magieschule. Angenommen Du stellst für den Zauber "Illusion" als Schule ein. Der Spieler hat - weiter angenommen - Illusion und Zerstörung bei seinen Hauptfähigkeiten und er will Zerstörung nach oben bringen. Dann würde er bei jeder Benutzung Illusion trainieren.

Im Endeffekt dürfte er den Zauber nicht benutzen, weil er sonst dadurch schneller im Level hochkommt, seine Figur aber nicht das verbessert, was sie eigentlich soll.

Da Du aber nicht weisst, was welcher Spieler machen will, kannst Du tun was Du willst - es ist immer falsch.

Besser wäre also ein Schmuckstück oder eine Spruchrolle.
 
Zuletzt bearbeitet:
Wie kann ich den Script dann zu einem Zauber umwandeln? Als Zauber Effekt wird der Script nämlich nicht angezeigt...
Ach und hättest du auch ne Idee wie ich meinen Npc neu bekleiden kann wenn seine Rüstung kapputt ist? (am besten wäre es wenn er sie selber reparieren könnte)
Danke für deine Hilfe!
 
Zuletzt bearbeitet:
[XXL]Jack schrieb:
Wie kann ich den Script dann zu einem Zauber umwandeln?
Siehe Antwort von Arcanum Antor. Um ein Script als Zauber-Effekt zu benutzen, muss da auch zwingend "Magic Effect" gewählt sein und nicht Object oder Quest.

Ach und hättest du auch ne Idee wie ich meinen Npc neu bekleiden kann wenn seine Rüstung kapputt ist?
Damit, dass er sie selber repariert, sehe ich schwarz - aber die einfachste (zugegeben nicht die eleganteste) Lösung wäre eine Standard-Rüstung, die Du einmal selber zusammenstellst, und die sich dann immer selbständig erneuert.

Nur, um das mal an einem Beispiel zu zeigen ... Angenommen, der soll immer in einer frischen Kettenrüste herumrennen, könnte das Script z.B. so aussehen (Das Script sollte auf einem Gegenstand laufen, den Du im Inventar hast).
[Alternativ kannst Du die Funktionen auch in deinen Move-Zauber mit reinpacken - also alles, was zwischen Begin MenuMode 1007 und End steht.]

Code:
Scriptname xxxJacksFellowScript

Begin MenuMode 1007
    JacksfellowRef.MoveTo Player
    JacksfellowRef.RemoveAllItems
    JacksfellowRef.AddItem ChainmailBoots 1
    JacksfellowRef.AddItem ChainmailCuirass 1
    JacksfellowRef.AddItem ChainmailGauntlets 1
    JacksfellowRef.AddItem ChainmailGreaves 1
    JacksfellowRef.AddItem ChainmailHelmet 1
    JacksfellowRef.AddItem ChainmailShield 1
    JacksfellowRef.AddItem WeapSilverMace 1
    JacksfellowRef.AddItem WeapSilverLongsword 1

    JacksfellowRef.AddScriptPackage JacksFellowDummyPackage
    JacksfellowRef.EvaluatePackage
End
Bei jedem Laden - also beim Betreten einer neuen Zelle oder beim Reisen - (MenuMode 1007 ist der LadeScreen) passiert dann folgendes:

MoveTo Player teleportiert den NPC zu dir, auch wenn er dir mal nicht automatisch durch ein Tor folgt (was oft genug vorkommt). Da Du ja geschrieben hast, dass er dir IMMER folgen soll, kann man das so machen - sonst müsstest Du eben Bedingungen definieren, wann er beim Laden zu dir moven soll.

RemoveAllItems entfernt dann seine komplette Ausrüstung.

Die Zeilen mit AddItem geben ihm danach die von dir ausgesuchten Rüsungsteile und Waffen.

Dann machst Du noch ein leeres Package, in dem NICHTS (N-I-C-H-T-S) eingetragen oder eingestellt ist, ausser
  • Package Type: Wander
  • Haken bei Armor Unequipped
  • Haken bei Weapons Unequipped
Das package bekommt den Namen JacksFellowDummyPackage und dein NPC bekommt das nicht im Editor fest zugeteilt. Das Package wird nur angelegt. Den Rest macht das Script.

Wenn er nun beim Laden die neue Rüstung bekommen hat, wird ihm vom Script das Package gegeben, was ihm "befielt", Rüstung und Waffen abzulegen.

Danach bekommt er den Befehl seine Pakete zu checken. Dabei wird das Dummy-Package verworfen, weil es abgelaufen ist und er merkt, dass er eine Rüstung im Inventar hat, die er anziehen muss. Ansonsten raffen NPC das nicht, dass sie andere Klamotten anziehen sollen, weil diese Möglichkeit normalerweise im Spiel gar nicht gegeben ist.

Damit hat er dann immer eine frische und intakte Rüstung und Waffe.

Die Ausrüstung kannst Du auch leveln oder zufällig erzeugen lassen, aber das hier ist mal als Lösungsansatz gedacht, wenn Du nicht zwingend an sein Inventar willst.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: johannes89
Dann müsste aber noch eine Variable rein, so dass er mir nicht von Anfang an folgt sondern erst wenn ich ihn in der Stadt angequatscht und ihm gesagt hab, dass er mir folgen soll oder?
 
[XXL]Jack schrieb:
Dann müsste aber noch eine Variable rein, so dass er mir nicht von Anfang an folgt sondern erst wenn ich ihn in der Stadt angequatscht und ihm gesagt hab, dass er mir folgen soll oder?
jepp
Code:
Scriptname xxxJacksFellowScript

Short FollowMe

Begin MenuMode 1007
    If FollowMe != 0
        JacksfellowRef.MoveTo Player
        JacksfellowRef.RemoveAllItems
        JacksfellowRef.AddItem ChainmailBoots 1
        JacksfellowRef.AddItem ChainmailCuirass 1
        JacksfellowRef.AddItem ChainmailGauntlets 1
        JacksfellowRef.AddItem ChainmailGreaves 1
        JacksfellowRef.AddItem ChainmailHelmet 1
        JacksfellowRef.AddItem ChainmailShield 1
        JacksfellowRef.AddItem WeapSilverMace 1
        JacksfellowRef.AddItem WeapSilverLongsword 1

        JacksfellowRef.AddScriptPackage JacksFellowDummyPackage
        JacksfellowRef.EvaluatePackage
    EndIf
End
Die Variable kann z.B. mit
Set JacksfellowRef.FollowMe To 1
von einem Quest oder einem anderen Script aus gesetzt werden
 
Zuletzt bearbeitet:
  • Like
Reaktionen: [XXL]Jack
Dann kommt FollowMe is ne unbekannte varible obwohl die im script steht :huh:
Der Script sieht bei mir jetzt so aus :
Scriptname xxxJacksFellowScript

Short FollowMe

Begin MenuMode 1007
If FollowMe != 0
JacksfellowRef.MoveTo Player
JacksfellowRef.RemoveAllItems
JacksfellowRef.AddItem ElvenBoots 1
JacksfellowRef.AddItem ElvenCuirass 1
JacksfellowRef.AddItem ElvenGauntlets 1
JacksfellowRef.AddItem ElvenGreaves 1
JacksfellowRef.AddItem ElvenHelmet 1
JacksfellowRef.AddItem ElvenShield 1
JacksfellowRef.AddItem WeapElvenBow 1
JacksfellowRef.AddItem GuardsSword 1
JacksfellowRef.AddItem Torch02 10
JacksfellowRef.AddItem EncArrow5ElvenShockDamage 500

JacksfellowRef.AddScriptPackage JacksFellowDummyPackage
JacksfellowRef.EvaluatePackage
EndIf
End
 
Zuletzt bearbeitet:
[XXL]Jack schrieb:
Dann kommt FollowMe is ne unbekannte varible obwohl die im script steht
Das ist ... merkwürdig. Schau dir das bitte nochmal genau an. Wenn das Script so ist, wie Du das angegeben hast kann FollowMe nicht als Fehler angemeckert werden.

Übrigens Tippe ich mal, dass das mit dem Bogen nix gibt, den ich da in deinem Script sehe. Beobachte den NPC mal, wenn er den Bogen gegen Gegner benutzt, ob da WIRKLICH Pfeile fliegen und ob der damit Schaden macht.
Ich bin der Meinung, dass der nur die Animationen abspielen wird und so tut als ob - in Wirklichkeit aber keinen Schaden macht, weil gar keine Pfeile auf den Gegner geschossen werden.
 
Also Pfeile hat er bis jetzt immer geschossen mit genau dieser ausrüstung ob der Gegner Schaden bekommt weiß ich nicht darauf achte ich meistens in nem Kampf net...
Und den Script hab ich nur kopiert un hier eingefügt steht also genauso bei mir im Editor...
Ich hab das "Set xxxJacksFellowScript.FollowMe To 1" in einem Topic als result script benutzt. Also wenn ich einen Npc darauf anspreche sollte er den Script aktivieren...
 
[XXL]Jack schrieb:
"Set xxxJacksFellowScript.FollowMe To 1" in einem Topic als result script benutzt.
super .. da hab ich auch Müll geschrieben :/

Das müsste Set JacksfellowRef.FollowMe To 1 heissen - entfällt aber, falls Du das umschalten der Pakete (folgen / nicht folgen) so machst, wie hier beschrieben.


Falls Du dafür noch keine Lösung hast, kannst Du eine Faction mit dem Namen JacksfellowFaction anlegen. Die Faction bekommt mindestens die Ränge 0 & 1 und wird vor dem Spieler versteckt (Haken bei "Hidden from PC")

Dann bekommt das Follow-Package als Condition
GetFactionRank JacksfellowFaction == 1

Wenn Du dann als Result bei dem Topic im Quest
JacksfellowRef.SetFactionRank JacksfellowFaction, 1
setzt, startet das Follow-Package

JacksfellowRef.SetFactionRank JacksfellowFaction, 0

schaltet das Follow aus und könnte z.B. ein anderes Package aktivieren, welches
GetFactionRank JacksfellowFaction == 0
als Condition verwendet.

So kannst Du nur über das Verändern des Ranges in dieser Dummy-Faction beliebige Pakete aktivieren.

Um sicherzustellen, dass dein Script den NPC nur moved und neu ausrüstet, wenn er das Follow-Paket abarbeitet, muss das Script noch angepasst werden

Code:
 Scriptname xxxJacksFellowScript

Begin MenuMode 1007
  [COLOR=SeaGreen][B]If JacksfellowRef.GetFactionRank [/B][/COLOR][COLOR=Green][B]JacksfellowFaction[/B][/COLOR][COLOR=SeaGreen][B] == 1[/B][/COLOR]
   JacksfellowRef.MoveTo Player
   JacksfellowRef.RemoveAllItems 
   JacksfellowRef.AddItem ElvenBoots 1
   ... usw

---
[COLOR=SeaGreen][COLOR=black]Weil [/COLOR][/COLOR][I][B][COLOR=black]I[/COLOR]f FollowMe[/B][/I] eigentlich gar nicht mehr mehr gebraucht wird.
Das Setzen der Variable als Result im Topic entfällt dann auch.

Da der NPC immer in dieser Faction bleibt und sich nur sein Rang ändert, kannst Du dort auch sein Verhältnis zu anderen Factions einstellen. Also z.B. BanditsFaction -100 usw. Das würde dann sein Verhalten beim Eingreifen in Kämpfe bzw. seine Bereitschaft, selbständig anzugreifen, beeinflussen.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: johannes89
Danke jetzt hab ich keine Fehlermeldung bekommen...:)
Du bist echt eine große Hilfe für mich langsam versteh ich das Scripten allerdings ist mir das mit den Variablen noch was unverständlich ma schaun wo ich das ma lernen kann. Ich weiß net wann man short,long usw. so braucht.
Ich hab gehört das einer im Forum es geschaft hat eine Putzfrau zu machen...könnte derjenige mal sagen wie das zu realisieren ist?
 
[XXL]Jack schrieb:
allerdings ist mir das mit den Variablen noch was unverständlich
Das ist nicht sooo schwierig.

Es gibt bei TES-Script nur 4 Typen, die man vereinfacht so darstellen kann

Short - für ganze Zahlen (Integerwerte) im Bereich +/- 32.000. Das ist der Typ, der meist gebraucht wird, weil man in Scripten oft nur sehr kleine Zahlen halten muss.

Long - für ganze Zahlen (Integerwerte) im Bereich +/- 2.1 Milliarden.

Float - Fließkommazahlen, die auf 7 Stellen hinter dem Komma genau sind. Viele Werte, die im Spiel intern verwendet werden haben dieses Format - zum Beispiel die Zeit, oder Koordinaten.

Ref - ist die Referenz eines Objektes. Damit kann man z.B. Referenzen zur Laufzeit ermitteln und von dem einem an ein anderes Script weitergeben.

Set BottleRef To Player.PlaceAtMe Bottle 1,0,0 lässt z.B. eine Referenz des Objektes Bottle vor den Füßen des Spielers erscheinen, dessen "Referenzname" dann in BottleRef steht. Damit kann man dieses Objekt ansprechen, obwohl man zu der Zeit, als man das Script geschrieben hat, noch nicht wusste, welche Referenz es im Spiel haben wird.
---

INTERN benutzt Oblivion auch den Typ String - also Zeichenketten. Aber die kann man in Scripten nicht benutzen (bis auf Zellennamen und Actor-Namen, die man per Script verändern kann.).
 
Warum benutzt man nich einfach immer long als Variable? Da kann man doch theoretisch gar nichts mir falsch machen oder?