forked from Jaysyn/PRC8
Updated Release Archive. Fixed Mage-killer prereqs. Removed old LETO & ConvoCC related files. Added organized spell scroll store. Fixed Gloura spellbook. Various TLK fixes. Reorganized Repo. Removed invalid user folders. Added DocGen back in.
165 lines
7.9 KiB
Plaintext
165 lines
7.9 KiB
Plaintext
#include "prc_feat_const"
|
|
#include "prc_class_const"
|
|
#include "prc_spell_const"
|
|
#include "prc_alterations"
|
|
|
|
void AddIPEnh(object oWeap, int iCost, int iLvl)
|
|
{
|
|
itemproperty ip;
|
|
if(GetItemHasItemProperty(oWeap, ITEM_PROPERTY_ENHANCEMENT_BONUS))
|
|
{
|
|
int iValue;
|
|
ip = GetFirstItemProperty(oWeap);
|
|
int iBreak = FALSE;
|
|
int iNew;
|
|
|
|
while (GetIsItemPropertyValid(ip) && !iBreak)
|
|
{
|
|
if(GetItemPropertyType(ip) == ITEM_PROPERTY_ENHANCEMENT_BONUS)
|
|
{
|
|
iValue = GetItemPropertyCostTableValue(ip);
|
|
AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyEnhancementBonus(iValue + iCost), oWeap, HoursToSeconds(iLvl));
|
|
iBreak = TRUE;
|
|
}
|
|
ip = GetNextItemProperty(oWeap);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
ip = ItemPropertyEnhancementBonus(iCost);
|
|
AddItemProperty(DURATION_TYPE_TEMPORARY, ip, oWeap, HoursToSeconds(iLvl));
|
|
}
|
|
}
|
|
|
|
int Activpower(object oWeap,int iType,int iRace,int iLvl,int iVicious)
|
|
{
|
|
if(!iType)
|
|
return iVicious;
|
|
|
|
switch(iType)
|
|
{
|
|
case TEMPUS_ABILITY_ENHANC1:
|
|
AddIPEnh(oWeap,1, iLvl);
|
|
break;
|
|
case TEMPUS_ABILITY_ENHANC2:
|
|
AddIPEnh(oWeap,2, iLvl);
|
|
break;
|
|
case TEMPUS_ABILITY_ENHANC3:
|
|
AddIPEnh(oWeap,3, iLvl);
|
|
break;
|
|
case TEMPUS_ABILITY_FIRE1D6:
|
|
AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_FIRE,IP_CONST_DAMAGEBONUS_1d6),oWeap,HoursToSeconds(iLvl));
|
|
break;
|
|
case TEMPUS_ABILITY_COLD1D6:
|
|
AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_COLD,IP_CONST_DAMAGEBONUS_1d6),oWeap,HoursToSeconds(iLvl));
|
|
break;
|
|
case TEMPUS_ABILITY_ELEC1D6:
|
|
AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_ELECTRICAL,IP_CONST_DAMAGEBONUS_1d6),oWeap,HoursToSeconds(iLvl));
|
|
break;
|
|
case TEMPUS_ABILITY_KEEN:
|
|
AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyKeen(),oWeap,HoursToSeconds(iLvl));
|
|
break;
|
|
case TEMPUS_ABILITY_ANARCHIC:
|
|
AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_LAWFUL,IP_CONST_DAMAGETYPE_SLASHING,IP_CONST_DAMAGEBONUS_2d6),oWeap,HoursToSeconds(iLvl));
|
|
break;
|
|
case TEMPUS_ABILITY_AXIOMATIC:
|
|
AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_CHAOTIC,IP_CONST_DAMAGETYPE_SLASHING,IP_CONST_DAMAGEBONUS_2d6),oWeap,HoursToSeconds(iLvl));
|
|
break;
|
|
case TEMPUS_ABILITY_HOLY:
|
|
AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_EVIL,IP_CONST_DAMAGETYPE_SLASHING,IP_CONST_DAMAGEBONUS_2d6),oWeap,HoursToSeconds(iLvl));
|
|
break;
|
|
case TEMPUS_ABILITY_UNHOLY:
|
|
AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_GOOD,IP_CONST_DAMAGETYPE_SLASHING,IP_CONST_DAMAGEBONUS_2d6),oWeap,HoursToSeconds(iLvl));
|
|
break;
|
|
case TEMPUS_ABILITY_DISRUPTION:
|
|
AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyOnHitProps(IP_CONST_ONHIT_SLAYRACE,IP_CONST_ONHIT_SAVEDC_14,IP_CONST_RACIALTYPE_UNDEAD),oWeap,HoursToSeconds(iLvl));
|
|
break;
|
|
case TEMPUS_ABILITY_WOUNDING:
|
|
AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyOnHitProps(IP_CONST_ONHIT_WOUNDING,IP_CONST_ONHIT_SAVEDC_26,IP_CONST_RACIALTYPE_UNDEAD),oWeap,HoursToSeconds(iLvl));
|
|
break;
|
|
case TEMPUS_ABILITY_VAMPIRE:
|
|
AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyVampiricRegeneration(10),oWeap,HoursToSeconds(iLvl));
|
|
break;
|
|
case TEMPUS_ABILITY_VICIOUS:
|
|
AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyDamageBonusVsRace(iRace,IP_CONST_DAMAGETYPE_SLASHING,IP_CONST_DAMAGEBONUS_2d6),oWeap,HoursToSeconds(iLvl));
|
|
if(!iVicious)
|
|
AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER,2),oWeap,HoursToSeconds(iLvl));
|
|
iVicious++;
|
|
break;
|
|
case TEMPUS_ABILITY_BARSKIN:
|
|
AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyCastSpell(IP_CONST_CASTSPELL_BARKSKIN_3,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY),oWeap,HoursToSeconds(iLvl));
|
|
break;
|
|
case TEMPUS_ABILITY_CONECOLD:
|
|
AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyCastSpell(IP_CONST_CASTSPELL_CONE_OF_COLD_9,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY),oWeap,HoursToSeconds(iLvl));
|
|
break;
|
|
case TEMPUS_ABILITY_DARKNESS:
|
|
AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyCastSpell(IP_CONST_CASTSPELL_DARKNESS_3,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY),oWeap,HoursToSeconds(iLvl));
|
|
break;
|
|
case TEMPUS_ABILITY_FIREBALL:
|
|
AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyCastSpell(IP_CONST_CASTSPELL_FIREBALL_5,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY),oWeap,HoursToSeconds(iLvl));
|
|
break;
|
|
case TEMPUS_ABILITY_HASTE:
|
|
AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyCastSpell(IP_CONST_CASTSPELL_HASTE_5,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY),oWeap,HoursToSeconds(iLvl));
|
|
break;
|
|
case TEMPUS_ABILITY_IMPROVINV:
|
|
AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyCastSpell(IP_CONST_CASTSPELL_IMPROVED_INVISIBILITY_7,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY),oWeap,HoursToSeconds(iLvl));
|
|
break;
|
|
case TEMPUS_ABILITY_LIGHTBOLT:
|
|
AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyCastSpell(IP_CONST_CASTSPELL_LIGHTNING_BOLT_5,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY),oWeap,HoursToSeconds(iLvl));
|
|
break;
|
|
case TEMPUS_ABILITY_MAGICMISSILE:
|
|
AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyCastSpell(IP_CONST_CASTSPELL_MAGIC_MISSILE_5,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY),oWeap,HoursToSeconds(iLvl));
|
|
break;
|
|
case TEMPUS_ABILITY_WEB:
|
|
AddItemProperty(DURATION_TYPE_TEMPORARY,ItemPropertyCastSpell(IP_CONST_CASTSPELL_WEB_3,IP_CONST_CASTSPELL_NUMUSES_1_USE_PER_DAY),oWeap,HoursToSeconds(iLvl));
|
|
break;
|
|
}
|
|
|
|
return iVicious;
|
|
}
|
|
|
|
void main()
|
|
{
|
|
object oPC = OBJECT_SELF;
|
|
int iLvl = GetLevelByClass(CLASS_TYPE_TEMPUS, oPC);
|
|
if(iLvl < 2)
|
|
return;
|
|
|
|
object oSkin = GetPCSkin(oPC);
|
|
object oWeap = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC);
|
|
int iSave = GetLocalInt(oPC, "WeapEchant1");
|
|
int iType = GetBaseItemType(oWeap);
|
|
|
|
int iFeat = iLvl > 9 ? FEAT_ENCHANT_WEAPON3:
|
|
iLvl > 5 ? FEAT_ENCHANT_WEAPON2:
|
|
FEAT_ENCHANT_WEAPON1;
|
|
|
|
if(!iSave || iType != GetLocalInt(oSkin, "FEAT_WEAP_TEMPUS"))
|
|
{
|
|
int iPower = iLvl > 9 ? 3:
|
|
iLvl > 5 ? 2:
|
|
1;
|
|
|
|
DeleteLocalInt(oPC, "WeapEchant1");
|
|
DeleteLocalInt(oPC, "WeapEchant2");
|
|
DeleteLocalInt(oPC, "WeapEchant3");
|
|
DeleteLocalInt(oPC, "WeapEchantRace1");
|
|
DeleteLocalInt(oPC, "WeapEchantRace2");
|
|
DeleteLocalInt(oPC, "WeapEchantRace3");
|
|
SetLocalInt(oPC, "TempusPower", iPower);
|
|
ActionStartConversation(oPC, "cv_tempus");
|
|
IncrementRemainingFeatUses(oPC, iFeat);
|
|
return;
|
|
}
|
|
|
|
if(!IPGetWeaponEnhancementBonus(oWeap) || GetHasSpellEffect(TEMPUS_ENCHANT_WEAPON, oWeap))
|
|
{
|
|
IncrementRemainingFeatUses(oPC, iFeat);
|
|
return;
|
|
}
|
|
|
|
int iVicious;
|
|
iVicious = Activpower(oWeap, GetLocalInt(oPC, "WeapEchant1"), GetLocalInt(oPC, "WeapEchantRace1"), iLvl, iVicious);
|
|
iVicious = Activpower(oWeap, GetLocalInt(oPC, "WeapEchant2"), GetLocalInt(oPC, "WeapEchantRace2"), iLvl, iVicious);
|
|
iVicious = Activpower(oWeap, GetLocalInt(oPC, "WeapEchant3"), GetLocalInt(oPC, "WeapEchantRace3"), iLvl, iVicious);
|
|
} |