mirror of
https://github.com/kwsch/NHSE.git
synced 2026-09-11 12:45:36 -05:00
Add island visitor editor
Make daily NPCs show up reliably!
This commit is contained in:
@@ -264,6 +264,13 @@ public uint EventPlazaLeftUpZ
|
||||
set => BitConverter.GetBytes(value).CopyTo(Data, Offsets.OutsideField + AcreSizeAll + 8);
|
||||
}
|
||||
|
||||
|
||||
public GSaveVisitorNpc Visitor
|
||||
{
|
||||
get => Data.ToClass<GSaveVisitorNpc>(Offsets.Visitor, GSaveVisitorNpc.SIZE);
|
||||
set => value.ToBytesClass().CopyTo(Data, Offsets.Visitor);
|
||||
}
|
||||
|
||||
public GSaveFg SaveFg
|
||||
{
|
||||
get => Data.ToClass<GSaveFg>(Offsets.SaveFg, GSaveFg.SIZE);
|
||||
|
||||
@@ -34,6 +34,7 @@ public abstract class MainSaveOffsets
|
||||
public abstract int NpcHouseList { get; }
|
||||
public abstract int ShopKabu { get; }
|
||||
public abstract int Museum { get; }
|
||||
public abstract int Visitor { get; }
|
||||
|
||||
public abstract int SaveFg { get; }
|
||||
public abstract int BulletinBoard { get; }
|
||||
|
||||
@@ -33,6 +33,7 @@ public class MainSaveOffsets10 : MainSaveOffsets
|
||||
public const int GSaveShop = GSaveLandStart + 0x40ECE8;
|
||||
public override int ShopKabu => GSaveShop + 0x2AD0; // part of shop
|
||||
public override int Museum => GSaveLandStart + 0x411A80;
|
||||
public override int Visitor => GSaveLandStart + 0x414E84;
|
||||
public override int SaveFg => GSaveLandStart + 0x4150B4;
|
||||
public override int BulletinBoard => GSaveLandStart + 0x4159F8;
|
||||
public override int AirportThemeColor => GSaveLandStart + 0x4F6600;
|
||||
|
||||
@@ -33,6 +33,7 @@ public class MainSaveOffsets11 : MainSaveOffsets
|
||||
public const int GSaveShop = GSaveLandStart + 0x40F480;
|
||||
public override int ShopKabu => GSaveShop + 0x2AD0; // part of shop
|
||||
public override int Museum => GSaveLandStart + 0x412218;
|
||||
public override int Visitor => GSaveLandStart + 0x41561C;
|
||||
public override int SaveFg => GSaveLandStart + 0x41584C;
|
||||
public override int BulletinBoard => GSaveLandStart + 0x416190;
|
||||
public override int AirportThemeColor => GSaveLandStart + 0x4F6D98;
|
||||
|
||||
@@ -33,6 +33,7 @@ public class MainSaveOffsets12 : MainSaveOffsets
|
||||
public const int GSaveShop = GSaveLandStart + 0x40F480;
|
||||
public override int ShopKabu => GSaveShop + 0x2AD0; // part of shop
|
||||
public override int Museum => GSaveLandStart + 0x4124C4;
|
||||
public override int Visitor => GSaveLandStart + 0x4158C8;
|
||||
public override int SaveFg => GSaveLandStart + 0x415AF8;
|
||||
public override int BulletinBoard => GSaveLandStart + 0x416440;
|
||||
public override int AirportThemeColor => GSaveLandStart + 0x4F7048;
|
||||
|
||||
51
NHSE.Core/Structures/Misc/GSaveVisitorNpc.cs
Normal file
51
NHSE.Core/Structures/Misc/GSaveVisitorNpc.cs
Normal file
@@ -0,0 +1,51 @@
|
||||
using System.ComponentModel;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
#pragma warning disable CS8618, CA1815, CA1819, IDE1006
|
||||
namespace NHSE.Core
|
||||
{
|
||||
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
||||
public class GSaveVisitorNpc
|
||||
{
|
||||
public const int SIZE = 0x78;
|
||||
private const int Days = 7;
|
||||
|
||||
[field: MarshalAs(UnmanagedType.ByValArray, SizeConst = Days)]
|
||||
public int[] VisitorNPC { get; set; }
|
||||
|
||||
public V3f CreatePos { get; set; }
|
||||
public V3f _61e631dc { get; set; }
|
||||
|
||||
[field: MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.I1, SizeConst = Days)]
|
||||
public bool[] IsNormalLive { get; set; }
|
||||
|
||||
[field: MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.I1, SizeConst = Days)]
|
||||
public bool[] IsBirthdayLive { get; set; }
|
||||
|
||||
[field: MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
|
||||
public byte[] gap_42;
|
||||
|
||||
[field: MarshalAs(UnmanagedType.ByValArray, SizeConst = Days)]
|
||||
public int[] InitSchedule { get; set; }
|
||||
|
||||
[field: MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.I1, SizeConst = Days * 2)]
|
||||
public bool[] _437619d8 { get; set; }
|
||||
|
||||
[field: MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
|
||||
public byte[] gap_6e;
|
||||
|
||||
public int _e2484556 {get; set; }
|
||||
public int _753479b1 { get; set; }
|
||||
}
|
||||
|
||||
// same as Vector3; not importing package
|
||||
[TypeConverter(typeof(ValueTypeTypeConverter))]
|
||||
public struct V3f
|
||||
{
|
||||
public float X { get; set; }
|
||||
public float Y { get; set; }
|
||||
public float Z { get; set; }
|
||||
|
||||
public override string ToString() => $"({X},{Y},{Z})";
|
||||
}
|
||||
}
|
||||
@@ -22,6 +22,7 @@ public class FancyMarshalTests
|
||||
[Fact] public void MarshalGSaveManpu() => MarshalBytesTestS<GSavePlayerManpu>(GSavePlayerManpu.SIZE);
|
||||
[Fact] public void MarshalGSavePlayerHandleName() => MarshalBytesTestS<GSavePlayerHandleName>(GSavePlayerHandleName.SIZE);
|
||||
[Fact] public void MarshalGSaveFg() => MarshalBytesTest<GSaveFg>(GSaveFg.SIZE);
|
||||
[Fact] public void MarshalGSaveVisitorNpc() => MarshalBytesTest<GSaveVisitorNpc>(GSaveVisitorNpc.SIZE);
|
||||
|
||||
private static void MarshalBytesTestS<T>(int size) where T : struct
|
||||
{
|
||||
|
||||
14
NHSE.WinForms/Editor.Designer.cs
generated
14
NHSE.WinForms/Editor.Designer.cs
generated
@@ -95,6 +95,7 @@ private void InitializeComponent()
|
||||
this.PB_Player = new System.Windows.Forms.PictureBox();
|
||||
this.TC_Editors = new System.Windows.Forms.TabControl();
|
||||
this.B_EditMuseum_Click = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.B_EditVisitors = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.Menu_Editor.SuspendLayout();
|
||||
this.CM_Picture.SuspendLayout();
|
||||
this.Tab_Map.SuspendLayout();
|
||||
@@ -340,9 +341,10 @@ private void InitializeComponent()
|
||||
this.B_EditFieldItems,
|
||||
this.B_EditBulletin,
|
||||
this.B_EditFieldGoods,
|
||||
this.B_EditMuseum_Click});
|
||||
this.B_EditMuseum_Click,
|
||||
this.B_EditVisitors});
|
||||
this.CM_EditMap.Name = "CM_EditMap";
|
||||
this.CM_EditMap.Size = new System.Drawing.Size(181, 136);
|
||||
this.CM_EditMap.Size = new System.Drawing.Size(181, 158);
|
||||
//
|
||||
// B_EditLandFlags
|
||||
//
|
||||
@@ -774,6 +776,13 @@ private void InitializeComponent()
|
||||
this.B_EditMuseum_Click.Text = "Edit Museum";
|
||||
this.B_EditMuseum_Click.Click += new System.EventHandler(this.B_EditMuseum_Click_Click);
|
||||
//
|
||||
// B_EditVisitors
|
||||
//
|
||||
this.B_EditVisitors.Name = "B_EditVisitors";
|
||||
this.B_EditVisitors.Size = new System.Drawing.Size(180, 22);
|
||||
this.B_EditVisitors.Text = "Edit Visitors";
|
||||
this.B_EditVisitors.Click += new System.EventHandler(this.B_EditVisitors_Click);
|
||||
//
|
||||
// Editor
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
@@ -877,6 +886,7 @@ private void InitializeComponent()
|
||||
private System.Windows.Forms.Button B_EditDesignsTailor;
|
||||
private System.Windows.Forms.Button B_EditPatternFlag;
|
||||
private System.Windows.Forms.ToolStripMenuItem B_EditMuseum_Click;
|
||||
private System.Windows.Forms.ToolStripMenuItem B_EditVisitors;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -482,5 +482,13 @@ private void B_EditMuseum_Click_Click(object sender, EventArgs e)
|
||||
if (editor.ShowDialog() == DialogResult.OK)
|
||||
SAV.Main.Museum = museum;
|
||||
}
|
||||
|
||||
private void B_EditVisitors_Click(object sender, EventArgs e)
|
||||
{
|
||||
var boxed = SAV.Main.Visitor;
|
||||
using var editor = new SingleObjectEditor<object>(boxed, PropertySort.NoSort, false);
|
||||
if (editor.ShowDialog() == DialogResult.OK)
|
||||
SAV.Main.Visitor = boxed;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user