public static void UpdateInstancePosition(WeaponDamageController attemptedConstruct)
 {
     if (attemptedConstruct == null) return;
     if (m_Instance == null) // should never happen, but if it does, make this the instance
     {
         m_Instance = attemptedConstruct;
     }
     else if (attemptedConstruct.Location != new Point3D(0,0,0)) // move the instance to it's location and delete it
     {
         m_Instance.Location = attemptedConstruct.Location;
         attemptedConstruct.Delete();
     }
 }
        public WeaponDamageController()
            : base(0xEDC)
        {
            this.Name = "Weapon Damage Controller";
            this.Movable = false;
            this.Visible = false;

            if (m_Instance != null)
            {
                // there can only be one WeaponDamageController game stone in the world
                m_Instance.Location = this.Location;
                Server.Commands.CommandHandlers.BroadcastMessage(AccessLevel.GameMaster, 0x489,
                    "Existing WeaponDamageController has been moved to this location (DON'T DELETE IT!).");
                Timer.DelayCall(TimeSpan.FromSeconds(1), new TimerStateCallback<WeaponDamageController>(UpdateInstancePosition), this); 
            }
            else
                m_Instance = this;
        }
        public override void Deserialize(GenericReader reader)
        {
            base.Deserialize(reader);

            int version = reader.ReadInt();
            switch (version)
            {
                case 2:
                    _WeaponDurabilityLossVsMobs = reader.ReadDouble();
                    goto case 1;
                case 1:
                    // global attributes
                    m_AllWeaponDamageMultiplier = reader.ReadDouble();
                    m_PlayerVsMobMultiplier = reader.ReadDouble();
                    m_MobVsPlayerMultiplier = reader.ReadDouble();
                    m_MobVsPlayerReduction = reader.ReadInt();

                    // individual weapon attributes
                    m_AxeDamageMin = reader.ReadInt(); m_AxeDamageMax = reader.ReadInt();
                    m_BattleAxeDamageMin = reader.ReadInt(); m_BattleAxeDamageMax = reader.ReadInt();
                    m_DoubleAxeDamageMin = reader.ReadInt(); m_DoubleAxeDamageMax = reader.ReadInt();
                    m_ExecutionersAxeDamageMin = reader.ReadInt(); m_ExecutionersAxeDamageMax = reader.ReadInt();
                    m_HatchetDamageMin = reader.ReadInt(); m_HatchetDamageMax = reader.ReadInt();
                    m_LargeBattleAxeDamageMin = reader.ReadInt(); m_LargeBattleAxeDamageMax = reader.ReadInt();
                    m_PickaxeDamageMin = reader.ReadInt(); m_PickaxeDamageMax = reader.ReadInt();
                    m_TwoHandedAxeDamageMin = reader.ReadInt(); m_TwoHandedAxeDamageMax = reader.ReadInt();
                    m_WarAxeDamageMin = reader.ReadInt(); m_WarAxeDamageMax = reader.ReadInt();
                    m_ButcherKnifeDamageMin = reader.ReadInt(); m_ButcherKnifeDamageMax = reader.ReadInt();
                    m_CleaverDamageMin = reader.ReadInt(); m_CleaverDamageMax = reader.ReadInt();
                    m_DaggerDamageMin = reader.ReadInt(); m_DaggerDamageMax = reader.ReadInt();
                    m_SkinningKnifeDamageMin = reader.ReadInt(); m_SkinningKnifeDamageMax = reader.ReadInt();
                    m_ClubDamageMin = reader.ReadInt(); m_ClubDamageMax = reader.ReadInt();
                    m_HammerPickDamageMin = reader.ReadInt(); m_HammerPickDamageMax = reader.ReadInt();
                    m_MaceDamageMin = reader.ReadInt(); m_MaceDamageMax = reader.ReadInt();
                    m_WarHammerDamageMin = reader.ReadInt(); m_WarHammerDamageMax = reader.ReadInt();
                    m_WarMaceDamageMin = reader.ReadInt(); m_WarMaceDamageMax = reader.ReadInt();
                    m_BardicheDamageMin = reader.ReadInt(); m_BardicheDamageMax = reader.ReadInt();
                    m_HalberdDamageMin = reader.ReadInt(); m_HalberdDamageMax = reader.ReadInt();
                    m_BowDamageMin = reader.ReadInt(); m_BowDamageMax = reader.ReadInt();
                    m_CrossbowDamageMin = reader.ReadInt(); m_CrossbowDamageMax = reader.ReadInt();
                    m_HeavyCrossbowDamageMin = reader.ReadInt(); m_HeavyCrossbowDamageMax = reader.ReadInt();
                    m_PitchforkDamageMin = reader.ReadInt(); m_PitchforkDamageMax = reader.ReadInt();
                    m_ShortSpearDamageMin = reader.ReadInt(); m_ShortSpearDamageMax = reader.ReadInt();
                    m_SpearDamageMin = reader.ReadInt(); m_SpearDamageMax = reader.ReadInt();
                    m_TribalSpearDamageMin = reader.ReadInt(); m_TribalSpearDamageMax = reader.ReadInt();
                    m_WarForkDamageMin = reader.ReadInt(); m_WarForkDamageMax = reader.ReadInt();
                    m_BlackStaffDamageMin = reader.ReadInt(); m_BlackStaffDamageMax = reader.ReadInt();
                    m_GnarledStaffDamageMin = reader.ReadInt(); m_GnarledStaffDamageMax = reader.ReadInt();
                    m_QuarterStaffDamageMin = reader.ReadInt(); m_QuarterStaffDamageMax = reader.ReadInt();
                    m_ShepherdsCrookDamageMin = reader.ReadInt(); m_ShepherdsCrookDamageMax = reader.ReadInt();
                    m_BroadswordDamageMin = reader.ReadInt(); m_BroadswordDamageMax = reader.ReadInt();
                    m_CutlassDamageMin = reader.ReadInt(); m_CutlassDamageMax = reader.ReadInt();
                    m_KatanaDamageMin = reader.ReadInt(); m_KatanaDamageMax = reader.ReadInt();
                    m_KryssDamageMin = reader.ReadInt(); m_KryssDamageMax = reader.ReadInt();
                    m_LongswordDamageMin = reader.ReadInt(); m_LongswordDamageMax = reader.ReadInt();
                    m_ScimitarDamageMin = reader.ReadInt(); m_ScimitarDamageMax = reader.ReadInt();
                    m_VikingSwordDamageMin = reader.ReadInt(); m_VikingSwordDamageMax = reader.ReadInt();

                    m_WeaponDurabilityLossPercentage = reader.ReadDouble();
                    m_WeaponDurabilitySpeedAdjustment = reader.ReadDouble();
                    break;
            }
            m_Instance = this;
        }