Exemple #1
0
        public override void OnDoubleClick(Mobile from)
        {
            //STARTMOD: Teiravon
            if (!from.CanBeginAction(typeof(BattleNet)))
            {
                from.SendMessage("You cannot do this yet.");
            }
            if (from is TeiravonMobile)
            {
                TeiravonMobile m_Player = (TeiravonMobile)from;

                if ((m_Player.IsShapeshifter() || m_Player.IsForester()) && (m_Player.Shapeshifted || m_Player.IsShifted()))
                {
                    m_Player.SendMessage("You cannot use nets while shapeshifted.");
                    return;
                }
            }

            if (IsChildOf(from.Backpack))
            {
                from.SendMessage("Who is your target?");
                from.BeginTarget(-1, true, TargetFlags.None, new TargetCallback(OnTarget));
            }

            else
            {
                from.SendLocalizedMessage(1042001);  // That must be in your pack for you to use it.
            }
        }
        private static void Shapeshift_OnCommand(CommandEventArgs e)
        {
            TeiravonMobile m_Player = (TeiravonMobile)e.Mobile;

            if (!m_Player.HasFeat(TeiravonMobile.Feats.WildShape))
            {
                m_Player.SendMessage(Teiravon.Colors.FeatMessageColor, Teiravon.Messages.NoAbility);
            }

            else if (m_Player.Mounted)
            {
                m_Player.SendMessage("You can't do this while mounted.");
            }

            else if (m_Player.IsShapeshifter() || m_Player.IsForester())
            {
                m_Player.SendGump(new NewShapeshiftGump(m_Player));
            }
            else
            {
                m_Player.SendMessage("Only shapeshifters/foresters can do that. ");
            }
        }
        public override void OnDoubleClick(Mobile from)
        {
            if (!Movable || !from.CanBeginAction(typeof(BasePotion)))
            {
                return;
            }

            if (from.InRange(this.GetWorldLocation(), 1))
            {
                //STARTMOD: Teiravon
                if (from is TeiravonMobile)
                {
                    TeiravonMobile m_Player = (TeiravonMobile)from;

                    if ((m_Player.IsShapeshifter() || m_Player.IsForester()) && (m_Player.Shapeshifted || m_Player.IsShifted()))
                    {
                        m_Player.SendMessage("You cannot use potions while shapeshifted.");
                        return;
                    }
                }
                //ENDMOD: Teiravon

                if (!RequireFreeHand || HasFreeHand(from))
                {
                    Drink(from);
                }
                else
                {
                    from.SendLocalizedMessage(502172);                       // You must have a free hand to drink a potion.
                }
            }
            else
            {
                from.SendLocalizedMessage(502138);                   // That is too far away for you to use
            }
        }
Exemple #4
0
        public void Target(Mobile m)
        {
            if (!Caster.CanSee(m))
            {
                Caster.SendLocalizedMessage(500237);                   // Target can not be seen.
            }
            else if (CheckHSequence(m))
            {
                SpellHelper.Turn(Caster, m);

                SpellHelper.CheckReflect((int)this.Circle, Caster, ref m);

                double damage;

                if (Caster is TeiravonMobile)
                {
                    TeiravonMobile tav     = Caster as TeiravonMobile;
                    ArrayList      targets = new ArrayList();

                    if (tav.IsForester() && tav.HasFeat(TeiravonMobile.Feats.TempestsWrath))
                    {
                        m.BoltEffect(0);
                        damage = GetNewAosDamage(28, 2, 6, Caster.Player && m.Player);
                        int splash = (int)damage / 3;


                        Engines.PartySystem.Party party = Engines.PartySystem.Party.Get(Caster);

                        try
                        {
                            foreach (Mobile x in m.GetMobilesInRange(3))
                            {
                                if (party != null && party.Contains(x))
                                {
                                    continue;
                                }

                                if (x.AccessLevel > Caster.AccessLevel)
                                {
                                    continue;
                                }

                                if (x is BaseCreature)
                                {
                                    if (((BaseCreature)x).ControlMaster == Caster)
                                    {
                                        continue;
                                    }

                                    if (((BaseCreature)x).ControlMaster != null)
                                    {
                                        Mobile v = ((BaseCreature)x).ControlMaster;
                                        if (party != null && party.Contains(v))
                                        {
                                            continue;
                                        }
                                    }
                                    else
                                    {
                                        Effects.SendMovingEffect(m, x, 0x379F, 16, 5, true, false);
                                        AOS.Damage(x, Caster, splash, 0, 0, 0, 0, 100);
                                    }
                                }

                                else if (x != Caster && Caster.HarmfulCheck(x) && x != m)
                                {
                                    Effects.SendMovingEffect(m, x, 0x379F, 16, 5, true, false);
                                    AOS.Damage(x, Caster, splash, 0, 0, 0, 0, 100);
                                }
                            }
                        }
                        catch { }
                        SpellHelper.Damage(this, m, damage, 0, 0, 0, 0, 100);

                        return;
                    }
                    // Effects.SendLocationEffect(m.Location, m.Map, 0x3789, 18);
                }

                if (Core.AOS)
                {
                    damage = GetNewAosDamage(22, 1, 4, Caster.Player && m.Player);
                }
                else
                {
                    damage = Utility.Random(12, 9);

                    if (CheckResisted(m))
                    {
                        damage *= 0.75;

                        m.SendLocalizedMessage(501783);                           // You feel yourself resisting magical energy.
                    }

                    damage *= GetDamageScalar(m);
                }

                m.BoltEffect(0);

                SpellHelper.Damage(this, m, damage, 0, 0, 0, 0, 100);
            }

            FinishSequence();
        }
        public static Chart CompileStatChart()
        {
            /*
             *          PieChart chart = new PieChart( "Stat Distribution", "graphs_strdexint_distrib", true );
             *
             *          ChartItem strItem = new ChartItem( "Strength", 0 );
             *          ChartItem dexItem = new ChartItem( "Dexterity", 0 );
             *          ChartItem intItem = new ChartItem( "Intelligence", 0 );
             *
             *          foreach ( Mobile mob in World.Mobiles.Values )
             *          {
             *                  if ( mob.RawStatTotal == mob.StatCap && mob is PlayerMobile )
             *                  {
             *                          strItem.Value += mob.RawStr;
             *                          dexItem.Value += mob.RawDex;
             *                          intItem.Value += mob.RawInt;
             *                  }
             *          }
             *
             *          chart.Items.Add( strItem );
             *          chart.Items.Add( dexItem );
             *          chart.Items.Add( intItem );
             */

            PieChart chart = new PieChart("Class Distribution", "graphs_class_distrib", true);

            ChartItem fightItem   = new ChartItem("Fighters", 0);
            ChartItem rogueItem   = new ChartItem("Rogues", 0);
            ChartItem mageItem    = new ChartItem("Mages", 0);
            ChartItem clericItem  = new ChartItem("Clerics", 0);
            ChartItem rangerItem  = new ChartItem("Rangers", 0);
            ChartItem druidItem   = new ChartItem("Druids", 0);
            ChartItem barbItem    = new ChartItem("Barbarians", 0);
            ChartItem crafterItem = new ChartItem("Crafters", 0);
            ChartItem advItem     = new ChartItem("Advanced", 0);

            foreach (Mobile mob in World.Mobiles.Values)
            {
                if (mob != null && mob is TeiravonMobile)
                {
                    TeiravonMobile tav  = mob as TeiravonMobile;
                    Account        acct = (Account)tav.Account;
                    if ((acct.LastLogin + TimeSpan.FromDays(90.0)) < DateTime.Now)
                    {
                        continue;
                    }

                    if (tav.IsFighter() || tav.IsCavalier() || tav.IsMonk())
                    {
                        fightItem.Value++;
                    }
                    else if (tav.IsThief() || tav.IsAssassin() || tav.IsBard())
                    {
                        rogueItem.Value++;
                    }
                    else if (tav.IsMage())
                    {
                        mageItem.Value++;
                    }
                    else if (tav.IsCleric() || tav.IsDarkCleric())
                    {
                        clericItem.Value++;
                    }
                    else if (tav.IsArcher() || tav.IsMageSlayer() || tav.IsRanger())
                    {
                        rangerItem.Value++;
                    }
                    else if (tav.IsForester() || tav.IsShapeshifter())
                    {
                        druidItem.Value++;
                    }
                    else if (tav.IsBerserker() || tav.IsDragoon())
                    {
                        barbItem.Value++;
                    }
                    else if (tav.IsCrafter())
                    {
                        crafterItem.Value++;
                    }
                    else
                    {
                        advItem.Value++;
                    }
                }
            }

            chart.Items.Add(fightItem);
            chart.Items.Add(rogueItem);
            chart.Items.Add(mageItem);
            chart.Items.Add(clericItem);
            chart.Items.Add(rangerItem);
            chart.Items.Add(druidItem);
            chart.Items.Add(barbItem);
            chart.Items.Add(crafterItem);
            chart.Items.Add(advItem);


            return(chart);
        }
        public void Target(IPoint3D p)
        {
            if (!Caster.CanSee(p))
            {
                Caster.SendLocalizedMessage(500237);                   // Target can not be seen.
            }
            else if (SpellHelper.CheckTown(p, Caster) && CheckSequence())
            {
                SpellHelper.Turn(Caster, p);

                if (p is Item)
                {
                    p = ((Item)p).GetWorldLocation();
                }

                ArrayList targets = new ArrayList();

                Map map = Caster.Map;

                bool playerVsPlayer = false;

                if (map != null)
                {
                    IPooledEnumerable eable = map.GetMobilesInRange(new Point3D(p), 2);

                    foreach (Mobile m in eable)
                    {
                        if (Core.AOS && m == Caster)
                        {
                            continue;
                        }

                        if (SpellHelper.ValidIndirectTarget(Caster, m) && Caster.CanBeHarmful(m, false))
                        {
                            targets.Add(m);

                            if (m.Player)
                            {
                                playerVsPlayer = true;
                            }
                        }
                    }

                    eable.Free();
                }
                if (targets.Count == 0)
                {
                    FinishSequence();
                    return;
                }

                double damage = 0;

                if (Caster is TeiravonMobile)
                {
                    TeiravonMobile tav = Caster as TeiravonMobile;

                    if (tav.IsForester() && tav.HasFeat(TeiravonMobile.Feats.TempestsWrath))
                    {
                        damage = GetNewAosDamage(48, 1, 5, Caster.Player && playerVsPlayer);
                        Mobile    targ    = targets[0] as Mobile;
                        Hashtable litup   = new Hashtable();
                        Timer     m_Chain = new ChainBounce(Caster, litup, targ, damage, this);
                        Caster.DoHarmful(targ);
                        m_Chain.Start();
                        FinishSequence();
                        return;
                    }
                    else
                    {
                        if (Core.AOS)
                        {
                            damage = GetNewAosDamage(48, 1, 5, Caster.Player && playerVsPlayer);
                        }
                        else
                        {
                            damage = Utility.Random(27, 22);
                        }

                        if (targets.Count > 0)
                        {
                            if (Core.AOS && targets.Count > 1)
                            {
                                damage = (damage * 2) / targets.Count;
                            }
                            else if (!Core.AOS)
                            {
                                damage /= targets.Count;
                            }

                            for (int i = 0; i < targets.Count; ++i)
                            {
                                Mobile m = (Mobile)targets[i];

                                double toDeal = damage;

                                if (!Core.AOS && CheckResisted(m))
                                {
                                    toDeal *= 0.5;

                                    m.SendLocalizedMessage(501783); // You feel yourself resisting magical energy.
                                }

                                Caster.DoHarmful(m);
                                SpellHelper.Damage(this, m, toDeal, 0, 0, 0, 0, 100);

                                m.BoltEffect(0);
                            }
                        }
                    }
                }
                else
                {
                    if (Core.AOS)
                    {
                        damage = GetNewAosDamage(48, 1, 5, Caster.Player && playerVsPlayer);
                    }
                    else
                    {
                        damage = Utility.Random(27, 22);
                    }

                    if (targets.Count > 0)
                    {
                        if (Core.AOS && targets.Count > 1)
                        {
                            damage = (damage * 2) / targets.Count;
                        }
                        else if (!Core.AOS)
                        {
                            damage /= targets.Count;
                        }

                        for (int i = 0; i < targets.Count; ++i)
                        {
                            Mobile m = (Mobile)targets[i];

                            double toDeal = damage;

                            if (!Core.AOS && CheckResisted(m))
                            {
                                toDeal *= 0.5;

                                m.SendLocalizedMessage(501783); // You feel yourself resisting magical energy.
                            }

                            Caster.DoHarmful(m);
                            SpellHelper.Damage(this, m, toDeal, 0, 0, 0, 0, 100);

                            m.BoltEffect(0);
                        }
                    }
                }
            }
            FinishSequence();
        }