PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Feuerball



Dragonfire_Michael
11.09.2006, 14:00
Ist es möglich den Feuerball als eigenen Gegenstand zu benutzen, oder den Feuerball von einer bestimmten Position, vom Spieler aus gesehen, abzufeuern? Z.B. 20m über dem Spieler in Richtung Erde.

schneida
11.09.2006, 15:26
naja, du könntest ein Unsichtbares Objekt inform einer Falle machen (wie es sie auch schon bei den Deadra und Aylayden gibt) und die in den Himmel platzieren, dann kannst du Feuerbälle Eisbälle oder auch Blitze feuern!

Dragonfire_Michael
11.09.2006, 16:05
aber welches Objekt nehme ich dafür, oder wo finde ich es? Bis jetzt hab ich im CS noch keinen Feuerball gefunden, und nen neues Objekt mit dem Mesh von nem Feuerball funzt nicht, wird nicht angezeigt.

schneida
11.09.2006, 17:10
aber welches Objekt nehme ich dafür, oder wo finde ich es? Bis jetzt hab ich im CS noch keinen Feuerball gefunden, und nen neues Objekt mit dem Mesh von nem Feuerball funzt nicht, wird nicht angezeigt.

klar das das mesh eines Feuerballs nicht funts! ich such dir schnell den Script für das Objekt raus! edite den post entsprechend!


scn DEIN SCRIPTNAME

; come within range and this thing will shoot a fireball at you (range is 1200)

float timer
short ready
short inRange
short disabled
ref mySelf
ref myParent
short next
short SpellRank

begin onActivate

if isActionRef player == 0
if disabled == 0
set disabled to 1
set timer to 0
else
set disabled to 0
endif
endif

end

begin gameMode

if disabled == 0

if getDistance player < 1200 && timer <= 0
if getDistance player > 600
set inRange to 1
endif
endif

if timer <= 0 && inRange == 1
playgroup forward 0
set ready to 1
set timer to 6
set inRange to 0
endif

;This section will choose the trap spell based on the PC's level... hopefully
if player.GetLevel <= 7
set SpellRank to 1
elseif ( player.GetLevel >= 8 ) && ( player.GetLevel <= 15 )
set SpellRank to 2
elseif ( player.GetLevel >= 16 ) && ( player.GetLevel <= 20 )
set SpellRank to 3
elseif ( player.GetLevel >= 21 )
set SpellRank to 4
endif

; daisy-chain
if next == 1 && timer <= 5
set mySelf to getSelf
set myParent to getParentRef
myParent.activate mySelf 1
set next to 0
endif

if timer <= 4 && ready == 1
; check to make sure player is still in range
if getDistance player < 1200 && getDistance player > 400
;Debug message
;message "Rank %.0f Fireball", SpellRank, 10
if SpellRank == 1
cast StandardFireDamageTarget1Novice player
elseif SpellRank == 2
cast StandardFireDamageTarget2Apprentice player
elseif SpellRank == 3
cast StandardFireDamageArea3Journeyman player
elseif SpellRank == 4
cast StandardFireDamageArea4Expert player
endif
endif

set ready to 0
endif

if timer > 0
set timer to timer - getSecondsPassed
endif
endif
end



so ungefähr müsste das aussehn! das legst du auf ein kleines oder Unsichtbares Static, und das ganze müsste funktionieren, den abstand kannst du noch ändern!

Dragonfire_Michael
11.09.2006, 17:32
Kann man dieses Static so über dem Spieler platzieren, sodass es "mitwandert" wenn der Spieler geht? Kann man das Script so abwandeln dass, es in einem best. Bereich eine best. Anzahl an Feuerbällen abschießt, oder auf NPC`s in der nähe des Spielers?

schneida
11.09.2006, 17:53
irgendwie sicher, aber nur wie keine ahnung!

Das mitwandern, weiß ich nicht, aber müsste mit set position cords oder so funktionieren, schau am besten mal in die Englische CS Wiki! Dort findest du sicher was! Die Frequenz kann man umstellen, und wenn du weißt wo dein Spieler hingeht wär das kein Problem!

edit: mir kommt gerade eine Idee! Villeicht könnte man es ins Wetter integrieren! sowas hab ich schonmal gesehn, einen Zauber (in nem mod) der heißt Blizzard, plötzlich werd es windig und schneit, und dann fliegen Eisbälle vom hImmel! ich schau mal!

Brausebart
12.09.2006, 12:20
Kann man dieses Static so über dem Spieler platzieren, sodass es "mitwandert" wenn der Spieler geht? Kann man das Script so abwandeln dass, es in einem best. Bereich eine best. Anzahl an Feuerbällen abschießt, oder auf NPC`s in der nähe des Spielers?
In einer Mod von mir verwende ich ein ähnliches System. Dazu benutze ich einen Activator, dem ich die \meshes\magiceffects\null.nif zugewiesen habe. Dadurch wird er unsichtbar. Den Activator habe ich dann in irgendeiner Ecke in die Welt gesetzt, damit man ihm eine Referenz zuordnen kann.

Die Positionierung über dem Player geht dann relativ einfach per

ActivatorRef.MoveTo Player, 0, 0, hoehe

Zu beachten ist nur, dass das Script, welches den Activator bewegt, auf einem Gegenstand o.ä. liegen muss, den der Player bei sich trägt. Würde man das Script auf den Activator selbst legen, würde es nicht ausgeführt, solange sich der Player nicht in der selben Zelle wie der Activator aufhält.

Das Abschießen der Feuerbälle ist ansich auch ziemlich simpel:

ActivatorRef.Cast SpellID TargetRef.

Das Problem an der Sache ist, dass man die TargetRef kennen muss. Einfach geht's, wenn Du z.B. einen zweiten Activator verwendest, den Du nach einem Zufallsmuster irgendwo in der Nähe des Players plazierst. Dann lässt Du den ersten Activator auf den zweiten schießen.

Kniffliger wird's, wenn Du gezielt auf die Leute in der Nähe schießen möchtest, da Du dazu erstmal deren Ref. rauskriegen musst. Wie man das machen kann, ist in diesem Wiki-Artikel beschrieben:

http://cs.elderscrolls.com/constwiki/index.php/Reference_Variables_for_Nearby_Actors

Das Funktionsprinzip besteht darin, mit dem Activator einen unschädlichen, unsichtbaren Flächeneffekt-Zauber auf den Player abzufeuern. Im SpellEffekt-Script des Zaubers, das anschließend ja auf jedem im Umkreis des Players getroffenen Ziel läuft, wird dann per GetSelf die Ref. ermittelt und in einer Art Tabelle eingetragen. Diese Referenzen könntest Du dann als TargetRef für den Feuerzauber benutzen.

Und vielleicht auch noch interessant:
http://cs.elderscrolls.com/constwiki/index.php/Casting_Spells_From_An_Activator

Dragonfire_Michael
12.09.2006, 16:28
cool, thx, noch 3 Fragen:

1.@Brausebart:Sieht das nicht noch besser aus wenn in nem best. Bereich um den Spieler einschlagen und dann NPC`s in einem best. Bereich verwunden? (so à la GII)

2.@Brausebart:Wie heußt denn dein Mod?

3.Gibt es den Zauber Feuerregen schon als Mod? Nicht dass ich mir die Mühe umsonst mache:D

4.Wenn es den Mod noch nicht gibt, könnte ein Moderator den Thread in "[WIP] Zauber Feuerregen" umbenennen?

Edit:
Hab nun folgendes Script gemacht:

scn Feuerregen

ref FeuerregenActivator

begin OnEquip

FeuerregenActivator.MoveTo Player, 0, 0, 200

FeuerregenActivator.Cast 000A97DF player

end

und auf den Ring gelegt, Activator ist auch in meiner Testwelt, ich lege den Ring an und... nichts passiert, was hab ich falsch gemacht?
FeuerregenActivator ist dieses unsichtbare Objekt, 000A97DF die ID des Feuerballs

Brausebart
13.09.2006, 00:41
So viele Fragen... ;)

Ich fang mal mit der letzten an, weshalb das Script nicht funktioniert.

1.
Die Referenz-ID für den Activator musst Du dort festlegen, wo Du ihn in Deine Testwelt gesetzt hast. Also im Fenster "Cell View" die Zelle markieren, dann rechts in der Liste auf den Activator Rechtsklicken, dann im Kontextmenü Edit auswählen. In der Maske gibst Du dann im obersten Feld "Reference Editor ID" die Bezeichnung ein. Unten in der Maske musst Du außerdem noch "Persistent Reference" anhakeln.

Im Script kannst Du den Activator dann unter der oben vergebenen Bezeichnung direkt ansprechen. Du musst dafür keine Referenz-Variable definieren.

In Deinem momentanen Script hast Du hingegen mit ref FeuerregenActivator lediglich eine Referenz-Variable deklariert, dieser aber nirgends eine Objekt-Referenz zugewiesen. Daher kann das Script auch nicht "wissen", welches Objekt damit gemeint ist.

2.
FeuerregenActivator.Cast 000A97DF player
Hmm, ich will's jetzt nicht mit 100%iger Gewissheit behaupten, aber bislang dachte ich, dass FormIDs in Scripten nicht zulässig sind. Hat der Script-Compiler die Zeile oben gefressen? Meiner Meinung nach müsste es:

FeuerregenActivator.Cast StandardFireDamageTarget1Novice player
heißen.

3.
FeuerregenActivator.MoveTo Player, 0, 0, 200
Die Höhe 200 ist recht niedrig, das entspricht nur etwa Kopfhöhe. Wenn's mal ein gewaltiger Feuerregen werden soll, der aus dem Himmel niederprasselt, wirst Du den Wert sicher noch höher setzen müssen. Aber das kannst Du ja ausprobieren.

Zu Deinen weiteren Fragen:

zu 1.
Das sähe bestimmt beeindruckend aus. In die Richtung ging meine Anregung, einen Activator auf einen zweiten schießen zu lassen. Natürlich nicht nur einmal, sondern mehrfach kurz hintereinander bei jeweils anderer Position des Ziels. Man könnte auch noch die Position des schießenden Activators variieren oder mehrere verwenden. Wenn Du den Feuerbällen einen Flächeneffekt verpasst, treffen sie auch nahestehende NPCs. Das ganze zeitlich richtig abgestimmt und dosiert gibt sicher einen schönen Feuerzauber. :)

zu 2.
Meine Mod fügt einen Blackjack (diesen Knüppel aus Thief3, mit dem man Leute K.O. schlagen kann) ins Spiel ein. Die "Zauberei" findet dort aber nur im Hintergrund statt, sie ist nur Mittel zum Zweck. Mehr hier:
http://tes-oblivion.de/forum/thread.php?threadid=13714

zu 3.
Ich schätze schon, dass es vermutlich irgendwo schon so eine Art Feuerregen-Zauber gibt. Genau weiß ich's aber nicht. Doch selbst wenn, lass Dich davon nicht abhalten und mach Deine eigene Version, wenn Du Spaß dran hast. :A

Dragonfire_Michael
13.09.2006, 15:00
cool, thxhttp://www.multimediaxis.de/images/smilies/old/sm_12.gif
ich werds mal versuchen umzusetzen

also die FormID hat der Compiler geschluckt ohne zu murren8)

Dragonfire_Michael
13.09.2006, 16:27
Wisst ihr wie man einen Activator mit referenz per script in der welt erstellt? -> hat sich erledigt, nicht nötig

Aber, wie ändert man das Wetter in das wie bei Oblivion Toren? Diesen roten Himmel? -> hat sich erledigt

Edit: Sry für Doppelpost