fix: add some instance checks
This commit is contained in:
@@ -33,6 +33,9 @@ internal unsafe class GameFunctions : IDisposable {
|
|||||||
[Signature("E8 ?? ?? ?? ?? EB 20 48 8B 46 28", Fallibility = Fallibility.Fallible)]
|
[Signature("E8 ?? ?? ?? ?? EB 20 48 8B 46 28", Fallibility = Fallibility.Fallible)]
|
||||||
private readonly delegate* unmanaged<AgentInterface*, uint, void> _openAchievement = null!;
|
private readonly delegate* unmanaged<AgentInterface*, uint, void> _openAchievement = null!;
|
||||||
|
|
||||||
|
[Signature("E8 ?? ?? ?? ?? 84 C0 49 8B DE", Fallibility = Fallibility.Fallible)]
|
||||||
|
private readonly delegate* unmanaged<byte> _inInstance = null!;
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Hooks
|
#region Hooks
|
||||||
@@ -255,6 +258,14 @@ internal unsafe class GameFunctions : IDisposable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal bool IsInInstance() {
|
||||||
|
if (this._inInstance == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return this._inInstance() != 0;
|
||||||
|
}
|
||||||
|
|
||||||
internal void ClickNoviceNetworkButton() {
|
internal void ClickNoviceNetworkButton() {
|
||||||
var agent = Framework.Instance()->GetUiModule()->GetAgentModule()->GetAgentByInternalId(AgentId.ChatLog);
|
var agent = Framework.Instance()->GetUiModule()->GetAgentModule()->GetAgentByInternalId(AgentId.ChatLog);
|
||||||
// case 3
|
// case 3
|
||||||
|
|||||||
@@ -450,14 +450,15 @@ internal sealed class PayloadHandler {
|
|||||||
var isLeader = party.Length == 0 || this.Ui.Plugin.ClientState.LocalContentId == leader;
|
var isLeader = party.Length == 0 || this.Ui.Plugin.ClientState.LocalContentId == leader;
|
||||||
var member = party.FirstOrDefault(member => member.Name.TextValue == player.PlayerName && member.World.Id == player.World.RowId);
|
var member = party.FirstOrDefault(member => member.Name.TextValue == player.PlayerName && member.World.Id == player.World.RowId);
|
||||||
var isInParty = member != default;
|
var isInParty = member != default;
|
||||||
|
var inInstance = this.Ui.Plugin.Functions.IsInInstance();
|
||||||
var inPartyInstance = this.Ui.Plugin.DataManager.GetExcelSheet<TerritoryType>()!.GetRow(this.Ui.Plugin.ClientState.TerritoryType)?.TerritoryIntendedUse is (41 or 47 or 48 or 52 or 53);
|
var inPartyInstance = this.Ui.Plugin.DataManager.GetExcelSheet<TerritoryType>()!.GetRow(this.Ui.Plugin.ClientState.TerritoryType)?.TerritoryIntendedUse is (41 or 47 or 48 or 52 or 53);
|
||||||
if (isLeader) {
|
if (isLeader) {
|
||||||
if (!isInParty) {
|
if (!isInParty) {
|
||||||
if (inPartyInstance) {
|
if (inInstance && inPartyInstance) {
|
||||||
if (chunk.Message?.ContentId is not null or 0 && ImGui.Selectable("Invite to Party")) {
|
if (chunk.Message?.ContentId is not null or 0 && ImGui.Selectable("Invite to Party")) {
|
||||||
this.Ui.Plugin.Functions.Party.InviteInInstance(chunk.Message!.ContentId);
|
this.Ui.Plugin.Functions.Party.InviteInInstance(chunk.Message!.ContentId);
|
||||||
}
|
}
|
||||||
} else if (ImGui.BeginMenu("Invite to Party")) {
|
} else if (!inInstance && ImGui.BeginMenu("Invite to Party")) {
|
||||||
if (ImGui.Selectable("Same world")) {
|
if (ImGui.Selectable("Same world")) {
|
||||||
this.Ui.Plugin.Functions.Party.InviteSameWorld(player.PlayerName, (ushort) player.World.RowId, chunk.Message?.ContentId ?? 0);
|
this.Ui.Plugin.Functions.Party.InviteSameWorld(player.PlayerName, (ushort) player.World.RowId, chunk.Message?.ContentId ?? 0);
|
||||||
}
|
}
|
||||||
@@ -470,7 +471,7 @@ internal sealed class PayloadHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isInParty && member != null) {
|
if (isInParty && member != null && (!inInstance || (inInstance && inPartyInstance))) {
|
||||||
if (ImGui.Selectable("Promote")) {
|
if (ImGui.Selectable("Promote")) {
|
||||||
this.Ui.Plugin.Functions.Party.Promote(player.PlayerName, (ulong) member.ContentId);
|
this.Ui.Plugin.Functions.Party.Promote(player.PlayerName, (ulong) member.ContentId);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user