diff --git a/TCC.Core/UI/Windows/Widgets/GroupWindow.xaml b/TCC.Core/UI/Windows/Widgets/GroupWindow.xaml
index 6d6806a1..4e7631e3 100644
--- a/TCC.Core/UI/Windows/Widgets/GroupWindow.xaml
+++ b/TCC.Core/UI/Windows/Widgets/GroupWindow.xaml
@@ -4,6 +4,7 @@
xmlns:controls="clr-namespace:TCC.UI.Controls"
xmlns:converters="clr-namespace:Nostrum.WPF.Converters;assembly=Nostrum.WPF"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+ xmlns:extensions="clr-namespace:Nostrum.WPF.Extensions;assembly=Nostrum.WPF"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:widgets="clr-namespace:TCC.ViewModels.Widgets"
xmlns:widgets1="clr-namespace:TCC.UI.Windows.Widgets"
@@ -16,6 +17,30 @@
UseLayoutRounding="True"
mc:Ignorable="d">
+
+
+
+
+
@@ -113,91 +138,100 @@
BorderBrush="{StaticResource RevampBorderBrush}"
CornerRadius="5"
Opacity="0"
- Style="{StaticResource DefaultBorderStyle}"
- Visibility="{Binding Formed, Converter={converters:BoolToVisibility}}">
-
+ Visibility="{Binding Formed, Converter={converters:BoolToVisibility}}"
+ Style="{StaticResource DefaultBorderStyle}">
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
_raid;
set => RaiseAndSetIfChanged(value, ref _raid);
}
+
public int Size => Members.Count;
public int ReadyCount => Members.Count(x => x.Ready == ReadyStatus.Ready);
public int AliveCount => Members.Count(x => x.Alive);
@@ -58,6 +63,10 @@ public bool Raid
public bool Rolling { get; set; }
public ICommand ShowLootWindowCommand { get; }
+ public ICommand ConfigureAbnormalitiesCommand { get; }
+ public ICommand LeaveGroupCommand { get; }
+ public ICommand DisbandGroupCommand { get; }
+ public ICommand ResetInstanceCommand { get; }
public GroupWindowViewModel(GroupWindowSettings settings) : base(settings)
{
@@ -88,7 +97,6 @@ [new SortDescription(nameof(User.UserClass), ListSortDirection.Ascending)])
])
?? throw new Exception("Failed to create LiveCollectionView");
-
Game.Teleported += OnTeleported;
Game.EncounterChanged += OnEncounterChanged;
settings.SettingsUpdated += NotifySettingUpdated;
@@ -97,6 +105,38 @@ [new SortDescription(nameof(User.UserClass), ListSortDirection.Ascending)])
settings.LayoutChanged += OnLayoutChanged;
ShowLootWindowCommand = new RelayCommand(Game.ShowLootDistributionWindow);
+
+ ConfigureAbnormalitiesCommand = new RelayCommand(ConfigureAbnormalities);
+ LeaveGroupCommand = new RelayCommand(LeaveGroup);
+ DisbandGroupCommand = new RelayCommand(DisbandGroup);
+ ResetInstanceCommand = new RelayCommand(ResetInstance);
+ }
+
+ private void ResetInstance()
+ {
+ if (!AmILeader) return;
+ StubInterface.Instance.StubClient.ResetInstance();
+ }
+
+ private void DisbandGroup()
+ {
+ if (!AmILeader) return;
+ StubInterface.Instance.StubClient.DisbandGroup();
+ }
+
+ private void LeaveGroup()
+ {
+ StubInterface.Instance.StubClient.LeaveGroup();
+ }
+
+ private void ConfigureAbnormalities()
+ {
+ _dispatcher.InvokeAsync(() =>
+ {
+ if (TccWindow.Exists(typeof(AbnormalityConfigWindow))) return;
+ new AbnormalityConfigWindow().Show();
+ },
+ DispatcherPriority.Background);
}
private void OnEncounterChanged()
@@ -123,7 +163,6 @@ private void OnTeleported()
foreach (var u in Members.ToSyncList()) u.InRange = false;
}
-
private void Members_CollectionChanged(object? sender, NotifyCollectionChangedEventArgs e)
{
//Task.Delay(0).ContinueWith(t =>
@@ -167,6 +206,7 @@ public bool TryGetUser(string name, [MaybeNullWhen(false)] out User u)
u = exists ? Members.ToSyncList().FirstOrDefault(x => x.Name == name) : new User(_dispatcher);
return exists;
}
+
public bool TryGetUser(ulong id, [MaybeNullWhen(false)] out User u)
{
var exists = Exists(id);
@@ -174,6 +214,7 @@ public bool TryGetUser(ulong id, [MaybeNullWhen(false)] out User u)
u = exists ? Members.ToSyncList().FirstOrDefault(x => x.EntityId == id) : new User(_dispatcher);
return u != null;
}
+
public bool TryGetUser(uint pId, uint sId, [MaybeNullWhen(false)] out User u)
{
var exists = Exists(pId, sId);
@@ -185,6 +226,7 @@ public bool IsLeader(string name)
{
return Members.FirstOrDefault(x => x.Name == name)?.IsLeader ?? false;
}
+
public bool AmILeader => IsLeader(Game.Me.Name) || _leaderOverride;
public void SetAggro(ulong target)
@@ -216,6 +258,7 @@ private void SetAggroCircle(AggroCircle circle, AggroAction action, ulong user)
SetAggro(user);
}
}
+
internal void BeginOrRefreshAbnormality(Abnormality ab, int stacks, uint duration, uint playerId, uint serverId)
{
_dispatcher.InvokeAsync(() =>
@@ -229,7 +272,7 @@ internal void BeginOrRefreshAbnormality(Abnormality ab, int stacks, uint duratio
u.AddOrRefreshBuff(ab, duration, stacks);
if (u.UserClass == Class.Warrior && ab.Id is >= 100200 and <= 100203)
{
- u.Role = Role.Tank; //def stance turned on: switch warrior to tank
+ u.Role = Role.Tank; //def stance turned on: switch warrior to tank
}
}
else
@@ -249,7 +292,6 @@ private void EndAbnormality(Abnormality ab, uint playerId, uint serverId)
{
_dispatcher.InvokeAsync(() =>
{
-
var u = Members.ToSyncList().FirstOrDefault(x => x.PlayerId == playerId && x.ServerId == serverId);
if (u == null) return;
@@ -275,6 +317,7 @@ private void ClearAbnormality(uint playerId, uint serverId)
Members.ToSyncList().FirstOrDefault(x => x.PlayerId == playerId && x.ServerId == serverId)?.ClearAbnormalities();
});
}
+
[Obsolete]
public void AddOrUpdateMember(User p)
{
@@ -376,7 +419,6 @@ private void SendLeaveMessage(string name)
msg = "@0\vPartyPlayerName\v" + name + "\vparty\vparty";
}
SystemMessagesProcessor.AnalyzeMessage(msg, opcode);
-
}
private void RemoveMember(uint playerId, uint serverId, bool kick = false)
@@ -480,7 +522,6 @@ private void EndRoll()
{
Rolling = false;
-
foreach (var m in Members.ToSyncList())
{
m.IsRolling = false;
@@ -500,9 +541,9 @@ private ulong GetWinningUser()
return Members.ToSyncList().OrderByDescending(u => u.RollResult).First().EntityId;
//Members.ToList().ForEach(user => user.IsWinning = user.EntityId == Members.OrderByDescending(u => u.RollResult).First().EntityId);
}
+
public void SetReadyStatus(ReadyPartyMember p)
{
-
if (_firstCheck)
{
foreach (var u in Members.ToSyncList())
@@ -691,7 +732,6 @@ protected override void RemoveHooks()
PacketAnalyzer.Processor.Unhook(OnAbnormalityBegin);
PacketAnalyzer.Processor.Unhook(OnAbnormalityRefresh);
PacketAnalyzer.Processor.Unhook(OnAbnormalityEnd);
-
}
private void OnDisconnected()
@@ -759,7 +799,7 @@ private void OnCheckToReadyParty(S_CHECK_TO_READY_PARTY p)
{
_dispatcher.InvokeAsync(() =>
{
- foreach (var readyPartyMember in p.Party)
+ foreach (var readyPartyMember in p.Party)
SetReadyStatus(readyPartyMember);
});
}