Added demolish to buildsel
parent
ec08f2c019
commit
0acdc1c578
|
@ -360,9 +360,47 @@ namespace stardew_access
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
MainClass.monitor.Log($"Available buildings:{toPrint}\nOpen the command menu and use pageup and pagedown to check the list", LogLevel.Info);
|
MainClass.monitor.Log($"Available buildings:{toPrint}\nOpen command menu and use pageup and pagedown to check the list", LogLevel.Info);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
helper.ConsoleCommands.Add("buildsel", "Select the building index which you want to upgrade/demolish/paint", (string commmand, string[] args) =>
|
||||||
|
{
|
||||||
|
|
||||||
|
if (Game1.activeClickableMenu is not CarpenterMenu || !BuildingNAnimalMenuPatches.isOnFarm)
|
||||||
|
{
|
||||||
|
MainClass.monitor.Log($"Cannot list buildings.", LogLevel.Info);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
string? indexInString = args.ElementAtOrDefault(0);
|
||||||
|
if (indexInString == null)
|
||||||
|
{
|
||||||
|
MainClass.monitor.Log("Enter the index of the building too!! Use buildlist command to get the index.", LogLevel.Info);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int index;
|
||||||
|
bool isParsable = int.TryParse(indexInString, out index);
|
||||||
|
|
||||||
|
if (!isParsable)
|
||||||
|
{
|
||||||
|
MainClass.monitor.Log("Index can only be a number.", LogLevel.Info);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (BuildingNAnimalMenuPatches.availableBuildings[index] == null)
|
||||||
|
{
|
||||||
|
MainClass.monitor.Log($"No building found with index {index}. Use buildlist command to get the index.", LogLevel.Info);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (BuildingNAnimalMenuPatches.isConstructing) { }
|
||||||
|
else if (BuildingNAnimalMenuPatches.isDemolishing) { BuildingNAnimalMenuPatches.Demolish(BuildingNAnimalMenuPatches.availableBuildings[index]); }
|
||||||
|
else if (BuildingNAnimalMenuPatches.isUpgrading) { }
|
||||||
|
else if (BuildingNAnimalMenuPatches.isMoving) { }
|
||||||
|
else if (BuildingNAnimalMenuPatches.isPainting) { }
|
||||||
|
});
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
helper.ConsoleCommands.Add("refsr", "Refresh screen reader", (string commmand, string[] args) =>
|
helper.ConsoleCommands.Add("refsr", "Refresh screen reader", (string commmand, string[] args) =>
|
||||||
|
|
|
@ -8,6 +8,7 @@ using AutoHotkey.Interop;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using stardew_access.ScreenReader;
|
using stardew_access.ScreenReader;
|
||||||
using Microsoft.Xna.Framework;
|
using Microsoft.Xna.Framework;
|
||||||
|
using StardewValley.Buildings;
|
||||||
|
|
||||||
namespace stardew_access
|
namespace stardew_access
|
||||||
{
|
{
|
||||||
|
@ -66,6 +67,11 @@ namespace stardew_access
|
||||||
{
|
{
|
||||||
BuildingNAnimalMenuPatches.marked[i] = Vector2.Zero;
|
BuildingNAnimalMenuPatches.marked[i] = Vector2.Zero;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < BuildingNAnimalMenuPatches.availableBuildings.Length; i++)
|
||||||
|
{
|
||||||
|
BuildingNAnimalMenuPatches.availableBuildings[i] = null;
|
||||||
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
helper.Events.Input.ButtonPressed += this.OnButtonPressed;
|
helper.Events.Input.ButtonPressed += this.OnButtonPressed;
|
||||||
|
|
|
@ -2,18 +2,22 @@ using Microsoft.Xna.Framework;
|
||||||
using StardewModdingAPI;
|
using StardewModdingAPI;
|
||||||
using StardewValley;
|
using StardewValley;
|
||||||
using StardewValley.Buildings;
|
using StardewValley.Buildings;
|
||||||
|
using StardewValley.Locations;
|
||||||
using StardewValley.Menus;
|
using StardewValley.Menus;
|
||||||
|
using StardewValley.Objects;
|
||||||
|
|
||||||
namespace stardew_access.Patches
|
namespace stardew_access.Patches
|
||||||
{
|
{
|
||||||
internal class BuildingNAnimalMenuPatches
|
internal class BuildingNAnimalMenuPatches
|
||||||
{
|
{
|
||||||
internal static Vector2[] marked = new Vector2[10];
|
internal static Vector2[] marked = new Vector2[10];
|
||||||
internal static Building[] availableBuildings = new Building[100];
|
internal static Building?[] availableBuildings = new Building[100];
|
||||||
|
internal static CarpenterMenu? carpenterMenu = null;
|
||||||
internal static string carpenterMenuQuery = "";
|
internal static string carpenterMenuQuery = "";
|
||||||
internal static bool isSayingBlueprintInfo = false;
|
internal static bool isSayingBlueprintInfo = false;
|
||||||
internal static string prevBlueprintInfo = "";
|
internal static string prevBlueprintInfo = "";
|
||||||
internal static bool isOnFarm = false, isUpgrading = false, isDemolishing = false, isPainting = false, isConstructing = false, isMoving = false;
|
internal static bool isOnFarm = false, isUpgrading = false, isDemolishing = false, isPainting = false, isConstructing = false, isMoving = false;
|
||||||
|
|
||||||
internal static void CarpenterMenuPatch(
|
internal static void CarpenterMenuPatch(
|
||||||
CarpenterMenu __instance, bool ___onFarm, List<Item> ___ingredients, int ___price,
|
CarpenterMenu __instance, bool ___onFarm, List<Item> ___ingredients, int ___price,
|
||||||
List<BluePrint> ___blueprints, int ___currentBlueprintIndex, bool ___upgrading, bool ___demolishing, bool ___moving,
|
List<BluePrint> ___blueprints, int ___currentBlueprintIndex, bool ___upgrading, bool ___demolishing, bool ___moving,
|
||||||
|
@ -22,6 +26,7 @@ namespace stardew_access.Patches
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
isOnFarm = ___onFarm;
|
isOnFarm = ___onFarm;
|
||||||
|
carpenterMenu = __instance;
|
||||||
if (!___onFarm)
|
if (!___onFarm)
|
||||||
{
|
{
|
||||||
isUpgrading = false;
|
isUpgrading = false;
|
||||||
|
@ -187,6 +192,150 @@ namespace stardew_access.Patches
|
||||||
await Task.Delay(300);
|
await Task.Delay(300);
|
||||||
isSayingBlueprintInfo = false;
|
isSayingBlueprintInfo = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void Demolish(Building? toDemolish)
|
||||||
|
{
|
||||||
|
if (toDemolish == null)
|
||||||
|
return;
|
||||||
|
// This code is taken from the game's code (CarpenterMenu.cs::654)
|
||||||
|
Farm farm = Game1.getLocationFromName("Farm") as Farm;
|
||||||
|
Action buildingLockFailed = delegate
|
||||||
|
{
|
||||||
|
if (isDemolishing)
|
||||||
|
{
|
||||||
|
Game1.addHUDMessage(new HUDMessage(Game1.content.LoadString("Strings\\UI:Carpenter_CantDemolish_LockFailed"), Color.Red, 3500f));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Action continueDemolish = delegate
|
||||||
|
{
|
||||||
|
if (isDemolishing && toDemolish != null && farm.buildings.Contains(toDemolish))
|
||||||
|
{
|
||||||
|
if ((int)toDemolish.daysOfConstructionLeft > 0 || (int)toDemolish.daysUntilUpgrade > 0)
|
||||||
|
{
|
||||||
|
Game1.addHUDMessage(new HUDMessage(Game1.content.LoadString("Strings\\UI:Carpenter_CantDemolish_DuringConstruction"), Color.Red, 3500f));
|
||||||
|
}
|
||||||
|
else if (toDemolish.indoors.Value != null && toDemolish.indoors.Value is AnimalHouse && (toDemolish.indoors.Value as AnimalHouse).animalsThatLiveHere.Count > 0)
|
||||||
|
{
|
||||||
|
Game1.addHUDMessage(new HUDMessage(Game1.content.LoadString("Strings\\UI:Carpenter_CantDemolish_AnimalsHere"), Color.Red, 3500f));
|
||||||
|
}
|
||||||
|
else if (toDemolish.indoors.Value != null && toDemolish.indoors.Value.farmers.Any())
|
||||||
|
{
|
||||||
|
Game1.addHUDMessage(new HUDMessage(Game1.content.LoadString("Strings\\UI:Carpenter_CantDemolish_PlayerHere"), Color.Red, 3500f));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (toDemolish.indoors.Value != null && toDemolish.indoors.Value is Cabin)
|
||||||
|
{
|
||||||
|
foreach (Farmer current in Game1.getAllFarmers())
|
||||||
|
{
|
||||||
|
if (current.currentLocation != null && current.currentLocation.Name == (toDemolish.indoors.Value as Cabin).GetCellarName())
|
||||||
|
{
|
||||||
|
Game1.addHUDMessage(new HUDMessage(Game1.content.LoadString("Strings\\UI:Carpenter_CantDemolish_PlayerHere"), Color.Red, 3500f));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (toDemolish.indoors.Value is Cabin && (toDemolish.indoors.Value as Cabin).farmhand.Value.isActive())
|
||||||
|
{
|
||||||
|
Game1.addHUDMessage(new HUDMessage(Game1.content.LoadString("Strings\\UI:Carpenter_CantDemolish_FarmhandOnline"), Color.Red, 3500f));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
toDemolish.BeforeDemolish();
|
||||||
|
Chest chest = null;
|
||||||
|
if (toDemolish.indoors.Value is Cabin)
|
||||||
|
{
|
||||||
|
List<Item> list = (toDemolish.indoors.Value as Cabin).demolish();
|
||||||
|
if (list.Count > 0)
|
||||||
|
{
|
||||||
|
chest = new Chest(playerChest: true);
|
||||||
|
chest.fixLidFrame();
|
||||||
|
chest.items.Set(list);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (farm.destroyStructure(toDemolish))
|
||||||
|
{
|
||||||
|
_ = (int)toDemolish.tileY;
|
||||||
|
_ = (int)toDemolish.tilesHigh;
|
||||||
|
Game1.flashAlpha = 1f;
|
||||||
|
toDemolish.showDestroyedAnimation(Game1.getFarm());
|
||||||
|
Game1.playSound("explosion");
|
||||||
|
Utility.spreadAnimalsAround(toDemolish, farm);
|
||||||
|
DelayedAction.functionAfterDelay(carpenterMenu.returnToCarpentryMenu, 1500);
|
||||||
|
// freeze = true;
|
||||||
|
if (chest != null)
|
||||||
|
{
|
||||||
|
farm.objects[new Vector2((int)toDemolish.tileX + (int)toDemolish.tilesWide / 2, (int)toDemolish.tileY + (int)toDemolish.tilesHigh / 2)] = chest;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
if (toDemolish != null)
|
||||||
|
{
|
||||||
|
if (toDemolish.indoors.Value != null && toDemolish.indoors.Value is Cabin && !Game1.IsMasterGame)
|
||||||
|
{
|
||||||
|
Game1.addHUDMessage(new HUDMessage(Game1.content.LoadString("Strings\\UI:Carpenter_CantDemolish_LockFailed"), Color.Red, 3500f));
|
||||||
|
toDemolish = null;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!carpenterMenu.CanDemolishThis(toDemolish))
|
||||||
|
{
|
||||||
|
toDemolish = null;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!Game1.IsMasterGame && !carpenterMenu.hasPermissionsToDemolish(toDemolish))
|
||||||
|
{
|
||||||
|
toDemolish = null;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (toDemolish != null && toDemolish.indoors.Value is Cabin)
|
||||||
|
{
|
||||||
|
Cabin cabin = toDemolish.indoors.Value as Cabin;
|
||||||
|
if (cabin.farmhand.Value != null && (bool)cabin.farmhand.Value.isCustomized)
|
||||||
|
{
|
||||||
|
Game1.currentLocation.createQuestionDialogue(Game1.content.LoadString("Strings\\UI:Carpenter_DemolishCabinConfirm", cabin.farmhand.Value.Name), Game1.currentLocation.createYesNoResponses(), delegate (Farmer f, string answer)
|
||||||
|
{
|
||||||
|
if (answer == "Yes")
|
||||||
|
{
|
||||||
|
Game1.activeClickableMenu = carpenterMenu;
|
||||||
|
Game1.player.team.demolishLock.RequestLock(continueDemolish, buildingLockFailed);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DelayedAction.functionAfterDelay(carpenterMenu.returnToCarpentryMenu, 1000);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (toDemolish != null)
|
||||||
|
{
|
||||||
|
Game1.player.team.demolishLock.RequestLock(continueDemolish, buildingLockFailed);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void Contstruct(Building toCunstruct)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void Upgrade(Building toUpgrade)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void Paint(Building toPaint)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void Move(Building toMove, Vector2 position)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
Loading…
Reference in New Issue