Archives des forums MMO/MMORPG > Neverwinter Nights > NWN - Maskado > respawn
respawn
Par Piett2kodm le 11/8/2002 à 4:25:28 (#1945373)
la question doit etre tout bête pour vous mais je ne vois pas.
merci beaucoup d'avance
facile
Par Blam le 11/8/2002 à 10:07:23 (#1945730)
la solution:
dans le edit /module properties/events/
au OnPlayer Respawn tu met le script nw_o0_respawn.
//::///////////////////////////////////////////////
//:: Generic On Pressed Respawn Button
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
// * June 1: moved RestoreEffects into plot include
*/
//:://////////////////////////////////////////////
//:: Created By: Brent
//:: Created On: November
//:://////////////////////////////////////////////
#include "nw_i0_plot"
// * Applies an XP and GP penalty
// * to the player respawning
void ApplyPenalty(object oDead)
{
int nXP = GetXP(oDead);
int nPenalty = 50 * GetHitDice(oDead);
int nHD = GetHitDice(oDead);
// * You can not lose a level with this respawning
int nMin = ((nHD * (nHD - 1)) / 2) * 1000;
int nNewXP = nXP - nPenalty;
if (nNewXP 10000)
{
nGoldToTake = 10000;
}
AssignCommand(oDead, TakeGoldFromCreature(nGoldToTake, oDead, TRUE));
DelayCommand(4.0, FloatingTextStrRefOnCreature(58299, oDead, FALSE));
DelayCommand(4.8, FloatingTextStrRefOnCreature(58300, oDead, FALSE));
}
///////////////////////////////////////////////////////////////////////
// this function resets variabls and clears the arenas in the fighter
// 'gauntlet' subplot in chapter one
///////////////////////////////////////////////////////////////////////
void ClearArena(object oPC,string sArena)
{
if(sArena == "Map_M1S4C")
{
DestroyObject(GetObjectByTag("M1S04CHRUSK02"));
DestroyObject(GetObjectByTag("M1S4CBeast"));
SetLocalInt(GetObjectByTag(sArena),"NW_A_M1S4HruskDef",0);
}
else if(sArena == "Map_M1S4D")
{
DestroyObject(GetObjectByTag("M1S04CFASHI02"));
DestroyObject(GetObjectByTag("M1S4DBeast"));
SetLocalInt(GetObjectByTag(sArena),"NW_A_M1S4FashiDef",0);
CreateItemOnObject("M1S04IBADGELVL01",oPC);
}
else if(sArena == "Map_M1S4E")
{
DestroyObject(GetObjectByTag("M1S04CAGAR02"));
DestroyObject(GetObjectByTag("M1S4EBeast"));
SetLocalInt(GetObjectByTag(sArena),"NW_A_M1S4AgarDef",0);
CreateItemOnObject("M1S04IBADGELVL02",oPC);
}
else if(sArena == "Map_M1S4F")
{
DestroyObject(GetObjectByTag("M1S04CCLAUDUS02"));
DestroyObject(GetObjectByTag("M1S4FBeast",0));
DestroyObject(GetObjectByTag("M1S4FBeast",1));
SetLocalInt(GetObjectByTag(sArena),"NW_A_M1S4ClaudusDef",0);
CreateItemOnObject("M1S04IBADGELVL03",oPC);
}
SetLocalInt(oPC,"NW_L_M1S4Won",FALSE);
SetLocalInt(GetModule(),"NW_G_" + sArena + "_Occupied",FALSE);
}
//////////////////////////////////////////////////////////////////////////////
void main()
{
object oRespawner = GetLastRespawnButtonPresser();
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectResurrection(),oRespawner);
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHeal(GetMaxHitPoints(oRespawner)), oRespawner);
RemoveEffects(oRespawner);
//* Return PC to temple
string sDestTag = "NW_DEATH_TEMPLE";
string sArea = GetTag(GetArea(oRespawner));
/*
CHAPTER 1 SPECIAL CASE
*/
if (sArea == "MAP_M1S3B")
{
sDestTag = "M1_WIZSPAWN";
}
else
if (sArea == "Map_M1S4E" || sArea == "Map_M1S4C" || sArea == "Map_M1S4D" || sArea == "Map_M1S4F")
{
sDestTag = "M1_FIGSPAWN";
ClearArena(oRespawner,sArea);
}
else
/*
CHAPTER 2 SPECIAL CASE
*/
/*
if (sArea == "MAP_M2Q2F2" && GetDistanceBetweenLocations(GetLocation(GetObjectByTag("M2Q2F2_M2Q2G")), GetLocation(oRespawner)) < 5.0 && GetLocalInt(GetModule(),"NW_M2Q2E_WoodsFreed") == 0)
{
sDestTag = "WP_M2Q2GtoM2Q2F";
}
else
*/
// * Druid Match
if (sArea == "MAP_M2Q2E2")
{
sDestTag = "WP_M2Q2E_ENDDCC";
DestroyObject(GetObjectByTag("M2Q2EWELCARFT"));
DestroyObject(GetObjectByTag("M2Q2EHENNAFT"));
DestroyObject(GetObjectByTag("M2Q2EJANKENFT"));
DestroyObject(GetObjectByTag("M2Q2EELGARFT"));
// * June 2002: Destroy pets as well
DestroyObject(GetObjectByTag("M2Q2EWELCARFTPET"));
DestroyObject(GetObjectByTag("M2Q2EHENNAFTPET"));
DestroyObject(GetObjectByTag("M2Q2EJANKENFTPET"));
DestroyObject(GetObjectByTag("M2Q2EELGARFTPET"));
SetLocalInt(GetObjectByTag("M2Q2EJAER"),"NW_M2Q2E_LFIGHT",FALSE);
}
/*
CHAPTER 3 SPECIAL CASE
*/
else
// * time travel dungeon past - Dungeon
if (sArea == "M3Q2G")
{
sDestTag = "WP_ALTERNATE_SPWN";
}
// * time travel dungeon past - Grove
else
if (sArea == "M3Q2I")
{
sDestTag = "WP_ALTERNATE_SPWN";
}
if (GetIsObjectValid(GetObjectByTag(sDestTag)))
{
if (sDestTag == "NW_DEATH_TEMPLE")
{
object oPriest = GetObjectByTag("NW_DEATH_CLERIC");
//SetLocalInt(oPriest, "NW_L_SAYONELINER", 10);
//AssignCommand(oPriest, DelayCommand(3.0,ActionStartConversation(oRespawner)));
AssignCommand(oPriest, DelayCommand(2.1, PlayVoiceChat(VOICE_CHAT_TALKTOME, oPriest)));
SetLocalLocation(oRespawner, "NW_L_I_DIED_HERE", GetLocation(GetLastRespawnButtonPresser()));
SetLocalInt(oRespawner, "NW_L_I_DIED", 1);
SetLocalObject(oPriest, "NW_L_LASTDIED", GetLastRespawnButtonPresser());
// * April 2002: Moved penalty here, only when going back to the death temple
ApplyPenalty(oRespawner);
}
object oSpawnPoint = GetObjectByTag(sDestTag);
AssignCommand(oRespawner,JumpToLocation(GetLocation(oSpawnPoint)));
// * mak
}
else
{
// * do nothing, just 'res where you are.
}
}
///////////fin du script///////////////////////////////////////
dans le module, a l'endroit ou tu veux que le joueur respawn tu mets un waypoint avec le tag NW_DEATH_TEMPLE (en capitale lui)
et voila reste a sauvegarder et essayer.
meme si j'ai l'ai d'un spécialiste, il n'en n'est rien
je me suis vautré des journées entières avant d'arriver au bon resultat.
J'ai posté un script plus haut pour les respawns en fonction de l'alignement. Et je sais qu'il en existe un en fonction des races.
bon courage pour la suite.
Par Piett2kodm le 12/8/2002 à 2:55:27 (#1948790)
bonne continuation a toi aussi :)
Par Shin-deTyl- le 12/8/2002 à 4:29:34 (#1948974)
je conseil vivement a tous ceux qui utiliseraient ce script de changer la ligne de pénalité d'xp (ou alors vous pouvez toujours l'augmenter si vous etes un DM sadique !!!!)
Pas daccord.
Par Blam le 12/8/2002 à 11:28:37 (#1949884)
Provient du message de Shin-deTyl-
C'est le spawn script du jeu officiel , entre nous je trouve la pénalité d'xp un peu lourde surtout a partir du lvl 15
je conseil vivement a tous ceux qui utiliseraient ce script de changer la ligne de pénalité d'xp (ou alors vous pouvez toujours l'augmenter si vous etes un DM sadique !!!!)
je ne trouve pas la pénalité trop lourde, ni trop légère, si on joue le jeu il faut bien essayer de ne pas mourir toutes les 5 mn. De plus on doit hesiter a s'attaquer a des monstres trop gros, ce n'est pas normal de les avoir a l'usure en revenant a chaque fois, régénéré alors que le monstre lui ne se régénère pas.
En contre partie c'est aux maitres de jeu de compenser et aux créateurs de scenario de ne pas mettre des monstres ou pièges indetectables,
partout ou tout simplement trop gros pour le niveau du scénario.
Reste le problème de la sauvegarde.....
En fait, reellement le probleme c'est comme partout l'honneteté du joueur .
JOL Archives 1.0.1
@ JOL / JeuxOnLine