Aelor
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.

Aelor

Forum officiel du module NeverWinter Nights et role play Aelor.
 
AccueilAccueil  PortailPortail  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  Connexion  
Le Deal du moment :
Xiaomi Mi Smart Camera 2K Standard Edition (design ...
Voir le deal
11.39 €

 

 Partage de l'xp

Aller en bas 
5 participants
Aller à la page : 1, 2  Suivant
AuteurMessage
Ba'elzaden
Maitre d'Aelor
Ba'elzaden


Nombre de messages : 909
Date d'inscription : 15/12/2005

Partage de l'xp Empty
MessageSujet: Partage de l'xp   Partage de l'xp EmptyMar 20 Déc - 12:46

Mes recherches study m'ont permis de trouver ceci:

http://nwvault.ign.com/View.php?view=scripts.Detail&id=43
et
http://nwvault.ign.com/View.php?view=scripts.Detail&id=40

Malheuresement ma maitrise de l'anglais est trop limité pour que je sache si c'est bien ce que je veux.
Revenir en haut Aller en bas
Gimli Oakenshield
L'ignorant en Hardware
Gimli Oakenshield


Nombre de messages : 783
Localisation : Près de mon ordi !
Date d'inscription : 15/12/2005

Partage de l'xp Empty
MessageSujet: Re: Partage de l'xp   Partage de l'xp EmptyMar 20 Déc - 13:04

Oki, pour le premier, lien en fait, c'est juste une répartition différente des xp en fonction de ton niveau ...
Ce script reprend le partage des xp a la maniere Advanced Dungon & Dragon ...

Pour ce qui est du second, je vien de relire attentivement et je me suis apperçut qu'en fait ce système permet de donner de l'xp par exemple quand on déverrouille un cofre ou ce genre de conn*** et donc est incopatible avec ce que tu veux faire ...
Revenir en haut Aller en bas
Ba'elzaden
Maitre d'Aelor
Ba'elzaden


Nombre de messages : 909
Date d'inscription : 15/12/2005

Partage de l'xp Empty
MessageSujet: Re: Partage de l'xp   Partage de l'xp EmptyMar 20 Déc - 13:40

C'est dur, je vais retourner chercher.
Revenir en haut Aller en bas
Gimli Oakenshield
L'ignorant en Hardware
Gimli Oakenshield


Nombre de messages : 783
Localisation : Près de mon ordi !
Date d'inscription : 15/12/2005

Partage de l'xp Empty
MessageSujet: Re: Partage de l'xp   Partage de l'xp EmptyMar 20 Déc - 13:53

Okay, met tes liens ici Au cas ou certain pourraient être interressant ...
Revenir en haut Aller en bas
Gimli Oakenshield
L'ignorant en Hardware
Gimli Oakenshield


Nombre de messages : 783
Localisation : Près de mon ordi !
Date d'inscription : 15/12/2005

Partage de l'xp Empty
MessageSujet: Re: Partage de l'xp   Partage de l'xp EmptyDim 8 Jan - 14:27

J'ai trouvé ceci qui pourrait être interrressant si modifé, mais bon, a voir ...
Revenir en haut Aller en bas
Gimli Oakenshield
L'ignorant en Hardware
Gimli Oakenshield


Nombre de messages : 783
Localisation : Près de mon ordi !
Date d'inscription : 15/12/2005

Partage de l'xp Empty
MessageSujet: Re: Partage de l'xp   Partage de l'xp EmptyDim 8 Jan - 15:09

Logiquement avec ce que je vient de faire, on gagne 15 % d'xp en plus quand on est deux ...

Voila, le probleme, c'est qu'il est a mettre dans le OnDeath des créatures que l'on veut? Pour pallier à ce problème, tu peut remplacer le fichier par défaut par celui-ci ... Mais c'est pas super a mon avis ... je vais voir s'il y a une autre alternative ...

Code:
//::///////////////////////////////////////////////
//:: Default: On Death
//:: OnDeath Event for Creatures
//:: Modified By: Brian J. Kittrell
//:://////////////////////////////////////////////
#include "NW_I0_GENERIC"
#include "x2_inc_compon"
#include "x0_i0_spawncond"

//:: MAXHP represents the maximum number of
//:: hit points your strongest monster has.
//:: Set it high to make sure monsters with
//:: a lower hit point value than what is defined
//:: here are killed by the script.

int MAXHP = 90000;

//:: End Variable Declaration

void main()
{
object oKiller = GetLastKiller();
float fModif = 0.3;

//::if killer is PC, henchman, familiar and such or a trap set by a PC
if (GetIsPC(oKiller) || GetIsPC(GetMaster(oKiller)) || GetIsPC(GetTrapCreator(oKiller)))
    {
    int nClass = GetLevelByClass(CLASS_TYPE_COMMONER);
    int nAlign = GetAlignmentGoodEvil(OBJECT_SELF);
    if(nClass > 0 && (nAlign == ALIGNMENT_GOOD || nAlign == ALIGNMENT_NEUTRAL))
        {
        AdjustAlignment(oKiller, ALIGNMENT_EVIL, 5);
        }
    SpeakString("NW_I_AM_DEAD", TALKVOLUME_SILENT_TALK);
    //Shout Attack my target, only works with the On Spawn In setup
    SpeakString("NW_ATTACK_MY_TARGET", TALKVOLUME_SILENT_TALK);

    float BaseMonEXP = 25.0;

    //:: The bonus experience based on difference of CR of monster vs.
    //:: Levels of Party.
    float BonusEXP = 15.0;

    // First get all the members of the party & make sure only party members
    // in the area of the kill will get experience.
    int NumOfParty = 0;
    float PartyLevelSum = 0.0;
    object oPartyMember = GetFirstFactionMember(oKiller, TRUE);
    while(GetIsObjectValid(oPartyMember) && GetArea(OBJECT_SELF) == GetArea(oPartyMember))
        {
        NumOfParty++;
        PartyLevelSum += GetCharacterLevel(oPartyMember);
        oPartyMember = GetNextFactionMember(oKiller, TRUE);
        }
    float PartyAvgLvl = PartyLevelSum / NumOfParty ;
    //Calculate Adjustment Value
    float AdjustValue = GetChallengeRating(OBJECT_SELF) / PartyAvgLvl;
    float FinalMonValue;
    //Determine Final Experience Value
    if (AdjustValue == 0.0)
      {
      FinalMonValue = GetChallengeRating(OBJECT_SELF) * BaseMonEXP;
      }
    else
        {
        if (AdjustValue < 1.0)
            {
            FinalMonValue = BaseMonEXP * AdjustValue;
            }
        else
            {
            FinalMonValue = BaseMonEXP + (GetChallengeRating(OBJECT_SELF) - PartyAvgLvl) * BonusEXP;
            }
        }
    //Determine the value of the Split EXP
    float NbPJ = 0.0;
    float SplitFinalEXP =0.0;
    if(NumOfParty == 2)
        {
        NbPJ = NbPJ + NumOfParty - fModif ;
        SplitFinalEXP = SplitFinalEXP + FinalMonValue / NbPJ;
        }
    else
        {
        SplitFinalEXP = SplitFinalEXP + FinalMonValue / NumOfParty;
        }
    int SFEint = FloatToInt(SplitFinalEXP);
    //Distribute EXP to all PCs in the Party
    oPartyMember = GetFirstFactionMember(oKiller, TRUE);
    while (GetIsObjectValid(oPartyMember) && GetArea(OBJECT_SELF) == GetArea(oPartyMember))
        {
        GiveXPToCreature(oPartyMember, SFEint);
        oPartyMember = GetNextFactionMember(oKiller, TRUE);
        }
    //:: to remove the double experience messages
    ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectResurrection(), OBJECT_SELF);
    ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(MAXHP), OBJECT_SELF);
    //:: this causes the death event to fire twice...
    //:: not anymore...
    if(!GetLocalInt(OBJECT_SELF, "DoOnce"))
        {
        if(GetSpawnInCondition(NW_FLAG_DEATH_EVENT))
            {
            SignalEvent(OBJECT_SELF, EventUserDefined(1007));
            SetLocalInt(OBJECT_SELF, "DoOnce", 1);
            }
        }
    craft_drop_items(oKiller);
    return;
    }
  }
Revenir en haut Aller en bas
Gimli Oakenshield
L'ignorant en Hardware
Gimli Oakenshield


Nombre de messages : 783
Localisation : Près de mon ordi !
Date d'inscription : 15/12/2005

Partage de l'xp Empty
MessageSujet: Re: Partage de l'xp   Partage de l'xp EmptyDim 8 Jan - 17:00

Bon, alors, tu copie le script "x2_def_ondeath" et tu le sauve sous un autre nom que tu saura retrouver puis tu met celui ci avec le nom "x2_def_ondeath" :

Code:
//::///////////////////////////////////////////////
//:: Default: On Death
//:: OnDeath Event for Creatures
//:: Modified By: Brian J. Kittrell
//:://////////////////////////////////////////////
#include "NW_I0_GENERIC"
#include "x2_inc_compon"
#include "x0_i0_spawncond"

//:: MAXHP represents the maximum number of
//:: hit points your strongest monster has.
//:: Set it high to make sure monsters with
//:: a lower hit point value than what is defined
//:: here are killed by the script.

int MAXHP = 90000;

//:: End Variable Declaration

void main()
{
object oKiller = GetLastKiller();
float fModif = 1.25;

//::if killer is PC, henchman, familiar and such or a trap set by a PC
if (GetIsPC(oKiller) || GetIsPC(GetMaster(oKiller)) || GetIsPC(GetTrapCreator(oKiller)))
    {
    int nClass = GetLevelByClass(CLASS_TYPE_COMMONER);
    int nAlign = GetAlignmentGoodEvil(OBJECT_SELF);
    if(nClass > 0 && (nAlign == ALIGNMENT_GOOD || nAlign == ALIGNMENT_NEUTRAL))
        {
        AdjustAlignment(oKiller, ALIGNMENT_EVIL, 5);
        }
    SpeakString("NW_I_AM_DEAD", TALKVOLUME_SILENT_TALK);
    //Shout Attack my target, only works with the On Spawn In setup
    SpeakString("NW_ATTACK_MY_TARGET", TALKVOLUME_SILENT_TALK);

    float BaseMonEXP = 25.0;

    //:: The bonus experience based on difference of CR of monster vs.
    //:: Levels of Party.
    float BonusEXP = 15.0;

    // First get all the members of the party & make sure only party members
    // in the area of the kill will get experience.
    int NumOfParty = 0;
    float PartyLevelSum = 0.0;
    object oPartyMember = GetFirstFactionMember(oKiller, TRUE);
    while(GetIsObjectValid(oPartyMember) && GetArea(OBJECT_SELF) == GetArea(oPartyMember))
        {
        NumOfParty++;
        PartyLevelSum += GetCharacterLevel(oPartyMember);
        oPartyMember = GetNextFactionMember(oKiller, TRUE);
        }
    float PartyAvgLvl = PartyLevelSum / NumOfParty ;
    //Calculate Adjustment Value
    float AdjustValue = GetChallengeRating(OBJECT_SELF) / PartyAvgLvl;
    float FinalMonValue;
    //Determine Final Experience Value
    if (AdjustValue == 0.0)
      {
      FinalMonValue = GetChallengeRating(OBJECT_SELF) * BaseMonEXP;
      }
    else
        {
        if (AdjustValue < 1.0)
            {
            FinalMonValue = BaseMonEXP * AdjustValue;
            }
        else
            {
            FinalMonValue = BaseMonEXP + (GetChallengeRating(OBJECT_SELF) - PartyAvgLvl) * BonusEXP;
            }
        }
    //Determine the value of the Split EXP
    float NbPJ = 0.0;
    float SplitFinalEXP =0.0;
    if(NumOfParty == 2)
        {
        NbPJ = NbPJ + NumOfParty - fModif ;
        SplitFinalEXP = SplitFinalEXP + FinalMonValue / NbPJ;
        }
    else
        {
        SplitFinalEXP = SplitFinalEXP + FinalMonValue / NumOfParty;
        }
    int SFEint = FloatToInt(SplitFinalEXP);
    //Distribute EXP to all PCs in the Party
    oPartyMember = GetFirstFactionMember(oKiller, TRUE);
    while (GetIsObjectValid(oPartyMember) && GetArea(OBJECT_SELF) == GetArea(oPartyMember))
        {
        GiveXPToCreature(oPartyMember, SFEint);
        oPartyMember = GetNextFactionMember(oKiller, TRUE);
        }
    //:: to remove the double experience messages
    ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectResurrection(), OBJECT_SELF);
    ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(MAXHP), OBJECT_SELF);
    //:: this causes the death event to fire twice...
    //:: not anymore...
    if(!GetLocalInt(OBJECT_SELF, "DoOnce"))
        {
        if(GetSpawnInCondition(NW_FLAG_DEATH_EVENT))
            {
            SignalEvent(OBJECT_SELF, EventUserDefined(1007));
            SetLocalInt(OBJECT_SELF, "DoOnce", 1);
            }
        }
    craft_drop_items(oKiller);
    return;
    }
  }
Revenir en haut Aller en bas
Gimli Oakenshield
L'ignorant en Hardware
Gimli Oakenshield


Nombre de messages : 783
Localisation : Près de mon ordi !
Date d'inscription : 15/12/2005

Partage de l'xp Empty
MessageSujet: Re: Partage de l'xp   Partage de l'xp EmptyDim 8 Jan - 18:56

Bon, en fait, laisse tomber ce script pour l'instant ...
Revenir en haut Aller en bas
Gimli Oakenshield
L'ignorant en Hardware
Gimli Oakenshield


Nombre de messages : 783
Localisation : Près de mon ordi !
Date d'inscription : 15/12/2005

Partage de l'xp Empty
MessageSujet: Re: Partage de l'xp   Partage de l'xp EmptyMer 25 Jan - 16:53

Je souhaiterais savoir le message d'erreur qui apparaitre lorsque ca plante le script d'xp ...
Revenir en haut Aller en bas
Ba'elzaden
Maitre d'Aelor
Ba'elzaden


Nombre de messages : 909
Date d'inscription : 15/12/2005

Partage de l'xp Empty
MessageSujet: Re: Partage de l'xp   Partage de l'xp EmptyMer 25 Jan - 21:25

Citation :
Script nw_c2_defautl7, OID 80000e38, Tag: NW_GNTMOUNT, ERREUR: DIVIDE BY ZERO

Sahcnat que le script es tle script de ondeath (logique) et le tag celui du monstre que j'ai tué quand c'est apparu: un géant des montagnes.
Revenir en haut Aller en bas
Gimli Oakenshield
L'ignorant en Hardware
Gimli Oakenshield


Nombre de messages : 783
Localisation : Près de mon ordi !
Date d'inscription : 15/12/2005

Partage de l'xp Empty
MessageSujet: Re: Partage de l'xp   Partage de l'xp EmptyDim 29 Jan - 22:37

Oki merci ...

Voici un script (que je n'ai pas encore testé)
Mais qui me semble correct :
(Remerciement a milti Wink )

Code:
//::///////////////////////////////////////////////////
//:: NW_C2_DEFAULT7
/*
  Default OnDeath event handler for NPCs.

  Adjusts killer's alignment if appropriate and
  alerts allies to our death.
*/
/*
  Intégration d'un système d'expérience évolué
  par Anthraxcite et Drakolight
*/
/*
Modifie par Gimli_Oakenshield
*/
//::///////////////////////////////////////////////////

#include "x2_inc_compon"
#include "x0_i0_spawncond"
#include "x0_i0_henchman"

//Donne le nombre de joueur du groupe de oPC prsents dans la zone
int GetNumberPartyMembersInArea(object oPC)
{
  int nMembers = 0;
  object oChiefArea = GetArea(oPC);
  object oPartyMem = GetFirstFactionMember(oPC, TRUE);
  while (GetIsObjectValid(oPartyMem))
  {
      if(GetArea(oPartyMem)==oChiefArea)
      {
          nMembers++;
      }
      oPartyMem = GetNextFactionMember(oPC, TRUE);
  }
  return nMembers;
}

//Donne la moyenne des facteurs de puissance des joueurs
//A la creature qui execute ce script
float GetLvlAverage(object oPC)
{
    int i = 1;
    float fTotalLVL = IntToFloat(GetCharacterLevel(oPC));
    object oMem = GetFirstFactionMember(oPC, TRUE);
    while(GetIsObjectValid(oMem))
        {
        fTotalLVL = fTotalLVL + GetCharacterLevel(oMem);
        i++;
        oMem = GetNextFactionMember(oPC, TRUE);
        }

    if(i>0)
    {
        return fTotalLVL/IntToFloat(i);
    }
    else
    {
        return -1.0;
    }
}

//Distribue un montant d'xp aux joueurs se trouvant dans la zone
void DistribXP(object oKiller, int nXP, float fBonusXPGroupe = 0.15)
{
    object oChiefKiller = GetFactionLeader(oKiller);
    float PercentBonusXpForGroupKiller = 1.0 - fBonusXPGroupe + GetNumberPartyMembersInArea(oKiller)*fBonusXPGroupe;
    int nXPFromCreature = nXP;
    float nXPTotal = nXPFromCreature * PercentBonusXpForGroupKiller;
    float nXPParJoueur = nXPTotal/GetNumberPartyMembersInArea(oKiller);
    object oPC = oKiller;
    GiveXPToCreature(oPC,FloatToInt(nXPParJoueur));
    object oMem = GetFirstFactionMember(oPC, TRUE);
    while(GetIsObjectValid(oMem) && GetArea(oPC) == GetArea(OBJECT_SELF))
        {
        GiveXPToCreature(oPC,FloatToInt(nXPParJoueur));
        oMem = GetNextFactionMember(oPC, TRUE);
        }
}

//Calcule le montant d'xp a distribuer suivant la moyenne des lvl
//des attaquants calcules basés sur la table des xp
int GetXPToDistrib(float fLvlAverage)
{
    int nLvlMob = GetCharacterLevel(OBJECT_SELF);
    float fDifLvl = nLvlMob-fLvlAverage;
    int nXp;
    if(fDifLvl<0.0)
    {
        //lvl mob + (xp du lvl/nb mob a tuer/diflvl+1
        nXp = FloatToInt(nLvlMob+((nLvlMob*1000)/((nLvlMob-1)*10+250))/(fLvlAverage-nLvlMob+1));
    }
    else
    {
        nXp = FloatToInt(nLvlMob+((nLvlMob*1000)/((nLvlMob-1)*10+250))*(fDifLvl+1));
    }
return nXp;
}

void main()
{
    int nClass = GetLevelByClass(CLASS_TYPE_COMMONER);
    int nAlign = GetAlignmentGoodEvil(OBJECT_SELF);
    object oKiller = GetLastKiller();

    // If we're a good/neutral commoner,
    // adjust the killer's alignment evil
    if(nClass > 0 && (nAlign == ALIGNMENT_GOOD || nAlign == ALIGNMENT_NEUTRAL))
    {
        AdjustAlignment(oKiller, ALIGNMENT_EVIL, 5);
    }

    //Systeme d'xp pour syloan par Drakolight et Anthraxcite
    if(!GetIsPC(oKiller) && !GetIsDM(oKiller) && GetMaster(oKiller)!=OBJECT_INVALID)
    {
        oKiller = GetMaster(oKiller);
    }
    if(!GetIsPC(oKiller))
        return;

    float fLvlAverage = GetLvlAverage(oKiller);
    int nXP;
    if(fLvlAverage!=-1.0)
    {
        nXP = GetXPToDistrib(fLvlAverage);
        DistribXP(oKiller, nXP);
    }
    else
    {
        nXP = GetXPToDistrib(IntToFloat(GetCharacterLevel(oKiller)));
        GiveXPToCreature(oKiller, nXP);
    }
    //Fin du systeme d'xp

    // Call to allies to let them know we're dead
    SpeakString("NW_I_AM_DEAD", TALKVOLUME_SILENT_TALK);

    //Shout Attack my target, only works with the On Spawn In setup
    SpeakString("NW_ATTACK_MY_TARGET", TALKVOLUME_SILENT_TALK);

    // NOTE: the OnDeath user-defined event does not
    // trigger reliably and should probably be removed
    if(GetSpawnInCondition(NW_FLAG_DEATH_EVENT))
    {
        SignalEvent(OBJECT_SELF, EventUserDefined(1007));
    }
    craft_drop_items(oKiller);
}


Dernière édition par le Mar 31 Jan - 19:36, édité 1 fois
Revenir en haut Aller en bas
Ba'elzaden
Maitre d'Aelor
Ba'elzaden


Nombre de messages : 909
Date d'inscription : 15/12/2005

Partage de l'xp Empty
MessageSujet: Re: Partage de l'xp   Partage de l'xp EmptyDim 29 Jan - 23:23

Avant de l'intégrer j'aimerait ce que fait la partie d'xp du aux dommages.
Revenir en haut Aller en bas
Gimli Oakenshield
L'ignorant en Hardware
Gimli Oakenshield


Nombre de messages : 783
Localisation : Près de mon ordi !
Date d'inscription : 15/12/2005

Partage de l'xp Empty
MessageSujet: Re: Partage de l'xp   Partage de l'xp EmptyMar 31 Jan - 19:33

Citation :
Avant de l'intégrer j'aimerait ce que fait la partie d'xp du aux dommages.
J'a rien compris mais je pense que tu veuxt savoir a prpos de ce que tu a lut sur les commentaires ...

C'est une erreur de ma part j'ai tout enlevé en ce qui conserne les dégats infligés ... Ca a pas été facile mais c'est bon Wink[/code]
Revenir en haut Aller en bas
Gimli Oakenshield
L'ignorant en Hardware
Gimli Oakenshield


Nombre de messages : 783
Localisation : Près de mon ordi !
Date d'inscription : 15/12/2005

Partage de l'xp Empty
MessageSujet: Re: Partage de l'xp   Partage de l'xp EmptyMar 31 Jan - 19:37

Bug corrigé

(Il donnais des XP a tous les membre du groupe même ceux qui n'étaient pas dans la zone ...)
Revenir en haut Aller en bas
Ba'elzaden
Maitre d'Aelor
Ba'elzaden


Nombre de messages : 909
Date d'inscription : 15/12/2005

Partage de l'xp Empty
MessageSujet: Re: Partage de l'xp   Partage de l'xp EmptyMar 31 Jan - 22:08

Tu pourrais faire en sorte maintenant que l'xp croit avec le nombre (ce qu'il fait actuellement) mais que à partir d'un certain nombre le chaos ambiant empeche le pj de gagner trop d'xp?

Exemple:
1pj: 100
2pj: 115
3: 130
4: 150
5: 125
6:100
7: 75
8: 50
9: 25
10: ben euh... rien^^
Revenir en haut Aller en bas
Gimli Oakenshield
L'ignorant en Hardware
Gimli Oakenshield


Nombre de messages : 783
Localisation : Près de mon ordi !
Date d'inscription : 15/12/2005

Partage de l'xp Empty
MessageSujet: Re: Partage de l'xp   Partage de l'xp EmptyMer 1 Fév - 15:48

Euh ... Pas exactement avec ces valeurs là mais j'éssaie .. attend ...
Revenir en haut Aller en bas
Ethelbert
Génération spontanée
Ethelbert


Nombre de messages : 647
Localisation : Lyon
Date d'inscription : 11/01/2006

Partage de l'xp Empty
MessageSujet: Re: Partage de l'xp   Partage de l'xp EmptyMer 1 Fév - 15:53

Ba'elzaden a écrit:
Tu pourrais faire en sorte maintenant que l'xp croit avec le nombre (ce qu'il fait actuellement) mais que à partir d'un certain nombre le chaos ambiant empeche le pj de gagner trop d'xp?

Exemple:
1pj: 100
2pj: 115
3: 130
4: 150
5: 125
6:100
7: 75
8: 50
9: 25
10: ben euh... rien^^

Euh ça veut dire qu'au-delà de 4 personnes dans un groupe, il est moins rentable de pexer ? On va faire des brigades de mousquetaires, alors ? Wink
Bon je sais que pexer n'est pas le but premier du module (heureusement d'ailleurs...), mais ne serait-il pas possible de faire stagter le niveau d'xp avant de le faire chuter ? Parce qu'en fait, je ne sais pas si la quête des Adams a été résolue par un grouep, mais j'avais envie à un moment ou à un autre de proposer une battue pour la résoudre. Donc on risquait d'être plus de 4 dans le groupe, à mon sens.
Je sais bien que si cette animation peut se faire, la récompense en Xp sera surtout allouée par les DMs; mais le fond de ma pensée, c'est que si le module marche bien, les groupes de plus de quatre personnes risquent de ne pas être rares. Notamment si plus de quatre joueurs aiment bien jouer ensemble...

Voilà, ce n'est que mon humble avis...
Revenir en haut Aller en bas
Gimli Oakenshield
L'ignorant en Hardware
Gimli Oakenshield


Nombre de messages : 783
Localisation : Près de mon ordi !
Date d'inscription : 15/12/2005

Partage de l'xp Empty
MessageSujet: Re: Partage de l'xp   Partage de l'xp EmptyMer 1 Fév - 16:10

Voila le script selon la vlonté de Ba'el
Maintenant que je métrise bien le script je peux faire tout ce que vous voulez !

Code:
//::///////////////////////////////////////////////////
//:: NW_C2_DEFAULT7
/*
  Default OnDeath event handler for NPCs.

  Adjusts killer's alignment if appropriate and
  alerts allies to our death.
*/
/*
  Intégration d'un système d'expérience évolué
  par Anthraxcite et Drakolight
*/
/*
Modifie par Gimli_Oakenshield
*/
//::///////////////////////////////////////////////////

#include "x2_inc_compon"
#include "x0_i0_spawncond"
#include "x0_i0_henchman"

//Donne le nombre de joueur du groupe de oPC prsents dans la zone
int GetNumberPartyMembersInArea(object oPC)
{
  int nMembers = 0;
  object oArea = GetArea(oPC);
  object oPartyMem = GetFirstFactionMember(oPC, TRUE);
  while (GetIsObjectValid(oPartyMem))
  {
      if(GetArea(oPartyMem)==oArea)
      {
          nMembers++;
      }
      oPartyMem = GetNextFactionMember(oPC, TRUE);
  }
  return nMembers;
}

//Donne la moyenne des facteurs de puissance des joueurs
float GetLvlAverage(object oPC)
{
    int i = 1;
    float fTotalLVL = IntToFloat(GetCharacterLevel(oPC));
    object oMem = GetFirstFactionMember(oPC, TRUE);
    object oArea = GetArea(oPC);
    while(GetIsObjectValid(oMem))
        {
        if(GetArea(oMem) == oArea)
            {
            fTotalLVL = fTotalLVL + GetCharacterLevel(oMem);
            i++;
            }
        oMem = GetNextFactionMember(oPC, TRUE);
        }

    if(i>0)
    {
        return fTotalLVL/IntToFloat(i);
    }
    else
    {
        return -1.0;
    }
}

//Distribue un montant d'xp aux joueurs se trouvant dans la zone
void DistribXP(object oKiller, int nXP, float fBonusXPGroupe = 0.15)
{
    object oChiefKiller = GetFactionLeader(oKiller);
    float PercentBonusXpForGroupKiller;
    int iNum = GetNumberPartyMembersInArea(oKiller);
    if(iNum == 0)
    PercentBonusXpForGroupKiller = 1.0;
    if(iNum >= 1 && iNum <= 4)
    PercentBonusXpForGroupKiller = 1.0 - fBonusXPGroupe + GetNumberPartyMembersInArea(oKiller)*fBonusXPGroupe;
    if(iNum >= 4 && iNum <= 8)
    PercentBonusXpForGroupKiller = 1.6 - (iNum-4)*0.25;
    if(iNum >= 8)
    PercentBonusXpForGroupKiller = 0.5;
    int nXPFromCreature = nXP;
    float nXPTotal = nXPFromCreature * PercentBonusXpForGroupKiller;
    float nXPParJoueur = nXPTotal/GetNumberPartyMembersInArea(oKiller);
    object oPC = oKiller;
    GiveXPToCreature(oPC,FloatToInt(nXPParJoueur));
    object oMem = GetFirstFactionMember(oPC, TRUE);
    while(GetIsObjectValid(oMem) && GetArea(oPC) == GetArea(OBJECT_SELF))
        {
        GiveXPToCreature(oPC,FloatToInt(nXPParJoueur));
        oMem = GetNextFactionMember(oPC, TRUE);
        }
}

//Calcule le montant d'xp a distribuer suivant la moyenne des lvl
//des attaquants calcules basés sur la table des xp
int GetXPToDistrib(float fLvlAverage)
{
    int nLvlMob = GetCharacterLevel(OBJECT_SELF);
    float fDifLvl = nLvlMob-fLvlAverage;
    int nXp;
    if(fDifLvl<0.0)
    {
        //lvl mob + (xp du lvl/nb mob a tuer/diflvl+1
        nXp = FloatToInt(nLvlMob+((nLvlMob*1000)/((nLvlMob-1)*10+250))/(fLvlAverage-nLvlMob+1));
    }
    else
    {
        nXp = FloatToInt(nLvlMob+((nLvlMob*1000)/((nLvlMob-1)*10+250))*(fDifLvl+1));
    }
return nXp;
}

void main()
{
    int nClass = GetLevelByClass(CLASS_TYPE_COMMONER);
    int nAlign = GetAlignmentGoodEvil(OBJECT_SELF);
    object oKiller = GetLastKiller();

    // If we're a good/neutral commoner,
    // adjust the killer's alignment evil
    if(nClass > 0 && (nAlign == ALIGNMENT_GOOD || nAlign == ALIGNMENT_NEUTRAL))
    {
        AdjustAlignment(oKiller, ALIGNMENT_EVIL, 5);
    }

    //Systeme d'xp pour syloan par Drakolight et Anthraxcite
    if(!GetIsPC(oKiller) && !GetIsDM(oKiller) && GetMaster(oKiller)!=OBJECT_INVALID)
    {
        oKiller = GetMaster(oKiller);
    }
    if(!GetIsPC(oKiller))
        return;

    float fLvlAverage = GetLvlAverage(oKiller);
    int nXP;
    if(fLvlAverage!=-1.0)
    {
        nXP = GetXPToDistrib(fLvlAverage);
        DistribXP(oKiller, nXP);
    }
    else
    {
        nXP = GetXPToDistrib(IntToFloat(GetCharacterLevel(oKiller)));
        GiveXPToCreature(oKiller, nXP);
    }
    //Fin du systeme d'xp

    // Call to allies to let them know we're dead
    SpeakString("NW_I_AM_DEAD", TALKVOLUME_SILENT_TALK);

    //Shout Attack my target, only works with the On Spawn In setup
    SpeakString("NW_ATTACK_MY_TARGET", TALKVOLUME_SILENT_TALK);

    // NOTE: the OnDeath user-defined event does not
    // trigger reliably and should probably be removed
    if(GetSpawnInCondition(NW_FLAG_DEATH_EVENT))
    {
        SignalEvent(OBJECT_SELF, EventUserDefined(1007));
    }
    craft_drop_items(oKiller);
}
Revenir en haut Aller en bas
Ethelbert
Génération spontanée
Ethelbert


Nombre de messages : 647
Localisation : Lyon
Date d'inscription : 11/01/2006

Partage de l'xp Empty
MessageSujet: Re: Partage de l'xp   Partage de l'xp EmptyMer 1 Fév - 17:05

Bon alors il me faut:
- un script capable de me donner les prochains numéros du tirage de la loterie nationale (effectué avec 7 jets sur un dé à 49 faces);
- un script capable de faire arriver le livreur de pizzas dans les temps;
- un script capable d'éviter que mon chat ne saute sur mon clavier quand je suis connecté.

Merci.
Revenir en haut Aller en bas
Ba'elzaden
Maitre d'Aelor
Ba'elzaden


Nombre de messages : 909
Date d'inscription : 15/12/2005

Partage de l'xp Empty
MessageSujet: Re: Partage de l'xp   Partage de l'xp EmptyMer 1 Fév - 17:25

Citation :
Euh ça veut dire qu'au-delà de 4 personnes dans un groupe, il est moins rentable de pexer ? On va faire des brigades de mousquetaires, alors ?
Bon je sais que pexer n'est pas le but premier du module (heureusement d'ailleurs...), mais ne serait-il pas possible de faire stagter le niveau d'xp avant de le faire chuter ? Parce qu'en fait, je ne sais pas si la quête des Adams a été résolue par un grouep, mais j'avais envie à un moment ou à un autre de proposer une battue pour la résoudre. Donc on risquait d'être plus de 4 dans le groupe, à mon sens.
Je sais bien que si cette animation peut se faire, la récompense en Xp sera surtout allouée par les DMs; mais le fond de ma pensée, c'est que si le module marche bien, les groupes de plus de quatre personnes risquent de ne pas être rares. Notamment si plus de quatre joueurs aiment bien jouer ensemble...

Voilà, ce n'est que mon humble avis...

Il sera toujours temps de changer par la suite. De plus lorsqu'une battue est organisé, le chaos es tel que tu n'a pas le temps de te perfectionner et d'apprednre de nouvelles choses.
Revenir en haut Aller en bas
Gimli Oakenshield
L'ignorant en Hardware
Gimli Oakenshield


Nombre de messages : 783
Localisation : Près de mon ordi !
Date d'inscription : 15/12/2005

Partage de l'xp Empty
MessageSujet: Re: Partage de l'xp   Partage de l'xp EmptyMer 1 Fév - 17:39

Citation :
- un script capable de me donner les prochains numéros du tirage de la loterie nationale (effectué avec 7 jets sur un dé à 49 faces);
Okay alors ... euh ... Teste ... euh ... Non, j'sais pas faire ! HONTE SUR MOI !!!! ptdr

Citation :
- un script capable de faire arriver le livreur de pizzas dans les temps;
Ca c'est facile ! Soit c'est toi qui y vas ... la c'est dans les temps soit tu lui donne le double d'argent s'il arrive a l'heure !

Citation :
- un script capable d'éviter que mon chat ne saute sur mon clavier quand je suis connecté.
Je comprend monsieur, j'ai le même a la maison ! ^^ (Les inconnus)

Citation :
Il sera toujours temps de changer par la suite. De plus lorsqu'une battue est organisé, le chaos es tel que tu n'a pas le temps de te perfectionner et d'apprednre de nouvelles choses.
Bon, alors ça c'est fait ... Suivant ! ^^
Revenir en haut Aller en bas
Ethelbert
Génération spontanée
Ethelbert


Nombre de messages : 647
Localisation : Lyon
Date d'inscription : 11/01/2006

Partage de l'xp Empty
MessageSujet: Re: Partage de l'xp   Partage de l'xp EmptyJeu 2 Fév - 13:29

Ba'elzaden a écrit:
Citation :
Euh ça veut dire qu'au-delà de 4 personnes dans un groupe, il est moins rentable de pexer ? On va faire des brigades de mousquetaires, alors ?
Bon je sais que pexer n'est pas le but premier du module (heureusement d'ailleurs...), mais ne serait-il pas possible de faire stagter le niveau d'xp avant de le faire chuter ? Parce qu'en fait, je ne sais pas si la quête des Adams a été résolue par un grouep, mais j'avais envie à un moment ou à un autre de proposer une battue pour la résoudre. Donc on risquait d'être plus de 4 dans le groupe, à mon sens.
Je sais bien que si cette animation peut se faire, la récompense en Xp sera surtout allouée par les DMs; mais le fond de ma pensée, c'est que si le module marche bien, les groupes de plus de quatre personnes risquent de ne pas être rares. Notamment si plus de quatre joueurs aiment bien jouer ensemble...

Voilà, ce n'est que mon humble avis...

Il sera toujours temps de changer par la suite. De plus lorsqu'une battue est organisé, le chaos es tel que tu n'a pas le temps de te perfectionner et d'apprednre de nouvelles choses.

J'ai mis la main sur les trois mousquetaires d'Aelor ! Arrow Partage de l'xp 040801164247_9
Je précise qu'ils ont été formés par Eowaryn, la chorégraphie est une variante de la danse des épées...

Vous en voulez encore ?
Partage de l'xp 040801164209_73
Revenir en haut Aller en bas
krandeuf

krandeuf


Nombre de messages : 273
Age : 49
Localisation : Reims
Date d'inscription : 11/01/2006

Partage de l'xp Empty
MessageSujet: Re: Partage de l'xp   Partage de l'xp EmptyJeu 2 Fév - 21:33

Je voudrais juste signaler que le partage de l'exp est pas franchement au point....

On reçoit l'exp de façon bizarre.. ou par grappe ou pas d'exp seulement à celui qui tue le monstre au final ....

A revoir.... Question
Revenir en haut Aller en bas
Ba'elzaden
Maitre d'Aelor
Ba'elzaden


Nombre de messages : 909
Date d'inscription : 15/12/2005

Partage de l'xp Empty
MessageSujet: Re: Partage de l'xp   Partage de l'xp EmptyJeu 2 Fév - 21:45

IL y a un bug qui fait que celui qui tuait le monstre reçoit en double l'xp (que l'on corrige)
Revenir en haut Aller en bas
Ba'elzaden
Maitre d'Aelor
Ba'elzaden


Nombre de messages : 909
Date d'inscription : 15/12/2005

Partage de l'xp Empty
MessageSujet: Re: Partage de l'xp   Partage de l'xp EmptyVen 3 Fév - 0:47

J'ai suprimé la ligne 84 et le script semble encore avoir des problèmes:

Soit M, un personnage nommé melia
Soit E, un personnage nommé Eowaryn

M et E affrontent des orques.

Si M tue un orque alors E ne gagne pas d'xp. Si E tue un orque alors M ne gagne pas d'xp.

Si M ou E quitte la zone, les gains ne changent pas.

On en déduit que le script bug.
Revenir en haut Aller en bas
Contenu sponsorisé





Partage de l'xp Empty
MessageSujet: Re: Partage de l'xp   Partage de l'xp Empty

Revenir en haut Aller en bas
 
Partage de l'xp
Revenir en haut 
Page 1 sur 2Aller à la page : 1, 2  Suivant

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Aelor :: Archives :: Editeur :: Script-
Sauter vers: