Répartition d'XP sur un monstre tué

Répondre
Partager Rechercher
Il faut utiliser la balise PHP .
Code PHP:

//blabla
blabla 
Si tu ne vois vraiment pas, "Cite" mon message ou celui d'un des autres posteurs.
Un dernier truc, dans ton nouveau code, as-tu geré le problême du familier et des invocations? Elles ne sont pas considérées comme un pj, et donc pour le script, c'est un monstre qui tue un autre monstre, et aucun calcul d'xp n'est effectué.
Le fichier de l'event OnDeath des créatures du module:

Code PHP:

//Vous pouvez changer la valeur de nBaseXP selon votre echelle; 100=DMG.
int nBaseXP 15;
//Bonus d'XP a partager entre les membres conscients du groupe se trouvant dans la meme Zone
int nBonusXPGroupe 5;
//Bonus d'XP pour celui qui acheve la creature
int nBonusXPTueur 1;
//Bonus de Rarete: nombre de creatures tuees avant que le Bonus = 0
int nBonusXPRarete 10;
//Changement de la Reputation de base lors d'un meurtre
int nReput = -5;
// Variables commune a toutes les fonctions, ne pas supprimer cette ligne
float fCR GetLocalFloat(OBJECT_SELF"CR");

//Fonction d'xp du PJ achevant le monstre
void XPTueur(object oKillerint nBonusXPTueur)
{
 
string sLeech GetLocalString(OBJECT_SELF"TagLeech");
 
float fXP;
 if(
sLeech == "")
 {
  
string sMonine "Votre attaque est si violente que votre adversaire est littéralement pulvérisé.";
  
FloatingTextStringOnCreature(sMonineoKillerFALSE);
  
fXP fCR nBonusXPTueur;
 }
 else
 {
  
int nMaxHP GetLocalInt(OBJECT_SELF"TotalLeech");
  
int nLeech GetLocalInt(oKillersLeech);
  
float fMaxHP IntToFloat(nMaxHP);
  
float fLeech IntToFloat(nLeech);
  
float fDmg fLeech fMaxHP;
  
fXP = (fCR fDmg)* nBonusXPTueur;
 }
 
int nXP FloatToInt(fXP);
 if(
GetIsPJ(oKiller))
 {
  
SendMessageToPC(oKiller"Vous gagnez " IntToString(nXP) + " points d'expérience de Bonus.");
  
GiveXPToCreature(oKillernXP);
 }
}


//Fonction d'xp des autres PJ faisant partie du groupe du PJ ayant acheve le monstre
void XPParty(object oKillerobject oAreaint nBonusXPGroupe)
{
     
int nMembres 0;
     
object oMembreGroupe GetFirstFactionMember(oKillerTRUE);
     while (
GetIsObjectValid(oMembreGroupe) == TRUE)
     {
      
object oAreaGroupe GetArea(oMembreGroupe);
      if(
GetIsPC(oMembreGroupe) == TRUE && !GetIsDM(oMembreGroupe) && oArea == oAreaGroupe)
      {
       
nMembres nMembres 1;
      }
      
oMembreGroupe GetNextFactionMember(oKillerTRUE);
     }
     
float fCompteur IntToFloat(nMembres);
     
//Bonus d'xp accorde aux PJ jouant en groupe.
     //Si vous ne voulez pas favoriser cela, mettez cette ligne:
     //float fMultiplier = 1.0;
     
float fMultiplier = (1.0 + ((0.1 fCompteur) - 0.1));
     
float fXP = ((fCR fMultiplier) / fCompteur);
     
int nMaxHP GetLocalInt(OBJECT_SELF"TotalLeech");
     
string sLeech GetLocalString(OBJECT_SELF"TagLeech");
     while (
GetIsObjectValid(oMembreGroupe) == TRUE)
     {
      
object oAreaGroupe GetArea(oMembreGroupe);
      if(
GetIsPJ(oMembreGroupe) && oArea == oAreaGroupe && GetCurrentHitPoints(oMembreGroupe) > 0)
      {
       
int nLeech GetLocalInt(oMembreGroupesLeech);
       if(
sLeech == "")
       {
        
nMaxHP GetMaxHitPoints(OBJECT_SELF);
        
nLeech nMaxHP;
       }
       
float fMaxHP IntToFloat(nMaxHP);
       
float fLeech IntToFloat(nLeech);
       
float fDmg fLeech fMaxHP;
       
float fXPReel = (fXP fDmg)* nBonusXPGroupe;
       
int nXP FloatToInt(fXPReel);
       
SendMessageToPC(oMembreGroupe"Vous gagnez " IntToString(nXP) + " points d'expérience de Bonus de Groupe.");
       
GiveXPToCreature(oMembreGroupenXP);
      }
      
oMembreGroupe GetNextFactionMember(oKillerTRUE);
     }
}


//Fonction d'xp des autres PJ ayant touche le monstre
void XPBinote(object oAreaint nBaseXPint nXPRarete)
{
    
string sLeech GetLocalString(OBJECT_SELF"TagLeech");
    if(
sLeech == "")
    {
     return;
    }
    else
    {
     
object oLeecheur GetFirstPC();
     
int nMaxHP GetLocalInt(OBJECT_SELF"TotalLeech");
     
float fMaxHP IntToFloat(nMaxHP);
     while (
GetIsObjectValid(oLeecheur) == TRUE)
     {
      
object oAreaLeech GetArea(oLeecheur);
      if(
oArea == oAreaLeech && GetCurrentHitPoints(oLeecheur) > 0)
      {
       
int nLeech GetLocalInt(oLeecheursLeech);
       
float fLeech IntToFloat(nLeech);
       
float fDmg fLeech fMaxHP;
       
//Edit Diff CR
       
float fCRPJ IntToFloat(GetHitDice(oLeecheur));
       if(
fCRPJ <=1.0fCRPJ =1.0;
       
float fXPReel = (((fCR*2)/fCRPJ) * fDmg)* IntToFloat(nBaseXP);
       
int nXPLeech FloatToInt(fXPReel);
       
int nXP nXPLeech nXPRarete;
       if(((
fCRPJ+1) - (fCR+1)) > (fCRPJ/2))
       {
        
nXP 0;
        
nXPRarete 0;
        
SendMessageToPC(oLeecheur"Votre adversaire ne fait vraiment pas le poids, cela ne vous enseigne rien!");
       }
       if(
GetIsPJ(oLeecheur))
       {
        
SendMessageToPC(oLeecheur"Vous gagnez " IntToString(nXP) + " XP, dont " IntToString(nXPRarete) + " XP de Bonus de Rareté.");
        
GiveXPToCreature(oLeecheurnXP);
       }
       
DeleteLocalInt(oLeecheursLeech);
      }
      
oLeecheur GetNextPC();
     }
    }
}

//Tableau de Chasse du Joueur
int GetKillBoard(object oKillerstring sNom)
{
    
//int nKills = GetLocalInt(oBD, sNom);
    //La ligne suivante est a utiliser avec la BD Bioware
    
int nKills GetCampaignInt(GetName(oKiller), sNom);
    
nKills += 1;

    
//SetLocalInt(oBD, sNom, nKills);
    //La ligne suivante est a utiliser avec la BD Bioware
    
SetCampaignInt(GetName(oKiller), sNomnKills);
    return 
nKills;
}

//Bonus XP de Rarete
int GetXPRarete(int nBonusXPRareteint nKills)
{
    
float fBonusXPRarete IntToFloat(nBonusXPRarete);
    
float fKills IntToFloat(nKills);
    
float fXP fCR * (fBonusXPRarete/fKills);
    
int nXP FloatToInt(fXP);
    return 
nXP;
}

//Ajustement de la Faction lors d'un meurtre
void AdjustFaction (object oKillerint nReput)
{
    
object oLeader GetFactionLeader(OBJECT_SELF);
    
object oGrosBill GetFactionStrongestMember(OBJECT_SELF);
    
string sFaction GetName(oLeader);
    if(
oLeader == OBJECT_SELF)
    {
     
nReput nReput 20;
    }
    else if(
oGrosBill == OBJECT_SELF)
    {
     
nReput nReput 10;
    }
    
SendMessageToPC(oKiller"Votre réputation vis-a-vis de la faction de " sFaction " s'est déteriorée!");
    
AdjustReputation(oKillerOBJECT_SELFnReput);
}

// Fin Binote XP
void main()
{
   
int nClass GetLevelByClass(CLASS_TYPE_COMMONER);
   
int nAlign GetAlignmentGoodEvil(OBJECT_SELF);
   
object oKiller GetLastKiller();
   
object oArea GetArea(OBJECT_SELF);
   
string sArea GetTag(oArea);
   
string sNom GetName(OBJECT_SELF);
   
string sKiller GetName(oKiller);

   while(
GetIsObjectValid(GetMaster(oKiller)))
   {
    
oKiller=GetMaster(oKiller);
   }
   if(
nClass && (nAlign == ALIGNMENT_GOOD || nAlign == ALIGNMENT_NEUTRAL))
   {
    
AdjustAlignment(oKillerALIGNMENT_EVIL5);
   }
   if(
bMessageDM)
   {
    
SendMessageToAllDMs(sNom " vient d'etre tué par " sKiller " dans " sArea);
    
WriteTimestampedLogEntry(sNom " vient d'etre tué par " sKiller " dans " sArea);
   }
   
SpeakString("NW_I_AM_DEAD"TALKVOLUME_SILENT_TALK);
   
SpeakString("NW_ATTACK_MY_TARGET"TALKVOLUME_SILENT_TALK);
   if(
GetSpawnInCondition(NW_FLAG_DEATH_EVENT))
   {
        
SignalEvent(OBJECT_SELFEventUserDefined(1007));
   }
   if (
GetIsObjectValid(GetMaster(OBJECT_SELF)))
    {
        
object oMaster GetMaster(OBJECT_SELF);
        
object oAssociate GetAssociate(ASSOCIATE_TYPE_SUMMONEDoMaster);
        if (
oAssociate == OBJECT_SELF)
            return;
        
oAssociate GetAssociate(ASSOCIATE_TYPE_FAMILIARoMaster);
        if (
oAssociate == OBJECT_SELF)
            return;
        
oAssociate GetAssociate(ASSOCIATE_TYPE_DOMINATEDoMaster);
        if (
oAssociate == OBJECT_SELF)
           return;
        
oAssociate GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANIONoMaster);
        if (
oAssociate == OBJECT_SELF)
            
GiveXPToCreature(oMaster, (-50*GetHitDice(oMaster)));
            
AdjustAlignment(oKillerALIGNMENT_EVIL5);
            return;
    }
    
//XP Binote
    
int nXPRarete 1;
    if(
GetIsPJ(oKiller))
    {
     
//Resultat du Tableau de Chasse
     
int nKillBoard GetKillBoard(oKillersTag);
     
string sKills IntToString(nKillBoard);
     
SendMessageToPC(oKiller"Vous venez de tuer " sNom "; ceci est votre " sKills "e !");
     
//Bonus XP Rarete
     
nXPRarete GetXPRarete(nBonusXPRaretenKillBoard);

     
//Bonus XP Tueur, Mettez // devant la ligne si vous ne voulez pas utiliser cette option.
     
XPTueur(oKillernBonusXPTueur);
     
//XP (mettez bien l'echelle d'xp sur 0 dans les proprietes du module)
     
XPBinote(oAreanBaseXPnXPRarete);
     
//Bonus XP Groupe, Mettez // devant la ligne si vous ne voulez pas utiliser cette option.
     
XPParty(oKilleroAreanBonusXPGroupe);
     
//Ajustement de la Faction
     
AdjustFaction (oKillernReput);
     
//Effacement des variables locales du monstre
    
}
    
DeleteLocalInt(OBJECT_SELF"TotalLeech");
    
DeleteLocalInt(OBJECT_SELF"Coup");
    
DeleteLocalString(OBJECT_SELF"TagLeech");

L'event OnDamaged je ne pense l'avoir modifié, mais le script a tellement changé depuis (énormément d'ajouts spécifiques à mon système de scripts), qu'il faudrait que je vérifie ligne par ligne.
Code PHP:

//Vous pouvez changer la valeur de nBaseXP selon votre echelle; 100=DMG.
  
int nBaseXP 15;
  
//Bonus d'XP a partager entre les membres conscients du groupe se trouvant dans la meme Zone
  
int nBonusXPGroupe 5;
  
//Bonus d'XP pour celui qui acheve la creature
  
int nBonusXPTueur 1;
  
//Bonus de Rarete: nombre de creatures tuees avant que le Bonus = 0
  
int nBonusXPRarete 10;
  
//Changement de la Reputation de base lors d'un meurtre
  
int nReput = -5;
  
// Variables commune a toutes les fonctions, ne pas supprimer cette ligne
  
float fCR GetLocalFloat(OBJECT_SELF"CR");
  
  
#include "NW_I0_GENERIC"
  
  //Fonction d'xp du PJ achevant le monstre
  
void XPTueur(object oKillerint nBonusXPTueur)
  {
  
string sLeech GetLocalString(OBJECT_SELF"TagLeech");
  
float fXP;
  if(
sLeech == "")
  {
    
string sMonine "Votre attaque est si violente que votre adversaire est littéralement pulvérisé.";
    
FloatingTextStringOnCreature(sMonineoKillerFALSE);
    
fXP fCR nBonusXPTueur;
  }
  else
  {
    
int nMaxHP GetLocalInt(OBJECT_SELF"TotalLeech");
    
int nLeech GetLocalInt(oKillersLeech);
    
float fMaxHP IntToFloat(nMaxHP);
    
float fLeech IntToFloat(nLeech);
    
float fDmg fLeech fMaxHP;
    
fXP = (fCR fDmg)* nBonusXPTueur;
  }
  
int nXP FloatToInt(fXP);
  if(
nXP 20)
  {
    
nXP 20;
  }
  if(
GetIsPC(oKiller))
  {
    
SendMessageToPC(oKiller"Vous gagnez " IntToString(nXP) + " points d'expérience de Bonus.");
    
GiveXPToCreature(oKillernXP);
  }
  }
  
  
  
//Fonction d'xp des autres PJ faisant partie du groupe du PJ ayant acheve le monstre
  
void XPParty(object oKillerobject oAreaint nBonusXPGroupe)
  {
       
int nMembres 0;
       
object oMembreGroupe GetFirstFactionMember(oKillerTRUE);
       while (
GetIsObjectValid(oMembreGroupe) == TRUE)
       {
        
object oAreaGroupe GetArea(oMembreGroupe);
        if(
GetIsPC(oMembreGroupe) == TRUE && !GetIsDM(oMembreGroupe) && oArea == oAreaGroupe)
        {
         
nMembres nMembres 1;
        }
        
oMembreGroupe GetNextFactionMember(oKillerTRUE);
       }
       
float fCompteur IntToFloat(nMembres);
       
//Bonus d'xp accorde aux PJ jouant en groupe.
       //Si vous ne voulez pas favoriser cela, mettez cette ligne:
       //float fMultiplier = 1.0;
       
float fMultiplier = (1.0 + ((0.1 fCompteur) - 0.1));
       
float fXP = ((fCR fMultiplier) / fCompteur);
       
int nMaxHP GetLocalInt(OBJECT_SELF"TotalLeech");
       
string sLeech GetLocalString(OBJECT_SELF"TagLeech");
       while (
GetIsObjectValid(oMembreGroupe) == TRUE)
       {
        
object oAreaGroupe GetArea(oMembreGroupe);
      
//if(GetIsPJ(oMembreGroupe) && oArea == oAreaGroupe && GetCurrentHitPoints(oMembreGroupe) > 0)
        
if(oArea == oAreaGroupe && GetCurrentHitPoints(oMembreGroupe) > 0)
        {
         
int nLeech GetLocalInt(oMembreGroupesLeech);
         if(
sLeech == "")
         {
          
nMaxHP GetMaxHitPoints(OBJECT_SELF);
          
nLeech nMaxHP;
         }
         
float fMaxHP IntToFloat(nMaxHP);
         
float fLeech IntToFloat(nLeech);
         
float fDmg fLeech fMaxHP;
         
float fXPReel = (fXP fDmg)* nBonusXPGroupe;
         
int nXP FloatToInt(fXPReel);
      
SendMessageToPC(oMembreGroupe"Vous gagnez " IntToString(nXP) + " points d'expérience de Bonus de Groupe.");
         
GiveXPToCreature(oMembreGroupenXP);
        }
        
oMembreGroupe GetNextFactionMember(oKillerTRUE);
       }
  }
  
  
  
//Fonction d'xp des autres PJ ayant touche le monstre
  
void XPBinote(object oAreaint nBaseXPint nXPRarete)
  {
      
string sLeech GetLocalString(OBJECT_SELF"TagLeech");
      if(
sLeech == "")
      {
       return;
      }
      else
      {
       
object oLeecheur GetFirstPC();
       
int nMaxHP GetLocalInt(OBJECT_SELF"TotalLeech");
       
float fMaxHP IntToFloat(nMaxHP);
       while (
GetIsObjectValid(oLeecheur) == TRUE)
       {
        
object oAreaLeech GetArea(oLeecheur);
        if(
oArea == oAreaLeech && GetCurrentHitPoints(oLeecheur) > 0)
        {
         
int nLeech GetLocalInt(oLeecheursLeech);
         
float fLeech IntToFloat(nLeech);
         
float fDmg fLeech fMaxHP;
         
//Edit Diff CR
         //float fCRPJ = IntToFloat(GetHitDice(oLeecheur));
         //if(fCRPJ <=1.0) fCRPJ =1.0;
         //float fXPReel = (((fCR*2)/fCRPJ) * fDmg)* IntToFloat(nBaseXP);
         
float fXPReel fDmg IntToFloat(nBaseXP);
         
int nXPLeech FloatToInt(fXPReel);
         
int nXP nXPLeech nXPRarete;
         
//if(((fCRPJ+1) - (fCR+1)) > (fCRPJ/2))
         //{
         // nXP = 0;
         // nXPRarete = 0;
      // SendMessageToPC(oLeecheur, "Votre adversaire ne fait vraiment pas le poids, cela ne vous enseigne rien!");
         //}
         
if (nXP 20)
         {
          
nXP 20;
         }
         if(
GetIsPC(oLeecheur))
         {
         
SendMessageToPC(oLeecheur"Vous gagnez " IntToString(nXP) + " XP, dont " IntToString(nXPRarete) + " XP de Bonus de Rareté.");
          
GiveXPToCreature(oLeecheurnXP);
         }
         
DeleteLocalInt(oLeecheursLeech);
        }
        
oLeecheur GetNextPC();
       }
      }
  }
  
  
//Tableau de Chasse du Joueur
  
int GetKillBoard(object oKillerstring sNom)
  {
      
//int nKills = GetLocalInt(oBD, sNom);
      //La ligne suivante est a utiliser avec la BD Bioware
      
int nKills GetCampaignInt(GetName(oKiller), sNom);
      
nKills += 1;
  
      
//SetLocalInt(oBD, sNom, nKills);
      //La ligne suivante est a utiliser avec la BD Bioware
      
SetCampaignInt(GetName(oKiller), sNomnKills);
      return 
nKills;
  }
  
  
//Bonus XP de Rarete
  
int GetXPRarete(int nBonusXPRareteint nKills)
  {
      
float fBonusXPRarete IntToFloat(nBonusXPRarete);
      
float fKills IntToFloat(nKills);
      
float fXP fCR * (fBonusXPRarete/fKills);
      
int nXP FloatToInt(fXP);
      return 
nXP;
  }
  
  
//Ajustement de la Faction lors d'un meurtre
  
void AdjustFaction (object oKillerint nReput)
  {
      
object oLeader GetFactionLeader(OBJECT_SELF);
      
object oGrosBill GetFactionStrongestMember(OBJECT_SELF);
      
string sFaction GetName(oLeader);
      if(
oLeader == OBJECT_SELF)
      {
       
nReput nReput 20;
      }
      else if(
oGrosBill == OBJECT_SELF)
      {
       
nReput nReput 10;
      }
     
SendMessageToPC(oKiller"Votre réputation vis-a-vis de la faction de " sFaction " s'est déteriorée!");
      
AdjustReputation(oKillerOBJECT_SELFnReput);
  }
  
  
// Fin Binote XP
  
void main()
  {
     
int nClass GetLevelByClass(CLASS_TYPE_COMMONER);
     
int nAlign GetAlignmentGoodEvil(OBJECT_SELF);
     
object oKiller GetLastKiller();
     
object oArea GetArea(OBJECT_SELF);
     
string sArea GetTag(oArea);
     
string sNom GetName(OBJECT_SELF);
     
string sKiller GetName(oKiller);
  
     while(
GetIsObjectValid(GetMaster(oKiller)))
     {
      
oKiller=GetMaster(oKiller);
     }
     
//if(nClass > 0 && (nAlign == ALIGNMENT_GOOD || nAlign == ALIGNMENT_NEUTRAL))
     //{
     // AdjustAlignment(oKiller, ALIGNMENT_EVIL, 5);
     //}
     //if(bMessageDM)
     //{
     // SendMessageToAllDMs(sNom + " vient d'etre tué par " + sKiller + " dans " + sArea);
     // WriteTimestampedLogEntry(sNom + " vient d'etre tué par " + sKiller + " dans " + sArea);
     //}
     
SpeakString("NW_I_AM_DEAD"TALKVOLUME_SILENT_TALK);
     
SpeakString("NW_ATTACK_MY_TARGET"TALKVOLUME_SILENT_TALK);
     if(
GetSpawnInCondition(NW_FLAG_DEATH_EVENT))
     {
          
SignalEvent(OBJECT_SELFEventUserDefined(1007));
     }
     if (
GetIsObjectValid(GetMaster(OBJECT_SELF)))
      {
          
object oMaster GetMaster(OBJECT_SELF);
          
object oAssociate GetAssociate(ASSOCIATE_TYPE_SUMMONEDoMaster);
          if (
oAssociate == OBJECT_SELF)
              return;
          
oAssociate GetAssociate(ASSOCIATE_TYPE_FAMILIARoMaster);
          if (
oAssociate == OBJECT_SELF)
              return;
          
oAssociate GetAssociate(ASSOCIATE_TYPE_DOMINATEDoMaster);
          if (
oAssociate == OBJECT_SELF)
             return;
          
oAssociate GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANIONoMaster);
          if (
oAssociate == OBJECT_SELF)
              
GiveXPToCreature(oMaster, (-50*GetHitDice(oMaster)));
              
//AdjustAlignment(oKiller, ALIGNMENT_EVIL, 5);
              
return;
      }
      
//XP Binote
      
int nXPRarete 0;
      if(
GetIsPC(oKiller))
      {
       
//Resultat du Tableau de Chasse
       //int nKillBoard = GetKillBoard(oKiller, sNom);
       //string sKills = IntToString(nKillBoard);
       //SendMessageToPC(oKiller, "Vous venez de tuer " + sNom + "; ceci est votre " + sKills + "e !");
       //Bonus XP Rarete
       //nXPRarete = GetXPRarete(nBonusXPRarete, nKillBoard);
       //Bonus XP Tueur, Mettez // devant la ligne si vous ne voulez pas utiliser cette option.
       
XPTueur(oKillernBonusXPTueur);
       
//XP (mettez bien l'echelle d'xp sur 0 dans les proprietes du module)
       
XPBinote(oAreanBaseXPnXPRarete);
       
//Bonus XP Groupe, Mettez // devant la ligne si vous ne voulez pas utiliser cette option.
       
XPParty(oKilleroAreanBonusXPGroupe);
       
//Ajustement de la Faction
       //AdjustFaction (oKiller, nReput);
       //Effacement des variables locales du monstre
      
}
      
DeleteLocalInt(OBJECT_SELF"TotalLeech");
      
DeleteLocalInt(OBJECT_SELF"Coup");
      
DeleteLocalString(OBJECT_SELF"TagLeech");
  } 
Voila le "corrigé" que je vais utiliser dès le prochain reboot de mon serveur ^^
Tu avais en effet quelques fautes ( GetIsPJ() a la place de GetIsPC(), et aussi tu appelais dans le "GetKillBoard(oKiller, sNom);" sTag à la place de sNom.

Merci de ta mise à jour ^^
Citation :
Tu avais en effet quelques fautes ( GetIsPJ() a la place de GetIsPC(), et aussi tu appelais dans le "GetKillBoard(oKiller, sNom);" sTag à la place de sNom.
Ce n'est pas des erreurs, c'est juste que j'utilise mes propres fonctions plutôt que celles de Bioware, et quand je mets un script ici, il faut que je réadapte le tout pour monsieur tout le monde, et forcément, sans compilateur, il reste parfois des oublis.

Le GetIsPJ() est en fait une fonction booléenne qui renvoit TRUE quand cette condition est vérifiée:

Code PHP:

if(GetIsPC(oPC) && !GetIsDM(oPC) && !GetIsDMPossessed(oPC)) 


Ce qui va au-delà de la fonction Bioware, car un "PC" peut être également un personnage DM ou une créature possédée par un DM (qui entrainera une erreur de division par 0 et qui comptera comme "membre du groupe" dans la fonction d'xp de groupe).
Oki, merci, je mettrai à jour ^^

un grand merci pour ton aide


edit : concernant la fonction XPparty(), il y a un oubli lors de la réinitialisation de la boucle, lorsque le second while tourne, il arrive directement a un objet invalide. Il suffit de rajouter cette ligne juste avant la seconde boucle pour la réinitialiser :

Code PHP:

oMembreGroupe GetFirstFactionMember(oKillerTRUE); 

Juste une petite question :
Pourquoi n'as tu pas stocké toutes les variables sur le monstre attaqué plutôt que sur le joueur ?

En stockant sur le joueur tu as donc eu besoin de générer un nom basé sur l'aléatoire alors que si tu avais stocké sur le monstre, tu n'aurais eu qu'à te baser sur le nom ou le compte du joueur...

En tout vas bravo pour ce script très intéressant et bien meilleur que celui de Bioware.
Les variables sont stockées sur le monstre. Si j'ai du avoir recours à une variable générique, c'est du au fait que les monstres identiques sont justement... identiques (le nom, le tag, le resref, etc...) et qu'il fallait bien trouver un moyen de les identifier dans un combat de mêlée, afin de conserver l'état de dommages individuels de chaque monstre identique, vis à vis de chaque PJ
Salut tout le monde et bravo pour ce fantastique travail !

Je souhaitais poser une question : est-il possible de disposer de la dernière version de ce script avec les commandes non personnalisées ou dois-je le faire moi-même ?
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés