private void InputMessageBox_OnGotUserInput(DaggerfallInputMessageBox sender, string input) { daysToRent = 0; bool result = int.TryParse(input, out daysToRent); if (!result || daysToRent < 1) { return; } int daysAlreadyRented = 0; if (rentedRoom != null) { daysAlreadyRented = (int)((rentedRoom.expiryTime - DaggerfallUnity.Instance.WorldTime.Now.ToSeconds()) / DaggerfallDateTime.SecondsPerDay); } if (daysToRent + daysAlreadyRented > 350) { DaggerfallUI.MessageBox(tooManyDaysFutureId); } else { int cost = FormulaHelper.CalculateRoomCost(daysToRent); tradePrice = FormulaHelper.CalculateTradePrice(cost, buildingData.quality, false); DaggerfallMessageBox messageBox = new DaggerfallMessageBox(uiManager, this); TextFile.Token[] tokens = DaggerfallUnity.Instance.TextProvider.GetRandomTokens(offerPriceId); messageBox.SetTextTokens(tokens, this); messageBox.AddButton(DaggerfallMessageBox.MessageBoxButtons.Yes); messageBox.AddButton(DaggerfallMessageBox.MessageBoxButtons.No); messageBox.OnButtonClick += ConfirmRenting_OnButtonClick; uiManager.PushWindow(messageBox); } }
void CureDiseaseService() { CloseWindow(); int numberOfDiseases = 0; if (playerEntity.Disease.IsDiseased()) { numberOfDiseases++; // TODO: Support multiple diseases } if (playerEntity.TimeToBecomeVampireOrWerebeast != 0) { numberOfDiseases++; } if (numberOfDiseases > 0) { // Get base cost int baseCost = 250 * numberOfDiseases; // Apply rank-based discount if this is an Arkay temple baseCost = guild.ReducedCureCost(baseCost); // Apply temple quality and regional price modifiers int costBeforeBargaining = FormulaHelper.CalculateCost(baseCost, buildingDiscoveryData.quality); // Apply bargaining to get final price curingCost = FormulaHelper.CalculateTradePrice(costBeforeBargaining, buildingDiscoveryData.quality, false); // Index correct message const int tradeMessageBaseId = 260; int msgOffset = 0; if (costBeforeBargaining >> 1 <= curingCost) { if (costBeforeBargaining - (costBeforeBargaining >> 2) <= curingCost) { msgOffset = 2; } else { msgOffset = 1; } } // Offer curing at the calculated price. DaggerfallMessageBox messageBox = new DaggerfallMessageBox(uiManager, uiManager.TopWindow); TextFile.Token[] tokens = DaggerfallUnity.Instance.TextProvider.GetRandomTokens(tradeMessageBaseId + msgOffset); messageBox.SetTextTokens(tokens, this); messageBox.AddButton(DaggerfallMessageBox.MessageBoxButtons.Yes); messageBox.AddButton(DaggerfallMessageBox.MessageBoxButtons.No); messageBox.OnButtonClick += ConfirmCuring_OnButtonClick; uiManager.PushWindow(messageBox); } else { // Not diseased DaggerfallUI.MessageBox(30); } }
private int GetTradePrice() { if (windowMode == WindowModes.Sell) { return(FormulaHelper.CalculateTradePrice(cost, buildingDiscoveryData.quality, true)); } else if (windowMode == WindowModes.Identify) { return(cost); } else { return(FormulaHelper.CalculateTradePrice(cost, buildingDiscoveryData.quality, false)); } }
private int GetTradePrice() { switch (windowMode) { case WindowModes.Buy: case WindowModes.Repair: return(FormulaHelper.CalculateTradePrice(cost, buildingDiscoveryData.quality, false)); case WindowModes.Sell: case WindowModes.SellMagic: return(FormulaHelper.CalculateTradePrice(cost, buildingDiscoveryData.quality, true)); case WindowModes.Identify: return(cost); } throw new Exception("Unexpected windowMode"); }
protected override void InputMessageBox_OnGotUserInput(DaggerfallInputMessageBox sender, string input) { daysToRent = 0; bool result = int.TryParse(input, out daysToRent); if (!result || daysToRent < 1) { return; } int daysAlreadyRented = 0; if (rentedRoom != null) { daysAlreadyRented = (int)((rentedRoom.expiryTime - DaggerfallUnity.Instance.WorldTime.Now.ToSeconds()) / DaggerfallDateTime.SecondsPerDay); if (daysAlreadyRented < 0) { daysAlreadyRented = 0; } } if (daysToRent + daysAlreadyRented > 350) { DaggerfallUI.MessageBox(tooManyDaysFutureId); } else if (GameManager.Instance.GuildManager.GetGuild(FactionFile.GuildGroups.KnightlyOrder).FreeTavernRooms()) { DaggerfallUI.MessageBox(TextManager.Instance.GetLocalizedText("roomFreeForKnightSuchAsYou")); RentRoom(); } else { int quality = Mathf.Max((buildingData.quality / 2) - 3, 3); int cost = FormulaHelper.CalculateRoomCost(daysToRent) * quality; tradePrice = FormulaHelper.CalculateTradePrice(cost, buildingData.quality, false); DaggerfallMessageBox messageBox = new DaggerfallMessageBox(uiManager, this); TextFile.Token[] tokens = DaggerfallUnity.Instance.TextProvider.GetRandomTokens(offerPriceId); messageBox.SetTextTokens(tokens, this); messageBox.AddButton(DaggerfallMessageBox.MessageBoxButtons.Yes); messageBox.AddButton(DaggerfallMessageBox.MessageBoxButtons.No); messageBox.OnButtonClick += ConfirmRenting_OnButtonClick; uiManager.PushWindow(messageBox); } }
void CureDiseaseService() { CloseWindow(); int numberOfDiseases = GameManager.Instance.PlayerEffectManager.DiseaseCount; if (playerEntity.TimeToBecomeVampireOrWerebeast != 0) { numberOfDiseases++; } // Check holidays for free / cheaper curing uint minutes = DaggerfallUnity.Instance.WorldTime.DaggerfallDateTime.ToClassicDaggerfallTime(); int holidayId = FormulaHelper.GetHolidayId(minutes, GameManager.Instance.PlayerGPS.CurrentRegionIndex); if (numberOfDiseases > 0 && (holidayId == (int)DFLocation.Holidays.South_Winds_Prayer || holidayId == (int)DFLocation.Holidays.First_Harvest || holidayId == (int)DFLocation.Holidays.Second_Harvest)) { GameManager.Instance.PlayerEffectManager.CureAllDiseases(); playerEntity.TimeToBecomeVampireOrWerebeast = 0; DaggerfallUI.MessageBox(TextManager.Instance.GetText(textDatabase, "freeHolidayCuring")); } else if (numberOfDiseases > 0) { // Get base cost int baseCost = 250 * numberOfDiseases; // Apply rank-based discount if this is an Arkay temple baseCost = guild.ReducedCureCost(baseCost); // Apply temple quality and regional price modifiers int costBeforeBargaining = FormulaHelper.CalculateCost(baseCost, buildingDiscoveryData.quality); // Halve the price on North Winds Prayer holiday if (holidayId == (int)DFLocation.Holidays.North_Winds_Festival) { costBeforeBargaining /= 2; } // Apply bargaining to get final price curingCost = FormulaHelper.CalculateTradePrice(costBeforeBargaining, buildingDiscoveryData.quality, false); // Index correct message const int tradeMessageBaseId = 260; int msgOffset = 0; if (costBeforeBargaining >> 1 <= curingCost) { if (costBeforeBargaining - (costBeforeBargaining >> 2) <= curingCost) { msgOffset = 2; } else { msgOffset = 1; } } // Offer curing at the calculated price. DaggerfallMessageBox messageBox = new DaggerfallMessageBox(uiManager, uiManager.TopWindow); TextFile.Token[] tokens = DaggerfallUnity.Instance.TextProvider.GetRandomTokens(tradeMessageBaseId + msgOffset); messageBox.SetTextTokens(tokens, this); messageBox.AddButton(DaggerfallMessageBox.MessageBoxButtons.Yes); messageBox.AddButton(DaggerfallMessageBox.MessageBoxButtons.No); messageBox.OnButtonClick += ConfirmCuring_OnButtonClick; messageBox.Show(); } else { // Not diseased DaggerfallUI.MessageBox(30); } }
int GetTradePrice() { return(FormulaHelper.CalculateTradePrice(presentedCost, buildingDiscoveryData.quality, false)); }
protected virtual void CureDiseaseService() { int numberOfDiseases = GameManager.Instance.PlayerEffectManager.DiseaseCount; if (playerEntity.TimeToBecomeVampireOrWerebeast != 0) { numberOfDiseases++; } // Check holidays for free / cheaper curing uint minutes = DaggerfallUnity.Instance.WorldTime.DaggerfallDateTime.ToClassicDaggerfallTime(); int holidayId = FormulaHelper.GetHolidayId(minutes, GameManager.Instance.PlayerGPS.CurrentRegionIndex); if (numberOfDiseases > 0 && (holidayId == (int)DFLocation.Holidays.South_Winds_Prayer || holidayId == (int)DFLocation.Holidays.First_Harvest || holidayId == (int)DFLocation.Holidays.Second_Harvest)) { // Just cure and inform player GameManager.Instance.PlayerEffectManager.CureAllDiseases(); playerEntity.TimeToBecomeVampireOrWerebeast = 0; SetText(TextManager.Instance.GetLocalizedText("freeHolidayCuring"), this); ClickAnywhereToClose = true; } else if (numberOfDiseases > 0) { // Get base cost int baseCost = 250 * numberOfDiseases; // Apply rank-based discount if this is an Arkay temple and member baseCost = Guild.ReducedCureCost(baseCost); // Apply temple quality and regional price modifiers int costBeforeBargaining = FormulaHelper.CalculateCost(baseCost, buildingDiscoveryData.quality); // Halve the price on North Winds Prayer holiday if (holidayId == (int)DFLocation.Holidays.North_Winds_Festival) { costBeforeBargaining /= 2; } // Apply bargaining to get final price curingCost = FormulaHelper.CalculateTradePrice(costBeforeBargaining, buildingDiscoveryData.quality, false); // Index correct message int msgOffset = 0; if (costBeforeBargaining >> 1 <= curingCost) { if (costBeforeBargaining - (costBeforeBargaining >> 2) <= curingCost) { msgOffset = 2; } else { msgOffset = 1; } } // Offer curing at the calculated price SetTextTokens(GetCureOfferTokens(msgOffset), this); AddButton(MessageBoxButtons.Yes); AddButton(MessageBoxButtons.No); OnButtonClick += ConfirmCuring_OnButtonClick; } else { // Not diseased SetTextTokens(NoDisease, this); ClickAnywhereToClose = true; } }