More 5.1 fixes or maybe not who knows

This commit is contained in:
goat 2019-11-08 02:13:21 +09:00
parent dfec31d89c
commit 799f5ef634
10 changed files with 169 additions and 25 deletions

View file

@ -88,6 +88,7 @@ namespace Dalamud {
this.BotManager.Start(); this.BotManager.Start();
if (this.Configuration.ComboPresets != CustomComboPreset.None)
this.IconReplacer.Enable(); this.IconReplacer.Enable();
} }
@ -106,6 +107,7 @@ namespace Dalamud {
this.unloadSignal.Dispose(); this.unloadSignal.Dispose();
if (this.Configuration.ComboPresets != CustomComboPreset.None)
this.IconReplacer.Dispose(); this.IconReplacer.Dispose();
} }
@ -346,7 +348,6 @@ namespace Dalamud {
var argumentsParts = arguments.Split(); var argumentsParts = arguments.Split();
switch (argumentsParts[0]) { switch (argumentsParts[0]) {
/* Sorry!
case "setall": { case "setall": {
foreach (var value in Enum.GetValues(typeof(CustomComboPreset)).Cast<CustomComboPreset>()) { foreach (var value in Enum.GetValues(typeof(CustomComboPreset)).Cast<CustomComboPreset>()) {
if (value == CustomComboPreset.None) if (value == CustomComboPreset.None)
@ -394,7 +395,7 @@ namespace Dalamud {
} }
} }
break; break;
*/
case "list": { case "list": {
foreach (var value in Enum.GetValues(typeof(CustomComboPreset)).Cast<CustomComboPreset>()) { foreach (var value in Enum.GetValues(typeof(CustomComboPreset)).Cast<CustomComboPreset>()) {
if (this.Configuration.ComboPresets.HasFlag(value)) if (this.Configuration.ComboPresets.HasFlag(value))

View file

@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup Label="Target"> <PropertyGroup Label="Target">
<PlatformTarget>AnyCPU</PlatformTarget> <PlatformTarget>AnyCPU</PlatformTarget>
<TargetFramework>net471</TargetFramework> <TargetFramework>net471</TargetFramework>
@ -14,9 +14,9 @@
</PropertyGroup> </PropertyGroup>
<PropertyGroup Label="Feature"> <PropertyGroup Label="Feature">
<AllowUnsafeBlocks>true</AllowUnsafeBlocks> <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<AssemblyVersion>2.2.0.0</AssemblyVersion> <AssemblyVersion>2.4.0.0</AssemblyVersion>
<Version>2.2.0</Version> <Version>2.4.0</Version>
<FileVersion>2.2.0.0</FileVersion> <FileVersion>2.4.0.0</FileVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup Label="Resources"> <ItemGroup Label="Resources">
<None Include="$(SolutionDir)/Resources/**/*" CopyToOutputDirectory="PreserveNewest" Visible="false" /> <None Include="$(SolutionDir)/Resources/**/*" CopyToOutputDirectory="PreserveNewest" Visible="false" />

View file

@ -32,12 +32,12 @@ namespace Dalamud.Game.ClientState.Actors {
if (index > Length) if (index > Length)
return null; return null;
Log.Information("Trying to get actor at {0}", index); //Log.Information("Trying to get actor at {0}", index);
var tblIndex = Address.ActorTable + 8 + index * 8; var tblIndex = Address.ActorTable + 8 + index * 8;
var offset = Marshal.ReadIntPtr(tblIndex); var offset = Marshal.ReadIntPtr(tblIndex);
Log.Information("Actor at {0}", offset.ToString()); //Log.Information("Actor at {0}", offset.ToString());
if (offset == IntPtr.Zero) if (offset == IntPtr.Zero)
throw new Exception($"Actor slot at index {index} is invalid"); throw new Exception($"Actor slot at index {index} is invalid");

View file

@ -32,7 +32,8 @@ namespace Dalamud.Game.ClientState
/// <summary> /// <summary>
/// The local player character, if one is present. /// The local player character, if one is present.
/// </summary> /// </summary>
public PlayerCharacter LocalPlayer { get; private set; } //public PlayerCharacter LocalPlayer { get; private set; }
public PlayerCharacter LocalPlayer => (PlayerCharacter) this.Actors[0];
/// <summary> /// <summary>
/// The content ID of the local character. /// The content ID of the local character.
@ -67,8 +68,7 @@ namespace Dalamud.Game.ClientState
} }
private void FrameworkOnOnUpdateEvent(Framework framework) { private void FrameworkOnOnUpdateEvent(Framework framework) {
LocalPlayer = (PlayerCharacter) this.Actors[0]; //LocalPlayer = (PlayerCharacter) this.Actors[0];
Log.Verbose("FRAMEWORK UPDATE");
} }
} }
} }

View file

@ -1,5 +1,8 @@
using Dalamud.Game.Network.Structures;
namespace Dalamud.Game.Network.MarketBoardUploaders { namespace Dalamud.Game.Network.MarketBoardUploaders {
internal interface IMarketBoardUploader { internal interface IMarketBoardUploader {
void Upload(MarketBoardItemRequest itemRequest); void Upload(MarketBoardItemRequest itemRequest);
void UploadTax(MarketTaxRates taxRates);
} }
} }

View file

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Net; using System.Net;
using Dalamud.Game.Network.MarketBoardUploaders; using Dalamud.Game.Network.MarketBoardUploaders;
using Dalamud.Game.Network.MarketBoardUploaders.Universalis; using Dalamud.Game.Network.MarketBoardUploaders.Universalis;
using Dalamud.Game.Network.Structures;
using Newtonsoft.Json; using Newtonsoft.Json;
using Serilog; using Serilog;
@ -86,5 +87,31 @@ namespace Dalamud.Game.Network.Universalis.MarketBoardUploaders {
Log.Verbose("Universalis data upload for item#{0} completed.", request.CatalogId); Log.Verbose("Universalis data upload for item#{0} completed.", request.CatalogId);
} }
} }
public void UploadTax(MarketTaxRates taxRates) {
using (var client = new WebClient())
{
var taxRatesRequest = new UniversalisTaxUploadRequest();
taxRatesRequest.WorldId = this.dalamud.ClientState.LocalPlayer.CurrentWorld.Id;
taxRatesRequest.UploaderId = this.dalamud.ClientState.LocalContentId;
taxRatesRequest.TaxData = new UniversalisTaxData {
LimsaLominsa = taxRates.LimsaLominsaTax,
Gridania = taxRates.GridaniaTax,
Uldah = taxRates.UldahTax,
Ishgard = taxRates.IshgardTax,
Kugane = taxRates.KuganeTax,
Crystarium = taxRates.CrystariumTax
};
client.Headers.Add(HttpRequestHeader.ContentType, "application/json");
var historyUpload = JsonConvert.SerializeObject(taxRatesRequest);
client.UploadString(ApiBase + $"/upload/{ApiKey}", "POST", historyUpload);
Log.Verbose(historyUpload);
Log.Verbose("Universalis tax upload completed.");
}
}
} }
} }

View file

@ -0,0 +1,41 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
namespace Dalamud.Game.Network.MarketBoardUploaders.Universalis
{
class UniversalisTaxUploadRequest
{
[JsonProperty("uploaderID")]
public ulong UploaderId { get; set; }
[JsonProperty("worldID")]
public int WorldId { get; set; }
[JsonProperty("marketTaxRates")]
public UniversalisTaxData TaxData { get; set; }
}
class UniversalisTaxData {
[JsonProperty("limsaLominsa")]
public uint LimsaLominsa { get; set; }
[JsonProperty("gridania")]
public uint Gridania { get; set; }
[JsonProperty("uldah")]
public uint Uldah { get; set; }
[JsonProperty("ishgard")]
public uint Ishgard { get; set; }
[JsonProperty("kugane")]
public uint Kugane { get; set; }
[JsonProperty("crystarium")]
public uint Crystarium { get; set; }
}
}

View file

@ -29,6 +29,7 @@ namespace Dalamud.Game.Network {
private void OnZonePacket(IntPtr dataPtr) { private void OnZonePacket(IntPtr dataPtr) {
var opCode = (ZoneOpCode) Marshal.ReadInt16(dataPtr, 2); var opCode = (ZoneOpCode) Marshal.ReadInt16(dataPtr, 2);
/*
if (opCode == ZoneOpCode.RetainerSaleItemId) { if (opCode == ZoneOpCode.RetainerSaleItemId) {
var itemId = Marshal.ReadInt32(dataPtr + 16); var itemId = Marshal.ReadInt32(dataPtr + 16);
var amount = Marshal.ReadByte(dataPtr + 32); var amount = Marshal.ReadByte(dataPtr + 32);
@ -58,22 +59,25 @@ namespace Dalamud.Game.Network {
return; return;
} }
*/
if (opCode == ZoneOpCode.CfNotify) { if (opCode == ZoneOpCode.CfNotifyRoulette) {
var data = new byte[64]; var data = new byte[64];
Marshal.Copy(dataPtr, data, 0, 64); Marshal.Copy(dataPtr, data, 0, 64);
var notifyType = data[16]; var notifyType = data[16];
var contentFinderConditionId = BitConverter.ToInt16(data, 28); var contentFinderConditionId = BitConverter.ToInt16(data, 36);
Task.Run(async () => { Task.Run(async () => {
if (notifyType != 2 || contentFinderConditionId == 0) if (notifyType != 3 || contentFinderConditionId == 0)
return; return;
var contentFinderCondition = var contentFinderCondition =
await XivApi.GetContentFinderCondition(contentFinderConditionId); await XivApi.GetContentFinderCondition(contentFinderConditionId);
this.dalamud.Framework.Gui.Chat.Print($"Duty pop: " + contentFinderCondition["Name"]);
if (this.dalamud.BotManager.IsConnected) if (this.dalamud.BotManager.IsConnected)
await this.dalamud.BotManager.ProcessCfPop(contentFinderCondition); await this.dalamud.BotManager.ProcessCfPop(contentFinderCondition);
}); });
@ -173,14 +177,32 @@ namespace Dalamud.Game.Network {
Log.Verbose("Added history for item#{0}", listing.CatalogId); Log.Verbose("Added history for item#{0}", listing.CatalogId);
} }
if (opCode == ZoneOpCode.MarketTaxRates)
{
var taxes = MarketTaxRates.Read(dataPtr + 0x10);
Log.Verbose("MarketTaxRates: limsa#{0} grid#{1} uldah#{2} ish#{3} kugane#{4} cr#{5}",
taxes.LimsaLominsaTax, taxes.GridaniaTax, taxes.UldahTax, taxes.IshgardTax, taxes.KuganeTax, taxes.CrystariumTax);
try
{
Task.Run(() => this.uploader.UploadTax(taxes));
}
catch (Exception ex)
{
Log.Error(ex, "Market Board data upload failed.");
}
}
} }
} }
private enum ZoneOpCode { private enum ZoneOpCode {
CfNotifyRoulette = 0xB3,
CfNotify = 0x8F, CfNotify = 0x8F,
RetainerSaleItemId = 0x13F, // TODO these are probably not accurate RetainerSaleItemId = 0x13F, // TODO these are probably not accurate
RetainerSaleFinish = 0x138, RetainerSaleFinish = 0x138,
FateSpawn = 0x226, FateSpawn = 0x226,
MarketTaxRates = 0x76,
MarketBoardItemRequestStart = 0x39D, MarketBoardItemRequestStart = 0x39D,
MarketBoardOfferings = 0x36A, MarketBoardOfferings = 0x36A,
MarketBoardHistory = 0x194 MarketBoardHistory = 0x194

View file

@ -3,22 +3,28 @@ using System.Collections.Generic;
using System.IO; using System.IO;
using System.Text; using System.Text;
namespace Dalamud.Game.Network.Structures { namespace Dalamud.Game.Network.Structures
public class MarketBoardCurrentOfferings { {
public class MarketBoardCurrentOfferings
{
public List<MarketBoardItemListing> ItemListings; public List<MarketBoardItemListing> ItemListings;
public int ListingIndexEnd; public int ListingIndexEnd;
public int ListingIndexStart; public int ListingIndexStart;
public int RequestId; public int RequestId;
public static unsafe MarketBoardCurrentOfferings Read(IntPtr dataPtr) { public static unsafe MarketBoardCurrentOfferings Read(IntPtr dataPtr)
{
var output = new MarketBoardCurrentOfferings(); var output = new MarketBoardCurrentOfferings();
using (var stream = new UnmanagedMemoryStream((byte*) dataPtr.ToPointer(), 1544)) { using (var stream = new UnmanagedMemoryStream((byte*)dataPtr.ToPointer(), 1544))
using (var reader = new BinaryReader(stream)) { {
using (var reader = new BinaryReader(stream))
{
output.ItemListings = new List<MarketBoardItemListing>(); output.ItemListings = new List<MarketBoardItemListing>();
for (var i = 0; i < 10; i++) { for (var i = 0; i < 10; i++)
{
var listingEntry = new MarketBoardItemListing(); var listingEntry = new MarketBoardItemListing();
listingEntry.ListingId = reader.ReadUInt64(); listingEntry.ListingId = reader.ReadUInt64();
@ -38,7 +44,8 @@ namespace Dalamud.Game.Network.Structures {
listingEntry.Materia = new List<MarketBoardItemListing.ItemMateria>(); listingEntry.Materia = new List<MarketBoardItemListing.ItemMateria>();
for (var materiaIndex = 0; materiaIndex < 5; materiaIndex++) { for (var materiaIndex = 0; materiaIndex < 5; materiaIndex++)
{
var materiaVal = reader.ReadUInt16(); var materiaVal = reader.ReadUInt16();
var materiaEntry = new MarketBoardItemListing.ItemMateria(); var materiaEntry = new MarketBoardItemListing.ItemMateria();
@ -76,7 +83,8 @@ namespace Dalamud.Game.Network.Structures {
return output; return output;
} }
public class MarketBoardItemListing { public class MarketBoardItemListing
{
public ulong ArtisanId; public ulong ArtisanId;
public uint CatalogId; public uint CatalogId;
public bool IsHq; public bool IsHq;
@ -97,7 +105,8 @@ namespace Dalamud.Game.Network.Structures {
public int StainId; public int StainId;
public uint TotalTax; public uint TotalTax;
public class ItemMateria { public class ItemMateria
{
public int Index; public int Index;
public int MateriaId; public int MateriaId;
} }

View file

@ -0,0 +1,41 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Text;
namespace Dalamud.Game.Network.Structures
{
public class MarketTaxRates
{
public uint LimsaLominsaTax;
public uint GridaniaTax;
public uint UldahTax;
public uint IshgardTax;
public uint KuganeTax;
public uint CrystariumTax;
public static unsafe MarketTaxRates Read(IntPtr dataPtr)
{
var output = new MarketTaxRates();
using (var stream = new UnmanagedMemoryStream((byte*)dataPtr.ToPointer(), 1544))
{
using (var reader = new BinaryReader(stream))
{
stream.Position += 8;
output.LimsaLominsaTax = reader.ReadUInt32();
output.GridaniaTax = reader.ReadUInt32();
output.UldahTax = reader.ReadUInt32();
output.IshgardTax = reader.ReadUInt32();
output.KuganeTax = reader.ReadUInt32();
output.CrystariumTax = reader.ReadUInt32();
}
}
return output;
}
}
}