Added NWN Dark Sun module contents
Added NWN Dark Sun module contents.
This commit is contained in:
287
nwnds_module/wow_polyinclude.nss
Normal file
287
nwnds_module/wow_polyinclude.nss
Normal file
@@ -0,0 +1,287 @@
|
||||
const float WOW_POLYMORPH_HEARTBEAT = 1.0; // The delay between heartbeats
|
||||
int wow_GetPrimaryAbility();
|
||||
void wow_PolyFix();
|
||||
effect wow_GetPolyFixEffect();
|
||||
void wow_PolyHeartbeat();
|
||||
void wow_RemovePolyFix();
|
||||
int wow_CheckPoly();
|
||||
int wow_GetPolySpellId();
|
||||
void wow_PolyOnClientEnter();
|
||||
int wow_CheckForCasterLevels();
|
||||
|
||||
int wow_CheckForCasterLevels()
|
||||
{
|
||||
if(GetLevelByClass(CLASS_TYPE_BARD) > 0 ||
|
||||
GetLevelByClass(CLASS_TYPE_CLERIC) > 0 ||
|
||||
GetLevelByClass(CLASS_TYPE_DRUID) > 0 ||
|
||||
GetLevelByClass(CLASS_TYPE_PALADIN) > 0 ||
|
||||
GetLevelByClass(CLASS_TYPE_RANGER) > 0 ||
|
||||
GetLevelByClass(CLASS_TYPE_SHIFTER) > 0 ||
|
||||
GetLevelByClass(CLASS_TYPE_SORCERER) > 0 ||
|
||||
GetLevelByClass(CLASS_TYPE_WIZARD) > 0) return TRUE;
|
||||
else return FALSE;
|
||||
}
|
||||
|
||||
void wow_PolyOnClientEnter()
|
||||
{
|
||||
if(!GetIsPC(OBJECT_SELF))
|
||||
{
|
||||
AssignCommand(GetEnteringObject(), wow_PolyOnClientEnter());
|
||||
}
|
||||
else
|
||||
{
|
||||
if(wow_CheckPoly()) DelayCommand(WOW_POLYMORPH_HEARTBEAT, wow_PolyHeartbeat());
|
||||
else wow_RemovePolyFix();
|
||||
}
|
||||
}
|
||||
|
||||
void wow_RemovePolyFix()
|
||||
{
|
||||
effect eEffect = GetFirstEffect(OBJECT_SELF);
|
||||
int nType, nSpell;
|
||||
|
||||
while(GetIsEffectValid(eEffect))
|
||||
{
|
||||
nType = GetEffectType(eEffect);
|
||||
nSpell = GetEffectSpellId(eEffect);
|
||||
if(nType == EFFECT_TYPE_ABILITY_INCREASE)
|
||||
{
|
||||
switch(nSpell)
|
||||
{
|
||||
case 184:
|
||||
case 387:
|
||||
case 388:
|
||||
case 389:
|
||||
case 390:
|
||||
case 391:
|
||||
case 392:
|
||||
case 393:
|
||||
case 394:
|
||||
case 395:
|
||||
case 396:
|
||||
case 397:
|
||||
case 398:
|
||||
case 399:
|
||||
case 400:
|
||||
case 401:
|
||||
case 402:
|
||||
case 403:
|
||||
case 404:
|
||||
case 405:
|
||||
case 658:
|
||||
case 659:
|
||||
case 660:
|
||||
case 661:
|
||||
case 662:
|
||||
case 672:
|
||||
case 678:
|
||||
case 680:
|
||||
case 670:
|
||||
case 673:
|
||||
case 674:
|
||||
case 679:
|
||||
case 691:
|
||||
case 694:
|
||||
case 682:
|
||||
case 683:
|
||||
case 684:
|
||||
case 704:
|
||||
case 705:
|
||||
case 706:
|
||||
case 707:
|
||||
case 708:
|
||||
case 709:
|
||||
case 733:
|
||||
case 734:
|
||||
case 735:
|
||||
case 738:
|
||||
case 739:
|
||||
case 740:
|
||||
{
|
||||
RemoveEffect(OBJECT_SELF, eEffect);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
eEffect = GetNextEffect(OBJECT_SELF);
|
||||
}
|
||||
}
|
||||
|
||||
int wow_GetPolySpellId()
|
||||
{
|
||||
int nReturn = -1;
|
||||
effect eEffect = GetFirstEffect(OBJECT_SELF);
|
||||
int nType;
|
||||
|
||||
while(GetIsEffectValid(eEffect))
|
||||
{
|
||||
nType = GetEffectType(eEffect);
|
||||
if(nType == EFFECT_TYPE_POLYMORPH) nReturn = GetEffectSpellId(eEffect);
|
||||
eEffect = GetNextEffect(OBJECT_SELF);
|
||||
}
|
||||
return nReturn;
|
||||
}
|
||||
|
||||
int wow_CheckPoly()
|
||||
{
|
||||
int nAppearance = GetAppearanceType(OBJECT_SELF);
|
||||
int nReturn = FALSE;
|
||||
int nSpell = wow_GetPolySpellId();
|
||||
switch(nSpell)
|
||||
{
|
||||
case 387:
|
||||
{
|
||||
if(nAppearance == 159) nReturn = TRUE;
|
||||
break;
|
||||
}
|
||||
case 388:
|
||||
{
|
||||
if(nAppearance == 167) nReturn = TRUE;
|
||||
break;
|
||||
}
|
||||
case 389:
|
||||
{
|
||||
if(nAppearance == 168) nReturn = TRUE;
|
||||
break;
|
||||
}
|
||||
case 390:
|
||||
{
|
||||
if(nAppearance == 55) nReturn = TRUE;
|
||||
break;
|
||||
}
|
||||
case 391:
|
||||
{
|
||||
if(nAppearance == 198) nReturn = TRUE;
|
||||
break;
|
||||
}
|
||||
case 392:
|
||||
{
|
||||
if(nAppearance == 49) nReturn = TRUE;
|
||||
break;
|
||||
}
|
||||
case 393:
|
||||
{
|
||||
if(nAppearance == 80) nReturn = TRUE;
|
||||
break;
|
||||
}
|
||||
case 394:
|
||||
{
|
||||
if(nAppearance == 38) nReturn = TRUE;
|
||||
break;
|
||||
}
|
||||
case 395:
|
||||
{
|
||||
if(nAppearance == 152) nReturn = TRUE;
|
||||
break;
|
||||
}
|
||||
case 396:
|
||||
{
|
||||
if(nAppearance == 89) nReturn = TRUE;
|
||||
break;
|
||||
}
|
||||
case 184:
|
||||
{
|
||||
if(nAppearance == 40) nReturn = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return nReturn;
|
||||
}
|
||||
void wow_PolyHeartbeat()
|
||||
{
|
||||
if(wow_CheckPoly()) DelayCommand(WOW_POLYMORPH_HEARTBEAT, wow_PolyHeartbeat());
|
||||
else DelayCommand(1.0, wow_RemovePolyFix());
|
||||
}
|
||||
|
||||
int wow_GetPrimaryAbility()
|
||||
{
|
||||
int nAbility;
|
||||
int nClass = GetLastSpellCastClass();
|
||||
if(nClass == CLASS_TYPE_INVALID) nClass = CLASS_TYPE_SHIFTER;
|
||||
switch(nClass)
|
||||
{
|
||||
case CLASS_TYPE_BARD:
|
||||
case CLASS_TYPE_SORCERER:
|
||||
{
|
||||
nAbility = ABILITY_CHARISMA;
|
||||
break;
|
||||
}
|
||||
case CLASS_TYPE_CLERIC:
|
||||
case CLASS_TYPE_DRUID:
|
||||
case CLASS_TYPE_PALADIN:
|
||||
case CLASS_TYPE_RANGER:
|
||||
case CLASS_TYPE_SHIFTER:
|
||||
{
|
||||
nAbility = ABILITY_WISDOM;
|
||||
break;
|
||||
}
|
||||
case CLASS_TYPE_WIZARD:
|
||||
{
|
||||
nAbility = ABILITY_INTELLIGENCE;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
nAbility = -1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return nAbility;
|
||||
}
|
||||
|
||||
void wow_PolyFix()
|
||||
{
|
||||
if(GetIsPC(OBJECT_SELF) && wow_CheckForCasterLevels() && (GetIsPC(GetSpellTargetObject()) || !GetIsObjectValid(GetSpellTargetObject())))
|
||||
{
|
||||
effect eEffect = wow_GetPolyFixEffect();
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect, GetSpellTargetObject());
|
||||
AssignCommand(GetSpellTargetObject(), DelayCommand(WOW_POLYMORPH_HEARTBEAT, wow_PolyHeartbeat()));
|
||||
}
|
||||
}
|
||||
|
||||
effect wow_GetPolyFixEffect()
|
||||
{
|
||||
int nAbility = wow_GetPrimaryAbility();
|
||||
effect eEffect;
|
||||
if(nAbility != -1)
|
||||
{
|
||||
object oItem;
|
||||
int nSlot, nValue; // 13, 1
|
||||
itemproperty ipIP;
|
||||
for(nSlot = 0; nSlot <= 13; nSlot++)
|
||||
{
|
||||
oItem = GetItemInSlot(nSlot, OBJECT_SELF);
|
||||
if(GetIsObjectValid(oItem))
|
||||
{
|
||||
if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_ABILITY_BONUS) || GetItemHasItemProperty(oItem, ITEM_PROPERTY_DECREASED_ABILITY_SCORE))
|
||||
{
|
||||
ipIP = GetFirstItemProperty(oItem);
|
||||
while(GetIsItemPropertyValid(ipIP))
|
||||
{
|
||||
if(GetItemPropertyType(ipIP) == ITEM_PROPERTY_ABILITY_BONUS)
|
||||
{
|
||||
if(GetItemPropertySubType(ipIP) == nAbility)
|
||||
{
|
||||
nValue += GetItemPropertyCostTableValue(ipIP);
|
||||
}
|
||||
}
|
||||
else if(GetItemPropertyType(ipIP) == ITEM_PROPERTY_DECREASED_ABILITY_SCORE)
|
||||
{
|
||||
if(GetItemPropertySubType(ipIP) == nAbility)
|
||||
{
|
||||
nValue -= GetItemPropertyCostTableValue(ipIP);
|
||||
}
|
||||
}
|
||||
ipIP = GetNextItemProperty(oItem);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if(nValue > 0)
|
||||
{
|
||||
eEffect = EffectAbilityIncrease(nAbility, nValue);
|
||||
}
|
||||
}
|
||||
return eEffect;
|
||||
}
|
||||
//void main () {}
|
Reference in New Issue
Block a user