Updated BuyBackCollectables to 1.1 and fixed some glitches with it! =D

This commit is contained in:
Joshua Navarro 2016-10-12 23:28:13 -07:00
parent 3e4e68f40c
commit e8147a7b5b
27 changed files with 14685 additions and 13933 deletions

63
.gitattributes vendored Normal file
View File

@ -0,0 +1,63 @@
###############################################################################
# Set default behavior to automatically normalize line endings.
###############################################################################
* text=auto
###############################################################################
# Set default behavior for command prompt diff.
#
# This is need for earlier builds of msysgit that does not have it on by
# default for csharp files.
# Note: This is only used by command line
###############################################################################
#*.cs diff=csharp
###############################################################################
# Set the merge driver for project and solution files
#
# Merging from the command prompt will add diff markers to the files if there
# are conflicts (Merging from VS is not affected by the settings below, in VS
# the diff markers are never inserted). Diff markers may cause the following
# file extensions to fail to load in VS. An alternative would be to treat
# these files as binary and thus will always conflict and require user
# intervention with every merge. To do so, just uncomment the entries below
###############################################################################
#*.sln merge=binary
#*.csproj merge=binary
#*.vbproj merge=binary
#*.vcxproj merge=binary
#*.vcproj merge=binary
#*.dbproj merge=binary
#*.fsproj merge=binary
#*.lsproj merge=binary
#*.wixproj merge=binary
#*.modelproj merge=binary
#*.sqlproj merge=binary
#*.wwaproj merge=binary
###############################################################################
# behavior for image files
#
# image files are treated as binary by default.
###############################################################################
#*.jpg binary
#*.png binary
#*.gif binary
###############################################################################
# diff behavior for common document formats
#
# Convert binary document formats to text before diffing them. This feature
# is only available from the command line. Turn it on by uncommenting the
# entries below.
###############################################################################
#*.doc diff=astextplain
#*.DOC diff=astextplain
#*.docx diff=astextplain
#*.DOCX diff=astextplain
#*.dot diff=astextplain
#*.DOT diff=astextplain
#*.pdf diff=astextplain
#*.PDF diff=astextplain
#*.rtf diff=astextplain
#*.RTF diff=astextplain

212
.gitignore vendored Normal file
View File

@ -0,0 +1,212 @@
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
build/
bld/
[Bb]in/
[Oo]bj/
# Visual Studio 2015 cache/options directory
.vs/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUNIT
*.VisualState.xml
TestResult.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# DNX
project.lock.json
artifacts/
*_i.c
*_p.c
*_i.h
*.ilk
*.meta
*.obj
*.pch
*.pdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opensdf
*.sdf
*.cachefile
# Visual Studio profiler
*.psess
*.vsp
*.vspx
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# JustCode is a .NET coding add-in
.JustCode
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# NCrunch
_NCrunch_*
.*crunch*.local.xml
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
## TODO: Comment the next line if you want to checkin your
## web deploy settings but do note that will include unencrypted
## passwords
#*.pubxml
*.publishproj
# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/packages/*
# except build/, which is used as an MSBuild target.
!**/packages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/packages/repositories.config
# Windows Azure Build Output
csx/
*.build.csdef
# Windows Store app package directory
AppPackages/
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!*.[Cc]ache/
# Others
ClientBin/
[Ss]tyle[Cc]op.*
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.pfx
*.publishsettings
node_modules/
orleans.codegen.cs
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
# SQL Server files
*.mdf
*.ldf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
# Microsoft Fakes
FakesAssemblies/
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# LightSwitch generated files
GeneratedArtifacts/
_Pvt_Extensions/
ModelManifest.xml

View File

@ -37,10 +37,11 @@
<HintPath>..\..\..\..\..\..\..\Program Files (x86)\Microsoft XNA\XNA Game Studio\v4.0\References\Windows\x86\Microsoft.Xna.Framework.Graphics.dll</HintPath>
</Reference>
<Reference Include="Stardew Valley">
<HintPath>..\..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\Stardew Valley\Stardew Valley.exe</HintPath>
<HintPath>..\..\..\..\..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\Stardew Valley\Stardew Valley.exe</HintPath>
</Reference>
<Reference Include="StardewModdingAPI">
<HintPath>..\..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\Stardew Valley\StardewModdingAPI.exe</HintPath>
<Reference Include="StardewModdingAPI, Version=1.0.0.0, Culture=neutral, processorArchitecture=x86">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\Stardew Valley\StardewModdingAPI.exe</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
@ -58,6 +59,7 @@
<Compile Include="Class1.cs" />
<Compile Include="Collections_Buy_Back.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="UpdatedCollections.cs" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.

View File

@ -30,7 +30,7 @@ namespace Buy_Back_Collectables
if (Game1.activeClickableMenu != null) return;
else
{
Game1.activeClickableMenu = new Collections_Buy_Back(Game1.viewport.Width / 2 - (800 + IClickableMenu.borderWidth * 2) / 2, Game1.viewport.Height / 2 - (600 + IClickableMenu.borderWidth * 2) / 2, 800 + IClickableMenu.borderWidth * 2, 600 + IClickableMenu.borderWidth * 2);
Game1.activeClickableMenu = new StardewValley.Menus.UpdatedCollectionsPage(Game1.viewport.Width / 2 - (800 + IClickableMenu.borderWidth * 2) / 2, Game1.viewport.Height / 2 - (600 + IClickableMenu.borderWidth * 2) / 2, 800 + IClickableMenu.borderWidth * 2, 600 + IClickableMenu.borderWidth * 2);
}
}
}

View File

@ -46,21 +46,21 @@ namespace StardewValley.Menus
public Collections_Buy_Back(int x, int y, int width, int height) : base(x, y, width, height, false)
{
this.sideTabs.Add(new ClickableTextureComponent(new Rectangle(this.xPositionOnScreen - Game1.tileSize * 3 / 4 + CollectionsPage.widthToMoveActiveTab, this.yPositionOnScreen + Game1.tileSize * 2, Game1.tileSize, Game1.tileSize), "", "Items Shipped (Farm & Forage)", Game1.mouseCursors, new Rectangle(640, 80, 16, 16), (float)Game1.pixelZoom));
this.sideTabs.Add(new ClickableTextureComponent("",new Rectangle(this.xPositionOnScreen - Game1.tileSize * 3 / 4 + CollectionsPage.widthToMoveActiveTab, this.yPositionOnScreen + Game1.tileSize * 2, Game1.tileSize, Game1.tileSize), "", "Items Shipped (Farm & Forage)", Game1.mouseCursors, new Rectangle(640, 80, 16, 16), (float)Game1.pixelZoom));
this.collections.Add(0, new List<List<ClickableTextureComponent>>());
this.sideTabs.Add(new ClickableTextureComponent(new Rectangle(this.xPositionOnScreen - Game1.tileSize * 3 / 4, this.yPositionOnScreen + Game1.tileSize * 3, Game1.tileSize, Game1.tileSize), "", "Fish", Game1.mouseCursors, new Rectangle(640, 64, 16, 16), (float)Game1.pixelZoom));
this.sideTabs.Add(new ClickableTextureComponent("",new Rectangle(this.xPositionOnScreen - Game1.tileSize * 3 / 4, this.yPositionOnScreen + Game1.tileSize * 3, Game1.tileSize, Game1.tileSize), "", "Fish", Game1.mouseCursors, new Rectangle(640, 64, 16, 16), (float)Game1.pixelZoom));
this.collections.Add(1, new List<List<ClickableTextureComponent>>());
this.sideTabs.Add(new ClickableTextureComponent(new Rectangle(this.xPositionOnScreen - Game1.tileSize * 3 / 4, this.yPositionOnScreen + Game1.tileSize * 4, Game1.tileSize, Game1.tileSize), "", "Artifacts", Game1.mouseCursors, new Rectangle(656, 64, 16, 16), (float)Game1.pixelZoom));
this.sideTabs.Add(new ClickableTextureComponent("",new Rectangle(this.xPositionOnScreen - Game1.tileSize * 3 / 4, this.yPositionOnScreen + Game1.tileSize * 4, Game1.tileSize, Game1.tileSize), "", "Artifacts", Game1.mouseCursors, new Rectangle(656, 64, 16, 16), (float)Game1.pixelZoom));
this.collections.Add(2, new List<List<ClickableTextureComponent>>());
this.sideTabs.Add(new ClickableTextureComponent(new Rectangle(this.xPositionOnScreen - Game1.tileSize * 3 / 4, this.yPositionOnScreen + Game1.tileSize * 5, Game1.tileSize, Game1.tileSize), "", "Minerals", Game1.mouseCursors, new Rectangle(672, 64, 16, 16), (float)Game1.pixelZoom));
this.sideTabs.Add(new ClickableTextureComponent("",new Rectangle(this.xPositionOnScreen - Game1.tileSize * 3 / 4, this.yPositionOnScreen + Game1.tileSize * 5, Game1.tileSize, Game1.tileSize), "", "Minerals", Game1.mouseCursors, new Rectangle(672, 64, 16, 16), (float)Game1.pixelZoom));
this.collections.Add(3, new List<List<ClickableTextureComponent>>());
this.sideTabs.Add(new ClickableTextureComponent(new Rectangle(this.xPositionOnScreen - Game1.tileSize * 3 / 4, this.yPositionOnScreen + Game1.tileSize * 6, Game1.tileSize, Game1.tileSize), "", "Cooking", Game1.mouseCursors, new Rectangle(688, 64, 16, 16), (float)Game1.pixelZoom));
this.sideTabs.Add(new ClickableTextureComponent("",new Rectangle(this.xPositionOnScreen - Game1.tileSize * 3 / 4, this.yPositionOnScreen + Game1.tileSize * 6, Game1.tileSize, Game1.tileSize), "", "Cooking", Game1.mouseCursors, new Rectangle(688, 64, 16, 16), (float)Game1.pixelZoom));
this.collections.Add(4, new List<List<ClickableTextureComponent>>());
this.sideTabs.Add(new ClickableTextureComponent(new Rectangle(this.xPositionOnScreen - Game1.tileSize * 3 / 4, this.yPositionOnScreen + Game1.tileSize * 7, Game1.tileSize, Game1.tileSize), "", "Achievements", Game1.mouseCursors, new Rectangle(656, 80, 16, 16), (float)Game1.pixelZoom));
this.sideTabs.Add(new ClickableTextureComponent("",new Rectangle(this.xPositionOnScreen - Game1.tileSize * 3 / 4, this.yPositionOnScreen + Game1.tileSize * 7, Game1.tileSize, Game1.tileSize), "", "Achievements", Game1.mouseCursors, new Rectangle(656, 80, 16, 16), (float)Game1.pixelZoom));
this.collections.Add(5, new List<List<ClickableTextureComponent>>());
Collections_Buy_Back.widthToMoveActiveTab = Game1.tileSize / 8;
this.backButton = new ClickableTextureComponent(new Rectangle(this.xPositionOnScreen + Game1.tileSize * 3 / 4, this.yPositionOnScreen + height - 20 * Game1.pixelZoom, 12 * Game1.pixelZoom, 11 * Game1.pixelZoom), "", "", Game1.mouseCursors, new Rectangle(352, 495, 12, 11), (float)Game1.pixelZoom, false, false);
this.forwardButton = new ClickableTextureComponent(new Rectangle(this.xPositionOnScreen + width - Game1.tileSize / 2 - 15 * Game1.pixelZoom, this.yPositionOnScreen + height - 20 * Game1.pixelZoom, 12 * Game1.pixelZoom, 11 * Game1.pixelZoom), "", "", Game1.mouseCursors, new Rectangle(365, 495, 12, 11), (float)Game1.pixelZoom, false, false);
this.backButton = new ClickableTextureComponent("",new Rectangle(this.xPositionOnScreen + Game1.tileSize * 3 / 4, this.yPositionOnScreen + height - 20 * Game1.pixelZoom, 12 * Game1.pixelZoom, 11 * Game1.pixelZoom), "", "", Game1.mouseCursors, new Rectangle(352, 495, 12, 11), (float)Game1.pixelZoom, false);
this.forwardButton = new ClickableTextureComponent("",new Rectangle(this.xPositionOnScreen + width - Game1.tileSize / 2 - 15 * Game1.pixelZoom, this.yPositionOnScreen + height - 20 * Game1.pixelZoom, 12 * Game1.pixelZoom, 11 * Game1.pixelZoom), "", "", Game1.mouseCursors, new Rectangle(365, 495, 12, 11), (float)Game1.pixelZoom, false);
int[] array = new int[this.sideTabs.Count<ClickableTextureComponent>()];
int num = this.xPositionOnScreen + IClickableMenu.borderWidth + IClickableMenu.spaceToClearSideBorder;
int num2 = this.yPositionOnScreen + IClickableMenu.borderWidth + IClickableMenu.spaceToClearTopBorder - Game1.tileSize / 4;
@ -142,7 +142,7 @@ namespace StardewValley.Menus
{
this.collections[num4].Add(new List<ClickableTextureComponent>());
}
this.collections[num4].Last<List<ClickableTextureComponent>>().Add(new ClickableTextureComponent(new Rectangle(x2, num5, Game1.tileSize, Game1.tileSize), current.Key + " " + flag, "", Game1.objectSpriteSheet, Game1.getSourceRectForStandardTileSheet(Game1.objectSpriteSheet, current.Key, 16, 16), (float)Game1.pixelZoom, false, flag));
this.collections[num4].Last<List<ClickableTextureComponent>>().Add(new ClickableTextureComponent("",new Rectangle(x2, num5, Game1.tileSize, Game1.tileSize), current.Key + " " + flag, "", Game1.objectSpriteSheet, Game1.getSourceRectForStandardTileSheet(Game1.objectSpriteSheet, current.Key, 16, 16), (float)Game1.pixelZoom, false));
array[num4]++;
}
if (this.collections[5].Count<List<ClickableTextureComponent>>() == 0)
@ -160,7 +160,7 @@ namespace StardewValley.Menus
{
int x3 = num + array[5] % num3 * (Game1.tileSize + 4);
int y2 = num2 + array[5] / num3 * (Game1.tileSize + 4);
this.collections[5][0].Add(new ClickableTextureComponent(new Rectangle(x3, y2, Game1.tileSize, Game1.tileSize), current2.Key + " " + flag2, "", Game1.mouseCursors, Game1.getSourceRectForStandardTileSheet(Game1.mouseCursors, 25, -1, -1), 1f, false, false));
this.collections[5][0].Add(new ClickableTextureComponent("",new Rectangle(x3, y2, Game1.tileSize, Game1.tileSize), current2.Key + " " + flag2, "", Game1.mouseCursors, Game1.getSourceRectForStandardTileSheet(Game1.mouseCursors, 25, -1, -1), 1f, false));
array[5]++;
}
}
@ -254,39 +254,55 @@ namespace StardewValley.Menus
this.descriptionText = "";
this.hoverText = "";
this.value = -1;
foreach (ClickableTextureComponent current in this.sideTabs)
{
if (current.containsPoint(x, y))
try {
foreach (ClickableTextureComponent current in this.sideTabs)
{
this.hoverText = current.hoverText;
return;
if (current.containsPoint(x, y))
{
this.hoverText = current.hoverText;
return;
}
}
}
foreach (ClickableTextureComponent current2 in this.collections[this.currentTab][this.currentPage])
catch (Exception e)
{
if (current2.containsPoint(x, y))
Log.AsyncG(e);
}
try {
foreach (ClickableTextureComponent current2 in this.collections[this.currentTab][this.currentPage])
{
current2.scale = Math.Min(current2.scale + 0.02f, current2.baseScale + 0.1f);
if (Convert.ToBoolean(current2.name.Split(new char[]
if (current2.containsPoint(x, y))
{
' '
})[1]) || this.currentTab == 5)
{
this.hoverText = this.createDescription(Convert.ToInt32(current2.name.Split(new char[]
current2.scale = Math.Min(current2.scale + 0.02f, current2.baseScale + 0.1f);
if (Convert.ToBoolean(current2.name.Split(new char[]
{
' '
})[1]) || this.currentTab == 5)
{
this.hoverText = this.createDescription(Convert.ToInt32(current2.name.Split(new char[]
{
' '
})[0]));
})[0]));
}
else
{
this.hoverText = "???";
this.new_item = null;
}
}
else
{
this.hoverText = "???";
this.new_item = null;
current2.scale = Math.Max(current2.scale - 0.02f, current2.baseScale);
}
}
else
{
current2.scale = Math.Max(current2.scale - 0.02f, current2.baseScale);
}
}
catch(Exception e)
{
Log.AsyncM(this.currentTab);
Log.AsyncM(this.currentPage);
Log.AsyncM(e);
}
this.forwardButton.tryHover(x, y, 0.5f);
this.backButton.tryHover(x, y, 0.5f);
@ -375,43 +391,51 @@ namespace StardewValley.Menus
public override void draw(SpriteBatch b)
{
foreach (ClickableTextureComponent current in this.sideTabs)
{
current.draw(b);
}
if (this.currentPage > 0)
{
this.backButton.draw(b);
}
if (this.currentPage < this.collections[this.currentTab].Count<List<ClickableTextureComponent>>() - 1)
{
this.forwardButton.draw(b);
}
b.End();
b.Begin(SpriteSortMode.FrontToBack, BlendState.NonPremultiplied, SamplerState.PointClamp, null, null);
foreach (ClickableTextureComponent current2 in this.collections[this.currentTab][this.currentPage])
{
bool flag = Convert.ToBoolean(current2.name.Split(new char[]
foreach (ClickableTextureComponent current in this.sideTabs)
{
' '
})[1]);
current2.draw(b, flag ? Color.White : (Color.Black * 0.2f), 0.86f);
if (this.currentTab == 5 && flag)
{
int num = new Random(Convert.ToInt32(current2.name.Split(new char[]
{
' '
})[0])).Next(12);
b.Draw(Game1.mouseCursors, new Vector2((float)(current2.bounds.X + 16 + Game1.tileSize / 4), (float)(current2.bounds.Y + 20 + Game1.tileSize / 4)), new Rectangle?(new Rectangle(256 + num % 6 * Game1.tileSize / 2, 128 + num / 6 * Game1.tileSize / 2, Game1.tileSize / 2, Game1.tileSize / 2)), Color.White, 0f, new Vector2((float)(Game1.tileSize / 4), (float)(Game1.tileSize / 4)), current2.scale, SpriteEffects.None, 0.88f);
current.draw(b);
}
}
b.End();
b.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.PointClamp, null, null);
if (!this.hoverText.Equals(""))
if (this.currentPage > 0)
{
this.backButton.draw(b);
}
if (this.currentPage < this.collections[this.currentTab].Count<List<ClickableTextureComponent>>() - 1)
{
this.forwardButton.draw(b);
}
b.End();
b.Begin(SpriteSortMode.FrontToBack, BlendState.NonPremultiplied, SamplerState.PointClamp, null, null);
try
{
IClickableMenu.drawHoverText(b, this.hoverText, Game1.smallFont, 0, 0, this.value, null, -1, null, null, 0, -1, -1, -1, -1, 1f, null);
foreach (ClickableTextureComponent current2 in this.collections[1][0])
{
bool flag = Convert.ToBoolean(current2.name.Split(new char[]
{
' '
})[1]);
current2.draw(b, flag ? Color.White : (Color.Black * 0.2f), 0.86f);
if (this.currentTab == 5 && flag)
{
int num = new Random(Convert.ToInt32(current2.name.Split(new char[]
{
' '
})[0])).Next(12);
b.Draw(Game1.mouseCursors, new Vector2((float)(current2.bounds.X + 16 + Game1.tileSize / 4), (float)(current2.bounds.Y + 20 + Game1.tileSize / 4)), new Rectangle?(new Rectangle(256 + num % 6 * Game1.tileSize / 2, 128 + num / 6 * Game1.tileSize / 2, Game1.tileSize / 2, Game1.tileSize / 2)), Color.White, 0f, new Vector2((float)(Game1.tileSize / 4), (float)(Game1.tileSize / 4)), current2.scale, SpriteEffects.None, 0.88f);
}
}
b.End();
b.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.PointClamp, null, null);
if (!this.hoverText.Equals(""))
{
IClickableMenu.drawHoverText(b, this.hoverText, Game1.smallFont, 0, 0, this.value, null, -1, null, null, 0, -1, -1, -1, -1, 1f, null);
}
b.Draw(Game1.mouseCursors, new Vector2((float)Game1.getOldMouseX(), (float)Game1.getOldMouseY()), new Rectangle?(Game1.getSourceRectForStandardTileSheet(Game1.mouseCursors, Game1.options.gamepadControls ? 44 : 0, 16, 16)), Color.White, 0f, Vector2.Zero, (float)Game1.pixelZoom + Game1.dialogueButtonScale / 150f, SpriteEffects.None, 1f);
}
catch(Exception e)
{
Log.AsyncY(e);
}
}
b.Draw(Game1.mouseCursors, new Vector2((float)Game1.getOldMouseX(), (float)Game1.getOldMouseY()), new Rectangle?(Game1.getSourceRectForStandardTileSheet(Game1.mouseCursors, Game1.options.gamepadControls ? 44 : 0, 16, 16)), Color.White, 0f, Vector2.Zero, (float)Game1.pixelZoom + Game1.dialogueButtonScale / 150f, SpriteEffects.None, 1f);
}
}
}

View File

@ -0,0 +1,424 @@
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using System;
using System.Collections.Generic;
using System.Linq;
namespace StardewValley.Menus
{
public class UpdatedCollectionsPage : IClickableMenu
{
public static int widthToMoveActiveTab = Game1.tileSize / 8;
public const int organicsTab = 0;
public const int fishTab = 1;
public const int archaeologyTab = 2;
public const int mineralsTab = 3;
public const int cookingTab = 4;
public const int achievementsTab = 5;
public const int distanceFromMenuBottomBeforeNewPage = 128;
private string descriptionText = "";
private string hoverText = "";
private ClickableTextureComponent backButton;
private ClickableTextureComponent forwardButton;
private List<ClickableTextureComponent> sideTabs = new List<ClickableTextureComponent>();
private int currentTab;
private int currentPage;
private Dictionary<int, List<List<ClickableTextureComponent>>> collections = new Dictionary<int, List<List<ClickableTextureComponent>>>();
private int value;
public Item new_item;
public int newItemValue;
public UpdatedCollectionsPage(int x, int y, int width, int height) : base(x, y, width, height, false)
{
this.sideTabs.Add(new ClickableTextureComponent("", new Rectangle(this.xPositionOnScreen - Game1.tileSize * 3 / 4 + UpdatedCollectionsPage.widthToMoveActiveTab, this.yPositionOnScreen + Game1.tileSize * 2, Game1.tileSize, Game1.tileSize), "", Game1.content.LoadString("Strings\\UI:Collections_Shipped", new object[0]), Game1.mouseCursors, new Rectangle(640, 80, 16, 16), (float)Game1.pixelZoom, false));
this.collections.Add(0, new List<List<ClickableTextureComponent>>());
this.sideTabs.Add(new ClickableTextureComponent("", new Rectangle(this.xPositionOnScreen - Game1.tileSize * 3 / 4, this.yPositionOnScreen + Game1.tileSize * 3, Game1.tileSize, Game1.tileSize), "", Game1.content.LoadString("Strings\\UI:Collections_Fish", new object[0]), Game1.mouseCursors, new Rectangle(640, 64, 16, 16), (float)Game1.pixelZoom, false));
this.collections.Add(1, new List<List<ClickableTextureComponent>>());
this.sideTabs.Add(new ClickableTextureComponent("", new Rectangle(this.xPositionOnScreen - Game1.tileSize * 3 / 4, this.yPositionOnScreen + Game1.tileSize * 4, Game1.tileSize, Game1.tileSize), "", Game1.content.LoadString("Strings\\UI:Collections_Artifacts", new object[0]), Game1.mouseCursors, new Rectangle(656, 64, 16, 16), (float)Game1.pixelZoom, false));
this.collections.Add(2, new List<List<ClickableTextureComponent>>());
this.sideTabs.Add(new ClickableTextureComponent("", new Rectangle(this.xPositionOnScreen - Game1.tileSize * 3 / 4, this.yPositionOnScreen + Game1.tileSize * 5, Game1.tileSize, Game1.tileSize), "", Game1.content.LoadString("Strings\\UI:Collections_Minerals", new object[0]), Game1.mouseCursors, new Rectangle(672, 64, 16, 16), (float)Game1.pixelZoom, false));
this.collections.Add(3, new List<List<ClickableTextureComponent>>());
this.sideTabs.Add(new ClickableTextureComponent("", new Rectangle(this.xPositionOnScreen - Game1.tileSize * 3 / 4, this.yPositionOnScreen + Game1.tileSize * 6, Game1.tileSize, Game1.tileSize), "", Game1.content.LoadString("Strings\\UI:Collections_Cooking", new object[0]), Game1.mouseCursors, new Rectangle(688, 64, 16, 16), (float)Game1.pixelZoom, false));
this.collections.Add(4, new List<List<ClickableTextureComponent>>());
this.sideTabs.Add(new ClickableTextureComponent("", new Rectangle(this.xPositionOnScreen - Game1.tileSize * 3 / 4, this.yPositionOnScreen + Game1.tileSize * 7, Game1.tileSize, Game1.tileSize), "", Game1.content.LoadString("Strings\\UI:Collections_Achievements", new object[0]), Game1.mouseCursors, new Rectangle(656, 80, 16, 16), (float)Game1.pixelZoom, false));
this.collections.Add(5, new List<List<ClickableTextureComponent>>());
UpdatedCollectionsPage.widthToMoveActiveTab = Game1.tileSize / 8;
this.backButton = new ClickableTextureComponent(new Rectangle(this.xPositionOnScreen + Game1.tileSize * 3 / 4, this.yPositionOnScreen + height - 20 * Game1.pixelZoom, 12 * Game1.pixelZoom, 11 * Game1.pixelZoom), Game1.mouseCursors, new Rectangle(352, 495, 12, 11), (float)Game1.pixelZoom, false);
this.forwardButton = new ClickableTextureComponent(new Rectangle(this.xPositionOnScreen + width - Game1.tileSize / 2 - 15 * Game1.pixelZoom, this.yPositionOnScreen + height - 20 * Game1.pixelZoom, 12 * Game1.pixelZoom, 11 * Game1.pixelZoom), Game1.mouseCursors, new Rectangle(365, 495, 12, 11), (float)Game1.pixelZoom, false);
int[] array = new int[this.sideTabs.Count];
int num = this.xPositionOnScreen + IClickableMenu.borderWidth + IClickableMenu.spaceToClearSideBorder;
int num2 = this.yPositionOnScreen + IClickableMenu.borderWidth + IClickableMenu.spaceToClearTopBorder - Game1.tileSize / 4;
int num3 = 10;
foreach (KeyValuePair<int, string> current in Game1.objectInformation)
{
string text = current.Value.Split(new char[]
{
'/'
})[3];
bool drawShadow = false;
int num4;
if (text.Contains("Arch"))
{
num4 = 2;
if (Game1.player.archaeologyFound.ContainsKey(current.Key))
{
drawShadow = true;
}
}
else if (text.Contains("Fish"))
{
if (current.Key >= 167 && current.Key < 173)
{
continue;
}
num4 = 1;
if (Game1.player.fishCaught.ContainsKey(current.Key))
{
drawShadow = true;
}
}
else if (text.Contains("Mineral") || text.Substring(text.Length - 3).Equals("-2"))
{
num4 = 3;
if (Game1.player.mineralsFound.ContainsKey(current.Key))
{
drawShadow = true;
}
}
else if (text.Contains("Cooking") || text.Substring(text.Length - 3).Equals("-7"))
{
num4 = 4;
if (Game1.player.recipesCooked.ContainsKey(current.Key))
{
drawShadow = true;
}
if (current.Key == 217 || current.Key == 772)
{
continue;
}
if (current.Key == 773)
{
continue;
}
}
else
{
if (!StardewValley.Object.isPotentialBasicShippedCategory(current.Key, text.Substring(text.Length - 3)))
{
continue;
}
num4 = 0;
if (Game1.player.basicShipped.ContainsKey(current.Key))
{
drawShadow = true;
}
}
int x2 = num + array[num4] % num3 * (Game1.tileSize + 4);
int num5 = num2 + array[num4] / num3 * (Game1.tileSize + 4);
if (num5 > this.yPositionOnScreen + height - 128)
{
this.collections[num4].Add(new List<ClickableTextureComponent>());
array[num4] = 0;
x2 = num;
num5 = num2;
}
if (this.collections[num4].Count == 0)
{
this.collections[num4].Add(new List<ClickableTextureComponent>());
}
this.collections[num4].Last<List<ClickableTextureComponent>>().Add(new ClickableTextureComponent(current.Key + " " + drawShadow.ToString(), new Rectangle(x2, num5, Game1.tileSize, Game1.tileSize), null, "", Game1.objectSpriteSheet, Game1.getSourceRectForStandardTileSheet(Game1.objectSpriteSheet, current.Key, 16, 16), (float)Game1.pixelZoom, drawShadow));
array[num4]++;
}
if (this.collections[5].Count == 0)
{
this.collections[5].Add(new List<ClickableTextureComponent>());
}
foreach (KeyValuePair<int, string> current2 in Game1.achievements)
{
bool flag = Game1.player.achievements.Contains(current2.Key);
string[] array2 = current2.Value.Split(new char[]
{
'^'
});
if (flag || (array2[2].Equals("true") && (array2[3].Equals("-1") || this.farmerHasAchievements(array2[3]))))
{
int x3 = num + array[5] % num3 * (Game1.tileSize + 4);
int y2 = num2 + array[5] / num3 * (Game1.tileSize + 4);
this.collections[5][0].Add(new ClickableTextureComponent(current2.Key + " " + flag.ToString(), new Rectangle(x3, y2, Game1.tileSize, Game1.tileSize), null, "", Game1.mouseCursors, Game1.getSourceRectForStandardTileSheet(Game1.mouseCursors, 25, -1, -1), 1f, false));
array[5]++;
}
}
}
private bool farmerHasAchievements(string listOfAchievementNumbers)
{
string[] array = listOfAchievementNumbers.Split(new char[]
{
' '
});
for (int i = 0; i < array.Length; i++)
{
string text = array[i];
if (!Game1.player.achievements.Contains(Convert.ToInt32(text)))
{
return false;
}
}
return true;
}
public override void receiveLeftClick(int x, int y, bool playSound = true)
{
for (int i = 0; i < this.sideTabs.Count; i++)
{
if (this.sideTabs[i].containsPoint(x, y) && this.currentTab != i)
{
Game1.playSound("smallSelect");
ClickableTextureComponent expr_47_cp_0_cp_0 = this.sideTabs[this.currentTab];
expr_47_cp_0_cp_0.bounds.X = expr_47_cp_0_cp_0.bounds.X - UpdatedCollectionsPage.widthToMoveActiveTab;
this.currentTab = i;
this.currentPage = 0;
ClickableTextureComponent expr_74_cp_0_cp_0 = this.sideTabs[i];
expr_74_cp_0_cp_0.bounds.X = expr_74_cp_0_cp_0.bounds.X + UpdatedCollectionsPage.widthToMoveActiveTab;
}
}
if (this.currentPage > 0 && this.backButton.containsPoint(x, y))
{
this.currentPage--;
Game1.playSound("shwip");
this.backButton.scale = this.backButton.baseScale;
}
if (this.currentPage < this.collections[this.currentTab].Count - 1 && this.forwardButton.containsPoint(x, y))
{
this.currentPage++;
Game1.playSound("shwip");
this.forwardButton.scale = this.forwardButton.baseScale;
}
foreach (ClickableTextureComponent current2 in this.collections[this.currentTab][this.currentPage])
{
if (current2.containsPoint(x, y))
{
if (new_item != null)
{
if (Game1.player.money >= value)
{
Game1.player.money -= value;
Game1.player.addItemByMenuIfNecessary(new_item);
}
}
}
}
}
public override void receiveRightClick(int x, int y, bool playSound = true)
{
if (new_item != null)
{
if (Game1.player.money >= value)
{
Game1.player.money -= value;
Game1.player.addItemByMenuIfNecessary(new_item);
}
}
}
public override void performHoverAction(int x, int y)
{
this.descriptionText = "";
this.hoverText = "";
this.value = -1;
foreach (ClickableTextureComponent current in this.sideTabs)
{
if (current.containsPoint(x, y))
{
this.hoverText = current.hoverText;
return;
}
}
foreach (ClickableTextureComponent current2 in this.collections[this.currentTab][this.currentPage])
{
if (current2.containsPoint(x, y))
{
current2.scale = Math.Min(current2.scale + 0.02f, current2.baseScale + 0.1f);
if (Convert.ToBoolean(current2.name.Split(new char[]
{
' '
})[1]) || this.currentTab == 5)
{
this.hoverText = this.createDescription(Convert.ToInt32(current2.name.Split(new char[]
{
' '
})[0]));
}
else
{
this.hoverText = "???";
}
}
else
{
current2.scale = Math.Max(current2.scale - 0.02f, current2.baseScale);
}
}
this.forwardButton.tryHover(x, y, 0.5f);
this.backButton.tryHover(x, y, 0.5f);
}
public string createDescription(int index)
{
string text = "";
if (this.currentTab == 5)
{
string[] array = Game1.achievements[index].Split(new char[]
{
'^'
});
text = text + array[0] + Environment.NewLine + Environment.NewLine;
text += array[1];
new_item = null;
}
else
{
string[] array2 = Game1.objectInformation[index].Split(new char[]
{
'/'
});
foreach (KeyValuePair<int, string> meh in Game1.objectInformation)
{
string[] array3 = meh.Value.Split(new char[]
{
'/'
});
if (array3[0] == array2[0])
{
new_item = (Item)new Object(Convert.ToInt32(meh.Key), 1, false, -1, 0);
if (new_item.Name == "Stone" || new_item.Name == "stone") new_item = (Item)new Object(390, 1, false, -1, 0);
}
}
text = string.Concat(new string[]
{
text,
array2[0],
Environment.NewLine,
Environment.NewLine,
Game1.parseText(array2[4], Game1.smallFont, Game1.tileSize * 4),
Environment.NewLine,
Environment.NewLine
});
if (array2[3].Contains("Arch"))
{
text += (Game1.player.archaeologyFound.ContainsKey(index) ? Game1.content.LoadString("Strings\\UI:Collections_Description_ArtifactsFound", new object[]
{
Game1.player.archaeologyFound[index][0]
}) : "");
}
else if (array2[3].Contains("Cooking"))
{
text += (Game1.player.recipesCooked.ContainsKey(index) ? Game1.content.LoadString("Strings\\UI:Collections_Description_RecipesCooked", new object[]
{
Game1.player.recipesCooked[index]
}) : "");
}
else if (array2[3].Contains("Fish"))
{
text += Game1.content.LoadString("Strings\\UI:Collections_Description_FishCaught", new object[]
{
Game1.player.fishCaught.ContainsKey(index) ? Game1.player.fishCaught[index][0] : 0
});
if (Game1.player.fishCaught.ContainsKey(index) && Game1.player.fishCaught[index][1] > 0)
{
text = text + Environment.NewLine + Game1.content.LoadString("Strings\\UI:Collections_Description_BiggestCatch", new object[]
{
Game1.player.fishCaught[index][1]
});
}
}
else if (array2[3].Contains("Minerals") || array2[3].Substring(array2[3].Length - 3).Equals("-2"))
{
text += Game1.content.LoadString("Strings\\UI:Collections_Description_MineralsFound", new object[]
{
Game1.player.mineralsFound.ContainsKey(index) ? Game1.player.mineralsFound[index] : 0
});
}
else
{
text += Game1.content.LoadString("Strings\\UI:Collections_Description_NumberShipped", new object[]
{
Game1.player.basicShipped.ContainsKey(index) ? Game1.player.basicShipped[index] : 0
});
}
this.value = Convert.ToInt32(array2[1]);
this.value = (int)(this.value * Buy_Back_Collectables.Class1.cost);
newItemValue = this.value;
}
return text;
}
public override void draw(SpriteBatch b)
{
using (List<ClickableTextureComponent>.Enumerator enumerator = this.sideTabs.GetEnumerator())
{
while (enumerator.MoveNext())
{
enumerator.Current.draw(b);
}
}
if (this.currentPage > 0)
{
this.backButton.draw(b);
}
if (this.currentPage < this.collections[this.currentTab].Count - 1)
{
this.forwardButton.draw(b);
}
b.End();
b.Begin(SpriteSortMode.FrontToBack, BlendState.NonPremultiplied, SamplerState.PointClamp, null, null);
foreach (ClickableTextureComponent current in this.collections[this.currentTab][this.currentPage])
{
bool flag = Convert.ToBoolean(current.name.Split(new char[]
{
' '
})[1]);
current.draw(b, flag ? Color.White : (Color.Black * 0.2f), 0.86f);
if (this.currentTab == 5 & flag)
{
int num = new Random(Convert.ToInt32(current.name.Split(new char[]
{
' '
})[0])).Next(12);
b.Draw(Game1.mouseCursors, new Vector2((float)(current.bounds.X + 16 + Game1.tileSize / 4), (float)(current.bounds.Y + 20 + Game1.tileSize / 4)), new Rectangle?(new Rectangle(256 + num % 6 * Game1.tileSize / 2, 128 + num / 6 * Game1.tileSize / 2, Game1.tileSize / 2, Game1.tileSize / 2)), Color.White, 0f, new Vector2((float)(Game1.tileSize / 4), (float)(Game1.tileSize / 4)), current.scale, SpriteEffects.None, 0.88f);
}
}
b.End();
b.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.PointClamp, null, null);
if (!this.hoverText.Equals(""))
{
IClickableMenu.drawHoverText(b, this.hoverText, Game1.smallFont, 0, 0, this.value, null, -1, null, null, 0, -1, -1, -1, -1, 1f, null);
}
if (!Game1.options.hardwareCursor)
{
b.Draw(Game1.mouseCursors, new Vector2((float)Game1.getMouseX(), (float)Game1.getMouseY()), new Rectangle?(Game1.getSourceRectForStandardTileSheet(Game1.mouseCursors, 0, 16, 16)), Color.White * Game1.mouseCursorTransparency, 0f, Vector2.Zero, (float)Game1.pixelZoom + Game1.dialogueButtonScale / 150f, SpriteEffects.None, 1f);
}
}
}
}

View File

@ -39,3 +39,25 @@ C:\Users\owner\Documents\Visual Studio 2015\Projects\Stardew_Valley_Mod_Folder\B
C:\Users\owner\Documents\Visual Studio 2015\Projects\Stardew_Valley_Mod_Folder\BuyBackCollectables\BuyBackCollectables\obj\Debug\BuyBackCollectables.csprojResolveAssemblyReference.cache
C:\Users\owner\Documents\Visual Studio 2015\Projects\Stardew_Valley_Mod_Folder\BuyBackCollectables\BuyBackCollectables\obj\Debug\BuyBackCollectables.dll
C:\Users\owner\Documents\Visual Studio 2015\Projects\Stardew_Valley_Mod_Folder\BuyBackCollectables\BuyBackCollectables\obj\Debug\BuyBackCollectables.pdb
C:\Users\owner\Documents\Visual Studio 2015\Projects\github\Stardew_Valley_Mods\Stardew_Valley_Mods\BuyBackCollectables\BuyBackCollectables-Source\obj\Debug\BuyBackCollectables.csprojResolveAssemblyReference.cache
C:\Users\owner\Documents\Visual Studio 2015\Projects\github\Stardew_Valley_Mods\Stardew_Valley_Mods\BuyBackCollectables\BuyBackCollectables-Source\obj\Debug\BuyBackCollectables.dll
C:\Users\owner\Documents\Visual Studio 2015\Projects\github\Stardew_Valley_Mods\Stardew_Valley_Mods\BuyBackCollectables\BuyBackCollectables-Source\obj\Debug\BuyBackCollectables.pdb
C:\Users\owner\Documents\Visual Studio 2015\Projects\github\Stardew_Valley_Mods\Stardew_Valley_Mods\BuyBackCollectables\BuyBackCollectables-Source\bin\Debug\BuyBackCollectables.dll
C:\Users\owner\Documents\Visual Studio 2015\Projects\github\Stardew_Valley_Mods\Stardew_Valley_Mods\BuyBackCollectables\BuyBackCollectables-Source\bin\Debug\BuyBackCollectables.pdb
C:\Users\owner\Documents\Visual Studio 2015\Projects\github\Stardew_Valley_Mods\Stardew_Valley_Mods\BuyBackCollectables\BuyBackCollectables-Source\bin\Debug\Microsoft.Xna.Framework.dll
C:\Users\owner\Documents\Visual Studio 2015\Projects\github\Stardew_Valley_Mods\Stardew_Valley_Mods\BuyBackCollectables\BuyBackCollectables-Source\bin\Debug\Microsoft.Xna.Framework.Game.dll
C:\Users\owner\Documents\Visual Studio 2015\Projects\github\Stardew_Valley_Mods\Stardew_Valley_Mods\BuyBackCollectables\BuyBackCollectables-Source\bin\Debug\Microsoft.Xna.Framework.Graphics.dll
C:\Users\owner\Documents\Visual Studio 2015\Projects\github\Stardew_Valley_Mods\Stardew_Valley_Mods\BuyBackCollectables\BuyBackCollectables-Source\bin\Debug\Stardew Valley.exe
C:\Users\owner\Documents\Visual Studio 2015\Projects\github\Stardew_Valley_Mods\Stardew_Valley_Mods\BuyBackCollectables\BuyBackCollectables-Source\bin\Debug\StardewModdingAPI.exe
C:\Users\owner\Documents\Visual Studio 2015\Projects\github\Stardew_Valley_Mods\Stardew_Valley_Mods\BuyBackCollectables\BuyBackCollectables-Source\bin\Debug\Microsoft.Xna.Framework.GamerServices.dll
C:\Users\owner\Documents\Visual Studio 2015\Projects\github\Stardew_Valley_Mods\Stardew_Valley_Mods\BuyBackCollectables\BuyBackCollectables-Source\bin\Debug\Microsoft.Xna.Framework.Input.Touch.dll
C:\Users\owner\Documents\Visual Studio 2015\Projects\github\Stardew_Valley_Mods\Stardew_Valley_Mods\BuyBackCollectables\BuyBackCollectables-Source\bin\Debug\Lidgren.Network.dll
C:\Users\owner\Documents\Visual Studio 2015\Projects\github\Stardew_Valley_Mods\Stardew_Valley_Mods\BuyBackCollectables\BuyBackCollectables-Source\bin\Debug\Microsoft.Xna.Framework.Xact.dll
C:\Users\owner\Documents\Visual Studio 2015\Projects\github\Stardew_Valley_Mods\Stardew_Valley_Mods\BuyBackCollectables\BuyBackCollectables-Source\bin\Debug\Steamworks.NET.dll
C:\Users\owner\Documents\Visual Studio 2015\Projects\github\Stardew_Valley_Mods\Stardew_Valley_Mods\BuyBackCollectables\BuyBackCollectables-Source\bin\Debug\Microsoft.Xna.Framework.xml
C:\Users\owner\Documents\Visual Studio 2015\Projects\github\Stardew_Valley_Mods\Stardew_Valley_Mods\BuyBackCollectables\BuyBackCollectables-Source\bin\Debug\Microsoft.Xna.Framework.Game.xml
C:\Users\owner\Documents\Visual Studio 2015\Projects\github\Stardew_Valley_Mods\Stardew_Valley_Mods\BuyBackCollectables\BuyBackCollectables-Source\bin\Debug\Microsoft.Xna.Framework.Graphics.xml
C:\Users\owner\Documents\Visual Studio 2015\Projects\github\Stardew_Valley_Mods\Stardew_Valley_Mods\BuyBackCollectables\BuyBackCollectables-Source\bin\Debug\StardewModdingAPI.pdb
C:\Users\owner\Documents\Visual Studio 2015\Projects\github\Stardew_Valley_Mods\Stardew_Valley_Mods\BuyBackCollectables\BuyBackCollectables-Source\bin\Debug\Microsoft.Xna.Framework.GamerServices.xml
C:\Users\owner\Documents\Visual Studio 2015\Projects\github\Stardew_Valley_Mods\Stardew_Valley_Mods\BuyBackCollectables\BuyBackCollectables-Source\bin\Debug\Microsoft.Xna.Framework.Input.Touch.xml
C:\Users\owner\Documents\Visual Studio 2015\Projects\github\Stardew_Valley_Mods\Stardew_Valley_Mods\BuyBackCollectables\BuyBackCollectables-Source\bin\Debug\Microsoft.Xna.Framework.Xact.xml

View File

@ -1,7 +1,7 @@
Config: Buy Back Collections. Feel free to mess with these settings.
====================================================================================
Key binding
B
Y
Collectables Multiplier Cost: Sell Value * value listed below
3

View File

@ -1,16 +1,16 @@
BuyBackCollectables
Version:1.0.2
Version:1.1.0
Published: 8/2/16 12:39 AM
Updated: 8/14/16 12:41 PM
Updated: 10/32/16 10:38 PM
Compatability:
Stardew Valley 1.0.7 Windows
Stardew Valley 1.1.0 Windows
SMAPI 0.40.0
SMAPI 0.40.0 1.1-3
Description:
@ -19,6 +19,11 @@ A simple mod that allows you to buy back any collectable that you have already s
Usage: Press B to open up the buy back menu.
Update Info:
1.1.0
-Updated to SDV 1.1
-Fixed glitch where mouse would not show up on menu draw.
-Fixed glitch where I used a bad math algorithm and you wouldn't be able to buy an item if you had enough money.
1.0.2
-Fixed some bugs where you would accidentally purchase some items when not intending to.