mirror of
https://github.com/Ottermandias/Glamourer.git
synced 2025-12-13 12:14:18 +01:00
Don't apply old glamourer designs to non-humans.
This commit is contained in:
parent
3522cf7d7c
commit
46317f1e7f
6 changed files with 19 additions and 17 deletions
|
|
@ -45,28 +45,29 @@ public partial class GlamourerIpc
|
||||||
|
|
||||||
|
|
||||||
public void ApplyAll(string base64, string characterName)
|
public void ApplyAll(string base64, string characterName)
|
||||||
=> ApplyDesign(_designConverter.FromBase64(base64, true, true), FindActors(characterName));
|
=> ApplyDesign(_designConverter.FromBase64(base64, true, true, out var version), FindActors(characterName), version);
|
||||||
|
|
||||||
public void ApplyAllToCharacter(string base64, Character? character)
|
public void ApplyAllToCharacter(string base64, Character? character)
|
||||||
=> ApplyDesign(_designConverter.FromBase64(base64, true, true), FindActors(character));
|
=> ApplyDesign(_designConverter.FromBase64(base64, true, true, out var version), FindActors(character), version);
|
||||||
|
|
||||||
public void ApplyOnlyEquipment(string base64, string characterName)
|
public void ApplyOnlyEquipment(string base64, string characterName)
|
||||||
=> ApplyDesign(_designConverter.FromBase64(base64, false, true), FindActors(characterName));
|
=> ApplyDesign(_designConverter.FromBase64(base64, false, true, out var version), FindActors(characterName), version);
|
||||||
|
|
||||||
public void ApplyOnlyEquipmentToCharacter(string base64, Character? character)
|
public void ApplyOnlyEquipmentToCharacter(string base64, Character? character)
|
||||||
=> ApplyDesign(_designConverter.FromBase64(base64, false, true), FindActors(character));
|
=> ApplyDesign(_designConverter.FromBase64(base64, false, true, out var version), FindActors(character), version);
|
||||||
|
|
||||||
public void ApplyOnlyCustomization(string base64, string characterName)
|
public void ApplyOnlyCustomization(string base64, string characterName)
|
||||||
=> ApplyDesign(_designConverter.FromBase64(base64, true, false), FindActors(characterName));
|
=> ApplyDesign(_designConverter.FromBase64(base64, true, false, out var version), FindActors(characterName), version);
|
||||||
|
|
||||||
public void ApplyOnlyCustomizationToCharacter(string base64, Character? character)
|
public void ApplyOnlyCustomizationToCharacter(string base64, Character? character)
|
||||||
=> ApplyDesign(_designConverter.FromBase64(base64, true, false), FindActors(character));
|
=> ApplyDesign(_designConverter.FromBase64(base64, true, false, out var version), FindActors(character), version);
|
||||||
|
|
||||||
private void ApplyDesign(DesignBase? design, IEnumerable<ActorIdentifier> actors)
|
private void ApplyDesign(DesignBase? design, IEnumerable<ActorIdentifier> actors, byte version)
|
||||||
{
|
{
|
||||||
if (design == null)
|
if (design == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
var hasModelId = version >= 3;
|
||||||
_objects.Update();
|
_objects.Update();
|
||||||
foreach (var id in actors)
|
foreach (var id in actors)
|
||||||
{
|
{
|
||||||
|
|
@ -77,7 +78,7 @@ public partial class GlamourerIpc
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (state.CanUnlock(0xDEADBEEF))
|
if ((hasModelId || state.ModelData.ModelId == 0) &&state.CanUnlock(0xDEADBEEF))
|
||||||
{
|
{
|
||||||
_stateManager.ApplyDesign(design, state, StateChanged.Source.Ipc, 0xDEADBEEF);
|
_stateManager.ApplyDesign(design, state, StateChanged.Source.Ipc, 0xDEADBEEF);
|
||||||
state.Lock(0xDEADBEEF);
|
state.Lock(0xDEADBEEF);
|
||||||
|
|
|
||||||
|
|
@ -61,14 +61,15 @@ public class DesignConverter
|
||||||
return design;
|
return design;
|
||||||
}
|
}
|
||||||
|
|
||||||
public DesignBase? FromBase64(string base64, bool customize, bool equip)
|
public DesignBase? FromBase64(string base64, bool customize, bool equip, out byte version)
|
||||||
{
|
{
|
||||||
var bytes = System.Convert.FromBase64String(base64);
|
|
||||||
|
|
||||||
DesignBase ret;
|
DesignBase ret;
|
||||||
|
version = 0;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
switch (bytes[0])
|
var bytes = System.Convert.FromBase64String(base64);
|
||||||
|
version = bytes[0];
|
||||||
|
switch (version)
|
||||||
{
|
{
|
||||||
case (byte)'{':
|
case (byte)'{':
|
||||||
var jObj1 = JObject.Parse(Encoding.UTF8.GetString(bytes));
|
var jObj1 = JObject.Parse(Encoding.UTF8.GetString(bytes));
|
||||||
|
|
@ -82,7 +83,7 @@ public class DesignConverter
|
||||||
ret.MigrateBase64(_customize, _items, base64);
|
ret.MigrateBase64(_customize, _items, base64);
|
||||||
break;
|
break;
|
||||||
case Version:
|
case Version:
|
||||||
var version = bytes.DecompressToString(out var decompressed);
|
version = bytes.DecompressToString(out var decompressed);
|
||||||
var jObj2 = JObject.Parse(decompressed);
|
var jObj2 = JObject.Parse(decompressed);
|
||||||
Debug.Assert(version == Version);
|
Debug.Assert(version == Version);
|
||||||
ret = jObj2["Identifier"] != null
|
ret = jObj2["Identifier"] != null
|
||||||
|
|
|
||||||
|
|
@ -316,7 +316,7 @@ public class ActorPanel
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var text = ImGui.GetClipboardText();
|
var text = ImGui.GetClipboardText();
|
||||||
var design = _converter.FromBase64(text, true, true) ?? throw new Exception("The clipboard did not contain valid data.");
|
var design = _converter.FromBase64(text, true, true, out _) ?? throw new Exception("The clipboard did not contain valid data.");
|
||||||
_stateManager.ApplyDesign(design, _state!, StateChanged.Source.Manual);
|
_stateManager.ApplyDesign(design, _state!, StateChanged.Source.Manual);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
|
|
|
||||||
|
|
@ -1038,7 +1038,7 @@ public unsafe class DebugTab : ITab
|
||||||
_version = _clipboardData.Decompress(out _dataUncompressed);
|
_version = _clipboardData.Decompress(out _dataUncompressed);
|
||||||
_textUncompressed = Encoding.UTF8.GetString(_dataUncompressed);
|
_textUncompressed = Encoding.UTF8.GetString(_dataUncompressed);
|
||||||
_json = JObject.Parse(_textUncompressed);
|
_json = JObject.Parse(_textUncompressed);
|
||||||
_tmpDesign = _designConverter.FromBase64(_clipboardText, true, true);
|
_tmpDesign = _designConverter.FromBase64(_clipboardText, true, true, out _);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -178,7 +178,7 @@ public sealed class DesignFileSystemSelector : FileSystemSelector<Design, Design
|
||||||
|
|
||||||
if (_clipboardText != null)
|
if (_clipboardText != null)
|
||||||
{
|
{
|
||||||
var design = _converter.FromBase64(_clipboardText, true, true);
|
var design = _converter.FromBase64(_clipboardText, true, true, out _);
|
||||||
if (design is Design d)
|
if (design is Design d)
|
||||||
_designManager.CreateClone(d, _newName);
|
_designManager.CreateClone(d, _newName);
|
||||||
else if (design != null)
|
else if (design != null)
|
||||||
|
|
|
||||||
|
|
@ -339,7 +339,7 @@ public class DesignPanel
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var text = ImGui.GetClipboardText();
|
var text = ImGui.GetClipboardText();
|
||||||
var design = _converter.FromBase64(text, true, true) ?? throw new Exception("The clipboard did not contain valid data.");
|
var design = _converter.FromBase64(text, true, true, out _) ?? throw new Exception("The clipboard did not contain valid data.");
|
||||||
_manager.ApplyDesign(_selector.Selected!, design);
|
_manager.ApplyDesign(_selector.Selected!, design);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue