662 lines
25 KiB
Plaintext
662 lines
25 KiB
Plaintext
void ApplyAdditionalHP(object oPC, int iAmount, float fDuration)
|
|
{
|
|
effect eHP;
|
|
eHP=GetFirstEffect(oPC);
|
|
while(GetIsEffectValid(eHP))
|
|
{
|
|
if(GetEffectType(eHP)==EFFECT_TYPE_TEMPORARY_HITPOINTS)
|
|
{
|
|
RemoveEffect(oPC, eHP);
|
|
SendMessageToPC(oPC, "Removing Existing HP Buff");
|
|
}
|
|
eHP=GetNextEffect(oPC);
|
|
}
|
|
|
|
eHP=EffectTemporaryHitpoints(iAmount);
|
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eHP, oPC, fDuration);
|
|
eHP=EffectVisualEffect(VFX_IMP_HOLY_AID);
|
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eHP, oPC, fDuration);
|
|
}
|
|
|
|
void main()
|
|
{
|
|
object oItem = GetItemActivated();
|
|
object oActivator = GetItemActivator();
|
|
object oPC=GetItemActivator();
|
|
object oTarget=GetItemActivatedTarget();
|
|
location lActivator = GetLocation(oActivator);
|
|
string sItemTag = GetTag(oItem);
|
|
location lTarget = GetLocation(oTarget);
|
|
int iSkill = GetSkillRank(SKILL_PERFORM, oPC); //Skill Modifier for ranks in perform
|
|
int iRoll = d20(); //Skill Roll
|
|
int iTotal = iRoll + iSkill; //DC Check
|
|
string sTotal = IntToString(iTotal);
|
|
effect eSong = EffectVisualEffect(VFX_DUR_BARD_SONG);
|
|
|
|
if (sItemTag=="AmuletofPiccard")
|
|
{
|
|
effect eHP;
|
|
eHP=GetFirstEffect(oPC);
|
|
eHP=EffectVisualEffect(VFX_IMP_HOLY_AID);
|
|
AssignCommand(oPC, ActionSpeakString("Beam me up."));
|
|
DelayCommand(3.0, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eHP, oPC, 0.0f));
|
|
object oTarget = GetWaypointByTag("Scotty");
|
|
DelayCommand(5.0, AssignCommand(oPC, JumpToObject(oTarget)));
|
|
}
|
|
|
|
if (sItemTag=="SpellFireStaff1")
|
|
{
|
|
if (GetLevelByClass(CLASS_TYPE_WIZARD, oActivator) >= 5)
|
|
{
|
|
AdjustReputation(oActivator, oTarget, -100);
|
|
int nInt = GetAbilityScore(oPC, ABILITY_INTELLIGENCE) /2;
|
|
int nStaffDamage = d4(1) * nInt;
|
|
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_FIREBALL), lTarget);
|
|
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_FIRESTORM), lTarget);
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(nStaffDamage,DAMAGE_TYPE_MAGICAL, DAMAGE_POWER_NORMAL), oTarget, 0.0f);
|
|
}
|
|
|
|
if (GetLevelByClass(CLASS_TYPE_SORCERER, oActivator) >= 5)
|
|
{
|
|
AdjustReputation(oActivator, oTarget, -100);
|
|
int nInt = GetAbilityScore(oPC, ABILITY_CHARISMA) /2;
|
|
int nStaffDamage = d4(1) * nInt;
|
|
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_FIREBALL), lTarget);
|
|
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_FIRESTORM), lTarget);
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(nStaffDamage,DAMAGE_TYPE_MAGICAL, DAMAGE_POWER_NORMAL), oTarget, 0.0f);
|
|
}
|
|
}
|
|
|
|
if (sItemTag=="SpellFireStaff2")
|
|
{
|
|
if (GetLevelByClass(CLASS_TYPE_WIZARD, oActivator) >= 10)
|
|
{
|
|
AdjustReputation(oActivator, oTarget, -100);
|
|
int nInt = GetAbilityScore(oPC, ABILITY_INTELLIGENCE) /2;
|
|
int nStaffDamage = d8(1) * nInt + 10;
|
|
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_FIREBALL), lTarget);
|
|
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_FIRESTORM), lTarget);
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(nStaffDamage,DAMAGE_TYPE_MAGICAL, DAMAGE_POWER_NORMAL), oTarget, 0.0f);
|
|
}
|
|
|
|
if (GetLevelByClass(CLASS_TYPE_SORCERER, oActivator) >= 10)
|
|
{
|
|
AdjustReputation(oActivator, oTarget, -100);
|
|
int nInt = GetAbilityScore(oPC, ABILITY_CHARISMA) /2 ;
|
|
int nStaffDamage = d8(1) * nInt + 10;
|
|
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_FIREBALL), lTarget);
|
|
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_FIRESTORM), lTarget);
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(nStaffDamage,DAMAGE_TYPE_MAGICAL, DAMAGE_POWER_NORMAL), oTarget, 0.0f);
|
|
}
|
|
}
|
|
|
|
if (sItemTag=="SpellFireStaff3")
|
|
{
|
|
if (GetLevelByClass(CLASS_TYPE_WIZARD, oActivator) >= 15)
|
|
{
|
|
AdjustReputation(oActivator, oTarget, -100);
|
|
int nInt = GetAbilityScore(oPC, ABILITY_INTELLIGENCE)/2;
|
|
int nStaffDamage = d12(1) * nInt + 20;
|
|
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_FIREBALL), lTarget);
|
|
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_FIRESTORM), lTarget);
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(nStaffDamage,DAMAGE_TYPE_MAGICAL, DAMAGE_POWER_NORMAL), oTarget, 0.0f);
|
|
}
|
|
|
|
if (GetLevelByClass(CLASS_TYPE_SORCERER, oActivator) >= 15)
|
|
{
|
|
AdjustReputation(oActivator, oTarget, -100);
|
|
int nInt = GetAbilityScore(oPC, ABILITY_CHARISMA) /2;
|
|
int nStaffDamage = d12(1) * nInt + 20;
|
|
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_FIREBALL), lTarget);
|
|
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_FIRESTORM), lTarget);
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(nStaffDamage,DAMAGE_TYPE_MAGICAL, DAMAGE_POWER_NORMAL), oTarget, 0.0f);
|
|
}
|
|
}
|
|
|
|
if (sItemTag=="SpellFireStaff4")
|
|
{
|
|
if (GetLevelByClass(CLASS_TYPE_WIZARD, oActivator) >= 20)
|
|
{
|
|
AdjustReputation(oActivator, oTarget, -100);
|
|
int nInt = GetAbilityScore(oPC, ABILITY_INTELLIGENCE) /2;
|
|
int nStaffDamage = d20(1) * nInt + 40;
|
|
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_FIREBALL), lTarget);
|
|
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_FIRESTORM), lTarget);
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(nStaffDamage,DAMAGE_TYPE_MAGICAL, DAMAGE_POWER_NORMAL), oTarget, 0.0f);
|
|
}
|
|
|
|
if (GetLevelByClass(CLASS_TYPE_SORCERER, oActivator) >= 20)
|
|
{
|
|
AdjustReputation(oActivator, oTarget, -100);
|
|
int nInt = GetAbilityScore(oPC, ABILITY_CHARISMA) /2;
|
|
int nStaffDamage = d20(1) * nInt + 40;
|
|
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_FIREBALL), lTarget);
|
|
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_FIRESTORM), lTarget);
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(nStaffDamage,DAMAGE_TYPE_MAGICAL, DAMAGE_POWER_NORMAL), oTarget, 0.0f);
|
|
}
|
|
}
|
|
if (sItemTag=="skababeads1")
|
|
{
|
|
if (GetLevelByClass(CLASS_TYPE_MONK, oActivator) >= 5)
|
|
{
|
|
ApplyAdditionalHP(oPC, 105, 3600.0);
|
|
}
|
|
}
|
|
if (sItemTag=="skababeads2")
|
|
{
|
|
if (GetLevelByClass(CLASS_TYPE_MONK, oActivator) >= 10)
|
|
{
|
|
ApplyAdditionalHP(oPC, 255, 3600.0);
|
|
}
|
|
}
|
|
if (sItemTag=="skababeads3")
|
|
{
|
|
if (GetLevelByClass(CLASS_TYPE_MONK, oActivator) >= 15)
|
|
{
|
|
ApplyAdditionalHP(oPC, 505, 3600.0);
|
|
}
|
|
}
|
|
if (sItemTag=="skababeads4")
|
|
{
|
|
if (GetLevelByClass(CLASS_TYPE_MONK, oActivator) >= 20)
|
|
{
|
|
ApplyAdditionalHP(oPC, 1005, 3600.0);
|
|
}
|
|
}
|
|
if (sItemTag=="HP_ITEM_05")
|
|
{
|
|
ApplyAdditionalHP(oPC, 5, 3600.0);
|
|
}
|
|
if (sItemTag=="HP_ITEM_10")
|
|
{
|
|
ApplyAdditionalHP(oPC, 10, 3600.0);
|
|
}
|
|
if (sItemTag=="HP_ITEM_15")
|
|
{
|
|
ApplyAdditionalHP(oPC, 15, 3600.0);
|
|
}
|
|
if (sItemTag=="HP_ITEM_20")
|
|
{
|
|
ApplyAdditionalHP(oPC, 20, 3600.0);
|
|
}
|
|
if (sItemTag=="HP_ITEM_40")
|
|
{
|
|
ApplyAdditionalHP(oPC, 40, 3600.0);
|
|
}
|
|
if (sItemTag=="HP_ITEM_50")
|
|
{
|
|
ApplyAdditionalHP(oPC, 50, 3600.0);
|
|
}
|
|
if (sItemTag=="HP_ITEM_75")
|
|
{
|
|
ApplyAdditionalHP(oPC, 75, 3600.0);
|
|
}
|
|
if (sItemTag=="HP_ITEM_85")
|
|
{
|
|
ApplyAdditionalHP(oPC, 100, 3600.0);
|
|
}
|
|
if (sItemTag=="HP_ITEM_100")
|
|
{
|
|
ApplyAdditionalHP(oPC, 100, 3600.0);
|
|
}
|
|
if (sItemTag=="HP_ITEM_200")
|
|
{
|
|
ApplyAdditionalHP(oPC, 200, 3600.0);
|
|
}
|
|
if (sItemTag=="HP_ITEM_500")
|
|
{
|
|
ApplyAdditionalHP(oPC, 500, 3600.0);
|
|
}
|
|
|
|
if (sItemTag=="VampireFang")
|
|
{
|
|
AdjustReputation(oActivator, oTarget, -100);
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY), oTarget);
|
|
int nStaffDamage = d20(1) * 10 + 50;
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(nStaffDamage,DAMAGE_TYPE_MAGICAL, DAMAGE_POWER_NORMAL), oTarget, 0.0f);
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectHeal(nStaffDamage), oActivator, 0.0f);
|
|
}
|
|
if (sItemTag=="RodofHolyIntervention")
|
|
{
|
|
CreateObject(OBJECT_TYPE_CREATURE, "guardianofquenli", lTarget);
|
|
}
|
|
|
|
if (sItemTag == "wiztpstaff")//check if the activated item was the staff
|
|
{
|
|
if (GetLevelByClass(CLASS_TYPE_WIZARD, oActivator) >= 7)//check if player has sufficient level
|
|
{
|
|
AssignCommand (oActivator, ActionStartConversation (oActivator, "wiz_teleport", FALSE));
|
|
SetLocalInt (oActivator, "wiz_level", GetLevelByClass(CLASS_TYPE_WIZARD, oActivator)); //set the level to check later if he can teleport to that area
|
|
}
|
|
}
|
|
|
|
if (sItemTag == "DiceBag")
|
|
{
|
|
object oPlaceable = CreateObject(OBJECT_TYPE_PLACEABLE, "dicebag", lActivator);
|
|
DelayCommand(1.0, AssignCommand(oPlaceable, ActionStartConversation(oActivator, "", TRUE)));
|
|
}
|
|
|
|
//dmw_activate
|
|
|
|
// ** This script goes in the OnItemActivation event of your Module
|
|
// ** Properties. It checks to see if the item used is a DM Helper
|
|
// ** And if so, and the user isnt a DM, destroys it, otherwise it
|
|
// ** Starts the DM Helper working. "dmw_inc" contains the actual
|
|
// ** code that controls the Helpers effects. If you update anything
|
|
// ** in it, you must recompile the calling dmw_<name> script to make
|
|
// ** the change take effect.
|
|
|
|
if(GetTag(oItem)=="DMsHelper")
|
|
{
|
|
// Test to make sure the activator is a DM, or is a DM
|
|
// controlling a creature.
|
|
if(GetIsDM(oActivator) != TRUE)
|
|
{
|
|
object oTest = GetFirstPC();
|
|
string sTestName = GetPCPlayerName(oActivator);
|
|
int nFound = FALSE;
|
|
while (GetIsObjectValid(oTest) && (! nFound))
|
|
{
|
|
if (GetPCPlayerName(oTest) == sTestName)
|
|
{
|
|
if(GetIsDM(oTest))
|
|
{
|
|
nFound = TRUE;
|
|
}
|
|
else
|
|
{
|
|
DestroyObject(oItem);
|
|
SendMessageToPC(oActivator,"You are mortal and this is not yours!");
|
|
return;
|
|
}
|
|
}
|
|
oTest=GetNextPC();
|
|
}
|
|
}
|
|
// get the wand's activator and target, put target info into local vars on activator
|
|
object oMyActivator = GetItemActivator();
|
|
object oMyTarget = GetItemActivatedTarget();
|
|
SetLocalObject(oMyActivator, "dmwandtarget", oMyTarget);
|
|
location lMyLoc = GetItemActivatedTargetLocation();
|
|
SetLocalLocation(oMyActivator, "dmwandloc", lMyLoc);
|
|
|
|
//Make the activator start a conversation with itself
|
|
AssignCommand(oMyActivator, ActionStartConversation(oMyActivator, "dmwand", TRUE));
|
|
return;
|
|
}
|
|
|
|
if(GetTag(oItem)=="AutoFollow")
|
|
{
|
|
object oTarget = GetItemActivatedTarget();
|
|
|
|
if(GetIsObjectValid(oTarget))
|
|
{
|
|
AssignCommand ( oActivator, ActionForceFollowObject(oTarget));
|
|
}
|
|
return;
|
|
}
|
|
|
|
if(GetTag(oItem)=="WandOfFX")
|
|
{
|
|
|
|
// get the wand's activator and target, put target info into local vars on activator
|
|
object oDM = GetItemActivator();
|
|
object oMyTarget = GetItemActivatedTarget();
|
|
SetLocalObject(oDM, "FXWandTarget", oMyTarget);
|
|
location lTargetLoc = GetItemActivatedTargetLocation();
|
|
SetLocalLocation(oDM, "FXWandLoc", lTargetLoc);
|
|
|
|
object oTest=GetFirstPC();
|
|
string sTestName = GetPCPlayerName(oDM);
|
|
// Test to make sure the activator is a DM, or is a DM
|
|
// controlling a creature.
|
|
|
|
if(GetIsDM(oDM) != TRUE)
|
|
{
|
|
object oTest = GetFirstPC();
|
|
string sTestName = GetPCPlayerName(oDM);
|
|
int nFound = FALSE;
|
|
while (GetIsObjectValid(oTest) && (! nFound))
|
|
{
|
|
if (GetPCPlayerName(oTest) == sTestName)
|
|
{
|
|
if(GetIsDM(oTest))
|
|
{
|
|
nFound = TRUE;
|
|
}
|
|
else
|
|
{
|
|
DestroyObject(oItem);
|
|
SendMessageToPC(oDM,"You are mortal and this is not yours!");
|
|
return;
|
|
}
|
|
}
|
|
oTest=GetNextPC();
|
|
}
|
|
}
|
|
|
|
//Make the activator start a conversation with itself
|
|
AssignCommand(oDM, ActionStartConversation(oDM, "fxwand", TRUE));
|
|
return;
|
|
|
|
}
|
|
if(GetTag(oItem)=="EmoteWand")
|
|
{
|
|
AssignCommand(oActivator, ActionStartConversation(oActivator, "emotewand", TRUE));
|
|
return;
|
|
}
|
|
if(GetTag(oItem)=="MinosianQuiver")
|
|
{
|
|
CreateItemOnObject("minosianbolt", oActivator, 99);
|
|
}
|
|
if(GetTag(oItem)=="DrowQuiver")
|
|
{
|
|
CreateItemOnObject("drowarrow", oActivator, 99);
|
|
}
|
|
if(GetTag(oItem)=="StaffofNature1")
|
|
{
|
|
if (GetLevelByClass(CLASS_TYPE_DRUID, oActivator) >= 2)
|
|
{
|
|
CreateObject(OBJECT_TYPE_CREATURE,"druidservant1",lTarget);
|
|
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_LIGHTNING_M), lTarget);
|
|
}
|
|
}
|
|
if(GetTag(oItem)=="StaffofNature2")
|
|
{
|
|
if (GetLevelByClass(CLASS_TYPE_DRUID, oActivator) >= 8)
|
|
{
|
|
CreateObject(OBJECT_TYPE_CREATURE,"druidservant2",lTarget);
|
|
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_LIGHTNING_M), lTarget);
|
|
}
|
|
}
|
|
if(GetTag(oItem)=="StaffofNature3")
|
|
{
|
|
if (GetLevelByClass(CLASS_TYPE_DRUID, oActivator) >= 15)
|
|
{
|
|
CreateObject(OBJECT_TYPE_CREATURE,"druidservant3",lTarget);
|
|
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_LIGHTNING_M), lTarget);
|
|
}
|
|
}
|
|
if(GetTag(oItem)=="StaffofNature4")
|
|
{
|
|
if (GetLevelByClass(CLASS_TYPE_DRUID, oActivator) >= 20)
|
|
{
|
|
CreateObject(OBJECT_TYPE_CREATURE,"druidservant4",lTarget);
|
|
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_LIGHTNING_M), lTarget);
|
|
}
|
|
}
|
|
if(GetTag(oItem)=="UhnitansRing")
|
|
{
|
|
CreateObject(OBJECT_TYPE_CREATURE,"biggaymino",lTarget);
|
|
}
|
|
if(GetTag(oItem)=="UhnitansRing2")
|
|
{
|
|
|
|
if (GetLevelByClass(CLASS_TYPE_CLERIC, oActivator) >= 19)
|
|
{
|
|
CreateObject(OBJECT_TYPE_CREATURE,"minoservant",lTarget);
|
|
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_FIREBALL), lTarget);
|
|
}
|
|
else if (GetLevelByClass(CLASS_TYPE_WIZARD, oActivator) >= 19)
|
|
{
|
|
CreateObject(OBJECT_TYPE_CREATURE,"madspark002",lTarget);
|
|
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_FIREBALL), lTarget);
|
|
}
|
|
else if (GetLevelByClass(CLASS_TYPE_SORCERER, oActivator) >= 19)
|
|
{
|
|
CreateObject(OBJECT_TYPE_CREATURE,"madspark003",lTarget);
|
|
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_FIREBALL), lTarget);
|
|
}
|
|
else
|
|
{
|
|
CreateObject(OBJECT_TYPE_CREATURE,"minoservant001",lTarget);
|
|
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_DUR_MIND_AFFECTING_NEGATIVE), lTarget);
|
|
}
|
|
}
|
|
if(GetTag(oItem)=="HornofCalling")
|
|
{
|
|
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_BEAM_HOLY), lTarget);
|
|
CreateObject(OBJECT_TYPE_CREATURE,"KamerickWarrior",lActivator);
|
|
ActionDoCommand(PlaySound("as_cv_flute1"));
|
|
}
|
|
|
|
if(GetTag(oItem)=="OphindalsJournal")
|
|
{
|
|
int nDiceRoll = d100(1);
|
|
if(nDiceRoll <= 30)
|
|
{
|
|
CreateObject(OBJECT_TYPE_CREATURE,"ophindic1",lActivator);
|
|
}
|
|
else if(nDiceRoll <= 55)
|
|
{
|
|
CreateObject(OBJECT_TYPE_CREATURE,"ophindic2",lActivator);
|
|
}
|
|
else if(nDiceRoll <= 75)
|
|
{
|
|
CreateObject(OBJECT_TYPE_CREATURE,"ophindic3",lActivator);
|
|
}
|
|
else if(nDiceRoll <= 90)
|
|
{
|
|
CreateObject(OBJECT_TYPE_CREATURE,"ophindic004",lActivator);
|
|
}
|
|
else
|
|
{
|
|
CreateObject(OBJECT_TYPE_CREATURE,"ophindic5",lActivator);
|
|
}
|
|
}
|
|
if(GetTag(oItem)== "Drum")
|
|
{
|
|
int iBard = GetLevelByClass(CLASS_TYPE_BARD, oPC);
|
|
if (iBard >0)
|
|
{
|
|
if (iTotal >= 20) //DC for using a Drum is 15
|
|
{
|
|
int i;
|
|
int done;
|
|
effect eHaste;
|
|
object oGroup;
|
|
effect eCast = EffectVisualEffect(VFX_IMP_HASTE);
|
|
FloatingTextStringOnCreature("*Bard Song Success*", oPC, TRUE);
|
|
SendMessageToPC(oPC, "Skill Roll: " + sTotal + ". Target DC 15");
|
|
eHaste = EffectHaste();
|
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eSong, oPC, 18.0);
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, eCast, oPC);
|
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eHaste, oPC, 18.0);
|
|
for (i = 0; i < 6 && !done; i++) //Apply Bardsong to up to 6 faction members (PCs) within 30 meters
|
|
{
|
|
oGroup = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, oPC, i);
|
|
if ( oGroup != OBJECT_INVALID && (GetDistanceBetween(oPC, oGroup) <= 30.0) )
|
|
{
|
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eHaste, oGroup, 18.0);
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, eCast, oGroup);
|
|
}
|
|
else
|
|
{
|
|
done = TRUE;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
FloatingTextStringOnCreature("*Bard Song Failure*", oPC, TRUE);
|
|
SendMessageToPC(oPC, "Skill Roll: " + sTotal + ". Target DC 15");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
AssignCommand(oPC, ActionSpeakString("Only a bard has the experience to use this item properly."));
|
|
}
|
|
}
|
|
|
|
if(GetTag(oItem)=="Mandolin")
|
|
{
|
|
int iBard = GetLevelByClass(CLASS_TYPE_BARD, oPC);
|
|
if (iBard > 0)
|
|
{
|
|
if (iTotal >= 20) //DC for using a Mandolin is 15
|
|
{
|
|
int i;
|
|
int done;
|
|
effect eRegen;
|
|
object oGroup;
|
|
effect eCast = EffectVisualEffect(VFX_IMP_HEALING_G);
|
|
FloatingTextStringOnCreature("*Bard Song Success*", oPC, TRUE);
|
|
SendMessageToPC(oPC, "Skill Roll: " + sTotal + ". Target DC 15");
|
|
eRegen = EffectRegenerate(1, 3.0);
|
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eSong, oPC, 18.0);
|
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eRegen, oPC, 18.0);
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, eCast, oPC);
|
|
for (i = 0; i < 6 && !done; i++) //Apply Bardsong to up to 6 faction members (PCs) within 30 meters
|
|
{
|
|
oGroup = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, oPC, i);
|
|
if ( oGroup != OBJECT_INVALID && (GetDistanceBetween(oPC, oGroup) <= 30.0) )
|
|
{
|
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eRegen, oGroup, 18.0);
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, eCast, oGroup);
|
|
}
|
|
else
|
|
{
|
|
done = TRUE;
|
|
}
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
FloatingTextStringOnCreature("*Bard Song Failure*", oPC, TRUE);
|
|
SendMessageToPC(oPC, "Skill Roll: " + sTotal + ". Target DC 15");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
AssignCommand(oPC, ActionSpeakString("Only a bard has the experience to use this item properly."));
|
|
}
|
|
}
|
|
|
|
if(GetTag(oItem)=="Pipes")
|
|
{
|
|
int iBard = GetLevelByClass(CLASS_TYPE_BARD, oPC);
|
|
if (iBard > 0)
|
|
{
|
|
if (iTotal >=20) //DC for using Pipes is 18
|
|
{
|
|
int i;
|
|
int done;
|
|
effect eInvis;
|
|
object oGroup;
|
|
FloatingTextStringOnCreature("*Bard Song Success*", oPC, TRUE);
|
|
SendMessageToPC(oPC, "Skill Roll: " + sTotal + ". Target DC 18");
|
|
eInvis = EffectInvisibility(INVISIBILITY_TYPE_NORMAL);
|
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eSong, oPC, 18.0);
|
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eInvis, oPC, 18.0);
|
|
for (i = 0; i < 6 && !done; i++) //Apply Bardsong to up to 6 faction members (PCs) within 30 meters
|
|
{
|
|
oGroup = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, oPC, i);
|
|
if ( oGroup != OBJECT_INVALID && (GetDistanceBetween(oPC, oGroup) <= 30.0) )
|
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eInvis, oGroup, 18.0);
|
|
else
|
|
done = TRUE;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
FloatingTextStringOnCreature("*Bard Song Failure*", oPC, TRUE);
|
|
SendMessageToPC(oPC, "Skill Roll: " + sTotal + ". Target DC 18");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
AssignCommand(oPC, ActionSpeakString("Only a bard has the experience to use this item properly."));
|
|
}
|
|
}
|
|
|
|
if(GetTag(oItem)=="Horn")
|
|
{
|
|
int iBard = GetLevelByClass(CLASS_TYPE_BARD, oPC);
|
|
if (iBard > 0)
|
|
{
|
|
if (iTotal >=20) //DC for using a Horn is 18
|
|
{
|
|
int i;
|
|
int done;
|
|
effect eShield;
|
|
object oGroup;
|
|
effect eCast = EffectVisualEffect(VFX_IMP_AC_BONUS);
|
|
FloatingTextStringOnCreature("*Bard Song Success*", oPC, TRUE);
|
|
SendMessageToPC(oPC, "Skill Roll: " + sTotal + ". Target DC 18");
|
|
eShield = EffectDamageShield(1, DAMAGE_BONUS_1d10, DAMAGE_TYPE_SONIC);
|
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eSong, oPC, 18.0);
|
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eShield, oPC, 18.0);
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, eCast, oPC);
|
|
for (i = 0; i < 6 && !done; i++) //Apply Bardsong to up to 6 faction members (PCs) within 30 meters
|
|
{
|
|
oGroup = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, oPC, i);
|
|
if ( oGroup != OBJECT_INVALID && (GetDistanceBetween(oPC, oGroup) <= 30.0) )
|
|
{
|
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eShield, oGroup, 18.0);
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, eCast, oGroup);
|
|
}
|
|
else
|
|
{
|
|
done = TRUE;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
FloatingTextStringOnCreature("*Bard Song Failure*", oPC, TRUE);
|
|
SendMessageToPC(oPC, "Skill Roll: " + sTotal + ". Target DC 18");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
AssignCommand(oPC, ActionSpeakString("Only a bard has the experience to use this item properly."));
|
|
}
|
|
}
|
|
|
|
if(GetTag(oItem)=="Harp")
|
|
{
|
|
int iBard = GetLevelByClass(CLASS_TYPE_BARD, oPC);
|
|
if (iBard > 0)
|
|
{
|
|
if (iTotal >=20) //DC for using a Harp is 21
|
|
{
|
|
int i;
|
|
int done;
|
|
effect eSpell;
|
|
object oGroup;
|
|
effect eCast = EffectVisualEffect(VFX_IMP_GLOBE_USE);
|
|
FloatingTextStringOnCreature("*Bard Song Success*", oPC, TRUE);
|
|
SendMessageToPC(oPC, "Skill Roll: " + sTotal + ". Target DC 21");
|
|
eSpell = EffectSpellImmunity(SPELL_ALL_SPELLS);
|
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eSong, oPC, 18.0);
|
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eSpell, oPC, 18.0);
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, eCast, oPC);
|
|
for (i = 0; i < 6 && !done; i++) //Apply Bardsong to up to 6 faction members (PCs) within 30 meters
|
|
{
|
|
oGroup = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, oPC, i);
|
|
if ( oGroup != OBJECT_INVALID && (GetDistanceBetween(oPC, oGroup) <= 30.0) )
|
|
{
|
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eSpell, oGroup, 18.0);
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, eCast, oGroup);
|
|
}
|
|
else
|
|
{
|
|
done = TRUE;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
FloatingTextStringOnCreature("*Bard Song Failure*", oPC, TRUE);
|
|
SendMessageToPC(oPC, "Skill Roll: " + sTotal + ". Target DC 21");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
AssignCommand(oPC, ActionSpeakString("Only a bard has the experience to use this item properly."));
|
|
}
|
|
}
|
|
}
|
|
|