PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [WIP] Land of the Dead



Lexius
22.06.2006, 20:21
Ich hab mir überlegt ein Zombie-PI zu erstellen.
Ich weiß es gibt bereits Zombies im Spiel, ich will das ganze nur etwas interessanter machen. Und zwar soll jeder der durch die Hand eines Zobies stirbt, selber zu einem Zombie werden (ausgenohmen der Spieler selber).

Ich will zuerst ein wenig rumexperimentieren, genauer gesagt ich wollte einen script schreiben der eine tote Leiche durch einen Zombie ersetzt.
Was haltet ihr von der Idee?
Und wie lautet der Befehl, mit dem man die Leiche verschwinden lässt? Muss irgendwas mit disable sein. Die ID des NPC und dann disable vielleicht???

Schlachtvieh
22.06.2006, 20:24
Die Idee find ich an und für sich ganz gut, aber die Umsetzung!

Mal ein paar Vorschläge für das PI:

-Sollte ausserhalb von Cyrodiil sein
-Vlt. ein paar NPC-Rettungs-Quests


Aber das umzustzen wird schwer. Ich weiss ja nicht wie gut du modden kannst.
Also ich kanns überhaupt nicht:D

Anakin3
22.06.2006, 20:31
cool das wird bestimmt lustig

Knorzzz
22.06.2006, 20:32
ich find die idee toll:D

auch die 'toten leichen' liebe ich:D

eine tote Leiche

Lexius
22.06.2006, 21:15
also mein NPC verschwindet jetzt wenn ich ihn töte, jetzt soll an seiner Stelle ein Zombie auftauchen. Wie krieg ich das am besten hin?

Wenn ich schreib:

short a == 0

Begin OnDeath
disable
set a to 1
end

Begin GameMode
if a == 1
Enable AAAZombie <--(hier liegt das Problem) *
else
endif
end

* das enable bezieht sich auf den NPC, dieser taucht wieder auf, anstelle des Zombies

Wie kann ich das ändern?

Lexius
22.06.2006, 22:30
ok hab jetzt einiges ausprobiert und es sieht so aus, als müsste ich 2 scripts
mit einander verbinden. Also ein Script soll den anderen aktivieren.

weiß jemand wie man sowas machen kann?

Gorkon
22.06.2006, 23:06
Wozu 2 Skripte?


Begin OnDeath

PlaceAtMe AAAZombie 1 128 0
disable

End

Läßt sich bestimmt verfeinern.
PlaceAtMe:
http://cs.elderscrolls.com/constwiki/index.php/PlaceAtMe

Lexius
22.06.2006, 23:20
Cool hat funktioniert, danke für deine Hilfehttp://www.multimediaxis.de/images/smilies/old/sm_12.gif http://www.multimediaxis.de/images/smilies/old/sm_12.gif http://www.multimediaxis.de/images/smilies/old/sm_12.gif

Was genau bedeuten denn die Zahlen "1 128 0" ??

Gorkon
23.06.2006, 00:28
Click the f***ing link ;)

PlaceAtMe ItemID, count, distance, direction
ItemID: Was du plazieren willst, hier Zombies.
count: Wie viele davon. Deshalb die 1.
distance: Abstand vom rufenden Objekt (hier der sterbende NPC). Hmm, kann vermutlich auch auf 0 gesetzt werden, da der Zombie ja quasi den NPC ersetzt. 128 hatte ich von einem ähnlichen Skript abgeschrieben. (Sanguine Rose, ersetzt Menschen durch Monster.)
direction: Siehe Link. 0 steht für "vorne".

Optimiert für deinen Fall:
PlaceAtMe AAAZombie, 1, 0, 0

Guts2
23.06.2006, 08:11
Hey danke für den Tipp, den Befehl habe ich noch garnicht gesehen. Jetzt kann ich was in meinem Mod realisieren. 8)

Shoran
23.06.2006, 08:17
Es gibt schon ein Englisches PI mit dem Namen "DeadCanDance" das Zombies nach ihrem Ableben nach einer Prozentualchance wieder belebt...villeicht kannst Du da Script klauen...

Asgard
23.06.2006, 11:23
Klauen? Das wäre aber ziemlich fies! Andere machen sich die Arbeit und dann kommt jemand, findet die Arbeit cool und klaut sie sich einfach. Nenene, das ist nicht die feine Art, zuerst um Erlaubnis fragen, alles andere wäre unhöflich. http://www.multimediaxis.de/images/smilies/old/s_063.gif

Lexius
23.06.2006, 14:25
Ich brauche für meinen Mod eine Zeitfunktion, z.B. soll die Leiche erst nach einer Zeit
durch einen Zombie ersetzt werden. Und der Zombie ist auch zuerst tot und steht nach einer Zeit wieder auf.
Ich hab den Befehl "Set Timer to" und "GetSecondsPassed" gefunden
weiß aber nicht wie er ganau funktioniert und was er bewirkt.

Kann es mir jemand erklären?

don_wasweisich
23.06.2006, 16:38
Klauen? Das wäre aber ziemlich fies! Andere machen sich die Arbeit und dann kommt jemand, findet die Arbeit cool und klaut sie sich einfach. Nenene, das ist nicht die feine Art, zuerst um Erlaubnis fragen, alles andere wäre unhöflich. http://www.multimediaxis.de/images/smilies/old/s_063.gif

er hat aber nix neues erfunden, sondern etwas von bethesda benutzt, um seine sachen zu bauen. und genau so war das "klauen" auch gemeint. die meisten scriptbefehle etc. kenn ich auch nur aus pi´s oder dem hauptspielhttp://www.multimediaxis.de/images/smilies/old/grinundwech.gif

LoF
23.06.2006, 16:50
er hat aber nix neues erfunden, sondern etwas von bethesda benutzt, um seine sachen zu bauen. und genau so war das "klauen" auch gemeint. die meisten scriptbefehle etc. kenn ich auch nur aus pi´s oder dem hauptspielhttp://www.multimediaxis.de/images/smilies/old/grinundwech.gif

Du meintest wohl eher, das er sich eine Hilfestellung suchen sollte:rolleyes:
Solang man nicht den ganzen Script oder einen großen Teil übernimmt ist es wirklich nur eine Hilfe!

Gorkon
23.06.2006, 17:56
Wenn die Menschheit nicht den Trick entwickelt hätte, sich neue Tricks von anderen abzukucken, säßen wir heute noch auf Bäumen. ;)

OnTopic: Ein Timer läßt sich mittels GetSecondsPassed realisieren. Das gibt die Zeit zurück, die seit dem letzten Durchlauf des Skripts vergangen ist (üblicherweise ein Selkunden-Bruchteil). Man addiert dann einfach ständig den Wert auf, und ab einem bestimmten Grenzwert passiert halt was. Bei Abfargen auf keinen Fall if ( x == 10 ) benutzen, da die Zeit z.B. von 9.98 auf 10.02 springen kann! Deshalb immer ( x > 10 ) und eine DoOnce- oder Stage-Variable benutzen.


; timer-Variable wird jedesmal erhöht
float timer
; doOnce ist 0 und wird auf 1 gesetzt, wenn wir fertig sind
short doOnce

Begin GameMode

set timer to ( timer + GetSecondsPassed )

; mach wat nach 10.5 Sekunden
if ( timer > 10.5 )
; aber nur, wenn doOnce noch 0 ist!
if ( doOnce = 0 )

<Hier Zombie-Terror einfügen>

set doOnce to 1
endif
endif

End

Zombie zuerst tot? Das ist ein bisserl schwerer. Man kann ausnutzen, daß PlaceAtMe eine Referenz zurückgibt, mit der man das erstellte Objekt manipulieren kann. (Eine Referenz ist genau das eine Vieh, das du gerade erschaffen hast. AAAZombie.<Befehl> würde den Befehl auf alle AAAZombie's abfeuern!) Statt des doOnce benutzen wir eine Stage-Variable, die aber in etwa dasselbe macht - jeder Schritt darf nur ein Mal ausgeführt werden. Aus der Hüfte geschossen so:


float timer
short stage
ref zombieRef


Begin OnDeath

; NPC-Tod setzt stage auf 1 und löst so unser Skript im GameMode aus
set stage to 1

End



Begin GameMode

; zähle den Timer erst hoch, wenn der NPC gestorben ist!
if (stage > 0)
set timer to ( timer + GetSecondsPassed )
endif

; laß den NPC nach 30 Sekunden verschwinden, plaziere toten (sterbenden?) Zombie
if (timer > 30)
if (stage == 1)
disable
zombieRef = PlaceAtMe AAAZombie 1 0 0
zombieRef.setAV Health 0

; stage hochzählen, damit das alles nur ein Mal passiert
set stage to 2
endif
endif

; nach insgesamt 60 Sekunden ändere Zombie von tot tot nach lebendig tot ;)
if (timer > 60)
if (stage == 2)
zombieRef.setAV Health 200
zombieRef.resurrect 1

; wir sind durch, also wieder stage neu setzen
; am besten auf 0, das stoppt gleichzeitg den Timer
set stage to 0
endif
endif

End
Ist nicht pefekt, so wie es jetzt ist, plaziert es nach 30 Sekunden wahrscheinlich einen stehenden Zombie, der sofort umkippt und später wieder aufsteht. Klappt vl besser, wenn du den Zombie mit 0 Lebenspunkten starten läßt. Aber selbst dann weiß ich nicht, ob der liegend startet.

Lexius
23.06.2006, 18:04
Danke für deine Hilfe Gorkonhttp://www.multimediaxis.de/images/smilies/old/sm_12.gif
was würd ich ohne dich machen?

Ok dann werd ichs mal ausprobieren.

Lexius
23.06.2006, 22:01
schade klappt nicht so wie ichs mir erhofft hatte...

bei der ersten Möglichkeit

disable
zombieRef = PlaceAtMe AAAZombie 1 0 0
zombieRef.setAV Health 0

taucht der Zombie "lebendig" auf
Health wird also nicht auf 0 gesetzt

bei der 2 Möglichkeit

wenn du den Zombie mit 0 Lebenspunkten starten läßt
bleibt der Zombie mit 0 Lebenspunkten stehen und wird nach einer Zeit nicht "lebendig"

Hab auch schon ForceAV ausprobiert, klappt auch nicht so ganz.
Ich lass dann den Zombie zuerst "lebendig" auftauchen vielleicht fällt mir oder nem anderen später was ein, wie man das lösen könnte.
Stattdessen hab ich mir überlegt, dass die Verwandlung in einen Zombie nicht durch den
Tod, sondern durch einen Treffer ausgelöst wird.
Also ein Npc wird von einem Zombie getroffen,
Begin OnHit aaazombie <-- geht das überhaupt mit aaazombie?
Er flieht in Panik
ForceFlee
Ein timer wird aktiviert, sodass der Npc nach ner Minute stirbt und dann beginnt die Verwandlung (begin OnDeath)

Wenn dieser Script irgendwann richtig läuft, kann ich mich mit der Story beschäftigen.
Ihr könnt gerne Ideen für eine gute Story posten, oder mir beim Script helfen.
Bin für jede Hilfe und Anregung dankbar

MFG Lexius

Gorkon
24.06.2006, 14:08
Grad nochmal was nachgekuckt habe.

zombieRef = PlaceAtMe AAAZombie 1 0 0

ist Blödsinn, das müßte heißen:

set zombieRef to PlaceAtMe AAAZombie 1 0 0

Dann klappts hoffentlich auch mit dem nachträglichen manipulieren.

Lexius
24.06.2006, 15:00
Jetzt läuft es!!!

mit dem SetActorValue Health 0
und später auf 300 hat das nicht geklappt.
Der Zombie bekam nach ein paar Sekunden zwar Lebensenergie hat sich aber trotzden nicht bewegt oder gar angegriffen.
Mir ist dann was anderes eingefallen, ich hab statt Health Paralysis genohmen.
Der Zombie ist dann gelähmt, wenn er auftaucht (zombieRef.setActorValue Paralysis 1),
er liegt also auf dem Boden und bewegt sich nicht!
Und nach 15sek wird Paralysis aufgehoben (zombieRef.setActorValue Paralysis 0),
und der Zombie steht auf!!! und greift an --> herrlich

jetzt zum Anfang, ich will ja, dass die Verwandlung durch einen Treffer (also begin OnHit)
ausgelöst wird. In der CS wiki stand:

begin OnHit ActorID (optional)

Example:

begin OnHit BaurusRef

das heißt ich müsste begin OnHit AAAZombie schreiben,
damit das script startet wenn der Npc von AAAZombie geschlagen wird. Das klappt aber nicht, es kommt ne Fehlermeldung wenn ich das script speichern will. Ich glaube es liegt an dem Baurus"Ref"
begin OnHit BaurusRef
was hat dieses Ref zu bedeuten? Müsste ich also "begin OnHit AAAZombieRef schreiben?

TechnOrc
24.06.2006, 20:39
@Lexius
Dein Mod scheint ganz interessant zu sein. Wann kann man mit dem PI rechnen? Dauert es noch lange oder bist du schon fast fertig?

Lexius
24.06.2006, 20:55
Ich muss erst dafür sorgen das Menschen, wenn sie von einem Zombie verletzt werden, sich nach einer Zeit selber in einen Zombie verwandeln. Dafür brauche ich einen Script.
Dieser script ist dank der Hilfe von Gorkon fast fertig.
Es sieht also so aus:
Ein NPC wird verletzt, er flüchtet, fällt nach 30sek tot um, bleibt ca 10sek liegen, seine Leiche verschwindet und wird durch eine Zombieleiche ersetzt, nach weiteren 10sek steht der Zombie auf und greift an.
Alles funktioniert einwandfrei, bis auf den Anfang. Bis jetzt ist es egal von wem der NPC verletzt wird er verwandelt sich in einen Zombie. Das kann man ändern indem man beim Befehl "begin OnHit" eine ActorID hinzufügt. Klingt einfach, ich krieg es aber nicht hin.

Ich weiß aber wo ich mir abgucken kann wie das geht. Und zwar beim script von der Rose von Sithis. Da stirbt ein typ direkt, wenn er von dieser Rose getroffen wird.
Muss diesen script nur noch finden.

Ausserdem brauch ich noch Ideen für ne nette Story.

Gorkon
24.06.2006, 23:34
Paralysis gefällt mir. Gute Idee. Ok, es hakt jetzt also noch an einer Stelle.

was hat dieses Ref zu bedeuten? Müsste ich also "begin OnHit AAAZombieRef schreiben?
Zu Referenzen hatte ich schon vorher was geschrieben. Eine Referenz ist immer ein einzelnes, genau definiertes Viech. AAAZombie ist dagegen eine Klasse, das heißt, es kann mehere davon geben. Ich erklär das am besten mit einem Editor-Beispiel.

Sagen wir, du packst in eine Zelle fünf von deinen Zombies. Wenn du auf alle 5 gleichzeitig einen Befehl anwenden willst, geht das über
AAAZombie.setXYZ blafasel
Der Befehl wirkt dann auf alle deine Zombies, selbst auf welche, die sich an einem ganz anderen Ort als diese Zelle befinden!

Jetzt willst du aber nur etwas mit Zombie Nr. 2 anstellen. Wat nu? Wie machst du dem Spiel begreiflich, daß nur der eine gemeint ist? Dazu gibt es Referenzen. Wenn du einen der Zombies im Render-Fenster doppelklickst, kriegst du ein Eigenschaftenfenster. Das oberste Feld heißt "Reference Editor ID". Dort kannst du jedem Zombie einen eigenen "Namen" geben. Zombie 1 kriegt z.B. die Reference ID "Zombie1Ref", der zweite ""Zombie2Ref" undsoweiter. Wenn du jetzt in einem Skript
Zombie2Ref.setXYZ blabla
benutzt, wirkt sich das nur auf genau diesen einen Zombie aus. (Referenz-Namen dürfen ruhig fantasievoller sein. Du kannst auch Referenz-Namen wie "Zombie-Horst", "Zombie-Willi" usw. vergeben und dann Zombie-Horst.setXYZ benutzen. Hauptsache, jeder hat einen eigenen Namen.) Referenzen muß man entweder selbst eingeben (Render-Fenster), oder ein Befehl gibt so eine zurück (PlaceAtMe).

Fast alle NPC's haben bereits so eine Reference Editor ID. Meist ist die relativ einfallslos: NPC-Name mit angehängtem "Ref". Baurus z.B. startet in der Zelle "ImperialDungeon01". Wenn du dir seine Eigenschaften anschaust, kannst du sehen, über welche Referenz genau dieser eine Baurus angesprochen wird (man könnte ja durchaus per CS mehrere Baurusse ins Spiel pflanzen). Darfst jetzt raten. ;)

So, und das macht uns jetzt ein Problem: OnHit muß genau wissen, wer da zuschlägt. AAAZombie reicht nicht, da das deine Zombie-Klasse ist. An sich müßte jeder Zombie eine Referenz haben, und jeder NPC müßte im Voraus wissen, welcher Zombie ihn haut. Blöd das. Muß mir da selbst erstmal eine Kopf drum machen. Rose of Sithis (Dark09AdamusScript) ist leider eine Ausnahme, da OnHitWith nur mit Waffen funktioniert.

Schlachtvieh
25.06.2006, 07:32
Das liest sich hier ja schon sehr vielversprechend.

Aber was entscheindend ist:

WO spielt das PI?
Ich hoffe nicht in der normalen Umgebung in Cyrodiil. Das würde ja das Spiel unmöglich durchspielbar machen.
Es könnte sich eine "Seuche" entwickeln, wobei alle NPCs aus den Städten zu Zombies mutieren.
Folge währen keine Handels- geschweige denn Quest-Möglichkeiten.

Liege ich mit meiner Vermutung tichtig? Ich habe nämlich vom Scripten keinen blassen Schimmer.

Wie ich hier schonmal erwähnt habe würde ich eine Gegend ausserhalb von Cyrodiil nehmen.
Nur müsste man dann die ganze Gegned mit Leben(Bäume, Tiere, NPCs, Häuser etc.) füllen.

Viel arbeit, aber dir könnte ja jemand helfen*zu Andere schiel*;)

DeadRiver
25.06.2006, 12:08
ich finde das sollteman schon ruhig in cyrodiil machen!
natürlich können komplikationen auftreten aber die muss man dann eben als gescheites
mitglied des S.T.A.R. Teams:D lösen!!!
geil ich freu mich drauf!
Resident evil^^

Jävklöv
25.06.2006, 13:16
Ja, aber zu de Seuchenproblem, solltest du dir echt gedanken machen.

Aber eigentlich sind alle Zombies in irgendwelchen Dungeons, afaik kommen sie da eh nicht raus.

Lexius
25.06.2006, 13:43
@Schlachtvieh & Pontifex Maximus
Es kann sich keine Seuche ausbreiten, da sich nur die NPCs "infizieren" können, bei denen ich den Zombiescript aktiviere. D.h. ich kann mir aussuchen wer sich infizieren kann und wer nicht.

@DeadRiver
ich denke auch, dass ich das in cyrodiil machen werde. Weiß noch nicht wo, wahrscheinlich nehm ich ein kleines Dorf und vergrößere das etwas (so auf die Größe einer Kleinstadt). Füg noch ein paar NPCs ein (so insg. 30 - 40) und dann brauch ich noch ne gute Story.

@Gorkon

OnHit muß genau wissen, wer da zuschlägt. AAAZombie reicht nicht, da das deine Zombie-Klasse ist.
das ist natürlich echt ein problem.
das einzige, was mir im mom dazu einfällt ist:
Man schreibt begin OnHitWith, erstellt nen neuen Zauber, den die ZombieklasseAAA hat, (ohne große Effekte, also keinen Feuerball oder so).
Dieser Zauber soll dann den Script aktivieren.
Voraussetzung ist, dass begin OnHitWith auch für Zauber geeignet ist.

Lexius
25.06.2006, 14:24
Ok, OnHitWith ist für Zauber definitiv nicht geeignet.
Also hab ich was anderes gemacht. :D

Hab eingestellt, dass AAAZombie Waffenbenutzen kann, CombatStyle geändert, sodass die Waffen auch benutzt werden.
Hab nen neuen (unsichtbaren) Dolch erstellt. Diesen Dolch hab ich dem AAAZombie ins Inventar getan. Und dann im Script Begin OnHitWith AAAZombieDolch geschrieben.

Dann noch nen Script geschrieben, der dafür sorgt, dass der Dolch nach dem Tod des Zombies verschwindet. Als Spieler merkt man nichts davon!

Wedan
25.06.2006, 14:41
Du könntest diese "Seuche" doch in Kvatch ausbrechen lassen, dafür müsste Kvatch aber erst mal wieder aufgebaut werden, hier wäre der Vorteil, dass das normale Spiel weiterhin nicht davon beeinflusst wird.

Knorzzz
25.06.2006, 17:13
Du könntest diese "Seuche" doch in Kvatch ausbrechen lassen, dafür müsste Kvatch aber erst mal wieder aufgebaut werden, hier wäre der Vorteil, dass das normale Spiel weiterhin nicht davon beeinflusst wird.


die ritter der pi's bauen kvatch schon wieder auf, darauf möchte man wohl kaum verzichten, so wie das aussieht... ich bin also gegen kvatch.
ich denke, man könnte das auf soner insel vor anvil oder leyawin(das is glaubich das da ganz unten oder?^^), auf die man dann mit nem boot kommt, um die bevölkerung vor der zombie-krankheit(?) oder wie du das auch immer nennst, zu retten

schneida
25.06.2006, 17:53
Wieso nicht im Hafenviertel der IC? Oder Bravil, dem Abwasserkanal von Cyrodil. du könntest soetwas wie ein Auffanglager machen!

Echt coole idee!

Jävklöv
02.07.2006, 14:10
Wie stehts denn im Moment?

dürfen wir auf ein erscheinen hoffen?

Lexius
02.07.2006, 14:34
Wie stehts denn im Moment?

dürfen wir auf ein erscheinen hoffen?

Ja ich denke schon, ich hab es noch nicht aufgegeben. Kann aber nicht genau sagen wann.
Aber ich denke, dass es noch diesen Sommer fertig sein wird.

GeoRam2006
02.07.2006, 16:45
Warum macht ihr das nicht auf ner Insel?? Man bekommt den Auftrag, das auf der ...Insel ne Seuche ausgebrochen ist. Die Menschen mutieren zu Zombies o.ä.
Was meinst du @Lexius??
Gibt es schon Screenshot von nem Zombie??

Wedan
02.07.2006, 16:50
Gibt es schon Screenshot von nem Zombie??
Sollen die Zombies jetzt auch noch anders aussehen oder wie meinst du das? Zombies gibt es doch schon im Hauptspiel., wobei das zwar gar eine schlechte Idee ist, dass die Zombies wenn sie auferstehen noch die gleiche Kleidung haben als sie sie bei ihrem Ableben hatten, wenn man ihnen die Kleidung nicht abnimmt.

GeoRam2006
02.07.2006, 17:00
Ich glaube @Lexius macht andere Zombies als die die schon da sind. Ob zerrissene Rüstung oder Kleidung

Lexius
02.07.2006, 17:24
Ich ist wahrscheinlich das beste, das ganze auf ner neuen Insel zu machen. Das ganze in einer vorhandenen Stadt zu machen wäre zu schade, weil dann wahrscheinlich alle NPCs aus der Stadt am Ende zu Zombies werden.

Ich wollte eigentlich keine neuen Zombies machen, nur einige Werte verändern. Hab zwar überlegt für jeden NPC einen eigenen Zombie NPC zu erstellen.
So wie hier:
http://img305.imageshack.us/img305/8479/unbenannt9sz.jpg
das Problem ist, ich krieg es nicht hin, dass sich die NPCs dann so verhalten wie Zombies.

Sie müssen ja dann gehen wie Zombies, kämpfen wie Zombies und Zombielaute von sich geben. Was ich probieren kann, ist den Zombies Kleidung anzuziehen. Aber denke nicht das es so einfach gehen wird.

Wedan
02.07.2006, 17:32
Ist ja auch nicht schlimm, Zombies sind ja nicht dazu da um sie anzuschauen, sondern um sie zu erschlagen.

GeoRam2006
02.07.2006, 17:48
tja wie macht man das, das ein NPC zum Zombie mutiert. Er muß ja nicht tot sein, sich einfach nur verändern.

Lexius
02.07.2006, 18:39
tja wie macht man das, das ein NPC zum Zombie mutiert. Er muß ja nicht tot sein, sich einfach nur verändern.

Das geht eben nicht, man kann die NPCs mit einem Script außerlich nicht verändern. Man kann einen NPC nur durch einen anderen NPC oder eine Kreatur (hier Zombie) ersetzen.
Das geht mit dem Befehl "PlaceAtMe".