Skip to content

Commit

Permalink
为场地标点添加了save与load指令,可以暂存当前标点以在之后恢复。
Browse files Browse the repository at this point in the history
  • Loading branch information
Natsukage committed Mar 14, 2021
1 parent ddc5575 commit 2a3037f
Showing 1 changed file with 73 additions and 5 deletions.
78 changes: 73 additions & 5 deletions PostNamazu/PostNamazu.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ public PostNamazu() {

private IntPtr _entrancePtr;
private Offsets Offsets;
private WayMarks tempMarks;


public void InitPlugin(TabPage pluginScreenSpace, Label pluginStatusText) {
Expand Down Expand Up @@ -187,6 +188,10 @@ private void DoTextCommand(object _, string command) {
DoTextCommand(command);
}

/// <summary>
/// 在游戏进程中进行场地标点
/// </summary>
/// <param name="waymarks">标点合集对象</param>
private void DoWaymarks(WayMarks waymarks) {
WriteWaymark(waymarks.A, 0);
WriteWaymark(waymarks.B, 1);
Expand All @@ -197,23 +202,86 @@ private void DoWaymarks(WayMarks waymarks) {
WriteWaymark(waymarks.Three, 6);
WriteWaymark(waymarks.Four, 7);
}

/// <summary>
/// 在游戏进程中进行场地标点
/// </summary>
/// <param name="waymarksStr">标点合集序列化Json字符串</param>
private void DoWaymarks(string waymarksStr) {
if (FFXIV == null) {
PluginUI.Log("执行错误:接收到指令,但是没有对应的游戏进程");
throw new Exception("没有对应的游戏进程");
}
var waymarks = JsonConvert.DeserializeObject<WayMarks>(waymarksStr);
PluginUI.Log(waymarksStr);
PluginUI.Log("开始标记");
DoWaymarks(waymarks);

switch (waymarksStr.ToLower())
{
case "save":
case "backup":
SaveWaymark();
break;
case "load":
case "restore":
LoadWaymark();
break;
default:
var waymarks = JsonConvert.DeserializeObject<WayMarks>(waymarksStr);
PluginUI.Log(waymarksStr);
PluginUI.Log("开始标记");
DoWaymarks(waymarks);
break;
}
}

private void DoWaymarks(object _, string command) {
//MessageBox.Show(command);
DoWaymarks(command);
}

/// <summary>
/// 暂存当前标点
/// </summary>
public void SaveWaymark()
{
tempMarks = new WayMarks();

Waymark ReadWaymark(IntPtr addr, WaymarkID id) => new Waymark
{
X = Memory.Read<float>(addr),
Y = Memory.Read<float>(addr + 0x4),
Z = Memory.Read<float>(addr + 0x8),
Active = Memory.Read<byte>(addr + 0x1C) == 1,
ID = id
};

try
{
tempMarks.A = ReadWaymark(Offsets.Waymarks + 0x00, WaymarkID.A);
tempMarks.B = ReadWaymark(Offsets.Waymarks + 0x20, WaymarkID.B);
tempMarks.C = ReadWaymark(Offsets.Waymarks + 0x40, WaymarkID.C);
tempMarks.D = ReadWaymark(Offsets.Waymarks + 0x60, WaymarkID.D);
tempMarks.One = ReadWaymark(Offsets.Waymarks + 0x80, WaymarkID.One);
tempMarks.Two = ReadWaymark(Offsets.Waymarks + 0xA0, WaymarkID.Two);
tempMarks.Three = ReadWaymark(Offsets.Waymarks + 0xC0, WaymarkID.Three);
tempMarks.Four = ReadWaymark(Offsets.Waymarks + 0xE0, WaymarkID.Four);
PluginUI.Log("暂存当前标点");
}
catch (Exception ex)
{
PluginUI.Log("保存标记错误:"+ex.Message);
}

}

/// <summary>
/// 恢复暂存标点
/// </summary>
public void LoadWaymark()
{
if (tempMarks == null)
return;
DoWaymarks(tempMarks);
PluginUI.Log("恢复暂存标点");
}

/// <summary>
/// 写入指定标点
/// </summary>
Expand Down

0 comments on commit 2a3037f

Please sign in to comment.