Added demolish to buildsel
parent
ec08f2c019
commit
0acdc1c578
|
@ -360,9 +360,47 @@ namespace stardew_access
|
|||
}
|
||||
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
|
||||
|
||||
helper.ConsoleCommands.Add("refsr", "Refresh screen reader", (string commmand, string[] args) =>
|
||||
|
|
|
@ -8,6 +8,7 @@ using AutoHotkey.Interop;
|
|||
using System.Runtime.InteropServices;
|
||||
using stardew_access.ScreenReader;
|
||||
using Microsoft.Xna.Framework;
|
||||
using StardewValley.Buildings;
|
||||
|
||||
namespace stardew_access
|
||||
{
|
||||
|
@ -66,6 +67,11 @@ namespace stardew_access
|
|||
{
|
||||
BuildingNAnimalMenuPatches.marked[i] = Vector2.Zero;
|
||||
}
|
||||
|
||||
for (int i = 0; i < BuildingNAnimalMenuPatches.availableBuildings.Length; i++)
|
||||
{
|
||||
BuildingNAnimalMenuPatches.availableBuildings[i] = null;
|
||||
}
|
||||
#endregion
|
||||
|
||||
helper.Events.Input.ButtonPressed += this.OnButtonPressed;
|
||||
|
|
|
@ -2,18 +2,22 @@ using Microsoft.Xna.Framework;
|
|||
using StardewModdingAPI;
|
||||
using StardewValley;
|
||||
using StardewValley.Buildings;
|
||||
using StardewValley.Locations;
|
||||
using StardewValley.Menus;
|
||||
using StardewValley.Objects;
|
||||
|
||||
namespace stardew_access.Patches
|
||||
{
|
||||
internal class BuildingNAnimalMenuPatches
|
||||
{
|
||||
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 bool isSayingBlueprintInfo = false;
|
||||
internal static string prevBlueprintInfo = "";
|
||||
internal static bool isOnFarm = false, isUpgrading = false, isDemolishing = false, isPainting = false, isConstructing = false, isMoving = false;
|
||||
|
||||
internal static void CarpenterMenuPatch(
|
||||
CarpenterMenu __instance, bool ___onFarm, List<Item> ___ingredients, int ___price,
|
||||
List<BluePrint> ___blueprints, int ___currentBlueprintIndex, bool ___upgrading, bool ___demolishing, bool ___moving,
|
||||
|
@ -22,6 +26,7 @@ namespace stardew_access.Patches
|
|||
try
|
||||
{
|
||||
isOnFarm = ___onFarm;
|
||||
carpenterMenu = __instance;
|
||||
if (!___onFarm)
|
||||
{
|
||||
isUpgrading = false;
|
||||
|
@ -187,6 +192,150 @@ namespace stardew_access.Patches
|
|||
await Task.Delay(300);
|
||||
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