PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage nach Anwendung (vielleicht ein Script?)



Nimbus
06.07.2009, 14:21
Gibt es einen Script das wenn ich im CS ein Buch verfasse immer der Name des Spielers drin steht also zum Beispie, man kriegt eine Besitzerurkunde in der folgendes steht:

Eigentümer: Name des Spielers
Wo? Haus in Bruma

und zwar soll des so funktionieren das egal wie ich den Charakter nenne der Name hinter Eigentümer steht hoffe auf positive Antwort.

Schattenläufer
06.07.2009, 19:20
Das ging in Morrowind, ist in Oblivion aber nicht mehr möglich. ;(

Mit OBSE ließe sich eventuell der Text eines Buches verändern, das würde dann allerdings über ein Script laufen, wäre also kein einfacher Befehl in dem Fenster, in dem du das Buch schreibst. Außerdem würde es eben OBSE benötigen.

Nimbus
07.07.2009, 13:36
schade... :(, da verfließen so meine Vorstellungen *schluchz

Low Post
07.07.2009, 13:51
Mit OBSE wäre es evtl. möglich, wenn auch nur über Umwege.
Das Problem ist, dass es leider nicht den Befehl SetBookText gibt. Deswegen müssten man über OpenTextInput arbeiten.


Wie genau das funktioniert könnte man z.B. bei Kyoma's Journal Mod nachschauen, da müsste man halt nur noch das schreiben rauslöschen.
Das mal eben nebenher zu erledigen wird allerdings nicht möglich sein. :(

Edit:
Hab gerad nachgefragt und Scruggsy hat gemeint so was wäre mit SetMenuStringValue (http://www.obse.silverlock.org/obse_command_doc.html#SetMenuStringValue) möglich.

Nimbus
07.07.2009, 18:01
hm anscheinend ja aber ich benutze kein OBSE und habe es eigentlich auch nicht vor da ich nur Gelegenheitsmodder für kleinere Sachen bin.

Nimbus
24.07.2009, 16:18
nun eine wietere Frage wie mach ich das wenn ich eine Person anspreche sie mir folgt und wenn ich sie wieder anrede sie wartet und so weiter?

Low Post
24.07.2009, 17:47
Du musst in das Result Script des Dialogs den entsprechenden Befehl schreiben.
Dazu verwendest du entweder Add (http://cs.elderscrolls.com/constwiki/index.php/AddScriptPackage)/RemoveScriptPackage (http://cs.elderscrolls.com/constwiki/index.php/RemoveScriptPackage), oder du setzt eine Variable (Global/Quest/Persistent Reference), die du dann in den Conditions der Packages abfragst.


z.B. hat das QuestScript der Quest QuControlPackages die Variable bFollow.

In die Condition eines Travel-Packages (ganz oben in der Package-Liste des NPCs) mit PlayerRef als Target fügst du eine Abfrage nach GetQuestVariable, QuControlPackages, bFollow != 0 ein.

In das Result-Script für den Dialog, der das Folgen auslöst schreibst du folgenden Befehl:

set QuControlPackages.bFollow to 1

In das Result-Script für den Dialog, der das Folgen beendet schreibst du folgenden Befehl:

set QuControlPackages.bFollow to 0

Solange dem NPC kein ScriptPackage (via AddScriptPackage) verpasst wurde (natürlich vorausgesetzt, das Travel-Package ist in der Liste ganz oben) folgt dir der NPC nachdem der Dialog ausgelöst wurde, bis der andere Dialog an der Reihe ist.

Nimbus
24.07.2009, 21:12
werds morgen mal ausprobieren. oke ich kapiers net xD. kann man wenn es sich nicht unbedingt abwechseln muss auch einen unkomplizierten Skript in ResultSkript einfügen?

Nimbus
01.08.2009, 10:42
ja ich weiß ich nerve aber wie macht man, das wenn man ein Amulett oder einen Ring anlegt man selber und noch ein NPC auf eine andere Karte bzw. einen anderen Raum kommt?

Low Post
01.08.2009, 12:39
Geht MoveTo direkt in einem OnEquip-Block?
Falls nein musst du den Umweg über ein Variable gehen.


scn AmuletScript ;Am besten einen anderen Namen wählen, der hier ist doch recht allgemein gehalten

Begin OnEquip Player
[NPCRef].MoveTo [TargetRef]
Player.MoveTo [TargetRef]
End

Schattenläufer
01.08.2009, 13:34
MoveTo in einem OnEquip-Block: Geht, macht aber wohl Probleme (http://cs.elderscrolls.com/constwiki/index.php/Talk:MoveTo#Player.MoveTo_in_OnEquip.2FOnAdd_blocks)

MoveTo ist in vielen Fällen sehr hakelig und macht seeehr komische Sachen... also immer erst im CS Wiki oder sonstwo nachsehen, ob der gewünschte Weg nicht einen total unvorhersehbaren Effekt haben könnte.

Low Post
01.08.2009, 14:17
http://www.multimediaxis.de/images/smilies/old/s_032.gif

Dann eben anders::

scn AmuletScript ;Am besten einen anderen Namen wählen, der hier ist doch recht allgemein gehalten

Begin Gamemode
if ( Player.GetEquipped [Amulett] )
[NPCRef].MoveTo [TargetRef]
Player.MoveTo [TargetRef]
endif
End

Begin Menumode
if ( Player.GetEquipped [Amulett] )
[NPCRef].MoveTo [TargetRef]
Player.MoveTo [TargetRef]
endif
End

Schattenläufer
01.08.2009, 14:47
Ähmm, da müsste jetzt aber noch ein "UnequipItem"-Befehl drin vorkommen, oder? Sonst wird das doch zu einer Dauerschleife.

Der Umweg über die Variable würde es ermöglichen, dass das Amulett weiterhin getragen werden kann - also ungefähr in diesem Stil:



Begin OnEquip Player
Set AmulettWirdAngelegt to 1
End

Begin Gamemode
if AmulettWirdAngelegt = 1
[NPCRef].MoveTo [TargetRef]
Player.MoveTo [TargetRef]
Set AmulettWirdAngelegt to 0
endif
End


Hängt eben davon ab, was man genau haben möchte.

Low Post
01.08.2009, 15:11
Stimmt eigentlich.
Das kommt davon, wenn man sparsam mit Variablen sein will. :p

Nimbus
01.08.2009, 18:11
@LowPost dein letzter Post war kein Spam, oder? :D
Danke euch beiden werde es sofort einbauen :)

Low Post
01.08.2009, 18:19
Nö, wieso?
War voll zum Thema passend, ich habe einen Fehler zugegeben und außerdem bin ich hier Moderator und spamme deshalb per Definition nicht. :C


Edit:
Natürlich.
Jetzt aber mal Schluss hier, sonst artet das hier noch wirklich in Spam aus.

Nimbus
02.08.2009, 10:39
klar :D

Nimbus
09.08.2009, 10:54
Hm ich komm mit Scripts einfach net zurecht, weiß jemand nen Script mit dem ich, wenn ich auf ein Objekt (Activator) klicke ein Item bekomme? wenn ja bitte hier posten. Außerdem soll man dieses Item nur einmal am Tag bekommen und wenn man schon mal es aktiviert hat an diesem tag eine Nachricht kommt

Schattenläufer
09.08.2009, 12:40
Sieh dir mal das Script "AltaroftheNine" oder so ähnlich an... falls es irgendwie anders heißt und du es nicht findest: das ist das Script, das auf den Altaren in den Kirchen der Städte zu finden ist. Also einfach so eine Kirche laden und dann gucken, was für ein Script da drauf ist.

Die Altare funktionieren nämlich exakt so, wie du es beschreibst - nur, dass du kein Item erhältst, sondern ein Zauber auf dich gecastet wird. Die entsprechende Zeile müsstest du dann ändern - also, vom Schema her: anstatt "Cast SpellID spellTarget" musst du etwas im Sinne von "AddItem ItemID ItemTarget" hinschreiben.

Kopier das Script am besten einfach mal und ändere es dann so, wie du es nach dieser Beschreibung machen würdest. Dann schreib es hier rein und wir werden gucken, ob damit alles in Ordnung ist.

Low Post
09.08.2009, 13:42
"AddItem ItemID ItemTarget"

ItemTarget.AddItem ItemID ItemCount ^.^

Nimbus
09.08.2009, 14:39
ScriptName Suppentopf ;(den kann ich doch ersetzen, ursprünglich stand dran AltarofTheNine)

short doonce
short DayofLastUse
reftarget

Begin OnActivate
if IsActionRef player == 1

If GetDayOfWeek == DayOfLastUse
MessageBox "Du hast heute schon Suppe entnommen"
else
MessageBox "Ihr habt Suppe entnommen"
Player.AddItem 00Suppe 1
Set DayofLastUse to GetDayofWeek
endif
endif

else

Set target to GetActionRef
Player.AddItem 00Suppe 1

endif
end

begin gamemode
if doonce == 0 ;days ar numbered 0-6 - prevents first visit on 0 day and being told you´ve used it today
set DayofLastUse to 10
set doonce to 1

endif
end



So das war der Skript hab schon die überflüssige MessageBox gestrichen nämlich die wo erst abgefragt wird ob man ein Verbrecher ist.

Low Post
09.08.2009, 15:00
Ich hab das Script mal in Code-Tags gestopft. Lässt sich so imho besser lesen. ;)


Zuerst: Anmerkungen sollten mit einem ; beginnen, dann nennt sich das Kommentar und das CS meckert nicht mehr darüber (Rest der Zeile wird einfach ignoriert).


Um Target als eine Ref zu deklarieren musst du zwischen dem ref und dem Target ein Leerzeichen lassen, sonst meint das CS es sei ein Befehl und meckert, weil es den nicht gibt. ;)
Außerdem ist Target hier überflüssig, weil nicht verwendet.


Gleiches gilt für das else, welches einfach auf kein if zutrifft, da alle vorherigen schon ein endif hatten. Abgesehen davon ist das ziemlich sinnlos, es sei denn du willst auch NPCs mit Suppe vollstopfen. ^.^

Oh, und den ScriptNamen kannst und solltest du auch ändern. :)


ScriptName Suppentopf ;(den kann ich doch ersetzen, ursprünglich stand dran AltarofTheNine)

short doonce
short DayofLastUse

Begin OnActivate
if IsActionRef player == 1

If GetDayOfWeek == DayOfLastUse
MessageBox "Du hast heute schon Suppe entnommen"
else
MessageBox "Ihr habt Suppe entnommen"
Player.AddItem 00Suppe 1
Set DayofLastUse to GetDayofWeek
endif

endif
end

begin gamemode
if doonce == 0 ;days ar numbered 0-6 - prevents first visit on 0 day and being told you´ve used it today
set DayofLastUse to 10
set doonce to 1

endif
end

Nimbus
09.08.2009, 19:36
oke danke werds gleich einbauen

Noch eine ganz wichtige Frage. Wie kann ich machen das des erst überprüft ob man gewisse Gegenstände im Inventar hat und wen nicht der Skript net abläuft?

Nimbus
24.08.2009, 09:59
sorry für den Doppelpost ich weiß dafür gibts EDIT, des hab ich aber schon probiert und niemand antwortet :(, deshalb jetzt noch mal meine Frage, wie kann ich mit Conditions überprüfen ob jemand z.B. genügend Geld hat und wie kann ich des per Skript machen. Freue mich auf hoffentlich baldige Antwort.

Ach ja bevor ichs vergess wie macht man das ein Licht nur unter Tags leuchtet (im Interior) und ein anderes Licht nur Nachts?

eissceda
24.08.2009, 12:29
Mit einer if-Abfrage:


if (Player.GetItemCount Objekt > sollZahl)
Aktion1
else
Aktion2
endif
Anstelle von Objekt kommt die ObjektId des gewünschten Objektes und anstelle von sollZahl die benötigte Anzahl. Im Fall von Gold kannst du aber anstelle von GetItemCount GetGold verwenden(hier fällt Objekt weg). Bei Aktion1 kommt das was passieren soll wenn die Menge reicht und bei Aktion2 das was passiert wenn sie nicht reicht.

Nimbus
24.08.2009, 13:41
un wie frag ich des über die Conditions ab?

eissceda
24.08.2009, 14:18
Wenn du die Dialog-/Questbedingungen meinst:
Du wählst neu aus und anschließend unten die entsprechenden Funktionen und Werte.
Also bei Funktion GetGold, als Comparison > und bei Value den Geldbetrag. Funktionen gehen bei Value nicht allerdings kannst du dir wenn du Use Global anhakst eine globale Variable aussuchen mit der Verglichen wird.

Low Post
24.08.2009, 15:16
Ach ja bevor ichs vergess wie macht man das ein Licht nur unter Tags leuchtet (im Interior) und ein anderes Licht nur Nachts?

Script auf das Licht, das mit GetCurrentTime & Disable/Enable arbeitet.



sorry für den Doppelpost ich weiß dafür gibts EDIT, des hab ich aber schon probiert und niemand antwortet :(

Ab einem gewissen Zeitabstand ist ein Doppelpost kein Problem mehr. :)

Nimbus
24.08.2009, 15:30
danke euch zwein

Nochmals ganz viel Dank an euch beide, habt mir wirklich geholfen