Voila la fonction GetBAB(object oTarget) qui permet d'obtenir le BAB (bonus de base a l'attaque) de n'importe quelle creature selon son niveau. (selon les regles officielles D&D)
J'ai obtenu laplus grosse part de ce code grâce a Jasperre sur le forum de script de bioware mais je lui ai enlevé les parties qui ne me servaient pas (il calculait directement tous les bonus en fonction des feats, de l'arme portée etc, je ne voulait que le BAB).
Et c'est grâce a lui que le code s'adapte pour toutes les creatures car il tient compte des "classes" de monstres.
//: GetBAB function
//: Original code from Jasperre
//: Modified By: Dolanor
// Returns an EXTIMATED, TOP BAB - IE, what thier primary attack will hit at.
// Returns the Attack Bonus - what thier primary attack *probably* hits at.
int GetBAB(object oTarget)
{
int nBAB1 = GetLevelByClass(CLASS_TYPE_RANGER, oTarget)
+ GetLevelByClass(CLASS_TYPE_FIGHTER, oTarget)
+ GetLevelByClass(CLASS_TYPE_PALADIN, oTarget)
+ GetLevelByClass(CLASS_TYPE_BARBARIAN, oTarget)
+ GetLevelByClass(CLASS_TYPE_DRAGON, oTarget)
+ GetLevelByClass(CLASS_TYPE_OUTSIDER, oTarget)
+ GetLevelByClass(CLASS_TYPE_MONSTROUS, oTarget);
int nBAB2 = GetLevelByClass(CLASS_TYPE_ABERRATION, oTarget)
+ GetLevelByClass(CLASS_TYPE_ANIMAL, oTarget)
+ GetLevelByClass(CLASS_TYPE_BARD, oTarget)
+ GetLevelByClass(CLASS_TYPE_BEAST, oTarget)
+ GetLevelByClass(CLASS_TYPE_CLERIC, oTarget)
+ GetLevelByClass(CLASS_TYPE_CONSTRUCT, oTarget)
+ GetLevelByClass(CLASS_TYPE_DRUID, oTarget)
+ GetLevelByClass(CLASS_TYPE_ELEMENTAL, oTarget)
+ GetLevelByClass(CLASS_TYPE_GIANT, oTarget)
+ GetLevelByClass(CLASS_TYPE_HUMANOID, oTarget)
+ GetLevelByClass(CLASS_TYPE_MAGICAL_BEAST, oTarget)
+ GetLevelByClass(CLASS_TYPE_MONK, oTarget)
+ GetLevelByClass(CLASS_TYPE_ROGUE, oTarget)
+ GetLevelByClass(CLASS_TYPE_SHAPECHANGER, oTarget)
+ GetLevelByClass(CLASS_TYPE_VERMIN, oTarget);
int nBAB3 = GetLevelByClass(CLASS_TYPE_COMMONER, oTarget)
+ GetLevelByClass(CLASS_TYPE_FEY, oTarget)
+ GetLevelByClass(CLASS_TYPE_UNDEAD, oTarget)
+ GetLevelByClass(CLASS_TYPE_SORCERER, oTarget)
+ GetLevelByClass(CLASS_TYPE_WIZARD, oTarget);
int nBAB = nBAB1 + (nBAB2 * 3 / 4) + (nBAB3 / 2);
return nBAB;
}
Voila ma deuxieme Fonction : GetBABByClass(object oTarget, int nTypeClass)
Elle permet d'obtenir le BAB d'une classe particuliere pour une creature (si la personne ne possede pas cette classe, le renvoyé BAB sera de 0)
(et celle ci je l'ai faite seule, pas qu'on pense que je sois une pure merde...Quoi c pas difficile ce code ?? j'vous merde, na
)
int GetBABByClass(object oTarget, int nTypeClass)
{
int nBAB = GetLevelByClass(nTypeClass, oTarget);
int ndivisor = 1;
switch(nTypeClass)
{
//Classes guerrieres
case CLASS_TYPE_RANGER:
break;
case CLASS_TYPE_FIGHTER:
break;
case CLASS_TYPE_PALADIN:
break;
case CLASS_TYPE_BARBARIAN:
break;
case CLASS_TYPE_DRAGON:
break;
case CLASS_TYPE_OUTSIDER:
break;
case CLASS_TYPE_MONSTROUS:
break;
//Classes divines
case CLASS_TYPE_ABERRATION:
nBAB = (nBAB * 3/4);
break;
case CLASS_TYPE_ANIMAL:
nBAB = (nBAB * 3/4);
break;
case CLASS_TYPE_BARD:
nBAB = (nBAB * 3/4);
break;
case CLASS_TYPE_BEAST:
nBAB = (nBAB * 3/4);
break;
case CLASS_TYPE_CLERIC:
nBAB = (nBAB * 3/4);
break;
case CLASS_TYPE_CONSTRUCT:
nBAB = (nBAB * 3/4);
break;
case CLASS_TYPE_DRUID:
nBAB = (nBAB * 3/4);
break;
case CLASS_TYPE_ELEMENTAL:
nBAB = (nBAB * 3/4);
break;
case CLASS_TYPE_GIANT:
nBAB = (nBAB * 3/4);
break;
case CLASS_TYPE_HUMANOID:
nBAB = (nBAB * 3/4);
break;
case CLASS_TYPE_MAGICAL_BEAST:
break;
case CLASS_TYPE_MONK:
nBAB = (nBAB * 3/4);
break;
case CLASS_TYPE_ROGUE:
nBAB = (nBAB * 3/4);
break;
case CLASS_TYPE_SHAPECHANGER:
nBAB = (nBAB * 3/4);
break;
case CLASS_TYPE_VERMIN:
nBAB = (nBAB * 3/4);
break;
//Classe magique profanes
case CLASS_TYPE_COMMONER:
nBAB = (nBAB / 2);
break;
case CLASS_TYPE_FEY:
nBAB = (nBAB / 2);
break;
case CLASS_TYPE_UNDEAD:
nBAB = (nBAB / 2);
break;
case CLASS_TYPE_SORCERER:
nBAB = (nBAB / 2);
break;
case CLASS_TYPE_WIZARD:
nBAB = (nBAB / 2);
break;
}
return nBAB;
}
Cela peut servir pour plein de chose, mais plus specialement pour le projet de sorts, car la 1ere fonction permet de gerer le jet de contact a distance necessaire pour les attaques de rayon ou autre fleche acide.