feat: Moves network related events to UOContent using code generation (#1945)

### Summary
- Moves `CharacterCreated` event to UOContent using code generated event _CharacterCreatedEvent_.
- Moves `TargetByResourceMacro` event to UOContent using code generated event _TargetByResourceMacro_.
- Moves `GameLogin` event to UOContent using code generated event _GameLoginEvent_.
- Moves `ServerList` event to UOContent using code generated event _ServerListEvent_.
- Streamlines ProfessionInfo


> [!IMPORTANT]
> **Developer Note**
> Custom scripts that use any of these event sinks will need to be updated to use the new code generated events.
This commit is contained in:
Kamron Batman 2024-09-06 16:57:10 -07:00 committed by GitHub
parent 4110556e89
commit 47e16a03fe
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
14 changed files with 207 additions and 309 deletions

View file

@ -1,93 +0,0 @@
/*************************************************************************
* ModernUO *
* Copyright 2019-2023 - ModernUO Development Team *
* Email: hi@modernuo.com *
* File: CharacterCreatedEvent.cs *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation, either version 3 of the License, or *
* (at your option) any later version. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
*************************************************************************/
using System;
using System.Runtime.CompilerServices;
using Server.Accounting;
using Server.Network;
namespace Server;
public class CharacterCreatedEventArgs
{
public CharacterCreatedEventArgs(
NetState state, IAccount a, string name, bool female, int hue, StatNameValue[] stats, CityInfo city,
SkillNameValue[] skills, int shirtHue, int pantsHue, int hairID, int hairHue, int beardID, int beardHue,
int profession, Race race
)
{
State = state;
Account = a;
Name = name;
Female = female;
Hue = hue;
Stats = stats;
City = city;
Skills = skills;
ShirtHue = shirtHue;
PantsHue = pantsHue;
HairID = hairID;
HairHue = hairHue;
BeardID = beardID;
BeardHue = beardHue;
Profession = profession;
Race = race;
}
public NetState State { get; }
public IAccount Account { get; }
public Mobile Mobile { get; set; }
public string Name { get; }
public bool Female { get; }
public int Hue { get; }
public StatNameValue[] Stats { get; }
public CityInfo City { get; }
public SkillNameValue[] Skills { get; }
public int ShirtHue { get; }
public int PantsHue { get; }
public int HairID { get; }
public int HairHue { get; }
public int BeardID { get; }
public int BeardHue { get; }
public int Profession { get; set; }
public Race Race { get; }
}
public readonly record struct SkillNameValue(SkillName Name, int Value);
public readonly record struct StatNameValue(StatType Name, int Value);
public static partial class EventSink
{
public static event Action<CharacterCreatedEventArgs> CharacterCreated;
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void InvokeCharacterCreated(CharacterCreatedEventArgs e) => CharacterCreated?.Invoke(e);
}

View file

@ -41,9 +41,4 @@ public static partial class EventSink
public static event Action ServerStarted;
public static void InvokeServerStarted() => ServerStarted?.Invoke();
public static event Action<Mobile, Item, short> TargetByResourceMacro;
public static void InvokeTargetByResourceMacro(Mobile m, Item item, short resourceType) =>
TargetByResourceMacro?.Invoke(m, item, resourceType);
}

View file

@ -1,48 +0,0 @@
/*************************************************************************
* ModernUO *
* Copyright 2019-2023 - ModernUO Development Team *
* Email: hi@modernuo.com *
* File: GameLoginEvent.cs *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation, either version 3 of the License, or *
* (at your option) any later version. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
*************************************************************************/
using System;
using System.Runtime.CompilerServices;
using Server.Network;
namespace Server;
public class GameLoginEventArgs
{
public GameLoginEventArgs(NetState state, string un, string pw)
{
State = state;
Username = un;
Password = pw;
}
public NetState State { get; }
public string Username { get; }
public string Password { get; }
public bool Accepted { get; set; }
public CityInfo[] CityInfo { get; set; }
}
public static partial class EventSink
{
public static event Action<GameLoginEventArgs> GameLogin;
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void InvokeGameLogin(GameLoginEventArgs e) => GameLogin?.Invoke(e);
}

View file

@ -1,59 +0,0 @@
/*************************************************************************
* ModernUO *
* Copyright 2019-2023 - ModernUO Development Team *
* Email: hi@modernuo.com *
* File: ServerListEvent.cs *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation, either version 3 of the License, or *
* (at your option) any later version. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
*************************************************************************/
using System;
using System.Collections.Generic;
using System.Net;
using System.Runtime.CompilerServices;
using Server.Accounting;
using Server.Network;
namespace Server;
public class ServerListEventArgs
{
public ServerListEventArgs(NetState state, IAccount account)
{
State = state;
Account = account;
Servers = new List<ServerInfo>();
}
public NetState State { get; }
public IAccount Account { get; }
public bool Rejected { get; set; }
public List<ServerInfo> Servers { get; }
public void AddServer(string name, IPEndPoint address)
{
AddServer(name, 0, TimeZoneInfo.Local, address);
}
public void AddServer(string name, int fullPercent, TimeZoneInfo tz, IPEndPoint address)
{
Servers.Add(new ServerInfo(name, fullPercent, tz, address));
}
}
public static partial class EventSink
{
public static event Action<ServerListEventArgs> ServerList;
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void InvokeServerList(ServerListEventArgs e) => ServerList?.Invoke(e);
}

View file

@ -59,7 +59,7 @@ public class DamageEntry
}
[Flags]
public enum StatType
public enum StatType : byte
{
Str = 1,
Dex = 2,

View file

@ -1,7 +1,9 @@
using System;
using System.Collections.Generic;
using System.Net;
using ModernUO.CodeGeneratedEvents;
using Server.Accounting;
using Server.Engines.CharacterCreation;
using Server.Engines.Help;
using Server.Logging;
using Server.Network;
@ -65,7 +67,6 @@ public static class AccountHandler
public static void Initialize()
{
EventSink.AccountLogin += EventSink_AccountLogin;
EventSink.GameLogin += EventSink_GameLogin;
}
[Usage("Password <newPassword> <repeatPassword>")]
@ -348,7 +349,8 @@ public static class AccountHandler
}
}
public static void EventSink_GameLogin(GameLoginEventArgs e)
[OnEvent(nameof(GameServer.GameServerLoginEvent))]
public static void OnGameServerLogin(GameServer.GameLoginEventArgs e)
{
var un = e.Username;
var pw = e.Password;

View file

@ -0,0 +1,46 @@
using Server.Accounting;
using Server.Network;
namespace Server.Engines.CharacterCreation;
public class CharacterCreatedEventArgs(
NetState state, IAccount a, string name, bool female,
int hue, byte[] stats, CityInfo city, (SkillName, byte)[] skills,
int shirtHue, int pantsHue, int hairId, int hairHue,
int beardId, int beardHue, int profession, Race race
)
{
public NetState State { get; } = state;
public IAccount Account { get; } = a;
public Mobile Mobile { get; set; }
public string Name { get; } = name;
public bool Female { get; } = female;
public int Hue { get; } = hue;
public byte[] Stats { get; } = stats;
public CityInfo City { get; } = city;
public (SkillName, byte)[] Skills { get; } = skills;
public int ShirtHue { get; } = shirtHue;
public int PantsHue { get; } = pantsHue;
public int HairID { get; } = hairId;
public int HairHue { get; } = hairHue;
public int BeardID { get; } = beardId;
public int BeardHue { get; } = beardHue;
public int Profession { get; set; } = profession;
public Race Race { get; } = race;
}

View file

@ -1,16 +1,18 @@
using System;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using ModernUO.CodeGeneratedEvents;
using Server.Accounting;
using Server.Items;
using Server.Logging;
using Server.Maps;
using Server.Misc;
using Server.Mobiles;
using Server.Network;
namespace Server.Misc;
namespace Server.Engines.CharacterCreation;
public static class CharacterCreation
public static partial class CharacterCreation
{
private static readonly ILogger logger = LogFactory.GetLogger(typeof(CharacterCreation));
@ -78,45 +80,45 @@ public static class CharacterCreation
public static readonly CityInfo[] OldHavenStartingCities =
[
new CityInfo("Haven", "The Bountiful Harvest Inn", 3677, 2625, 0, Map.Trammel),
new CityInfo("Britain", "Sweet Dreams Inn", 1075074, 1496, 1628, 10, Map.Trammel),
new CityInfo("Magincia", "The Great Horns Tavern", 1075077, 3734, 2222, 20, Map.Trammel),
new("Haven", "The Bountiful Harvest Inn", 3677, 2625, 0, Map.Trammel),
new("Britain", "Sweet Dreams Inn", 1075074, 1496, 1628, 10, Map.Trammel),
new("Magincia", "The Great Horns Tavern", 1075077, 3734, 2222, 20, Map.Trammel),
];
public static readonly CityInfo[] FeluccaStartingCities =
[
new CityInfo("Yew", "The Empath Abbey", 1075072, 633, 858, 0, Map.Felucca),
new CityInfo("Minoc", "The Barnacle", 1075073, 2476, 413, 15, Map.Felucca),
new CityInfo("Britain", "Sweet Dreams Inn", 1075074, 1496, 1628, 10, Map.Felucca),
new CityInfo("Moonglow", "The Scholars Inn", 1075075, 4408, 1168, 0, Map.Felucca),
new CityInfo("Trinsic", "The Traveler's Inn", 1075076, 1845, 2745, 0, Map.Felucca),
new CityInfo("Magincia", "The Great Horns Tavern", 1075077, 3734, 2222, 20, Map.Felucca),
new CityInfo("Jhelom", "The Mercenary Inn", 1075078, 1374, 3826, 0, Map.Felucca),
new CityInfo("Skara Brae", "The Falconer's Inn", 1075079, 618, 2234, 0, Map.Felucca),
new CityInfo("Vesper", "The Ironwood Inn", 1075080, 2771, 976, 0, Map.Felucca)
new("Yew", "The Empath Abbey", 1075072, 633, 858, 0, Map.Felucca),
new("Minoc", "The Barnacle", 1075073, 2476, 413, 15, Map.Felucca),
new("Britain", "Sweet Dreams Inn", 1075074, 1496, 1628, 10, Map.Felucca),
new("Moonglow", "The Scholars Inn", 1075075, 4408, 1168, 0, Map.Felucca),
new("Trinsic", "The Traveler's Inn", 1075076, 1845, 2745, 0, Map.Felucca),
new("Magincia", "The Great Horns Tavern", 1075077, 3734, 2222, 20, Map.Felucca),
new("Jhelom", "The Mercenary Inn", 1075078, 1374, 3826, 0, Map.Felucca),
new("Skara Brae", "The Falconer's Inn", 1075079, 618, 2234, 0, Map.Felucca),
new("Vesper", "The Ironwood Inn", 1075080, 2771, 976, 0, Map.Felucca)
];
public static readonly CityInfo[] TrammelStartingCities =
[
new CityInfo("Yew", "The Empath Abbey", 1075072, 633, 858, 0, Map.Trammel),
new CityInfo("Minoc", "The Barnacle", 1075073, 2476, 413, 15, Map.Trammel),
new CityInfo("Moonglow", "The Scholars Inn", 1075075, 4408, 1168, 0, Map.Trammel),
new CityInfo("Trinsic", "The Traveler's Inn", 1075076, 1845, 2745, 0, Map.Trammel),
new CityInfo("Jhelom", "The Mercenary Inn", 1075078, 1374, 3826, 0, Map.Trammel),
new CityInfo("Skara Brae", "The Falconer's Inn", 1075079, 618, 2234, 0, Map.Trammel),
new CityInfo("Vesper", "The Ironwood Inn", 1075080, 2771, 976, 0, Map.Trammel),
new("Yew", "The Empath Abbey", 1075072, 633, 858, 0, Map.Trammel),
new("Minoc", "The Barnacle", 1075073, 2476, 413, 15, Map.Trammel),
new("Moonglow", "The Scholars Inn", 1075075, 4408, 1168, 0, Map.Trammel),
new("Trinsic", "The Traveler's Inn", 1075076, 1845, 2745, 0, Map.Trammel),
new("Jhelom", "The Mercenary Inn", 1075078, 1374, 3826, 0, Map.Trammel),
new("Skara Brae", "The Falconer's Inn", 1075079, 618, 2234, 0, Map.Trammel),
new("Vesper", "The Ironwood Inn", 1075080, 2771, 976, 0, Map.Trammel),
];
public static readonly CityInfo[] NewHavenStartingCities =
[
new CityInfo("New Haven", "The Bountiful Harvest Inn", 1150168, 3503, 2574, 14, Map.Trammel),
new CityInfo("Britain", "The Wayfarer's Inn", 1075074, 1602, 1591, 20, Map.Trammel)
new("New Haven", "The Bountiful Harvest Inn", 1150168, 3503, 2574, 14, Map.Trammel),
new("Britain", "The Wayfarer's Inn", 1075074, 1602, 1591, 20, Map.Trammel)
// Magincia removed because it burned down.
];
public static readonly CityInfo[] StartingCitiesSA =
[
new CityInfo("Royal City", "Royal City Inn", 1150169, 738, 3486, -19, Map.TerMur)
new("Royal City", "Royal City Inn", 1150169, 738, 3486, -19, Map.TerMur)
];
private static CityInfo[] _availableStartingCities;
@ -155,11 +157,8 @@ public static class CharacterCreation
return [];
}
public static void Initialize()
{
// Register our event handler
EventSink.CharacterCreated += EventSink_CharacterCreated;
}
[GeneratedEvent(nameof(CharacterCreatedEvent))]
public static partial void CharacterCreatedEvent(CharacterCreatedEventArgs e);
private static void AddBackpack(this Mobile m)
{
@ -197,7 +196,8 @@ public static class CharacterCreation
return null;
}
private static void EventSink_CharacterCreated(CharacterCreatedEventArgs args)
[OnEvent(nameof(CharacterCreatedEvent))]
private static void OnCharacterCreated(CharacterCreatedEventArgs args)
{
if (!ProfessionInfo.GetProfession(args.Profession, out var profession))
{
@ -396,24 +396,13 @@ public static class CharacterCreation
return args.City;
}
private static void SetStats(Mobile m, NetState state, StatNameValue[] stats)
private static void SetStats(Mobile m, NetState state, byte[] stats)
{
var maxStats = state.NewCharacterCreation ? 90 : 80;
var str = 0;
var dex = 0;
var intel = 0;
for (var i = 0; i < stats.Length; i++)
{
var (statType, value) = stats[i];
switch (statType)
{
case StatType.Str: str = value; break;
case StatType.Dex: dex = value; break;
case StatType.Int: intel = value; break;
}
}
var str = stats[0];
var dex = stats[1];
var intel = stats[2];
if (str is < 10 or > 60 || dex is < 10 or > 60 || intel is < 10 or > 60 || str + dex + intel != maxStats)
{
@ -437,7 +426,7 @@ public static class CharacterCreation
m.Name = name;
}
private static bool ValidateSkills(int raceFlag, SkillNameValue[] skills)
private static bool ValidateSkills(int raceFlag, (SkillName, byte)[] skills)
{
var total = 0;
@ -445,7 +434,7 @@ public static class CharacterCreation
{
var (name, value) = skills[i];
if (value is < 0 or > 50 || !_allowedStartingSkills.Contains(name))
if (value > 50 || !_allowedStartingSkills.Contains(name))
{
return false;
}
@ -473,6 +462,7 @@ public static class CharacterCreation
for (var j = i + 1; j < skills.Length; ++j)
{
var (nameCheck, valueCheck) = skills[j];
if (valueCheck > 0 && nameCheck == name)
{
return false;
@ -483,7 +473,7 @@ public static class CharacterCreation
return total is 100 or 120;
}
private static void SetSkills(Mobile m, SkillNameValue[] skills)
private static void SetSkills(Mobile m, (SkillName, byte)[] skills)
{
if (!ValidateSkills(m.Race.RaceFlag, skills))
{

View file

@ -49,8 +49,6 @@ public class ProfessionInfo
static ProfessionInfo()
{
List<ProfessionInfo> profs = [];
var file = Core.FindDataFile("prof.txt", false);
if (!File.Exists(file))
{
@ -58,10 +56,11 @@ public class ProfessionInfo
file = Path.Combine(ExpansionInfo.GetEraFolder(parent), "prof.txt");
}
var maxProf = 0;
if (File.Exists(file))
{
var maxProf = 0;
List<ProfessionInfo> profs = [];
using var s = File.OpenText(file);
while (!s.EndOfStream)
@ -82,7 +81,6 @@ public class ProfessionInfo
var prof = new ProfessionInfo();
var statIndex = 0;
var totalStats = 0;
var skillIndex = 0;
var totalSkill = 0;
@ -161,8 +159,8 @@ public class ProfessionInfo
break;
}
var skillValue = Utility.ToInt32(cols[2]);
prof.Skills[skillIndex++] = new SkillNameValue(skillName, skillValue);
var skillValue = byte.Parse(cols[2]);
prof.Skills[skillIndex++] = (skillName, skillValue);
totalSkill += skillValue;
}
break;
@ -173,39 +171,44 @@ public class ProfessionInfo
break;
}
var statValue = Utility.ToInt32(cols[2]);
prof.Stats[statIndex++] = new StatNameValue(stat, statValue);
var statValue = byte.Parse(cols[2]);
prof.Stats[(int)stat >> 1] = statValue;
totalStats += statValue;
}
break;
}
}
}
_professions = new ProfessionInfo[maxProf + 1];
foreach (var p in profs)
{
_professions[p.ID] = p;
}
profs.Clear();
profs.TrimExcess();
}
else
{
_professions = new ProfessionInfo[1];
}
_professions = new ProfessionInfo[maxProf + 1];
_professions[0] = new ProfessionInfo
{
Name = "Advanced Skills"
};
foreach (var p in profs)
{
_professions[p.ID] = p;
}
profs.Clear();
profs.TrimExcess();
}
private SkillNameValue[] _skills;
private (SkillName, byte)[] _skills;
private ProfessionInfo()
{
Name = string.Empty;
_skills = new SkillNameValue[4];
Stats = new StatNameValue[3];
_skills = new (SkillName, byte)[4];
Stats = new byte[3];
}
public int ID { get; private set; }
@ -214,8 +217,8 @@ public class ProfessionInfo
public int DescID { get; private set; }
public bool TopLevel { get; private set; }
public int GumpID { get; private set; }
public SkillNameValue[] Skills => _skills;
public StatNameValue[] Stats { get; }
public (SkillName, byte)[] Skills => _skills;
public byte[] Stats { get; }
public void FixSkills()
{
@ -223,7 +226,7 @@ public class ProfessionInfo
while (index >= 0)
{
var skill = _skills[index];
if (skill is not { Name: SkillName.Alchemy, Value: 0 })
if (skill is not (SkillName.Alchemy, 0))
{
break;
}

View file

@ -3,6 +3,7 @@ using System.Net;
using System.Net.Http;
using System.Net.NetworkInformation;
using System.Net.Sockets;
using ModernUO.CodeGeneratedEvents;
using Server.Logging;
using Server.Network;
@ -60,11 +61,10 @@ namespace Server.Misc
{
Resolve(Address, out _publicAddress);
}
EventSink.ServerList += EventSink_ServerList;
}
private static void EventSink_ServerList(ServerListEventArgs e)
[OnEvent(nameof(GatewayServer.ServerListEvent))]
public static void OnServerListEvent(GatewayServer.ServerListEventArgs e)
{
try
{

View file

@ -0,0 +1,29 @@
using ModernUO.CodeGeneratedEvents;
namespace Server.Network;
public static partial class GameServer
{
public class GameLoginEventArgs
{
public GameLoginEventArgs(NetState state, string un, string pw)
{
State = state;
Username = un;
Password = pw;
}
public NetState State { get; }
public string Username { get; }
public string Password { get; }
public bool Accepted { get; set; }
public CityInfo[] CityInfo { get; set; }
}
[GeneratedEvent(nameof(GameServerLoginEvent))]
public static partial void GameServerLoginEvent(GameLoginEventArgs e);
}

View file

@ -0,0 +1,36 @@
using System;
using System.Collections.Generic;
using System.Net;
using ModernUO.CodeGeneratedEvents;
using Server.Accounting;
namespace Server.Network;
public static partial class GatewayServer
{
public class ServerListEventArgs
{
public ServerListEventArgs(NetState state, IAccount account)
{
State = state;
Account = account;
Servers = [];
}
public NetState State { get; }
public IAccount Account { get; }
public bool Rejected { get; set; }
public List<ServerInfo> Servers { get; }
public void AddServer(string name, IPEndPoint address) => AddServer(name, 0, TimeZoneInfo.Local, address);
public void AddServer(string name, int fullPercent, TimeZoneInfo tz, IPEndPoint address) =>
Servers.Add(new ServerInfo(name, fullPercent, tz, address));
}
[GeneratedEvent(nameof(ServerListEvent))]
public static partial void ServerListEvent(ServerListEventArgs e);
}

View file

@ -20,6 +20,7 @@ using System.IO;
using Server.Accounting;
using Server.Assistants;
using Server.Commands;
using Server.Engines.CharacterCreation;
using Server.Engines.ConPVP;
using Server.Engines.Doom;
using Server.Engines.PartySystem;
@ -33,7 +34,6 @@ using Server.Mobiles;
using Server.Regions;
using Server.Spells.Ninjitsu;
using Server.Spells.Spellweaving;
using CV = Server.ClientVersion;
namespace Server.Network;
@ -88,20 +88,17 @@ public static class IncomingAccountPackets
var genderRace = reader.ReadByte();
var stats = new StatNameValue[]
{
new(StatType.Str, reader.ReadByte()),
new(StatType.Dex, reader.ReadByte()),
new(StatType.Int, reader.ReadByte())
};
// Strength, Dex, Intelligence
byte[] stats = [reader.ReadByte(), reader.ReadByte(), reader.ReadByte()];
var skills = new (SkillName, byte)[state.NewCharacterCreation ? 4 : 3];
skills[0] = ((SkillName)reader.ReadByte(), reader.ReadByte());
skills[1] = ((SkillName)reader.ReadByte(), reader.ReadByte());
skills[2] = ((SkillName)reader.ReadByte(), reader.ReadByte());
var skills = new SkillNameValue[state.NewCharacterCreation ? 4 : 3];
skills[0] = new SkillNameValue((SkillName)reader.ReadByte(), reader.ReadByte());
skills[1] = new SkillNameValue((SkillName)reader.ReadByte(), reader.ReadByte());
skills[2] = new SkillNameValue((SkillName)reader.ReadByte(), reader.ReadByte());
if (state.NewCharacterCreation)
{
skills[3] = new SkillNameValue((SkillName)reader.ReadByte(), reader.ReadByte());
skills[3] = ((SkillName)reader.ReadByte(), reader.ReadByte());
}
int hue = reader.ReadUInt16();
@ -183,7 +180,7 @@ public static class IncomingAccountPackets
state.BlockAllPackets = true;
EventSink.InvokeCharacterCreated(args);
CharacterCreation.CharacterCreatedEvent(args);
var m = args.Mobile;
@ -208,13 +205,9 @@ public static class IncomingAccountPackets
AccountHandler.DeleteRequest(state, index);
}
public static void AccountID(NetState state, SpanReader reader)
{
}
public static void ClientVersion(NetState state, SpanReader reader)
{
var version = state.Version = new CV(reader.ReadAscii());
var version = state.Version = new ClientVersion(reader.ReadAscii());
ClientVerification.ClientVersionReceived(state, version);
}
@ -224,7 +217,7 @@ public static class IncomingAccountPackets
reader.ReadUInt16();
int type = reader.ReadUInt16();
var version = state.Version = new CV(reader.ReadAscii());
var version = state.Version = new ClientVersion(reader.ReadAscii());
ClientVerification.ClientVersionReceived(state, version);
}
@ -420,9 +413,9 @@ public static class IncomingAccountPackets
var username = reader.ReadAscii(30);
var password = reader.ReadAscii(30);
var e = new GameLoginEventArgs(state, username, password);
var e = new GameServer.GameLoginEventArgs(state, username, password);
EventSink.InvokeGameLogin(e);
GameServer.GameServerLoginEvent(e);
if (e.Accepted)
{
@ -501,9 +494,9 @@ public static class IncomingAccountPackets
if (accountLoginEventArgs.Accepted)
{
var serverListEventArgs = new ServerListEventArgs(state, state.Account);
var serverListEventArgs = new GatewayServer.ServerListEventArgs(state, state.Account);
EventSink.InvokeServerList(serverListEventArgs);
GatewayServer.ServerListEvent(serverListEventArgs);
if (serverListEventArgs.Rejected)
{

View file

@ -1,6 +1,6 @@
/*************************************************************************
* ModernUO *
* Copyright 2019-2023 - ModernUO Development Team *
* Copyright 2019-2024 - ModernUO Development Team *
* Email: hi@modernuo.com *
* File: IncomingExtendedCommandPackets.cs *
* *
@ -15,12 +15,13 @@
using System.Buffers;
using System.Runtime.CompilerServices;
using ModernUO.CodeGeneratedEvents;
using Server.Items;
using Server.Mobiles;
namespace Server.Network;
public static class IncomingExtendedCommandPackets
public static partial class IncomingExtendedCommandPackets
{
private static readonly PacketHandler[] _extendedHandlers = new PacketHandler[0x100];
@ -432,13 +433,16 @@ public static class IncomingExtendedCommandPackets
PlayerMobile.TargetedSkillUse(state.Mobile, World.FindEntity((Serial)reader.ReadUInt32()), skillId);
}
[GeneratedEvent("TargetByResourceMacro")]
public static partial void InvokeTargetByResourceMacro(Mobile m, Item item, short resourceType);
public static void TargetByResourceMacro(NetState state, SpanReader reader)
{
var serial = (Serial)reader.ReadUInt32();
if (serial.IsItem)
{
EventSink.InvokeTargetByResourceMacro(state.Mobile, World.FindItem(serial), reader.ReadInt16());
InvokeTargetByResourceMacro(state.Mobile, World.FindItem(serial), reader.ReadInt16());
}
}
}