90 lines
3.5 KiB
Plaintext
90 lines
3.5 KiB
Plaintext
#include "prc_x2_itemprop"
|
|
#include "inc_acp"
|
|
#include "prc_ipfeat_const"
|
|
|
|
void main()
|
|
{
|
|
object oPC = OBJECT_SELF;
|
|
if(!GetHasFeat(FEAT_ACP_FEAT)
|
|
&& GetPRCSwitch(PRC_ACP_MANUAL))
|
|
{
|
|
IPSafeAddItemProperty(GetPCSkin(OBJECT_SELF), PRCItemPropertyBonusFeat(IP_CONST_ACP_FEAT), 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
|
|
return;
|
|
}
|
|
else if(((GetPRCSwitch(PRC_ACP_AUTOMATIC) && GetIsPC(OBJECT_SELF))
|
|
||(GetPRCSwitch(PRC_ACP_NPC_AUTOMATIC) && !GetIsPC(OBJECT_SELF))
|
|
||(GetLocalInt(OBJECT_SELF, PRC_ACP_NPC_AUTOMATIC) && !GetIsPC(OBJECT_SELF)))
|
|
&& !GetLocalInt(OBJECT_SELF, sLock))
|
|
{
|
|
int nKensaiScore,
|
|
nAssassinScore,
|
|
nBarbarianScore,
|
|
nFencingScore;
|
|
|
|
object oOffhand = GetItemInSlot(INVENTORY_SLOT_LEFTHAND);
|
|
object oOnhand = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND);
|
|
|
|
if(GetBaseItemType(oOffhand) != BASE_ITEM_TOWERSHIELD
|
|
&& GetBaseItemType(oOffhand) != BASE_ITEM_LARGESHIELD)
|
|
{
|
|
nKensaiScore += GetLevelByClass(CLASS_TYPE_SAMURAI);
|
|
nKensaiScore += GetLevelByClass(CLASS_TYPE_CW_SAMURAI);
|
|
nKensaiScore += GetLevelByClass(CLASS_TYPE_MONK);
|
|
nKensaiScore += GetLevelByClass(CLASS_TYPE_IAIJUTSU_MASTER);
|
|
nKensaiScore += GetLevelByClass(CLASS_TYPE_SHOU);
|
|
|
|
nAssassinScore += GetLevelByClass(CLASS_TYPE_ASSASSIN);
|
|
nAssassinScore += GetLevelByClass(CLASS_TYPE_SHADOWDANCER);
|
|
nAssassinScore += GetLevelByClass(CLASS_TYPE_NINJA_SPY);
|
|
nAssassinScore += GetLevelByClass(CLASS_TYPE_NIGHTSHADE);
|
|
nAssassinScore += GetLevelByClass(CLASS_TYPE_BFZ);
|
|
nAssassinScore += GetLevelByClass(CLASS_TYPE_SHADOWLORD);
|
|
|
|
nFencingScore += GetLevelByClass(CLASS_TYPE_BARD);
|
|
nFencingScore += GetLevelByClass(CLASS_TYPE_ARCANE_DUELIST);
|
|
nFencingScore += GetLevelByClass(CLASS_TYPE_BLADESINGER);
|
|
nFencingScore += GetLevelByClass(CLASS_TYPE_TEMPEST);
|
|
if(GetAbilityScore(OBJECT_SELF, ABILITY_DEXTERITY)>20)
|
|
nFencingScore += (GetAbilityScore(OBJECT_SELF, ABILITY_DEXTERITY)-10)/2;
|
|
}
|
|
|
|
nBarbarianScore += GetLevelByClass(CLASS_TYPE_BARBARIAN);
|
|
nBarbarianScore += GetLevelByClass(CLASS_TYPE_PRC_EYE_OF_GRUUMSH);
|
|
nBarbarianScore += GetLevelByClass(CLASS_TYPE_ORC_WARLORD);
|
|
nBarbarianScore += GetLevelByClass(CLASS_TYPE_FRE_BERSERKER);
|
|
nBarbarianScore += GetLevelByClass(CLASS_TYPE_BATTLERAGER);
|
|
nBarbarianScore += GetLevelByClass(CLASS_TYPE_RUNESCARRED);
|
|
if(GetAbilityScore(OBJECT_SELF, ABILITY_STRENGTH) > 20)
|
|
nBarbarianScore += (GetAbilityScore(OBJECT_SELF, ABILITY_STRENGTH)-10)/2;
|
|
|
|
int nAutoPhenotype = PHENOTYPE_NORMAL;
|
|
int nBestScore;
|
|
|
|
if(nKensaiScore > nBestScore)
|
|
{
|
|
nAutoPhenotype = PHENOTYPE_KENSAI;
|
|
nBestScore = nKensaiScore;
|
|
}
|
|
if(nAssassinScore > nBestScore)
|
|
{
|
|
nAutoPhenotype = PHENOTYPE_ASSASSIN;
|
|
nBestScore = nAssassinScore;
|
|
}
|
|
if(nBarbarianScore > nBestScore)
|
|
{
|
|
nAutoPhenotype = PHENOTYPE_BARBARIAN;
|
|
nBestScore = nBarbarianScore;
|
|
}
|
|
if(nFencingScore > nBestScore)
|
|
{
|
|
nAutoPhenotype = PHENOTYPE_FENCING;
|
|
nBestScore = nFencingScore;
|
|
}
|
|
|
|
if(GetPhenoType(OBJECT_SELF) != nAutoPhenotype)
|
|
{
|
|
SetPhenoType(nAutoPhenotype);
|
|
LockThisFeat();
|
|
}
|
|
}
|
|
} |