public override void OnDoubleClick(Mobile from)
        {
            XMLPlayerLevelAtt xmlplayer  = (XMLPlayerLevelAtt)XmlAttach.FindAttachment(from, typeof(XMLPlayerLevelAtt));
            ExpPowerHour      powerlevel = (ExpPowerHour)XmlAttach.FindAttachment(from, typeof(ExpPowerHour));
            PlayerMobile      pm         = from as PlayerMobile;
            Configured        c          = new Configured();
            var p     = Party.Get(from);
            int range = c.PartyRange;

            if (IsChildOf(pm.Backpack))
            {
                if (xmlplayer == null)
                {
                    pm.SendMessage("This wont work for you!");
                    return;
                }
                else if (powerlevel != null)
                {
                    pm.SendMessage("You must wait for your current Exp Power Hour to end!");
                    return;
                }
                else
                {
                    if (p != null)
                    {
                        foreach (PartyMemberInfo mi in p.Members)
                        {
                            pm = mi.Mobile as PlayerMobile;
                            if (pm.Alive && pm.InRange(pm, range))
                            {
                                XMLPlayerLevelAtt xmlplayer2  = (XMLPlayerLevelAtt)XmlAttach.FindAttachment(pm, typeof(XMLPlayerLevelAtt));
                                ExpPowerHour      powerlevel2 = (ExpPowerHour)XmlAttach.FindAttachment(pm, typeof(ExpPowerHour));
                                if (powerlevel2 != null)
                                {
                                    pm.SendMessage("You already have a power hour, your party gains their bonus!");
                                    return;
                                }
                                if (xmlplayer2 == null)
                                {
                                    pm.SendMessage("You lack level attachment, talk to your admin!");
                                    return;
                                }
                                else
                                {
                                    XmlAttach.AttachTo(pm, new ExpPowerHour());
                                    this.Delete();
                                }
                            }
                        }
                    }
                    XmlAttach.AttachTo(from, new ExpPowerHour());
                    this.Delete();
                }
            }
            else
            {
                pm.SendMessage("This must be in your pack!");
            }
        }
        protected override void OnTarget(Mobile from, object target)
        {
            XMLPlayerLevelAtt xmlplayer  = (XMLPlayerLevelAtt)XmlAttach.FindAttachment(from, typeof(XMLPlayerLevelAtt));
            ExpPowerHour      powerlevel = (ExpPowerHour)XmlAttach.FindAttachment(from, typeof(ExpPowerHour));
            PlayerMobile      pm         = from as PlayerMobile;

            if (xmlplayer == null)
            {
                pm.SendMessage("You cant give them power hour!");
                return;
            }
            else if (powerlevel != null)
            {
                pm.SendMessage("They already have a power hour!");
                return;
            }
            else
            {
                pm.SendMessage("They have been awarded Power Hour!");
                XmlAttach.AttachTo(from, new ExpPowerHour());
            }
        }
예제 #3
0
        public static void AddExp(Mobile m, Mobile k, Party p, Configured c)
        {
            XMLPlayerLevelAtt xmlplayer = (XMLPlayerLevelAtt)XmlAttach.FindAttachment(m, typeof(XMLPlayerLevelAtt));
            ExpPowerHour      exppower  = (ExpPowerHour)XmlAttach.FindAttachment(m, typeof(ExpPowerHour));
            PlayerMobile      pm        = null;
            LevelHandler      lh        = new LevelHandler();

            int range = c.PartyRange;

            double orig = 0;    //Monster Xp
            double fig  = 0;    //Party Xp
            double give = 0;    //Xp To Give

            if (k != null)
            {
                orig = LevelCore.Base(k);
            }

            if (p != null && c.PartyExpShare)
            {
                if (c.PartySplitExp)
                {
                    foreach (PartyMemberInfo mi in p.Members)
                    {
                        pm = mi.Mobile as PlayerMobile;

                        if (pm.InRange(k, range) && lh.MemberCount.Count < 6)
                        {
                            lh.MemberCount.Add(pm);
                        }
                    }

                    if (lh.MemberCount.Count > 1)
                    {
                        fig = (orig / lh.MemberCount.Count);
                    }
                }
                else
                {
                    pm  = m as PlayerMobile;
                    fig = orig;
                }
            }
            else
            {
                pm  = m as PlayerMobile;
                fig = orig;
            }

            if (fig > 0)
            {
                give = LevelHandler.ExpFilter(pm, fig, p, false);
            }

            if (give > 0)
            {
                #region PartyExpShare
                if (p != null && c.PartyExpShare)
                {
                    foreach (PartyMemberInfo mi in p.Members)
                    {
                        pm = mi.Mobile as PlayerMobile;
                        if (pm.Alive && pm.InRange(k, range))
                        {
                            XMLPlayerLevelAtt xmlplayerparty = (XMLPlayerLevelAtt)XmlAttach.FindAttachment(pm, typeof(XMLPlayerLevelAtt));
                            ExpPowerHour      exppowerparty  = (ExpPowerHour)XmlAttach.FindAttachment(pm, typeof(ExpPowerHour));
                            if (xmlplayerparty == null)
                            {
                                return;
                            }
                            else
                            {
                                if (exppowerparty != null)
                                {
                                    pm.SendMessage("You gained " + (give + c.ExpPowerAmount) + " boosted exp for the party kill!");
                                    xmlplayerparty.kxp += (int)give + c.ExpPowerAmount;
                                    if (pm.HasGump(typeof(ExpBar)))
                                    {
                                        pm.CloseGump(typeof(ExpBar));
                                        pm.SendGump(new ExpBar(pm));
                                    }
                                    if (xmlplayerparty.Expp >= xmlplayerparty.ToLevell && xmlplayerparty.Levell < xmlplayerparty.MaxLevel)
                                    {
                                        DoLevel(pm, new Configured());
                                    }
                                }
                                else
                                {
                                    pm.SendMessage("You gained " + give + " exp for the party kill!");
                                    xmlplayerparty.kxp += (int)give;
                                    if (pm.HasGump(typeof(ExpBar)))
                                    {
                                        pm.CloseGump(typeof(ExpBar));
                                        pm.SendGump(new ExpBar(pm));
                                    }
                                    if (xmlplayerparty.Expp >= xmlplayerparty.ToLevell && xmlplayerparty.Levell < xmlplayerparty.MaxLevel)
                                    {
                                        DoLevel(pm, new Configured());
                                    }
                                }
                            }
                        }
                    }
                }
                #endregion
                else
                {
                    if (exppower != null)
                    {
                        pm.SendMessage("You gained " + (give + c.ExpPowerAmount) + " boosted exp for the kill!");
                        xmlplayer.kxp += (int)give + c.ExpPowerAmount;
                    }
                    else
                    {
                        pm.SendMessage("You gained " + give + " exp for the kill!");
                        xmlplayer.kxp += (int)give;
                    }
                    if (pm.HasGump(typeof(ExpBar)))
                    {
                        pm.CloseGump(typeof(ExpBar));
                        pm.SendGump(new ExpBar(pm));
                    }

                    if (xmlplayer.Expp >= xmlplayer.ToLevell && xmlplayer.Levell < xmlplayer.MaxLevel)
                    {
                        DoLevel(pm, new Configured());
                    }
                }
            }
        }