public BaseShipDeed(int id, Point3D offset) : base(5363) { Weight = 1.0; //----- m_MultiID = id; m_Offset = offset; m_ShipName = "an unnamed ship"; ShipStatsProfile shipStatsProfile = ShipUniqueness.GetShipStatsProfile(this, null, true, true); HitPoints = shipStatsProfile.MaxHitPointsAdjusted; SailPoints = shipStatsProfile.MaxSailPointsAdjusted; GunPoints = shipStatsProfile.MaxGunPointsAdjusted; }
public override void OnSingleClick(Mobile from) { ShipStatsProfile shipStatsProfile = ShipUniqueness.GetShipStatsProfile(this, null, false, false); if (!m_Registered) { LabelTo(from, "an unregistered " + shipStatsProfile.ShipTypeName); LabelTo(from, "[double click to view]"); } else { LabelTo(from, m_ShipName); LabelTo(from, "(" + shipStatsProfile.ShipTypeName + ")"); LabelTo(from, "[double click to view]"); } }
public int OnCraft(int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool, CraftItem craftItem, int resHue) { Quality = (Quality)quality; ShipUniqueness.GenerateCreationModifiers(this, null, from, Quality); m_ShipStatsProfile = ShipUniqueness.GetShipStatsProfile(this, null, true, true); HitPoints = m_ShipStatsProfile.MaxHitPointsAdjusted; SailPoints = m_ShipStatsProfile.MaxSailPointsAdjusted; GunPoints = m_ShipStatsProfile.MaxGunPointsAdjusted; m_ShipName = "an unnamed ship"; m_Owner = from as PlayerMobile; return(quality); }
public static void ApplyShipStatsProfile(BaseShip ship, ShipStatsProfile shipStatsProfile) { if (ship == null) { return; } if (shipStatsProfile == null) { return; } if (ship.Hold != null) { ship.Hold.MaxItems = shipStatsProfile.HoldSizeAdjusted; } ship.MaxHitPoints = shipStatsProfile.MaxHitPointsAdjusted; ship.MaxSailPoints = shipStatsProfile.MaxSailPointsAdjusted; ship.MaxGunPoints = shipStatsProfile.MaxGunPointsAdjusted; }
public static ShipStatsProfile ApplyUpgradeModifiers(BaseShipDeed shipDeed, BaseShip ship, ShipStatsProfile shipStatsProfile) { if (shipStatsProfile == null) { return(shipStatsProfile); } List <ShipUpgradeDetail> m_UpgradeDetails = new List <ShipUpgradeDetail>(); ShipUpgrades.ThemeType m_ThemeUpgrade = ShipUpgrades.ThemeType.None; ShipUpgrades.PaintType m_PaintUpgrade = ShipUpgrades.PaintType.None; ShipUpgrades.CannonMetalType m_CannonMetalUpgrade = ShipUpgrades.CannonMetalType.None; ShipUpgrades.OutfittingType m_OutfittingUpgrade = ShipUpgrades.OutfittingType.None; ShipUpgrades.BannerType m_BannerUpgrade = ShipUpgrades.BannerType.None; ShipUpgrades.CharmType m_CharmUpgrade = ShipUpgrades.CharmType.None; ShipUpgrades.MinorAbilityType m_MinorAbilityUpgrade = ShipUpgrades.MinorAbilityType.None; ShipUpgrades.MajorAbilityType m_MajorAbilityUpgrade = ShipUpgrades.MajorAbilityType.None; ShipUpgrades.EpicAbilityType m_EpicAbilityUpgrade = ShipUpgrades.EpicAbilityType.None; #region Get Properties if (shipDeed != null) { m_ThemeUpgrade = shipDeed.m_ThemeUpgrade; m_PaintUpgrade = shipDeed.m_PaintUpgrade; m_CannonMetalUpgrade = shipDeed.m_CannonMetalUpgrade; m_OutfittingUpgrade = shipDeed.m_OutfittingUpgrade; m_BannerUpgrade = shipDeed.m_BannerUpgrade; m_CharmUpgrade = shipDeed.m_CharmUpgrade; m_MinorAbilityUpgrade = shipDeed.m_MinorAbilityUpgrade; m_MajorAbilityUpgrade = shipDeed.m_MajorAbilityUpgrade; m_EpicAbilityUpgrade = shipDeed.m_EpicAbilityUpgrade; } if (ship != null) { m_ThemeUpgrade = ship.m_ThemeUpgrade; m_PaintUpgrade = ship.m_PaintUpgrade; m_CannonMetalUpgrade = ship.m_CannonMetalUpgrade; m_OutfittingUpgrade = ship.m_OutfittingUpgrade; m_BannerUpgrade = ship.m_BannerUpgrade; m_CharmUpgrade = ship.m_CharmUpgrade; m_MinorAbilityUpgrade = ship.m_MinorAbilityUpgrade; m_MajorAbilityUpgrade = ship.m_MajorAbilityUpgrade; m_EpicAbilityUpgrade = ship.m_EpicAbilityUpgrade; } #endregion #region Apply Upgrades m_UpgradeDetails.Add(ShipUpgrades.GetThemeDetail(m_ThemeUpgrade)); m_UpgradeDetails.Add(ShipUpgrades.GetPaintDetail(m_PaintUpgrade)); m_UpgradeDetails.Add(ShipUpgrades.GetCannonMetalDetail(m_CannonMetalUpgrade)); m_UpgradeDetails.Add(ShipUpgrades.GetOutfittingDetail(m_OutfittingUpgrade)); m_UpgradeDetails.Add(ShipUpgrades.GetBannerDetail(m_BannerUpgrade)); m_UpgradeDetails.Add(ShipUpgrades.GetCharmDetail(m_CharmUpgrade)); m_UpgradeDetails.Add(ShipUpgrades.GetMinorAbilityDetail(m_MinorAbilityUpgrade)); m_UpgradeDetails.Add(ShipUpgrades.GetMajorAbilityDetail(m_MajorAbilityUpgrade)); m_UpgradeDetails.Add(ShipUpgrades.GetEpicAbilityDetail(m_EpicAbilityUpgrade)); foreach (ShipUpgradeDetail shipUpgradeDetail in m_UpgradeDetails) { if (shipUpgradeDetail == null) { continue; } shipStatsProfile.HoldSizeUpgradeModifier += shipUpgradeDetail.HoldCapacity; shipStatsProfile.MaxHitPointsUpgradeModifier += shipUpgradeDetail.MaxHitPoints; shipStatsProfile.MaxSailPointsUpgradeModifier += shipUpgradeDetail.MaxSailPoints; shipStatsProfile.MaxGunPointsUpgradeModifier += shipUpgradeDetail.MaxGunPoints; shipStatsProfile.ForwardSpeedUpgradeModifier += shipUpgradeDetail.ForwardSpeed; shipStatsProfile.DriftSpeedUpgradeModifier += shipUpgradeDetail.DriftSpeed; shipStatsProfile.SlowdownModePenaltyUpgradeModifier += shipUpgradeDetail.SlowdownModePenalty; shipStatsProfile.CannonAccuracyUpgradeModifier += shipUpgradeDetail.CannonAccuracy; shipStatsProfile.CannonDamageUpgradeModifier += shipUpgradeDetail.CannonDamage; shipStatsProfile.CannonRangeUpgradeModifier += shipUpgradeDetail.CannonRange; shipStatsProfile.CannonReloadDurationUpgradeModifier += shipUpgradeDetail.CannonReloadTime; shipStatsProfile.MinorAbilityCooldownDurationUpgradeModifier += shipUpgradeDetail.MinorAbilityCooldown; shipStatsProfile.MajorAbilityCooldownDurationUpgradeModifier += shipUpgradeDetail.MajorAbilityCooldown; shipStatsProfile.EpicAbilityCooldownDurationUpgradeModifier += shipUpgradeDetail.EpicAbilityCooldown; shipStatsProfile.RepairCooldownDurationUpgradeModifier += shipUpgradeDetail.RepairCooldown; shipStatsProfile.BoardingChanceUpgradeModifier += shipUpgradeDetail.BoardingChance; shipStatsProfile.CannonEnemyCrewDamageUpgradeModifier += shipUpgradeDetail.CannonEnemyCrewDamage; shipStatsProfile.CannonHitPointsDamageUpgradeModifier += shipUpgradeDetail.CannonHitPointsDamage; shipStatsProfile.CannonSailPointsDamageUpgradeModifier += shipUpgradeDetail.CannonSailPointsDamage; shipStatsProfile.CannonGunPointsDamageUpgradeModifier += shipUpgradeDetail.CannonGunPointsDamage; shipStatsProfile.CrewDamageMeleeDamageDealtUpgradeModifier += shipUpgradeDetail.CrewDamageMeleeDamageDealt; shipStatsProfile.CrewDamageSpellDamageDealtUpgradeModifier += shipUpgradeDetail.CrewDamageSpellDamageDealt; shipStatsProfile.CrewDamageMeleeDamageReceivedUpgradeModifier += shipUpgradeDetail.CrewDamageMeleeDamageReceived; shipStatsProfile.CrewDamageSpellDamageReceivedUpgradeModifier += shipUpgradeDetail.CrewDamageSpellDamageReceived; shipStatsProfile.CrewDamageCannonDamageReceivedUpgradeModifier += shipUpgradeDetail.CrewDamageCannonDamageReceived; shipStatsProfile.RepairHitPointsBonusUpgradeModifier += shipUpgradeDetail.RepairHitPointsBonus; shipStatsProfile.RepairSailPointsBonusUpgradeModifier += shipUpgradeDetail.RepairSailPointsBonus; shipStatsProfile.RepairGunPointsBonusUpgradeModifier += shipUpgradeDetail.RepairGunPointsBonus; shipStatsProfile.RepairMaterialsReductionUpgradeModifier += shipUpgradeDetail.RepairMaterialsReduction; shipStatsProfile.MinorAbilityEffectivenessUpgradeModifier += shipUpgradeDetail.MinorAbilityEffectiveness; shipStatsProfile.MajorAbilityEffectivenessUpgradeModifier += shipUpgradeDetail.MajorAbilityEffectiveness; shipStatsProfile.EpicAbilityEffectivenessUpgradeModifier += shipUpgradeDetail.EpicAbilityEffectiveness; shipStatsProfile.CrewHealingReceivedUpgradeModifier += shipUpgradeDetail.CrewHealingReceived; shipStatsProfile.DoubloonsEarnedFromEnemyCrewUpgradeModifier += shipUpgradeDetail.DoubloonsEarnedFromEnemyCrew; shipStatsProfile.DoubloonsEarnedFromEnemyShipsUpgradeModifier += shipUpgradeDetail.DoubloonsEarnedFromEnemyShips; shipStatsProfile.FishingSuccessUpgradeModifier += shipUpgradeDetail.FishingSuccess; shipStatsProfile.SpyglassAccuracyUpgradeModifier += shipUpgradeDetail.SpyglassAccuracy; } #endregion return(shipStatsProfile); }
public static ShipStatsProfile ApplyCreationModifiers(BaseShipDeed shipDeed, BaseShip ship, ShipStatsProfile shipStatsProfile) { if (shipStatsProfile == null) { return(shipStatsProfile); } #region Get Properties if (shipDeed != null) { shipStatsProfile.HoldSizeCreationModifier = shipDeed.HoldSizeCreationModifier; shipStatsProfile.MaxHitPointsCreationModifier = shipDeed.MaxHitPointsCreationModifier; shipStatsProfile.MaxSailPointsCreationModifier = shipDeed.MaxSailPointsCreationModifier; shipStatsProfile.MaxGunPointsCreationModifier = shipDeed.MaxGunPointsCreationModifier; shipStatsProfile.ForwardSpeedCreationModifier = shipDeed.ForwardSpeedCreationModifier; shipStatsProfile.DriftSpeedCreationModifier = shipDeed.DriftSpeedCreationModifier; shipStatsProfile.SlowdownModePenaltyCreationModifier = shipDeed.SlowdownModePenaltyCreationModifier; shipStatsProfile.CannonAccuracyCreationModifier = shipDeed.CannonAccuracyCreationModifier; shipStatsProfile.CannonDamageCreationModifier = shipDeed.CannonDamageCreationModifier; shipStatsProfile.CannonRangeCreationModifier = shipDeed.CannonRangeCreationModifier; shipStatsProfile.CannonReloadDurationCreationModifier = shipDeed.CannonReloadDurationCreationModifier; shipStatsProfile.MinorAbilityCooldownDurationCreationModifier = shipDeed.MinorAbilityCooldownDurationCreationModifier; shipStatsProfile.MajorAbilityCooldownDurationCreationModifier = shipDeed.MajorAbilityCooldownDurationCreationModifier; shipStatsProfile.EpicAbilityCooldownDurationCreationModifier = shipDeed.EpicAbilityCooldownDurationCreationModifier; shipStatsProfile.RepairCooldownDurationCreationModifier = shipDeed.RepairCooldownDurationCreationModifier; shipStatsProfile.BoardingChanceCreationModifier = shipDeed.BoardingChanceCreationModifier; } if (ship != null) { shipStatsProfile.HoldSizeCreationModifier = ship.HoldSizeCreationModifier; shipStatsProfile.MaxHitPointsCreationModifier = ship.MaxHitPointsCreationModifier; shipStatsProfile.MaxSailPointsCreationModifier = ship.MaxSailPointsCreationModifier; shipStatsProfile.MaxGunPointsCreationModifier = ship.MaxGunPointsCreationModifier; shipStatsProfile.ForwardSpeedCreationModifier = ship.ForwardSpeedCreationModifier; shipStatsProfile.DriftSpeedCreationModifier = ship.DriftSpeedCreationModifier; shipStatsProfile.SlowdownModePenaltyCreationModifier = ship.SlowdownModePenaltyCreationModifier; shipStatsProfile.CannonAccuracyCreationModifier = ship.CannonAccuracyCreationModifier; shipStatsProfile.CannonDamageCreationModifier = ship.CannonDamageCreationModifier; shipStatsProfile.CannonRangeCreationModifier = ship.CannonRangeCreationModifier; shipStatsProfile.CannonReloadDurationCreationModifier = ship.CannonReloadDurationCreationModifier; shipStatsProfile.MinorAbilityCooldownDurationCreationModifier = ship.MinorAbilityCooldownDurationCreationModifier; shipStatsProfile.MajorAbilityCooldownDurationCreationModifier = ship.MajorAbilityCooldownDurationCreationModifier; shipStatsProfile.EpicAbilityCooldownDurationCreationModifier = ship.EpicAbilityCooldownDurationCreationModifier; shipStatsProfile.RepairCooldownDurationCreationModifier = ship.RepairCooldownDurationCreationModifier; shipStatsProfile.BoardingChanceCreationModifier = ship.BoardingChanceCreationModifier; } #endregion return(shipStatsProfile); }
public static ShipStatsProfile GetShipStatsProfile(BaseShipDeed shipDeed, BaseShip ship, bool applyCreationModifiers, bool applyUpgradeModifiers) { Type type = null; if (shipDeed != null) { type = shipDeed.ShipType; } if (ship != null) { type = ship.GetType(); } ShipStatsProfile shipStatsProfile = new ShipStatsProfile(); if (type == null) { return(shipStatsProfile); } shipStatsProfile.shipType = type; #region Small Ship if (type == typeof(SmallShip) || type == typeof(SmallDragonShip)) { if (type == typeof(SmallShip)) { shipStatsProfile.ShipTypeName = "small ship"; } if (type == typeof(SmallDragonShip)) { shipStatsProfile.ShipTypeName = "small dragon ship"; } if (ship != null) { if (ship.MobileControlType == MobileControlType.Player) { } else { } } } #endregion #region Medium Ship if (type == typeof(MediumShip) || type == typeof(MediumDragonShip)) { if (type == typeof(MediumShip)) { shipStatsProfile.ShipTypeName = "medium ship"; } if (type == typeof(MediumDragonShip)) { shipStatsProfile.ShipTypeName = "medium dragon ship"; } shipStatsProfile.RegistrationDoubloonCost = 500; shipStatsProfile.UpgradeDoubloonMultiplier = 1.5; shipStatsProfile.HoldSize = 75; shipStatsProfile.ForwardSpeed = 0.25; shipStatsProfile.DriftSpeed = 0.5; shipStatsProfile.CannonsPerSide = 4; shipStatsProfile.CannonReloadDuration = 8; if (ship != null) { if (ship.MobileControlType == MobileControlType.Player) { shipStatsProfile.MaxHitPoints = 1250; shipStatsProfile.MaxSailPoints = 625; shipStatsProfile.MaxGunPoints = 625; } else { shipStatsProfile.MaxHitPoints = 1250; shipStatsProfile.MaxSailPoints = 625; shipStatsProfile.MaxGunPoints = 625; } } } #endregion #region Large Ship if (type == typeof(LargeShip) || type == typeof(LargeDragonShip)) { if (type == typeof(LargeShip)) { shipStatsProfile.ShipTypeName = "large ship"; } if (type == typeof(LargeDragonShip)) { shipStatsProfile.ShipTypeName = "large dragon ship"; } shipStatsProfile.RegistrationDoubloonCost = 1500; shipStatsProfile.UpgradeDoubloonMultiplier = 2.0; shipStatsProfile.HoldSize = 100; shipStatsProfile.ForwardSpeed = 0.3; shipStatsProfile.DriftSpeed = 0.6; shipStatsProfile.CannonsPerSide = 5; shipStatsProfile.CannonReloadDuration = 10; if (ship.MobileControlType == MobileControlType.Player) { shipStatsProfile.MaxHitPoints = 1500; shipStatsProfile.MaxSailPoints = 750; shipStatsProfile.MaxGunPoints = 750; } else { shipStatsProfile.MaxHitPoints = 1500; shipStatsProfile.MaxSailPoints = 750; shipStatsProfile.MaxGunPoints = 750; } } #endregion #region Carrack if (type == typeof(Carrack)) { shipStatsProfile.ShipTypeName = "carrack"; shipStatsProfile.RegistrationDoubloonCost = 5000; shipStatsProfile.UpgradeDoubloonMultiplier = 3.0; shipStatsProfile.HoldSize = 125; shipStatsProfile.ForwardSpeed = 0.35; shipStatsProfile.DriftSpeed = 0.7; shipStatsProfile.CannonsPerSide = 6; shipStatsProfile.CannonReloadDuration = 12; if (ship.MobileControlType == MobileControlType.Player) { shipStatsProfile.MaxHitPoints = 2000; shipStatsProfile.MaxSailPoints = 1000; shipStatsProfile.MaxGunPoints = 1000; } else { shipStatsProfile.MaxHitPoints = 2000; shipStatsProfile.MaxSailPoints = 1000; shipStatsProfile.MaxGunPoints = 1000; } } #endregion #region Galleon if (type == typeof(Galleon)) { shipStatsProfile.ShipTypeName = "galleon"; shipStatsProfile.RegistrationDoubloonCost = 20000; shipStatsProfile.UpgradeDoubloonMultiplier = 4.0; shipStatsProfile.HoldSize = 150; shipStatsProfile.ForwardSpeed = 0.4; shipStatsProfile.DriftSpeed = 0.8; shipStatsProfile.CannonsPerSide = 7; shipStatsProfile.CannonReloadDuration = 14; if (ship.MobileControlType == MobileControlType.Player) { shipStatsProfile.MaxHitPoints = 3000; shipStatsProfile.MaxSailPoints = 1500; shipStatsProfile.MaxGunPoints = 1500; } else { shipStatsProfile.MaxHitPoints = 3000; shipStatsProfile.MaxSailPoints = 1500; shipStatsProfile.MaxGunPoints = 1500; } } #endregion #region Ship of the Line if (type == typeof(ShipOfTheLineShip)) { shipStatsProfile.ShipTypeName = "ship of the line"; shipStatsProfile.RegistrationDoubloonCost = 50000; shipStatsProfile.UpgradeDoubloonMultiplier = 5.0; shipStatsProfile.HoldSize = 200; shipStatsProfile.ForwardSpeed = 0.45; shipStatsProfile.DriftSpeed = 0.9; shipStatsProfile.CannonsPerSide = 8; shipStatsProfile.CannonReloadDuration = 16; if (ship.MobileControlType == MobileControlType.Player) { shipStatsProfile.MaxHitPoints = 4000; shipStatsProfile.MaxSailPoints = 2000; shipStatsProfile.MaxGunPoints = 2000; } else { shipStatsProfile.MaxHitPoints = 4000; shipStatsProfile.MaxSailPoints = 2000; shipStatsProfile.MaxGunPoints = 2000; } } #endregion if (applyCreationModifiers) { shipStatsProfile = ApplyCreationModifiers(shipDeed, ship, shipStatsProfile); } if (applyUpgradeModifiers) { shipStatsProfile = ApplyUpgradeModifiers(shipDeed, ship, shipStatsProfile); } shipStatsProfile.CalculateAdjustedValues(); return(shipStatsProfile); }
public override void OnResponse(NetState sender, RelayInfo info) { if (m_Player == null) { return; } if (m_Player.Deleted) { return; } if (m_Player.Backpack == null) { return; } if (m_ShipUpgradeGumpObject == null) { return; } bool closeGump = true; BaseShip ship = m_ShipUpgradeGumpObject.m_Ship; BaseShipDeed shipDeed = m_ShipUpgradeGumpObject.m_ShipDeed; ShipUpgradeDeed shipUpgradeDeed = m_ShipUpgradeGumpObject.m_ShipUpgradeDeed; ShipStatsProfile shipStatsProfile = ShipUniqueness.GetShipStatsProfile(shipDeed, ship, true, true); ShipUpgradeDetail upgradeDetail = null; bool replaceExistingUpgrade = false; #region Upgrade Type switch (m_ShipUpgradeGumpObject.m_UpgradeType) { case ShipUpgrades.UpgradeType.Theme: if (ship != null) { if (ship.m_ThemeUpgrade != ShipUpgrades.ThemeType.None) { replaceExistingUpgrade = true; } } if (shipDeed != null) { if (shipDeed.m_ThemeUpgrade != ShipUpgrades.ThemeType.None) { replaceExistingUpgrade = true; } } upgradeDetail = ShipUpgrades.GetThemeDetail(m_ShipUpgradeGumpObject.m_Theme); break; case ShipUpgrades.UpgradeType.Paint: if (ship != null) { if (ship.m_PaintUpgrade != ShipUpgrades.PaintType.None) { replaceExistingUpgrade = true; } } if (shipDeed != null) { if (shipDeed.m_PaintUpgrade != ShipUpgrades.PaintType.None) { replaceExistingUpgrade = true; } } upgradeDetail = ShipUpgrades.GetPaintDetail(m_ShipUpgradeGumpObject.m_Paint); break; case ShipUpgrades.UpgradeType.CannonMetal: if (ship != null) { if (ship.m_CannonMetalUpgrade != ShipUpgrades.CannonMetalType.None) { replaceExistingUpgrade = true; } } if (shipDeed != null) { if (shipDeed.m_CannonMetalUpgrade != ShipUpgrades.CannonMetalType.None) { replaceExistingUpgrade = true; } } upgradeDetail = ShipUpgrades.GetCannonMetalDetail(m_ShipUpgradeGumpObject.m_CannonMetal); break; case ShipUpgrades.UpgradeType.Outfitting: if (ship != null) { if (ship.m_OutfittingUpgrade != ShipUpgrades.OutfittingType.None) { replaceExistingUpgrade = true; } } if (shipDeed != null) { if (shipDeed.m_OutfittingUpgrade != ShipUpgrades.OutfittingType.None) { replaceExistingUpgrade = true; } } upgradeDetail = ShipUpgrades.GetOutfittingDetail(m_ShipUpgradeGumpObject.m_Outfitting); break; case ShipUpgrades.UpgradeType.Banner: if (ship != null) { if (ship.m_BannerUpgrade != ShipUpgrades.BannerType.None) { replaceExistingUpgrade = true; } } if (shipDeed != null) { if (shipDeed.m_BannerUpgrade != ShipUpgrades.BannerType.None) { replaceExistingUpgrade = true; } } upgradeDetail = ShipUpgrades.GetBannerDetail(m_ShipUpgradeGumpObject.m_Banner); break; case ShipUpgrades.UpgradeType.Charm: if (ship != null) { if (ship.m_CharmUpgrade != ShipUpgrades.CharmType.None) { replaceExistingUpgrade = true; } } if (shipDeed != null) { if (shipDeed.m_CharmUpgrade != ShipUpgrades.CharmType.None) { replaceExistingUpgrade = true; } } upgradeDetail = ShipUpgrades.GetCharmDetail(m_ShipUpgradeGumpObject.m_Charm); break; case ShipUpgrades.UpgradeType.MinorAbility: if (ship != null) { if (ship.m_MinorAbilityUpgrade != ShipUpgrades.MinorAbilityType.None) { replaceExistingUpgrade = true; } } if (shipDeed != null) { if (shipDeed.m_MinorAbilityUpgrade != ShipUpgrades.MinorAbilityType.None) { replaceExistingUpgrade = true; } } upgradeDetail = ShipUpgrades.GetMinorAbilityDetail(m_ShipUpgradeGumpObject.m_MinorAbility); break; case ShipUpgrades.UpgradeType.MajorAbility: if (ship != null) { if (ship.m_MajorAbilityUpgrade != ShipUpgrades.MajorAbilityType.None) { replaceExistingUpgrade = true; } } if (shipDeed != null) { if (shipDeed.m_MajorAbilityUpgrade != ShipUpgrades.MajorAbilityType.None) { replaceExistingUpgrade = true; } } upgradeDetail = ShipUpgrades.GetMajorAbilityDetail(m_ShipUpgradeGumpObject.m_MajorAbility); break; case ShipUpgrades.UpgradeType.EpicAbility: if (ship != null) { if (ship.m_EpicAbilityUpgrade != ShipUpgrades.EpicAbilityType.None) { replaceExistingUpgrade = true; } } if (shipDeed != null) { if (shipDeed.m_EpicAbilityUpgrade != ShipUpgrades.EpicAbilityType.None) { replaceExistingUpgrade = true; } } upgradeDetail = ShipUpgrades.GetEpicAbilityDetail(m_ShipUpgradeGumpObject.m_EpicAbility); break; } #endregion if (upgradeDetail == null) { return; } switch (info.ButtonID) { //Guide case 1: closeGump = false; break; //Install case 2: switch (m_ShipUpgradeGumpObject.m_UpgradeDisplayMode) { case UpgradeDisplayMode.DeedUse: if (shipUpgradeDeed == null) { m_Player.SendMessage("That deed is no longer accessible."); } else if (shipUpgradeDeed.Deleted) { m_Player.SendMessage("That deed is no longer accessible."); } else if (!shipUpgradeDeed.IsChildOf(m_Player.Backpack)) { m_Player.SendMessage("That deed is no longer accessible."); } else { m_Player.SendMessage("Which ship do you wish to install this upgrade into?"); m_Player.Target = new ShipUpgradeTarget(m_Player, m_ShipUpgradeGumpObject); return; } break; case UpgradeDisplayMode.DeedAttemptInstall: if (shipUpgradeDeed == null) { m_Player.SendMessage("That upgrade deed is no longer accessible."); } else if (shipUpgradeDeed.Deleted) { m_Player.SendMessage("That upgrade deed is no longer accessible."); } else if (!shipUpgradeDeed.IsChildOf(m_Player.Backpack)) { m_Player.SendMessage("That upgrade deed is no longer accessible."); } else if (shipDeed == null) { m_Player.SendMessage("That ship token is no longer accessible."); } else if (shipDeed.Deleted) { m_Player.SendMessage("That ship token is no longer accessible."); } else if (!shipDeed.IsChildOf(m_Player.Backpack)) { m_Player.SendMessage("That ship token is no longer accessible."); } else { int doubloonBaseCost = ShipUniqueness.GetShipUpgradeBaseDoubloonCost(upgradeDetail.m_UpgradeType); double doubloonMultiplier = shipStatsProfile.UpgradeDoubloonMultiplier; int doubloonAdjustedCost = (int)(Math.Round((double)doubloonBaseCost * (double)doubloonMultiplier)); if (replaceExistingUpgrade) { doubloonAdjustedCost = 0; } int doubloonBalance = Banker.GetUniqueCurrencyBalance(m_Player, typeof(Doubloon)); if (doubloonBalance >= doubloonAdjustedCost) { if (doubloonAdjustedCost > 0) { Banker.WithdrawUniqueCurrency(m_Player, typeof(Doubloon), doubloonAdjustedCost, true); } switch (upgradeDetail.m_UpgradeType) { case ShipUpgrades.UpgradeType.Theme: shipDeed.m_ThemeUpgrade = shipUpgradeDeed.m_ThemeUpgrade; break; case ShipUpgrades.UpgradeType.Paint: shipDeed.m_PaintUpgrade = shipUpgradeDeed.m_PaintUpgrade; break; case ShipUpgrades.UpgradeType.CannonMetal: shipDeed.m_CannonMetalUpgrade = shipUpgradeDeed.m_CannonMetalUpgrade; break; case ShipUpgrades.UpgradeType.Outfitting: shipDeed.m_OutfittingUpgrade = shipUpgradeDeed.m_OutfittingUpgrade; break; case ShipUpgrades.UpgradeType.Banner: shipDeed.m_BannerUpgrade = shipUpgradeDeed.m_BannerUpgrade; break; case ShipUpgrades.UpgradeType.Charm: shipDeed.m_CharmUpgrade = shipUpgradeDeed.m_CharmUpgrade; break; case ShipUpgrades.UpgradeType.MinorAbility: shipDeed.m_MinorAbilityUpgrade = shipUpgradeDeed.m_MinorAbilityUpgrade; break; case ShipUpgrades.UpgradeType.MajorAbility: shipDeed.m_MajorAbilityUpgrade = shipUpgradeDeed.m_MajorAbilityUpgrade; break; case ShipUpgrades.UpgradeType.EpicAbility: shipDeed.m_EpicAbilityUpgrade = shipUpgradeDeed.m_EpicAbilityUpgrade; break; } if (m_Player.HasGump(typeof(ShipGump))) { m_Player.CloseGump(typeof(ShipGump)); } ShipGumpObject shipGumpObject = new ShipGumpObject(m_Player, null, shipDeed); shipGumpObject.m_ShipPage = ShipGump.ShipPageType.Upgrades; m_Player.SendGump(new ShipGump(m_Player, shipGumpObject)); if (replaceExistingUpgrade) { m_Player.SendMessage("You place an upgrade onto your ship, overriding the existing one."); } else { m_Player.SendMessage("You place an upgrade onto your ship."); } m_Player.SendSound(0x23D); m_ShipUpgradeGumpObject.m_ShipUpgradeDeed.Delete(); return; } else { m_Player.SendMessage("You do not have the neccessary " + doubloonAdjustedCost.ToString() + " doubloons in your bank box to install this upgrade."); } } break; case UpgradeDisplayMode.InstalledOnShip: break; } closeGump = false; break; } if (!closeGump) { m_Player.CloseGump(typeof(ShipUpgradeGump)); m_Player.SendGump(new ShipUpgradeGump(m_Player, m_ShipUpgradeGumpObject)); } else { m_Player.SendSound(CloseGumpSound); } }
public ShipUpgradeGump(PlayerMobile player, ShipUpgradeGumpObject shipUpgradeGumpObject) : base(325, 150) { m_Player = player; m_ShipUpgradeGumpObject = shipUpgradeGumpObject; if (m_Player == null) { return; } if (m_Player.Deleted) { return; } if (m_ShipUpgradeGumpObject == null) { return; } BaseShip ship = m_ShipUpgradeGumpObject.m_Ship; BaseShipDeed shipDeed = m_ShipUpgradeGumpObject.m_ShipDeed; ShipStatsProfile shipStatsProfile = ShipUniqueness.GetShipStatsProfile(shipDeed, ship, true, true); int startX = 0; int startY = 0; #region Background AddImage(275, 9, 103); AddImage(275, 106, 103); AddImage(275, 149, 103); AddImage(145, 9, 103); AddImage(145, 106, 103); AddImage(146, 149, 103); AddImage(10, 148, 103); AddImage(10, 9, 103); AddImage(10, 106, 103); AddImage(20, 108, 3604, 2052); AddImage(145, 109, 3604, 2052); AddImage(20, 19, 3604, 2052); AddImage(140, 19, 3604, 2052); AddImage(236, 18, 3604, 2052); AddImage(280, 18, 3604, 2052); AddImage(236, 109, 3604, 2052); AddImage(280, 109, 3604, 2052); AddImage(33, 68, 2328); AddItem(82, 173, 2539); #endregion ShipUpgradeDetail upgradeDetail = null; bool replaceExistingUpgrade = false; #region Upgrade Type switch (m_ShipUpgradeGumpObject.m_UpgradeType) { case ShipUpgrades.UpgradeType.Theme: if (ship != null) { if (ship.m_ThemeUpgrade != ShipUpgrades.ThemeType.None) { replaceExistingUpgrade = true; } } if (shipDeed != null) { if (shipDeed.m_ThemeUpgrade != ShipUpgrades.ThemeType.None) { replaceExistingUpgrade = true; } } upgradeDetail = ShipUpgrades.GetThemeDetail(m_ShipUpgradeGumpObject.m_Theme); break; case ShipUpgrades.UpgradeType.Paint: if (ship != null) { if (ship.m_PaintUpgrade != ShipUpgrades.PaintType.None) { replaceExistingUpgrade = true; } } if (shipDeed != null) { if (shipDeed.m_PaintUpgrade != ShipUpgrades.PaintType.None) { replaceExistingUpgrade = true; } } upgradeDetail = ShipUpgrades.GetPaintDetail(m_ShipUpgradeGumpObject.m_Paint); break; case ShipUpgrades.UpgradeType.CannonMetal: if (ship != null) { if (ship.m_CannonMetalUpgrade != ShipUpgrades.CannonMetalType.None) { replaceExistingUpgrade = true; } } if (shipDeed != null) { if (shipDeed.m_CannonMetalUpgrade != ShipUpgrades.CannonMetalType.None) { replaceExistingUpgrade = true; } } upgradeDetail = ShipUpgrades.GetCannonMetalDetail(m_ShipUpgradeGumpObject.m_CannonMetal); break; case ShipUpgrades.UpgradeType.Outfitting: if (ship != null) { if (ship.m_OutfittingUpgrade != ShipUpgrades.OutfittingType.None) { replaceExistingUpgrade = true; } } if (shipDeed != null) { if (shipDeed.m_OutfittingUpgrade != ShipUpgrades.OutfittingType.None) { replaceExistingUpgrade = true; } } upgradeDetail = ShipUpgrades.GetOutfittingDetail(m_ShipUpgradeGumpObject.m_Outfitting); break; case ShipUpgrades.UpgradeType.Banner: if (ship != null) { if (ship.m_BannerUpgrade != ShipUpgrades.BannerType.None) { replaceExistingUpgrade = true; } } if (shipDeed != null) { if (shipDeed.m_BannerUpgrade != ShipUpgrades.BannerType.None) { replaceExistingUpgrade = true; } } upgradeDetail = ShipUpgrades.GetBannerDetail(m_ShipUpgradeGumpObject.m_Banner); break; case ShipUpgrades.UpgradeType.Charm: if (ship != null) { if (ship.m_CharmUpgrade != ShipUpgrades.CharmType.None) { replaceExistingUpgrade = true; } } if (shipDeed != null) { if (shipDeed.m_CharmUpgrade != ShipUpgrades.CharmType.None) { replaceExistingUpgrade = true; } } upgradeDetail = ShipUpgrades.GetCharmDetail(m_ShipUpgradeGumpObject.m_Charm); break; case ShipUpgrades.UpgradeType.MinorAbility: if (ship != null) { if (ship.m_MinorAbilityUpgrade != ShipUpgrades.MinorAbilityType.None) { replaceExistingUpgrade = true; } } if (shipDeed != null) { if (shipDeed.m_MinorAbilityUpgrade != ShipUpgrades.MinorAbilityType.None) { replaceExistingUpgrade = true; } } upgradeDetail = ShipUpgrades.GetMinorAbilityDetail(m_ShipUpgradeGumpObject.m_MinorAbility); break; case ShipUpgrades.UpgradeType.MajorAbility: if (ship != null) { if (ship.m_MajorAbilityUpgrade != ShipUpgrades.MajorAbilityType.None) { replaceExistingUpgrade = true; } } if (shipDeed != null) { if (shipDeed.m_MajorAbilityUpgrade != ShipUpgrades.MajorAbilityType.None) { replaceExistingUpgrade = true; } } upgradeDetail = ShipUpgrades.GetMajorAbilityDetail(m_ShipUpgradeGumpObject.m_MajorAbility); break; case ShipUpgrades.UpgradeType.EpicAbility: if (ship != null) { if (ship.m_EpicAbilityUpgrade != ShipUpgrades.EpicAbilityType.None) { replaceExistingUpgrade = true; } } if (shipDeed != null) { if (shipDeed.m_EpicAbilityUpgrade != ShipUpgrades.EpicAbilityType.None) { replaceExistingUpgrade = true; } } upgradeDetail = ShipUpgrades.GetEpicAbilityDetail(m_ShipUpgradeGumpObject.m_EpicAbility); break; } #endregion if (upgradeDetail == null) { return; } int doubloonBaseCost = ShipUniqueness.GetShipUpgradeBaseDoubloonCost(upgradeDetail.m_UpgradeType); AddLabel(143, 20, 149, "Ship Outfitting Upgrade"); AddLabel(Utility.CenteredTextOffset(210, upgradeDetail.m_UpgradeName), 40, WhiteTextHue, upgradeDetail.m_UpgradeName); AddLabel(26, 170, 149, "Base Cost:"); AddLabel(114, 170, WhiteTextHue, doubloonBaseCost.ToString()); double doubloonMultiplier = shipStatsProfile.UpgradeDoubloonMultiplier; if (m_ShipUpgradeGumpObject.m_UpgradeDisplayMode == UpgradeDisplayMode.DeedAttemptInstall || m_ShipUpgradeGumpObject.m_UpgradeDisplayMode == UpgradeDisplayMode.InstalledOnShip) { if (replaceExistingUpgrade && m_ShipUpgradeGumpObject.m_UpgradeDisplayMode == UpgradeDisplayMode.DeedAttemptInstall) { AddLabel(26, 190, 149, "Will Replace Existing Upgrade"); AddLabel(213, 190, 2550, "(at no cost)"); } else { AddLabel(26, 190, 149, "Ship Type Multiplier:"); AddLabel(151, 190, WhiteTextHue, Utility.CreateDecimalString(doubloonMultiplier, 1) + "x"); } int doubloonAdjustedCost = (int)(Math.Round((double)doubloonBaseCost * (double)doubloonMultiplier)); if (replaceExistingUpgrade && m_ShipUpgradeGumpObject.m_UpgradeDisplayMode == UpgradeDisplayMode.DeedAttemptInstall) { doubloonAdjustedCost = 0; } AddLabel(26, 210, 149, "Adjusted Cost:"); AddItem(112, 213, 2539); AddLabel(143, 210, 63, doubloonAdjustedCost.ToString()); } startY = 65; int rowSpacing = 20; for (int a = 0; a < upgradeDetail.m_SpecialEffects.Count; a++) { KeyValuePair <string, ShipUpgradeDetail.UpgradeEffectType> descriptionLine = upgradeDetail.m_SpecialEffects[a]; AddLabel(125, startY, upgradeDetail.GetHue(descriptionLine.Value), descriptionLine.Key); startY += rowSpacing; } int offsetX = -32; int offsetY = -22; AddGumpCollection(GumpCollections.GetGumpCollection(upgradeDetail.GumpCollectionId, -1), offsetX + 33, offsetY + 68); //Guide AddButton(6, 7, 2094, 2095, 0, GumpButtonType.Reply, 0); AddLabel(1, -2, 149, "Guide"); switch (m_ShipUpgradeGumpObject.m_UpgradeDisplayMode) { case UpgradeDisplayMode.DeedUse: AddLabel(250, 209, 63, "Select Target Ship"); AddButton(372, 206, 2151, 2151, 2, GumpButtonType.Reply, 0); break; case UpgradeDisplayMode.DeedAttemptInstall: AddLabel(211, 209, 63, "Confirm Ship Installation"); AddButton(372, 206, 2151, 2151, 2, GumpButtonType.Reply, 0); break; case UpgradeDisplayMode.InstalledOnShip: break; } }
public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); //Version 0 if (version >= 0) { m_MultiID = reader.ReadInt(); m_Offset = reader.ReadPoint3D(); //----- m_Registered = reader.ReadBool(); m_ShipName = reader.ReadString(); m_Owner = (PlayerMobile)reader.ReadMobile(); int StoredHitPoints = reader.ReadInt(); int StoredSailPoints = reader.ReadInt(); int StoredGunPoints = reader.ReadInt(); MaxHitPointsCreationModifier = reader.ReadDouble(); MaxSailPointsCreationModifier = reader.ReadDouble(); MaxGunPointsCreationModifier = reader.ReadDouble(); ForwardSpeedCreationModifier = reader.ReadDouble(); DriftSpeedCreationModifier = reader.ReadDouble(); SlowdownModePenaltyCreationModifier = reader.ReadDouble(); CannonAccuracyCreationModifier = reader.ReadDouble(); CannonDamageCreationModifier = reader.ReadDouble(); CannonRangeCreationModifier = reader.ReadDouble(); CannonReloadDurationCreationModifier = reader.ReadDouble(); MinorAbilityCooldownDurationCreationModifier = reader.ReadDouble(); MajorAbilityCooldownDurationCreationModifier = reader.ReadDouble(); EpicAbilityCooldownDurationCreationModifier = reader.ReadDouble(); RepairCooldownDurationCreationModifier = reader.ReadDouble(); BoardingChanceCreationModifier = reader.ReadDouble(); m_TargetingMode = (TargetingMode)reader.ReadInt(); m_IPAsCoOwners = reader.ReadBool(); m_GuildAsCoOwners = reader.ReadBool(); m_IPAsFriends = reader.ReadBool(); m_GuildAsFriends = reader.ReadBool(); m_ThemeUpgrade = (ShipUpgrades.ThemeType)reader.ReadInt(); m_PaintUpgrade = (ShipUpgrades.PaintType)reader.ReadInt(); m_CannonMetalUpgrade = (ShipUpgrades.CannonMetalType)reader.ReadInt(); m_OutfittingUpgrade = (ShipUpgrades.OutfittingType)reader.ReadInt(); m_BannerUpgrade = (ShipUpgrades.BannerType)reader.ReadInt(); m_CharmUpgrade = (ShipUpgrades.CharmType)reader.ReadInt(); m_MinorAbilityUpgrade = (ShipUpgrades.MinorAbilityType)reader.ReadInt(); m_MajorAbilityUpgrade = (ShipUpgrades.MajorAbilityType)reader.ReadInt(); m_EpicAbilityUpgrade = (ShipUpgrades.EpicAbilityType)reader.ReadInt(); m_MinorAbilityLastActivated = reader.ReadDateTime(); m_MajorAbilityLastActivated = reader.ReadDateTime(); m_EpicAbilityLastActivated = reader.ReadDateTime(); m_TimeLastRepaired = reader.ReadDateTime(); int coOwnerCount = reader.ReadInt(); for (int a = 0; a < coOwnerCount; a++) { m_CoOwners.Add(reader.ReadMobile()); } int friendCount = reader.ReadInt(); for (int a = 0; a < friendCount; a++) { m_Friends.Add(reader.ReadMobile()); } //----- m_ShipStatsProfile = ShipUniqueness.GetShipStatsProfile(this, null, true, true); HitPoints = StoredHitPoints; SailPoints = StoredSailPoints; GunPoints = StoredGunPoints; } }