Expanded Vassal of Bahamut for epic progression

Expanded Vassal of Bahamut for epic progression.
This commit is contained in:
Jaysyn904
2025-04-26 21:28:42 -04:00
parent 5d895ea26a
commit 0ccae83525
8 changed files with 656 additions and 549 deletions

View File

@@ -104,42 +104,111 @@ void AddArmorOnhit(object oPC,int iEquip)
}
}
void DWRightWeap(object oPC,int iEquip)
/* Dragonwrack (Su): Evil dragons that strike a vassal of Bahamut or
are struck by him suffer grievous wounds. At 4th level, a vassal
of Bahamut deals +2d6 points of damage with each successful
melee attack made against an evil creature of the dragon type.
Furthermore, any such creature that strikes the vassal with a
natural weapon or melee weapon takes 1d6 points of damage. */
void DWRightWeap(object oPC, int iEquip)
{
object oItem ;
object oItem;
if (iEquip==2)
{
oItem=GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC);
if ( GetLocalInt(oItem,"DWright"))
return;
if (iEquip == 2) // Equipping something
{
oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC);
if (!GetIsObjectValid(oItem)) return;
if (GetBaseItemType(oItem)!=BASE_ITEM_SMALLSHIELD || BASE_ITEM_TOWERSHIELD || BASE_ITEM_LARGESHIELD)
{
AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER,1),oItem,999.0);
if (GetLocalInt(oItem, "DWright"))
return;
SetLocalInt(oItem,"DWright",1);
}
}
else if (iEquip==1)
{
oItem=GetItemLastUnequipped();
if (GetBaseItemType(oItem)==BASE_ITEM_SMALLSHIELD || BASE_ITEM_TOWERSHIELD || BASE_ITEM_LARGESHIELD) return;
RemoveSpecificProperty(oItem,ITEM_PROPERTY_ONHITCASTSPELL,IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER,0);
DeleteLocalInt(oItem,"DWright");
}
else
{
oItem=GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC);
if ( !GetLocalInt(oItem,"DWright")&& GetBaseItemType(oItem)!=BASE_ITEM_SMALLSHIELD || BASE_ITEM_TOWERSHIELD || BASE_ITEM_LARGESHIELD)
{
AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER,1),oItem,999.0);
SetLocalInt(oItem,"DWright",1);
}
}
}
int nType = GetBaseItemType(oItem);
if (nType != BASE_ITEM_SMALLSHIELD && nType != BASE_ITEM_TOWERSHIELD && nType != BASE_ITEM_LARGESHIELD)
{
AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1), oItem, 999.0);
SetLocalInt(oItem, "DWright", 1);
}
}
else if (iEquip == 1) // Unequipping something
{
oItem = GetItemLastUnequipped();
if (!GetIsObjectValid(oItem)) return;
void DWLeftWeap(object oPC,int iEquip)
int nType = GetBaseItemType(oItem);
if (nType == BASE_ITEM_SMALLSHIELD || nType == BASE_ITEM_TOWERSHIELD || nType == BASE_ITEM_LARGESHIELD)
return;
RemoveSpecificProperty(oItem, ITEM_PROPERTY_ONHITCASTSPELL, IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 0);
DeleteLocalInt(oItem, "DWright");
}
else // Fallback (e.g., login or heartbeat refresh)
{
oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC);
if (!GetIsObjectValid(oItem)) return;
if (!GetLocalInt(oItem, "DWright"))
{
int nType = GetBaseItemType(oItem);
if (nType != BASE_ITEM_SMALLSHIELD && nType != BASE_ITEM_TOWERSHIELD && nType != BASE_ITEM_LARGESHIELD)
{
AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1), oItem, 999.0);
SetLocalInt(oItem, "DWright", 1);
}
}
}
}
void DWLeftWeap(object oPC, int iEquip)
{
object oItem;
if (iEquip == 2) // Equipping something
{
oItem = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC);
if (!GetIsObjectValid(oItem)) return;
if (GetLocalInt(oItem, "DWleft"))
return;
int nType = GetBaseItemType(oItem);
if (nType != BASE_ITEM_SMALLSHIELD && nType != BASE_ITEM_TOWERSHIELD && nType != BASE_ITEM_LARGESHIELD)
{
AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1), oItem, 999.0);
SetLocalInt(oItem, "DWleft", 1);
}
}
else if (iEquip == 1) // Unequipping something
{
oItem = GetItemLastUnequipped();
if (!GetIsObjectValid(oItem)) return;
int nType = GetBaseItemType(oItem);
if (nType == BASE_ITEM_SMALLSHIELD || nType == BASE_ITEM_TOWERSHIELD || nType == BASE_ITEM_LARGESHIELD)
return;
RemoveSpecificProperty(oItem, ITEM_PROPERTY_ONHITCASTSPELL, IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 0);
DeleteLocalInt(oItem, "DWleft");
}
else // Fallback (e.g., login or heartbeat refresh)
{
oItem = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC);
if (!GetIsObjectValid(oItem)) return;
if (!GetLocalInt(oItem, "DWleft"))
{
int nType = GetBaseItemType(oItem);
if (nType != BASE_ITEM_SMALLSHIELD && nType != BASE_ITEM_TOWERSHIELD && nType != BASE_ITEM_LARGESHIELD)
{
AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1), oItem, 999.0);
SetLocalInt(oItem, "DWleft", 1);
}
}
}
}
/* void DWLeftWeap(object oPC,int iEquip)
{
object oItem ;
@@ -149,9 +218,9 @@ void DWLeftWeap(object oPC,int iEquip)
if ( GetLocalInt(oItem,"DWleft"))
return;
if (GetBaseItemType(oItem)!=BASE_ITEM_SMALLSHIELD || BASE_ITEM_TOWERSHIELD || BASE_ITEM_LARGESHIELD)
if (GetBaseItemType(oItem)!=BASE_ITEM_SMALLSHIELD && BASE_ITEM_TOWERSHIELD && BASE_ITEM_LARGESHIELD)
{
AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER,1),oItem,999.0);
AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER,1),oItem,9999.0);
SetLocalInt(oItem,"DWleft",1);
}
@@ -166,14 +235,14 @@ void DWLeftWeap(object oPC,int iEquip)
else
{
oItem=GetItemInSlot(INVENTORY_SLOT_LEFTHAND,oPC);
if ( !GetLocalInt(oItem,"DWleft")&& GetBaseItemType(oItem)!=BASE_ITEM_SMALLSHIELD || BASE_ITEM_TOWERSHIELD || BASE_ITEM_LARGESHIELD)
if ( !GetLocalInt(oItem,"DWleft")&& GetBaseItemType(oItem)!=BASE_ITEM_SMALLSHIELD && BASE_ITEM_TOWERSHIELD && BASE_ITEM_LARGESHIELD)
{
AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER,1),oItem,999.0);
AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER,1),oItem,9999.0);
SetLocalInt(oItem,"DWleft",1);
}
}
}
*/
void ImperiousAura(object oPC, object oSkin, int iLevel)
{
if(GetLocalInt(oSkin, "ImperiousAura") == iLevel) return;

View File

@@ -8,12 +8,49 @@
//:://////////////////////////////////////////////
//:: Created By: Zedium
//:: Created On: 5 april 2004
//:: Updated By: Jaysyn
//:: Updated On: 2025-04-26 21:11:16
//:://////////////////////////////////////////////
/* Dragonwrack (Su): Evil dragons that strike a vassal of Bahamut or
are struck by him suffer grievous wounds. At 4th level, a vassal
of Bahamut deals +2d6 points of damage with each successful
melee attack made against an evil creature of the dragon type.
Furthermore, any such creature that strikes the vassal with a
natural weapon or melee weapon takes 1d6 points of damage. At
7th level, the vassal deals +3d6 points of damage to evil dragons
an at 10th level, the damage increases to +4d6 points and 2d6
points, respectively. */
#include "prc_class_const"
#include "prc_alterations"
void main()
{
int nVassal = GetLevelByClass(CLASS_TYPE_VASSAL, OBJECT_SELF);
object oTarget = PRCGetSpellTargetObject();
int iDam = 0;
effect eDam;
// Only start dealing bonus damage at 4th level
if (nVassal >= 4)
{
iDam = d6(2 + ((nVassal - 4) / 3)); // 2d6 at 4th level, +1d6 every 3 levels
}
if (iDam > 0 && MyPRCGetRacialType(oTarget) == RACIAL_TYPE_DRAGON)
{
if (GetAlignmentGoodEvil(oTarget) == ALIGNMENT_EVIL)
{
eDam = EffectDamage(iDam, DAMAGE_TYPE_DIVINE, DAMAGE_POWER_ENERGY);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget);
}
}
}
/* void main()
{
int nVassal = GetLevelByClass(CLASS_TYPE_VASSAL, OBJECT_SELF);
object oTarget = PRCGetSpellTargetObject();
@@ -39,4 +76,4 @@ void main()
ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget);
}
}
}
} */