Archives des forums MMO/MMORPG > Neverwinter Nights > NWN - Maskado > Script de respawn spécial
Script de respawn spécial
Par Blam le 10/8/2002 Ă 23:47:48 (#1944845)
A la mort des joueurs ils "respawn" a des endroits différents en fontion de leur alignemment.
Merci a ceux qui m'ont aidé.
A mettre dans le edit/module properties/events/OnPlayerRespawn
////////////////////////////////////////////////////////////////////////////////
/////Script de BlamReconstruit par Fed et fini par Kemay////
////////////////////////////////////////////////////////////////////////////////
/////Objet: Rappel dans les temples correspondants a l'alignement du joueur/////
/////Date : 10 /08/2002/////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
#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));
}
void main()
{
object oRespawner = GetLastRespawnButtonPresser();
int nAlignementLawChaos = GetAlignmentLawChaos(oRespawner);
int nAlignementGoodEvil = GetAlignmentGoodEvil(oRespawner);
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectResurrection(),oRespawner);
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHeal(GetMaxHitPoints(oRespawner)), oRespawner);
RemoveEffects(oRespawner);
// Return PC to respawn point based on alignement.
string sDestTag = "WP_";
switch (nAlignementLawChaos)
{
case ALIGNMENT_CHAOTIC:
sDestTag = sDestTag + "CHAOTIC_";
break;
case ALIGNMENT_NEUTRAL:
sDestTag = sDestTag + "NEUTRAL_";
break;
case ALIGNMENT_LAWFUL:
sDestTag = sDestTag + "LAWFUL_";
break;
}
switch (nAlignementGoodEvil)
{
case ALIGNMENT_GOOD:
sDestTag = sDestTag + "GOOD";
break;
case ALIGNMENT_NEUTRAL:
sDestTag = sDestTag + "NEUTRAL";
break;
case ALIGNMENT_EVIL:
sDestTag = sDestTag + "EVIL";
break;
}
// Apply any penalties.
ApplyPenalty(oRespawner);
object oDest = GetWaypointByTag(sDestTag);
// si le waypoint de destination n'existe pas
if (!GetIsObjectValid(oDest))
{
// utilise le waypoint par defaut
oDest = GetWaypointByTag("WP_DEFAULT_RESPAWN");
}
if (GetIsObjectValid(oDest))
{
SetLocalLocation(oRespawner, "NW_L_I_DIED_HERE", GetLocation(oRespawner));
SetLocalInt(oRespawner, "NW_L_I_DIED", 1);
AssignCommand(oRespawner,JumpToLocation(GetLocation(oDest)));
}
}
Puis sur les endroits choisi (sur la ou les zones) Mettre des Waypoints dont les tags auront ce format
WP_NEUTRAL_NEUTRAL
WP_LAWFUL_NEUTRAL
WP_CHAOTIC_NEUTRAL
ect......
et surtout
WP_DEFAULT_RESPAWN
C'est simple (sauf que moi j'ai été incapable de le faire, a part l'idée)
Par Mellinsa le 11/8/2002 Ă 2:28:19 (#1945177)
JOL Archives 1.0.1
@ JOL / JeuxOnLine