PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Skriptthread



Lord Asgar
20.08.2007, 22:49
Ich hielt es mal für eine gute Idee , nen Thread aufzumachen , in dem jeder User reinposten kann , wenn er mal schwierigkeiten bei Scripts hat. Die anderen sollten ihm dann helfen.:)
(Sollte dieser Thread nicht erwünscht sein , dann wandeln wir ihn einfach in einen stinknormalen Scriptsuche-Thread um ^^)

Also : Mein Problem ist folgendes :
Ich will , dass der Spieler eine bestimmte Eigenschaft bekommt , sobald er sich auf den Stuhl setzt , an dem das Script hängt. Sobald er wieder aufsteht , soll die Eigenschaft verschwinden. Weiss jemand , wie ich das mache?Ich habe keinen passenden Befehl gefunden , um dem CS zu sagen , dass der Spieler sich auf den Stuhl setzen muss , damit er den Spell kriegt , bei begin onactivate macht er nix und kriegt nur den Spell. Und wie ich das CS dazu bringe , den Zauber beim aufstehen wieder zu entfernen , weiss ich auch nicht.:(

Lazarus
21.08.2007, 08:43
scn stuhlscript

short doonce

begin onActivate
if doonce == 0
player.addspell xyz
set doonce to 1
else
player.removespell xyz
set doonce to 0
endif
activate
end

Lord Asgar
21.08.2007, 12:17
Ja danke , das Script funktioiniert.:)

Ich wüsste jetzt gerne noch , was die Mods von der Idee mit dem Skriptthread halten.:D

Lilim ViperaVenata
21.08.2007, 12:26
Also, ich bin zwar kein Mod, aber ich vermute, dass trotzdem Einzelthreads bevorzugt werden, im Gegensatz zu gigantomanischen, alles-beantwortenden Threads. Ist übersichtlicher. Außerdem gibts doch von diesem Stil schon Threads. Also ich find einzelne Threads, wo schon in der Überschrift steht um welches Problem es geht, besser

Lord Asgar
22.08.2007, 00:33
Und wieder eine Skriptfrage : Wie kann ich in einem Activator etwas abfragen?
Also ich will folgendes : der Spieler aktiviert den Activator. Dann kommt eine Abfrage , ob er 5 gefüllte Seelensteine der kleinsten Größe im Inventar hat. Wenn ja , bekommt er einen Gegenstand und die Seelensteine werden entfernt. Wenn nein passiert gar nichts.
Weiss jemand , wie man das macht?

Katan
22.08.2007, 04:27
scn ActivatorScript

short doonce

Begin OnActivate Player

if ( player.getitemcount SoulGemEmpty1Petty >= 5 ) && ( doonce == 0 )
player.removeitem SoulGemEmpty1Petty 5
player.additem MeinGegenstand 1
set doonce to 1
endif

end

Indem doonce auf 1 gesetzt wird, wird sich das Script nicht wiederholen, sollte der Spieler deinen Gegenstand bereits erfolgreich erhalten haben.

Gothic_Freak
22.08.2007, 09:00
Dann poste ich hier auch mal: Ich will dass wenn ich einen Torhebel aktiviere, sich ein bestimmtes Tor 60 Einheiten Z bewegt (in die Höhe). Bei meinem eigenen Script ist das Tor aufgegangen sobald ich die Cell betreten habe. Desweiteren stieg es nicht 60 Einheiten in den Himmel sondern 1000. Habt ihr da vielleicht eine Idee was ich machen könnte?

P.S: An meiner Morrowind MOd mach ich natürlich auch weiter, ich will nur mal wissen wie das ganze in Oblivion aussieht.

MFG Gothic_freak

Rung
22.08.2007, 09:06
In Oblivion ist es in solch einem Fall das Beste, eine Animation für das Model zu erstellen, denn wenn Du das Objekt per Script bewegst, bleibt die Kollision am gleichen Ort. D.h. wenn Du Dein Tor hochfahren lässt, wird es zwar da oben sein, aber der Spieler wird dennoch nicht hindurchgehen können.;)

Lord Asgar
22.08.2007, 14:21
scn ActivatorScript

short doonce

Begin OnActivate Player

if ( player.getitemcount SoulGemEmpty1Petty >= 5 ) && ( doonce == 0 )
player.removeitem SoulGemEmpty1Petty 5
player.additem MeinGegenstand 1
set doonce to 1
endif

end

Indem doonce auf 1 gesetzt wird, wird sich das Script nicht wiederholen, sollte der Spieler deinen Gegenstand bereits erfolgreich erhalten haben.

Das heisst , wenn ich aus der 1 eine 0 machen , lässt sich der Vorgang beliebig oft wiederholen?(so wie ich es eigentlich will)

Katan
22.08.2007, 16:11
Nein. Wenn du es beliebig oft haben willst, lässt du die Variable einfach ganz weg. Das sähe dann so aus:


scn ActivatorScript

Begin OnActivate Player

if ( player.getitemcount SoulGemEmpty1Petty >= 5 )
player.removeitem SoulGemEmpty1Petty 5
player.additem MeinGegenstand 1
endif

end

Brausebart
22.08.2007, 22:10
Ich möchte mir dazu eine kleine Korrektur erlauben. Man liest es zwar durchaus häufig in Skripten, doch OnActivate (http://cs.elderscrolls.com/constwiki/index.php/OnActivate) Player funktioniert - im Gegensatz zu OnTrigger (http://cs.elderscrolls.com/constwiki/index.php/OnTrigger) Player - so nicht. Vermutlich rührt daher das Missverständnis. Der Skript-Compiler akzeptiert die OnActivate-Zeile zwar ohne Murren, doch im Spiel wird die Referenz schlicht nicht beachtet.

Möchte man die Ausführung eines OnActivate-Blocks auf einen bestimmten NPC bzw. den Player beschränken, ist stattdessen if IsActionRef RefID (http://cs.elderscrolls.com/constwiki/index.php/IsActionRef) zu verwenden. Das Skript müsste daher so aussehen:


scn ActivatorScript

Begin OnActivate

if (IsActionRef Player) && ( player.getitemcount SoulGemEmpty1Petty >= 5 )
player.removeitem SoulGemEmpty1Petty 5
player.additem MeinGegenstand 1
endif

end

Grüße
Brausebart

Lord Asgar
25.08.2007, 18:08
Wieder eine Frage : Sheogorath hat doch einen Spell , den er auf einen spricht wenn man ihn angreift. Nun will ich diesen Spell auch für den Spieler benutzbar machen , wenn er Sheogorath ist sodass er seine Feinde dorthin teleportieren kann. Ich habe alle Sachen , die den Player behindern aus dem Script gestrichen. Nun , das Problem ist : der Befehl lautet player.moveto [MARKER] im Orginalscript. Nun will ich das aber auf das feindliche Ziel übertragen. Also ich habe es schon mit Target.moveto und Targetref.moveto versucht , kein Erfolg. Was kann ich da machen?^^

Lazarus
25.08.2007, 18:26
Du musst den Script um folgende Zeilen ergänzen:


ref target
Kommt zwischen die erste Zeile, in der der Scriptname angegeben ist, und die erste begin-Zeile.


set target to GetSelf
Kommt in den begin ScriptEffectStart-Block.

dann kannst du den Befehl target.movetomarker benutzen.

Lord Asgar
28.08.2007, 23:06
Mich würde mal folgendes interessieren : Wäre es möglich , ohne gleich Himmel und Hölle der Modwelt in Bewegung setzen zu müssen , einen Zauber zu scripten , der dem Spieler den letzten Zauber , den das getroffene Ziel innerhalb der letzten Minute vom Wirken des Skript-Zaubers an gewirkt hat , zu lehren? Also eine Art Kopier-Zauber? Oder wäre das viel zu kompliziert?

~Ryan~
02.09.2007, 19:41
Es geht -- es geht alles... aber mir fallen jetzt nur wege ein (und ich kenne den OBSE nicht - vielleicht vereinfacht der das) wo du halt wirklich jeden Zauber im Spiel abcheckst und dann dem Spieler zufügt... WOBEI: Man anmerken muss, dass nicht jeder Zauber im Spiel auf dem Spieler zugänglich ist... daher wäre es nicht sinnvoll z.B. einen Zauber dem Spieler zuzufügen der z.B. 30 Chameleon hat, wenn er den schon zwei Mal unter einem anderen Namen bekam. Weil das passiert faktisch im Spiel.

Gruß
%


Und in dem Bezug:


Also, ich bin zwar kein Mod, aber ich vermute, dass trotzdem Einzelthreads bevorzugt werden, im Gegensatz zu gigantomanischen, alles-beantwortenden Threads. Ist übersichtlicher. Außerdem gibts doch von diesem Stil schon Threads. Also ich find einzelne Threads, wo schon in der Überschrift steht um welches Problem es geht, besser

und dem späteren Thread-Verlauf... : ROFL!
Trostkätzchenbilder gibt es im Thread von Gammel und Burny... lol

Lord Asgar
06.09.2007, 22:50
Es geht -- es geht alles... aber mir fallen jetzt nur wege ein (und ich kenne den OBSE nicht - vielleicht vereinfacht der das) wo du halt wirklich jeden Zauber im Spiel abcheckst und dann dem Spieler zufügt... WOBEI: Man anmerken muss, dass nicht jeder Zauber im Spiel auf dem Spieler zugänglich ist... daher wäre es nicht sinnvoll z.B. einen Zauber dem Spieler zuzufügen der z.B. 30 Chameleon hat, wenn er den schon zwei Mal unter einem anderen Namen bekam. Weil das passiert faktisch im Spiel.

Gruß
%


Und in dem Bezug:



und dem späteren Thread-Verlauf... : ROFL!
Trostkätzchenbilder gibt es im Thread von Gammel und Burny... lol

In dem Falle : Wie müsste so ein Script denn etwa aussehen? Ich würde mich auf einige bestimmte Spells beschränken. ^^

Noch eine andere Sache : Ich möchte ein Script an ein Objekt hängen : Es ist ein Stück Papier. Solange der Spieler es im Inventar oder in einer Truhe hat , soll nichts passieren. Aber sobald er es einfach wegwirft , soll ein Countdown von 10 sec. starten , danach soll vom Papier aus ein Feuerzauber mit Areadamage gecastet werden , anschliessend soll sich das Papierchen auflösen. Wenn der Spieler das Papier vor ablauf des Countdows wieder aufnimmt , sollte der Countdown resettet werden. Achja, und der Feuerschaden sollte "neutral" sein , also auch den Spieler verletzen können. Und ich will darauf ein Gebrauchsitem machen , also sollte das Script nicht nur einmal funktionieren^^