Archives des forums MMO/MMORPG > Neverwinter Nights > NWN - Maskado > [Script] Respawn en fonction de l'alignement
[Script] Respawn en fonction de l'alignement
Par Tyn' le 14/10/2002 à 16:13:57 (#2333922)
Script de respawn spécial
Voici un script de respawn complet, qui fonctionne.
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////////////////////////////////////////////////////////////////////////////////
Puis sur les endroits choisi (sur la ou les zones) Mettre des Waypoints dont les tags auront ce format
/////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)));
}
}
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 Aer'Dalys le 14/2/2003 à 16:57:08 (#3238740)
J'ai cependant quelques questions : je suis nul en script
Si je ne veux pas que les PJ soient répartis selon LawChaos (Loyal-Chaotique) mais que selon GoodEvil (Bon mauvais)
Je fais comment ? je peux supprimer les lignes qui correspondent a LawChaos ??
Et pour modifier les pénalités, est-ce possible et alors, a quoi correspondent les lignes destinées à ça ..
SVP !!!!!!!!!!!!! C'est URGENT !!!!!!!! :aide: :aide:
C'est quand même super sympa !!
Merci Blam
Par Jedaï le 14/2/2003 à 17:33:45 (#3239001)
Voici ta solution, et je t'assure qu'un peu de temps passé dans les tutoriaux t'aurait permis de la trouver tout seul, et sans efforts. De plus tu aurais pu appliquer ta science toute neuve à tous les scripts qui te seront nécessaires : un investissement minime pour un résultat appréciable !:p
////////////////////////////////////////////////////////////////////////////////
/////Script de BlamReconstruit par Fed et fini par Kemay avec une tte ptte modif de Jedaï////
////////////////////////////////////////////////////////////////////////////////
/////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 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 (nAlignementGoodEvil)
{
case ALIGNMENT_GOOD:
sDestTag += "GOOD";
break;
case ALIGNMENT_NEUTRAL:
sDestTag += "NEUTRAL";
break;
case ALIGNMENT_EVIL:
sDestTag += "EVIL";
break;
}
// Je t'ai laissé la ligne : si tu avais des remords, décommente-la
//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)));
}
}
Avec ce script, tes Waypoints s'appelleront "WP_EVIL", "WP_NEUTRAL" ou "WP_GOOD", et si il y en a un ou deux que tu ne crée pas, crée donc un "WP_DEFAULT_RESPAWN". :D
Par Aer'Dalys le 14/2/2003 à 21:18:27 (#3240518)
J'ai commença les scripts mais c'est vraiment pas évident !!
Je suis tout autant nul
Par Blam le 16/2/2003 à 3:07:37 (#3246833)
je me suis penché tres tôt sur ce problème (en tant que clerc) ;)
JOL Archives 1.0.1
@ JOL / JeuxOnLine