feat: Moves gumps out of the core (#1916)

> [!Important]
> **Developer Note**
> This code change will **completely move gumps out of the core**


### Summary

- Adds `GetGumps()` convenience which exposes methods to Find/Close/Send multiple gumps. This helper is a performance improvement by eliminating the Dictionary<Player, List> lookup for gumps.
This commit is contained in:
Kamron Batman 2024-08-09 19:07:32 -07:00 • committed by GitHub
parent 40d99f6d1c
commit 8282b00ca2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
246 changed files with 1722 additions and 1383 deletions

View file

@ -157,7 +157,6 @@ public partial class Moongate : Item
from.SendSound(0x20E, from);
}
from.CloseGump<MoongateConfirmGump>();
from.SendGump(new MoongateConfirmGump(from, this));
}
else
@ -265,7 +264,6 @@ public partial class ConfirmationMoongate : Moongate
{
if (GumpWidth > 0 && GumpHeight > 0 && TitleNumber > 0 && Message?.IsEmpty == false)
{
from.CloseGump<WarningGump>();
from.SendGump(
new WarningGump(
TitleNumber,
@ -275,7 +273,8 @@ public partial class ConfirmationMoongate : Moongate
GumpWidth,
GumpHeight,
okay => Warning_Callback(from, okay)
)
),
true
);
}
else
@ -307,6 +306,8 @@ public class MoongateConfirmGump : Gump
private Mobile _from;
private Moongate _gate;
public override bool Singleton => true;
public MoongateConfirmGump(Mobile from, Moongate gate) : base(Core.AOS ? 110 : 20, Core.AOS ? 100 : 30)
{
_from = from;

View file

@ -170,25 +170,7 @@ public partial class Runebook : Item, ISecurable, ICraftable
from.SendLocalizedMessage(502421); // You have removed the rune.
}
public bool IsOpen(Mobile toCheck)
{
var ns = toCheck.NetState;
if (ns == null)
{
return false;
}
foreach (var gump in ns.Gumps)
{
if ((gump as RunebookGump)?.Book == this)
{
return true;
}
}
return false;
}
public bool IsOpen(Mobile toCheck) => toCheck.FindGump<RunebookGump>()?.Book == this;
public override void GetProperties(IPropertyList list)
{
@ -268,9 +250,7 @@ public partial class Runebook : Item, ISecurable, ICraftable
public void SendGumpTo(Mobile from)
{
from.CloseGump<RunebookGump>();
from.SendGump(new RunebookGump(this));
from.SendGump(new RunebookGump(this), true);
Openers.Add(from);
}

View file

@ -277,7 +277,6 @@ public class BandageContext : Timer
{
healerNumber = 503255; // You are able to resurrect the creature.
master.CloseGump<PetResurrectGump>();
master.SendGump(new PetResurrectGump(Healer, petPatient));
}
else
@ -294,7 +293,6 @@ public class BandageContext : Timer
{
healerNumber = 503255; // You are able to resurrect the creature.
friend.CloseGump<PetResurrectGump>();
friend.SendGump(new PetResurrectGump(Healer, petPatient));
found = true;
@ -310,7 +308,6 @@ public class BandageContext : Timer
}
else
{
Patient.CloseGump<ResurrectGump>();
Patient.SendGump(new ResurrectGump(Healer));
}
}

View file

@ -1,4 +1,5 @@
using ModernUO.Serialization;
using Server.Gumps;
using Server.HuePickers;
using Server.Targeting;

View file

@ -102,14 +102,14 @@ public class DisguiseGump : Gump
private readonly DisguiseKit m_Kit;
private readonly bool m_Used;
public override bool Singleton => true;
public DisguiseGump(Mobile from, DisguiseKit kit, bool startAtHair, bool used) : base(50, 50)
{
m_From = from;
m_Kit = kit;
m_Used = used;
from.CloseGump<DisguiseGump>();
AddPage(0);
AddBackground(100, 10, 400, 385, 2600);

View file

@ -1,6 +1,7 @@
using System;
using ModernUO.Serialization;
using Server.Engines.Craft;
using Server.Gumps;
using Server.Network;
namespace Server.Items;