scn AufDenContainerREF
ref iter
ref container
short button
short counter
short uniquecounter
begin onActivate
MessageBox "Wollt ihr alle euere Zutaten in die Truhe legen?" "Ja" "Nein"
end
Begin GameMode
Set button to getbuttonpressed
if button == -1
return
elseif button == 1
activate player
return
endif
let uniquecounter := 0
let counter := 0
if GetActionRef == player
let container := getSelf
foreach iter <- player
if iter.IsIngredient
let counter += iter.GetRefCount
let uniquecounter += 1
iter.RemoveMeIR container
endif
loop
endif
Message "Es wurden %g (%g) Zutaten in die Truhe gelegt." uniquecounter counter
Activate player
End
Damit sollten sogar Mod-Zutaten abgedeckt werden oder?
Das klappt dann sogar mit Zutaten aus Mods.
Vielleicht solltest du, Gildur, noch eine QuestItem_Abfrage einbauen.
Manche Zutaten (bspw. Einhornhorn) sollten so besser nicht entfernt werden.
Wollt ich nur mal sagen.
if iter.IsIngredient && !iter.IsQuestItem
Ich weiss bisher nur, das man das %f für Werte nutzt und das %n für Objektnamen doch wofür steht das %g ?..........
Message "Es wurden %g (%g) Zutaten in die Truhe gelegt." uniquecounter counter
...................
%g gibt Integers, also ganze Zahlen aus, während du bei %f auch Dezimalstellen anzeigen lassen kannst, also z.B. %.2f für ein Ergebniss mit zwei nachkommastellen. Somit ist %g m.E. identisch mit %.0fEine Frage zum Verständnis
Ich weiss bisher nur, das man das %f für Werte nutzt und das %n für Objektnamen doch wofür steht das %g ?
So sieht das Script nun aus. Der Start erfolgt über das Event ONHit über eine Quest.
Script bisher
PHP:Begin Function {Rtarget Rweapon} if Rtarget.isBlocking ==0 return endif ;===========Player blockt und benutzt Schild==========TEst 400HP== if player.GetEquippedObject 13 set SWeaponType to getWeaponType Rweapon set RSchild to player.GetEquippedObject 13 set fSchildHealth to player.getEquippedCurrentHealth 13 set fGewichtdamage to GetWeight Rweapon *0.1 set fPHealthRestore to Rtarget.getAV Health ;-----Hiebwaffenabfrage-----1H,2H-------------------- if SWeaponType ==2 || SWeaponType ==3 set fSchaden to (fGewichtdamage + 10)*-1 set fSchaden2H to (fGewichtdamage + 20)*-1 if SweaponType ==2 Rtarget.ModEquippedCurrentHealth fSchaden 13 endif set fPlayerHealth to Rtarget.getAV Health ;... endif ;==============EDIT=======NEU im Script========== Beispiel A set Rtarget.AV Health fPHealthRestore ;Jeder Treffer erhöht leider die Hp um den vorherigen Wert endif .......
Da das mit der Methode die Health des Players zu speichern so nicht klappt, wie Ihr ja bereits sagtet, muss das wohl mit einem weiteren Header gemacht werden. Doch wie?
Wie komme ich denn da nun weiter? Jemand eine Idee, wie ich da überhaupt anfange.
Ziel sollte sein, das wenn der Player blockt, dieser wie in Oblivion leider üblich keine Lebenspunkte verliert, sondern diese immer auf den Wert, den er vor dem Blocken hatte zurückgesetzt werden. Schliesslich soll das Schild ja einen Schutz bieten.
Und wie lässt sich anstatt das der Player immer beim Blocken LP verliert, ein Ausdauerabzug steuern. Das fände ich viel Logischer.
Schliesslich ist so ein Schild recht schwer. Man kann schon fast sagen je stabiler umso schwerer. Somit müsste mit Hilfe der Stärke des Players und der Abhängigkeit vom Gewicht des Schildes, entsprechend ein Ausdauerabzug vorgenommen werden. Irgendwie ist das mit der Ausdauer sowieso blöd gelösst. Heiltränke braucht man fast ständig. Ausdauertränke sogut wie nie. Eventuell lässt sich das ja mit Eurer Hilfe über die dann doch bald fertige Mod endlich mal ändern. Das wäre doch mal was. Dann könnten wir auch Schilde nutzen, welche einen Sinn ergeben.
Ich probiere jetzt alle anderen Möglichkeiten auch aus. Potions, Seelensteine, Bücher, Schriftrollen.......usw..............
IsWeapon
IsAmmo
IsArmor
IsBook
IsClothing
IsIngredient
IsKey
IsAlchemyItem
IsApparatus
IsSoulGem
IsSigilStone
IsLight
IsFlora
Kann man da "IsGem" nehmen?
if iter.CompareName "Smaragd"
Du könntest auf den Namen prüfen:
Begin Function {Rtarget Rweapon}
if Rtarget.isBlocking ==0
return
endif
;===========Player blockt und benutzt Schild==========TEst 400HP==
if player.GetEquippedObject 13
set SWeaponType to getWeaponType Rweapon
set RSchild to player.GetEquippedObject 13
set fSchildHealth to player.getEquippedCurrentHealth 13
set fGewichtdamage to GetWeight Rweapon *0.1
set fPHealthRestore to Rtarget.getAV Health
;-----Hiebwaffenabfrage-----1H,2H--------------------
if SWeaponType ==2 || SWeaponType ==3
set fSchaden to (fGewichtdamage + 10)*-1
set fSchaden2H to (fGewichtdamage + 20)*-1
if SweaponType ==2
Rtarget.ModEquippedCurrentHealth fSchaden 13
endif
set fPlayerHealth to Rtarget.getAV Health
;...
endif
;==============EDIT=======NEU im Script==========
Beispiel A
set Rtarget.AV Health fPHealthRestore ;Jeder Treffer erhöht leider die Hp um den vorherigen Wert
endif
.......
[URL="http://obse.silverlock.org/obse_command_doc.html#Events"]OnHealthDamage[/URL] damage:float attacker:ref
player.[URL="http://cs.elderscrolls.com/index.php/GetActorValue"]getAV[/URL] [URL="http://cs.elderscrolls.com/index.php/Stats_List"]ActorValue[/URL]
player.[URL="http://cs.elderscrolls.com/index.php/ModActorValue"]modAV[/URL] [URL="http://cs.elderscrolls.com/index.php/Stats_List"]ActorValue[/URL] amount:float
player.[URL="http://cs.elderscrolls.com/index.php/SetActorValue"]setAV[/URL] [URL="http://cs.elderscrolls.com/index.php/Stats_List"]ActorValue[/URL] amount:float
item.[URL="http://obse.silverlock.org/obse_command_doc.html#GetWeight"]getWeight[/URL]
SetEventHandler "OnHealthDamage" ScriptSpielerWirdgetroffen ref::playerRef
scn ScriptSpielerWirdGetroffen
float damage
ref Angreifer
Begin Function {damage Angreifer}
....
Ausgeführt auf den Schauspieler Schaden zu nehmen
(dh GetSelf das beschädigte Schauspieler zurück),
wenn Schaden genommen. "Angreifer" kann Null beispielsweise
sein bei der Einnahme von Schäden fallen. Der Handler wird aufgerufen,
kurz bevor der Schaden angewendet wird, so kann es durch
Befehle wie ModActorValue aufgehoben werden.
Verwenden Sie das Objekt Filter, um die beschädigten Schauspieler,
mit dem Ihr Ereignishandler sollte angebracht werden,
wenn auf den Schauspieler Schaden zu nehmen
(dh GetSelf das beschädigte Schauspieler zurück),
wenn Schaden genommen any.Invoked angeben. "Angreifer"
kann Null beispielsweise sein bei der Einnahme von Schäden fallen.
Der Handler wird aufgerufen, kurz bevor der Schaden angewendet wird,
so kann es durch Befehle wie ModActorValue aufgehoben werden.
Verwenden Sie das Objekt Filter, um die beschädigten
Schauspieler, mit dem Ihr Event-Handler angebracht werden
sollte, wenn überhaupt angeben.