fix: complete retail parity stability pass
This commit is contained in:
parent
d3df4cb20a
commit
f7aa8e0eb7
131 changed files with 7765 additions and 1190 deletions
|
|
@ -4,6 +4,7 @@ using AcDream.Headless.Diagnostics;
|
|||
using AcDream.Headless.Plugins;
|
||||
using AcDream.Headless.Policies;
|
||||
using AcDream.Content.CharGen;
|
||||
using AcDream.Core.Chat;
|
||||
using AcDream.Core.Net.Messages;
|
||||
using AcDream.Core.Physics;
|
||||
using AcDream.Runtime;
|
||||
|
|
@ -957,6 +958,16 @@ internal sealed class HeadlessSessionHost : IDisposable
|
|||
case ClientCommandId.QueryBirth:
|
||||
session.SendQueryBirth();
|
||||
return;
|
||||
case ClientCommandId.TogglePersistentDaylight:
|
||||
{
|
||||
bool enabled = !runtime.CharacterOwner.Options.GetOptionBit(
|
||||
CharacterOptionId.PersistentAtDay);
|
||||
_ = runtime.CharacterOwner.Options.TrySetOption(
|
||||
(uint)CharacterOptionId.PersistentAtDay,
|
||||
enabled,
|
||||
session.SendSetSingleCharacterOption);
|
||||
return;
|
||||
}
|
||||
case ClientCommandId.Emote
|
||||
when !string.IsNullOrWhiteSpace(command.Arguments):
|
||||
session.SendEmote(command.Arguments.Trim());
|
||||
|
|
@ -1004,7 +1015,27 @@ internal sealed class HeadlessSessionHost : IDisposable
|
|||
session.SendRecallAllegianceHometown();
|
||||
return;
|
||||
case ClientCommandId.AllegianceInfo:
|
||||
session.SendAllegianceInfoRequest(command.Arguments.Trim());
|
||||
case ClientCommandId.AllegianceBoot:
|
||||
case ClientCommandId.AllegianceBan:
|
||||
case ClientCommandId.AllegianceChat:
|
||||
case ClientCommandId.AllegianceBroadcast:
|
||||
case ClientCommandId.AllegianceOfficer:
|
||||
case ClientCommandId.AllegianceOfficerTitle:
|
||||
case ClientCommandId.AllegianceName:
|
||||
case ClientCommandId.AllegianceLock:
|
||||
case ClientCommandId.AllegianceHouse:
|
||||
case ClientCommandId.AllegianceMotd:
|
||||
case ClientCommandId.AllegianceUnrecognizedSubcommand:
|
||||
case ClientCommandId.HouseOpenStatus:
|
||||
case ClientCommandId.HouseStorage:
|
||||
case ClientCommandId.HouseBoot:
|
||||
case ClientCommandId.HouseBootAll:
|
||||
case ClientCommandId.HouseGuests:
|
||||
case ClientCommandId.HouseHooks:
|
||||
case ClientCommandId.HouseUnrecognizedSubcommand:
|
||||
_ = CreateAdministrationDispatcher(session, runtime).TryExecute(
|
||||
command.Command,
|
||||
command.Arguments);
|
||||
return;
|
||||
case ClientCommandId.Permit:
|
||||
ExecutePermit(session, command.Arguments);
|
||||
|
|
@ -1077,6 +1108,61 @@ internal sealed class HeadlessSessionHost : IDisposable
|
|||
}
|
||||
}
|
||||
|
||||
private static RetailAdministrationCommandDispatcher
|
||||
CreateAdministrationDispatcher(
|
||||
AcDream.Core.Net.WorldSession session,
|
||||
GameRuntime runtime) => new(
|
||||
new RetailAdministrationCommandDispatcher.FeedbackBindings(
|
||||
ShowSystemMessage: text => runtime.CommunicationOwner.AddText(
|
||||
text, RetailLogTextType.Default),
|
||||
ShowClientLocalMessage: text => runtime.CommunicationOwner.AddText(
|
||||
text, RetailLogTextType.ClientLocal),
|
||||
SetSingleCharacterOption: (optionId, enabled) =>
|
||||
_ = runtime.CharacterOwner.Options.TrySetOption(
|
||||
optionId,
|
||||
enabled,
|
||||
session.SendSetSingleCharacterOption),
|
||||
RequestAllegianceInfo: session.SendAllegianceInfoRequest),
|
||||
new RetailAdministrationCommandDispatcher.ActionBindings(
|
||||
BreakAllegianceBoot: session.SendBreakAllegianceBoot,
|
||||
AllegianceChatBoot: session.SendAllegianceChatBoot,
|
||||
AllegianceChatGag: session.SendAllegianceChatGag,
|
||||
AllegianceBroadcast: text => session.SendChannel(0x02000000u, text),
|
||||
ListAllegianceBans: session.SendListAllegianceBans,
|
||||
AddAllegianceBan: session.SendAddAllegianceBan,
|
||||
RemoveAllegianceBan: session.SendRemoveAllegianceBan,
|
||||
ListAllegianceOfficers: session.SendListAllegianceOfficers,
|
||||
ClearAllegianceOfficers: session.SendClearAllegianceOfficers,
|
||||
SetAllegianceOfficer: session.SendSetAllegianceOfficer,
|
||||
RemoveAllegianceOfficer: session.SendRemoveAllegianceOfficer,
|
||||
ListAllegianceOfficerTitles: session.SendListAllegianceOfficerTitles,
|
||||
ClearAllegianceOfficerTitles: session.SendClearAllegianceOfficerTitles,
|
||||
SetAllegianceOfficerTitle: session.SendSetAllegianceOfficerTitle,
|
||||
QueryAllegianceName: session.SendQueryAllegianceName,
|
||||
SetAllegianceName: session.SendSetAllegianceName,
|
||||
ClearAllegianceName: session.SendClearAllegianceName,
|
||||
AllegianceLockAction: session.SendAllegianceLockAction,
|
||||
SetAllegianceApprovedVassal: session.SendSetAllegianceApprovedVassal,
|
||||
AllegianceHouseAction: session.SendAllegianceHouseAction,
|
||||
QueryMotd: session.SendQueryMotd,
|
||||
SetMotd: session.SendSetMotd,
|
||||
ClearMotd: session.SendClearMotd,
|
||||
SetOpenHouseStatus: session.SendSetOpenHouseStatus,
|
||||
AddPermanentGuest: session.SendAddPermanentGuest,
|
||||
RemovePermanentGuest: session.SendRemovePermanentGuest,
|
||||
RemoveAllPermanentGuests: session.SendRemoveAllPermanentGuests,
|
||||
ChangeStoragePermission: session.SendChangeStoragePermission,
|
||||
AddAllStoragePermission: session.SendAddAllStoragePermission,
|
||||
RemoveAllStoragePermission: session.SendRemoveAllStoragePermission,
|
||||
RequestFullGuestList: session.SendRequestFullGuestList,
|
||||
BootSpecificHouseGuest: session.SendBootSpecificHouseGuest,
|
||||
BootEveryone: session.SendBootEveryone,
|
||||
SetHooksVisibility: session.SendSetHooksVisibility,
|
||||
ModifyAllegianceGuestPermission:
|
||||
session.SendModifyAllegianceGuestPermission,
|
||||
ModifyAllegianceStoragePermission:
|
||||
session.SendModifyAllegianceStoragePermission));
|
||||
|
||||
private ILiveSessionEventRouting CreateEventRoute(
|
||||
AcDream.Core.Net.WorldSession session)
|
||||
{
|
||||
|
|
@ -1259,7 +1345,9 @@ internal sealed class HeadlessSessionHost : IDisposable
|
|||
(text, type) => Runtime.CommunicationOwner.AddText(text, type),
|
||||
Fellowship: Runtime.FellowshipOwner,
|
||||
Allegiance: Runtime.AllegianceOwner,
|
||||
Contracts: Runtime.ContractsOwner));
|
||||
House: Runtime.HouseOwner,
|
||||
Contracts: Runtime.ContractsOwner,
|
||||
PlayerGuid: () => Runtime.PlayerIdentity.ServerGuid));
|
||||
var eventRoute = new HeadlessSessionEventRoute(
|
||||
route,
|
||||
Runtime,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue