Initial commit: Ananta CBT 4229938 private server with all fixes
This commit is contained in:
commit
c84135c357
286 files changed
+2214315
No files matched your search
@@ -0,0 +1,10 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\Ananta.SDK\Ananta.SDK.csproj" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -0,0 +1,5 @@
|
||||
using System.Runtime.CompilerServices;
|
||||
[assembly: InternalsVisibleTo("Ananta.Core")]
|
||||
[assembly: InternalsVisibleTo("Ananta.Handlers")]
|
||||
[assembly: InternalsVisibleTo("Ananta.Gameplay")]
|
||||
[assembly: InternalsVisibleTo("Ananta.App")]
|
||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,39 @@
|
||||
using Ananta.SDK.Serialization;
|
||||
|
||||
namespace Ananta.Server.RpcTypes.Client4229938.Methods.Game;
|
||||
|
||||
[UxContract]
|
||||
internal sealed class BaseActivityInfo
|
||||
{
|
||||
public uint CfgId;
|
||||
public uint StartTime;
|
||||
public uint EndTime;
|
||||
}
|
||||
|
||||
[UxContract]
|
||||
internal sealed class ActivityData
|
||||
{
|
||||
public uint CfgId;
|
||||
public bool ShowRedPoint;
|
||||
public bool IsOutOfDate;
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal struct AwardActivityItem
|
||||
{
|
||||
public BaseActivityInfo BaseActivityInfo;
|
||||
public ActivityData ActivityData;
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class SyncAllActivities
|
||||
{
|
||||
[UxCollection(Count = UxCountEncoding.Int7, ItemObjectEncoding = UxObjectEncoding.Struct)]
|
||||
public List<AwardActivityItem> activities = [];
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskActivityCancelRedPointArgs
|
||||
{
|
||||
public uint id;
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
using Ananta.SDK.Serialization;
|
||||
|
||||
namespace Ananta.Server.RpcTypes.Client4229938.Methods.Game;
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskSwitchFightStyle
|
||||
{
|
||||
public uint spiritId;
|
||||
public uint fightStyleTypeId;
|
||||
public uint fightStyleId;
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskSetWeaponFightStyle
|
||||
{
|
||||
public ulong weaponInstanceId;
|
||||
public uint fightStyleId;
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class SyncWeaponFightStyleChange
|
||||
{
|
||||
public ulong weaponInstanceId;
|
||||
public uint fightStyleId;
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskLoadWeaponToSlot
|
||||
{
|
||||
public uint spiritId;
|
||||
public ulong weaponId;
|
||||
public int slotIndex;
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskDepositSpiritWeapon
|
||||
{
|
||||
public uint spiritId;
|
||||
public int slotIndex;
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskExchangeWeaponSlot
|
||||
{
|
||||
public uint fromSpirit;
|
||||
public int fromIndex;
|
||||
public uint toSpirit;
|
||||
public int toIndex;
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
using Ananta.SDK.Serialization;
|
||||
|
||||
namespace Ananta.Server.RpcTypes.Client4229938.Methods.Game;
|
||||
|
||||
[UxContract]
|
||||
internal sealed class SpriteToken4229938
|
||||
{
|
||||
public string Token = string.Empty;
|
||||
public ulong ExpireTimeStamp;
|
||||
}
|
||||
@@ -0,0 +1,264 @@
|
||||
using Ananta.SDK.Serialization;
|
||||
using Auto = Ananta.Server.RpcTypes.Client4229938.Auto;
|
||||
using SceneMethods = Ananta.Server.RpcTypes.Client4229938.Methods.GameScene;
|
||||
|
||||
namespace Ananta.Server.RpcTypes.Client4229938.Methods.Game;
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskSetSpiritFashionsWithSource
|
||||
{
|
||||
public uint spiritOrInstanceId;
|
||||
public short source;
|
||||
public SpiritWearFashionsInfo spiritWearFashionsInfo = new();
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskSetSpiritFashions
|
||||
{
|
||||
public uint spiritId;
|
||||
public SpiritWearFashionsInfo spiritWearFashionsInfo = new();
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class SyncSetSpiritFashions
|
||||
{
|
||||
public uint spiritId;
|
||||
public short source;
|
||||
public SpiritWearFashionsInfo spiritWearFashionsInfo = new();
|
||||
}
|
||||
|
||||
[UxContract]
|
||||
internal sealed class SpiritWearFashionsInfo
|
||||
{
|
||||
public uint FunctionSuitId;
|
||||
public WearSourceInfo WearSourceInfo;
|
||||
public bool IsTryWear;
|
||||
|
||||
[UxCollection(Count = UxCountEncoding.Int32)]
|
||||
public List<WearFashionInfo> WearFashionInfoList = [];
|
||||
|
||||
[UxCollection(Count = UxCountEncoding.Int32)]
|
||||
public List<WearFashionEditInfo>? WearFashionEditInfoList = [];
|
||||
|
||||
public byte HiddenParts;
|
||||
public byte EditedHiddenParts;
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal struct WearSourceInfo
|
||||
{
|
||||
public short Source;
|
||||
public uint SourceId;
|
||||
}
|
||||
|
||||
[UxContract]
|
||||
internal sealed class WearFashionInfo
|
||||
{
|
||||
public uint FashionId;
|
||||
}
|
||||
|
||||
[UxContract]
|
||||
internal sealed class WearFashionEditInfo
|
||||
{
|
||||
public uint FashionId;
|
||||
public float Scale;
|
||||
public SceneMethods.UxVector3 Rotation;
|
||||
public SceneMethods.UxVector3 Offset;
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskOpenOrCloseFashionPanel
|
||||
{
|
||||
public bool isOpen;
|
||||
public int reason;
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskModifySpiritWearFashionsOnlyWearWithSource
|
||||
{
|
||||
public uint spiritOrInstanceId;
|
||||
public short source;
|
||||
[UxCollection(Count = UxCountEncoding.Int32)]
|
||||
public List<uint> unwearFashionIdList = [];
|
||||
[UxCollection(Count = UxCountEncoding.Int32)]
|
||||
public List<WearFashionInfo> wearFashionInfoList = [];
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class ModifySpiritWearFashionsOnlyWearResponse
|
||||
{
|
||||
[UxCollection(Count = UxCountEncoding.Int32)]
|
||||
public List<uint> unwearFashionIdList = [];
|
||||
[UxCollection(Count = UxCountEncoding.Int32)]
|
||||
public List<WearFashionInfo> wearFashionInfoList = [];
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskModifySpiritWearFashionsOnlyWear
|
||||
{
|
||||
public uint spiritId;
|
||||
[UxCollection(Count = UxCountEncoding.Int32)]
|
||||
public List<uint> unwearFashionIdList = [];
|
||||
[UxCollection(Count = UxCountEncoding.Int32)]
|
||||
public List<WearFashionInfo> wearFashionInfoList = [];
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskModifySpiritWearFashionsWithSource
|
||||
{
|
||||
public uint spiritOrInstanceId;
|
||||
public short source;
|
||||
[UxCollection(Count = UxCountEncoding.Int32)]
|
||||
public List<uint> unwearFashionIdList = [];
|
||||
[UxCollection(Count = UxCountEncoding.Int32)]
|
||||
public List<WearFashionInfo> wearFashionInfoList = [];
|
||||
[UxCollection(Count = UxCountEncoding.Int32)]
|
||||
public List<uint> uneditWearFashionIdList = [];
|
||||
[UxCollection(Count = UxCountEncoding.Int32)]
|
||||
public List<WearFashionEditInfo> editWearFashionEditInfoList = [];
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class ModifySpiritWearFashionResult
|
||||
{
|
||||
[UxCollection(Count = UxCountEncoding.Int32)]
|
||||
public List<uint> R0 = [];
|
||||
[UxCollection(Count = UxCountEncoding.Int32)]
|
||||
public List<WearFashionInfo> R1 = [];
|
||||
[UxCollection(Count = UxCountEncoding.Int32)]
|
||||
public List<uint> R2 = [];
|
||||
[UxCollection(Count = UxCountEncoding.Int32)]
|
||||
public List<WearFashionEditInfo> R3 = [];
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskModifySpiritWearFashionEditInfosWithSource
|
||||
{
|
||||
public uint spiritOrInstanceId;
|
||||
public short source;
|
||||
[UxCollection(Count = UxCountEncoding.Int32)]
|
||||
public List<uint> uneditWearFashionIdList = [];
|
||||
[UxCollection(Count = UxCountEncoding.Int32)]
|
||||
public List<WearFashionEditInfo> editWearFashionEditInfoList = [];
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class ModifySpiritWearFashionEditInfosResponse
|
||||
{
|
||||
[UxCollection(Count = UxCountEncoding.Int32)]
|
||||
public List<uint> uneditWearFashionIdList = [];
|
||||
[UxCollection(Count = UxCountEncoding.Int32)]
|
||||
public List<WearFashionEditInfo> editWearFashionEditInfoList = [];
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskModifySpiritWearFashionEditInfos
|
||||
{
|
||||
public uint spiritId;
|
||||
[UxCollection(Count = UxCountEncoding.Int32)]
|
||||
public List<uint> uneditWearFashionIdList = [];
|
||||
[UxCollection(Count = UxCountEncoding.Int32)]
|
||||
public List<WearFashionEditInfo> editWearFashionEditInfoList = [];
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskSetSpiritWearFashionHiddenPartsWithSource
|
||||
{
|
||||
public uint spiritOrInstanceId;
|
||||
public short source;
|
||||
public byte hiddenParts;
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskSetSpiritWearFashionHiddenParts
|
||||
{
|
||||
public uint spiritId;
|
||||
public byte hiddenParts;
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskUnlockFashionColoringSlot
|
||||
{
|
||||
public uint fashionId;
|
||||
public byte unlockSlotCount;
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskUnlockFashionSuitSlot
|
||||
{
|
||||
public uint spiritId;
|
||||
public byte unlockSlotCount;
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskFavoriteFashions
|
||||
{
|
||||
[UxCollection(Count = UxCountEncoding.Int32)]
|
||||
public List<uint> unfavoriteFashionIdList = [];
|
||||
[UxCollection(Count = UxCountEncoding.Int32)]
|
||||
public List<uint> favoriteFashionIdList = [];
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskFavoriteFashionSuits
|
||||
{
|
||||
[UxCollection(Count = UxCountEncoding.Int32)]
|
||||
public List<uint> unfavoriteFashionSuitIdList = [];
|
||||
[UxCollection(Count = UxCountEncoding.Int32)]
|
||||
public List<uint> favoriteFashionSuitIdList = [];
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskReadFashions
|
||||
{
|
||||
[UxCollection(Count = UxCountEncoding.Int32)]
|
||||
public List<uint> fashionIdList = [];
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskReadFashionSuits
|
||||
{
|
||||
[UxCollection(Count = UxCountEncoding.Int32)]
|
||||
public List<uint> fashionSuitIdList = [];
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskSetSpiritFashionVariantPreference
|
||||
{
|
||||
public uint spiritId;
|
||||
public uint mainFashionId;
|
||||
public uint variantFashionId;
|
||||
}
|
||||
|
||||
/// <summary>Server -> client SyncPlayerAllSpirits: top-level List7Bit<SpiritInfo>.</summary>
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class SyncPlayerAllSpirits
|
||||
{
|
||||
[UxCollection(Count = UxCountEncoding.Int7, ItemObjectEncoding = UxObjectEncoding.Complex)]
|
||||
public List<Auto.SpiritInfo> spirits = [];
|
||||
}
|
||||
|
||||
[UxContract]
|
||||
internal sealed class SpiritViewData
|
||||
{
|
||||
public Auto.SpiritInfo SpiritInfo = new();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Incremental roster hydration. The build's handler ignores reason and adds/replaces one view entry,
|
||||
/// avoiding a single oversized SyncPlayerAllSpirits payload with every character loadout embedded.
|
||||
/// </summary>
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class SyncPlayerAddNewSpirit
|
||||
{
|
||||
public SpiritViewData spirit = new();
|
||||
public int reason;
|
||||
}
|
||||
|
||||
/// <summary>Return body of AskAllSpiritPanelData: top-level List7Bit<SpiritPanelData>.</summary>
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskAllSpiritPanelDataResult
|
||||
{
|
||||
[UxCollection(Count = UxCountEncoding.Int7, ItemObjectEncoding = UxObjectEncoding.Complex)]
|
||||
public List<Auto.SpiritPanelData> spirits = [];
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
using Ananta.SDK.Serialization;
|
||||
using Ananta.Server.RpcTypes.Client4229938.Auto;
|
||||
|
||||
namespace Ananta.Server.RpcTypes.Client4229938.Methods.Game;
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskDrawGachaArgs
|
||||
{
|
||||
public uint gachaPoolId;
|
||||
public uint drawCount;
|
||||
public bool isAutoExchange;
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal struct GachaDrawDetail
|
||||
{
|
||||
public uint PoolContentId;
|
||||
public bool IsGrandPrize;
|
||||
public bool IsConverted;
|
||||
public bool IsNew;
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class SyncGachaDrawInfo
|
||||
{
|
||||
[UxCollection(Count = UxCountEncoding.Int7, ItemObjectEncoding = UxObjectEncoding.Struct)]
|
||||
public List<GachaDrawDetail> drawDetails = [];
|
||||
public bool isGrandPrizeWithAllFillers;
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskClaimGachaMilestoneArgs
|
||||
{
|
||||
public uint groupId;
|
||||
public uint milestoneCount;
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskGachaDrawRecordsArgs
|
||||
{
|
||||
public uint poolId;
|
||||
public uint pageIndex;
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
using Ananta.SDK.Serialization;
|
||||
using Auto = Ananta.Server.RpcTypes.Client4229938.Auto;
|
||||
|
||||
namespace Ananta.Server.RpcTypes.Client4229938.Methods.Game;
|
||||
|
||||
/// <summary>Exact build-4229938 backpack delta used for separate firearm ammunition.</summary>
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class SyncBackpackItemChanged4229938
|
||||
{
|
||||
[UxCollection(Count = UxCountEncoding.Int7, ItemObjectEncoding = UxObjectEncoding.Complex)]
|
||||
public List<Auto.PlayerPackItem> addItemList = [];
|
||||
|
||||
[UxCollection(Count = UxCountEncoding.Int7, ItemObjectEncoding = UxObjectEncoding.Complex)]
|
||||
public List<Auto.PlayerPackItem> updateItemList = [];
|
||||
|
||||
[UxCollection(Count = UxCountEncoding.Int7, ItemObjectEncoding = UxObjectEncoding.Complex)]
|
||||
public List<Auto.PlayerPackItem> deleteItemList = [];
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
using System.Collections.Generic;
|
||||
using Ananta.SDK.Serialization;
|
||||
|
||||
namespace Ananta.Server.RpcTypes.Client4229938.Methods.Game;
|
||||
|
||||
/// <summary>
|
||||
/// Metro/Train runtime data structures for CBT 4229938.
|
||||
/// Matching ReadMetroClientInfo and ReadMetroCarriageGadgetInfos from GameAssembly.
|
||||
/// </summary>
|
||||
[UxContract]
|
||||
public sealed class MetroClientInfo
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public uint LineId { get; set; }
|
||||
public float ElapsedTime { get; set; }
|
||||
public bool IsFinalTrain { get; set; }
|
||||
}
|
||||
|
||||
[UxContract]
|
||||
public sealed class MetroCarriageGadgetInfos
|
||||
{
|
||||
public List<ulong> InnerGadgetIds { get; set; } = [];
|
||||
public List<ulong> OuterGadgetIds { get; set; } = [];
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
using Ananta.SDK.Serialization;
|
||||
|
||||
namespace Ananta.Server.RpcTypes.Client4229938.Methods.Game;
|
||||
|
||||
/// <summary>Client clock sample sent by both GetServerTime and GetServerTimeGame.</summary>
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class GetServerTime
|
||||
{
|
||||
public double clientUnixTime;
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class ServerTime
|
||||
{
|
||||
public double clientUnixTime;
|
||||
public double serverUnixTime;
|
||||
}
|
||||
+126
@@ -0,0 +1,126 @@
|
||||
using Ananta.SDK.Serialization;
|
||||
|
||||
namespace Ananta.Server.RpcTypes.Client4229938.Methods.Game;
|
||||
|
||||
/// <summary>
|
||||
/// Time/weather wire contracts for client 4229938.
|
||||
/// S2C shapes from lua (SyncPlayerWeather reader) and the proto dump
|
||||
/// (SyncPlayerCurrentTime request + RaidTimeAndWeatherChangeReason enum, Gm=0);
|
||||
/// C2S arg shapes from ClientToGameDelegate.lua serializers.
|
||||
/// </summary>
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class SyncPlayerCurrentTime4229938
|
||||
{
|
||||
public uint realTime;
|
||||
public uint raidDaySeconds;
|
||||
public bool fix;
|
||||
public bool isPause;
|
||||
public uint transitionSecond;
|
||||
public int reason;
|
||||
public int nodeId;
|
||||
}
|
||||
|
||||
/// <summary>Server notify: SyncPlayerWeather (68712141). lua reader: 3× u32, no marker.</summary>
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class SyncPlayerWeather4229938
|
||||
{
|
||||
public uint weatherTypeId;
|
||||
public uint nextWeatherTypeId;
|
||||
public uint transitionSecond;
|
||||
}
|
||||
|
||||
/// <summary>Client invoke: AskPassingTime (63465040) / GmPassingTime (65392342).</summary>
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class PassingTimeArgs4229938
|
||||
{
|
||||
public uint hour;
|
||||
public uint minute;
|
||||
}
|
||||
|
||||
/// <summary>Client invoke: GmSetTime (65373939).</summary>
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class GmSetTimeArgs4229938
|
||||
{
|
||||
public uint hour;
|
||||
public uint minute;
|
||||
public uint transition;
|
||||
}
|
||||
|
||||
/// <summary>Client invoke: GmFixRaidTime (65145300).</summary>
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class GmFixRaidTimeArgs4229938
|
||||
{
|
||||
public uint hour;
|
||||
public uint minute;
|
||||
public bool clear;
|
||||
}
|
||||
|
||||
/// <summary>Personal time slot (WritePersonalTimeSetting order).</summary>
|
||||
[UxContract]
|
||||
internal sealed class PersonalTimeSetting4229938
|
||||
{
|
||||
public string Label = string.Empty;
|
||||
public uint Hour;
|
||||
public uint Minute;
|
||||
}
|
||||
|
||||
/// <summary>Client invoke: ChangePersonalTimeSetting (63153182).</summary>
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class ChangePersonalTimeSettingArgs4229938
|
||||
{
|
||||
public int index;
|
||||
public PersonalTimeSetting4229938? info;
|
||||
}
|
||||
|
||||
/// <summary>Client invoke: GmSetWeather (65142873).</summary>
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class GmSetWeatherArgs4229938
|
||||
{
|
||||
public uint weatherId;
|
||||
}
|
||||
|
||||
/// <summary>Client invoke: GmSetWeatherParam (65715648).</summary>
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class GmSetWeatherParamArgs4229938
|
||||
{
|
||||
public uint weatherParamId;
|
||||
}
|
||||
|
||||
/// <summary>Server return: AskTimePanelInfo (63323227).</summary>
|
||||
[UxContract]
|
||||
internal sealed class TimePanelInfo4229938
|
||||
{
|
||||
[UxCollection(Count = UxCountEncoding.Int7, ItemObjectEncoding = UxObjectEncoding.Complex)]
|
||||
public List<PersonalTimeSetting4229938> PersonalTimeSettings = new();
|
||||
}
|
||||
|
||||
/// <summary>Client invoke: AddPersonalTimeSetting (63617533).</summary>
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AddPersonalTimeSettingArgs4229938
|
||||
{
|
||||
public PersonalTimeSetting4229938? info;
|
||||
}
|
||||
|
||||
/// <summary>Client invoke: AskSetMobileSkinPart (63575641).</summary>
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskSetMobileSkinPartArgs4229938
|
||||
{
|
||||
public uint wallpaper;
|
||||
public uint decoration;
|
||||
public uint pendant;
|
||||
}
|
||||
|
||||
/// <summary>Client invoke: AskInstallMobileApp (63567675).</summary>
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskInstallMobileAppArgs4229938
|
||||
{
|
||||
public uint appId;
|
||||
}
|
||||
|
||||
/// <summary>Client invoke: AskCancelInteractionActionRedPoint (63584158).</summary>
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskCancelInteractionActionRedPointArgs4229938
|
||||
{
|
||||
public uint actionId;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
using Ananta.SDK.Serialization;
|
||||
|
||||
namespace Ananta.Server.RpcTypes.Client4229938.Methods.GameScene;
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class BuffViewData
|
||||
{
|
||||
public uint InstanceId;
|
||||
public uint Id;
|
||||
public ulong ReleaserId;
|
||||
public double ExpireTime;
|
||||
public uint Tier = 1;
|
||||
public bool Permanent = true;
|
||||
public ulong DestructibleId;
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class SyncUnitBuffList
|
||||
{
|
||||
public ulong entityId;
|
||||
public List<BuffViewData> buffs = [];
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class SyncUnitAddBuff
|
||||
{
|
||||
public ulong entityId;
|
||||
public BuffViewData buff = new();
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class SyncUnitRemoveBuff
|
||||
{
|
||||
public ulong entityId;
|
||||
public uint buffInstanceId;
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskAddClientBuff
|
||||
{
|
||||
public ulong unitId;
|
||||
public uint buffId;
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskRemoveClientBuff
|
||||
{
|
||||
public ulong unitId;
|
||||
public uint buffId;
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskFeiSuoSuccess
|
||||
{
|
||||
public int feiSuoId;
|
||||
}
|
||||
@@ -0,0 +1,258 @@
|
||||
using Ananta.SDK.Serialization;
|
||||
using Auto = Ananta.Server.RpcTypes.Client4229938.Auto;
|
||||
|
||||
namespace Ananta.Server.RpcTypes.Client4229938.Methods.GameScene;
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class SyncUnitHp { public ulong unitId; public float hp; }
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class SyncAttachBattleModule { public ulong unitId; }
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class SyncFightResource { public ulong unitId; public uint resourceId; public float value; }
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class SyncFightResourceFreeState { public ulong unitId; public uint resourceId; public bool isFree; }
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class SyncSpiritLastUsedWeapon { public uint templateId; public ulong weaponInstanceId; }
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class SyncSpiritUnitUrbanAttrs
|
||||
{
|
||||
public ulong unitId;
|
||||
public List<int> abilities = [];
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class SyncUnitAttrs
|
||||
{
|
||||
public ulong unitId;
|
||||
|
||||
[UxCollection(Count = UxCountEncoding.Int32)]
|
||||
public Dictionary<uint, float> attrs = [];
|
||||
}
|
||||
|
||||
[UxContract]
|
||||
internal sealed class PlayerFightStyleUnlockChangeInfo
|
||||
{
|
||||
public PlayerInfoFightStyle playerInfoFightStyle = new();
|
||||
|
||||
[UxCollection(Count = UxCountEncoding.Int7)]
|
||||
public Dictionary<uint, bool> addOrUpdateUnlockInfo = [];
|
||||
}
|
||||
|
||||
[UxContract]
|
||||
internal sealed class PlayerInfoFightStyle
|
||||
{
|
||||
[UxCollection(Count = UxCountEncoding.Int32)]
|
||||
public Dictionary<uint, bool> fightStyles = [];
|
||||
}
|
||||
|
||||
[UxContract]
|
||||
internal sealed class SpiritFightTypeChangeAction
|
||||
{
|
||||
public uint templateId;
|
||||
public SpiritFightStyleInfo fullInfo = new();
|
||||
|
||||
[UxCollection(Count = UxCountEncoding.Int7)]
|
||||
public Dictionary<uint, uint> addOrUpdateInfo = [];
|
||||
}
|
||||
|
||||
[UxContract]
|
||||
internal sealed class SpiritFightStyleInfo
|
||||
{
|
||||
[UxCollection(Count = UxCountEncoding.Int32)]
|
||||
public Dictionary<uint, uint> fightStyleInfo = [];
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class SyncPlayerAllSkillChargeData
|
||||
{
|
||||
public ulong unitId;
|
||||
|
||||
[UxCollection(Count = UxCountEncoding.Int7)]
|
||||
public Dictionary<uint, ChargeData> charges = [];
|
||||
}
|
||||
|
||||
[UxContract]
|
||||
internal sealed class ChargeData
|
||||
{
|
||||
public uint current;
|
||||
public float readyRatio;
|
||||
public float period;
|
||||
public uint max;
|
||||
public double timestamp;
|
||||
}
|
||||
|
||||
[UxContract]
|
||||
internal sealed class SpiritSwitchWeaponAction
|
||||
{
|
||||
public ulong spiritUid;
|
||||
public ulong weaponInstanceId;
|
||||
public byte reason;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Scene weapon snapshot used by SyncSpiritWeaponDetail. Unlike the persistent WeaponData stored in
|
||||
/// PlayerInfo, WeaponDetail has five scene-source fields in front of the common weapon payload.
|
||||
/// </summary>
|
||||
[UxContract]
|
||||
internal sealed class WeaponDetail
|
||||
{
|
||||
public int SourceAgentSpoonId;
|
||||
public ulong SourceAgentId;
|
||||
public ulong SourceSceneItemId;
|
||||
public bool IsLocked;
|
||||
public ulong SourceSceneItemTaskUId;
|
||||
public uint TemplateId;
|
||||
public int Durability;
|
||||
public ulong InstanceId;
|
||||
public uint EventId;
|
||||
public double ReceivedTimeStamp;
|
||||
public uint OperatorFlags;
|
||||
public string? SpecialLabel;
|
||||
public Auto.WeaponDataFlags WeaponFlags = new();
|
||||
public float SceneItemHp;
|
||||
public int StackCount;
|
||||
public Auto.WeaponBulletDatas BulletDatas = new();
|
||||
[UxCollection(Count = UxCountEncoding.Int32, ItemObjectEncoding = UxObjectEncoding.Complex)]
|
||||
public List<Auto.WeaponDecorationDatas> Decorations = [];
|
||||
public uint FightStyleId;
|
||||
public int MagazineAmmo;
|
||||
public ulong BindPid;
|
||||
public bool IsPlayerLocked;
|
||||
// Exact 4229938 RPCSerializeAuto.lua tail. Omitting these four fields shifts the next
|
||||
// WeaponDetail in SpiritWeaponDetail and eventually makes the client deserialize BulletDatas as null.
|
||||
[UxCollection(Count = UxCountEncoding.Int32, ItemObjectEncoding = UxObjectEncoding.Complex)]
|
||||
public List<Auto.WeaponEnchantSlot> EnchantSlots = [];
|
||||
public uint NonDirectionalEnchantCount;
|
||||
public uint DirectionalEnchantCountSinceLastNonDir;
|
||||
public uint LockedDirectionalEnhancementId;
|
||||
}
|
||||
|
||||
[UxContract]
|
||||
internal sealed class WeaponWheelData
|
||||
{
|
||||
public uint WheelId;
|
||||
public uint EventId;
|
||||
[UxCollection(Count = UxCountEncoding.Int7, ItemObjectEncoding = UxObjectEncoding.Complex)]
|
||||
public List<WeaponDetail?> WeaponSlots = [];
|
||||
public int LockMaxSlotCounts;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Atomic client WeaponManager hydration. The client must receive this before a switch action:
|
||||
/// SyncSpiritSwitchWeaponAction only selects an instance already present in CurrWeaponSlots.
|
||||
/// </summary>
|
||||
[UxContract]
|
||||
internal sealed class SpiritWeaponDetail
|
||||
{
|
||||
public uint SpiritTid;
|
||||
public ulong SpiritUid;
|
||||
public ulong CurrentWeaponUid;
|
||||
[UxCollection(Count = UxCountEncoding.Int7, ItemObjectEncoding = UxObjectEncoding.Complex)]
|
||||
public List<WeaponDetail?> WeaponSlots = [];
|
||||
public WeaponDetail? CurrentTempWeapon;
|
||||
public WeaponWheelData? TempWeaponSlots;
|
||||
[UxCollection(Count = UxCountEncoding.Int7, ValueObjectEncoding = UxObjectEncoding.Complex)]
|
||||
public Dictionary<int, WeaponDetail> VirtualWeaponSlots = [];
|
||||
}
|
||||
|
||||
// Client -> GameScene AskSwitchWeapon(int index), zero-based.
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskSwitchWeapon { public int index; }
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class SyncBreakSkill { public ulong unitId; }
|
||||
|
||||
// Client -> GameScene AskUseSkill / AskClientUseCommonSkill.
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskUseSkill
|
||||
{
|
||||
public SkillUseData data = new();
|
||||
}
|
||||
|
||||
[UxContract]
|
||||
internal sealed class SkillUseData
|
||||
{
|
||||
public ulong Releaser;
|
||||
public UxVector3 Location;
|
||||
public float Facing;
|
||||
public ulong TargetId;
|
||||
public int UnitPartIndex;
|
||||
public ulong TargetDestructibleId;
|
||||
public ulong AttachDestructibleId;
|
||||
public uint SkillId;
|
||||
public int SkillInstanceId;
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class ReportSkillEnd
|
||||
{
|
||||
public ulong unitId;
|
||||
public int skillId;
|
||||
public uint newSkillId;
|
||||
public bool isBreak;
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskMultipleSkillHit2
|
||||
{
|
||||
public SkillHitData skillHitData = new();
|
||||
}
|
||||
|
||||
[UxContract]
|
||||
internal sealed class SkillHitData
|
||||
{
|
||||
public ulong ReleaserId;
|
||||
public int Id;
|
||||
public uint SkillId;
|
||||
public int TriggerIndex;
|
||||
public ulong TriggerInstanceId;
|
||||
public int Stage;
|
||||
public ulong HitTarget;
|
||||
public ulong AttachedDestructibleId;
|
||||
public UxVector3 ClientHitPosition;
|
||||
public UxVector3 ClientHitPosNormalDir;
|
||||
public byte SkillHitType;
|
||||
public int HitMaterial;
|
||||
public UxVector3 HitCenter;
|
||||
public uint StiffId;
|
||||
public float StiffTime;
|
||||
public uint HurtEffectId;
|
||||
public float FirmHurt;
|
||||
public int ShieldDefendIndex;
|
||||
public uint ShieldId;
|
||||
public bool IsBackHit;
|
||||
public bool IsReflected;
|
||||
public float HitDistance;
|
||||
public bool IsBehindBarrier;
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskSkillUseWeaponDurability
|
||||
{
|
||||
public int skillid;
|
||||
public int triggerindex;
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskWeaponEquipBullets
|
||||
{
|
||||
public ulong weaponinstanceid;
|
||||
public uint bulletid;
|
||||
}
|
||||
|
||||
[UxContract]
|
||||
internal sealed class SpiritWeaponDurabilityChangedAction
|
||||
{
|
||||
public uint SpiritTid;
|
||||
public ulong SpiritUid;
|
||||
public ulong WeaponInstanceId;
|
||||
public int Durability;
|
||||
public int MagazineAmmo;
|
||||
public uint CurrentBulletId;
|
||||
public int StackCount;
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
using Ananta.SDK.Serialization;
|
||||
|
||||
namespace Ananta.Server.RpcTypes.Client4229938.Methods.GameScene;
|
||||
|
||||
/// <summary>
|
||||
/// Client -> GameSceneGM GmSpawnVehicle(uint32 templateid, UXVector3 position, float facing,
|
||||
/// uint32 suitid, bool loadownvehicle, string spoonname).
|
||||
/// From ClientToGameSceneGMDelegate.lua (build 4229938). Returns u64 entity id.
|
||||
/// </summary>
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class GmSpawnVehicle
|
||||
{
|
||||
public uint TemplateId;
|
||||
public UxVector3 Position;
|
||||
public float Facing;
|
||||
public uint SuitId;
|
||||
public bool LoadOwnVehicle;
|
||||
public string SpoonName = string.Empty;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Client -> GameSceneGM GmAddEnemyWithPosition(uint32 enemyid, byte camp-enum92,
|
||||
/// UXVector3 position, uint32 navtagtype, bool outsideaoimove). Returns u64 entity id.
|
||||
/// </summary>
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class GmAddEnemyWithPosition
|
||||
{
|
||||
public uint EnemyId;
|
||||
public byte Camp;
|
||||
public UxVector3 Position;
|
||||
public uint NavTagType;
|
||||
public bool OutsideAoiMove;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Client -> GameSceneGM GmAddEnemy(uint32 enemyid, byte camp-enum92, string treename,
|
||||
/// uint32 navtagtype, bool outsideaoimove). Returns u64 entity id.
|
||||
/// </summary>
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class GmAddEnemy
|
||||
{
|
||||
public uint EnemyId;
|
||||
public byte Camp;
|
||||
public string TreeName = string.Empty;
|
||||
public uint NavTagType;
|
||||
public bool OutsideAoiMove;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Client -> GameSceneGM GmAddEnemyByPlayer(uint32 enemyid, byte camp-enum92).
|
||||
/// Returns u64 entity id.
|
||||
/// </summary>
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class GmAddEnemyByPlayer
|
||||
{
|
||||
public uint EnemyId;
|
||||
public byte Camp;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Client -> GameSceneGM GmTeleportXYZ(float x, float y, float z, float facing).
|
||||
/// Returns void.
|
||||
/// </summary>
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class GmTeleportXYZ
|
||||
{
|
||||
public float X;
|
||||
public float Y;
|
||||
public float Z;
|
||||
public float Facing;
|
||||
}
|
||||
@@ -0,0 +1,375 @@
|
||||
using Ananta.SDK.Serialization;
|
||||
|
||||
namespace Ananta.Server.RpcTypes.Client4229938.Methods.GameScene;
|
||||
|
||||
/// <summary>
|
||||
/// Client -> GameScene AskSummonVehicle(uint32 vehicleconfigid, UXVector3 position, float facingdirection).
|
||||
/// From ClientToGameSceneDelegate.lua (build 4229938).
|
||||
/// </summary>
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskSummonVehicle
|
||||
{
|
||||
public uint VehicleConfigId;
|
||||
public UxVector3 Position;
|
||||
public float FacingDirection;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Server -> client SummonVehicleResult: inline struct { ulong VehicleEntityId; ulong TaskToken; }
|
||||
/// (RPCDeserializeAuto reader 674, read via Base.ReadStruct).
|
||||
/// </summary>
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class SummonVehicleResult
|
||||
{
|
||||
public ulong VehicleEntityId;
|
||||
public ulong TaskToken;
|
||||
}
|
||||
|
||||
/// <summary>VehicleClientPart: struct reader 1618 { uint Type; uint ConfigId; }.</summary>
|
||||
[UxContract(Inline = true)]
|
||||
internal struct VehicleClientPart
|
||||
{
|
||||
public uint Type;
|
||||
public uint ConfigId;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// PlayerVehicleClientDetail: complex reader 434
|
||||
/// { uint Id; List7Bit<struct VehicleClientPart> Parts; uint SuitId; bool IsPersistent; }.
|
||||
/// </summary>
|
||||
[UxContract]
|
||||
internal sealed class PlayerVehicleClientDetail
|
||||
{
|
||||
public uint Id;
|
||||
[UxCollection(Count = UxCountEncoding.Int7, ItemObjectEncoding = UxObjectEncoding.Struct)]
|
||||
public List<VehicleClientPart> Parts = [];
|
||||
public uint SuitId;
|
||||
public bool IsPersistent;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Server -> client SyncLogicVehicleEnter: full world-vehicle spawn (reader: complex).
|
||||
/// Field order verified against IL2CPP metadata (UX.Game.LogicVehicleClientInfo,
|
||||
/// 11 fields) and Lua Auto.WriteLogicVehicleClientInfo (RPCSerializeAuto.lua).
|
||||
/// </summary>
|
||||
[UxContract]
|
||||
internal sealed class SyncLogicVehicleEnter
|
||||
{
|
||||
public ulong EntityId;
|
||||
public uint VehicleConfigId;
|
||||
/// <summary>UX.Game.VehicleCreateSourceType as byte (Invalid=0, Task=1, Summon=2, ...).</summary>
|
||||
public byte CreateSourceType;
|
||||
[UxCollection(Count = UxCountEncoding.Int7, ItemObjectEncoding = UxObjectEncoding.Struct)]
|
||||
public List<VehicleClientPart> Parts = [];
|
||||
public uint SuitId;
|
||||
public string LicensePlate = string.Empty;
|
||||
public bool Interactable;
|
||||
public int MoveToken;
|
||||
public UxVector3 Position;
|
||||
public UxVector3 EulerAngles;
|
||||
public string? VehicleSpoonName;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Raid vehicle seat entry (IL2CPP UX.Game.RaidVehicleSeatInfo + V2 wire):
|
||||
/// { u64 EntityId; byte SeatIndex; byte SeatState; bool DestroyRelated }.
|
||||
/// </summary>
|
||||
[UxContract]
|
||||
internal sealed class RaidVehicleSeatInfo
|
||||
{
|
||||
public ulong EntityId;
|
||||
public byte SeatIndex;
|
||||
public byte SeatState;
|
||||
public bool DestroyRelated;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Server -> client SyncSpawnVehicle payload (V2 field order, verified against
|
||||
/// IL2CPP UX.Game.VehicleClientInfo typedef): the notify that materializes the car.
|
||||
/// </summary>
|
||||
[UxContract]
|
||||
internal sealed class VehicleClientInfo
|
||||
{
|
||||
public ulong ControllerPid;
|
||||
public byte CreateSourceType;
|
||||
public ulong EntityId;
|
||||
public uint VehicleConfigId;
|
||||
[UxCollection(Count = UxCountEncoding.Int7, ItemObjectEncoding = UxObjectEncoding.Struct)]
|
||||
public List<VehicleClientPart> Parts = [];
|
||||
public uint SuitId;
|
||||
public UxVector3 Position;
|
||||
public float Facing;
|
||||
public UxVector3 EulerAngles;
|
||||
public float Velocity;
|
||||
public bool IsStatic;
|
||||
public int DeformStatus;
|
||||
[UxCollection(Count = UxCountEncoding.Int7, ItemObjectEncoding = UxObjectEncoding.Complex)]
|
||||
public List<RaidVehicleSeatInfo> SeatInfos = [];
|
||||
public int SpoonId;
|
||||
public bool IsDynamicGo;
|
||||
public ulong VehicleEnemyId;
|
||||
public bool DisableNavigation;
|
||||
public bool Interactable;
|
||||
public int MoveToken;
|
||||
public string LicensePlate = string.Empty;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Server -> client SyncDestroyVehicle(entityId, destroyType, distance, dynamicGoId).
|
||||
/// Signature from IL2CPP metadata (UX.Game.IGameSceneToClient).
|
||||
/// </summary>
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class DestroyVehicle
|
||||
{
|
||||
public ulong VehicleEntityId;
|
||||
public byte VehicleDestroyType;
|
||||
public int Distance;
|
||||
public int DynamicGoId;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Return body of AskGetUnlockedVehicles: top-level List7Bit<PlayerVehicleClientDetail>
|
||||
/// (midToReturnMessageReader[63272881]: ReadList7Bit + ReadComplex reader 434).
|
||||
/// </summary>
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskGetUnlockedVehiclesResult
|
||||
{
|
||||
[UxCollection(Count = UxCountEncoding.Int7, ItemObjectEncoding = UxObjectEncoding.Complex)]
|
||||
public List<PlayerVehicleClientDetail> Vehicles = [];
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Server -> client SyncTeleportVehicle(entityId, position, rotation, velocity, reset, moveToken).
|
||||
/// Signature from IL2CPP metadata (UX.Game.IGameSceneToClient): all primitives/inline.
|
||||
/// </summary>
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class SyncTeleportVehicle
|
||||
{
|
||||
public ulong EntityId;
|
||||
public UxVector3 Position;
|
||||
public UxVector3 Rotation;
|
||||
public float Velocity;
|
||||
public bool Reset;
|
||||
public int MoveToken;
|
||||
}
|
||||
|
||||
/// <summary>Server -> client SyncRemoveVehicle(entityId). Signature from IL2CPP metadata.</summary>
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class SyncRemoveVehicle
|
||||
{
|
||||
public ulong EntityId;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Client -> GameScene AskVehicleMove payload: complex RaidVehicleSyncData
|
||||
/// { u64 Id; struct UXVector3 Position; f32 facingDirection;
|
||||
/// struct UXVector3 EulerAngles; struct UXVector3 Velocity;
|
||||
/// List7Bit<byte> Bits; i32 MoveToken }.
|
||||
/// (ClientToGameSceneDelegate AskVehicleMove + Auto.WriteRaidVehicleSyncData.)
|
||||
/// Server only tracks Position/facing for the debug panel; simulation stays client-side.
|
||||
/// </summary>
|
||||
[UxContract]
|
||||
internal sealed class RaidVehicleSyncData
|
||||
{
|
||||
public ulong Id;
|
||||
public UxVector3 Position;
|
||||
public float FacingDirection;
|
||||
public UxVector3 EulerAngles;
|
||||
public UxVector3 Velocity;
|
||||
[UxCollection(Count = UxCountEncoding.Int7)]
|
||||
public List<byte> Bits = [];
|
||||
public int MoveToken;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Server -> client SyncAetherAIInitDatas: vehicle-AI subsystem init (mirrors V2).
|
||||
/// Lists stay empty on a private server; the header alone unblocks DriveManager.
|
||||
/// </summary>
|
||||
[UxContract]
|
||||
internal sealed class AetherAIInitData
|
||||
{
|
||||
public uint RaidId;
|
||||
public bool HasZoneGraph;
|
||||
public int ZoneStorageDataHandle;
|
||||
[UxCollection(Count = UxCountEncoding.Int7, ItemObjectEncoding = UxObjectEncoding.Complex)]
|
||||
public List<AetherInitStub> Intersections = [];
|
||||
[UxCollection(Count = UxCountEncoding.Int7, ItemObjectEncoding = UxObjectEncoding.Complex)]
|
||||
public List<AetherInitStub> Vehicles = [];
|
||||
[UxCollection(Count = UxCountEncoding.Int7, ItemObjectEncoding = UxObjectEncoding.Complex)]
|
||||
public List<AetherInitStub> StaticVehicles = [];
|
||||
}
|
||||
|
||||
/// <summary>Never serialized (all Aether init lists are empty); satisfies the serializer.</summary>
|
||||
[UxContract]
|
||||
internal sealed class AetherInitStub
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Server -> client SyncChangeVehicleInteractable(ulong vehicleInstanceId, bool interactable).
|
||||
/// Inline struct (no complex marker). From RPCDeserializeAuto reader for 68943521.
|
||||
/// </summary>
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class SyncChangeVehicleInteractable
|
||||
{
|
||||
public ulong VehicleInstanceId;
|
||||
public bool Interactable;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Server -> client SyncChangeVehicleController(ulong vehicleInstanceId, ulong controllerPid).
|
||||
/// Inline struct. Mirrors V2 (verified against client drive lifecycle).
|
||||
/// </summary>
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class SyncChangeVehicleController
|
||||
{
|
||||
public ulong VehicleInstanceId;
|
||||
public ulong ControllerPid;
|
||||
}
|
||||
|
||||
/// <summary>Boarding ext info: WriteBoardingExtInfo field order (V2-verified vs Lua).</summary>
|
||||
[UxContract]
|
||||
internal sealed class BoardingExtInfo
|
||||
{
|
||||
public UxVector3 PositionOffset;
|
||||
public UxVector3 RotationOffset;
|
||||
public bool CanBeEjected;
|
||||
public bool UseSpecificAction;
|
||||
public uint ActionGroup;
|
||||
public uint ActionId;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Server -> client SyncUnitVehicleStatus payload: WriteNewClientBoardingInfo order
|
||||
/// { u64 EntityId; byte Status; u64 VehicleUId; byte SeatIndex; ExtInfo? }.
|
||||
/// Status: 0=none, 2=enter-start, 3=enter-phase2, 4=seated, 5=exit-start.
|
||||
/// </summary>
|
||||
[UxContract]
|
||||
internal sealed class NewClientBoardingInfo
|
||||
{
|
||||
public ulong EntityId;
|
||||
public byte Status;
|
||||
public ulong VehicleUId;
|
||||
public byte SeatIndex;
|
||||
public BoardingExtInfo? ExtInfo;
|
||||
}
|
||||
|
||||
/// <summary>Server -> client SyncPlayerMoveToDriveSeat(pid, vehicleEntityId). Inline.</summary>
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class SyncPlayerMoveToDriveSeat
|
||||
{
|
||||
public ulong Pid;
|
||||
public ulong VehicleEntityId;
|
||||
}
|
||||
|
||||
/// <summary>Server -> client SyncPlayerExitVehicle(vehicleEntityId, force, stopBeforeLeave). Inline.</summary>
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class SyncPlayerExitVehicle
|
||||
{
|
||||
public ulong VehicleEntityId;
|
||||
public bool Force;
|
||||
public bool StopBeforeLeave;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Drive-state struct shared by client notifies and server enter/exit notifies
|
||||
/// (SyncPlayerStartEnterOrExitVehicl / SyncPlayerVehicleStateChange /
|
||||
/// SyncPlayerFinishEnterOrExitVehic). V2-verified order; SeatIndex is int.
|
||||
/// </summary>
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class PlayerVehicleDriveStateInfo
|
||||
{
|
||||
public ulong Pid;
|
||||
public bool EnterOrLeave;
|
||||
public ulong VehicleEntityId;
|
||||
public int SeatIndex;
|
||||
public bool IfForce;
|
||||
public int OpenDoorTypeId;
|
||||
public int OpenDoorActionSpeed;
|
||||
public int OpenDoorActionClipLength;
|
||||
}
|
||||
|
||||
/// <summary>Client -> server AskClaimVehicleSeat(vehicleEntityId, seatIndices). Inline.</summary>
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskClaimVehicleSeatArgs
|
||||
{
|
||||
public ulong VehicleEntityId;
|
||||
[UxCollection(Count = UxCountEncoding.Int7)]
|
||||
public List<byte> SeatIndices = [];
|
||||
}
|
||||
|
||||
/// <summary>Client -> GameScene AskVehicleStartAutonomousDriving(bool hasvalidtargetposition, UXVector3 targetposition).</summary>
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskVehicleStartAutonomousDrivingArgs
|
||||
{
|
||||
public bool HasValidTargetPosition;
|
||||
public UxVector3 TargetPosition;
|
||||
}
|
||||
|
||||
/// <summary>Client -> GameScene AskVehicleChangeAutonomousDrivingTarget(UXVector3 targetposition).</summary>
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskVehicleChangeAutonomousDrivingTargetArgs
|
||||
{
|
||||
public UxVector3 TargetPosition;
|
||||
}
|
||||
|
||||
/// <summary>Server -> client SyncVehicleAutonomousDrivingState(ulong vehicleEntityId, bool isStart).</summary>
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class SyncVehicleAutonomousDrivingState
|
||||
{
|
||||
public ulong VehicleEntityId;
|
||||
public bool IsStart;
|
||||
}
|
||||
|
||||
/// <summary>Server -> client SyncPlayerAutonomousDrivingState(bool isInOverrideMode, bool isAutoDrivingBlocked, bool isImmersiveModeBlocked).</summary>
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class SyncPlayerAutonomousDrivingState
|
||||
{
|
||||
public bool IsInOverrideMode;
|
||||
public bool IsAutoDrivingBlocked;
|
||||
public bool IsImmersiveModeBlocked;
|
||||
}
|
||||
|
||||
/// <summary>Client -> GameScene AskVehicleNavigationPathPoints</summary>
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskVehicleNavigationPathPointsArgs
|
||||
{
|
||||
public uint NavReqId;
|
||||
public UxVector3 TargetPosition;
|
||||
public bool IgnoreDirection;
|
||||
public bool IgnoreAlley;
|
||||
public bool NeedCenterPoints;
|
||||
public bool UseNavmeshConnect;
|
||||
public uint NavigationProfile;
|
||||
}
|
||||
|
||||
/// <summary>Server -> client VehicleNavigationPathPointsResult (reader 677).</summary>
|
||||
[UxContract]
|
||||
internal sealed class VehicleNavigationPathPointsResult
|
||||
{
|
||||
public uint NavReqId;
|
||||
[UxCollection(Count = UxCountEncoding.Int7, ItemObjectEncoding = UxObjectEncoding.Struct)]
|
||||
public List<UxVector3> Points = [];
|
||||
[UxCollection(Count = UxCountEncoding.Int7, ItemObjectEncoding = UxObjectEncoding.Struct)]
|
||||
public List<UxVector3> CenterPoints = [];
|
||||
}
|
||||
|
||||
/// <summary>Server -> client SyncCurrentTask (64450155).</summary>
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class SyncCurrentTaskInfo
|
||||
{
|
||||
public byte Type;
|
||||
public uint TaskId;
|
||||
public uint EventId;
|
||||
public bool FirstTime;
|
||||
public byte Reason;
|
||||
}
|
||||
|
||||
/// <summary>Server -> client SyncSceneFogMapAllUnlock (64915741).</summary>
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class SyncSceneFogMapAllUnlockInfo
|
||||
{
|
||||
public uint SceneId;
|
||||
public bool Unlocked;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,348 @@
|
||||
using Ananta.SDK.Serialization;
|
||||
|
||||
namespace Ananta.Server.RpcTypes.Client4229938.Methods.GameScene;
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal struct UxVector3
|
||||
{
|
||||
public float X;
|
||||
public float Y;
|
||||
public float Z;
|
||||
|
||||
public UxVector3(float x, float y, float z) { X = x; Y = y; Z = z; }
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class SyncLogicAgentEnter { public ulong agentId; }
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class SyncLogicAgentLeave { public ulong agentId; }
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class SyncManagedLogicAgent
|
||||
{
|
||||
public ulong agentId;
|
||||
public ulong pid;
|
||||
public byte moveId;
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class SyncPlayerCurrentSpirit
|
||||
{
|
||||
public ulong playerPid;
|
||||
public uint templateId;
|
||||
public ulong spiritId;
|
||||
public bool isAgentSwitch;
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class SyncSwitchSpiritConfigId
|
||||
{
|
||||
// 4229938 IGameSceneToClient.SyncSwitchSpiritConfigId(uint, UXVector3, List<ulong>).
|
||||
// The third field is mandatory even when the switch has no spawned helper agents.
|
||||
public uint configId;
|
||||
public UxVector3 position;
|
||||
[UxCollection(Count = UxCountEncoding.Int7)]
|
||||
public List<ulong> spawnedAgentIds = [];
|
||||
}
|
||||
|
||||
/// <summary>PreSwitchSpiritData is an inline struct: there is no leading complex marker.</summary>
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class SyncPreSwitchSpirit
|
||||
{
|
||||
public uint configId;
|
||||
public uint newTemplateId;
|
||||
public UxVector3 position;
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class SyncSceneLoadCompleted { public ulong sceneId; }
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class SyncGamePause { public bool pause; }
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskSetGamePause
|
||||
{
|
||||
public bool value;
|
||||
public byte reason;
|
||||
}
|
||||
|
||||
/// <summary>Client -> GameScene AskSwitchSpirit(uint spiritId).</summary>
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskSwitchSpirit
|
||||
{
|
||||
public uint spiritId;
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskSwitchSpiritComplete
|
||||
{
|
||||
public uint switchSpiritId;
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class SyncEntityActionGroup
|
||||
{
|
||||
public ulong unitId;
|
||||
public uint actionGroupId;
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class SyncChangeSkill
|
||||
{
|
||||
public ulong spiritId;
|
||||
public uint skillId;
|
||||
public float duration;
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class SyncUnitStates
|
||||
{
|
||||
public ulong unitId;
|
||||
public List<uint>? states = [];
|
||||
public uint effectFreezeState;
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class SyncRemoveUnitState
|
||||
{
|
||||
public ulong unitId;
|
||||
public uint state;
|
||||
public byte reason = 1;
|
||||
public uint sourceId;
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class SyncPlayerLoadRate
|
||||
{
|
||||
public ulong playerPid;
|
||||
public double rate;
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class SyncUnitPositionP
|
||||
{
|
||||
public ulong unitId;
|
||||
public UxVector3 position;
|
||||
public float facing;
|
||||
public byte moveId;
|
||||
public byte setPositionType;
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class SyncAllSpiritCombatPower
|
||||
{
|
||||
[UxCollection(Count = UxCountEncoding.Int7)]
|
||||
public Dictionary<uint, float> combatPower = [];
|
||||
}
|
||||
|
||||
// Client -> GameScene loading barrier messages.
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskLoadSceneCompleted
|
||||
{
|
||||
public ulong sceneId;
|
||||
public ulong sessionId;
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskLoadGameResCompleted
|
||||
{
|
||||
public ulong sceneId;
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskLoadingFinished
|
||||
{
|
||||
public ulong sceneId;
|
||||
public ulong sessionId;
|
||||
}
|
||||
|
||||
// Client -> GameScene movement report: List7Bit<LogicAgentSyncData>.
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskReportLogicAgentSyncData
|
||||
{
|
||||
public List<LogicAgentSyncData> list = [];
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class LogicAgentSyncData
|
||||
{
|
||||
public ulong AgentId;
|
||||
public UxVector3 Position;
|
||||
public UxVector3 Rotation;
|
||||
}
|
||||
|
||||
|
||||
// Client movement contracts from RPCSerializeAuto.lua (build 4229938).
|
||||
[UxContract(Inline = true)]
|
||||
internal struct SimpleMoveActionData
|
||||
{
|
||||
public ulong UnitId;
|
||||
public UxVector3 Pos;
|
||||
public UxVector3 Rot;
|
||||
public byte MoveId;
|
||||
}
|
||||
|
||||
[UxContract]
|
||||
internal sealed class MoveActionGroundData
|
||||
{
|
||||
public byte MoveGroundType;
|
||||
public ulong MoveGroundId;
|
||||
public byte MetaInfo;
|
||||
public UxVector3 LocalPos;
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal struct SimpleMoveActionDataWithGround
|
||||
{
|
||||
public ulong UnitId;
|
||||
public UxVector3 Pos;
|
||||
public UxVector3 Rot;
|
||||
public byte MoveId;
|
||||
public MoveActionGroundData? GroundData;
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal struct MoveActionData
|
||||
{
|
||||
public ulong UnitId;
|
||||
public UxVector3 Pos;
|
||||
public UxVector3 Rot;
|
||||
public byte MoveId;
|
||||
public byte MoveTime;
|
||||
public bool IsCritical;
|
||||
[UxCollection(Count = UxCountEncoding.Int7)] public List<byte>? ActionData;
|
||||
[UxCollection(Count = UxCountEncoding.Int7)] public List<byte>? EffectData;
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal struct MoveActionDataWithGround
|
||||
{
|
||||
public ulong UnitId;
|
||||
public UxVector3 Pos;
|
||||
public UxVector3 Rot;
|
||||
public byte MoveId;
|
||||
public byte MoveTime;
|
||||
public MoveActionGroundData? GroundData;
|
||||
public bool IsCritical;
|
||||
[UxCollection(Count = UxCountEncoding.Int7)] public List<byte>? ActionData;
|
||||
[UxCollection(Count = UxCountEncoding.Int7)] public List<byte>? EffectData;
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskUnitMoveActionSimple
|
||||
{
|
||||
[UxCollection(Count = UxCountEncoding.Int7, ItemObjectEncoding = UxObjectEncoding.Struct)]
|
||||
public List<SimpleMoveActionData> actions = [];
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskUnitMoveActionSimpleWithGround
|
||||
{
|
||||
[UxCollection(Count = UxCountEncoding.Int7, ItemObjectEncoding = UxObjectEncoding.Struct)]
|
||||
public List<SimpleMoveActionDataWithGround> actions = [];
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskUnitMoveAction
|
||||
{
|
||||
[UxCollection(Count = UxCountEncoding.Int7, ItemObjectEncoding = UxObjectEncoding.Struct)]
|
||||
public List<MoveActionData> actions = [];
|
||||
public uint clientLocalTime;
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskUnitMoveActionWithGround
|
||||
{
|
||||
[UxCollection(Count = UxCountEncoding.Int7, ItemObjectEncoding = UxObjectEncoding.Struct)]
|
||||
public List<MoveActionDataWithGround> actions = [];
|
||||
public uint clientLocalTime;
|
||||
}
|
||||
|
||||
// Full SyncUnitPositionAndFacing tuple. The last two complex values are always null on our path;
|
||||
// keeping named null-only placeholders documents the 4229938 wire instead of writing marker bytes by hand.
|
||||
[UxContract]
|
||||
internal sealed class MoveGroundInfoNullOnly { }
|
||||
|
||||
[UxContract]
|
||||
internal sealed class LoadingInfoNullOnly { }
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class SyncUnitPositionAndFacing
|
||||
{
|
||||
public ulong unitId;
|
||||
public UxVector3 position;
|
||||
public float facing;
|
||||
public byte moveId;
|
||||
public bool continueMove;
|
||||
public byte setPositionType;
|
||||
public MoveGroundInfoNullOnly? moveGroundInfo;
|
||||
public LoadingInfoNullOnly? loadingInfo;
|
||||
}
|
||||
|
||||
// Teleport & Scene Switch contracts (build 4229938).
|
||||
[UxContract]
|
||||
internal sealed class PreTeleportOption
|
||||
{
|
||||
public uint configId;
|
||||
public ulong teleportId;
|
||||
public bool ForceClear;
|
||||
public uint TimeLineDration;
|
||||
public UxVector3 position;
|
||||
public float facing;
|
||||
public string beforeResName = string.Empty;
|
||||
public bool customBeforeTrans;
|
||||
public UxVector3 beforePosition;
|
||||
public UxVector3 beforeRot;
|
||||
public string loadingResName = string.Empty;
|
||||
public string afterResName = string.Empty;
|
||||
public bool customAfterTrans;
|
||||
public UxVector3 afterPosition;
|
||||
public UxVector3 afterRot;
|
||||
public string extParams = string.Empty;
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskTeleportArgs
|
||||
{
|
||||
public PreTeleportOption option = new();
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskPlayerChangePositionByScenePortalArgs
|
||||
{
|
||||
public uint bonfireuniqueid;
|
||||
}
|
||||
|
||||
[UxContract]
|
||||
internal sealed class TeleportOption
|
||||
{
|
||||
public ulong teleportId;
|
||||
public UxVector3 Position;
|
||||
public float Facing;
|
||||
public bool IsSwitchScene;
|
||||
public bool WaitTaskResource;
|
||||
public uint MapEntranceId;
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class SyncTeleport
|
||||
{
|
||||
public TeleportOption option = new();
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class SyncPreTeleportOption
|
||||
{
|
||||
public PreTeleportOption option = new();
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class AskPublicSwitchToPublicSceneArgs
|
||||
{
|
||||
public uint raidid;
|
||||
public bool delay;
|
||||
public uint mapentranceid;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
using Ananta.SDK.Serialization;
|
||||
|
||||
namespace Ananta.Server.RpcTypes.Client4229938.Methods.LoginGate;
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class PatchCheckResult
|
||||
{
|
||||
public int patchVersion;
|
||||
public List<uint> patches = [];
|
||||
}
|
||||
|
||||
[UxContract]
|
||||
internal sealed class CheckAccountResult
|
||||
{
|
||||
// Field set and order must match the 4229938 client CheckAccountResult
|
||||
// (UX.Game, dump TypeDefIndex 32261): the reflection serializer emits
|
||||
// fields by declaration order and the client rejects the response unless
|
||||
// its `code` field lands on the wire position it expects (it must read 200).
|
||||
public string unisdk_login_json = string.Empty;
|
||||
public string Token = string.Empty;
|
||||
public string UserName = string.Empty;
|
||||
public int Aid;
|
||||
public bool NeedRealNameTip;
|
||||
public bool NeedRoleEnter;
|
||||
public bool RealNameVerified;
|
||||
public int HostId;
|
||||
public int code;
|
||||
public int subcode;
|
||||
public string msg = string.Empty;
|
||||
}
|
||||
|
||||
[UxContract(Inline = true)]
|
||||
internal sealed class EnterGameResult
|
||||
{
|
||||
public int aid;
|
||||
public ulong playerPid;
|
||||
public GateServerInfo gate = new();
|
||||
}
|
||||
|
||||
[UxContract]
|
||||
internal sealed class GateServerInfo
|
||||
{
|
||||
public int aid;
|
||||
public ulong playerPid;
|
||||
public string host = string.Empty;
|
||||
public int port;
|
||||
public string loginToken = string.Empty;
|
||||
public int serverId;
|
||||
public string accountId = string.Empty;
|
||||
}
|
||||
|
||||
[UxContract]
|
||||
internal sealed class GameServerInfo
|
||||
{
|
||||
public string host = string.Empty;
|
||||
public int port;
|
||||
public string gameToken = string.Empty;
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
namespace Ananta.Server.RpcTypes.Client4229938;
|
||||
|
||||
/// <summary>Small server-side vector used by gameplay state. RPC vectors live in Methods/GameScene/WorldMethods.cs.</summary>
|
||||
internal readonly record struct Vec3(float X, float Y, float Z);
|
||||
Reference in new issue
Block a user