Archiv verlassen und diese Seite im Standarddesign anzeigen : Vagnaguns Script fragen
Vagnagun
18.03.2009, 15:02
Hallo Leute, ich würde eine multi-schlüssel machen, die jede tür öffnet. Ich weis, vermasselt das gamplay riesig, aber ich will es anders machen. also je einen für jede sclossschwirigkeit. auser einen schlüssel für unmöglich. da ich will die schlüssel noch haben.
________________
und eine weitere frage. ich will das eine tür sich automatisch schlisst, wenn man sie aktiviert. lautet der script dafür in etwa so?
scn autoClose
begin on activate
if "tür name" == 0
set "tür name" ==1
endif
end
is das so richtig?
Manchmal ist es echt schwer deine Fragen zu entziffern :D
Zur Tür:
Beim aktivieren verschließen? Da ist dein Script falsch...
Begin OnActivate
Lock 99 ;Die zahl bestimmt die schwierigkeit des Schlosses (100 ist Unmöglich)
end
Beim zweiten, da gibt es doch schon den Skelettschlüssel? Der zerbricht eben nie und öffnet die Tür sozusagen automatisch.
Vagnagun
18.03.2009, 15:17
nien. es soll eben kein dietrich mini-spiel erscheinen.
und mien script ist wirklich falsch. verdammt^^.
so wenn wir gerade bei mini-spielen sind. wie erstelle ich minispiele?:D
edit: so jetzt habe ich wieder eine frage. hier mal der script
Begin OnActivate
if "Gold001" == 10000
removeitem "Gold001" 10000
additem "(weis jetzt nciht den englischen namen) Schwarzer Seelenstein" 1
else message "Du hast nicht genügend Gold"
endif
end
dieser script soll, wenn ,man den gegenstand aktiviert, schauen ob er 10.000 GOld hat, und wenn ja, 10.000 gold entfernen, und einen Schwarzen seelenstein hinzufügen.
wenn nciht, soll "du has nicht genügend GOld" anzeigen.
Begin OnActivate
if "Gold001" >= 10000
Player.removeitem "Gold001" 10000
Player.additem "Schwarzer Seelenstein" 1
else
message "Du hast nicht genügend Gold"
endif
end
Minispiele? Keine Ahnung...
Low Post
18.03.2009, 16:36
Gold001 wird nie größer als 1000 sein, die FormID ist 0000000F, was in Dezimalzahlen 15 darstellt.
Ich weiß jetzt aber nicht, ob Oblivion da wirklich die FormIDs vergleicht, ist aber auch egal. Der richtige Befehl lautet GetGold. ;)
Begin OnActivate
if Player.GetGold >= 10000
Player.removeitem "Gold001" 10000
Player.additem BlackSoulGem 1 ;den gibts auch schon bevor man die Oblivion.exm lädt.
else
message "Du hast nicht genügend Gold"
endif
end
PS:
Du musst nicht die englichen Namen der Objekte, sondern deren EditorID angeben. Das entspricht sich zwar meist, muss aber nicht immer identisch sein. ;)
PS²:
Minispiele sind nicht so ohne weiteres zu erstellen. Du könntest evtl. mit Pluggys Hud-Funktionen da was zusammenbasteln, aber dazu solltest du vorher imho noch etwas die Oblivion-Scriptsprache üben. ;)
Außerdem musst du dabei beachten, dass Pluggy bei einigen Usern CTDs verursacht. Im PI-Hauptforum schwirrt ein Thread darüber rum, falls du mehr darüber wissen willst.
Es funktioniert aber unter umständen auch mit GetItemCount :D
Low Post
18.03.2009, 20:55
Sicher, aber wenn BethSoft schon eine entsprechende Funktion bereitstellt kann man die ja auch benutzen. :p
Außerdem ist das kürzer und aufgrund des fehlenden Parameter wahrscheinlich auch ein kleines (ganz kleines, fast schon winzig) Bisschen performanceschonender. ;)
Vagnagun
21.03.2009, 09:46
ich möchte den script jetzt noch bisschen verändern. und zwar, das man einen großen Seelenstein wegbekommt, und gleichzeitg 100 HP veliert. ich weis jetzt nicht wie ich das einstellen soll.
Player.RemoveItem 'GroßerSeelenstein' 1
Das andere kannste mit nem Zauber machen, der eben 100 schaden macht. Den Fügste dann den Player hinzu.
Soweit ich weiß kannst du mit ModActorValue2 auch die Stats manipulieren, ohne dabei die normale größe zu verändern.
Beim normalen ModAV würde sich der komplette Skill verändern, bei ModAV2 nicht.
Syntax:
Player.ModActorValue2 Health -100
(Ich hoffe das stimmt so)
Der befehl benötigt aber OBSE.
Vagnagun
21.03.2009, 10:09
das mit dem grßem seelenstein. der soll genau wie beim gold sein. also wenn du es hast, wirds weggennommen, wenn nicht, kommt das eine warnung.
If Player.GetItemCount 'GroßerSeelenstein' != 0
Player.RemoveItem 'GroßerSeelenstein' 1
else
Message "Du brauchst einen großen Seelenstein"
Vagnagun
21.03.2009, 10:16
Begin OnActivate
if Player.GetGold >= 10000
Player.removeitem "Gold001" 10000
Player.additem BlackSoulGem 1 ;
else
message "Du hast nicht genügend Gold"
endif
If Player.GetItemCount 'GroßerSeelenstein' != 0
Player.RemoveItem 'GroßerSeelenstein' 1
else
Message "Du brauchst einen großen Seelenstein"
endif
Player.ModActorValue2 Health -100
end
müsste der script dann so ausschauen??
Begin OnActivate
if Player.GetGold >= 10000
Player.removeitem "Gold001" 10000
Player.additem BlackSoulGem 1 ;
else
message "Du hast nicht genügend Gold"
endif
If Player.GetItemCount 'GroßerSeelenstein' != 0
Player.RemoveItem 'GroßerSeelenstein' 1
Player.ModActorValue2 Health -100
else
Message "Du brauchst einen großen Seelenstein"
endif
end
Eher so ;)
Bei deinem Script wird dem player bei jedem Aktivieren 100 Leben entzogen, selbst wenn er keinen Seelenstein hat ;)
Vagnagun
21.03.2009, 10:53
Du sagst ja, man braucht OBSE, aber wie mache ich damit CS auf?
edit: beim ModActorValue2, nimmt der den HP permanent weg, oder regeneriert der char wieder das verlorene HP?
Ich hab den Obse Compatible Oblivion Launcher, der macht das automatisch.
Ich glaub da muss man eine eingabeaufforderung machen.
Ich glaub es gibt auch eine Exe datei im Verzeichniss von Oblivion.
Sorry weiß net genau :(
Edit: Der Char regeneriert es danach wieder.
Vagnagun
21.03.2009, 11:01
ok, ich hab mich entschieden, OBSE nicht zu benutzen. Stadessen will ich einen ZAuber, für den -100 HP schaden. Der ZAuber ist fertig, aber wie muss ich den jetzt einbauen.
Player.addspell [spellid]
Vagnagun
21.03.2009, 11:04
ok, muss ich das jetzt als zauber, oder krankheit machen?
edit: bei mir ist jetzt da eine warnung, wenn ich es speichern will.
Scrip 'EaRose', line 10:
MIssing parameter ObjectID.
Compiled script not saved!
Eigenschaft...
achte drauf das die nich für immer bleibt, sonst verreckt der Charakter :D
Vagnagun
21.03.2009, 11:15
bei mir ist jetzt da eine warnung, wenn ich es speichern will.
Scrip 'EaRose', line 10:
MIssing parameter ObjectID.
Compiled script not saved!
script sieht so aus:
ScriptName EaRose
Begin OnActivate
if Player.GetGold >= 10000
Player.removeitem "Gold001" 10000
Player.additem BlackSoulGem 1
else
message "Du hast nicht genügend Gold"
endif
If Player.GetItemCount 'GroßerSeelenstein' != 0
Player.RemoveItem 'GroßerSeelenstein' 1
Player.addspell [01000CEE]
else
Message "Du brauchst einen großen Seelenstein"
endif
end
Eckige Klammern müssen weg ;)
GroßerSeelenstein ist nicht die ObjectID. Die musst du selbst im CS nachgucken...
Low Post
21.03.2009, 13:57
Außerdem bei den neu hinzugefügten Sachen ist wichtig die EditorID und nicht die FormID (diese Zahlenkombination) anzugeben, da das sonst eine bestimmte Position in der Ladereihenfolge voraussetzt.
Kann auch sein, dass das kein Problem mach, ich würde es aber nicht darauf ankommen lassen. ;)
EditorID von dem großen Seelenstein dürfte etwas in der Art von GrandSoulGem sein. Einfach unter Items-->Soulgem nachschauen. ;)
Vagnagun
21.03.2009, 14:10
ICh danke euch sehr. jetzt konnte ich mein PI releasen^^.
Vagnagun
23.03.2009, 11:21
Da gibt es ein kleines problem.
mit dem script hier.
ScriptName EaRose
Begin OnActivate
if Player.GetGold >= 10000
Player.removeitem "Gold001" 10000
Player.additem BlackSoulGem 1
else
message "Du hast nicht genügend Gold"
endif
If Player.GetItemCount 'GroßerSeelenstein' != 0
Player.RemoveItem 'GroßerSeelenstein' 1
Player.addspell [01000CEE]
else
Message "Du brauchst einen großen Seelenstein"
endif
end
man bekommt, egal ob man einen großen seelenstein hat oder nicht, einen schwarzen seelenstein für 10k Gold. und die 100HP werden auch nciht abgezogen.
Lol
Hast du das jetz so veröffentlicht? o_O
Erstens: Du überprüfst in dem sinne ja auch nur ob der Player die 10000 Gold hat.
Begin OnActivate
if Player.GetGold >= 10000
Player.removeitem "Gold001" 10000
Player.additem BlackSoulGem 1
else
message "Du hast nicht genügend Gold"
endif
Du musst also Überprüfen ob der Spieler 10k Gold hat UND ob er einen seelenstein hat...
ScriptName EaRose
Begin OnActivate
if Player.GetGold >= 10000 && Player.GetItemCount GroßerSeelenstein != 0
Player.RemoveItem 'GroßerSeelenstein' 1
Player.addspell [01000CEE]
Player.removeitem "Gold001" 10000
Player.additem BlackSoulGem 1
else
message "Du hast nicht genügend Gold, und brauchst einen großen Seelenstein"
endif
end
Was mit dem Zauber ist weiß ich nicht.
Ich hätte es mit ModAV2 gemacht.
Vagnagun
23.03.2009, 13:29
Ja, scön und gut. Aber was ist wenn der spieler 10k hat, aber kein seelenstein, oder einen seelenstein hat nur keine 10k?
und ich weis nicht was das mit den OBSE so geht. Wie soll ic bitte die scripts von OBSE mit CS laden?
ok, hat sich erledigt. nur das mit den
Aber was ist wenn der spieler 10k hat, aber kein seelenstein, oder einen seelenstein hat nur keine 10k?, da brauch ich noch hilfe^^.
In dem du das CS mit OBSE lädst...^^
Denn fügst du eben weitere abfragen ein :p
Nach selben Schema:rolleyes:
Vagnagun
23.03.2009, 13:40
Also würde der Script letzendlich so ausehen?
ScriptName EaRose
Begin OnActivate
if Player.GetGold >= 10000 && Player.GetItemCount GroßerSeelenstein != 0
Player.RemoveItem 'GroßerSeelenstein' 1
Player.addspell [01000CEE]
Player.removeitem "Gold001" 10000
Player.additem BlackSoulGem 1
else
if Player.GetGold <= 10000 && Player.GetItemCount GroßerSeelenstein != 0
message "Du hast nicht genügend Gold"
if Player.GetGold >= 10000 && Player.GetItemCount GroßerSeelenstein != 1
message "Du brauchst einen großen Seelenstein"
endif
end
Nicht ganz:
ScriptName EaRose
Begin OnActivate
if Player.GetGold >= 10000 && Player.GetItemCount GroßerSeelenstein != 0
Player.RemoveItem 'GroßerSeelenstein' 1
Player.addspell [01000CEE]
Player.removeitem "Gold001" 10000
Player.additem BlackSoulGem 1
elseif Player.GetGold < 10000 && Player.GetItemCount GroßerSeelenstein != 0
message "Du hast nicht genügend Gold"
elseif Player.GetGold >= 10000 && Player.GetItemCount GroßerSeelenstein == 0
message "Du brauchst einen großen Seelenstein"
endif
end
Low Post
23.03.2009, 14:47
Du hast noch die Meldung für beides vergessen vergessen. ;)
ScriptName EaRose
Begin OnActivate
if Player.GetGold >= 10000 && Player.GetItemCount GroßerSeelenstein != 0
Player.RemoveItem 'GroßerSeelenstein' 1
Player.addspell [01000CEE]
Player.removeitem "Gold001" 10000
Player.additem BlackSoulGem 1
elseif Player.GetGold < 10000 && Player.GetItemCount GroßerSeelenstein != 0
message "Du hast nicht genügend Gold"
elseif Player.GetGold >= 10000 && Player.GetItemCount GroßerSeelenstein == 0
message "Du brauchst einen großen Seelenstein"
else
Message "Du hast nicht genügend Gold, und brauchst einen großen Seelenstein"
endif
end
Vagnagun
27.04.2009, 17:24
brauch neuen script^^. also, der sohl den cheat tcl deaktivieren. fragt nicht wieso. geheimnis. jedenfalls wäre eigentlich ein script gut, womit ich bestimmte cheat befehle ausschalten kann, oder gar die ganze konsole. und einen gegen script, den ich als zauber benutzen kann um die den konsolen-block-script zu deaktivieren. schickt mir bitte diesen per PN.
Escalbryt
28.04.2009, 15:17
zum neuen script cheats wirst du denke ich nicht deaktivieren können. Wenn sich jemand, der dein Plugin nutzt, dazu entschliesst zu cheaten ist er selbst schuld.
Ansonsten arbeite mit körperlosen effekten um durch die mauer gehen zu können. also erst die feste mauer von anfang an aktiviert und die körperlose, durch die man gehen kann deaktiviert und dann mit dem zauber beides vertauschen.
Zum Script davor.
Das kann man denke ich auch eleganter lösen. nicht dass es bei einem solch kleinen script von einer tragweite wäre, aber im ungünstigsten fall treten 6 abfragen auf.
wenn man es allerdings ändert, dass die abfragen einzeln sind, aber miteinander verknüpft kommen 2 abfragen vor...
iptName EaRose
Begin OnActivate
if Player.GetGold < 10000
if Player.GetItemCount GroßerSeelenstein == 0
Message "Du hast nicht genügend Gold, und brauchst einen großen Seelenstein"
else
message "Du hast nicht genügend Gold"
endif
elseif Player.GetItemCount GroßerSeelenstein == 0
message "Du brauchst einen großen Seelenstein"
else
Player.RemoveItem 'GroßerSeelenstein' 1
Player.addspell [01000CEE]
Player.removeitem "Gold001" 10000
Player.additem BlackSoulGem 1
endif
end
Erste Abfrage hat er das Gold?
wenn nein Zweite Abfrage nach dem Seelenstein um die Message zu bestimmt
wenn ja zweite Abfrage nach dem Seelenstein um ihm den schwarzen zu geben oder die Fehlermeldung rauszurücken.
Es geht einfach darum, dass man sich angewöhnen sollte ressourcensparend zu scripten, da sonst so nen murks wie vista bei herum kommen kann(ich weiss dass bei vista noch anderes hereinspielen kann). das alte script hatte die dreifache menge an möglichen Abfragen stell dir das mal bei einem größeren Projekt vor ;)
LG FH
Vagnagun
06.05.2009, 15:33
Wie lautet der Script, wenn eine Tür abgeschlossen ist und nur dann aufgeschlossen ist wenn ein bestimmter gegner tot ist. aber diese tür solte dann auch gegen den cheat "unlock" 100% resi haben. also die tür geht erst auf, wenn der gegener tot ist, und nciht durch unlock?
Low Post
06.05.2009, 15:59
Simuliere das Schloss über den OnActivate-Block des Scripts der Tür in der du mit GetDead abfrägst, ob betreffender NPC tot ist.
Lässt sich aber über einen Activate-Befehl aushebeln. ;)
Was hast du eigentlich ständig mit deiner Konsolenphobie?
Wenn jemand wirklich cheaten will wirst du es nicht verhindern können, egal wie sehr du dich anstrengst. Lass doch den Kampf gegen Windmühlen sein und konzentriere dich mehr auf die eigentlichen Inhalte der Mod. ;)
Vagnagun
06.05.2009, 16:17
also so sieht er aus
ScriptName ActiveDoor
OnActivate-Block
if Actor 01000EE8 GetDead
unlock
else
message "Der Anführer der Rose ist noch am leben!"
endif
end
falsch oder?
Scriptname ActivateDoorScript01
Begin OnActivate
If Actor.GetDead == 1
Unlock
Else
"Der Anführer der Rose ist noch am Leben!"
Endif
End
So sollte das ungefähr aussehen ;)
Low Post
06.05.2009, 23:05
Ein Activate muss auch noch mit rein, sonst entfernt man nur das Schloss, kommt durch die Tür selbst aber nicht durch. ;)
scn ActivateDoor
Begin OnActivate
if ( IsActionRef Player )
if ( [Actor].GetDead )
Unlock
Activate
else
Lock 100
Message "Der Anführer der Rose ist noch am Leben!"
endif
elseif ( GetLocked == 0 ) && ( [Actor].GetDead == 0 )
Activate
endif
End
Vagnagun
07.05.2009, 18:13
scn ActivateDoor
Begin OnActivate
if ( IsActionRef Player )
if ( [Actor].GetDead )
Unlock
Activate
else
Lock 100
Message "Der Anführer der Rose ist noch am Leben!"
endif
elseif ( GetLocked == 0 ) && ( [Actor].GetDead == 0 )
Activate
endif
End
muss ich da die ID oder denn namen eingeben? wenns der nam ist, den englishen oder den deutschen
Die ID also z.B. NPCTroy oda so. Falls es eine Creature ist musst du dieser eine Refercence zuweisen und ein Haken bei Persitent Reference machen (Im Render Window doppelt auf die Creature oder den NPC klicken oben den Namen unten den Haken machen) Und diesen Namen dann im Script benutzen.
Vagnagun
07.05.2009, 18:50
Aso, thx. Kruze Off-Topic farge. Gibt es ein Labyrinth zum Downloaden, denn ich benutzen darf ohen die einwilligung des modders? nur das er/sie in den credits erwähnt wird.
und die ID in die eckigen kalmern? oder ohne klammern? ich glaub mit oder?
Nein ohne Eckige Klammern.
Ein Labyrinth.. hmmm schau mal bei Tesnexus nach vllt gibt es das etwas ;)
Vagnagun
01.12.2009, 19:52
also... wenn cih darf würde ich gern diesen Threadwieder hochschupsen, hätte wieder Script fragen^^.
Aber leider wird es diesmal nicht so einfach. Also ich habe keinen Ahnugn ob das dann geht., wie meine Vostelllung aussieht.
KAnn man ein ein Script eine Liste mit Gegenständen füllen die dann abprüft ob dieser gegenstand im Inventar ist wenn ja, soll dieser gegenstand entfernt werden und der Activator (so heisen die dinger oder)
wird dann ausgetauscht. Also genau liste der Gegenstände kann ich leider nciht geben. Das würde die ganze spannung vom Mod vermiesen^^.
grüße Vagnagun
Schattenläufer
01.12.2009, 20:06
Okay, bitte formuliere deine Posts so, dass man sie auch verstehen kann. Korrigiere Rechtschreib- und Grammatikfehler sowie Zeichensetzung... das ist wirklich nicht schwer, erleichtert es aber den anderen zu verstehen, was du willst.
Gerade bei Scripts muss man ja doch eher präzise arbeiten, also beschreibe bitte noch einmal, was du genau erreichen willst.
Vagnagun
01.12.2009, 20:15
Ok sry.. Nochmal von vorn.
Ein Script der eine Liste hat, mit den gebrauchten Gegenständen. Dieser Script sollte überrüfen wenn man einen bestimten Activator aktiviert. Wenn einer! dieser gegenstände im Inventar befindet soll der gegenstand entfernt, und der Activator mit einem anderem vertauscht werden.
Und dann einen der erst dann ausgefürt wird, wenn alle! Activator mit dem obigem Script vertauscht wurden. Also man aktiviert diesen und bekommt ein Menu wo man was auswählen kann, der Zauber/Gegnstand kommt ins Zauberlexikon/in das Inventar und jetzt wird auch dieser Activator vertauscht. ALso mann nur einmal den Dialog öffnen.
Ich hoffe diesmal kann man den Text verstehen.
mfg Vagnagun
Scn AbfrageScript
Begin OnActivate
If ( Player.GetItemCount Item1 > 0 )
If Activator1.GetDisabled == 0
Activator1.Disable
Activator2.Enable
Player.RemoveItem Item1 1
Elseif ( Activator1.GetDisabled ) && ( Activator2.GetDisabled == 0 )
Activator2.Disable
Activator3.Enable
Player.RemoveItem Item1 1
Elseif ( Activator2.GetDisabled ) && ( Activator1.GetDisabled )
Activator3.Disable
Activator4.Enable
Player.RemoveItem Item1 1
Endif
Elseif ( Player.GetItemCount Item2 > 0 )
If Activator1.GetDisabled == 0
Activator1.Disable
Activator2.Enable
Player.RemoveItem Item2 1
Elseif ( Activator1.GetDisabled ) && ( Activator2.GetDisabled == 0 )
Activator2.Disable
Activator3.Enable
Player.RemoveItem Item2 1
Elseif ( Activator2.GetDisabled ) && ( Activator1.GetDisabled )
Activator3.Disable
Activator4.Enable
Player.RemoveItem Item2 1
Endif
Elseif ( Player.GetItemCount Item3 > 0 )
If Activator1.GetDisabled == 0
Activator1.Disable
Activator2.Enable
Player.RemoveItem Item3 1
Elseif ( Activator1.GetDisabled ) && ( Activator2.GetDisabled == 0 )
Activator2.Disable
Activator3.Enable
Player.RemoveItem Item3 1
Elseif ( Activator2.GetDisabled ) && ( Activator1.GetDisabled )
Activator3.Disable
Activator4.Enable
Player.RemoveItem Item3 1
Endif
Endif
End
Das wäre für das erste. Der erste Activator muss ganz normal platziert werden, die anderen müssen von Anfang an Disabled sein (Das funktioniert in dem du auf das Objekt doppelklickst [Im Object Window] und dann einen Haken bei Intially Disabled machst, steht unten bei Persitent Reference)
Scn AbfrageScriptMessagebox
Short Button
Begin OnActivate
If Activator4.GetDisabled == 0
MessageBox "Willst du den Zauber oder den Gegenstand?", "Zauber", "Gegenstand"
Set Button to GetButtonPressed
Endif
End
Begin GameMode
If Button == -1
Set Button to GetButtonPressed
Elseif Button == 0
Player.AddSpell ZauberID
Activator4.Disable
Activator5.Enable
Elseif Button == 1
Player.AddItem ItemID Anzahl
Activator4.Disable
Activator5.Enable
Endif
End
Wenn ichs richtig verstanden hab müsste das hier für die zweite Sache richtig sein. :)
Powered by vBulletin® Version 4.2.3 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.