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_ 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.")); } } }