protected override void OnTarget(Mobile from, object target) { if (m_Player == null) { return; } if (m_Player.Backpack == null) { return; } if (m_ShipUpgradeGumpObject == null) { return; } if (m_ShipUpgradeGumpObject.m_ShipUpgradeDeed == null) { m_Player.SendMessage("That upgrade deed is no longer accessible."); return; } if (m_ShipUpgradeGumpObject.m_ShipUpgradeDeed.Deleted) { m_Player.SendMessage("That upgrade deed is no longer accessible."); return; } if (!m_ShipUpgradeGumpObject.m_ShipUpgradeDeed.IsChildOf(m_Player.Backpack)) { m_Player.SendMessage("The upgrade deed you wish to use must be in your backpack."); return; } BaseShipDeed shipDeed = target as BaseShipDeed; if (shipDeed == null) { m_Player.SendMessage("You must target a ship token."); return; } if (shipDeed.Deleted) { m_Player.SendMessage("You must target a ship token."); return; } if (!shipDeed.IsChildOf(m_Player.Backpack)) { m_Player.SendMessage("You must target a ship token in your backpack."); return; } m_ShipUpgradeGumpObject.m_ShipType = shipDeed.ShipType; m_ShipUpgradeGumpObject.m_ShipDeed = shipDeed; m_ShipUpgradeGumpObject.m_UpgradeDisplayMode = ShipUpgradeGump.UpgradeDisplayMode.DeedAttemptInstall; m_Player.CloseGump(typeof(ShipUpgradeGump)); m_Player.SendGump(new ShipUpgradeGump(m_Player, m_ShipUpgradeGumpObject)); }
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); } }