Construction Set Zauber durch ein Buch lernen

thefuture2

Neuankömmling
hi,

ich möchte wenn der char ein buch liest, dass ihm dann ein Zauber hinzugefügt wird. Nur leider funzt es nicht.

das script sieht so aus:

ScriptName ZMTgottlicheregeneration

begin OnActivate


Player.AddSpell ZMTregeneration6



end

Ja ich habs im buch einbaut unter script. ;)
 
bei AddSpell nicht den ID-Namen sondern den ID-Code verwenden (das is ne Spalte im CS die standardmäßig minimiert ist, musst du erst breiter ziehen)
 
Tommy___1984 schrieb:
bei AddSpell nicht den ID-Namen sondern den ID-Code verwenden (das is ne Spalte im CS die standardmäßig minimiert ist, musst du erst breiter ziehen)

ich find die spalte net. *lol*

öhm wenn ich einen spell einem NPC mit addspell hinzufüge funzt es. (bei händlern). da nehm ich auch immer die ID. aber ich schau mal, danke für den tip. ;)
 
thefuture2 schrieb:
Tommy___1984 schrieb:
bei AddSpell nicht den ID-Namen sondern den ID-Code verwenden (das is ne Spalte im CS die standardmäßig minimiert ist, musst du erst breiter ziehen)

ich find die spalte net. *lol*

öhm wenn ich einen spell einem NPC mit addspell hinzufüge funzt es. (bei händlern). da nehm ich auch immer die ID. aber ich schau mal, danke für den tip. ;)

achja als scripttyp ist object angewählt. (könnte ja wichtig sein)
 
ich hoff du weißt das wenn du willst das der zauber nur einmal gewikrt iwd das das skript so aussehn muss:
Code:
scn xyz

short doonce

begin OnActivate

if (doonce == 0 )
    addspell "xyz"
    activate (kann evtl auch weggelassen werden)
    set doonce to 1
endif

end
die addspell funktion geht glaub ich nur bei eigenschaften (war zumindest bei mir so) du kannst es mal mit cast "xyz" player versuchen sonst würd mir nur n skript einfallen mit addspell das dir die eigenschaft draufzaubert und dann per timer nach x-sekunden entfernt wird

edit: war ich wohl zu langsam XD
 
dany schrieb:
ich hoff du weißt das wenn du willst das der zauber nur einmal gewikrt iwd das das skript so aussehn muss:
Code:
scn xyz

short doonce

begin OnActivate

if (doonce == 0 )
    addspell "xyz"
    activate (kann evtl auch weggelassen werden)
    set doonce to 1
endif

end
die addspell funktion geht glaub ich nur bei eigenschaften (war zumindest bei mir so) du kannst es mal mit cast "xyz" player versuchen sonst würd mir nur n skript einfallen mit addspell das dir die eigenschaft draufzaubert und dann per timer nach x-sekunden entfernt wird

edit: war ich wohl zu langsam XD

naja der char soll es fest für immer haben, wie wenn er den zauber beim händler kauft. ;)
 
player.addspell AbPilgrimsGrace
so stehts beim schrein des akatosh und das iss doch die normale ID
 
Bei den Standard-Spells geht der Name, bei eigenen meist nicht. Die Spalte heißt "Form ID" (is zwischen "Editor ID" und "Count")
 
N'abend, wollte ich sagen, aber es muss ja schon guten Morgen heißen... :-D

Nimmt der Spieler das Buch eventuell aus einem Container oder wird es dem Spieler von einem NPC überreicht? Dann funktioniert nämlich onActivate nicht (bzw. es funktioniert, aber dafür muss der Spieler das Buch erstmal wieder fallen lassen). Stattdessen könntest du versuchen, mit onAdd zu arbeiten.
Steht das Buch irgendwo in der Welt rum und das Script funzt trotzdem nicht, lag ich allerdings mit meinem Ratschlag völlig daneben. ;)
 
Lass mal dieses Script auf deinem Buch rennen und schau dir an, wann welche Events ausgelöst werden.

Code:
Scriptname xxxCommandBlockCheckScript

Float Timer
Float Gesamtlaufzeit

Begin OnActivate
	Message "Ereignis: OnActivate"
	Activate Player
End

Begin OnEquip
	Message "Ereignis: OnEquip"
	Player.AddSpell ZMTregeneration6 
End

Begin OnDrop
	Message "Ereignis: OnDrop"
End

Begin OnAdd
	Message "Ereignis: OnAdd"
End

Begin GameMode
	Set Timer To Timer + GetSecondsPassed
	If Timer >= 15
		Set Gesamtlaufzeit To Gesamtlaufzeit + Timer
		Set Timer To 0
		Message "Das Script läuft seit %.0f Sekunden",Gesamtlaufzeit
	EndIf
End
 
Hellion schrieb:
N'abend, wollte ich sagen, aber es muss ja schon guten Morgen heißen... :-D

Nimmt der Spieler das Buch eventuell aus einem Container oder wird es dem Spieler von einem NPC überreicht? Dann funktioniert nämlich onActivate nicht (bzw. es funktioniert, aber dafür muss der Spieler das Buch erstmal wieder fallen lassen). Stattdessen könntest du versuchen, mit onAdd zu arbeiten.
Steht das Buch irgendwo in der Welt rum und das Script funzt trotzdem nicht, lag ich allerdings mit meinem Ratschlag völlig daneben. ;)

er bekommt es von einem NPC verkauft. ;) onadd hab ich noch nie gehört, mal checken. ;)

ok mit onadd geht es aber zu gut:

bei on add passiert es unendlich mal. :( vor allem aber schon wenn ich das buch gekauft habe oder gefunden habe. nur der spieler soll es ja erst gelesen haben und dann den zauber bekommen. nicht schon wenn er es findet/kauft)

danke auf jeden fall :)

EDIT: gut das es nur 1 mal kommt habe ich hinbekommen. dazu ne frage, darf man gleiche namige variablen im game öfters nutzen?
z.b. wird doonce im game öfters gebraucht. diese habe ich jetzt auch genommen, könnte es probleme geben? oder beziehen sich variablen hier nur auf 1 script, nicht global auf alle?

EDIT2: mit onequip funktionert es am besten. leider wenn ich es finde und lese, passiert nix. erst wenn ich es im inventar öffne wird das script ausgeführt. ist zwar ne kleinigkeit, könnte aber einem user den verdacht eines bugs geben. ;) danke für eure hilfe. :)
 
thefuture2 schrieb:
EDIT: gut das es nur 1 mal kommt habe ich hinbekommen. dazu ne frage, darf man gleiche namige variablen im game öfters nutzen?
Ja - die Deklaration ist lokal.

EDIT2: mit onequip funktionert es am besten. leider wenn ich es finde und lese, passiert nix.
Wenn Du beides absichern willst, muss die Funktion in einem OnActivate-Block UND in einem OnEquip Block-stehen.

OnActivate wird ausgelöst, wenn das Buch irgendwo herumliegt und der Spieler es aktiviert.

OnEquip wird ausgelöst, wenn der Spieler es im Inventar hat und liest.

Da man das Buch aber von einem Händler bekommt, würde ich das als Quest-Objekt flaggen. Im OnEquip-Block fügtst Du dann dem Spieler den Zauber hinzu und mit SetQuestObject ObjectID 0 wird in dem Moment auch das Questobject-Flag entfernt. Damit kann der Spieler das Buch erst ablegen, wenn er es gelesen hat. Spätestens wenn er das Ding nicht ablegen kann, wird er sich das ansehen.
 
du kannst es mal so testen
Code:
scn xyz

short activation

begin onactivate
 set activation to 1
end

begin gamemode

if ( onactivate== 1 )
   if ( activation == 1 )
      addspell "xyz"
   endif
endif

end

weil bei den vorherigen skripts (wenn ich nich was übersehne hab) der zauber nur hinzugefügt wird während das buch aktviert ist