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;