public virtual void DoEffect(Point3D loc, Map map) { Effects.SendLocationParticles(EffectItem.Create(loc, map, EffectItem.DefaultDuration), 0x3709, 10, 30, 5052); Effects.PlaySound(loc, map, 0x225); }
public override void OnResponse(NetState sender, RelayInfo info) { if (info.ButtonID == 0 || m_Stone.IsEmpty) { return; } Mobile from = sender.Mobile; if (!m_Stone.CheckUse(from)) { return; } if (info.ButtonID == 1) // Remove skill points { from.SendGump(new ConfirmRemovalGump(m_Stone)); return; } SkillName skill = m_Stone.Skill; double skillValue = m_Stone.SkillValue; Skill fromSkill = from.Skills[m_Stone.Skill]; if (fromSkill.Lock != SkillLock.Up || (from.SkillsTotal - fromSkill.BaseFixedPoint + ((int)skillValue * 10) > from.SkillsCap)) { // <CENTER>Unable to Absorb Selected Skill from Soulstone</CENTER> /* You cannot absorb the selected skill from the Soulstone at this time. The selected * skill may be locked or set to lower in your skill menu. You may also be at your * total skill cap. Click on "Skills" in your paperdoll menu to check your * raise/locked/lower settings and your total skills. Make any needed adjustments, * then click "Continue". If you do not wish to transfer the selected skill at this * time, click "Cancel". */ from.SendGump(new ErrorGump(m_Stone, 1070717, 1070716)); return; } if (skillValue > fromSkill.Cap) { // <CENTER>Unable to Absorb Selected Skill from Soulstone</CENTER> /* The amount of skill stored in this stone exceeds your individual skill cap for * that skill. In order to retrieve the skill points stored in this stone, you must * obtain a Power Scroll of the appropriate type and level in order to increase your * skill cap. You cannot currently retrieve the skill points stored in this stone. */ from.SendGump(new ErrorGump(m_Stone, 1070717, 1070715)); return; } if (fromSkill.Base >= skillValue) { // <CENTER>Unable to Absorb Selected Skill from Soulstone</CENTER> /* You cannot transfer the selected skill to the Soulstone at this time. The selected * skill has a skill level higher than what is stored in the Soulstone. */ // Wrong message?! from.SendGump(new ErrorGump(m_Stone, 1070717, 1070802)); return; } fromSkill.Base = skillValue; m_Stone.SkillValue = 0.0; m_Stone.NextUse = DateTime.Now + UseDelay; if (m_Stone is SoulStoneFragment) { SoulStoneFragment ssf = m_Stone as SoulStoneFragment; ssf.UsesRemaining--; if (ssf.UsesRemaining == 0) { from.SendLocalizedMessage(1070974); // You have used up your soulstone fragment. } } else { from.SendLocalizedMessage(1070713); // You have successfully absorbed the Soulstone's skill points. Effects.SendLocationParticles(EffectItem.Create(from.Location, from.Map, EffectItem.DefaultDuration), 0, 0, 0, 0, 0, 5060, 0); Effects.PlaySound(from.Location, from.Map, 0x243); int k = (m_Stone is SoulStoneFragment) ? 3 : 1; for (int i = 1; i < k; i++) { Effects.SendMovingParticles(new Entity(Server.Serial.Zero, new Point3D(from.X - 6, from.Y - 6, from.Z + 15), from.Map), from, 0x36D4, 7, 0, false, true, 0x497, 0, 9502, 1, 0, (EffectLayer)255, 0x100); } Effects.SendTargetParticles(from, 0x375A, 35, 90, 0x00, 0x00, 9502, (EffectLayer)255, 0x100); } }
protected override void OnTick() { if (m_Item.Deleted) { return; } if (!m_Item.Visible) { if (m_InLOS && m_CanFit) { m_Item.Visible = true; } else { m_Item.Delete(); } if (!m_Item.Deleted) { m_Item.ProcessDelta(); Effects.SendLocationParticles(EffectItem.Create(m_Item.Location, m_Item.Map, EffectItem.DefaultDuration), 0x376A, 9, 10, 5029); } } else if (DateTime.UtcNow > m_Item.m_End) { m_Item.Delete(); Stop(); } else { Map map = m_Item.Map; Mobile caster = m_Item.m_Caster; if (map != null && caster != null) { foreach (Mobile m in m_Item.GetMobilesInRange(0)) { if ((m.Z + 16) > m_Item.Z && (m_Item.Z + 12) > m.Z && (!Core.AOS || m != caster) && SpellHelper.ValidIndirectTarget(caster, m) && caster.CanBeHarmful(m, false)) { m_Queue.Enqueue(m); } } while (m_Queue.Count > 0) { int damage = m_Item.m_Damage; if (damage > 0) { Mobile m = (Mobile)m_Queue.Dequeue(); if (SpellHelper.CanRevealCaster(m)) { caster.RevealingAction(); } caster.DoHarmful(m); if (!Core.AOS && m.CheckSkill(SkillName.MagicResist, 0.0, 30.0)) { damage = 1; m.SendLocalizedMessage(501783); // You feel yourself resisting magical energy. } AOS.Damage(m, caster, damage, 0, 100, 0, 0, 0); m.PlaySound(0x208); if (m is BaseCreature) { ((BaseCreature)m).OnHarmfulSpell(caster); } } } } } }
protected override TimeSpan Play(int step) { switch (step) { case 0: { Effects.PlaySound(Location, Map, 0x106); Effects.SendLocationParticles(EffectItem.Create(Location, Map, EffectItem.DefaultDuration), 0x3735, 1, 182, 0xBE3); return(TimeSpan.FromSeconds(4.0)); } case 1: { Effects.PlaySound(Location, Map, 0x222); return(TimeSpan.FromSeconds(4.0)); } case 2: { Effects.PlaySound(Location, Map, 0x21F); return(TimeSpan.FromSeconds(5.0)); } case 3: { EffectItem dummy = EffectItem.Create(Location, Map, TimeSpan.FromSeconds(20.0)); dummy.PublicOverheadMessage(MessageType.Regular, 0x3B2, true, "* The ground erupts with chaotic growth! *"); Effects.PlaySound(Location, Map, 0x12D); SpawnReagents(); SpawnReagents(); return(TimeSpan.FromSeconds(2.0)); } case 4: { Effects.PlaySound(Location, Map, 0x12D); SpawnReagents(); SpawnReagents(); return(TimeSpan.FromSeconds(2.0)); } case 5: { Effects.PlaySound(Location, Map, 0x12D); SpawnReagents(); SpawnReagents(); return(TimeSpan.FromSeconds(3.0)); } default: { Effects.PlaySound(Location, Map, 0x12D); SpawnReagents(); SpawnReagents(); return(TimeSpan.Zero); } } }
public override void OnDoubleClick(Mobile from) { if (from.Talisman != this) { from.SendLocalizedMessage(502641); // You must equip this item to use it. } else if (m_ChargeTime > 0) { from.SendLocalizedMessage(1074882, m_ChargeTime.ToString()); // You must wait ~1_val~ seconds for this to recharge. } else if (m_Charges == 0 && m_MaxCharges > 0) { from.SendLocalizedMessage(1042544); // This item is out of charges. } else { Type type = GetSummoner(); if (m_Summoner != null && !m_Summoner.IsEmpty) { type = m_Summoner.Type; } if (type != null) { object obj; try { obj = Activator.CreateInstance(type); } catch { obj = null; } if (obj is Item) { Item item = (Item)obj; int count = 1; if (m_Summoner != null && m_Summoner.Amount > 1) { if (item.Stackable) { item.Amount = m_Summoner.Amount; } else { count = m_Summoner.Amount; } } if (from.Backpack == null || count * item.Weight > from.Backpack.MaxWeight || from.Backpack.Items.Count + count > from.Backpack.MaxItems) { from.SendLocalizedMessage(500720); // You don't have enough room in your backpack! item.Delete(); item = null; return; } for (int i = 0; i < count; i++) { from.PlaceInBackpack(item); if (i + 1 < count) { item = Activator.CreateInstance(type) as Item; } } if (item is Board) { from.SendLocalizedMessage(1075000); // You have been given some wooden boards. } else if (item is IronIngot) { from.SendLocalizedMessage(1075001); // You have been given some ingots. } else if (item is Bandage) { from.SendLocalizedMessage(1075002); // You have been given some clean bandages. } else if (m_Summoner != null && m_Summoner.Name != null) { from.SendLocalizedMessage(1074853, m_Summoner.Name.ToString()); // You have been given ~1_name~ } } else if (obj is BaseCreature) { BaseCreature mob = (BaseCreature)obj; if ((m_Creature != null && !m_Creature.Deleted) || from.Followers + mob.ControlSlots > from.FollowersMax) { from.SendLocalizedMessage(1074270); // You have too many followers to summon another one. mob.Delete(); return; } BaseCreature.Summon(mob, from, from.Location, mob.BaseSoundID, TimeSpan.FromMinutes(10)); Effects.SendLocationParticles(EffectItem.Create(mob.Location, mob.Map, EffectItem.DefaultDuration), 0x3728, 1, 10, 0x26B6); mob.Summoned = false; mob.ControlOrder = OrderType.Friend; m_Creature = mob; } OnAfterUse(from); } if (m_Removal != TalismanRemoval.None) { from.Target = new TalismanTarget(this); } } }
public override bool OnMoveOver(Mobile m) { bool hurts = true; if (m.Blessed) { hurts = false; } if (!m.Alive) { hurts = false; } if (owner is BaseCreature && m is BaseCreature) { BaseCreature bc = (BaseCreature)m; if (!bc.Controlled) { hurts = false; } } if (hurts) { SlayerEntry SilverSlayer = SlayerGroup.GetEntryByName(SlayerName.Silver); SlayerEntry ExorcismSlayer = SlayerGroup.GetEntryByName(SlayerName.Exorcism); if (this.Name == "hot magma" && !(m is MagmaElemental)) { owner.DoHarmful(m); Effects.SendLocationParticles(EffectItem.Create(m.Location, m.Map, EffectItem.DefaultDuration), 0x3709, 10, 30, 5052); Effects.PlaySound(m.Location, m.Map, 0x225); AOS.Damage(m, owner, Hurt(owner, 24, 48), 0, 100, 0, 0, 0); // Ph, Fr, Cd, Ps, Eg } else if (this.Name == "quick silver") { owner.DoHarmful(m); Effects.PlaySound(m.Location, m.Map, 0x4D1); AOS.Damage(m, owner, Hurt(owner, 24, 48), 50, 0, 0, 0, 50); // Ph, Fr, Cd, Ps, Eg } else if (this.Name == "holy water" && (SilverSlayer.Slays(m) || ExorcismSlayer.Slays(m))) { owner.DoHarmful(m); Effects.SendLocationParticles(EffectItem.Create(m.Location, m.Map, EffectItem.DefaultDuration), 0x3709, 10, 30, 5052); Effects.PlaySound(m.Location, m.Map, 0x225); AOS.Damage(m, owner, Hurt(owner, 40, 60), 20, 20, 20, 20, 20); // Ph, Fr, Cd, Ps, Eg } else if (this.Name == "toxic goo" && !(m is RadiationDemon)) { owner.DoHarmful(m); Effects.SendLocationParticles(EffectItem.Create(m.Location, m.Map, EffectItem.DefaultDuration), 0x36B0, 1, 14, 63, 7, 9915, 0); int eSound = 0x229; if (m.Body == 0x190 && m is PlayerMobile) { eSound = 0x43F; } else if (m.Body == 0x191 && m is PlayerMobile) { eSound = 0x32D; } Effects.PlaySound(m.Location, m.Map, eSound); AOS.Damage(m, owner, Hurt(owner, 24, 48), 0, 0, 0, 50, 50); // Ph, Fr, Cd, Ps, Eg } else if (this.Name == "glowing goo" && !(m is GlowBeetle)) { owner.DoHarmful(m); Effects.SendLocationParticles(EffectItem.Create(m.Location, m.Map, EffectItem.DefaultDuration), 0x36B0, 1, 14, 63, 7, 9915, 0); int eSound = 0x229; if (m.Body == 0x190 && m is PlayerMobile) { eSound = 0x43F; } else if (m.Body == 0x191 && m is PlayerMobile) { eSound = 0x32D; } Effects.PlaySound(m.Location, m.Map, eSound); AOS.Damage(m, owner, Hurt(owner, 24, 48), 0, 0, 0, 50, 50); // Ph, Fr, Cd, Ps, Eg } else if (this.Name == "scorching ooze" && !(m is Lavapede)) { owner.DoHarmful(m); Effects.SendLocationParticles(EffectItem.Create(m.Location, m.Map, EffectItem.DefaultDuration), 0x36B0, 1, 14, 63, 7, 9915, 0); int eSound = 0x229; if (m.Body == 0x190 && m is PlayerMobile) { eSound = 0x43F; } else if (m.Body == 0x191 && m is PlayerMobile) { eSound = 0x32D; } Effects.PlaySound(m.Location, m.Map, eSound); AOS.Damage(m, owner, Hurt(owner, 24, 48), 0, 100, 0, 0, 0); // Ph, Fr, Cd, Ps, Eg } else if (this.Name == "blue slime" && !(m is SlimeDevil)) { owner.DoHarmful(m); Effects.PlaySound(m.Location, m.Map, 0x4D1); AOS.Damage(m, owner, Hurt(owner, 24, 48), 0, 0, 100, 0, 0); // Ph, Fr, Cd, Ps, Eg } else if (this.Name == "swamp muck" && !(m is SwampThing)) { owner.DoHarmful(m); Effects.PlaySound(m.Location, m.Map, 0x4D1); AOS.Damage(m, owner, Hurt(owner, 24, 48), 50, 0, 0, 50, 0); // Ph, Fr, Cd, Ps, Eg } else if (this.Name == "poisonous slime" && !(m is AbyssCrawler)) { owner.DoHarmful(m); Effects.PlaySound(m.Location, m.Map, 0x4D1); AOS.Damage(m, owner, Hurt(owner, 24, 48), 0, 0, 0, 100, 0); // Ph, Fr, Cd, Ps, Eg } else if (this.Name == "poison spit" && !(m is Neptar) && !(m is NeptarWizard)) { owner.DoHarmful(m); Effects.PlaySound(m.Location, m.Map, 0x4D1); AOS.Damage(m, owner, Hurt(owner, 24, 48), 0, 0, 0, 100, 0); // Ph, Fr, Cd, Ps, Eg } else if (this.Name == "poison spittle" && !(m is Lurker)) { owner.DoHarmful(m); Effects.PlaySound(m.Location, m.Map, 0x4D1); AOS.Damage(m, owner, Hurt(owner, 24, 48), 0, 0, 0, 100, 0); // Ph, Fr, Cd, Ps, Eg } else if (this.Name == "fungal slime" && !(m is Fungal) && !(m is FungalMage)) { owner.DoHarmful(m); Effects.PlaySound(m.Location, m.Map, 0x4D1); AOS.Damage(m, owner, Hurt(owner, 24, 48), 50, 0, 0, 50, 0); // Ph, Fr, Cd, Ps, Eg } else if (this.Name == "spider ooze" && !(m is ZombieSpider)) { owner.DoHarmful(m); Effects.PlaySound(m.Location, m.Map, 0x4D1); AOS.Damage(m, owner, Hurt(owner, 24, 48), 50, 0, 0, 50, 0); // Ph, Fr, Cd, Ps, Eg } else if (this.Name == "acidic slime" && !(m is ToxicElemental)) { owner.DoHarmful(m); Effects.PlaySound(m.Location, m.Map, 0x231); AOS.Damage(m, owner, Hurt(owner, 24, 48), 50, 0, 0, 50, 0); // Ph, Fr, Cd, Ps, Eg } else if (this.Name == "acidic ichor" && !(m is AntaurKing) && !(m is AntaurProgenitor) && !(m is AntaurSoldier) && !(m is AntaurWorker)) { owner.DoHarmful(m); Effects.PlaySound(m.Location, m.Map, 0x231); AOS.Damage(m, owner, Hurt(owner, 24, 48), 50, 0, 0, 50, 0); // Ph, Fr, Cd, Ps, Eg } else if (this.Name == "thick blood" && !(m is BloodElemental) && !(m is BloodDemon)) { owner.DoHarmful(m); Effects.SendLocationParticles(EffectItem.Create(m.Location, m.Map, EffectItem.DefaultDuration), 0x36B0, 1, 14, 0x25, 7, 9915, 0); int eSound = 0x229; if (m.Body == 0x190 && m is PlayerMobile) { eSound = 0x43F; } else if (m.Body == 0x191 && m is PlayerMobile) { eSound = 0x32D; } Effects.PlaySound(m.Location, m.Map, eSound); AOS.Damage(m, owner, Hurt(owner, 24, 48), 0, 0, 0, 100, 0); // Ph, Fr, Cd, Ps, Eg } else if (this.Name == "infected blood" && !(m is Infected)) { owner.DoHarmful(m); Effects.SendLocationParticles(EffectItem.Create(m.Location, m.Map, EffectItem.DefaultDuration), 0x36B0, 1, 14, 0x25, 7, 9915, 0); int eSound = 0x229; if (m.Body == 0x190 && m is PlayerMobile) { eSound = 0x43F; } else if (m.Body == 0x191 && m is PlayerMobile) { eSound = 0x32D; } Effects.PlaySound(m.Location, m.Map, eSound); AOS.Damage(m, owner, Hurt(owner, 24, 48), 0, 0, 0, 100, 0); // Ph, Fr, Cd, Ps, Eg } else if (this.Name == "alien blood" && !(m is Xenomorph) && !(m is Xenomutant)) { owner.DoHarmful(m); Effects.SendLocationParticles(EffectItem.Create(m.Location, m.Map, EffectItem.DefaultDuration), 0x36B0, 1, 14, 0x25, 7, 9915, 0); int eSound = 0x229; if (m.Body == 0x190 && m is PlayerMobile) { eSound = 0x43F; } else if (m.Body == 0x191 && m is PlayerMobile) { eSound = 0x32D; } Effects.PlaySound(m.Location, m.Map, eSound); AOS.Damage(m, owner, Hurt(owner, 24, 48), 20, 20, 20, 20, 20); // Ph, Fr, Cd, Ps, Eg } else if (this.Name == "green blood" && !(m is ZombieGiant)) { owner.DoHarmful(m); Effects.SendLocationParticles(EffectItem.Create(m.Location, m.Map, EffectItem.DefaultDuration), 0x36B0, 1, 14, 0x25, 7, 9915, 0); int eSound = 0x229; if (m.Body == 0x190 && m is PlayerMobile) { eSound = 0x43F; } else if (m.Body == 0x191 && m is PlayerMobile) { eSound = 0x32D; } Effects.PlaySound(m.Location, m.Map, eSound); AOS.Damage(m, owner, Hurt(owner, 24, 48), 20, 0, 0, 80, 0); // Ph, Fr, Cd, Ps, Eg } else if (this.Name == "toxic blood" && !(m is Mutant)) { owner.DoHarmful(m); Effects.SendLocationParticles(EffectItem.Create(m.Location, m.Map, EffectItem.DefaultDuration), 0x36B0, 1, 14, 0x25, 7, 9915, 0); int eSound = 0x229; if (m.Body == 0x190 && m is PlayerMobile) { eSound = 0x43F; } else if (m.Body == 0x191 && m is PlayerMobile) { eSound = 0x32D; } Effects.PlaySound(m.Location, m.Map, eSound); AOS.Damage(m, owner, Hurt(owner, 24, 48), 0, 0, 0, 100, 0); // Ph, Fr, Cd, Ps, Eg } else if (this.Name == "freezing water" && !(m is WaterElemental) && !(m is WaterWeird) && !(m is DeepWaterElemental) && !(m is Dagon)) { owner.DoHarmful(m); Effects.PlaySound(m.Location, m.Map, 0x4D1); AOS.Damage(m, owner, Hurt(owner, 20, 40), 0, 0, 100, 0, 0); // Ph, Fr, Cd, Ps, Eg } else if (this.Name == "deep water" && !(m is WaterElemental) && !(m is WaterWeird) && !(m is DeepWaterElemental) && !(m is Dagon)) { owner.DoHarmful(m); Effects.PlaySound(m.Location, m.Map, 0x4D1); AOS.Damage(m, owner, Hurt(owner, 40, 60), 0, 0, 100, 0, 0); // Ph, Fr, Cd, Ps, Eg } else if (this.Name == "lesser poison potion" || this.Name == "poison potion" || this.Name == "greater poison potion" | this.Name == "deadly poison potion" || this.Name == "lethal poison potion") { int pSkill = (int)(owner.Skills[SkillName.Poisoning].Value / 50); int tSkill = (int)(owner.Skills[SkillName.TasteID].Value / 33); int aSkill = (int)(owner.Skills[SkillName.Alchemy].Value / 33); int pMin = pSkill + tSkill + aSkill; int pMax = pMin * 2; int pLevel = 5; Poison pois = Poison.Lesser; if (this.Name == "poison potion") { pMin = pMin + 2; pMax = pMax + 2; pLevel = 4; pois = Poison.Regular; } else if (this.Name == "greater poison potion") { pMin = pMin + 3; pMax = pMax + 3; pLevel = 3; pois = Poison.Greater; } else if (this.Name == "deadly poison potion") { pMin = pMin + 4; pMax = pMax + 4; pLevel = 2; pois = Poison.Deadly; } else if (this.Name == "lethal poison potion") { pMin = pMin + 5; pMax = pMax + 5; pLevel = 1; pois = Poison.Lethal; } if (pMin >= Utility.RandomMinMax(1, 16)) { m.ApplyPoison(owner, pois); } owner.DoHarmful(m); Effects.PlaySound(m.Location, m.Map, 0x4D1); AOS.Damage(m, owner, Hurt(owner, pMin, pMax), 0, 0, 0, 100, 0); // Ph, Fr, Cd, Ps, Eg } else if (this.Name == "liquid fire") { int liqMin = Server.Items.BaseLiquid.GetLiquidBonus(owner); int liqMax = liqMin * 2; owner.DoHarmful(m); Effects.SendLocationEffect(m.Location, m.Map, 0x3709, 30, 10); m.PlaySound(0x208); AOS.Damage(m, owner, Hurt(owner, liqMin, liqMax), 20, 80, 0, 0, 0); // Ph, Fr, Cd, Ps, Eg } else if (this.Name == "liquid goo") { int liqMin = Server.Items.BaseLiquid.GetLiquidBonus(owner); int liqMax = liqMin * 2; owner.DoHarmful(m); Effects.SendLocationEffect(m.Location, m.Map, Utility.RandomList(0x3967, 0x3979), 30, 10); m.PlaySound(0x5C3); AOS.Damage(m, owner, Hurt(owner, liqMin, liqMax), 20, 0, 0, 0, 80); // Ph, Fr, Cd, Ps, Eg } else if (this.Name == "liquid ice") { int liqMin = Server.Items.BaseLiquid.GetLiquidBonus(owner); int liqMax = liqMin * 2; owner.DoHarmful(m); Effects.SendLocationEffect(m.Location, m.Map, 0x1A84, 30, 10, 0x9C1, 0); m.PlaySound(0x10B); AOS.Damage(m, owner, Hurt(owner, liqMin, liqMax), 20, 0, 80, 0, 0); // Ph, Fr, Cd, Ps, Eg } else if (this.Name == "liquid rot") { int liqMin = Server.Items.BaseLiquid.GetLiquidBonus(owner); int liqMax = liqMin * 2; owner.DoHarmful(m); Effects.SendLocationEffect(m.Location, m.Map, 0x3400, 60); Effects.PlaySound(m.Location, m.Map, 0x108); AOS.Damage(m, owner, Hurt(owner, liqMin, liqMax), 20, 0, 0, 80, 0); // Ph, Fr, Cd, Ps, Eg } else if (this.Name == "liquid pain") { int liqMin = Server.Items.BaseLiquid.GetLiquidBonus(owner); int liqMax = liqMin * 2; owner.DoHarmful(m); m.FixedParticles(0x37C4, 1, 8, 9916, 39, 3, EffectLayer.Head); m.FixedParticles(0x37C4, 1, 8, 9502, 39, 4, EffectLayer.Head); m.PlaySound(0x210); AOS.Damage(m, owner, Hurt(owner, liqMin, liqMax), 80, 5, 5, 5, 5); // Ph, Fr, Cd, Ps, Eg } } return(true); }
protected override void OnTarget(Mobile from, object o) { if (m_Talisman == null || m_Talisman.Deleted) { return; } Mobile target = o as Mobile; if (from.Talisman != m_Talisman) { from.SendLocalizedMessage(502641); // You must equip this item to use it. } else if (target == null) { from.SendLocalizedMessage(1046439); // That is not a valid target. } else if (m_Talisman.ChargeTime > 0) { from.SendLocalizedMessage(1074882, m_Talisman.ChargeTime.ToString()); // You must wait ~1_val~ seconds for this to recharge. } else if (m_Talisman.Charges == 0 && m_Talisman.MaxCharges > 0) { from.SendLocalizedMessage(1042544); // This item is out of charges. } else { switch (m_Talisman.Removal) { case TalismanRemoval.Curse: target.PlaySound(0xF6); target.PlaySound(0x1F7); target.FixedParticles(0x3709, 1, 30, 9963, 13, 3, EffectLayer.Head); IEntity mfrom = new Entity(Serial.Zero, new Point3D(target.X, target.Y, target.Z - 10), from.Map); IEntity mto = new Entity(Serial.Zero, new Point3D(target.X, target.Y, target.Z + 50), from.Map); Effects.SendMovingParticles(mfrom, mto, 0x2255, 1, 0, false, false, 13, 3, 9501, 1, 0, EffectLayer.Head, 0x100); StatMod mod; mod = target.GetStatMod("[Magic] Str Offset"); if (mod != null && mod.Offset < 0) { target.RemoveStatMod("[Magic] Str Offset"); } mod = target.GetStatMod("[Magic] Dex Offset"); if (mod != null && mod.Offset < 0) { target.RemoveStatMod("[Magic] Dex Offset"); } mod = target.GetStatMod("[Magic] Int Offset"); if (mod != null && mod.Offset < 0) { target.RemoveStatMod("[Magic] Int Offset"); } target.Paralyzed = false; EvilOmenSpell.TryEndEffect(target); StrangleSpell.RemoveCurse(target); CorpseSkinSpell.RemoveCurse(target); CurseSpell.RemoveEffect(target); BuffInfo.RemoveBuff(target, BuffIcon.Clumsy); BuffInfo.RemoveBuff(target, BuffIcon.FeebleMind); BuffInfo.RemoveBuff(target, BuffIcon.Weaken); BuffInfo.RemoveBuff(target, BuffIcon.MassCurse); target.SendLocalizedMessage(1072408); // Any curses on you have been lifted if (target != from) { from.SendLocalizedMessage(1072409); // Your targets curses have been lifted } break; case TalismanRemoval.Damage: target.PlaySound(0x201); Effects.SendLocationParticles(EffectItem.Create(target.Location, target.Map, EffectItem.DefaultDuration), 0x3728, 1, 13, 0x834, 0, 0x13B2, 0); BleedAttack.EndBleed(target, true); MortalStrike.EndWound(target); BuffInfo.RemoveBuff(target, BuffIcon.Bleed); BuffInfo.RemoveBuff(target, BuffIcon.MortalStrike); target.SendLocalizedMessage(1072405); // Your lasting damage effects have been removed! if (target != from) { from.SendLocalizedMessage(1072406); // Your Targets lasting damage effects have been removed! } break; case TalismanRemoval.Ward: target.PlaySound(0x201); Effects.SendLocationParticles(EffectItem.Create(target.Location, target.Map, EffectItem.DefaultDuration), 0x3728, 1, 13, 0x834, 0, 0x13B2, 0); MagicReflectSpell.EndReflect(target); ReactiveArmorSpell.EndArmor(target); ProtectionSpell.EndProtection(target); target.SendLocalizedMessage(1072402); // Your wards have been removed! if (target != from) { from.SendLocalizedMessage(1072403); // Your target's wards have been removed! } break; case TalismanRemoval.Wildfire: // TODO break; } m_Talisman.OnAfterUse(from); } }
public override void OnResponse(NetState sender, RelayInfo info) { if (info.ButtonID == 0 || m_Stone.IsEmpty) { return; } Mobile from = sender.Mobile; if (!m_Stone.CheckUse(from)) { return; } if (info.ButtonID == 1) // Remove skill points { from.SendGump(new ConfirmRemovalGump(m_Stone)); return; } SkillName skill = m_Stone.Skill; double skillValue = m_Stone.SkillValue; Skill fromSkill = from.Skills[m_Stone.Skill]; /* If we have, say, 88.4 in our skill and the stone holds 100, we need * 11.6 free points. Also, if we're below our skillcap by, say, 8.2 points, * we only need 11.6 - 8.2 = 3.4 points. */ int requiredAmount = (int)(skillValue * 10) - fromSkill.BaseFixedPoint - (from.SkillsCap - from.SkillsTotal); bool cannotAbsorb = false; if (fromSkill.Lock != SkillLock.Up) { cannotAbsorb = true; } else if (requiredAmount > 0) { int available = 0; for (int i = 0; i < from.Skills.Length; ++i) { if (from.Skills[i].Lock != SkillLock.Down) { continue; } available += from.Skills[i].BaseFixedPoint; } if (requiredAmount > available) { cannotAbsorb = true; } } if (cannotAbsorb) { // <CENTER>Unable to Absorb Selected Skill from Soulstone</CENTER> /* You cannot absorb the selected skill from the Soulstone at this time. The selected * skill may be locked or set to lower in your skill menu. You may also be at your * total skill cap. Click on "Skills" in your paperdoll menu to check your * raise/locked/lower settings and your total skills. Make any needed adjustments, * then click "Continue". If you do not wish to transfer the selected skill at this * time, click "Cancel". */ from.SendGump(new ErrorGump(m_Stone, 1070717, 1070716)); return; } if (skillValue > fromSkill.Cap) { // <CENTER>Unable to Absorb Selected Skill from Soulstone</CENTER> /* The amount of skill stored in this stone exceeds your individual skill cap for * that skill. In order to retrieve the skill points stored in this stone, you must * obtain a Power Scroll of the appropriate type and level in order to increase your * skill cap. You cannot currently retrieve the skill points stored in this stone. */ from.SendGump(new ErrorGump(m_Stone, 1070717, 1070715)); return; } if (fromSkill.Base >= skillValue) { // <CENTER>Unable to Absorb Selected Skill from Soulstone</CENTER> /* You cannot transfer the selected skill to the Soulstone at this time. The selected * skill has a skill level higher than what is stored in the Soulstone. */ // Wrong message?! from.SendGump(new ErrorGump(m_Stone, 1070717, 1070802)); return; } #region Scroll of ALacrity PlayerMobile pm = from as PlayerMobile; if (pm.AcceleratedStart > DateTime.UtcNow) { // <CENTER>Unable to Absorb Selected Skill from Soulstone</CENTER> /*You may not use a soulstone while your character is under the effects of a Scroll of Alacrity.*/ // Wrong message?! from.SendGump(new ErrorGump(m_Stone, 1070717, 1078115)); return; } #endregion if (requiredAmount > 0) { for (int i = 0; i < from.Skills.Length; ++i) { if (from.Skills[i].Lock != SkillLock.Down) { continue; } if (requiredAmount >= from.Skills[i].BaseFixedPoint) { requiredAmount -= from.Skills[i].BaseFixedPoint; from.Skills[i].Base = 0.0; } else { from.Skills[i].BaseFixedPoint -= requiredAmount; break; } } } fromSkill.Base = skillValue; m_Stone.SkillValue = 0.0; from.SendLocalizedMessage(1070713); // You have successfully absorbed the Soulstone's skill points. m_Stone.LastUserName = from.Name; Effects.SendLocationParticles(EffectItem.Create(from.Location, from.Map, EffectItem.DefaultDuration), 0, 0, 0, 0, 0, 5060, 0); Effects.PlaySound(from.Location, from.Map, 0x243); Effects.SendMovingParticles(new Entity(Server.Serial.Zero, new Point3D(from.X - 6, from.Y - 6, from.Z + 15), from.Map), from, 0x36D4, 7, 0, false, true, 0x497, 0, 9502, 1, 0, (EffectLayer)255, 0x100); Effects.SendTargetParticles(from, 0x375A, 35, 90, 0x00, 0x00, 9502, (EffectLayer)255, 0x100); if (m_Stone is SoulstoneFragment) { SoulstoneFragment frag = m_Stone as SoulstoneFragment; if (--frag.UsesRemaining <= 0) { from.SendLocalizedMessage(1070974); // You have used up your soulstone fragment. } } }
public override void OnDoubleClick(Mobile from) { if (!from.InRange(Location, 3)) { from.SendLocalizedMessage(3000268); // that is too far away. } else if (from.Backpack != null) { Type needed; Item puzzle = null; Item key = from.Backpack.FindItemByType(typeof(MagicKey)); Item puzzleItem1 = from.Backpack.FindItemByType(typeof(MazePuzzleItem)); Item puzzleItem2 = from.Backpack.FindItemByType(typeof(MastermindPuzzleItem)); if (key == null) { int x = Utility.RandomMinMax(1095, 1099); int y = Utility.RandomMinMax(1178, 1179); int z = -1; Point3D loc = from.Location; Point3D p = new Point3D(x, y, z); BaseCreature.TeleportPets(from, p, Map.TerMur); from.MoveToWorld(p, Map.TerMur); from.PlaySound(0x1FE); Effects.SendLocationParticles(EffectItem.Create(loc, from.Map, EffectItem.DefaultDuration), 0x3728, 10, 10, 2023); Effects.SendLocationParticles(EffectItem.Create(p, from.Map, EffectItem.DefaultDuration), 0x3728, 10, 10, 5023); } if (puzzleItem1 != null || puzzleItem2 != null) { from.SendMessage("You already have a puzzle board."); return; } switch (m_PuzzleType) { default: case PuzzleType.WestBox: case PuzzleType.EastBox: needed = typeof(MagicKey); break; case PuzzleType.NorthBox: needed = typeof(GoldPuzzleKey); break; } Item item = from.Backpack.FindItemByType(needed); if (item != null && key is MagicKey) { if (m_PuzzleType == PuzzleType.NorthBox) { puzzle = new MastermindPuzzleItem((MagicKey)key); } else { puzzle = new MazePuzzleItem((MagicKey)key); } } if (puzzle != null) { if (!from.Backpack.TryDropItem(from, puzzle, true)) { puzzle.Delete(); } else { from.SendMessage("You recieve a puzzle board."); } } else { from.SendMessage("You do not have the required key to get that puzzle board."); } } }
protected override void OnTarget(Mobile from, object targeted) { if (m_Potion.Deleted || m_Potion.Map == Map.Internal) { return; } IPoint3D p = targeted as IPoint3D; if (p == null) { return; } Map map = from.Map; if (map == null) { return; } SpellHelper.GetSurfaceTop(ref p); from.RevealingAction(); IEntity to; if (p is Mobile) { to = (Mobile)p; } else { to = new Entity(Serial.Zero, new Point3D(p), map); } Effects.SendMovingEffect(from, to, m_Potion.ItemID & 0x3FFF, 7, 0, false, false, m_Potion.Hue, 0); Effects.SendLocationParticles(EffectItem.Create(new Point3D(p.X, p.Y, p.Z), from.Map, EffectItem.DefaultDuration), 0x376A, 9, 4, 0, 0, 0x13AE, 0); int length = 0; switch (m_Potion.AreaSize) { case 1: length = 3; break; case 2: length = 15; break; case 3: length = 31; break; case 4: length = 55; break; case 5: length = 83; break; case 6: length = 123; break; case 7: length = 163; break; } for (int i = 0; i <= length; ++i) { OffsetEntry oe = Offsets[i] as OffsetEntry; Effects.SendLocationParticles(EffectItem.Create(new Point3D(p.X + oe.X, p.Y + oe.Y, p.Z), from.Map, EffectItem.DefaultDuration), 0x376A, 9, 4, 0, 0, 0x13AE, 0); } IPooledEnumerable eable = from.Map.GetMobilesInRange(new Point3D(p.X, p.Y, p.Z), m_Potion.AreaSize); foreach (object obj in eable) { if (obj is BaseCreature) { BaseCreature m = obj as BaseCreature; if (m != null && !m.Controled) { m.Frozen = true; InternalTimer timer = new InternalTimer(new Point3D(p.X, p.Y, p.Z), m_Potion.AreaSize, from); timer.Start(); } } } eable.Free(); m_Potion.Delete(); }
public void SendStoneEffects(StoneEffect mStoneEffect, int effHue, Mobile m) { if (effHue > 0) { effHue--; //Adjust the friggin hue to match true effect color } switch (mStoneEffect) { //[s7] case StoneEffect.Gate: Effects.SendLocationParticles(EffectItem.Create(m.Location, m.Map, EffectItem.DefaultDuration), 0x1FCB, 10, 14, effHue, 0, 0x1FCB, 0); Effects.PlaySound(new Point3D(m.X, m.Y, m.Z), m.Map, 0x20E); m.Frozen = true; Timer.DelayCall(TimeSpan.FromSeconds(0.65), new TimerStateCallback(InternalShowGate), new object[] { m, effHue }); Timer.DelayCall(TimeSpan.FromSeconds(1.5), new TimerStateCallback(InternalHideGate), new object[] { m, effHue }); break; //[/s7] case StoneEffect.FlameStrike1: Effects.SendLocationEffect(new Point3D(m.X, m.Y, m.Z + 1), m.Map, 0x3709, 15, effHue, 0); Effects.PlaySound(new Point3D(m.X, m.Y, m.Z), m.Map, 0x208); break; case StoneEffect.FlameStrike3: Effects.SendLocationEffect(new Point3D(m.X, m.Y, m.Z + 1), m.Map, 0x3709, 15, effHue, 0); Effects.SendLocationEffect(new Point3D(m.X + 1, m.Y, m.Z + 6), m.Map, 0x3709, 15, effHue, 0); Effects.SendLocationEffect(new Point3D(m.X, m.Y + 1, m.Z + 6), m.Map, 0x3709, 15, effHue, 0); Effects.PlaySound(new Point3D(m.X, m.Y, m.Z), m.Map, 0x208); break; case StoneEffect.Snow: Effects.SendLocationEffect(new Point3D(m.X, m.Y, m.Z + 1), m.Map, 0x376A, 15, effHue, 0); //0x47D ); Effects.PlaySound(new Point3D(m.X, m.Y, m.Z), m.Map, 492); break; case StoneEffect.FlameStrikeLightningBolt: Effects.SendLocationEffect(new Point3D(m.X, m.Y, m.Z + 1), m.Map, 0x3709, 15, effHue, 0); Effects.PlaySound(new Point3D(m.X, m.Y, m.Z), m.Map, 0x208); Effects.SendBoltEffect(m, true, 0); break; case StoneEffect.Sparkle1: Effects.SendLocationEffect(new Point3D(m.X, m.Y, m.Z + 1), m.Map, 0x375A, 15, effHue, 0); Effects.PlaySound(new Point3D(m.X, m.Y, m.Z), m.Map, 0x213); break; case StoneEffect.Sparkle3: Effects.SendLocationEffect(new Point3D(m.X, m.Y + 1, m.Z), m.Map, 0x373A, 15, effHue, 0); Effects.SendLocationEffect(new Point3D(m.X + 1, m.Y, m.Z), m.Map, 0x373A, 15, effHue, 0); Effects.SendLocationEffect(new Point3D(m.X, m.Y, m.Z - 1), m.Map, 0x373A, 15, effHue, 0); Effects.PlaySound(new Point3D(m.X, m.Y, m.Z), m.Map, 0x213); break; case StoneEffect.Explosion: Effects.SendLocationEffect(new Point3D(m.X, m.Y, m.Z + 1), m.Map, 0x36BD, 15, effHue, 0); Effects.SendLocationEffect(new Point3D(m.X + 1, m.Y, m.Z), m.Map, 0x36BD, 15, effHue, 0); Effects.SendLocationEffect(new Point3D(m.X + 1, m.Y + 1, m.Z), m.Map, 0x36BD, 15, effHue, 0); Effects.SendLocationEffect(new Point3D(m.X, m.Y + 1, m.Z), m.Map, 0x36BD, 15, effHue, 0); Effects.PlaySound(new Point3D(m.X, m.Y, m.Z), m.Map, 0x307); break; case StoneEffect.ExplosionLightningBolt: Effects.SendLocationEffect(new Point3D(m.X, m.Y, m.Z + 1), m.Map, 0x36BD, 15, effHue, 0); Effects.SendLocationEffect(new Point3D(m.X + 1, m.Y, m.Z), m.Map, 0x36BD, 15, effHue, 0); Effects.SendLocationEffect(new Point3D(m.X + 1, m.Y + 1, m.Z), m.Map, 0x36BD, 15, effHue, 0); Effects.SendLocationEffect(new Point3D(m.X, m.Y + 1, m.Z), m.Map, 0x36BD, 15, effHue, 0); Effects.SendBoltEffect(m, true, 0); Effects.PlaySound(new Point3D(m.X, m.Y, m.Z), m.Map, 0x307); break; case StoneEffect.DefaultRunUO: Effects.SendLocationEffect(new Point3D(m.X + 1, m.Y, m.Z + 4), m.Map, 0x3728, 13, effHue, 0); Effects.SendLocationEffect(new Point3D(m.X + 1, m.Y, m.Z), m.Map, 0x3728, 13, effHue, 0); Effects.SendLocationEffect(new Point3D(m.X + 1, m.Y, m.Z - 4), m.Map, 0x3728, 13, effHue, 0); Effects.SendLocationEffect(new Point3D(m.X, m.Y + 1, m.Z + 4), m.Map, 0x3728, 13, effHue, 0); Effects.SendLocationEffect(new Point3D(m.X, m.Y + 1, m.Z), m.Map, 0x3728, 13, effHue, 0); Effects.SendLocationEffect(new Point3D(m.X, m.Y + 1, m.Z - 4), m.Map, 0x3728, 13, effHue, 0); Effects.SendLocationEffect(new Point3D(m.X + 1, m.Y + 1, m.Z + 11), m.Map, 0x3728, 13, effHue, 0); Effects.SendLocationEffect(new Point3D(m.X + 1, m.Y + 1, m.Z + 7), m.Map, 0x3728, 13, effHue, 0); Effects.SendLocationEffect(new Point3D(m.X + 1, m.Y + 1, m.Z + 3), m.Map, 0x3728, 13, effHue, 0); Effects.SendLocationEffect(new Point3D(m.X, m.Y, m.Z + 1), m.Map, 0x3728, 13, effHue, 0); Effects.PlaySound(new Point3D(m.X, m.Y, m.Z), m.Map, 0x228); break; case StoneEffect.Glow: Effects.SendLocationEffect(new Point3D(m.X, m.Y, m.Z), m.Map, 0x37C4, 15, effHue, 0); Effects.PlaySound(new Point3D(m.X, m.Y, m.Z), m.Map, 0x1E2); break; case StoneEffect.PoisonField: Effects.SendLocationEffect(new Point3D(m.X, m.Y, m.Z), m.Map, 0x3915, 15, effHue, 0); Effects.PlaySound(new Point3D(m.X, m.Y, m.Z), m.Map, 0x231); break; case StoneEffect.Fireball: Effects.SendLocationEffect(new Point3D(m.X + 1, m.Y, m.Z + 6), m.Map, 0x36D4, 13, effHue, 0); Effects.SendLocationEffect(new Point3D(m.X + 1, m.Y, m.Z), m.Map, 0x36D4, 13, effHue, 0); Effects.SendLocationEffect(new Point3D(m.X + 1, m.Y, m.Z + 6), m.Map, 0x36D4, 13, effHue, 0); Effects.SendLocationEffect(new Point3D(m.X, m.Y + 1, m.Z + 8), m.Map, 0x36D4, 13, effHue, 0); Effects.SendLocationEffect(new Point3D(m.X, m.Y + 1, m.Z), m.Map, 0x36D4, 13, effHue, 0); Effects.SendLocationEffect(new Point3D(m.X, m.Y + 1, m.Z + 6), m.Map, 0x36D4, 13, effHue, 0); Effects.SendLocationEffect(new Point3D(m.X + 1, m.Y + 1, m.Z + 11), m.Map, 0x36D4, 13, effHue, 0); Effects.SendLocationEffect(new Point3D(m.X + 1, m.Y + 1, m.Z + 8), m.Map, 0x36D4, 13, effHue, 0); Effects.SendLocationEffect(new Point3D(m.X + 1, m.Y + 1, m.Z + 10), m.Map, 0x36D4, 13, effHue, 0); Effects.SendLocationEffect(new Point3D(m.X, m.Y, m.Z + 1), m.Map, 0x3709, 15, effHue, 0); Effects.PlaySound(new Point3D(m.X, m.Y, m.Z), m.Map, 0x15E); break; case StoneEffect.FireStorm1: //Added By Nitewender (further modifed by me to carry color effect to timer m.PlaySound(520); m.PlaySound(525); m.Hidden = !m.Hidden; Effects.SendLocationEffect(new Point3D(m.X + 1, m.Y, m.Z), m.Map, 0x3709, 17, effHue, 0); Effects.SendLocationEffect(new Point3D(m.X - 1, m.Y, m.Z), m.Map, 0x3709, 17, effHue, 0); Effects.SendLocationEffect(new Point3D(m.X, m.Y + 1, m.Z), m.Map, 0x3709, 17, effHue, 0); Effects.SendLocationEffect(new Point3D(m.X, m.Y - 1, m.Z), m.Map, 0x3709, 17, effHue, 0); Effects.SendLocationEffect(new Point3D(m.X, m.Y, m.Z), m.Map, 0x3709, 17, effHue, 0); m_Timer = new FireStormTimer(DateTime.UtcNow, m, effHue, 0, 1); m_Timer.Start(); break; case StoneEffect.FireStorm2: //CEO Using above idea, this one does the firestorm outside->in m.PlaySound(520); m.PlaySound(525); Effects.SendLocationEffect(new Point3D(m.X + 5, m.Y, m.Z), m.Map, 0x3709, 17, effHue, 0); Effects.SendLocationEffect(new Point3D(m.X - 5, m.Y, m.Z), m.Map, 0x3709, 17, effHue, 0); Effects.SendLocationEffect(new Point3D(m.X, m.Y + 5, m.Z), m.Map, 0x3709, 17, effHue, 0); Effects.SendLocationEffect(new Point3D(m.X, m.Y - 5, m.Z), m.Map, 0x3709, 17, effHue, 0); Effects.SendLocationEffect(new Point3D(m.X + 5, m.Y - 5, m.Z), m.Map, 0x3709, 17, effHue, 0); Effects.SendLocationEffect(new Point3D(m.X - 5, m.Y + 5, m.Z), m.Map, 0x3709, 17, effHue, 0); m_Timer = new FireStormTimer(DateTime.UtcNow, m, effHue, 5, -1); m_Timer.Start(); break; } }