RunUO Community

This is a sample guest message. Register a free account today to become a member! Once signed in, you'll be able to participate on this site by adding your own topics and posts, as well as connect with other members through your own private inbox!

High Seas Galleons

joshw

Sorceror
Having some issues with the new High Seas Galleons.
1. Seralization something wrong keeps deleting galleon.
2.Added Weapon Pad would like it to change itemid when it reconizes galleon type.
3. Weapon Pad has a level would like it to update itemid when checking level.
Here are the files for it
 

Attachments

  • BaseGalleon.cs
    54.6 KB · Views: 3
  • Boatropes.cs
    2.5 KB · Views: 2
  • GalleonHold.cs
    3.1 KB · Views: 1
  • NauticalWheel.cs
    4.2 KB · Views: 1
  • ShipMast.cs
    1.3 KB · Views: 3
  • WeaponPad.cs
    3 KB · Views: 2

joshw

Sorceror
Ok I fixed the Seralization problem something with the GalleonType so that blows my idea lol.
 

joshw

Sorceror
OK Ive worked out some of the bugs but need some advice on how to set a value. In my BaseGalleon.cs I switched the GalleonType to an int because the emu was having serial problems so now when you create a galleon it has a number value for galleontype. What I would like to do is the nautical wheel which is in the place of the tillerman is change the itemid based upon the galleontype value because each galleon has its own uniquie nautical wheel.

Here is what ive tried but it doesn't seem to work and not sure where to start once this is taken care of I can apply this to the weapon pads also.
Code:
using System;
using Server;
using Server.Multis;
using Server.Network;
using Server.Galleons;
 
namespace Server.Items
{
    public enum WheelType
    {
        None,
        Britiana,
        Orchish,
        Gargolye,
        Tokuno
    }
 
    public class NauticalWheel : Item
    {
        private BaseGalleon m_Boat;
            private uint m_KeyValue;
        public WheelType m_WheelType = WheelType.None;
 
        public NauticalWheel( BaseGalleon boat, uint keyValue ) : base( 0x98EC )
        {
            m_Boat = boat;
                  m_KeyValue = keyValue;
            Movable = false;
           
            if ( m_Boat.GalleonType == 1 )
            {
                WheelType = WheelType.Britiana;
                ItemID = 0x98EC;
            }
 
            if ( m_Boat.GalleonType == 2 )
            {
                WheelType = WheelType.Orchish;
                ItemID = 0x95F2;
            }
 
            if ( m_Boat.GalleonType == 3 )
            {
                WheelType = WheelType.Gargolye;
            }
 
            if ( m_Boat.GalleonType == 4 )
            {
                WheelType = WheelType.Tokuno;
                ItemID = 0x95F2;
            }
   
        }
 
        public NauticalWheel( Serial serial ) : base(serial)
        {
        }
 
        public void SetFacing( Direction dir )
        {
 
            if ( WheelType == WheelType.Britiana )
            {
                switch ( dir )
                {
                    case Direction.South: ItemID = 0x98EC; break;
                    case Direction.North: ItemID = 0x98EC; break;
                    case Direction.West:  ItemID = 0x98EC; break;
                    case Direction.East:  ItemID = 0x98EC; break;
                }
            }
 
            else if ( WheelType == WheelType.Orchish )
            {
                switch ( dir )
                {
                    case Direction.South: ItemID = 0x98EC; break;
                    case Direction.North: ItemID = 0x98EC; break;
                    case Direction.West:  ItemID = 0x98EC; break;
                    case Direction.East:  ItemID = 0x98EC; break;
                }
            }
 
            else if ( WheelType == WheelType.Gargolye )
            {
                switch ( dir )
                {
                    case Direction.South: ItemID = 0x98EC; break;
                    case Direction.North: ItemID = 0x98EC; break;
                    case Direction.West:  ItemID = 0x98EC; break;
                    case Direction.East:  ItemID = 0x98EC; break;
                }
            }
 
            else if ( WheelType == WheelType.Tokuno )
            {
                switch ( dir )
                {
                    case Direction.South: ItemID = 0x95EE; break;
                    case Direction.North: ItemID = 0x95F2; break;
                    case Direction.West:  ItemID = 0x95F0; break;
                    case Direction.East:  ItemID = 0x95F4; break;
                }
            }
        }
 
            [CommandProperty(AccessLevel.GameMaster)]
            public uint KeyValue { get { return m_KeyValue; } set { m_KeyValue = value; } }
 
        [CommandProperty( AccessLevel.GameMaster )]
              public WheelType WheelType
        {
            get { return m_WheelType; }
            set { m_WheelType = value; }
        }
 
        public override void GetProperties( ObjectPropertyList list )
        {
            base.GetProperties( list );
            if (m_Boat != null)
            list.Add( m_Boat.Status );
        }
 
        public void Say( int number )
        {
            PublicOverheadMessage( MessageType.Regular, 0x3B2, number );
        }
 
        public void Say( int number, string args )
        {
            PublicOverheadMessage( MessageType.Regular, 0x3B2, number, args );
        }
 
        public override void AddNameProperty( ObjectPropertyList list )
        {
            if ( m_Boat != null && m_Boat.ShipName != null )
                list.Add( 1042884, m_Boat.ShipName ); // the tiller man of the ~1_SHIP_NAME~
            else
                base.AddNameProperty( list );
        }
 
        public override void OnSingleClick( Mobile from )
        {
            if ( m_Boat != null && m_Boat.ShipName != null )
                LabelTo( from, 1042884, m_Boat.ShipName ); // the tiller man of the ~1_SHIP_NAME~
            else
                base.OnSingleClick( from );
        }
 
        public override void OnDoubleClick( Mobile from )
        {
            if ( m_Boat != null && m_Boat.Contains( from ) )
                m_Boat.BeginRename( from );
        }
 
        public override bool OnDragDrop( Mobile from, Item dropped )
        {
            if ( dropped is MapItem && m_Boat != null && m_Boat.CanCommand( from ) && m_Boat.Contains( from ) )
            {
                m_Boat.AssociateMap( (MapItem) dropped );
            }
 
            return false;
        }
 
        public override void OnAfterDelete()
        {
            if ( m_Boat != null )
                m_Boat.Delete();
        }
 
        public override void Serialize( GenericWriter writer )
        {
            base.Serialize( writer );
 
            writer.Write( (int) 0 );//version
            writer.Write( m_Boat );
                  writer.Write(m_KeyValue);
            writer.Write( (int)m_WheelType );
        }
 
        public override void Deserialize( GenericReader reader )
        {
            base.Deserialize( reader );
 
            int version = reader.ReadInt();
 
            switch ( version )
            {
                case 0:
                {
                    m_Boat = reader.ReadItem() as BaseGalleon;
                                m_KeyValue = reader.ReadUInt();
                    m_WheelType = (WheelType)reader.ReadInt();
 
                    if ( m_Boat == null )
                        Delete();
 
                    break;
                }
            }
        }
    }
}
 

siran

Sorceror
There may be more to it, but isn't this line setting the ItemID to 0x98ec no matter what?

Code:
public NauticalWheel( BaseGalleon boat, uint keyValue ) : base( 0x98EC )
 

joshw

Sorceror
There may be more to it, but isn't this line setting the ItemID to 0x98ec no matter what?

Code:
public NauticalWheel( BaseGalleon boat, uint keyValue ) : base( 0x98EC )
I have had it blank also
The problem seems to it isn't setting the wheel value or item ID on the If statements not sure what im doing wrong.
 

joshw

Sorceror
Ok Ive been working on this for awhile I think I figured out how to change the different ship parts took a different approach instead of using offsets I create a set command like the house sign for base houses so depending on the galleontype will show correct graphics. Only problem im running into is that when the server saves the igraphics disappear. here is the package so far so if someone could lead me in the right direction I should be able to get full working galleons soon.
 

Attachments

  • High Seas.rar
    24.7 KB · Views: 3
Top