La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 14/06/2024 01:22:07


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
warpShadow
Légende vivante
Inscrit le: 01 Fév 2005
Messages: 363
Localisation: Perpignan
Répondre en citant
Posté le : 12/05/2006 00:10:04 Sujet du message : [ok]Vampire

Salut, ça faisait longtemps hein ^^

Alors, je recherche un moyen de rendre un bracelet dit "vampire", qui soit non-déséquipable une fois en place sur un pj ou un pnj. Evidemment, il donne au pj tous les avantages des vampires, à savoir la régénération, la force etc...

Mais je voudrais qu'il donne l'inconvenient majeur : le jour ! Si possible, je voudrais que à partir du moment où le jour se lève jusqu'a ce que le soleil se couche, s'ils sont en exterieur, tous les pj qui portent ce bracelet subissent des malus en FOR, DEX, et CON (assez élevés).

Si cela s'avère impossible, ou trop compliqué, je suis ouvert aux suggestions.

merci ^^

(hop, post suivant Razz)

+++
_________________
Asphia
Module RP Médiéval Fantastique pour Neverwiner Nights
Dernière édition par warpShadow le 17/07/2006 23:37:22; édité 1 fois
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Harmelyo
Chevalier
Inscrit le: 06 Oct 2005
Messages: 84
Répondre en citant
Posté le : 12/05/2006 14:15:01 Sujet du message :

Ne serait il pas plus simple d'utiliser un objet "peau"(qui ne sera pas droppable vu que le joueur ne peux pas y accéder), plutot que d'occuper un emplacement d'equipement?
Ensuite ce qu'il faut savoir c'est que des bonus donnés par de l'équipement seront comptabiliser dans la limite de max de caractéristique (+12) de plus avec tout les immunités si ton module prend en charge la limitation des objets il faudra avoisiner le Lvl 30 pour porter l'objet en question (déjà testé Very Happy).

Je te conseillerais plutot d'utiliser une peau, ainsi qu'un test dans le onEnter des zones pour réaffecter les caractéristiques par script de cette manière pas de surprises.

Pour ce qui est des effets du soleil, à mon niveau je vois deux gros moyens de gérer sa:
- la méthode lourde: en utlisant un onheartbeat quelconque qui teste s'il fait jour, s'il s'agit d'un intérieur et affecte les caractéristiques en fonction de. Attention d'ajouter aussi une variable locale pour eviter les effets negatifs cumulatifs, mais aussi à prévoir un test pour retirer les effets à la nuit tombante ou en entrant dans un intérieur ect...

- la méthode légère: qui consiste à n'effectuer le test que sur un évènement lancer moins fréquement, le onEnter de tes zones par exemple. Le test est similaire.


Avantages et inconvenients:
-méthode lourde: le script risque de devenir très gourmand en ressource et de plomber le serveur (je ne sais pas dans quel mesure je n'ai pas fait de calcul ou de test sur le sujet). Au moins avec cette méthodepas de risque de voir un vampire en plein jour sans malus pour plus de 6 secondes Razz

-méthode légère: le script sera beaucoup plus léger et ne devrait pas affecter le serveur plus qu'un autre script. En revanche, si le vampire ne quitte pas la zone pendant longtemps(cas onEnter), il ne se verra aps affecter par les effets si le soleil se lève.

Voili voilou
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
-MeteZ-
Seigneur
Inscrit le: 19 Mar 2006
Messages: 205
Localisation: Région Parisienne (95)
Répondre en citant
Posté le : 12/05/2006 18:09:00 Sujet du message :

Bon je t'ai fait le script, il marche bien, pour la lourdeur je pense que c'est pas le plus optimisé qui soit (c'est pas terrible non plus).
Il y a largement moyen de l'améliorer, d'ailleurs je pense que c'est une bonne idée, donc je vais peut être me pencher dessus pour t'en faire un meilleur Wink, il faudrait juste que tu donne plus de précision.

En attendant celui ci est bien Smile il marche dans les zones extérieur (jour ou nuit) et intérieur (vu comme nuit), et les bonus / malus ne se cumulent pas.

1 : Tu crée un objet de peau comme là dit Harmelyo, le tag j'ai mis "TAG_DE_LA_PEAU_DE_VAMPIRE".

2 : Tu met le script dans le OnHeartBeat du module.

heartbeat_module :
NWScript :
#include "nw_i0_plot"
#include "x0_i0_petrify"

void appliquerBonus(object oJoueur);
void appliquerMalus(object oJoueur);

void main()
{
    object oJoueur = GetFirstPC();

    // On passe en revue tous les joueurs
    while(oJoueur != OBJECT_INVALID)
    {

        // Si le joueur a la peau de vampire
        if(HasItem(oJoueur, "TAG_DE_LA_PEAU_DE_VAMPIRE") == TRUE)
        {

            object oZone = GetArea(oJoueur);
            if(GetIsAreaInterior(oZone) == TRUE)
            {
            //Le joueur est dans une zone interieur : BONUS
                appliquerBonus(oJoueur);
            }
            else
            // Non, alors le joueur est a l'exterieur
            {
                // Si c'est le jour
                if(GetIsDay() == TRUE)
                {
                    appliquerMalus(oJoueur);
                }
                // Non, alors c'est la nuit
                else
                {
                    appliquerBonus(oJoueur);
                }
            }
        }

    oJoueur = GetNextPC();
    }

    ActionWait(10.0);
}

// Fonction qui applique les bonus
void appliquerBonus(object oJoueur)
{
    SetLocalInt(oJoueur, "BONUS_APPLIQUE", 1);

        if(GetLocalInt(oJoueur, "MALUS_APPLIQUE") == 1)
        {
        RemoveEffectOfType(oJoueur, EFFECT_TYPE_ABILITY_DECREASE);
        SetLocalInt(oJoueur, "MALUS_APPLIQUE", 0);
        }
    effect eBonusCons = EffectAbilityIncrease(ABILITY_CONSTITUTION, 3);
    effect eBonusForce = EffectAbilityIncrease(ABILITY_STRENGTH, 3);

    ApplyEffectToObject(DURATION_TYPE_PERMANENT, eBonusCons, oJoueur);
    ApplyEffectToObject(DURATION_TYPE_PERMANENT, eBonusForce, oJoueur);
}

// Fonction qui applique les malus
void appliquerMalus(object oJoueur)
{
    SetLocalInt(oJoueur, "MALUS_APPLIQUE", 1);

        if(GetLocalInt(oJoueur, "BONUS_APPLIQUE") == 1)
        {
        RemoveEffectOfType(oJoueur, EFFECT_TYPE_ABILITY_INCREASE);
        SetLocalInt(oJoueur, "BONUS_APPLIQUE", 0);
        }
    effect eMalusCons = EffectAbilityDecrease(ABILITY_CONSTITUTION, 3);
    effect eMalusForce = EffectAbilityDecrease(ABILITY_STRENGTH, 3);

    ApplyEffectToObject(DURATION_TYPE_PERMANENT, eMalusCons, oJoueur);
    ApplyEffectToObject(DURATION_TYPE_PERMANENT, eMalusForce, oJoueur);
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.

_________________
"Ne dit pas affronter les ténèbres celui qui n'a jamais connu la tombée de la nuit."
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
warpShadow
Légende vivante
Inscrit le: 01 Fév 2005
Messages: 363
Localisation: Perpignan
Répondre en citant
Posté le : 12/05/2006 23:47:17 Sujet du message :

Salut !

Merci pour vos conseils et pour ce script Wink
Une question : Pour la peau, il faudrait la leur donner comment aux PJ ?

Sinon, pour le script, serait-ce possible d'eviter le OHB du mod ? Sinon c'est pas grave, merci beaucoup Wink
Ah, et aussi, pour lui mettre l'effet régénération la nuit et l'enlever le jour, comment ce serait possible ? merci ^^

+++
_________________
Asphia
Module RP Médiéval Fantastique pour Neverwiner Nights
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
-MeteZ-
Seigneur
Inscrit le: 19 Mar 2006
Messages: 205
Localisation: Région Parisienne (95)
Répondre en citant
Posté le : 13/05/2006 16:47:55 Sujet du message : Re: Vampire


warpShadow a écrit :
Alors, je recherche un moyen de rendre un bracelet dit "vampire", qui soit non-déséquipable une fois en place sur un pj ou un pnj.
Tu donne la peau de vampire tu l'as donne comme tu aurais donner le bracelet, dans ce que tu veux, dans un dialogue, à l'arrivé du serveur, le MD qui le donne manuellement.

Sinon éviter de mettre le script dans le OnHeartBeat du module c'est assez complexe, celle solution me semble quand même la plus sure. Et puis elle ne prend pas énormement de ressources puisque une fois que le script de bonus / malus à été éffectué, le module s'en souvient et passe outre à la prochaine boucle.

Si tu veux qu'elle soit plus légère tu n'as qu'à augmenter le ActionWait(x.x) que j'ai placé à la fin. (j'ai mis 10.0 secondes, ca fait court...) 120.0 secondes semble correct, ni trop long (2 minute de marge sur le temps d'une nuit c'est rien), ni trop court. Ca ne rajoute que 1 script (peu conséquent) toutes les 2 minutes sur ton module, c'est rien Smile.
_________________
"Ne dit pas affronter les ténèbres celui qui n'a jamais connu la tombée de la nuit."
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
-MeteZ-
Seigneur
Inscrit le: 19 Mar 2006
Messages: 205
Localisation: Région Parisienne (95)
Répondre en citant
Posté le : 13/05/2006 16:54:09 Sujet du message :

Tiens d'ailleurs je viens de recompliquer le script en version light de chez light, certes un peu moins compréhensif Wink.

NWScript :
int HasItem(object oCreature, string s)
{
    return GetIsObjectValid(GetItemPossessedBy(oCreature, s));
}

void RemoveEffectOfType(object oTarget, int nEffectType)
{
    effect eEff = GetFirstEffect(oTarget);
    while (GetIsEffectValid(eEff)) {
        if ( GetEffectType(eEff) == nEffectType) {
            RemoveEffect(oTarget, eEff);
        }
        eEff = GetNextEffect(oTarget);
    }
}

// Fonction qui applique les bonus
void appliquerBonus(object oJoueur)
{
    SetLocalInt(oJoueur, "BONUS_APPLIQUE", 1);

        if(GetLocalInt(oJoueur, "MALUS_APPLIQUE") == 1)
        {
        RemoveEffectOfType(oJoueur, EFFECT_TYPE_ABILITY_DECREASE);
        SetLocalInt(oJoueur, "MALUS_APPLIQUE", 0);
        }
    effect eBonusTemporaire = EffectAbilityIncrease(ABILITY_CONSTITUTION, 3);
    ApplyEffectToObject(DURATION_TYPE_PERMANENT, eBonusTemporaire, oJoueur);

    eBonusTemporaire = EffectAbilityIncrease(ABILITY_STRENGTH, 3);
    ApplyEffectToObject(DURATION_TYPE_PERMANENT, eBonusTemporaire, oJoueur);

    eBonusTemporaire = EffectRegenerate(1, 3.0);
    ApplyEffectToObject(DURATION_TYPE_PERMANENT, eBonusTemporaire, oJoueur);
}

// Fonction qui applique les malus
void appliquerMalus(object oJoueur)
{
    SetLocalInt(oJoueur, "MALUS_APPLIQUE", 1);

        if(GetLocalInt(oJoueur, "BONUS_APPLIQUE") == 1)
        {
        RemoveEffectOfType(oJoueur, EFFECT_TYPE_ABILITY_INCREASE);
        RemoveEffectOfType(oJoueur, EFFECT_TYPE_REGENERATE);
        SetLocalInt(oJoueur, "BONUS_APPLIQUE", 0);
        }
    effect eMalusTemporaire = EffectAbilityDecrease(ABILITY_CONSTITUTION, 3);
    ApplyEffectToObject(DURATION_TYPE_PERMANENT, eMalusTemporaire, oJoueur);

    eMalusTemporaire = EffectAbilityDecrease(ABILITY_STRENGTH, 3);
    ApplyEffectToObject(DURATION_TYPE_PERMANENT, eMalusTemporaire, oJoueur);
}

void vampireBonusEtMalus()
{
    object oJoueur = GetFirstPC();

    // On passe en revue tous les joueurs
    while(oJoueur != OBJECT_INVALID)
    {

        // Si le joueur a la peau de vampire
        if(HasItem(oJoueur, "TAG_DE_LA_PEAU_DE_VAMPIRE") == TRUE)
        {

            object oZone = GetArea(oJoueur);
            if(GetIsAreaInterior(oZone) == TRUE)
            {
            //Le joueur est dans une zone interieur : BONUS
                appliquerBonus(oJoueur);
            }
            else
            // Non, alors le joueur est a l'exterieur
            {
                // Si c'est le jour
                if(GetIsDay() == TRUE)
                {
                    appliquerMalus(oJoueur);
                }
                // Non, alors c'est la nuit
                else
                {
                    appliquerBonus(oJoueur);
                }
            }
        }

    oJoueur = GetNextPC();
    }
}

void main()
{
    vampireBonusEtMalus();

    ActionWait(120.0);
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.

_________________
"Ne dit pas affronter les ténèbres celui qui n'a jamais connu la tombée de la nuit."
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Sith Vicious
Grand Sage du Conseil
Inscrit le: 19 Oct 2005
Messages: 693
Répondre en citant
Posté le : 13/05/2006 17:00:29 Sujet du message :

Juste : ActionWait sur un module ne sert à rien.

Plutot que le HB module, il vaut mieux faire un pseudo HB (un script qui s'appelle lui même avec un DelayCommand) pour uniquement les persos concernés.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
-MeteZ-
Seigneur
Inscrit le: 19 Mar 2006
Messages: 205
Localisation: Région Parisienne (95)
Répondre en citant
Posté le : 13/05/2006 18:59:20 Sujet du message :

Tiens c'est vraiment pas bête ! Comme ca on fait la vérification de l'objet "peau de vampire" une fois, si c'est ok, eh bien le script se rappelle pour l'objet en question.
Voilà je crois que ya pas mieux Smile merci Sith.
_________________
"Ne dit pas affronter les ténèbres celui qui n'a jamais connu la tombée de la nuit."
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
-MeteZ-
Seigneur
Inscrit le: 19 Mar 2006
Messages: 205
Localisation: Région Parisienne (95)
Répondre en citant
Posté le : 14/05/2006 19:05:55 Sujet du message :

Bon bah voilà comme j'ai remodelé le script, ca marche impect et ca prend pas beaucoup de ressources comme tu le souhaitais.

Dans le OnEnterModule tu met ce script :
NWScript :
int HasItem(object oCreature, string s)
{
    return GetIsObjectValid(GetItemPossessedBy(oCreature, s));
}

void main()
{
    object oEntering = GetEnteringObject();

    if(HasItem(oEntering, "TAG_DE_LA_PEAU_DE_VAMPIRE") == TRUE)
        ExecuteScript("vampire", oEntering);
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


Et là le script nommé "vampire"
NWScript :

void RemoveEffectOfType(object oTarget, int nEffectType)
{
    effect eEff = GetFirstEffect(oTarget);
    while (GetIsEffectValid(eEff)) {
        if ( GetEffectType(eEff) == nEffectType) {
            RemoveEffect(oTarget, eEff);
        }
        eEff = GetNextEffect(oTarget);
    }
}

// Fonction qui applique les bonus
void appliquerBonus(object oJoueur)
{
    SetLocalInt(oJoueur, "BONUS_APPLIQUE", 1);

        if(GetLocalInt(oJoueur, "MALUS_APPLIQUE") == 1)
        {
        RemoveEffectOfType(oJoueur, EFFECT_TYPE_ABILITY_DECREASE);
        SetLocalInt(oJoueur, "MALUS_APPLIQUE", 0);
        FloatingTextStringOnCreature("Les brulures qui marquent votre peau se dissipent et vous vous sentez mieux.", oJoueur, FALSE);
        }
    effect eBonusTemporaire = EffectAbilityIncrease(ABILITY_CONSTITUTION, 3);
    ApplyEffectToObject(DURATION_TYPE_PERMANENT, eBonusTemporaire, oJoueur);

    eBonusTemporaire = EffectAbilityIncrease(ABILITY_STRENGTH, 3);
    ApplyEffectToObject(DURATION_TYPE_PERMANENT, eBonusTemporaire, oJoueur);

    eBonusTemporaire = EffectRegenerate(1, 3.0);
    ApplyEffectToObject(DURATION_TYPE_PERMANENT, eBonusTemporaire, oJoueur);
}

// Fonction qui applique les malus
void appliquerMalus(object oJoueur)
{
    SetLocalInt(oJoueur, "MALUS_APPLIQUE", 1);

        if(GetLocalInt(oJoueur, "BONUS_APPLIQUE") == 1)
        {
        RemoveEffectOfType(oJoueur, EFFECT_TYPE_ABILITY_INCREASE);
        RemoveEffectOfType(oJoueur, EFFECT_TYPE_REGENERATE);
        SetLocalInt(oJoueur, "BONUS_APPLIQUE", 0);
        FloatingTextStringOnCreature("Le soleil brule votre peau, vous vous sentez affaibli.", oJoueur, FALSE);
        }
    effect eMalusTemporaire = EffectAbilityDecrease(ABILITY_CONSTITUTION, 3);
    ApplyEffectToObject(DURATION_TYPE_PERMANENT, eMalusTemporaire, oJoueur);

    eMalusTemporaire = EffectAbilityDecrease(ABILITY_STRENGTH, 3);
    ApplyEffectToObject(DURATION_TYPE_PERMANENT, eMalusTemporaire, oJoueur);
}

void main()
{
            object oJoueur = OBJECT_SELF;
            object oZone = GetArea(oJoueur);

            if(GetIsAreaInterior(oZone) == TRUE)
            {
            //Le joueur est dans une zone interieur : BONUS
                appliquerBonus(oJoueur);
            }
            else
            // Non, alors le joueur est a l'exterieur
            {
                // Si c'est le jour
                if(GetIsDay() == TRUE)
                {
                    appliquerMalus(oJoueur);
                }
                // Non, alors c'est la nuit
                else
                {
                    appliquerBonus(oJoueur);
                }
            }

    DelayCommand(60.0, ExecuteScript("vampire", oJoueur));
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


Il marche impect'.
(note : les paroles "Vous vous sentez mieux ..." ou "Vous vous sentez affaiblie" elle n'arrive pas en boucle toutes les minutes Wink elles flottent au dessus de la créature que lorsque des bonus / malus s'appliquent.
_________________
"Ne dit pas affronter les ténèbres celui qui n'a jamais connu la tombée de la nuit."
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
warpShadow
Légende vivante
Inscrit le: 01 Fév 2005
Messages: 363
Localisation: Perpignan
Répondre en citant
Posté le : 22/05/2006 21:32:18 Sujet du message :

Merci pour tout ça, ça va bien m'aider...

je demanderais juste si j'arrive pas à compiler avec un autre script qui est déjà sur le OnEnter.

merci bien ^^
_________________
Asphia
Module RP Médiéval Fantastique pour Neverwiner Nights
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
-MeteZ-
Seigneur
Inscrit le: 19 Mar 2006
Messages: 205
Localisation: Région Parisienne (95)
Répondre en citant
Posté le : 23/05/2006 16:18:46 Sujet du message :

C'est pas parce qu'un script se compile qu'il marche comme on le souhaite. Je dis ca parce que j'ai peur que tu fasse ton module sans tester si les scripts sont fidèles à tes désirs, si c'est pas le cas tu vas avoir du mal à tous les refaires Smile. Autant s'assurer avant.
_________________
"Ne dit pas affronter les ténèbres celui qui n'a jamais connu la tombée de la nuit."
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
AZAZEL11
Seigneur
Inscrit le: 08 Fév 2006
Messages: 156
Répondre en citant
Posté le : 08/06/2006 19:51:44 Sujet du message :

*onentermodule* ca existe pas, peut etre préciser si c'est OnClientEnter ou bien OnModuleLoad svp...Smile
_________________
L'imagination est plus importante que le savoir. (Albert Einstein)
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Sith Vicious
Grand Sage du Conseil
Inscrit le: 19 Oct 2005
Messages: 693
Répondre en citant
Posté le : 08/06/2006 20:38:18 Sujet du message :

OnClientEnter Wink
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
-MeteZ-
Seigneur
Inscrit le: 19 Mar 2006
Messages: 205
Localisation: Région Parisienne (95)
Répondre en citant
Posté le : 14/07/2006 14:16:23 Sujet du message :

Up le script a été mis à jour parce qu'il y avait un problème Wink

Donc le script sur le OnEnterClient du module est toujours le même :
NWScript :
int HasItem(object oCreature, string s)
{
    return GetIsObjectValid(GetItemPossessedBy(oCreature, s));
}

void main()
{
    object oEntering = GetEnteringObject();

    if(HasItem(oEntering, "TAG_DE_LA_PEAU_DE_VAMPIRE") == TRUE)
        ExecuteScript("vampire", oEntering);
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


Et le script nommé "vampire" ayant subit quelques modifications (assez importantes Razz) :
NWScript :
// Enleve un effet de type nEffectType
void RemoveEffectOfType(object oTarget, int nEffectType);
// Applique les bonus sur le vampire
void appliquerBonus(object oJoueur);
// Applique les malus sur le vampire
void appliquerMalus(object oJoueur);

void main()
{
            object oJoueur = OBJECT_SELF;
            object oZone = GetArea(oJoueur);

            if(GetIsAreaInterior(oZone) == TRUE)
            {
            //Le joueur est dans une zone interieur : BONUS
                appliquerBonus(oJoueur);
            }
            else
            // Non, alors le joueur est a l'exterieur
            {
                // Si c'est le jour
                if(GetIsDay() == TRUE)
                {
                    appliquerMalus(oJoueur);
                }
                // Non, alors c'est la nuit
                else
                {
                    appliquerBonus(oJoueur);
                }
            }

    DelayCommand(5.0, ExecuteScript("vampire", oJoueur));
}

void RemoveEffectOfType(object oTarget, int nEffectType)
{
    effect eEff = GetFirstEffect(oTarget);
    while (GetIsEffectValid(eEff)) {
        if ( GetEffectType(eEff) == nEffectType) {
            RemoveEffect(oTarget, eEff);
        }
        eEff = GetNextEffect(oTarget);
    }
}

void appliquerBonus(object oJoueur)
{
    // On enleve les malus
    if(GetLocalInt(oJoueur, "MALUS_APPLIQUE") == 1)
    {
        RemoveEffectOfType(oJoueur, EFFECT_TYPE_ABILITY_DECREASE);
        SetLocalInt(oJoueur, "MALUS_APPLIQUE", 0);
        FloatingTextStringOnCreature("Les brulures qui marquent votre peau se dissipent et vous vous sentez mieux.", oJoueur, FALSE);
    }

    // On applique les bonus UNE SEULE FOIS (un probleme etait la Wink)
    if(GetLocalInt(oJoueur, "BONUS_APPLIQUE") == 1)
    {
        effect eBonusTemporaire = EffectAbilityIncrease(ABILITY_CONSTITUTION, 3);
        ApplyEffectToObject(DURATION_TYPE_PERMANENT, eBonusTemporaire, oJoueur);

        eBonusTemporaire = EffectAbilityIncrease(ABILITY_STRENGTH, 3);
        ApplyEffectToObject(DURATION_TYPE_PERMANENT, eBonusTemporaire, oJoueur);

        eBonusTemporaire = EffectRegenerate(1, 3.0);
        ApplyEffectToObject(DURATION_TYPE_PERMANENT, eBonusTemporaire, oJoueur);

        SetLocalInt(oJoueur, "BONUS_APPLIQUE", 1);
    }
}

void appliquerMalus(object oJoueur)
{
    // On enleve les bonus
    if(GetLocalInt(oJoueur, "BONUS_APPLIQUE") == 1)
    {
        RemoveEffectOfType(oJoueur, EFFECT_TYPE_ABILITY_INCREASE);
        RemoveEffectOfType(oJoueur, EFFECT_TYPE_REGENERATE);
        SetLocalInt(oJoueur, "BONUS_APPLIQUE", 0);
        FloatingTextStringOnCreature("Le soleil brule votre peau, vous vous sentez affaibli.", oJoueur, FALSE);
    }

    effect eMalusTemporaire;

    // On applique les bonus UNE SEULE FOIS (un probleme etait aussi la Wink)
    if(GetLocalInt(oJoueur, "MALUS_APPLIQUE") == 0)
    {
        eMalusTemporaire = EffectAbilityDecrease(ABILITY_CONSTITUTION, 3);
        ApplyEffectToObject(DURATION_TYPE_PERMANENT, eMalusTemporaire, oJoueur);

        eMalusTemporaire = EffectAbilityDecrease(ABILITY_STRENGTH, 3);
        ApplyEffectToObject(DURATION_TYPE_PERMANENT, eMalusTemporaire, oJoueur);

        SetLocalInt(oJoueur, "MALUS_APPLIQUE", 1);
    }

    // Le vamp' subit 1 de degats lorsqu'il est au soleil (damage divin)
    eMalusTemporaire = EffectDamage(1, DAMAGE_TYPE_DIVINE, DAMAGE_POWER_NORMAL);
    ApplyEffectToObject(DURATION_TYPE_INSTANT, eMalusTemporaire, oJoueur);
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
warpShadow
Légende vivante
Inscrit le: 01 Fév 2005
Messages: 363
Localisation: Perpignan
Répondre en citant
Posté le : 17/07/2006 23:36:13 Sujet du message :

Lol merci, mais j'aurais du marquer résolu, j'utilise désormais un systeme qui modifie l'ethnie à la morsure garou et vampire, et ça prend tout en charge:grin:

merci néanmoins, et désolé Confused

+++
_________________
Asphia
Module RP Médiéval Fantastique pour Neverwiner Nights
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Montrer les messages depuis :
Page 1 sur 1 ¤


Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


Sauter vers:
FAQ | Rechercher | Liste des Membres | Groupes d'utilisateurs | S'enregistrer | Profil | Se connecter pour vérifier ses messages privés | Connexion
Powered by phpBB 2.* [m] © 2001, 2002 phpBB Group
Theme rewritten in beautiful XHTML code by Baldurien.
Thème "La Bibliothèque de Neverwinter" crée par Kruger
Traduction par : phpBB-fr.com
Page generated in 69.287ms