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  
-28%
Le deal à ne pas rater :
-28% Machine à café avec broyeur à grain MELITTA Purista
229.99 € 318.99 €
Voir le deal

 

 Partage de l'xp

Aller en bas 
5 participants
Aller à la page : Précédent  1, 2
AuteurMessage
Furious Hedgehog
Génération spontanée
Furious Hedgehog


Nombre de messages : 217
Localisation : Anglet
Date d'inscription : 22/01/2006

Partage de l'xp - Page 2 Empty
MessageSujet: Re: Partage de l'xp   Partage de l'xp - Page 2 EmptyVen 3 Fév - 15:48

je dirais même plus, le nombre de fois ou l'xp donné a celui qui tue le monstre est multiplié correspond au nombre de membres dans le groupe :

tout seul, on gagne 1 fois l'xp
a 6 (familier compris), on gagne 6 fois l'xp
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 - Page 2 Empty
MessageSujet: Re: Partage de l'xp   Partage de l'xp - Page 2 EmptyVen 3 Fév - 19:14

Interressante la dernière remarque, je vais me pencher là dessus ...
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 - Page 2 Empty
MessageSujet: Re: Partage de l'xp   Partage de l'xp - Page 2 EmptyVen 3 Fév - 19:29

Remplacer la ligne 87 par celle-ci :

Code:
GiveXPToCreature(oMem,FloatToInt(nXPParJoueur));

Dsl, erreur de débutant ... :'(
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 - Page 2 Empty
MessageSujet: Re: Partage de l'xp   Partage de l'xp - Page 2 EmptyDim 5 Fév - 21:20

Désolé, je n'ai pas le temps de le tester alors vous serez les cobayes ^^
Ca devrait quand même être pas trop mal ...

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(int iNBPJ,float fLvlAverage)
{
    float BaseMonEXP = 25.0;
    float BonusEXP = 15.0;
    int nLvlMob = GetCharacterLevel(OBJECT_SELF);
    float fDifLvl = nLvlMob-fLvlAverage;
    int nXp;
    int NumOfParty = iNBPJ;
    //if(fDifLvl<0.0)
    //{
        //lvl mob + (xp du lvl/nb mob a tuer/diflvl+1
        ///////////////////////////////////////////////////////////////
        float AdjustValue = GetChallengeRating(OBJECT_SELF) / fLvlAverage;
        float FinalMonValue;
        if (AdjustValue == 0.0)
            {
            FinalMonValue = GetChallengeRating(OBJECT_SELF) * BaseMonEXP;
            }
        else
            {
            if (AdjustValue < 1.0)
                {
                FinalMonValue = BaseMonEXP * AdjustValue;
                }
            else
                {
                FinalMonValue = BaseMonEXP + (GetChallengeRating(OBJECT_SELF) - fLvlAverage) * BonusEXP;
                }
            }
    float SplitFinalEXP = FinalMonValue / NumOfParty;
    int SFEint = FloatToInt(SplitFinalEXP);
    nXp = SFEint;
        ///////////////////////////////////////////////////////////////
      // 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();
    int iNBPJ = GetNumberPartyMembersInArea(oKiller);

    // 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(iNBPJ,fLvlAverage);
        DistribXP(oKiller, nXP);
    }
    else
    {
        nXP = GetXPToDistrib(iNBPJ,IntToFloat(GetCharacterLevel(oKiller)));
        GiveXPToCreature(oKiller, nXP);
    }
    //Fin du systeme d'xp
    ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectResurrection(), OBJECT_SELF);
    ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(99999), OBJECT_SELF);
    // 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
Ba'elzaden
Maitre d'Aelor
Ba'elzaden


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

Partage de l'xp - Page 2 Empty
MessageSujet: Re: Partage de l'xp   Partage de l'xp - Page 2 EmptyLun 6 Fév - 21:31

Ca va pas du tout: les joueurs hors zone ne gagnet pas ça ça marche mais on gagne X*l'xp où X est le nombre total de pj du groupe qu'il soit dans la zone ou non.

Et l'xp de base est un peu bizarre (comme l'ancien)
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 - Page 2 Empty
MessageSujet: Re: Partage de l'xp   Partage de l'xp - Page 2 EmptyLun 6 Fév - 23:09

Okay, je modifie ça pour les joueurs hors zone ...
Revenir en haut Aller en bas
Contenu sponsorisé





Partage de l'xp - Page 2 Empty
MessageSujet: Re: Partage de l'xp   Partage de l'xp - Page 2 Empty

Revenir en haut Aller en bas
 
Partage de l'xp
Revenir en haut 
Page 2 sur 2Aller à la page : Précédent  1, 2

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