Bienvenue sur JeuxOnLine - MMO, MMORPG et MOBA !
Les sites de JeuxOnLine...
 

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

[Script] Respawn en fonction de l'alignement

Par Tyn' le 14/10/2002 à 16:13:57 (#2333922)

Script initialement proposé par Blam !

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
////////////////////////////////////////////////////////////////////////////////
/////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 Aer'Dalys le 14/2/2003 à 16:57:08 (#3238740)

Super, pile ce que je cherchais !!
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)

Tu devrais faire quelques tutoriaux :)

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)

Merci beaucoup !!! c'est très sympa
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)

Mais comme tu peux le voir, c'est grâce a l'aide des autrès que NOUS avons fait cela (je cite ceux qui m'ont aidé) Fed et Kemay

je me suis penché tres tôt sur ce problème (en tant que clerc) ;)

JOL Archives 1.0.1
@ JOL / JeuxOnLine