Construction Set Skriptthread zum Construction Set

Erstelle eine Eigenschaft für die Kreatur mit 100% Schild (ggf auch noch 100% Magie widerstehen). Per Scriptanfrage wird der Zauber dann entfernt, wenn der Spieler eine bestimmte Waffe in der Hand hält.

Code:
scn GEGNERSCRIPT

begin gamemode
if player.getweaponanimtype==1
removespell EIGENSCHAFTS-ID
else
addspell EIGENSCHAFTS-ID
endif
end
WeaponAnimType 1 bedeutet, dass die Kreatur nur mit einer einhändigen Waffe verwundet werden kann, 2 entspricht einer beidhändigen, 3 einem Bogen und 0 dem Nahkampf.

Für die Skill-Unterscheidung sähe das Ganze so aus:
Code:
scn GEGNERSCRIPT

begin gamemode
if player.getweaponskilltype==1
removespell EIGENSCHAFTS-ID
else
addspell EIGENSCHAFTS-ID
endif
end
WeaponSkillType 1 bedeutet, dass die Kreatur nur mit einem Schwerte verwundet werden kann, 2 entspricht einer stumpfen Waffe, 3 einem Bogen und 0 dem Nahkampf oder einem Stab.

Du könntest es auch so einrichten, dass man eine ganz bestimmte Waffe braucht; dazu müsstest du dann der Kreatur eine REF zuweisen und dieses Script auf die Waffe legen:
Code:
scn WAFFENSCRIPT

begin onequip player
KREATUR-REF.removespell EIGENSCHAFTS-ID
end

begin onunequip player
KREATUR-REF.addspell EIGENSCHAFTS-ID
end
 
Zuletzt bearbeitet:
  • Like
Reaktionen: robinH
Folgendes vorweg: Ohne OBSE funktioniert da schonmal nichts (einige wollen das ja nicht benutzen, warum auch immer).
Ich gehe jetzt mal davon aus, dass nur der Spieler die Gegner besiegt/ihnen begegnet.
Dann sollte dieses Skript auf die Kreatur:

Code:
SCN ScriptName

Ref w
Ref w2
Short wType
Short d

Begin GameMode

let w := player.getequippedobject 16
let wType := getweapontype w
if(wType != 2) || (wType != 3)
   let w2 := w
   let w := 0
   let wType := 0
else
   let w := 0
   let w2 := 0
   let wType := 0
   return
endif

End

Begin OnHitWith w2 

let d := getattackdamage w2
modav2 health d

End

Dieses Skript checkt erstmal, ob der Spieler eine Hiebwaffe trägt (weapontype 2 und 3). Wenn nicht, soll, sobald die Kreatur mit dieser Waffe getroffen wird, der Schaden ihr wieder als Leben hinzugefügt werden.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: robinH
Vielen Dank für diese tollen Infos. Das bringt mich bestimmt weiter. Und gegen OBSE habe ich rein garnichts. Im Gegenteil ohne wäre Oblivion für mich undenkbar.

Allerdings kenn ich mich mit "Let" rein garnicht aus. Auch mit dem ":=" kann ich nicht viel anfangen.
Hast du dazu ein Paar Erklärungen?

Soweit ich das verstehe ist Ref W die Waffe und Ref W2 die Creatur richtig? Hm oder doch nicht.


Ich versuche das mal zu verstehen:

let w := player.getequippedobject 16
Setzte in die Ref w die Waffe, die der Spieler nutz ein.

let wType := getweapontype w
Setzte in wType den Waffentyp von der Waffe die in der RefW steht

if(wType != 2) || (wType != 3)
Wenn der WType ungleich 2 oder ungleich 3 hat

let w2 := w
setze in die Ref W2 die Ref W also die Waffe ein. Hm wenn Ref W2 die Creatur ist, dann .. also nun verstehe ich leider doch nichts mehr so richtig. Let funktioniert wohl doch anders.
let w := 0
setzte die Ref W auf 0- Die Waffe auf 0 setzten? Oder bedeutet es eine Variable zu entleeren?
let wType := 0
setzte den Waffentyp auf 0

else
Ist das nicht der Fall mache das irgendwie auch- Hm das hier verstehe ich jetzt nicht.
let w := 0
let w2 := 0
let wType := 0

return
Warum setzt du hier ein return?
endif

End

Begin OnHitWith w2
Wenn der Schlag mit Ref W2 aus geführt wird

let d := getattackdamage w2
Setze in d Den Schaden den die Creatur erleidet

modav2 health d
Erhöhe die Health um den Schaden


End

Wäre es nicht Sinnvoller "d" als float zu definieren. Oder hat ein Schaden immer runde Werte?

Wird man bei dieser Vorgehensweise das nicht sehen, dass der Kreatur Schaden ab und auf addiert wird. Das ist dann ja irgendwie seltsam. Oder arbeitet das Script so schnell, das der Vorgang eins zu eins umgesetzt wird?
Sprich der Spieler trift die Creatur und diese behält sofort ihre Lebenspunkte. Also der rote Balken ändet sich nicht.
 
Zuletzt bearbeitet:
Wenn der Actor nur Gefahr läuft, vom Spieler getötet zu werden, würde ich dir den Weg vom Waldmeister empfehlen: eine Kombination aus "getWeaponSkillType" und "getWeaponAnimType" sollte genau das gleiche bewirken wie "getWeaponType". Schwerer ist es die Waffenresistenz einzubinden, da die Gefahr besteht, dass der Spieler den Actor mit einem Schlag tötet. Du müsstest auf jeden Fall laufend die Gesundheit abfragen und nach jedem Treffer gegebenfalls die Differenz wieder hinzufügen. Schwerwiegender ist wahrscheinlich jedoch, dass dies nur für bestimmte Angreifer geht. Sonst kommt wieder OBSE ins Spiel. Da könntest du mit den Event-Handler-Funktionen bei jedem Schlag abfragen, wer der Angreifer ist und mit welcher Waffe geschlagen wurde...
 
  • Like
Reaktionen: robinH
Meine Variante macht den Gegner ja durch die Eigenschaften unverwundbar. Hab das Ganze vor Ewigkeiten selbst mal in einer Mod so benutzt, deshalb kann ich eig dafür garantieren, dass es damit funzt.
 
  • Like
Reaktionen: robinH
Da das mit dem OBSE Code noch zu viele Fragen aufwirft, werde ich mich erstmal der Waldmeistervariante zuwenden. Klingt ansich ganz schlüssig. Benötigt zwar immer 1 Script auf jede in Frage kommende Hiebwaffe (und das sind viele) und einen Zauberspruch auf jede betroffende Creatur ( auch sehr sehr viele). Aber es sollte trotz des erhöhten Aufwandes so wie du es sagst funktionieren. Und das tut es ja wie du bestätigst. Der weitere Vorteil. Es betrifft alle und nicht nur den Player. Auch alle CM-Partners können dann nur eine bestimmte Waffe nutzen um das Monster umzuhauen. War zwar erstmal so nicht angedacht. Bzw. so weit hatte ich garnicht gedacht. Macht aber durchaus Sinn. doch geht das mit

if player.getweaponanimtype überhaupt.

bezieht sich das auch auf einen CM-Partner?

Und wie ist es bei einem Begleiter wie zB. einen Hund. Dieser nutz ja keine Hiebwaffe und dürfte somit auch keinen Schaden verursachen.



Bei dem Gedanken kommt mir noch eine weitere Idee.


Betrift jetzt eher einen Vampir. Da diese aus Filmen bekanntlich nur getötet werden, indem man Ihnen etwas bestimmtes verabreicht, dachte ich mir folgendes:

Ist es möglich, dass eine Creatur wenn sie dann umgehauen wurde und am Boden ist nach einer Weile einfach wieder gesund aufsteht?
Es sei denn es wird sobald die Creatur bewustlos ist zB. ein bestimmter Dolch genutzt, der die Creatur für immer tötet.

Geht so was? Hat jemand eine Idee wie das sich umsetzen lässt?
 
Zuletzt bearbeitet:
Also die Zeilen mit "player." fragen die vom Spieler ausgerüstete Waffe ab. Während er eine gültige Waffe benutzt kann die Kreatur von jedem getötet werden.
Zum Thema Wiederauferstehung: Dafür würde ich eine Short-Variable einbinden, nennen wir sie mal "down" und eine Float-Variable "timer"

Code:
begin ondeath
if down==0
set down to 1
endif
end

begin gamemode
if down==1
set timer to (timer + getsecondspassed)
   if timer >= 5
   resurrect 1
   set down to 0
   set timer to 0
   endif
else
return
endif
end

begin onhitwith BESTIMMTER-DOLCH-ID
if down==1
set down to 2
kill
endif
end
Die Wiederauferstehungszeit von 5 Sekunden kannst du natürlich beliebig anpassen.
 
  • Like
Reaktionen: robinH
Also "player.getWeaponType" (oder Ähnliches) bezieht sich nur auf den Spieler und ohne OBSE hast du keine Möglichkeit (zumindest keine zuverlässige), erfahren, von wem der Actor nun getroffen wird. Das geht wie gesagt mit den Event-Handler-Funktionen. Du müsstest also für jeden Actor, der in der Lage ist (räumlich und zeitlich), einen Treffer zu landen eigene Abfragen erstellen. Möglich ist es vielleicht, wenn die Begleiterreferenzen irgendwo als Ref-Variablen weitergegeben werden. Dann könntest du damit arbeiten. Ich bin mir aber nicht sicher, ob der "onHit"-Block mit einer Variablen als Parameter funktioniert, wie Kahmul vorgeschlagen hatte.

Das mit dem bestimmten Dolch bei der am Boden liegenden Kreatur ist auf jeden Fall machbar. Das sollte mit einer Kombination aus "onKnockOut"-, "onHitWith"- "onDeath"- und "GameMode"-Blöcken gehen (oder ein Skripteffekt auf der betreffenden Waffe). In Nehrim wurde damit auch an einer Stelle gearbeitet, nur, dass es dort ein bestimmter Zauber war.

Edit: Drängler!
 
  • Like
Reaktionen: robinH
Danke für diese Super Hilfsansetzte. Die Variante von Waldmeister hat soweit geklappt. Das mit dem ONHItWith werde ich als nächstes Testen.

So wie es klingt müsste das aber auch funktionieren.

Es gibt noch eine Schwierigkeit. Die Abfrage startet immer erst, sobald eine Hiebwaffe im Einsatz ist. Ich verstehe bloss nicht warum. Somit muss der Zauberspruch mit 100% Schild bereits im Inventar liegen. Dachte ich kann mir das sparen allen Creaturen die es betrifft den Zauber ins Inventar zu legen. Deren Steuerung klappt irgendwie erst wie gesagt wenn die Hiebwaffe zum Einsatz kommt. Erst dann wird der Zauber entfernt und entsprechend wenn nötig wieder hinzugefügt.

Wollte an dieser Stelle das Script zeigen, doch ich habs irgendwie vergessen es auf Stick zu ziehen. Also dann beim nöchsten mal.

Doch als Fazit kann ich schon festhalten, es ist ein Mordsgaudi. Mann kloppt wie doof auf die Creatur ein und die juckt es nicht. Nimmt man dann die Hiebwaffe und Beng- weg ist sie.
Hab auch ein Schutz gegen Blitz und Feuer mit eingebaut. Das Feuer bruzelt schön, doch es juckt die Creatur nicht im geringsten. Bei einem Blitz wird sie etwas zurückgestossen nimmt aber keinen Schaden. Auch nicht schlecht.

Nur schade das das mit den NPCs nicht so ohne weiteres klappt. Bzw ich nicht wüsste, wie sich das umsetzen lässt.
Allerdings kann, wenn man selbst die falsche Waffe benutzt auch der Partner nichts anrichten. Irgendwie passt das dann wieder. Wäre nur dumm, wenn der Hund als Begleiter die Creatur durch beissen verletzt und das eigene Schwert nichts ausrichtet. Doch dem ist ja zum Glück nicht so.
 
Zuletzt bearbeitet:
Ja, so wie ich es aufgeschrieben hab, müssen die Eigenschaftne bei jeder Kreatur rein. Aber man kanns bestimmt auch umgehen, indem du einfach die Zeilen umänderst. Ich überleg grade mal...

Edit: Tausche mal "add" mit "remove" und ersetze die "==" durch "!="
 
  • Like
Reaktionen: robinH
Das mit den Tausch habe ich probiert doch das funktionierte überhaupt nicht.

Hier mal das Script vor den Tausch.

short WaffenVARI

Begin GameMode

;==========================TEst ob HiebWaffe Skilltyp 2 oder 2Hand AnimaTyp 2 ====================

;-----Hiebwaffe---------------------
if player.getweaponskilltype==2

if WaffenVARI==0 || WaffenVARI==10
removespell A00SkelettShield
; printToConsole "RAFOO: Waffeschaden Hiebwaffe. Set VARI =2 VARI-Hieb ist= %.0f " WaffenVARI
set WaffenVARI to 2
endif

;----Zeihandwaffe-----------------
elseif player.getWeaponanimType==2

if WaffenVARI==0 || WaffenVARI==10
removespell A00SkelettShield
; printToConsole "RAFOO: Waffenschaden 2Haender. Set VARI =20 VARI-Hieb ist= %.0f " WaffenVARI
set WaffenVARI to 20
endif

else
if WaffenVARI ==0 || WaffenVARI ==2 || WaffenVARI==20
; printToConsole "RAFOO: Waffenschaden ohne Wirkung. set VARI =10 VARI ist= %.0f " WaffenVARI
addspell A00SkelettShield
set WaffenVARI to 10
endif

endif
;-----------------------------------------------------------------------------------------------------

END
 
So ein kleine Frage:
Ist es möglich einen Zauber per script zu erstellen.

Mein Konzept sieht vollgenermaßen aus:
Man hat ein Menü in denen man sich die effekte aussuchen kann.(max.4)
Dann wird der gewünschte zauber erstellt und dem Spieler hinzugefügt.
Geht das? Und wenn ja wie?
 
Hat jemand eine Idee wie sich das Script ( Siehe oben 1 Thread) so ändern lässt, das die Abfrage auch ohne das erst die Hiebwafffe gezogen wird, beginnt?

Bisher ist es so, dass der Zauber der per Script entfernt wird, vorher im Inventar der Creatur liegen muss.

Obwohl das "else" ja sagt, das der Zauber auch so der Creatur zugewiesen werden soll.

Ich verstehe einfach nicht warum das nicht klappt. Die Abfrage wird einfach ignoriert. Habe das durch die Consolenausgabe überprüft.

Sobald die Hiebwaffe oder der Zweihänder gezogen wurde, laufen die Abfragen.
 
Ist es möglich einen Zauberspruch so einzurichten, dass er im Zeihandmodus stärker ist, als im Einhandmodus?

Im Prinzip bräuchte man doch nur abfragen, ob sich keine Waffe in der Hand befindet. Doch es wäre ziemlich umständlich sämtliche Waffentypen abzufragen. Gibt es eine umfassende Variable dafür?
 
Zuletzt bearbeitet:
Mir ist zwar neu, dass es in Obl. auch DualCasting gibt, aber ob man eine Waffe in der Hand hält, kannst Du so machen:

Code:
if(player.getequippedobject 16 == 0)
   ; do stuff
endif

Und den WaffenTyp eben mit GetWeaponAnimType oder GetWeaponType.
 
  • Like
Reaktionen: robinH
Naja es gibt Idles die einen Zweihandmodus beim Zaubern simulieren.
http://tes.nexusmods.com/downloads/file.php?id=21475

Man müsste das ganze halt nur entsprechend so einrichten, das die Idles entsprechend benutzt werden.

Sprich wenn das so geht also mit


if player.getequippedobject 16 == 0

dann mache folgendes

wenn player Zauber xy im Inventar, dann tausche den Zauber xy mit dem Stärkerem aus

Player drückt Zaubertaste, dann spiele das Zweihand idle ab.

else

setzte den Zauber wieder zurück

Bei Tastendruck spiele wieder das Original Idle ab.

endif



Doch wie sich das Ganze umsetzten lässt, habe ich keine Ahnung. Hatte halt nur die Idee. Eventuell möchte sich ja jemand der sich besser auskennt, daran versuchen.
 
Zuletzt bearbeitet:
Das Ganze zu skripten wäre kein großer Aufwand, wenn man die Animation einfach austauschen könnte. Es gibt leider keinen Befehl, der einen die Animation austauschen ließe und ein Workaround habe ich auch nicht gefunden.