PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Script] Xaephrims Scriptethread: Heute: Kämpfe scripten?!



Xaephrim
19-02-05, 17:13
Moin!

Bin gerade dabei, ein paar Quests für mein derzeitiges Projekt ("Daedrastadt") zu erstellen und habe gerade ein kleineres Problem. Ich möchte, dass nach dem Abschluss eines bestimmten Auftrags der nächste Auftrag (von der selben Person) erst nach zwei Tagen vergeben werden kann. Er sagt dann also so etwas wie "Kommt in zwei Tagen wieder!" und nach zwei Tagen erhält man dann einen Journaleintrag, der einen daran erinnert, dass er ja einen Auftrag für einen hat. Ferner plane ich diesen Eintrag dann auch zu nutzen, um das nächste Dialogthema freizuschalten.
Das Problem ist nur, wie mache ich das am intelligentesten? http://forums.ubi.com/infopop/emoticons/icon_wink.gif
Was mir einfallen würde, wäre ein Timerscript, wie zum Beispiel das hier aus SFD:
"
Begin TimerScript

Float timer
Short state

Set timer to (timer + GetSecondsPassed)

If (timer > 10)
MessageBox "Displayed every 10 seconds"
Set timer to 0
Endif

End TimerScript
"
Jedoch habe ich damit gleich zwei Probleme.
1.) Wie lang sind zwei Morrowind Tage in Sekunden?
2.) Wie bringe ich die Sache mit dem Journaleintrag da rein?!

Und 3.) Geht es eventuell doch noch irgendwie einfacher?! http://forums.ubi.com/infopop/emoticons/icon_biggrin.gif

PS: Habe schon die Suchfunktion benutzt, aber nichts gefunden, also sorry, wenn es das schonmal gab.

Xaephrim
19-02-05, 17:13
Moin!

Bin gerade dabei, ein paar Quests für mein derzeitiges Projekt ("Daedrastadt") zu erstellen und habe gerade ein kleineres Problem. Ich möchte, dass nach dem Abschluss eines bestimmten Auftrags der nächste Auftrag (von der selben Person) erst nach zwei Tagen vergeben werden kann. Er sagt dann also so etwas wie "Kommt in zwei Tagen wieder!" und nach zwei Tagen erhält man dann einen Journaleintrag, der einen daran erinnert, dass er ja einen Auftrag für einen hat. Ferner plane ich diesen Eintrag dann auch zu nutzen, um das nächste Dialogthema freizuschalten.
Das Problem ist nur, wie mache ich das am intelligentesten? http://forums.ubi.com/infopop/emoticons/icon_wink.gif
Was mir einfallen würde, wäre ein Timerscript, wie zum Beispiel das hier aus SFD:
"
Begin TimerScript

Float timer
Short state

Set timer to (timer + GetSecondsPassed)

If (timer > 10)
MessageBox "Displayed every 10 seconds"
Set timer to 0
Endif

End TimerScript
"
Jedoch habe ich damit gleich zwei Probleme.
1.) Wie lang sind zwei Morrowind Tage in Sekunden?
2.) Wie bringe ich die Sache mit dem Journaleintrag da rein?!

Und 3.) Geht es eventuell doch noch irgendwie einfacher?! http://forums.ubi.com/infopop/emoticons/icon_biggrin.gif

PS: Habe schon die Suchfunktion benutzt, aber nichts gefunden, also sorry, wenn es das schonmal gab.

ReneMiner
19-02-05, 18:02
Es gibt zwei Möglis:

wenn Du nur MW hast gibt es die globale Day die den Tag des aktuellen Monats enthält.

begin

short Heute
short TageVorbei

;if ( menumode == 1 )
;return
;endif

if ( Heute == 0 )
set Heute to Day
else
if ( Heute != Day )
set TageVorbei to TageVorbei + 1
set Heute to Day
endif
endif

; if ( TageVorbei >= Wieviele auch immer )
; passiert was tolles
; stopscript dieseshier
; endif

end

mit Tribunal oder Bloodmoon gibt es die globale short DaysPassed welche mit dem ersten Spieltag beginnt zu zählen. Die zählt somit die Spieltage ab und damit ist natürlich einfacher zu rechnen als mit Kalendertagen denn hier muss man nicht aufpassen da nach dem 31. nicht der 1. kommt...

Xaephrim
20-02-05, 07:21
Hmm, da werfen sich mir doch gleich noch ein paar Fragen auf! http://forums.ubi.com/infopop/emoticons/icon_biggrin.gif

1.) Ich sehe irgendwie keinen besonderen Vorteil in "short DaysPassed", denn ich weiß ja eh nicht, an welchem Tag der Spieler das Script auslöst und somit muss ich mich doch eh nicht mit Kalendertagen herumschlagen?! (Ich hab überigens Tribunal + BM)

2.) Die Frage mit dem Journaleintrag ist auch noch nicht geklärt ... könnte ich einfach
if ( TageVorbei >= blablabla )
Journal, "Journal_ID", Index
in das Script eintragen und es dann beenden?!

Xaephrim
20-02-05, 09:55
*blub*

Habe es jetzt so gemacht, wie ich sagte ... jedoch scheint das Script nicht mit Tagen zu arbeiten sondern mit Stunden. Aber das ist ja kein Problem. http://forums.ubi.com/infopop/emoticons/icon_wink.gif

Thx

So und jetzt geh ich erstmal wählen ...

ReneMiner
20-02-05, 10:59
Mit Tribunal und Bloodmoon ist das natrülich einfacher, hier das gleiche Script für TR/BM:

begin

short TagDerTat

if ( TagDerTat == 0 )
set TagDerTat to daysPassed + 2 ; sagen wir übermorgen )
elseif ( TagDerTat >= dayspassed )
Journal HeutPassiertWas 123
stopscript dieseshier
endif

end

Xaephrim
20-02-05, 12:46
Hmm, cool http://forums.ubi.com/infopop/emoticons/icon_biggrin.gif Thx!

Und vielleicht kannst du mir ja auch nochmal helfen ... http://forums.ubi.com/infopop/emoticons/icon_wink.gif (oder auch irgendjemand anders ^^)

Ich frage mich n�mlich gerade, wie ich m�glichst intelligent eine T�r so verschlie�e, dass sie nicht mehr aufgeht. Klingt komisch, ist aber so!
Denn in meinem Mod wird die Anreise durch eine Schiffsreise bewerkstelligt, wobei der Spieler die ganze Zeit nur im Innern des Schiffes sein darf, da das Schiff die ganze Zeit schon am Zielort steht. http://forums.ubi.com/infopop/emoticons/icon_wink.gif
Da w�re es etwas merkw�rdig, wenn er pl�tzlich w�hrend der Reise die Luke nach drau�en aufmacht und schon da ist, obwohl er laut Story noch auf der Reise sein m�sste! http://forums.ubi.com/infopop/emoticons/icon_biggrin.gif
Mit anderen Worten: Ich muss die Luken so lange verschlossen halten, bis ich die Reise als "zu Ende" definiere.
Eine M�glichkeit w�re ein Script mit dem Lock Befehl zu schreiben, welches die T�r einfach immer wieder verschlie�t, wenn der Spieler sie aufmacht ... das ist aber 1.) nicht besonders elegant, 2.) w�re das eine M�glichkeit um seine Sicherheitsskills hochzucheaten und 3.) w�rde das glaube ich unn�tig viel rechenleistung kosten, da das Script jeden Frame ausgef�hrt werden w�rde?!?

Also? irgendwelche Vorschl�ge?

chris_tm
20-02-05, 13:21
Wenn verhindert werden soll, dass der Player seine Skills an der Tür trainiert bleibt eigentlich nur die Möglichkeit die Tür einfach nicht zu öffnen solange eine bestimmte Bedingung nicht erfüllt ist.

In diesem Skript ist das Öffnen der Tür vom JournalIndex abhängig (erst wenn der Index grösser als 10 ist geht die Tür auf):

<pre class="ip-ubbcode-code-pre">Begin tuerscript

if ( OnActivate == 1 )
if ( GetJournalIndex "JournalName" &lt;= 10 )
MessageBox "Die Tür bleibt während der Reise verschlossen"
else
Activate
endif
endif

End </pre>

Xaephrim
20-02-05, 13:29
Hmm ... lol http://forums.ubi.com/infopop/emoticons/icon_biggrin.gif

Ich übernehm das einfach mal so, k? http://forums.ubi.com/infopop/emoticons/icon_wink.gif

Xaephrim
20-02-05, 14:42
Sorry wegen Doppelpost, aber mein Browser mag das Edit Fenster nicht ... fragt mich nicht warum.

1.) @ReneMiner: In dem letzten Script ist anscheinend ein Fehler, denn man bekommt den Journaleintrag sofort und nicht erst nach zwei Tagen?!

2.) Wo ist der Fehler in folgendem Script?! Ziel ist es, ein Greeting zu erzwingen, wenn sich der Spieler dem scriptbehafteten NPC nähert.

Begin

short doOnce

if ( GetJournalIndex "Blablabla" &gt;= 18 )
Return
endif

if ( doOnce == 0 )
if ( GetDistance Player &lt;= 512 )
if ( GetLOS Player == 1 )
ForceGreeting
set doOnce to -1
endif
endif
endif

End

ReneMiner
20-02-05, 17:14
begin

short TagDerTat

if ( TagDerTat == 0 )
set TagDerTat to daysPassed + 2 ; sagen wir übermorgen )
elseif ( dayspassed &gt;= TagDerTat )
Journal HeutPassiertWas 123
stopscript dieseshier
endif

end

sorry, den gleichen Verdreher hatte ich mit HlaBitter im Vampirecheck-Gedönse :lol:

Xaephrim
27-03-05, 13:26
Vorweg sorry, dass ich den Thread hier wieder aufwärme, aber mein Browser lässt mich weder neue Threads erstellen noch Posts editieren! http://forums.ubi.com/infopop/emoticons/icon_biggrin.gif

So!

Neues Problem! Wieder mal mit Türen ...

Ich habe eine Tür erstellt, die in einen Tempel führen soll. Diese soll aber erst benutzbar sein, wenn der Spielbar ein bestimmtes Objekt gefunden hat, einen Schlüssel gewissermaßen. Einen solchen kann ich aber nicht nehmen, da sich Schlüsselschlösser ja noch knacken lassen und das währe äußerst schlecht. Ich brauche also eine Tür, die NUR durch meinen speziellen Schlüssel geöffnet werden kann und nicht anders.
Außerdem soll die Tür nachdem sie einmal mit dem Schlüssel geöffnet wurde dann auch ohne den Schlüssel benutzbar sein. Denn dann ist sie ja schließlich aufgeschlossen!? Gell http://forums.ubi.com/infopop/emoticons/icon_wink.gif
Und es soll noch eine Messagebox erscheinen, die sagt, dass die Tür verschlossen ist. Als Tipp sozusagen.

Habe mir da schon so einiges überlegt und vieles ausprobiert, aber irgendwie will es nicht recht klappen.

Hier das erfolgsversprechendste Script imho:

Begin Script

short doOnce

if ( doOnce == 0 )
if ( OnActivate == 1 )
if ( GetItemCount, "Schlüssel" &lt; 1 )
MessageBox "Die Tür ist verschlossen ihr müsst erst den Schlüssel finden blabla!"
else
Activate
set doOnce to -1
endif
endif
endif

End Script

Ist im Grunde nur ne Abwandlung vom oben genannten, aber es funzt trotzdem nicht.http://forums.ubi.com/infopop/emoticons/icon_biggrin.gif

jsc-850
27-03-05, 15:41
Das Script läuft auf der Tür, also musst du abfragen ob der Spieler den Schlüssel hat, im Moment fragst du ob die Tür ihn hat, also so:

if ( Player-&gt;GetItemCount, "deine_Schlüssel_ID" &lt; 1 )

Ein ähnliches Beispiel findest du hier (http://www.morrowind.hierher.net/htm/script.html).

Die beste Lösung (nur eben ohne Messagebox) ist aber immer noch den Locklevel der Tür auf 0 zu setzen - damit ist sie mit einem Dietrich nicht zu knacken und kann auch nur mit dem Schlüssel geöffnet werden (man kann es austricksen, auch ohne Konsole - aber wer das herausbekommt hat es auch verdient denk ich http://forums.ubi.com/images/smilies/16x16_smiley-very-happy.gif ).
Sonst siehe Beispielscript. Wobei du bei MenuMode und OnActivate den Vergleich mit 1 auch weglassen kannst, statt
if ( MenuMode == 1 )
also
if ( MenuMode )
bzw. dann
if ( OnActivate )

edit: Klammer verrutscht ... und deine Tür geht bei doonce = -1 (obige Version) nie wieder auf da du ja das Activate abfängst aber keine Bedingung mehr hast bei der es gesetzt wird. http://forums.ubi.com/images/smilies/16x16_smiley-very-happy.gif
Bei einer Teleporttür wird übrigens das Cellchange Ereignis nicht mehr ausgelöst, wenn du das Activate mit Script abfängst (siehe ReneMiners Beiträge - hat sich viel damit beschäftigt).

Xaephrim
27-03-05, 16:37
Das mit dem "Player-&gt;GetItemcount" macht irgendwie Sinn http://forums.ubi.com/infopop/emoticons/icon_biggrin.gif

Das doOnce-Problem hab ich überigens selbst noch erkannt, es nur nicht mehr gepostet ... und das mit Locklevel = 0 setzen habe ich imho auch irgendwann mal ausprobiert, weil ich das mal gehöt hatte, konnte die Tür dann aber sofort öffnen?! Na ja ... nochmal probieren. http://forums.ubi.com/infopop/emoticons/icon_wink.gif

Und bei Teleporttüren wird "das Cellchange Ereignis nicht mehr ausgelöst"?! Das klingt nach einem Problem ...

Bzw ... hast du das Tut gerade für mich geschrieben?! Thx. http://forums.ubi.com/infopop/emoticons/icon_biggrin.gif

ReneMiner
27-03-05, 18:14
Eine Tür die sich nur mit einem bestimmten Schlüssel öffnen lassen soll ist ganz einfach und braucht kein Script welches den Schlüssel abfragt.

Setze an der Tür ein Häckchen für Locked, keine Trap und LockLevel 0 lassen.
Dazu musst Du ein misc_item als Schlüssel einsetzen und dieses Item auch ins Spiel bringen.
Das geht mit keinem Dietrich und keinem Zauber auf und mit Unlock per Konsole stürzt das Game meistens ab http://forums.ubi.com/infopop/emoticons/icon_biggrin.gif

An der Tür kannst Du ein Script machen

if ( GetEffect sEffectLock == 1 )

versucht der Spieler nämlich mit einem Zauber die Tür zu locken um sie knacken zu können. Da kannst Du einfach ein

Lock 0

hinterherknallen und so schnell kriegt er weder den Öffnen-Zauber gesprochen noch den Dietrich gezückt...

jsc-850
28-03-05, 01:22
Ja, klar, danke Rene - den Schlüssel mußt du natürlich der Tür zuweisen http://forums.ubi.com/images/smilies/16x16_smiley-very-happy.gif

Das Scriptbeispiel hat nur einen Zweck - siehe Bild dazu. Es verhindert das nach dem Öffnen der Tür der Dolch sinnlos in der Luft schwebt. Verschwinden lassen ist uncool, wer die Tür von dieser Seite knackt nimmt ihn wahrscheinlich eh (außer er ist gerade mit wegrennen beschäftigt) und von der anderen Seite geht dann natürlich weder Dietrich noch Schlüssel ins Schloß, wenn der Dolch noch drinsteckt http://forums.ubi.com/infopop/emoticons/icon_wink.gif ... aber das ist schon ält - Anfängerarbeit aus 2003 http://forums.ubi.com/images/smilies/16x16_smiley-very-happy.gif

Mit Renes Script (spelleffect) machst du dann auch den letzten Weg die Tür mit Spielmöglichkeiten zu überlisten zunichte - und auf Konsolenleute braucht eh keiner Rücksicht zu nehmen http://forums.ubi.com/images/smilies/16x16_smiley-very-happy.gif

Xaephrim
28-03-05, 11:30
@Rene: Bei der Methode hab ich dann aber noch keine Messagebox?! Die sollte nämlich doch gerne da sein, da der Spieler sonst ziemlich verwirrt wäre an der Stelle. Und das will man ja nicht.

Hier ist überigens mein finales Script. Funktioniert einwandfrei. *freu* (falls das irgendwer mal brauchen sollte ^^)

Begin

short doOnce

if ( MenuMode == 1 )
return
endif

if ( doOnce == 0 )
if ( OnActivate == 1 )
if ( Player-&gt;GetItemCount, "Schlüssel" &lt; 1 )
MessageBox "Die Tür scheint verschlossen zu sein. blabla"
else
Activate
set doOnce to 1
endif
endif
endif

End

Xaephrim
28-03-05, 14:28
So, neues Problem!

Ich möchte nach einem bestimmten Ereignis (Aufnehmen eines Gegenstandes), dass in einer anderen Zelle ein paar neue NPCs erscheinen.
Dabei befindet sich der Gegenstand und die NPCs nicht in der selben Zelle (Gegenstand ist Interior, NPCs sind Exterior)

Habe mir überlegt, das Erscheinen der NPCs an einen Journaleintrag zu koppeln, der erstellt wird, sobald der Gegenstand aufgenommen wird. Das ist noch recht einfach und funktioniert auch schon.

Das Erscheinen hingegen ist relativ schwierig. Habe mir dazu die NPCs von Rabenfels angeschaut. Da wird das durch folgendes Script geregelt:
"
Begin ColonyAfer

short nolore

if ( AferGuard == 0 )
if ( GetJournalIndex "CO_5" &lt; 80 )
if ( GetDisabled == 0 )
Disable
endif
elseif ( GetJournalIndex "CO_5" &gt;= 80 )
if ( GetDisabled == 1 )
Enable
endif
endif
endif

End
"
Ein solches existiert für jeden NPC, jedoch habe ich keine Ahnung, wie es gestartet wird, denn es hängt nicht direkt an den NPCs. Und ich glaube nicht, dass diese ganzen Scripts (mehrere Dutzend) einfach so IMMER im Hintergrund laufen?! Das wäre ziemlich merkwürdig.
Habe dann versucht, dieses Script anzupassen und direkt auf einen NPC zu setzen. Das funktioniert aber nicht, da der NPC dann schon vorhanden ist obwohl der Journaleintrag noch gar nicht existiert.
Kann mir das irgendwer erklären?! Oder gibt es am Ende noch eine viel einfachere Lösung? Das Script oben erscheint mir relativ rechenaufwendig, wenn man es mit vielen NPCs macht. Danke http://forums.ubi.com/infopop/emoticons/icon_wink.gif

PS: Wie poste ich eigentlich Scripts inklusive Tabstops?!

ReneMiner
29-03-05, 06:51
Mit Tabstopps Posten? Im Reply-Formular gibts oben einen Button (&lt;/&gthttp://forums.ubi.com/infopop/emoticons/icon_wink.gif , markiere den Code und klick dann diesen Button oder schreib ihn nachträglich zwischen die Code-Klammern.

Entweder stellst Du deine NPC's einfach auf, markierst sie als Persistent und gibst im Startscript die Disable-Anweisungen wenn die Journal-Einträge nicht da sind.
Enable sie dann im Dialog oder per Script von ausserhalb.
Oder mach nicht persistente Objekte/NPC's mit eigenem Script

begin

if ( cellchanged == 0 )
return
endif

if ( GetJournalIndex "Bedingung erfüllt" &gt;= 1 )
enable
return
endif

disable

end

Xaephrim
29-03-05, 08:24
In dem Script fehlt ein "else", ansonsten funzt es aber sehr gut! Danke http://forums.ubi.com/infopop/emoticons/icon_biggrin.gif
Und ich zerbrech mir den Kopf ^^

Habe überigens schon wieder ein neues Problem!
In meinem Mod gibt es ja, wie vielleicht bekannt, einen bösen bösen Daedrakult und einen ganzen Haufen Soldaten der imperialen Legion.
Jetzt wäre es für die Athmo' ganz gut, wenn ich da ein paar Kämpfe scripten würde.
Ich könnte das zwar genau so machen, wie es in Ald Daedroth gemacht wurde, aber das erscheint mir sehr kompliziert, da da jeder NPC ein Script hat, das ihm vorschreibt, wen er angreift und wen nicht. Das wird bei vielen NPCs natürlich aufwändig.
Schöner wäre es, wenn ich einfach nur NPCs beider Parteien in einen Raum werfen müsste und dass die sich dann kloppen würden.
Funktioniert, wenn man Fight bei beiden auf 100 setzt, aber dann greifen sie auch den Player an. Das sollen die Soldaten aber nicht. Habe versucht das über die Faction zu regeln (Reaktion -3 bei beiden), hat aber leider nicht geklappt ...

Ideen?! Ich geh dann ersma n Quark essen und dann weiter Dialoge schreiben ... http://forums.ubi.com/infopop/emoticons/icon_biggrin.gif

Uranor
29-03-05, 16:16
Interessant, ReneMiner. Der Aufbau erspart sogar die DoOnce Variable. Das prinzip will ich mir merxen.


Xaephrim, es ist nicht üblich, in solchen Fällen if elseif zu nutzen. Ein strenger Praeprozessor würde das dann auch monieren und zumindest eine Warnung ausgeben - wenn Warnstufe hier eingeschaltet. cellchanged und GetJournalIndex haben nichts miteinander zu tun.

if elseif soll aber als Filter wirken, das nur bei einem Parameter oder halt bei entsprechend verbundenen Parametersätzen sinnvoll klappen kann. Wenn Var1 == Wert, wenn die Orks angreifen, wenn der 3. Vollmond im Zyclus ist, das behandelt man in eigenen Routinen - und würde in Sourcen auch eigene Functionen dafür schreiben, die dann auch wiederverwendbar sind. Der CS ist sehr tolerant, daher geht vieles, das nicht unbedingt sinnvoll ist. So manches davon kann aber zu Instabilitäten und Ungenauigkeiten führen. Sauberer Aufbau vermeidet Probleme.

Xaephrim
29-03-05, 16:44
Hmm ... was soll ich sagen?! http://forums.ubi.com/infopop/emoticons/icon_biggrin.gif

Habe die Kämpfe überigens jetzt nach dem Schema gestrickt, wie sie in Ald Daedroth gemacht sind.

Beispiel (originales Script):

<pre class="ip-ubbcode-code-pre">
Begin fightClendil

Short NoLore
short doonceA
short doonceB

if ( CellChanged == 0 )
Return
endif

if ( doonceA == 0 )
if ( GetDeadCount "Salvas Areleth" == 0 )
StartCombat "Salvas Areleth"
set doonceA to 1
endif
endif

if ( doonceB == 0 )
if ( GetDeadCount "Daral Thireloth" == 0 )
StartCombat "Daral Thireloth"
set doonceB to 1
endif
endif

End fightClendil
</pre>

Hat allerdings einen ziemlichen Nachteil! Es ist verbuggt. Sobald man sich einmischt, ja nur in die Nähe des Kampfes geht, kriegt man sofort ne Meldung dass man ein Verbrechen begangen hätte und schon hat man ein Kopfgeld. Was besonders blöd ist, da bei mir ja auch Wachen mitkämpfen und die vergessen dann ihren eigentlichen Kampf und greifen zusammen mit allen anderen NPCs den Spieler an!!?
Das geht gar nicht!!!

Uranor
29-03-05, 21:31
Da fällt mir grad ein, dass manchmal eine Wache auf "mich" losgeht, offenbar ganz ohne Anlass. Doch bevor ich richtig die Waffe ziehen oder wohl besser flüchten kann... jau der haut, aber nicht meinen Char. Hinter mir ist ein Klippenläufer aufgetaucht, den attakiert er.

Bestünde ggf. die Möglichkeit, alle guten vom Typ Wache zu kreieren? Kleiden und ausrüsten kannst du sie nach Belieben, brauchst also die aktuellen Kreationen nicht mehr neu stricken.

Wenn es klappt, gehen die Wachen sowieso auf die Eindringlinge los. Dass Bürger ansich auch Wachen sind, sieht ja niemand. Ohne Kampfauftrag würden sie dich in Ruhe lassen.

Aber die düsteren Horden. Sind Daedra nicht per Default sowieso feindlich? Darf man sich ohne Kopfgeldrisiko mit ihnen auseinandersetzen?...

... Viel ist es nicht, aber vielleicht kann es dich auf eine Idee bringen?

ReneMiner
30-03-05, 10:26
@Xaephrim

Wachen sind NPC's die bereits ein Internes Script tragen welches hauptsächlich vom AiAlarm geregelt wird.
Wachen sind sehr schlecht dazu geeignet wie Du das vorhast...

Während des Kampfes müsstest Du deren AiAlarm auf 0 setzen, sonst ist jeder Treffer ein Verbrechen.
Ausserdem wenden sich Wachen die an deiner Seite kämpfen gegen Dich wenn Du eine Kreatur herbeibeschwöst!

Wenn Du Bloodmoon hast dann tausche mit dem PlaceAtMe-Befehl die Wach-NPC's für den Kampf einfach gegen gleich aussehende einer anderen Klasse aus, z.B. gegen Krieger

Ansonsten musst Du es mit den Alarm-Settings probieren. Das ist ähnlich wie bei den Fight-Settings.

Eine Wache mit einem Alarm von 100 kommt angelaufen und spricht den Spieler an wenn der Kopfgeld offen hat und ein NPC mit Fight 100 greift immer an. Genaue Tabelle dazu gibts in der Editor-Hilfe.

Tar-Meneldur
30-03-05, 11:09
Könnte man nicht einfach ein
<pre class="ip-ubbcode-code-pre">StopCombat Player</pre>
in ein Script machen, das die Wachen betrifft?
Dann würden die sich schön untereinander kloppen und den Player in Ruhe lassen.

Xaephrim
30-03-05, 11:52
Hmm, dann will ich mal hoffen, dass das der einzige Fehler ist. http://forums.ubi.com/infopop/emoticons/icon_wink.gif

Dann �ndere ich einfach mal die Klasse, sollte kein Problem sein. Thx http://forums.ubi.com/infopop/emoticons/icon_wink.gif

H�ttest du es eigentlich auch �ber derartige Scripts geregelt? Oder f�llt dir noch etwas besseres dazu ein?!

Xaephrim
30-03-05, 13:27
Sorry, hab keine Editfunktion ...

@Tar-Meneldur: Hab deinen Post nicht gesehen, lol.

Das könnte man vielleicht machen, aber dadurch würde man noch immer das Kopfgeld kriegen. Und das ist nicht gerade wenig ... ich hatte gestern plötzlich 160000, was normal so gut wie nicht erreichbar ist. Selbst als ich mal "spaßeshalber" halb Balmora abgeschlachtet habe, hatte ich boß ~25000.

ReneMiner
30-03-05, 15:34
Wenn ich zwei Parteien miteinanader kämpfen lassen möchte dann mache ich zunächst zwei NPCs einer neuen Rasse die ich dafür erfinde. Oder ich nehme zwei NPC's einer bestehenden unsichtbaren Rasse.
Die besteht nur aus einem Bodypart: EditorMarker.nif ( z.B. für Groin oder Head ) so das man sie im Editor sieht, aber nicht im Spiel.

Soweit klar?

Beide NPCs müssen im Editor in der Welt eingesetzt sein. Haben weder Wander,Fight,Alarm oder Hello-Werte, Fähigkeiten sind egal - sie sollten keine Zauber oder Waffen und keine Kleidung haben.

Beiden Kämpfer-"Teams" gebe ich unter AI die Follow-Order auf einen der beiden unsichtbaren Team-Führer.
Im richtigen Moment gebe ich beiden unsichtbaren Team-Führern die Order sich gegenseitig anzugreifen, danach werden sie einfach disabled.

Xaephrim
30-03-05, 15:57
Hm, das is natürlich auch ne Möglichkeit. http://forums.ubi.com/infopop/emoticons/icon_biggrin.gif

Schade eigentlich, dass sich das nicht über die Faction regeln lässt. Also dass alle Mitglieder einer Faction sofort bei Sichtkontakt alle Mitglieder einer bestimmten anderen Faction angreifen.

Bei mir könnte das nämlich eventuell merkwürdig aussehen, wenn ich im Exterior einen Kampf scripte, der Spieler angreift und ein paar der Gegner zu ein paar weit entfernten anderen Soldaten lockt. Die würden dann nämlich nur dumm rumstehen und zugucken. Die stehen zwar drei Zellen entfernt, aber möglich ist es. Könnte ich die höchstens auch noch mit entsprechenden Scripten belegen. *lol*

Xaephrim
02-04-05, 15:40
Weiterführung der Scriptingdiskussion aus meinem "Daedrastadt-Thread"
Betrifft Set Items.

----------------------------------
Meine Problemstellung aus dem Thread:

Nehmen wir an, wir haben ein Set das aus 3 Teilen besteht. Wenn ein BELIEBIGES Teil allein angelegt ist, wirken nur die Effekte dieses Items. Wenn ich ein BELIEBIGES anderes Teil dazu anlege, bekomme ich die Einzelwirkungen der beiden Teile +eine dritte Wirkung, den "teilweisen Setbonus".
Lege ich dann noch das letzte Teil an, so erhalte ich den vollen Setbonus.
Wobei egal ist, in welcher Reihenfolge ich das tue und es auch keine Rolle spielt, welche beiden Teile ich nehme um nur den ersten Bonus zu erhalten.

Vielleicht ist das deutlicher:
Teil 1 = Bonus A
Teil 2 = Bonus B
Teil 3 = Bonus C
Erster Setbonus = S1
Voller Setbonus = S2

Teil 1+2 =A+B+S1 ODER 1+3=A+C+S1 ODER 2+3=B+C+S1
und natürlich:
1+2+3=A+B+C+S1+S2
bzw.
1+2+3=A+B+C+S2 wenn man den ersten Setbonus als ein Teil des vollen ansieht.

Wenn ich es mir recht überlege, müsste man das eigentlich relativ einfach machen können, indem man einfach abfragt, welche Teile der Spieler angelegt hat. OnPCEquip oder wie die Funktion heißt. Wird natürlich aufwändig je mehr Teile man hat.
Fragt sich nur noch, an was ich das Script dranhänge.
Würde ich ein solches Script an sämtliche Setteile dranhängen, dürfte es Probleme geben, hänge ich es nur an ein Teil, wird dieses zur Vorraussetzung für das ganze Set. Hmpf.
----------------------------------

JSC meinte dann, das sei zu kompliziert, finde ich eigentlich nicht.
Was wäre, wenn man ein weiteres Item einführt, ein misc-Item, das sich einfach nur im Inventar des Spielers befinden muss, damit die Effekte eintreten? Das könnte das ganze doch eigentlich regeln?!
Tribunal bringt ja die HasItemEquipped Funktion, die mir hier helfen könnte.
Also etwa so (Vorsicht: Rohbau ^^)

<pre class="ip-ubbcode-code-pre">
Begin SetScript

; Script wird auf ein misc-Item gelegt, das sich im Inventar des Spielers befinden muss

if ( player-&gt;HasItemEquipped "Item_01" )
Return
endif
if ( player-&gt;HasItemEquipped "Item_02" )
Return
endif
if ( player-&gt;HasItemEquipped "Item_03" )
Return
endif
if ( player-&gt;HasItemEquipped "Item_01" )
( player-&gt;HasItemEquipped "Item_02" )
Player -&gt; AddSpell, "Setbonus_01"
endif
else
if ( player-&gt;HasItemEquipped "Item_01" )
( player-&gt;HasItemEquipped "Item_02" )
( player-&gt;HasItemEquipped "Item_03" )
Player -&gt; Removespell, "Setbonus_01"
Player -&gt; Addspell, "Setbonus_02"
endif

End
</pre>

Könnte das klappen? Sieht zu einfach aus irgendwie. Oder ich bin einfach nur müde und hab irgendwas übersehen ... http://forums.ubi.com/infopop/emoticons/icon_biggrin.gif

Exterminas_II
02-04-05, 15:53
Mach es so, schreib ein Script, in dem eine globale Varibale +1 gesetzt wird wenn der spieler eines der rüstungsteile anlegt, dann machst du noch ein globes Script, dass in etwa abfragt:

If ( Globalevar == 1 );1 Setobjekt
return
elseif ( Globalevar == 2 );2 Setobjekte
If ( PlayerGetspelleffects (Hieß so ähnlich) "Setbonus" == 1 )
return

elseif If ( PlayerGetspelleffects (Hieß so ähnlich) "Setbonus" == 0 )

player-&gt; addspell "Setbonus"

endif

endif

usw.

Uranor
02-04-05, 17:54
Xaephrim, wenn 2 oder 3 Teile angelegt sind, sind die ersten 3 Bedingungen immer true. Wegen return geht es niemals weiter.

Dazu kommt, dass das Ablegen eines Teilchens auch Folgen hat und überwacht werden muss. Ich müsste jetzt noch unbekanntes Syntaxgebiet schreiben, frag also erst mal, ob die Bedingung gültig wäre:

if ( player-&gt;HasItemEquipped "Item_02", 0 )

Bei ja wäre der Algor tatsächlich nicht so schlimm. Es muss nur die Wahrheitstabelle komplett abgearbeitet werden.

000, 001, 010, 011, 100, 101, 110, 111

Für den ersten Block gilt:
Teil_01 nein, Teil_02 nein, Teil_03 nein
usw.

In jedem Block wird geprüft, welche der Bonuszauber vorhanden sind. Sind die falschen true, werden sie removed.

Die Idee mit dem zusätzlichen Misc-Teilchen als Artefaktaktivator wär ohnehin was feines. Das ist wie der Moxastab, der in "Secrets of Evermore", SNES dem Schwert noch mal zusätzliche Schärfe vermittelte.

Schön und stilecht fände ich es aber, wenn die Boni nicht auf den Player sondern auf die Teilchen gelegt würden. Oder eben auf das Aktivierungs-Item. Dann entwickelt das seine Kraft, wenn und solange mindestens 2 Teilchen angelegt sind.


Exterminas_II, wäre unter solchen Bedingungen die globale Arbeit überhaupt notwendig?

Exterminas_II
03-04-05, 09:18
Notwendig nein, die einfachste Lösung ja.

Xaephrim
03-04-05, 12:15
@Exterminas:
Von globalen Scripts halte ich irgendwie relativ wenig, besonders von solchen die permanent laufen und nicht irgendwann im Mod überflüssig werden und somit deaktiviert werden können.
DENN man stelle sich vor, was passieren würde wenn jeder Mod plötzlich so ein Script starten würde ... ich glaube nicht, dass das der Framerate gut täte, denn es gibt ja durchaus Leute, die 100+ Mods aktiviert haben.
Somit ist jede Lösung die darauf verzichtet vorzuziehen, auch wenn sie komplizierter ist.

@Uranor:
Stimmt wohl, der erste Teil ist irgendwie etwas schwachsinnig. http://forums.ubi.com/infopop/emoticons/icon_biggrin.gif
Das Ablegen eines Teils fehlt natürlich auch noch. Ansonsten könnte man den Effekt ja nicht mehr weg bekommen. (auf normalem Wege) Für die Aktivierung der Effekte ist das bisher aber schon brauchbar, denke ich.
Außerdem denke ich, sollten die Boni auf dem Player bleiben und nicht auf den Items, da es ja Wirkungen sind, die von allen Teilen zusammen "entfesselt werden" und nicht von einem einzigen. Ist außerdem übersichtlicher. http://forums.ubi.com/infopop/emoticons/icon_biggrin.gif

Exterminas_II
03-04-05, 13:47
Ein sauberes Script frisst praktisch keine Leistung, zumal du ja mehrere Sachen in eines packen kannst, ein sog. Mainscript, klar wenn du für jedes deiner Sets ein eigenes Script machst frisst das nach dem 100. dan schon so etwa ein Fps, aber propozional gesehen ist das nichts, da löschst du fünf Grasmodelle raus und hast es wieder drin.

Xaephrim
04-04-05, 14:43
Möp, da muss ich meckern http://forums.ubi.com/infopop/emoticons/icon_wink.gif

Grasmodels wirken jawohl kaum auf ALLE Zellen. Wenn ich n Dagon Fel ein Gras setze, wird man das in Vivec kaum merken.
Ein globales Script unter Umständen schon.

Ich denk trotzdem drüber nach http://forums.ubi.com/infopop/emoticons/icon_biggrin.gif