Willkommen Anonymous, es sind 42 User online. [ Anzeigen ]


[RPG]Board Neverwinter Nights NWN Scripting


[ Login ] [ Registrieren ] [ Abo ] [ Suche ] [ Profil ] [ Hilfe ]


Operatoren: zauriel, Avantenor
Moderatoren: NWN Moderat, Camael, IRQ
[ ANTWORTEN ]
[ FAQ ]
Autor Druckansicht   Thema: [Request] Monster Respawn
Seite: 1
Auto0815

Profil anschauen ]

erstellt am 22.02.2003 um 13:18 Uhr eMail schreiben      Zitatantwort        #559865

Hi Leute!
Also ich hab da ein Problem ich hätte gerne das jedes Monster was auf dem Server stirbt nach einer Stunde an der Stelle wo es stand respwant. Kann mir einer dafür ein Script geben und auch sagen wo das reingehört?
Oder helft mir mal bitte.
Brauche nur nochd as Script um eine HammerGeile perfekte Welt fertig zu haben.
Richtig geile Rp Welt.
Nur das fehlt mir halt.
Auto0815

Profil anschauen ]

erstellt am 22.02.2003 um 15:06 Uhr eMail schreiben      Zitatantwort        #559918

Habs schon gefunden sry hatt keine Lust zum Suchen falls es dennoch wen Interessiert :




Neue Version, Final.

Dank an Marcos für die Hilfe.

Das Script kommt in den OnDeath Trigger der Creatur.



code:--------------------------------------------------------------------------------void voidCreateObject(int nObjectType, string sTemplate, location lLocation, int bUseAppearAnimation=FALSE)
{
CreateObject(nObjectType,sTemplate,lLocation,bUseA
ppearAnimation);
}

void main()
{
//Spawnzeit einstellen Random = Zufallswert + Fester Wert in Sekunden
int z = (Random(32000) + 32000);
//Zeit wann die Leiche verschwinden soll in Sekundeb
float l = 3600.0;

//Ende der Einstellvaribalen
string tag = GetTag(OBJECT_SELF);
location loc = GetLocation(OBJECT_SELF);
float fz = IntToFloat(z);
SetIsDestroyable(FALSE);
object oSack = CreateObject(OBJECT_TYPE_PLACEABLE,"loot",loc);
object oItem = GetFirstItemInInventory(OBJECT_SELF);
while (GetIsObjectValid(oItem) == TRUE)
{
ActionGiveItem(oItem, oSack);
oItem = GetNextItemInInventory(OBJECT_SELF);
}
AssignCommand(GetModule(),DelayCommand(fz,voidCrea
teObject(OBJECT_TYPE_CREATURE,tag,loc)));
DelayCommand(l, SetIsDestroyable(TRUE));
}--------------------------------------------------------------------------------


Loot ist ein plazierbares Object mit den Tag "loot", Ausehen Egal, muss Benutzbar sein und ein Inventory haben. Ich hab son Beutesack gewählt. Der brauch in OnClose folgendes Script


code:--------------------------------------------------------------------------------
void main()
{
object oItem = GetFirstItemInInventory(OBJECT_SELF);
if (GetIsObjectValid(oItem) == FALSE)
{
DestroyObject(OBJECT_SELF,3.0);
}
}--------------------------------------------------------------------------------



Uwe
Preydwen

Profil anschauen ]

erstellt am 22.02.2003 um 15:07 Uhr eMail schreiben      Zitatantwort        #559919

Einfacher hier =):
void RespawnObject(string sResRef, int iType, location lLoc)
{
CreateObject(iType, sResRef, lLoc);
}
void main()
{
string sResRef = GetResRef(OBJECT_SELF);
int iType = GetObjectType(OBJECT_SELF);
location lLoc =GetLocation(OBJECT_SELF);
float fDelay = 900.0;
AssignCommand(GetModule(), DelayCommand(fDelay, RespawnObject(sResRef, iType, lLoc)));
}
Das Float fDelay bestimmt die Zeit (hier 900 sekunden eingestellt)
Serpedon

Profil anschauen ]

erstellt am 22.02.2003 um 16:22 Uhr   Homepage besuchen    Zitatantwort        #559948

Zu Beachten:
Es wird nicht die Kreatur respawn, die existiert hat, sondern die Vorlagen-Kreatur der gestorbenen Kreatur. Mit anderen Worten, du musst für jede (unterschiedliche) Kreatur, die respawned werden soll, eine eigene Vorlage erstellen.

--
[Externer Link - Bitte einloggen oder registrieren]

Where men gather, a bustle of chaos ensues. I would save them all, if I could.


Lasthope

Profil anschauen ]

erstellt am 23.02.2003 um 07:58 Uhr eMail schreiben      Zitatantwort        #560285

eine frage funktioniert der script auch bei gegenständen ??
Auto0815

Profil anschauen ]

erstellt am 23.02.2003 um 10:38 Uhr eMail schreiben      Zitatantwort        #560353

Öhm, was für ne Vorlage?
Was das jetzt auf das Script von mir bezogen?
Serpedon

Profil anschauen ]

erstellt am 23.02.2003 um 11:47 Uhr   Homepage besuchen    Zitatantwort        #560423

Das mit der Vorlage gilt ganz allgemein zusammen mit dem Create-Befehl. Jede Kreatur, die du im Toolset neu setzt, ist zunächst indentisch mit der Vorlage. Wenn du jetzt aber irgendwelche Sachen änderst, hast du eine Kreatur, die sich von ihrer Vorlage unterscheidet. Der Create-Befehl erwartet die Vorlagen-ResRef zum erschaffen eines Objektes. Diese Vorlage wird dann erschaffen. Du kannst dir die ResRef unter Eigenschaften - Erweitert anschauen. Einen neue Vorlage kannst du mit dem Kreaturen-Assistenten erstellen.

--
[Externer Link - Bitte einloggen oder registrieren]

Where men gather, a bustle of chaos ensues. I would save them all, if I could.


Lasthope

Profil anschauen ]

erstellt am 23.02.2003 um 13:38 Uhr eMail schreiben      Zitatantwort        #560490

Ich hab das so geändert !!
aber es komt kein neuer grabstein (sResRef = grab) zum vorschein!! Das problem ist das wenn das Grab von einem Spieler zerstört wird kommt es wieder , wird es durch diesen script zerstört kommt es nich wieder!!


void ActionCreate(string sCreature, location lLoc)
{
CreateObject(OBJECT_TYPE_CREATURE, sCreature, lLoc);
}
void main()
{
object oCreature = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC);
if (GetIsObjectValid(oCreature) == TRUE && GetDistanceToObject(oCreature) < 10.0)
{
effect eMind = EffectVisualEffect(VFX_FNF_SUMMON_UNDEAD);
string sCreature = "nw_vampire";
// * 10% chance of a skeleton chief instead
if (Random(100) > 90)
{
sCreature = "nw_vampire003";
}
if (Random(100) > 50)
{
sCreature = "nw_vampire001";
}
location lLoc = GetLocation(OBJECT_SELF);
DelayCommand(0.3, ActionCreate(sCreature, lLoc));
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eMind, GetLocation(OBJECT_SELF));
SetPlotFlag(OBJECT_SELF, FALSE);
DestroyObject(OBJECT_SELF, 0.5);
}
}



der respawn des Grabes


void RespawnObject(string sResRef, int iType, location lLoc)
{
string sResRef = "grab"; //objekt hier eintragen
CreateObject(iType, sResRef, lLoc);
}
void main()
{
string sResRef = GetResRef(OBJECT_SELF);
int iType = GetObjectType(OBJECT_SELF);
location lLoc =GetLocation(OBJECT_SELF);
float fDelay = 6.0;
AssignCommand(GetModule(), DelayCommand(fDelay, RespawnObject(sResRef, iType, lLoc)));
Auto0815

Profil anschauen ]

erstellt am 23.02.2003 um 21:15 Uhr eMail schreiben      Zitatantwort        #560776

Muss ich das jetzt nehmen? Und was ist der Unterschied davon zu meinem Script?
Xexano

Profil anschauen ]

erstellt am 18.08.2003 um 10:41 Uhr eMail schreiben      Zitatantwort        #697686

Ich brauche dringend Hilfe zu den Scripts!!
Ich habe den Script, den Auto81usw. hier uns gezeigt hat, genommen und nur die Respawnzeit verändert. Die Kreaturen, die respawnt werden sollten habe ich selber per Kreaturenassitent neu gebastelt und auch einen anderes Kennzeichen (Tag und Name) zugewiesen (damit evntl. Fehler vermieden werden können). Wenn ich im Spiel spiele und die Kreatur sollte/wird respwanwnt, passiert folgender Fehler:
Bspw. in einer Gruft habe ich Skelette gebastelt und hinplatziert, mit dem Respawnscript im OnDeath Trigger; stattdessen tauchen meist Dachse auf, nachdem die Kreatur nach ihrem Tod respwant ist/sein sollte (das gleiche auch bei anderen Kreaturen), nur manchmal (sehr selten passt hier besser) kommt die ursprüngliche Kreatur, die ich gebastelt habe. Ich zeige euch den Script einfach mal:

void voidCreateObject(int nObjectType, string sTemplate, location lLocation, int bUseAppearAnimation=FALSE)
{
CreateObject(nObjectType,sTemplate,lLocation,bUseAppearAnimation);
}

void main()
{
//Spawnzeit einstellen Random = Zufallswert + Fester Wert in Sekunden
int z = (Random(600) + 600);
//Zeit wann die Leiche verschwinden soll in Sekundeb
float l = 20.0;

//Ende der Einstellvaribalen
string tag = GetTag(OBJECT_SELF);
location loc = GetLocation(OBJECT_SELF);
float fz = IntToFloat(z);
SetIsDestroyable(FALSE);
object oSack = CreateObject(OBJECT_TYPE_PLACEABLE,"loot",loc);
object oItem = GetFirstItemInInventory(OBJECT_SELF);
while (GetIsObjectValid(oItem) == TRUE)
{
ActionGiveItem(oItem, oSack);
oItem = GetNextItemInInventory(OBJECT_SELF);
}
AssignCommand(GetModule(),DelayCommand(fz,voidCreateObject(OBJECT_TYPE_CREATURE,tag,loc)));
DelayCommand(l, SetIsDestroyable(TRUE));
}



Edit: Mir ist auch aufgefallen, dass die Kreaturen dort respawnt worden sind, wo sie gestorben sind. Kann man das auch so abändern, dass die Kreaturen dort respawnt werden, wo man sie per Editor gesetzt hat.
Bitte keine Hinweise wie z.B. "probier mal mit dem Befehl ..." wenn möglich, weil ich kann nicht gut Skripten. Es wäre mir sehr angenehm, wenn man die Skripts hier reinposten würde oder leichtes sagen würde, was auch ich verstehen könnte (z.B. "Dort muss ein Leerzeichen rein, weil..." ). Thx im Voraus!

--
WWW - Worldwide Waste of Time (Gigi Rüf)

Fanti

Profil anschauen ]

erstellt am 18.08.2003 um 13:45 Uhr   Homepage besuchen    Zitatantwort        #697840

Bei CreateObject darf Du NICHT den Tag (=Kennzeichen) der Kreatur benutzen, sondern die ResRef (=VorlagenReferenz). Wenn eine ResRef nicht existiert, erschafft CreateObject immer einen Dachs.
Wenn Tag und ResRef genau gleich sein (Gross-/Kleinschreibung!) dann klappt's natürlich...

--
Scripten lernen lohnt sich langfristig - Scripte blind kopieren hilft nur kurzfristig!
Erste Adresse für Scripter: [Externer Link - Bitte einloggen oder registrieren]

Xexano

Profil anschauen ]

erstellt am 18.08.2003 um 14:24 Uhr eMail schreiben      Zitatantwort        #697887

Kann man da auch irgendwie "OBJECT_SELF" oder so etwas setzen, ohne dass man für jede neue Kreatur einen neuen Skript basteln muss?
Achja: Welche CreateObject meinst du genau? Es gibt in dem Skript mehrere... =)
Ich bin halt eben ein sehr miserabler Skripter (ich würde gerne das alles können... =( ), deswegen wende ich mich halt eben hier. Und ich brauche den Skript für meinen MP-Modul.

--
WWW - Worldwide Waste of Time (Gigi Rüf)

Fanti

Profil anschauen ]

erstellt am 18.08.2003 um 16:26 Uhr   Homepage besuchen    Zitatantwort        #698019

Mit "GetResRef(OBJECT_SELF);" bekommst Du die ResRef der Kreatur. Wenn Du als "loot" der Kreatur immer den gleichen Beutel benutzt, kannst Du im Script ruhig die ResRef des Beutels fest reinschreiben.
Generell wird bei CreateObject immer die ResRef benutzt und nie das Tag.
Das ganze Respawnen ist eigentlich viel einfacher, wenn man mit "Begegnungen" arbeitet - zumindest meine Meinung...

--
Scripten lernen lohnt sich langfristig - Scripte blind kopieren hilft nur kurzfristig!
Erste Adresse für Scripter: [Externer Link - Bitte einloggen oder registrieren]

Xexano

Profil anschauen ]

erstellt am 18.08.2003 um 16:31 Uhr eMail schreiben      Zitatantwort        #698021

Hm.. muss das etwa so aussehen:

void voidCreateObject(int nObjectType, string sTemplate, location lLocation, int bUseAppearAnimation=FALSE)
{
CreateObject(nObjectType,sTemplate,lLocation,bUseAppearAnimation);
}

void main()
GetResRef(OBJECT_SELF); <---------
{
//Spawnzeit einstellen Random = Zufallswert + Fester Wert in Sekunden
int z = (Random(600) + 600);
.... (usw. (das gleiche wie beim alten?!))


Und das mit den Begegnungen: Man kann nicht genau bestimmten, welche Monster auftauchen und die Monster erscheinen erst, wenn der Charakter den Auslöser betreten hat. Ich will aber, dass die Monster schon von weitem sichtbar sind.

--
WWW - Worldwide Waste of Time (Gigi Rüf)

Fanti

Profil anschauen ]

erstellt am 18.08.2003 um 16:40 Uhr   Homepage besuchen    Zitatantwort        #698031

Nein, so:

 
void voidCreateObject(int nObjectType, string sTemplate, location lLocation, int bUseAppearAnimation=FALSE)  
{  
  CreateObject(nObjectType,sTemplate,lLocation,bUseAppearAnimation);  
}  
 
void main()  
{  
  //Spawnzeit einstellen Random = Zufallswert + Fester Wert in Sekunden  
  int z = (Random(600) + 600);  
  //Zeit wann die Leiche verschwinden soll in Sekundeb  
  float l = 20.0;  
 
  //Ende der Einstellvaribalen  
  string resref = GetResRef(OBJECT_SELF);  
  location loc = GetLocation(OBJECT_SELF);  
  float fz = IntToFloat(z);  
  SetIsDestroyable(FALSE);  
  object oSack = CreateObject(OBJECT_TYPE_PLACEABLE,"loot",loc);  
  object oItem = GetFirstItemInInventory(OBJECT_SELF);  
  while (GetIsObjectValid(oItem) == TRUE)  
  {  
    ActionGiveItem(oItem, oSack);  
    oItem = GetNextItemInInventory(OBJECT_SELF);  
  }  
  AssignCommand(GetModule(),DelayCommand(fz,voidCreateObject(OBJECT_TYPE_CREATURE,resref,loc)));  
  DelayCommand(l, SetIsDestroyable(TRUE));  
}  
 
 



--
Scripten lernen lohnt sich langfristig - Scripte blind kopieren hilft nur kurzfristig!
Erste Adresse für Scripter: [Externer Link - Bitte einloggen oder registrieren]

Xexano

Profil anschauen ]

erstellt am 18.08.2003 um 16:43 Uhr eMail schreiben      Zitatantwort        #698036

Ah, statt GetTag und GetLoc "GetResRef"...
ich verstehe!
Thx! Du hast mir sehr geholfen! (und ich habe wieder etwas mehr über Skripten gelernt! =^) )

--
WWW - Worldwide Waste of Time (Gigi Rüf)

Fanti

Profil anschauen ]

erstellt am 18.08.2003 um 16:47 Uhr   Homepage besuchen    Zitatantwort        #698042

"GetLocation" war schon ok...

--
Scripten lernen lohnt sich langfristig - Scripte blind kopieren hilft nur kurzfristig!
Erste Adresse für Scripter: [Externer Link - Bitte einloggen oder registrieren]

deathranger

Profil anschauen ]

erstellt am 20.09.2003 um 14:22 Uhr eMail schreiben    ICQ 178387920  Zitatantwort        #725573

Ähm gibt es ein respawn skript das erst wenn das monster tod ist dann nach z.b 900 minuten das monster wieder respawnt an dem ort wo es platziert worden ist??????
hans

Profil anschauen ]

erstellt am 20.09.2003 um 16:06 Uhr     ICQ 113472536  Zitatantwort        #725634

öhm .. das script oben ist doch genau so eins?!
deathranger

Profil anschauen ]

erstellt am 21.09.2003 um 17:12 Uhr eMail schreiben    ICQ 178387920  Zitatantwort        #726057

ne die monster da respawnen einfach nach der zeit auch wenn sie nicht tod sind so steht bei meinem server jetzt 40 wölfe in einer reihe man ey
deathranger

Profil anschauen ]

erstellt am 21.09.2003 um 17:25 Uhr eMail schreiben    ICQ 178387920  Zitatantwort        #726065

BOAHHHHHHHHHHHHHHHHH 120 WÖLFE es werden immer mehr na toll ey ich wollt einen respawn skript wo das monster nach dem tod an der stelle wo es plaziert worde respawnt MAN HILFE PLZ
hans

Profil anschauen ]

erstellt am 21.09.2003 um 17:35 Uhr     ICQ 113472536  Zitatantwort        #726067

du hast das script im ondeath??
deathranger

Profil anschauen ]

erstellt am 21.09.2003 um 17:56 Uhr eMail schreiben    ICQ 178387920  Zitatantwort        #726079

ne im on spawn..
hans

Profil anschauen ]

erstellt am 21.09.2003 um 18:35 Uhr     ICQ 113472536  Zitatantwort        #726094

*lol*
Hoellenfuerst13

Profil anschauen ]

erstellt am 24.09.2003 um 14:41 Uhr       Zitatantwort        #727663

Also ich hab das Skript jetzt auch ma ausprobiert doch der respawnt nur einmal und dann passiert gar nichts mehr
Fanti

Profil anschauen ]

erstellt am 25.09.2003 um 09:36 Uhr   Homepage besuchen    Zitatantwort        #728070

Hoellenfuerst13 schrieb am 24.09.2003 um 14:41 Uhr:

Also ich hab das Skript jetzt auch mal ausprobiert doch der respawnt nur einmal und dann passiert gar nichts mehr


Schau Dir mal die Vorlage an....
Steht da im OnDeath das Script drin?
Ich vermute, Du hast das Script nicht bei der Vorlage eingehängt, sondern nur bei der Kreatur, die Du plaziert hast. Es wird als 2.Kreatur ein Abbild der Vorlage erschaffen - wenn die ohne Script ist, passiert logischerweise nichts, wenn diese stirbt.....

--
Scripten lernen lohnt sich langfristig - Scripte blind kopieren hilft nur kurzfristig!
Erste Adresse für Scripter: [Externer Link - Bitte einloggen oder registrieren]

Eorlingrim

Profil anschauen ]

erstellt am 25.09.2003 um 14:11 Uhr eMail schreiben      Zitatantwort        #728276

Hmm, ich habe bei solchen und ähnlichen Scripts momentan immer das gleich Problem, habe auch schon die o.g. Skripte ausprobiert. Die Kreatur erscheint 1 mal und sobald der respawn ein zweites Mal erfolgen soll hängt sich bei mir die Kiste mit einem Fehler auf :

Die Anweisung in "0x0056e3a1" verweist auf Speicher in "0x00000000". Der Vorgang "read" konnte nicht auf den Speicher ausgeführt werden.

Ich verwende v1.30.7041 NWN ohne SoU. Kann mir da mal jemand auf die Sprünge helfen ?.

Nachtrag: Habe noch ein paar Tests gemacht. Andere Rechner, andere Betriebsysteme sogar nen Update auf Version V1.32. Ist immer noch das gleiche. Bin absolut Ratlos !

Nachtrag 2: Hab nicht aufgeben können und bisserle rumgebastelt. Kann es sein das NWN es nicht mag, wenn ich Für die Kennzeichnung und die ResRef den gleichen Namen verwende ?!? Bitte verifiziert das mal einer. Jetzt im mom tuts bei mir, würde mich aber trotzdem über ne Antwort freuen. *G
vips

Profil anschauen ]

erstellt am 17.05.2013 um 16:27 Uhr eMail schreiben  Homepage besuchen    Zitatantwort        #1852655

[IMG][/IMG]
Lasthope schrieb am 23.02.2003 um 07:58 Uhr:

eine frage funktioniert der script auch bei gegenständen ??

Uranochos

Profil anschauen ]

erstellt am 18.05.2013 um 00:14 Uhr eMail schreiben  Homepage besuchen    Zitatantwort        #1852673

CreateObject(OBJECT_TYPE_CREATURE, sCreature, lLoc);


Du musst dementsprechend ändern zu:

CreateObject(OBJECT_TYPE_PLACEABLE, sPlaceable, lLoc);


Bei Skripten, die im Eventhandler OnDeath laufen, musst Du vorsichtig sein, welches Objekt die Skripte ausführen soll, da das "tote" Objekt keine Skripte mehr ausführt.

Gruß,
U.




--
"Geschichten von der Alten Erde"
Deutschsprachiges Rollenspielprojekt.
-Work-in-progress-
[Externer Link - Bitte einloggen oder registrieren]
alte-erde.spdns.org

Seite: 1
Druckansicht   Thema: [Request] Monster Respawn  
[ ANTWORTEN ]

[RPG]Board Neverwinter Nights NWN Scripting

  


[RPG]Board 1.94.01 wird betrieben von Sebastian "Pandur" Olle.
Programmiert von Andreas "Monti" Bytzek.
Nutzungsbedingungen / Impressum / Haftungsausschluss / Datenschutz
Scriptlaufzeit: 0.21 sec