Furious Hedgehog Génération spontanée
Nombre de messages : 217 Localisation : Anglet Date d'inscription : 22/01/2006
| Sujet: Re: Partage de l'xp Ven 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 | |
|
Gimli Oakenshield L'ignorant en Hardware
Nombre de messages : 783 Localisation : Près de mon ordi ! Date d'inscription : 15/12/2005
| Sujet: Re: Partage de l'xp Ven 3 Fév - 19:14 | |
| Interressante la dernière remarque, je vais me pencher là dessus ... | |
|
Gimli Oakenshield L'ignorant en Hardware
Nombre de messages : 783 Localisation : Près de mon ordi ! Date d'inscription : 15/12/2005
| Sujet: Re: Partage de l'xp Ven 3 Fév - 19:29 | |
| Remplacer la ligne 87 par celle-ci : - Code:
-
GiveXPToCreature(oMem,FloatToInt(nXPParJoueur)); Dsl, erreur de débutant ... :'( | |
|
Gimli Oakenshield L'ignorant en Hardware
Nombre de messages : 783 Localisation : Près de mon ordi ! Date d'inscription : 15/12/2005
| Sujet: Re: Partage de l'xp Dim 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); } | |
|
Ba'elzaden Maitre d'Aelor
Nombre de messages : 909 Date d'inscription : 15/12/2005
| Sujet: Re: Partage de l'xp Lun 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) | |
|
Gimli Oakenshield L'ignorant en Hardware
Nombre de messages : 783 Localisation : Près de mon ordi ! Date d'inscription : 15/12/2005
| Sujet: Re: Partage de l'xp Lun 6 Fév - 23:09 | |
| Okay, je modifie ça pour les joueurs hors zone ... | |
|
Contenu sponsorisé
| Sujet: Re: Partage de l'xp | |
| |
|