NewRaven.net - Forum

Ich habe mal wieder ein problem:

Ich habe diese 2 scripts:

script nr. 1

Begin caldanius_zombie_script

if ( dead == 1 )
"caldanius_zombie"->startcombat player
"caldanius_zombie_wander"->aitravel 157691.38, 127909.13, 744.14

endif
end

script nr. 2

Begin caldanius_residentevilscript
short timer

player->journal"seltsamer mord" 1
set timer to 5
PlaceAtPc "caldanius_zombie_1" 1, 50, 1
if ( sethealth 0 )
"caldanius_zombie_1"->setfight 100
"caldanius_zombie_1"->startcombat player

endif
end

Alles ist oke wenn ich die scripts im editor speichere.
Nun starte ich morrowind und geh zu insel wo die scripts laufen.
Jetzt kommt eine fehler meldung wo er was von EXPRESSION meldet,
danach kommt eine meldung met right eval.

Diese meldungen kommen 2 mal, für jeden script einmal.
Wenn ich die meldungen ignoriere sind im zee neben der insel zo viele zombies
das der pc nichts mehr macht.

Ich habe schonn alles probiert, finde aber keine lösung.
Kann mir da bitte da einer helfen?

Danke im vorraus.




es fehlt eine Abfrage wie oft das Script aufgerufen werden darf.
so wie es gestrickt ist wird es endlos aufgerufen.

Beispiel

Begin caldanius_residentevilscript
short timer
short zombi

if ( zombi == 1 )
return
endif
player->journal"seltsamer mord" 1
set timer to 5
PlaceAtPc "caldanius_zombie_1" 1, 50, 1
if ( sethealth 0 )
"caldanius_zombie_1"->setfight 100
"caldanius_zombie_1"->startcombat player
set zombi to 1

endif
end

das ganze ist aber noch nicht vollständig das Script läuft dann immer noch bis Deine If Bedingung erfüllt wird, da gehört auch noch mal eine abfrage rein wie viele Zombies gesetzt werden sollen den Journal Eintrag würde ich extra abfangen damit er nur einmal vorkommt Du brauchst also noch zwei Hilfs Variablen die mit if then else abgefragt werden

MFG KDK :o
Danke @kdk, ich werde es mal probieren! :)
Hmmm, wie soll ich das denn machen das nur ein zombie kommt?
Ich habe erst angefangen mit scripten darum habe ich nicht so viel ahnung.
Und wie kann er denn zombies im zee setzen wenn ich den journal eintrag noch
nicht habe?

Tut mir leid mit den fragen aber ich versteh nur bahnhof.
Aaaah, du meinst das so:

begin scriptname
short timer
short zombie

set zombie to 0
return

If ( zombie == 1 )
player->GetJournalIndex "seltsamer mord" 1
PlaceAtPc "caldanius_zombie_1" 1, 50, 1
endif
set zombie to 0

end

Und das "set zombie to 1" wird im result-fenster geschrieben.
Meinst du das in der art?

Wenn nicht, wird das funzen?
Aaaah, du meinst das so:

begin scriptname

short timer
short zombie

<!-- COL begin --><span style="color:red">
set zombie to 0
return
</span><!-- COL end -->
; und wenn sie nicht gestorben sind returnen sie noch heute...

If ( zombie == 1 )
<!-- COL begin --><span style="color:red">player->GetJournalIndex "seltsamer mord" 1</span><!-- COL end -->

; ?Seit wann hat der Player die Eigenschaft JournalIndex?
; entweder
; if ( GetJournalIndex "Journalname" !=/>=/==/<= Value )
; um abzufragen ob eine Eintragung 'Value' bereits erreicht/überschritten ist.
; Zeigt aber nicht an ob eine spezielle Eintragung 'Value' jemals gemacht wurde!!!
; oder
; Journal "Journalname" Value
; um eine Eintragung 'Value' zu machen

PlaceAtPc "caldanius_zombie_1" 1, 50, 1
endif
set zombie to 0

end

Und das "set zombie to 1" wird im result-fenster geschrieben.
Meinst du das in der art?

Wenn nicht, wird das funzen?

<!-- FSIZE begin --><span style="font-size:16pt;line-height:100%">Nein.</span><!-- FSIZE end -->

<!-- COL begin --><span style="color:red">lebwohl</span><!-- COL end -->
so wird der Zombi nie Aktiviert
das erste "set zombie to 0" muß weg

allerdings läuft das auch so noch nicht
ich nehme mal an das jemand umgebracht wird und die Leiche da schon liegt

also mußt du erst mal abfragen ob er tod ist
oder er liegt schon beim ersten Kontakt dort dann mußt Du verhindern das das script laufend aufgerufen wird

das geht mit
if ( OnActivate == 0 )
return
dann muß der Player allerdings mit der Space Taste die Leiche abfragen ansonsten würde würde das Script immer wieder aufgerufen wenn Du innerhalb der Default distance bist Alternatix kann Du natürlich die Distanz zur Leiche abfragen und nur einmaligen Aufruf zulassen

hier mal ein mögliches Beispiel welches allerding auch noch abgekürzt werden könnte ich wolle aber unbedingt eine If then else abfrage mit reinbringen .

------------------------------------------------------------
Begin caldanius_residentevilscript

if ( OnActivate == 1 ) ;die Bedingung trifft zu wenn die Leiche mit space abgefragt wird

endif
if ( GetJournalIndex "seltsamer mord" > 0 ; diese abfrage ist normalerweis nicht nötig wenn mit der zombie Variable nur ein Durchlauf erlaubt wird
return
else
; hier kommt das script nur hin wenn vorher der eintrag ins Journal nicht gefunden wurde
player->journal"seltsamer mord" 1
AddTopic "vom seltsamen mord gehört" ; nur wenn eine Dialogsequenz mit anderen NPC entstehen soll
endif

short zombi

if ( zombi == 1 )
return
endif

PlaceAtPc "caldanius_zombie_1" 1, 50, 1
"caldanius_zombie_1"->setfight 100
"caldanius_zombie_1"->startcombat player
set zombi to 1

end
------------------------------------------------------------

wenn Du möchtest das das Script aufgerufen wird wenn der Player in die Nähe der Leiche kommst mußt Du mit getdistance Arbeiten statt mit on activate.
um das spiel zu auf geschwindigkeit zu optimieren würde ich die Leiche disablen und eine kopie ohne Script an die gleiche Stelle legen wenn die Sequenz abgelaufen ist.
sollte ich an der Aufgaben stellung vorbei gearbeitet haben kannst Du ja mal schreiben was genau da passieren soll

MFG KDK :)
if ( OnActivate == 0 )
return
endif

heist soviel wie:

Solang mich keiner anklickt
wieder raus


Kann so nicht sein.
If ( OnActivate == 1 )
wenn mich einer anklickt...


Noch was: Gebe einem Topic und einem JournalEintrag nicht den gleichen Namen!
Otherwise: Error...Type Journal tried to become Topic...
jau stimmt so ist es besser

MFG KDK :bowdown:

@Rene schau mal ob es so besser ist
OnActivate reagiert immer.
Wenn die Leiche tot ist wird sie geöffnet wie ein Container
wenn sie noch lebt wird sie angesprochen.


Ausserdem nochmal:
nicht Player-> Journal irgendwas

das Journal gehört nicht zu den Eigenschaften des Players sondern ist ein eigenes Objekt.


Soll irgenwas gemacht werden wenn die Eintragung nicht da ist

if ( GetJournalIndex "Seltsamer mord" < 1 )
Journal "Seltsamer Mord" 1
Addtopic "vom Mord gehört"
blabla, machdasunddas
endif

soll nur die Eintragung gemacht werden

Journal "Seltsamer Mord" 1
Addtopic "vom Mord gehört"

letzteres kannst Du beides 10000000 millionen male machen, es gibt nur eine einzige eintragung.

Sollte Journal "Seltsamer Mord" 10 gesetzt werden lässt sich nicht mehr abfragen ob Journal "Seltsamer Mord" 1 jemals gemacht wurde denn GetJournalIndex "Seltsamer Mord" wäre dann 10 und nicht mehr 1.

Variablendeklarationen ( hier short Zombie ) immer an den Anfang des Scriptes.



Jungs wartet mal.
Der npc ist nicht tot.
Mann bekommt von ihn die aufgabe mit den mord und auch den eintrag im buch.
Dann kommt ein zombie und tötet den npc weil er zuviel weis.

Ich dachte das getjournalindex dafür sorgt das der player ein eintrag bekommt.
Wie gesagt, ich scripte nog nicht lange, aber langsam weis ich eure "technik".
Referenz-URLs