Hi everyone!.
My attachment name is XmlArtifactBonus.
I tweaked the attachment to give the player a bonus drop with 2 values : Bonus Multiplier and Bonus Duration.
Here, for exemple : I can AddAtt XmlArtifactBonus 2 3 which will give the targeted player a bonus drop of 2x for 3 hours. But I want more :

I want the attachment to be set by players with a gump so they buy and decide for themselves what bonus they want. Currency would be Daat's Tokens.

I created my gump with gump studio and i'm not sure where to start or how it could works for now.
Any help would be appreciated. I just began with all of this.

Here's my attachment and gump scripts :
XmlArtifactBonus:
//By Tresdni
//www.uofreedom.com
using System;
using Server;
using Server.Items;
using Server.Network;
using Server.Mobiles;

namespace Server.Engines.XmlSpawner2
{
    public class XmlArtifactBonus : XmlAttachment
    {
        private int m_Value = 3;       // default value of 3x's drops.

        [CommandProperty(AccessLevel.GameMaster)]
        public int Value { get { return m_Value; } set { m_Value = value; } }

        // These are the various ways in which the message attachment can be constructed. 
        // These can be called via the [addatt interface, via scripts, via the spawner ATTACH keyword.
        // Other overloads could be defined to handle other types of arguments

        // a serial constructor is REQUIRED
        public XmlArtifactBonus(ASerial serial)
            : base(serial)
        {
        }

        [Attachable]
        public XmlArtifactBonus()
        {
        }

        [Attachable]
        public XmlArtifactBonus(int value, double expire)
        {
            m_Value = value;
            Expiration = TimeSpan.FromHours(expire);
        }

        public override void OnAttach()
        {
            base.OnAttach();

            // apply the mod
            if (AttachedTo is Mobile)
            {
                Mobile m = AttachedTo as Mobile;
                Effects.PlaySound( m, m.Map, 516 );
                m.SendMessage(String.Format("You now have {1}x artifact drops for {0} hours.  Happy hunting!", Expiration.TotalHours, m_Value));
            }
        }
        
        public override void OnDelete()
        {
            base.OnDelete();

            if(AttachedTo is Mobile)
            {
                Mobile m = AttachedTo as Mobile;
                if(!m.Deleted)
                {
                    Effects.PlaySound( m, m.Map, 958 );
                    m.SendMessage(String.Format("Your increased artifact drops bonus fades away..."));
                }
            }
        }
    }
}
BonusDropStone:
using System;
using Server;
using Server.Gumps;
using Server.Engines.XmlSpawner2;

namespace Server.Gumps
{
    public class BonusDropStone : Gump
    {
        public BonusDropStone()
            : base( 0, 0 )
        {
            this.Closable=false;
            this.Disposable=false;
            this.Dragable=true;
            this.Resizable=false;
            this.AddPage(0);
            this.AddPage(1);
            this.AddBackground(191, 158, 443, 288, 9200);
            this.AddBackground(198, 164, 425, 225, 9270);
            this.AddImage(611, 153, 10460);
            this.AddImage(611, 371, 10460);
            this.AddImage(185, 371, 10460);
            this.AddImage(185, 153, 10460);
            this.AddImage(323, 392, 10452);
            this.AddButton(520, 405, 5200, 5201, (int)Buttons.Quit, GumpButtonType.Reply, 0);
            this.AddButton(220, 405, 5204, 5205, (int)Buttons.Apply, GumpButtonType.Reply, 0);
            this.AddLabel(330, 184, 1149, @"Artifact Bonus Drop Stone");
            this.AddLabel(245, 245, 1149, @"Bonus Multiplier");
            this.AddLabel(475, 245,1149, @"Bonus Duration");
            this.AddLabel(287, 213, 1149, @"Please choose your Multiplier&Duration :");
            this.AddCheck(240, 273, 2151, 2154, true, (int)Buttons.2xBonus);
            this.AddCheck(241, 312, 2151, 2154, false, (int)Buttons.3xBonus);
            this.AddCheck(471, 273, 2151, 2154, true, (int)Buttons.1hBonus);
            this.AddCheck(471, 310, 2151, 2154, false, (int)Buttons.2hBonus);
            this.AddCheck(471, 348, 2151, 2154, false, (int)Buttons.3hBonus);
            this.AddLabel(277, 277, 72, @"2x Bonus Drop");
            this.AddLabel(277, 318, 72, @"3x Bonus Drop");
            this.AddLabel(508, 277, 72, @"1 Hour Bonus");
            this.AddLabel(508, 315, 72, @"2 Hour Bonus");
            this.AddLabel(508, 354, 72, @"3 Hour Bonus");
            this.AddLabel(245, 354, 42, @"Total Cost :");
            this.AddImageTiled(413, 238, 1, 135, 9103);

        }
        
        public enum Buttons
        {
            Quit,
            Apply,
            2xBonus,
            3xBonus,
            1hBonus,
            2hBonus,
            3hBonus,
        }
        
        public override void OnResponse(NetState sender, RelayInfo info)
        {
            Mobile from = sender.Mobile;
            
                switch (info.ButtonID)
                {
                    
                case (int)Buttons.Quit:
                {
                    from.SendMessage("You haven chosen to not get any bonus drop!");
                    from.PlaySound(0X04A);
                    break;
                }
                    case (int)Buttons.Apply:
                {

                    break;
                }
                case (int)Buttons.2xBonus:
                {

                    break;
                }
                case (int)Buttons.3xBonus:
                {

                    break;
                }
                case (int)Buttons.1hBonus:
                {

                    break;
                }
                case (int)Buttons.2hBonus:
                {

                    break;
                }
                case (int)Buttons.3hBonus:
                {

                    break;
                }
              
                }
        }

    }
}
Here's a screenshot of the gump so you can understand more what i want to achieve :
BonusDropStone.png
 
I came up with something but it does not work properly...
the bonus and expiration values are always 0 not matter what button i choose.
Tried to add the token string also for testing but it doesnt seem to change either.

BonusDropStoneGump:
using System;
using Server;
using Server.Gumps;
using Server.Network;
using Server.Engines.XmlSpawner2;

namespace Server.Gumps
{
    public class BonusDropStoneGump : Gump
    {
                private int m_Value;   
                private int expire;
                private int totalcost;

        public BonusDropStoneGump()
            : base( 0, 0 )
        {
            
            this.Closable=false;
            this.Disposable=false;
            this.Dragable=true;
            this.Resizable=false;
            this.AddPage(0);
            this.AddPage(1);
            this.AddBackground(191, 158, 443, 288, 9200);
            this.AddBackground(198, 164, 425, 225, 9270);
            this.AddImage(611, 153, 10460);
            this.AddImage(611, 371, 10460);
            this.AddImage(185, 371, 10460);
            this.AddImage(185, 153, 10460);
            this.AddImage(323, 392, 10452);
            this.AddButton(520, 405, 5200, 5201, (int)Buttons.Quit, GumpButtonType.Reply, 0);
            this.AddButton(220, 405, 5204, 5205, (int)Buttons.Apply, GumpButtonType.Reply, 0);
            this.AddLabel(330, 184, 1149, @"Artifact Bonus Drop Stone");
            this.AddLabel(245, 245, 1149, @"Bonus Multiplier");
            this.AddLabel(475, 245,1149, @"Bonus Duration");
            this.AddLabel(287, 213, 1149, @"Please choose your Multiplier&Duration :");
            this.AddGroup(0);
            this.AddRadio(240, 273, 2151, 2154, true, (int)Buttons.x2Bonus);
            this.AddRadio(241, 312, 2151, 2154, false, (int)Buttons.x3Bonus);
            this.AddGroup(1);
            this.AddRadio(471, 273, 2151, 2154, true, (int)Buttons.h1Bonus);
            this.AddRadio(471, 310, 2151, 2154, false, (int)Buttons.h2Bonus);
            this.AddRadio(471, 348, 2151, 2154, false, (int)Buttons.h3Bonus);
            this.AddLabel(277, 277, 72, @"2x Bonus Drop");
            this.AddLabel(277, 318, 72, @"3x Bonus Drop");
            this.AddLabel(508, 277, 72, @"1 Hour Bonus");
            this.AddLabel(508, 315, 72, @"2 Hour Bonus");
            this.AddLabel(508, 354, 72, @"3 Hour Bonus");
            this.AddLabel(245, 354, 42, "Total Cost : " + totalcost.ToString() + " Tokens");
            this.AddImageTiled(413, 238, 1, 135, 9103);

        }
        
        public enum Buttons
        {
            Quit,
            Apply,
            x2Bonus,
            x3Bonus,
            h1Bonus,
            h2Bonus,
            h3Bonus,
        }
        
        public override void OnResponse(NetState sender, RelayInfo info)
        {
            Mobile from = sender.Mobile;
            
                switch (info.ButtonID)
                {
                    
                case (int)Buttons.Quit:
                {
                    from.SendMessage("You haven chosen to not get any bonus drop!");
                    from.PlaySound(0X04A);
                    break;
                }
                    case (int)Buttons.Apply:
                    
                {           
                    from.PlaySound(0X04A);
                    XmlAttach.AttachTo(from, new XmlArtifactBonus(m_Value, expire));

                    break;
                }
                case (int)Buttons.x2Bonus:
                {
                    int m_Value = 2;
                    int totalcost = 200;

                    break;
                }
                case (int)Buttons.x3Bonus:
                {
                    int m_Value = 3;
                    int totalcost = 400;

                    break;
                }
                case (int)Buttons.h1Bonus:
                {
                    int expire = 1;

                    break;
                }
                case (int)Buttons.h2Bonus:
                {
                    int expire = 2;

                    break;
                }
                case (int)Buttons.h3Bonus:
                {
                    int expire = 3;

                    break;
                }
              
                }
        }

    }
}
 
Not the greatest with gumps myself I avoid them all I can lol so there could be better ways but I would use something like the following.
C#:
//whatever values you need to keep track of goes where I put (int m_Value, int, expire)
public BonusDropStoneGump(int m_Value, int, expire)
        : base( 0, 0 )



when a button is pressed that changes the values you need saved you need to use
C#:
//whatever values you want saved goes where I put (m_Value, expire)
from.CloseGump(typeof(BonusDropStoneGump));
from.SendGump(new BonusDropStoneGump(m_Value, expire));


This lets the gump be refreshed with the new values whenever a button is pressed. Also note whatever sends the gumps in the first place will also need to use
C#:
//replace m_Value and expire with whatever numbers you are using by default.
from.SendGump(new BonusDropStoneGump(m_Value, expire));
 
Interesting. Everything compiles fine but my values are still at 0 no matter what button is chosen.
On my stone, I added the from.SendGump(new BonusDropStoneGump(m_Value, expire));
i changed this
C#:
public BonusDropStoneGump(int m_Value, int, expire)
to this
C#:
public BonusDropStoneGump(int m_Value, int expire)
cause had the error : Identifier expected

Does not seem the buttons are working lol
C#:
using System;
using Server;
using Server.Gumps;
using Server.Network;
using Server.Engines.XmlSpawner2;

namespace Server.Gumps
{
    public class BonusDropStoneGump : Gump
    {
                private int m_Value;
                private int expire;
                private int totalcost;

        public BonusDropStoneGump(int m_Value, int expire)
            : base( 0, 0 )
        {
            this.Closable=false;
            this.Disposable=false;
            this.Dragable=true;
            this.Resizable=false;
            this.AddPage(0);
            this.AddPage(1);
            this.AddBackground(191, 158, 443, 288, 9200);
            this.AddBackground(198, 164, 425, 225, 9270);
            this.AddImage(611, 153, 10460);
            this.AddImage(611, 371, 10460);
            this.AddImage(185, 371, 10460);
            this.AddImage(185, 153, 10460);
            this.AddImage(323, 392, 10452);
            this.AddButton(520, 405, 5200, 5201, (int)Buttons.Quit, GumpButtonType.Reply, 0);
            this.AddButton(220, 405, 5204, 5205, (int)Buttons.Apply, GumpButtonType.Reply, 0);
            this.AddLabel(330, 184, 1149, @"Artifact Bonus Drop Stone");
            this.AddLabel(245, 245, 1149, @"Bonus Multiplier");
            this.AddLabel(475, 245,1149, @"Bonus Duration");
            this.AddLabel(287, 213, 1149, @"Please choose your Multiplier&Duration :");
            this.AddGroup(0);
            this.AddRadio(240, 273, 2151, 2154, true, (int)Buttons.x2Bonus);
            this.AddRadio(241, 312, 2151, 2154, false, (int)Buttons.x3Bonus);
            this.AddGroup(1);
            this.AddRadio(471, 273, 2151, 2154, true, (int)Buttons.h1Bonus);
            this.AddRadio(471, 310, 2151, 2154, false, (int)Buttons.h2Bonus);
            this.AddRadio(471, 348, 2151, 2154, false, (int)Buttons.h3Bonus);
            this.AddLabel(277, 277, 72, @"2x Bonus Drop");
            this.AddLabel(277, 318, 72, @"3x Bonus Drop");
            this.AddLabel(508, 277, 72, @"1 Hour Bonus");
            this.AddLabel(508, 315, 72, @"2 Hour Bonus");
            this.AddLabel(508, 354, 72, @"3 Hour Bonus");
            this.AddLabel(245, 354, 42, "Total Cost : " + totalcost.ToString() + " Tokens");
            this.AddImageTiled(413, 238, 1, 135, 9103);

        }
        
        public enum Buttons
        {
            Quit,
            Apply,
            x2Bonus,
            x3Bonus,
            h1Bonus,
            h2Bonus,
            h3Bonus,
        }
        
        public override void OnResponse(NetState sender, RelayInfo info)
        {
            Mobile from = sender.Mobile;
            
                switch (info.ButtonID)
                {
                    
                case (int)Buttons.Quit:
                {
                    from.SendMessage("You haven chosen to not get any bonus drop!");
                    from.PlaySound(0X04A);
                    break;
                }
                case (int)Buttons.Apply:
                    
                {           
                    from.PlaySound(0X04A);
                    XmlAttach.AttachTo(from, new XmlArtifactBonus(m_Value, expire));

                    break;
                }
                case (int)Buttons.x2Bonus:
                {
                    
                    m_Value = 2;
                    totalcost = 200; //test
                    //???XmlAttachment XmlArtifactBonus = new XmlArtifactBonus(m_Value, expire);???
                    from.SendGump(new BonusDropStoneGump(m_Value, expire));
                    from.CloseGump(typeof(BonusDropStoneGump));

                    break;
                }
                case (int)Buttons.x3Bonus:
                {
                    m_Value = 3;
                    totalcost = 400; //test
                    from.SendGump(new BonusDropStoneGump(m_Value, expire));
                    from.CloseGump(typeof(BonusDropStoneGump));

                    break;
                }
                case (int)Buttons.h1Bonus:
                {
                    expire = 1;
                    from.SendGump(new BonusDropStoneGump(m_Value, expire));
                    from.CloseGump(typeof(BonusDropStoneGump));

                    break;
                }
                case (int)Buttons.h2Bonus:
                {
                    expire = 2;
                    from.SendGump(new BonusDropStoneGump(m_Value, expire));
                    from.CloseGump(typeof(BonusDropStoneGump));

                    break;
                }
                case (int)Buttons.h3Bonus:
                {
                    expire = 3;
                    from.SendGump(new BonusDropStoneGump(m_Value, expire));
                    from.CloseGump(typeof(BonusDropStoneGump));

                    break;
                }
              
                }
        }

    }
}
Post automatically merged:

Radio Button?:
case (int)Buttons.x2Bonus:
                {
                    from.PlaySound(0X04A);
                    m_Value = 2;
                    totalcost = 200; //test
                    from.SendGump(new BonusDropStoneGump(m_Value, expire));
                    from.CloseGump(typeof(BonusDropStoneGump));

                    break;
                }
Does not produce any sound when clicked?
 
Last edited:
no, it does nothing at all.. no sound, no values, no refresh.
the other 2 buttons of type reply (quit/apply) are working and produce sound.
 
Radio buttons and Check boxes are not the same as Reply buttons.

A Reply button has exactly one value - which you can find using info.ButtonID.

Checks and Radios have more than one value - which are stored in Switches[ ] - which you can get using info.Switches[n], where n is the switch ID. Or using the IsSwitched method - info.IsSwitched(n), where n is the switch ID.
 
Oh this is exaclty what I needed, but the m_value & expire remain at 0 when Apply is pushed, not matter what radio buttons are cheked.
And total cost only appear in text when button Apply is also pushed.
I was thinking the totalcost value would be updated on the label with gump close/open, but its not?
That's what i tried to make the IsSwitched method, i might be wrong?
C#:
using System;
using Server;
using Server.Gumps;
using Server.Network;
using Server.Engines.XmlSpawner2;

namespace Server.Gumps
{
    public class BonusDropStoneGump : Gump
    {
        [CommandProperty(AccessLevel.GameMaster)]
        public int Value { get { return m_Value; } set { m_Value = value; } }
        
        [CommandProperty(AccessLevel.GameMaster)]
        public int Expiration { get { return expire; } set { expire = value; } }
        
        [CommandProperty( AccessLevel.GameMaster )]
        public int TotalCost {get{ return totalcost; } set { totalcost = value; }}
        
        public int m_Value;
        public int expire;
        public int totalcost;
    
        public BonusDropStoneGump(int m_Value, int expire, int totalcost)
            : base( 0, 0 )
        {
            
            this.Closable=false;
            this.Disposable=false;
            this.Dragable=true;
            this.Resizable=false;
            this.AddPage(0);
            this.AddPage(1);
            this.AddBackground(191, 158, 443, 288, 9200);
            this.AddBackground(198, 164, 425, 225, 9270);
            this.AddImage(611, 153, 10460);
            this.AddImage(611, 371, 10460);
            this.AddImage(185, 371, 10460);
            this.AddImage(185, 153, 10460);
            this.AddImage(323, 392, 10452);
            this.AddButton(520, 405, 5200, 5201, (int)Buttons.Quit, GumpButtonType.Reply, 0);
            this.AddButton(220, 405, 5204, 5205, (int)Buttons.Apply, GumpButtonType.Reply, 0);
            this.AddLabel(330, 184, 1149, @"Artifact Bonus Drop Stone");
            this.AddLabel(245, 245, 1149, @"Bonus Multiplier");
            this.AddLabel(475, 245,1149, @"Bonus Duration");
            this.AddLabel(287, 213, 1149, @"Please choose your Multiplier&Duration :");
            this.AddGroup(0);
            this.AddRadio(240, 273, 2151, 2154, true, (int)Buttons.x2Bonus);
            this.AddRadio(241, 312, 2151, 2154, false, (int)Buttons.x3Bonus);
            this.AddGroup(1);
            this.AddRadio(471, 273, 2151, 2154, true, (int)Buttons.h1Bonus);
            this.AddRadio(471, 310, 2151, 2154, false, (int)Buttons.h2Bonus);
            this.AddRadio(471, 348, 2151, 2154, false, (int)Buttons.h3Bonus);
            this.AddLabel(277, 277, 72, @"2x Bonus Drop");
            this.AddLabel(277, 318, 72, @"3x Bonus Drop");
            this.AddLabel(508, 277, 72, @"1 Hour Bonus");
            this.AddLabel(508, 315, 72, @"2 Hour Bonus");
            this.AddLabel(508, 354, 72, @"3 Hour Bonus");
            this.AddLabel(245, 354, 42, "Total Cost : " + totalcost.ToString() + " Tokens");
            this.AddImageTiled(413, 238, 1, 135, 9103);

        }
        
        public enum Buttons
        {
            Quit,
            Apply,
            x2Bonus,
            x3Bonus,
            h1Bonus,
            h2Bonus,
            h3Bonus,
        }
        
        public override void OnResponse(NetState sender, RelayInfo info)
        {
            if(info == null || sender == null || sender.Mobile == null) return;
            Mobile from = sender.Mobile;
            int basecost = 0;
            
            //if(info.ButtonID != 0)
                //{
                    if (info.IsSwitched ((int)Buttons.x2Bonus))
                    {
                        from.PlaySound(0X04A);
                        int m_Value = 2; //should set m_Value to 2?
                        int totalcost = basecost + 200;
                        from.CloseGump(typeof(BonusDropStoneGump));
                        from.SendGump(new BonusDropStoneGump(m_Value, expire, totalcost));
                    }
                    if (info.IsSwitched ((int)Buttons.x3Bonus))
                    {
                        from.PlaySound(0X04A);
                        int m_Value = 3;
                        int totalcost = basecost + 400;
                        from.CloseGump(typeof(BonusDropStoneGump));
                        from.SendGump(new BonusDropStoneGump(m_Value, expire, totalcost));
                    }
                    if (info.IsSwitched ((int)Buttons.h1Bonus))
                    {
                        from.PlaySound(0X04A);
                        int m_Value = 1;
                        int totalcost = basecost + 200;
                        from.CloseGump(typeof(BonusDropStoneGump));
                        from.SendGump(new BonusDropStoneGump(m_Value, expire, totalcost));
                    }
                    if (info.IsSwitched ((int)Buttons.h2Bonus))
                    {
                        from.PlaySound(0X04A);
                        int m_Value = 2;
                        int totalcost = basecost + 400;
                        from.CloseGump(typeof(BonusDropStoneGump));
                        from.SendGump(new BonusDropStoneGump(m_Value, expire, totalcost));
                    }
                    if (info.IsSwitched ((int)Buttons.h3Bonus))
                    {
                        from.PlaySound(0X04A);
                        int m_Value = 3;
                        int totalcost = basecost + 600;
                        from.CloseGump(typeof(BonusDropStoneGump));
                        from.SendGump(new BonusDropStoneGump(m_Value, expire, totalcost));
                    }
                //}
            
                switch (info.ButtonID)
                {
                    case (int)Buttons.Quit:
                    {
                        from.SendMessage("You haven chosen to not get any bonus drop!");
                        from.PlaySound(0X04A);
                        from.CloseGump(typeof(BonusDropStoneGump));
                        break;
                    }
                    case (int)Buttons.Apply:
                    {   
                    
                    from.PlaySound(0X04A);
                    XmlAttach.AttachTo(from, new XmlArtifactBonus(m_Value, expire));
                    break;
                    }
                }
        }

    }
}
I need some sleep, thanks for helping me out guys
 
To increase value of 2 and an expiration of 24h :

C#:
 XmlAttach.AttachTo(from, new XmlArtifactBonus(2,24)); //attach value of 2, will expire in 24 hours


You should add the attachment to players oncharactercreation and you could just do;


C#:
XmlArtifactBonus bonus = (XmlArtifactBonus)XmlAttach.FindAttachment(from, typeof(XmlArtifactBonus)); //we check for attachment

  if (from != null && bonus != null)  //mobile is not null attachament is not null
       bonus.Value += 2;     //we increase value of attachment by 2
 
Last edited:
I want it to be attached to the player when Apply is pushed. Im trying this on case (int)Buttons.Apply:
XmlAttach.AttachTo(from, new XmlArtifactBonus(m_Value, expire));

Is this correct?

Edit : Just read your post above, i'll take a look into that thanks a lot !
 
like i said, to attach it with a 2 value:
C#:
XmlAttach.AttachTo(from, new XmlArtifactBonus(2,24));


To increase it +2 when apply button is pressed



C#:
XmlArtifactBonus bonus = (XmlArtifactBonus)XmlAttach.FindAttachment(from, typeof(XmlArtifactBonus)); //we check for attachment



  if (from != null && bonus != null)  //mobile is not null attachament is not null

       bonus.Value += 2;     //we increase value of attachment by 2

Not sure if it will throw errors but you get the idea
 
I redone the gump, trying 1 radio group instead of 2. I used the IsSwitched method and added the xml attachment as you guys suggested.
I went through some (alot) crashes and build something that is now working, except for one thing:

Radio buttons dont change my totalcost string when clicked (nor they produce any sound)
totalcost string do change when apply is clicked tho. This mean the player will know how much it cost after he buy, funny but not good at all...
So i tried something, but im getting confused...
BonusDropStoneGump:
using System;
using Server;
using Server.Gumps;
using Server.Network;
using Server.Engines.XmlSpawner2;

namespace Server.Gumps
{
    public class BonusDropStoneGump : Gump
    {
        [CommandProperty(AccessLevel.GameMaster)]
        public int Value { get { return m_Value; } set { m_Value = value; } }
        
        [CommandProperty(AccessLevel.GameMaster)]
        public int Expiration { get { return expire; } set { expire = value; } }
        
        [CommandProperty( AccessLevel.GameMaster )]
        public int TotalCost {get{ return totalcost; } set { totalcost = value; }}
        
        private int m_Value;
        private int expire;
        private int totalcost;
        
        public BonusDropStoneGump(int m_Value, int expire, int totalcost)
            : base( 0, 0 )
        {
            this.Closable=false;
            this.Disposable=false;
            this.Dragable=true;
            this.Resizable=false;
            this.AddPage(0);
            this.AddPage(1);
            this.AddBackground(191, 43, 443, 404, 9200);
            this.AddBackground(198, 54, 425, 335, 9270);
            this.AddImage(610, 48, 10460);
            this.AddImage(611, 371, 10460);
            this.AddImage(185, 371, 10460);
            this.AddImage(185, 48, 10460);
            this.AddImage(323, 392, 10452);
            this.AddButton(520, 405, 5200, 5201, (int)Buttons.Quit, GumpButtonType.Reply, 0);
            this.AddButton(220, 405, 5204, 5205, (int)Buttons.Apply, GumpButtonType.Reply, 0);
            this.AddLabel(331, 73, 1149, @"Artifact Bonus Drop Stone");
            this.AddLabel(245, 150, 1149, @"Bonus Multiplier X2");
            this.AddLabel(457, 150, 1149, @"Bonus Multiplier X3");
            this.AddLabel(310, 101, 1149, @"Please choose your bonus options :");
            this.AddLabel(283, 189, 72, @"1 Hour Bonus");
            this.AddLabel(283, 227, 72, @"2 Hour Bonus");
            this.AddLabel(283, 266, 72, @"3 Hour Bonus");
            this.AddLabel(245, 345, 42, "Total Cost : " + totalcost.ToString() + " Tokens");
            this.AddLabel(494, 190, 72, @"1 Hour Bonus");
            this.AddLabel(494, 228, 72, @"2 Hour Bonus");
            this.AddLabel(494, 267, 72, @"3 Hour Bonus");
            this.AddImageTiled(414, 139, 1, 235, 9103);
            this.AddGroup(0);
            this.AddRadio(246, 185, 2151, 2154, false, (int)Buttons.Bonus2x1h);
            this.AddRadio(246, 222, 2151, 2154, false, (int)Buttons.Bonus2x2h);
            this.AddRadio(246, 260, 2151, 2154, false, (int)Buttons.Bonus2x3h);
            this.AddRadio(457, 186, 2151, 2154, false, (int)Buttons.Bonus3x1h);
            this.AddRadio(457, 223, 2151, 2154, false, (int)Buttons.Bonus3x2h);
            this.AddRadio(457, 261, 2151, 2154, false, (int)Buttons.Bonus3x3h);

        }
        
        public enum Buttons
        {
            Quit,
            Apply,
            Bonus2x1h,
            Bonus2x2h,
            Bonus2x3h,
            Bonus3x1h,
            Bonus3x2h,
            Bonus3x3h,
        }
        
        public override void OnResponse(NetState sender, RelayInfo info)
        {
            if(info == null || sender == null || sender.Mobile == null) return;
            Mobile from = sender.Mobile;

            int basecost = 0;

            if (info.IsSwitched ((int)Buttons.Bonus2x1h))
                {
                    int totalcost = 400;
                    from.PlaySound(0X04A);
                    from.CloseGump(typeof(BonusDropStoneGump));
                    from.SendGump(new BonusDropStoneGump(m_Value, expire, totalcost));
                }
            
            if (info.IsSwitched ((int)Buttons.Bonus2x2h))
                {
                    int totalcost = 600;
                    from.PlaySound(0X04A);
                    from.CloseGump(typeof(BonusDropStoneGump));
                    from.SendGump(new BonusDropStoneGump(m_Value, expire, totalcost));
                }
                
            if (info.IsSwitched ((int)Buttons.Bonus2x3h))
                {
                    int totalcost = 800;
                    from.PlaySound(0X04A);
                    from.CloseGump(typeof(BonusDropStoneGump));
                    from.SendGump(new BonusDropStoneGump(m_Value, expire, totalcost));
                }
                
            if (info.IsSwitched ((int)Buttons.Bonus3x1h))
                {
                    int totalcost = 1000;
                    from.PlaySound(0X04A);
                    from.CloseGump(typeof(BonusDropStoneGump));
                    from.SendGump(new BonusDropStoneGump(m_Value, expire, totalcost));
                }
                
            if (info.IsSwitched ((int)Buttons.Bonus3x2h))
                {
                    int totalcost = 1200;
                    from.PlaySound(0X04A);
                    from.CloseGump(typeof(BonusDropStoneGump));
                    from.SendGump(new BonusDropStoneGump(m_Value, expire, totalcost));
                }
                
            if (info.IsSwitched ((int)Buttons.Bonus3x3h))
                {
                    int totalcost = 1400;
                    from.PlaySound(0X04A);
                    from.CloseGump(typeof(BonusDropStoneGump));
                    from.SendGump(new BonusDropStoneGump(m_Value, expire, totalcost));
                }
                
                
                switch (info.ButtonID)
                {
                    case (int)Buttons.Quit:
                    {
                        from.SendMessage("Remember to keep your tokens!");
                        from.PlaySound(0X04A);
                        from.CloseGump(typeof(BonusDropStoneGump));
                        break;
                    }
                    case (int)Buttons.Apply:
                    {   
                        from.PlaySound(0X04A);
                        
                        XmlArtifactBonus bonus = (XmlArtifactBonus)XmlAttach.FindAttachment(from, typeof(XmlArtifactBonus)); //we check for attachment
                        if (from != null && bonus != null) //mobile is not null attachament is not null
                            if (info.IsSwitched ((int)Buttons.Bonus2x1h))
                            {
                                bonus.Value += 2;     //we increase value of attachment by 2
                                int totalcost = basecost + 400;
                                XmlAttach.AttachTo(from, new XmlArtifactBonus(2, 1));
                                from.CloseGump(typeof(BonusDropStoneGump));
                                from.SendGump(new BonusDropStoneGump(m_Value, expire, totalcost));
                            }
                            if (info.IsSwitched ((int)Buttons.Bonus2x2h))
                            {
                                bonus.Value += 2;     //we increase value of attachment by 2
                                int totalcost = basecost + 600;
                                XmlAttach.AttachTo(from, new XmlArtifactBonus(2, 2));
                                from.CloseGump(typeof(BonusDropStoneGump));
                                from.SendGump(new BonusDropStoneGump(m_Value, expire, totalcost));
                            }
                            if (info.IsSwitched ((int)Buttons.Bonus2x3h))
                            {
                                bonus.Value += 2;     //we increase value of attachment by 2
                                int totalcost = basecost + 800;
                                XmlAttach.AttachTo(from, new XmlArtifactBonus(2, 3));
                                from.CloseGump(typeof(BonusDropStoneGump));
                                from.SendGump(new BonusDropStoneGump(m_Value, expire, totalcost));
                            }
                            if (info.IsSwitched ((int)Buttons.Bonus3x1h))
                            {
                                bonus.Value += 3;     //we increase value of attachment by 3
                                int totalcost = basecost + 1000;
                                XmlAttach.AttachTo(from, new XmlArtifactBonus(3, 1));
                                from.CloseGump(typeof(BonusDropStoneGump));
                                from.SendGump(new BonusDropStoneGump(m_Value, expire, totalcost));;
                            }
                            if (info.IsSwitched ((int)Buttons.Bonus3x2h))
                            {
                                bonus.Value += 3;     //we increase value of attachment by 3
                                int totalcost = basecost + 1200;
                                from.CloseGump(typeof(BonusDropStoneGump));
                                from.SendGump(new BonusDropStoneGump(m_Value, expire, totalcost));
                                XmlAttach.AttachTo(from, new XmlArtifactBonus(3, 2));
                            }
                            if (info.IsSwitched ((int)Buttons.Bonus3x3h))
                            {
                                bonus.Value += 3;     //we increase value of attachment by 3
                                int totalcost = basecost + 1400;
                                from.CloseGump(typeof(BonusDropStoneGump));
                                from.SendGump(new BonusDropStoneGump(m_Value, expire, totalcost));
                                XmlAttach.AttachTo(from, new XmlArtifactBonus(3, 3));
                            }
                            
                    break;
                    }
                }
        }

    }
}
Someone may say its hardcoded? But I learn so much :D
BonusDropStone.png
 
If I were you I would skip Radio buttons altogether. Just use variables that get changed and passed back into the gump to "simulate" radio buttons. In this way, the total would get updated before they apply the changes. To show you how this works in pseudo code:

C#:
public bool m_first, m_second, m_third, etc...;

gump() : this(true, false, false, true, false, false) // we set the default radio buttons

gump(bool firstRadio, bool secondRadio, bool thirdRadio, etc.)
{
    m_first = firstRadio;
    m_second = secondRadio;
    etc...;
}

//Then in the OnResponse method:

if (firstRadio was clicked) { send gump(!m_first, m_second, m_third, etc...) }
else if (secondRadio was clicked) { send gump(m_first, !m_second, m_third, etc...) }
else etc....

That is how I would do it, then in your gump you can calculate the value of the transaction based on the bools that were sent in.
 
That is a very interesting way to play with bool here! I was looking at the Attendant script and stuff like that. Got discouraged and wrote the total for every options lol... this make my gump to "work" after all but yeah. I was obsessed about getting it to work in first place.
I wasnt about to ask cause I thought I had to work to find out why its bugging, ibut I'll take a chance, in my gump...

if the character has no Attachment, the first option (2x bonus for 1 hours) will not work when apply is pushed.
All other options work, attachment or not.
Is there something wrong with "else" or "break" statements in there that could cause such a bug?
Im very happy with what I have done so far, I sometime went to read about C# to make sure i'm doing things right u know... but I can get stuck on such stupid issues, shame on me :
BonusDropStoneGump:
using System;
using Server;
using Server.Gumps;
using Server.Network;
using Server.Engines.XmlSpawner2;
using System.IO;
using System.Collections;
using System.Collections.Generic;
using Server.Items;

namespace Server.Gumps
{
    public class BonusDropStoneGump : Gump
    {
        [CommandProperty(AccessLevel.GameMaster)]
        public int Value { get { return m_Value; } set { m_Value = value; } }
        
        [CommandProperty(AccessLevel.GameMaster)]
        public int Expiration { get { return expire; } set { expire = value; } }
        
        private int m_Value;
        private int expire;
        private TokenLedger m_TL;
        
        public BonusDropStoneGump(int m_Value, int expire)
            : base( 0, 0 )
        {
            this.Closable=false;
            this.Disposable=false;
            this.Dragable=true;
            this.Resizable=false;
            this.AddPage(0);
            this.AddPage(1);
            this.AddBackground(191, 43, 443, 404, 9200);
            this.AddBackground(198, 54, 425, 335, 9270);
            this.AddImage(610, 48, 10460);
            this.AddImage(611, 371, 10460);
            this.AddImage(185, 371, 10460);
            this.AddImage(185, 48, 10460);
            this.AddImage(323, 392, 10452);
            this.AddButton(520, 405, 5200, 5201, (int)Buttons.Quit, GumpButtonType.Reply, 0);
            this.AddButton(220, 405, 5204, 5205, (int)Buttons.Apply, GumpButtonType.Reply, 0);
            this.AddLabel(331, 73, 1149, @"Artifact Bonus Drop Stone");
            this.AddLabel(245, 130, 1149, @"Bonus Multiplier X2");
            this.AddLabel(457, 130, 1149, @"Bonus Multiplier X3");
            this.AddLabel(310, 101, 1149, @"Please choose your bonus options :");
            this.AddLabel(273, 162, 72, @"1 Hour Bonus");
            this.AddLabel(274, 236, 72, @"2 Hour Bonus");
            this.AddLabel(274, 316, 72, @"3 Hour Bonus");
            this.AddLabel(271, 185, 42, @"Cost : 400 Tokens");
            this.AddImageTiled(414, 139, 1, 235, 9103);
            this.AddLabel(484, 164, 72, @"1 Hour Bonus");
            this.AddLabel(485, 236, 72, @"2 Hour Bonus");
            this.AddLabel(486, 316, 72, @"3 Hour Bonus");
            this.AddLabel(271, 258, 42, @"Cost : 600 Tokens");
            this.AddLabel(271, 338, 42, @"Cost : 800 Tokens");
            this.AddLabel(483, 185, 42, @"Cost : 1000 Tokens");
            this.AddLabel(483, 260, 42, @"Cost : 1200 Tokens");
            this.AddLabel(483, 340, 42, @"Cost : 1400 Tokens");
            this.AddGroup(0);
            this.AddRadio(236, 159, 2151, 2154, false, (int)Buttons.Bonus2x1h);
            this.AddRadio(235, 231, 2151, 2154, false, (int)Buttons.Bonus2x2h);
            this.AddRadio(235, 310, 2151, 2154, false, (int)Buttons.Bonus2x3h);
            this.AddRadio(447, 159, 2151, 2154, false, (int)Buttons.Bonus3x1h);
            this.AddRadio(448, 231, 2151, 2154, false, (int)Buttons.Bonus3x2h);
            this.AddRadio(449, 310, 2151, 2154, false, (int)Buttons.Bonus3x3h);

        }
        
        public enum Buttons
        {
            Quit,
            Apply,
            Bonus2x1h,
            Bonus2x2h,
            Bonus2x3h,
            Bonus3x1h,
            Bonus3x2h,
            Bonus3x3h,
        }
        
        public override void OnResponse(NetState sender, RelayInfo info)
        {
            if(info == null || sender == null || sender.Mobile == null) return;
            Mobile from = sender.Mobile;

                switch (info.ButtonID)
                {
                    case (int)Buttons.Quit:
                    {
                        from.SendMessage("Remember to keep your tokens!");
                        from.PlaySound(0X04A);
                        from.CloseGump(typeof(BonusDropStoneGump));
                        break;
                    }
                    case (int)Buttons.Apply:
                    {   
                        from.PlaySound(0X04A);
                        
                        XmlArtifactBonus bonus = (XmlArtifactBonus)XmlAttach.FindAttachment(from, typeof(XmlArtifactBonus)); //we check for attachment
                        Item[] m_TL = from.Backpack.FindItemsByType( typeof( TokenLedger ) );
                        Item[] m_Token = from.Backpack.FindItemsByType( typeof( Daat99Tokens ) );
                        
                        if (from != null && bonus != null) //mobile is not null attachament is not null
                            if (info.IsSwitched ((int)Buttons.Bonus2x1h))
                            {
                                if (m_TL !=null && m_Token !=null)
                                {
                                    foreach( TokenLedger tl in m_TL )
                                    {
                                        if ( tl.Owner == from.Serial )
                                        {
                                            if (tl.Tokens >= 400 )
                                            {
                                                    from.CloseGump( typeof( BonusDropStoneGump ) );
                                                    tl.Tokens = (tl.Tokens - 400);
                                                    from.SendMessage(1173, "You paid 400 tokens from your ledger account.");
                                                    from.SendGump( new BonusDropStoneGump( m_Value, expire ) );
                                                    XmlAttach.AttachTo(from, new XmlArtifactBonus(2, 1));
                                                    break;
                                            }
                                            else
                                    
                                                //from.PlaySound(1069); //play Hey!! sound
                                                from.SendMessage(1173, "You don't have enough tokens in your ledger to get this bonus!");
                                                from.SendGump( new BonusDropStoneGump( m_Value, expire ) );   
                                                break;
                                        }                   
                                        
                                    }

                                    foreach( Daat99Tokens tl in m_Token )
                                    {
                                        if (tl.Amount >= 400 )
                                        {
                                                from.CloseGump( typeof( BonusDropStoneGump ) );
                                                from.Backpack.ConsumeTotal( typeof( Daat99Tokens ), 400 );
                                                from.SendMessage(1173, "You paid 400 token .");
                                                from.SendGump( new BonusDropStoneGump( m_Value, expire ) );
                                                XmlAttach.AttachTo(from, new XmlArtifactBonus(2, 1));
                                                break;
                                        }
                                            else
                                    
                                                //from.PlaySound(1069); //play Hey!! sound
                                                from.SendMessage(1173, "You don't have enough token in your backpack to get a bonus!");
                                                from.SendGump( new BonusDropStoneGump( m_Value, expire ) );
                                                break;
                                    }
                    
                                }       
                                
                            }
                            if (info.IsSwitched ((int)Buttons.Bonus2x2h))
                            {
                                if (m_TL !=null && m_Token !=null)
                                {
                                    foreach( TokenLedger tl in m_TL )
                                    {
                                        if ( tl.Owner == from.Serial )
                                        {
                                            if (tl.Tokens >= 600 )
                                            {
                                                    from.CloseGump( typeof( BonusDropStoneGump ) );
                                                    tl.Tokens = (tl.Tokens - 600);
                                                    from.SendMessage(1173, "You paid 600 tokens from your ledger account.");
                                                    from.SendGump( new BonusDropStoneGump( m_Value, expire ) );
                                                    XmlAttach.AttachTo(from, new XmlArtifactBonus(2, 2));
                                                    break;
                                            }
                                            else
                                    
                                                from.PlaySound(1069); //play Hey!! sound
                                                from.SendMessage(1173, "You don't have enough token in your ledger to get a bonus!");
                                                from.SendGump( new BonusDropStoneGump( m_Value, expire ) );   
                                                break;
                                        }                   
                                        
                                    }

                                    foreach( Daat99Tokens tl in m_Token )
                                    {
                                        if (tl.Amount >= 600 )
                                        {
                                                from.CloseGump( typeof( BonusDropStoneGump ) );
                                                from.Backpack.ConsumeTotal( typeof( Daat99Tokens ), 600 );
                                                from.SendMessage(1173, "You paid with 600 token.");
                                                from.SendGump( new BonusDropStoneGump( m_Value, expire ) );
                                                XmlAttach.AttachTo(from, new XmlArtifactBonus(2, 2));
                                                break;
                                        }
                                            else
                                    
                                                from.PlaySound(1069); //play Hey!! sound
                                                from.SendMessage(1173, "You don't have enough token in your backpack to get a bonus!");
                                                from.SendGump( new BonusDropStoneGump( m_Value, expire ) );
                                                break;
                                    }
                    
                                }
                            }
                            if (info.IsSwitched ((int)Buttons.Bonus2x3h))
                            {
                                if (m_TL !=null && m_Token !=null)
                                {
                                    foreach( TokenLedger tl in m_TL )
                                    {
                                        if ( tl.Owner == from.Serial )
                                        {
                                            if (tl.Tokens >= 800 )
                                            {
                                                    from.CloseGump( typeof( BonusDropStoneGump ) );
                                                    tl.Tokens = (tl.Tokens - 800);
                                                    from.SendMessage(1173, "You paid 800 tokens from your ledger account.");
                                                    from.SendGump( new BonusDropStoneGump( m_Value, expire ) );
                                                    XmlAttach.AttachTo(from, new XmlArtifactBonus(2, 3));
                                                    break;
                                            }
                                            else
                                    
                                                from.PlaySound(1069); //play Hey!! sound
                                                from.SendMessage(1173, "You don't have enough token in your ledger to get a bonus!");
                                                from.SendGump( new BonusDropStoneGump( m_Value, expire ) );
                                                break;
                                        }                   
                                        
                                    }

                                    foreach( Daat99Tokens tl in m_Token )
                                    {
                                        if (tl.Amount >= 800 )
                                        {
                                                from.CloseGump( typeof( BonusDropStoneGump ) );
                                                from.Backpack.ConsumeTotal( typeof( Daat99Tokens ), 800 );
                                                from.SendMessage(1173, "You paid with 800 token.");
                                                from.SendGump( new BonusDropStoneGump( m_Value, expire ) );
                                                XmlAttach.AttachTo(from, new XmlArtifactBonus(2, 3));
                                                break;
                                        }
                                            else
                                    
                                                from.PlaySound(1069); //play Hey!! sound
                                                from.SendMessage(1173, "You don't have enough token in your backpack to get a bonus!");
                                                from.SendGump( new BonusDropStoneGump( m_Value, expire ) );
                                                break;
                                    }
                    
                                }
                            }
                            if (info.IsSwitched ((int)Buttons.Bonus3x1h))
                            {
                                if (m_TL !=null && m_Token !=null)
                                {
                                    foreach( TokenLedger tl in m_TL )
                                    {
                                        if ( tl.Owner == from.Serial )
                                        {
                                            if (tl.Tokens >= 1000 )
                                            {
                                                    from.CloseGump( typeof( BonusDropStoneGump ) );
                                                    tl.Tokens = (tl.Tokens - 1000);
                                                    from.SendMessage(1173, "You paid 1000 tokens from your ledger account.");
                                                    from.SendGump( new BonusDropStoneGump( m_Value, expire ) );
                                                    XmlAttach.AttachTo(from, new XmlArtifactBonus(3, 1));
                                                    break;
                                            }
                                            else
                                    
                                                from.PlaySound(1069); //play Hey!! sound
                                                from.SendMessage(1173, "You don't have enough token in your ledger to get a bonus!");
                                                from.SendGump( new BonusDropStoneGump( m_Value, expire ) );
                                                break;
                                        }                   
                                        
                                    }

                                    foreach( Daat99Tokens tl in m_Token )
                                    {
                                        if (tl.Amount >= 1000 )
                                        {
                                                from.CloseGump( typeof( BonusDropStoneGump ) );
                                                from.Backpack.ConsumeTotal( typeof( Daat99Tokens ), 1000 );
                                                from.SendMessage(1173, "You paid with 1000 token.");
                                                from.SendGump( new BonusDropStoneGump( m_Value, expire ) );
                                                XmlAttach.AttachTo(from, new XmlArtifactBonus(3, 1));
                                                break;
                                        }
                                            else
                                    
                                                from.PlaySound(1069); //play Hey!! sound
                                                from.SendMessage(1173, "You don't have enough token in your backpack to get a bonus!");
                                                from.SendGump( new BonusDropStoneGump( m_Value, expire ) );
                                                break;
                                    }
                    
                                }
                            }
                            if (info.IsSwitched ((int)Buttons.Bonus3x2h))
                            {
                                if (m_TL !=null && m_Token !=null)
                                {
                                    foreach( TokenLedger tl in m_TL )
                                    {
                                        if ( tl.Owner == from.Serial )
                                        {
                                            if (tl.Tokens >= 1200 )
                                            {
                                                    from.CloseGump( typeof( BonusDropStoneGump ) );
                                                    tl.Tokens = (tl.Tokens - 1200);
                                                    from.SendMessage(1173, "You paid 1200 tokens from your ledger account.");
                                                    from.SendGump( new BonusDropStoneGump( m_Value, expire ) );
                                                    XmlAttach.AttachTo(from, new XmlArtifactBonus(3, 2));
                                                    break;
                                            }
                                            else
                                    
                                                from.PlaySound(1069); //play Hey!! sound
                                                from.SendMessage(1173, "You don't have enough token in your ledger to get a bonus!");
                                                from.SendGump( new BonusDropStoneGump( m_Value, expire ) );
                                                break;
                                        }                   
                                        
                                    }

                                    foreach( Daat99Tokens tl in m_Token )
                                    {
                                        if (tl.Amount >= 1200 )
                                        {
                                                from.CloseGump( typeof( BonusDropStoneGump ) );
                                                from.Backpack.ConsumeTotal( typeof( Daat99Tokens ), 1200 );
                                                from.SendMessage(1173, "You paid with 1200 token.");
                                                from.SendGump( new BonusDropStoneGump( m_Value, expire ) );
                                                XmlAttach.AttachTo(from, new XmlArtifactBonus(3, 2));
                                                break;
                                        }
                                            else
                                    
                                                from.PlaySound(1069); //play Hey!! sound
                                                from.SendMessage(1173, "You don't have enough token in your backpack to get a bonus!");
                                                from.SendGump( new BonusDropStoneGump( m_Value, expire ) );
                                                break;
                                    }
                    
                                }
                            }
                            if (info.IsSwitched ((int)Buttons.Bonus3x3h))
                            {
                                if (m_TL !=null && m_Token !=null)
                                {
                                    foreach( TokenLedger tl in m_TL )
                                    {
                                        if ( tl.Owner == from.Serial )
                                        {
                                            if (tl.Tokens >= 1400 )
                                            {
                                                    from.CloseGump( typeof( BonusDropStoneGump ) );
                                                    tl.Tokens = (tl.Tokens - 1400);
                                                    from.SendMessage(1173, "You paid 1400 tokens from your ledger account.");
                                                    from.SendGump( new BonusDropStoneGump( m_Value, expire ) );
                                                    XmlAttach.AttachTo(from, new XmlArtifactBonus(3, 3));
                                                    break;
                                            }
                                            else
                                    
                                                from.PlaySound(1069); //play Hey!! sound
                                                from.SendMessage(1173, "You don't have enough token in your ledger to get a bonus!");
                                                from.SendGump( new BonusDropStoneGump( m_Value, expire ) );   
                                                break;
                                        }                   
                                        
                                    }

                                    foreach( Daat99Tokens tl in m_Token )
                                    {
                                        if (tl.Amount >= 1400 )
                                        {
                                                from.CloseGump( typeof( BonusDropStoneGump ) );
                                                from.Backpack.ConsumeTotal( typeof( Daat99Tokens ), 1400 );
                                                from.SendMessage(1173, "You paid with 1400 token.");
                                                from.SendGump( new BonusDropStoneGump( m_Value, expire ) );
                                                XmlAttach.AttachTo(from, new XmlArtifactBonus(3, 3));
                                                break;
                                        }
                                            else
                                    
                                                from.PlaySound(1069); //play Hey!! sound
                                                from.SendMessage(1173, "You don't have enough token in your backpack to get a bonus!");
                                                from.SendGump( new BonusDropStoneGump( m_Value, expire ) );
                                                break;
                                    }
                    
                                }
                            }
                            
                    break;
                    }
                }
        }

    }
}
BonusDropStone.png
 
Back