Compare commits

...

4 Commits
main ... dev

Author SHA1 Message Date
424f95e06b
refactor: update dependencies 2024-07-15 23:38:17 -04:00
77c3fa6c63
chore: update signature 2024-06-26 11:37:17 -04:00
17cc403801
chore: remove unnecessary replacement 2024-06-21 12:12:50 -04:00
2a478c4e44
chore: add more replacements 2024-06-21 12:02:38 -04:00
9 changed files with 53 additions and 24 deletions

View File

@ -12,7 +12,7 @@ public interface IWhen {
}
public class WhenNodeDeserialiser : INodeDeserializer {
public bool Deserialize(IParser reader, Type expectedType, Func<IParser, Type, object?> nestedObjectDeserializer, out object? value) {
public bool Deserialize(IParser reader, Type expectedType, Func<IParser, Type, object?> nestedObjectDeserializer, out object? value, ObjectDeserializer rootDeserializer) {
if (expectedType != typeof(IWhen)) {
value = null;
return false;
@ -27,6 +27,7 @@ public class WhenNodeDeserialiser : INodeDeserializer {
value = name.Value switch {
"quest" => nestedObjectDeserializer(reader, typeof(WhenQuest)),
"level" => nestedObjectDeserializer(reader, typeof(WhenLevel)),
"sex" => nestedObjectDeserializer(reader, typeof(WhenSex)),
_ => throw new YamlException($"invalid when: unknown type \"{name.Value}\""),
};

View File

@ -1,5 +1,3 @@
using YamlDotNet.Serialization;
namespace TimePasses.Model;
[Serializable]

View File

@ -33,7 +33,7 @@ internal class ReplacementTextConverter : IYamlTypeConverter {
return type == typeof(ReplacementText);
}
public object? ReadYaml(IParser parser, Type type) {
public object? ReadYaml(IParser parser, Type type, ObjectDeserializer rootDeserializer) {
var list = new List<string>();
if (parser.Current is Scalar) {
AddItem();
@ -60,7 +60,7 @@ internal class ReplacementTextConverter : IYamlTypeConverter {
}
}
public void WriteYaml(IEmitter emitter, object? value, Type type) {
public void WriteYaml(IEmitter emitter, object? value, Type type, ObjectSerializer serializer) {
throw new NotImplementedException();
}
}

View File

@ -31,7 +31,7 @@ public class WhenLevelConverter : IYamlTypeConverter {
return type == typeof(WhenLevel);
}
public object ReadYaml(IParser parser, Type type) {
public object ReadYaml(IParser parser, Type type, ObjectDeserializer rootDeserializer) {
parser.Consume<MappingStart>();
ReplacementText? text = null;
@ -45,7 +45,7 @@ public class WhenLevelConverter : IYamlTypeConverter {
}
if (key.Value == "text") {
text = (ReplacementText?) ReplacementTextConverter.Instance.ReadYaml(parser, type);
text = (ReplacementText?) ReplacementTextConverter.Instance.ReadYaml(parser, type, rootDeserializer);
continue;
}
@ -115,7 +115,7 @@ public class WhenLevelConverter : IYamlTypeConverter {
};
}
public void WriteYaml(IEmitter emitter, object? value, Type type) {
public void WriteYaml(IEmitter emitter, object? value, Type type, ObjectSerializer serializer) {
throw new NotImplementedException();
}
}

26
Model/WhenSex.cs Normal file
View File

@ -0,0 +1,26 @@
using Dalamud.Game.ClientState.Objects.Enums;
using YamlDotNet.Serialization;
namespace TimePasses.Model;
[Serializable]
public class WhenSex : IWhen {
[YamlMember(Alias = "is")]
public Sex Sex { get; init; }
public ReplacementText Text { get; init; }
public bool Slowly { get; init; }
public bool IsValid(Plugin plugin) {
if (plugin.ClientState.LocalPlayer is not { } player) {
return false;
}
return player.Customize[(int) CustomizeIndex.Gender] == (byte) this.Sex;
}
}
[Serializable]
public enum Sex : byte {
Female = 1,
Male = 0,
}

View File

@ -39,7 +39,7 @@ public sealed class Plugin : IDalamudPlugin {
.Build();
private static class Signatures {
internal const string GetBalloonRow = "E8 ?? ?? ?? ?? 48 85 C0 74 4D 48 89 5C 24";
internal const string GetBalloonRow = "E8 ?? ?? ?? ?? 48 85 C0 0F 84 ?? ?? ?? ?? 48 89 B4 24 ?? ?? ?? ?? 48 8B C8";
}
private delegate nint GetBalloonRowDelegate(uint rowId);

View File

@ -52,8 +52,8 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="DalamudPackager" Version="2.1.12" />
<PackageReference Include="YamlDotNet" Version="15.3.0" />
<PackageReference Include="DalamudPackager" Version="2.1.13" />
<PackageReference Include="YamlDotNet" Version="16.0.0" />
</ItemGroup>
<ItemGroup>

12
packages.lock.json Normal file → Executable file
View File

@ -4,15 +4,15 @@
"net8.0-windows7.0": {
"DalamudPackager": {
"type": "Direct",
"requested": "[2.1.12, )",
"resolved": "2.1.12",
"contentHash": "Sc0PVxvgg4NQjcI8n10/VfUQBAS4O+Fw2pZrAqBdRMbthYGeogzu5+xmIGCGmsEZ/ukMOBuAqiNiB5qA3MRalg=="
"requested": "[2.1.13, )",
"resolved": "2.1.13",
"contentHash": "rMN1omGe8536f4xLMvx9NwfvpAc9YFFfeXJ1t4P4PE6Gu8WCIoFliR1sh07hM+bfODmesk/dvMbji7vNI+B/pQ=="
},
"YamlDotNet": {
"type": "Direct",
"requested": "[15.3.0, )",
"resolved": "15.3.0",
"contentHash": "F93japYa9YrJ59AZGhgdaUGHN7ITJ55FBBg/D/8C0BDgahv/rQD6MOSwHxOJJpon1kYyslVbeBrQ2wcJhox01w=="
"requested": "[16.0.0, )",
"resolved": "16.0.0",
"contentHash": "kZ4jR5ltFhnjaUqK9x81zXRIUTH4PTXTTEmJDNQdkDLQhcv+2Nl19r0dCSvPW1mstOYBfXTnjdieRbUO6gHMDw=="
}
}
}

View File

@ -16,9 +16,11 @@ definitions:
# # id (uint) (required)
# # This is the ID from the Balloon excel sheet
# - id: 123
# # text (string) (optional)
# # text (string/list) (optional)
# # This text will be used instead of the normal text if there either are
# # no entries in the "when" section or if none of them match.
# # If this is a list, an entry will be chosen at random each time the
# # balloon appears.
# text: |-
# It's not so bad
# being green.
@ -35,10 +37,12 @@ definitions:
# # Inside the level object you should specify the comparator and the
# # text. The comparator can be greaterThan, lessThan, or equalTo.
# greaterThan: 49
# # text (string) (required)
# text: |-
# # text (string/list) (required)
# text:
# - |-
# You look like you've
# got some experience.
# - Please don't hurt me!
# # quest (list object)
# # This when item specifies text that should be displayed depending on
# # the status of a quest.
@ -47,7 +51,7 @@ definitions:
# # This is the quest ID, visible in the excel sheets or Garland
# # Tools.
# id: *patch2.0
# # text (string) (required)
# # text (string/list) (required)
# text: |-
# I can't believe you made
# it out of Porta Decumana!