4 Commits

Author SHA1 Message Date
Le Duc Anh b08f6c9de5 initial host skill 2025-10-20 09:37:18 +07:00
Le Duc Anh 20ce61da3e inital skill 2025-10-16 11:17:25 +07:00
Le Duc Anh ed1a00932e reset the history pointer 2025-10-16 10:50:59 +07:00
anhld 92352e14d9 Merge pull request 'bugfix/decompresing' (#27) from bugfix/decompresing into develop
Reviewed-on: https://git.brew.monster/Unity/perfect-world-unity/pulls/27
2025-10-15 11:47:27 +00:00
36 changed files with 920 additions and 18 deletions
+8
View File
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: cb61533ac941c4ffba6a90a1474521cd
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,16 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: dea69d41f90c6ea4fa55c27c1d60c145, type: 3}
m_Name: AddressableAssetGroupSortSettings
m_EditorClassIdentifier:
sortOrder:
- bbd793018c27748cca02d5de986048df
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: f25174790dc404b198a56fce19a3db28
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,115 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 468a46d0ae32c3544b7d98094e6448a9, type: 3}
m_Name: AddressableAssetSettings
m_EditorClassIdentifier:
m_DefaultGroup: bbd793018c27748cca02d5de986048df
m_currentHash:
serializedVersion: 2
Hash: 00000000000000000000000000000000
m_OptimizeCatalogSize: 0
m_BuildRemoteCatalog: 0
m_CatalogRequestsTimeout: 0
m_DisableCatalogUpdateOnStart: 0
m_InternalIdNamingMode: 0
m_InternalBundleIdMode: 1
m_AssetLoadMode: 0
m_BundledAssetProviderType:
m_AssemblyName:
m_ClassName:
m_AssetBundleProviderType:
m_AssemblyName:
m_ClassName:
m_IgnoreUnsupportedFilesInBuild: 0
m_UniqueBundleIds: 0
m_EnableJsonCatalog: 0
m_NonRecursiveBuilding: 1
m_AllowNestedBundleFolders: 0
m_CCDEnabled: 0
m_maxConcurrentWebRequests: 3
m_UseUWRForLocalBundles: 0
m_BundleTimeout: 0
m_BundleRetryCount: 0
m_BundleRedirectLimit: -1
m_SharedBundleSettings: 0
m_SharedBundleSettingsCustomGroupIndex: 0
m_ContiguousBundles: 1
m_StripUnityVersionFromBundleBuild: 0
m_DisableVisibleSubAssetRepresentations: 0
m_BuiltInBundleNaming: 0
mBuiltInBundleCustomNaming:
m_MonoScriptBundleNaming: 0
m_CheckForContentUpdateRestrictionsOption: 0
m_MonoScriptBundleCustomNaming:
m_RemoteCatalogBuildPath:
m_Id:
m_RemoteCatalogLoadPath:
m_Id:
m_ContentStateBuildPathProfileVariableName:
m_CustomContentStateBuildPath:
m_ContentStateBuildPath:
m_BuildAddressablesWithPlayerBuild: 0
m_overridePlayerVersion: '[UnityEditor.PlayerSettings.bundleVersion]'
m_GroupAssets:
- {fileID: 11400000, guid: 15c7600774f5e4fa39799fa2fa5cddc7, type: 2}
m_BuildSettings:
m_LogResourceManagerExceptions: 1
m_BundleBuildPath: Temp/com.unity.addressables/AssetBundles
m_ProfileSettings:
m_Profiles:
- m_InheritedParent:
m_Id: 5bcd8455921c84270accc11f3fbc6449
m_ProfileName: Default
m_Values:
- m_Id: 1392a36db56e64f1e84fc2c8776507a5
m_Value: <undefined>
- m_Id: 6e7e9ef97e0344bc3a20970dda8e6337
m_Value: '[UnityEngine.AddressableAssets.Addressables.BuildPath]/[BuildTarget]'
- m_Id: 791eb35b6b84b40b3aea20b10014545d
m_Value: '[UnityEditor.EditorUserBuildSettings.activeBuildTarget]'
- m_Id: 807597afdaf784375bb64bbbb31b95c9
m_Value: 'ServerData/[BuildTarget]'
- m_Id: b9b5fe2d75ce54f07965bef27c157d9e
m_Value: '{UnityEngine.AddressableAssets.Addressables.RuntimePath}/[BuildTarget]'
m_ProfileEntryNames:
- m_Id: 1392a36db56e64f1e84fc2c8776507a5
m_Name: Remote.LoadPath
m_InlineUsage: 0
- m_Id: 6e7e9ef97e0344bc3a20970dda8e6337
m_Name: Local.BuildPath
m_InlineUsage: 0
- m_Id: 791eb35b6b84b40b3aea20b10014545d
m_Name: BuildTarget
m_InlineUsage: 0
- m_Id: 807597afdaf784375bb64bbbb31b95c9
m_Name: Remote.BuildPath
m_InlineUsage: 0
- m_Id: b9b5fe2d75ce54f07965bef27c157d9e
m_Name: Local.LoadPath
m_InlineUsage: 0
m_ProfileVersion: 1
m_LabelTable:
m_LabelNames:
- default
m_SchemaTemplates: []
m_GroupTemplateObjects:
- {fileID: 11400000, guid: 81b373c8b738d4ed6aa6b29aaa18eb89, type: 2}
m_InitializationObjects: []
m_CertificateHandlerType:
m_AssemblyName:
m_ClassName:
m_ActivePlayerDataBuilderIndex: 2
m_DataBuilders:
- {fileID: 11400000, guid: b1b42ca706e094559b3cafc421a17adc, type: 2}
- {fileID: 11400000, guid: 3390a93e65f9e4276a8f8d988dab06d3, type: 2}
- {fileID: 11400000, guid: 879660329a5904e37a49853b73753435, type: 2}
m_ActiveProfileId: 5bcd8455921c84270accc11f3fbc6449
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 1ec2a0639b2d54a60b37f37b409b7d5c
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 72b5ae63e8c344d7d8c5cddab5348bf1
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,79 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 1a3c5d64ac83548c09dd1678b9f6f1cd, type: 3}
m_Name: Packed Assets
m_EditorClassIdentifier:
m_SchemaObjects:
- {fileID: 2761359259105829908}
- {fileID: 3655121760924759167}
m_Description: Pack assets into asset bundles.
m_Settings: {fileID: 11400000, guid: 1ec2a0639b2d54a60b37f37b409b7d5c, type: 2}
--- !u!114 &2761359259105829908
MonoBehaviour:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: e5d17a21594effb4e9591490b009e7aa, type: 3}
m_Name: BundledAssetGroupSchema
m_EditorClassIdentifier:
m_Group: {fileID: 0}
m_InternalBundleIdMode: 1
m_Compression: 1
m_IncludeAddressInCatalog: 1
m_IncludeGUIDInCatalog: 1
m_IncludeLabelsInCatalog: 1
m_InternalIdNamingMode: 0
m_CacheClearBehavior: 0
m_IncludeInBuild: 1
m_BundledAssetProviderType:
m_AssemblyName:
m_ClassName:
m_StripDownloadOptions: 0
m_ForceUniqueProvider: 0
m_UseAssetBundleCache: 1
m_UseAssetBundleCrc: 1
m_UseAssetBundleCrcForCachedBundles: 1
m_UseUWRForLocalBundles: 0
m_Timeout: 0
m_ChunkedTransfer: 0
m_RedirectLimit: -1
m_RetryCount: 0
m_BuildPath:
m_Id:
m_LoadPath:
m_Id:
m_BundleMode: 0
m_AssetBundleProviderType:
m_AssemblyName:
m_ClassName:
m_UseDefaultSchemaSettings: 0
m_SelectedPathPairIndex: 0
m_BundleNaming: 0
m_AssetLoadMode: 0
--- !u!114 &3655121760924759167
MonoBehaviour:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5834b5087d578d24c926ce20cd31e6d6, type: 3}
m_Name: ContentUpdateGroupSchema
m_EditorClassIdentifier:
m_Group: {fileID: 0}
m_StaticContent: 0
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 81b373c8b738d4ed6aa6b29aaa18eb89
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: b0a4b760ecb9142b4a75c3421223330a
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: eb1dd8c4e371b4d4ea048ab3a4acddbd
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,48 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: e5d17a21594effb4e9591490b009e7aa, type: 3}
m_Name: models_BundledAssetGroupSchema
m_EditorClassIdentifier:
m_Group: {fileID: 11400000, guid: 15c7600774f5e4fa39799fa2fa5cddc7, type: 2}
m_InternalBundleIdMode: 1
m_Compression: 1
m_IncludeAddressInCatalog: 1
m_IncludeGUIDInCatalog: 1
m_IncludeLabelsInCatalog: 1
m_InternalIdNamingMode: 0
m_CacheClearBehavior: 0
m_IncludeInBuild: 1
m_BundledAssetProviderType:
m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.BundledAssetProvider
m_StripDownloadOptions: 0
m_ForceUniqueProvider: 0
m_UseAssetBundleCache: 1
m_UseAssetBundleCrc: 1
m_UseAssetBundleCrcForCachedBundles: 1
m_UseUWRForLocalBundles: 0
m_Timeout: 0
m_ChunkedTransfer: 0
m_RedirectLimit: -1
m_RetryCount: 0
m_BuildPath:
m_Id: 6e7e9ef97e0344bc3a20970dda8e6337
m_LoadPath:
m_Id: b9b5fe2d75ce54f07965bef27c157d9e
m_BundleMode: 0
m_AssetBundleProviderType:
m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.AssetBundleProvider
m_UseDefaultSchemaSettings: 0
m_SelectedPathPairIndex: 0
m_BundleNaming: 0
m_AssetLoadMode: 0
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 874254206b0164c3c9c5d440bd18f1d2
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,16 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5834b5087d578d24c926ce20cd31e6d6, type: 3}
m_Name: models_ContentUpdateGroupSchema
m_EditorClassIdentifier:
m_Group: {fileID: 11400000, guid: 15c7600774f5e4fa39799fa2fa5cddc7, type: 2}
m_StaticContent: 0
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 1c22bf47e733b4bd18571ccb389a9d99
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,28 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: bbb281ee3bf0b054c82ac2347e9e782c, type: 3}
m_Name: models
m_EditorClassIdentifier:
m_GroupName: models
m_GUID: bbd793018c27748cca02d5de986048df
m_SerializeEntries:
- m_GUID: 7daa10b47beb04798927c05cc7148951
m_Address: "models/\u573A\u666F\u6D3B\u7269/\u677E\u9F20/\u7EA2\u8272\u677E\u9F20/\u7EFF\u8272\u677E\u9F20"
m_ReadOnly: 0
m_SerializedLabels: []
FlaggedDuringContentUpdateRestriction: 0
m_ReadOnly: 0
m_Settings: {fileID: 11400000, guid: 1ec2a0639b2d54a60b37f37b409b7d5c, type: 2}
m_SchemaSet:
m_Schemas:
- {fileID: 11400000, guid: 874254206b0164c3c9c5d440bd18f1d2, type: 2}
- {fileID: 11400000, guid: 1c22bf47e733b4bd18571ccb389a9d99, type: 2}
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 15c7600774f5e4fa39799fa2fa5cddc7
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 83d094317c6ee467fb107004b05285fe
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,20 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 88d21199f5d473f4db36845f2318f180, type: 3}
m_Name: BuildScriptFastMode
m_EditorClassIdentifier:
instanceProviderType:
m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.InstanceProvider
sceneProviderType:
m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.SceneProvider
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: b1b42ca706e094559b3cafc421a17adc
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,20 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3e2e0ffa088c91d41a086d0b8cb16bdc, type: 3}
m_Name: BuildScriptPackedMode
m_EditorClassIdentifier:
instanceProviderType:
m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.InstanceProvider
sceneProviderType:
m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.SceneProvider
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 879660329a5904e37a49853b73753435
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,20 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: ad8c280d42ee0ed41a27db23b43dd2bf, type: 3}
m_Name: BuildScriptPackedPlayMode
m_EditorClassIdentifier:
instanceProviderType:
m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.InstanceProvider
sceneProviderType:
m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.SceneProvider
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 3390a93e65f9e4276a8f8d988dab06d3
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,15 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3a189bb168d8d90478a09ea08c2f3d72, type: 3}
m_Name: DefaultObject
m_EditorClassIdentifier:
m_AddressableAssetSettingsGuid: 1ec2a0639b2d54a60b37f37b409b7d5c
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 10a66f9b645da4b5ba42fbf892b922ee
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: d0c06c588e2a6442488a3542551fb243
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -307,15 +307,6 @@ namespace CSNetwork
_receiveOctets.Capacity,
token
);
// if (bytesRead > 0)
// {
// _logger.Log(LogType.Info, $"ProcessReceivedData:: Last Byte: {_receiveOctets.RawBuffer[currentBufferLength + bytesRead - 1]}");
// if (_previousLength > 0)
// _logger.Log(LogType.Info, $"ProcessReceivedData:: Buffer remaining data size from {_previousLength} to {currentBufferLength + bytesRead} --- Last byte: {_receiveOctets.RawBuffer[_previousLength - 1]}");
// }
//
// _previousLength = currentBufferLength + bytesRead; // cache to check if the buffer is growing
}
catch (IOException ex)
when (ex.InnerException is SocketException se
@@ -379,7 +370,7 @@ namespace CSNetwork
{
currentIsec = _inputSecurity;
}
DecompressArcFourSecurity._logger = _logger;
bool securityApplied =
currentIsec != null && currentIsec.GetType() != typeof(NullSecurity);
Octets dataToProcess; // This will hold the data block we decode from
@@ -12,7 +12,7 @@ namespace CSNetwork.Security
/// </summary>
public class DecompressArcFourSecurity : BaseSecurity
{
private static readonly IPrefixedLogger _logger = LoggerFactory.GetLogger(nameof(DecompressArcFourSecurity));
public static IPrefixedLogger _logger = LoggerFactory.GetLogger(nameof(DecompressArcFourSecurity));
private ARCFourSecurity _arcFour; // Internal RC4 instance
private byte[] _key;
@@ -55,7 +55,6 @@ namespace CSNetwork.Security
// or just to be safe. Ensure _arcFour.Update returns a *new* Octets.
// *** If ARCFourSecurity.Update modified the input Octets in-place, this would be wrong. ***
// *** Assuming ARCFourSecurity.Update follows the abstract Security pattern and returns new Octets ***
UnityEngine.Debug.Log($"ENCRYPTED: {data.RawBuffer[0]}");
decryptedData = _arcFour.Update(data);
}
@@ -76,15 +75,11 @@ namespace CSNetwork.Security
Octets decompressedData;
try
{
UnityEngine.Debug.Log($"DECRYPTED: {decryptedData.RawBuffer[0]}");
decompressedData = decompressor.Update(decryptedData);
}
catch (Exception ex)
{
//_logger.Log(LogType.Error, $"MPPC Decompression Error after decryption: {ex.Message}. Decrypted Length: {decryptedData.Length}");
string firstBytes = BitConverter.ToString(decryptedData.RawBuffer, 0, Math.Min(decryptedData.Length, 16));
_logger.Log(LogType.Debug, $"Decrypted Data (first {Math.Min(decryptedData.Length, 16)} bytes): {firstBytes}");
_logger.LogException(ex);
_logger.Log(LogType.Info, $"{ex.Message} - {ex.StackTrace}");
throw new InvalidDataException("MPPC decompression failed after decryption.", ex);
}
@@ -149,7 +149,7 @@ namespace CSNetwork.Security
Array.Copy(history, histhead, segment, 0, segment.Length);
output.Insert(output.Size, segment);
if (histptr - histhead == MPPC_HIST_LEN)
if (histptr == MPPC_HIST_LEN)
histptr = 0;
histhead = histptr;
+3
View File
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 0dedb87fb40f4f19a0a958e12fbf1832
timeCreated: 1760588049
@@ -0,0 +1,23 @@
namespace BrewMonster.Scripts.Skills
{
public enum enumSkillFitLevelState
{
SKILL_FIT_LEVEL, // 技能满足等级、修真、境界条件 / Skill meets level, cultivation, realm requirements
SKILL_NOT_FIT_LEVEL, // 技能不满足等级、修真、境界条件 / Skill does not meet level, cultivation, realm requirements
}
public enum enumSkillLearnedState
{
SKILL_NOT_LEARNED, // 技能未学习 / Skill not learned
SKILL_LEARNED, // 技能已学习,但不满级 / Skill learned but not at max level
SKILL_FULL, // 技能已满级 / Skill at max level
SKILL_OVERRIDDEN, // 技能已被覆盖 / Skill has been overridden
}
public enum enumEvilGod
{
SKILL_BASE, // 普通技能 / Normal skill
SKILL_EVIL, // 仙技能 / Immortal skill
SKILL_GOD, // 魔技能 / Demonic skill
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 0ac9cd34c55ab4c668b852e4e2d6a67c
@@ -0,0 +1,211 @@
using System.Collections.Generic;
using System.Runtime.InteropServices;
namespace BrewMonster.Scripts.Skills
{
public enum skill_type{
TYPE_ATTACK = 1, // Attack // 锟斤拷锟斤拷锟斤拷锟斤拷
TYPE_BLESS = 2, // Blessing // 锟斤拷锟斤拷祝锟斤拷
TYPE_CURSE = 3, // Curse // 锟斤拷锟斤拷锟斤拷锟斤拷
TYPE_SUMMON = 4, // Summon // 锟斤拷品锟斤拷锟斤拷
TYPE_PASSIVE = 5, // Passive // 锟斤拷锟斤拷
TYPE_ENABLED = 6, // Enabled // 锟斤拷锟斤拷锟斤拷锟斤拷
TYPE_LIVE = 7, // Live // 锟斤拷锟斤拷
TYPE_JUMP = 8, // Jump // 瞬锟斤拷
TYPE_PRODUCE = 9, // Production (Crafting) // 锟斤拷锟斤拷(锟斤拷锟斤拷)
TYPE_BLESSPET = 10, // Pet Blessing // 锟斤拷锟斤拷祝锟斤拷
TYPE_NEUTRALBLESS = 11, // Neutral Blessing // 锟斤拷锟斤拷祝锟斤拷
};
public enum range_type{
TYPE_POINT = 0, // 锟斤拷
TYPE_LINE = 1, // 锟斤拷
TYPE_SELFSPHERE = 2, // 锟斤拷锟斤拷为锟斤拷锟侥碉拷锟斤拷
TYPE_TARGETSPHERE = 3, // 目锟斤拷为锟斤拷锟侥碉拷锟斤拷
TYPE_TAPER = 4, // 圆锥
TYPE_SLEF = 5, // 锟斤拷锟斤拷
};
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct LearnRequirement
{
public int level; // 等级要求 // Level requirement
public int sp; // 技能点 // Skill points
public int money; // 金钱 // Money
public int profession; // 职业 // Profession
public int rank; // 阶级别 // Rank level
public int realm_level; // 境界等级 // Realm level
}
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct PetRequirement
{
public int level; // 等级级别 // Level requirement
public int sp; // 宠物技能点 // Pet skill points
public int list; // 宠物技能列表 // Pet skill list
public int lsize; // 列表大小 // List size
}
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct GoblinRequirement
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 5)]
public int[] genius; // 小精灵技能天赋 // Goblin skill talents
public int profession; // 职业 // Profession
public int sp; // 精灵元气 // Spirit points
public int money; // 精灵金钱 // Money
public int level; // 小精灵等级 // Goblin level
public int mp; // 小精灵当前魔法点数 // Current magic points
}
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct ComboSkillState
{
public const int MAX_COMBO_ARG = 3;
public uint skillid;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = MAX_COMBO_ARG)]
public int[] arg;
}
public struct UseRequirement
{
public int mp; //魔锟斤拷 // Magic points
public int ap; //怒锟斤拷值 // Anger points
public int form; //锟斤拷锟斤拷状态 // Form state
public int weapon; //锟斤拷锟斤拷 // Weapon
public int freepackage; //锟斤拷锟斤拷锟斤拷剩锟斤拷锟斤拷目 // Remaining inventory slots
public int arrow; //装锟斤拷锟斤拷支锟斤拷目 // Number of arrows loaded
public int move_env; //锟狡讹拷锟斤拷锟斤拷 // Movement environment
public bool is_combat; //锟角凤拷战锟斤拷状态 // Whether in combat state
public int hp; //锟斤拷前hp // Current HP
public int max_hp; //锟斤拷锟絟p // Maximum HP
// public ComboSkillState combo_state; //锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 // Combo skill state
};
public struct GoblinUseRequirement
{
public int mp; //锟斤拷锟斤拷(元锟斤拷)
public int ap; //锟斤拷锟斤拷(锟斤拷锟斤拷)
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 5)]
public int[] genius; //小锟斤拷锟介技锟斤拷锟届赋锟斤拷
public int profession; //锟斤拷锟斤拷职业
public int level; //小锟斤拷锟斤拷燃锟斤拷锟斤拷锟斤拷诩锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟?
public int move_env; //锟斤拷锟剿碉拷前锟狡讹拷锟斤拷锟斤拷
};
public class SkillStr
{
public virtual ushort[] Find(int id) {return new ushort[0];}
}
public enum SKILL_STATE
{
SKILL_PERFORM,
SKILL_DONE,
}
public class ElementSkill
{
public const byte FORM_MASK_HIGH = 0xC0;
public const byte FORM_NORMAL = 0; //锟斤拷通锟斤拷态
public const byte FORM_CLASS = 1; //职业锟斤拷锟斤拷
public const byte FORM_BEASTIE = 2; //锟斤拷小锟斤拷锟斤拷
public static uint NextSkill(uint id = 0)
{
//TODO: Implement this
return 0;
}
// 锟斤拷锟斤拷锟斤拷锟斤拷
public virtual ushort[] GetName() { return null;}
public virtual byte[] GetNativeName() { return null;}
// 锟斤拷锟斤拷锟斤拷锟?,锟斤拷skill_type
public virtual byte GetType() { return 1; }
// 锟斤拷锟斤拷图锟斤拷
public virtual byte[] GetIcon() { return null; }
// 锟斤拷锟斤拷说锟斤拷
public virtual ushort[] GetIntroduction(string buf,int len,SkillStr table) { return new ushort[0]; }
// 锟斤拷锟斤拷职业锟斤拷锟斤拷
public virtual int GetCls() { return -1; }
// 锟斤拷锟斤拷锟斤拷却时锟戒,锟斤拷位锟斤拷锟斤拷
public virtual int GetCoolingTime() { return 5000; }
// 锟斤拷锟斤拷执锟斤拷时锟戒,锟斤拷位锟斤拷锟斤拷
public virtual int GetExecuteTime() { return 1000; }
// 目锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷, 0:锟斤拷锟斤拷目锟疥,1:锟斤拷要目锟疥,2:目锟斤拷锟斤拷锟斤拷锟绞?锟斤拷, 3:目锟斤拷锟斤拷锟轿?锟斤拷锟斤拷, 4:目锟斤拷锟斤拷锟轿?锟斤拷锟斤拷
public virtual int GetTargetType(){return 0;}
// 锟斤拷锟斤拷锟斤拷效锟酵放撅拷锟斤拷: <-0.001锟斤拷锟斤拷目锟斤拷 -0.001-0.001 默锟较癸拷锟斤拷锟斤拷锟诫,>0.001 锟酵放撅拷锟斤拷
public virtual float GetPrayRange(float range, float prayplus) { return 0; }
// 锟斤拷锟斤拷锟斤拷锟芥级锟斤拷
public virtual int GetRank() { return 0; }
// 学习n锟斤拷锟斤拷锟斤拷要锟斤拷锟斤拷锟揭硷拷锟斤拷
public virtual int GetRequiredLevel() { return 0;}
// 学习n锟斤拷锟斤拷锟斤拷锟斤拷要锟侥硷拷锟杰碉拷
public virtual int GetRequiredSp() { return 0;}
// 学习n锟斤拷锟斤拷要锟侥硷拷锟斤拷锟斤拷
public virtual int GetRequiredBook() { return 0;}
// 学习锟斤拷要锟斤拷钱
public virtual int GetRequiredMoney() { return 0;}
// 学习锟斤拷锟襟境斤拷燃锟?
public virtual int GetRequiredRealmLevel() { return 0; }
// 前锟结技锟斤拷
public virtual Dictionary<uint, int> GetRequiredSkill() => new Dictionary<uint, int>();
// 锟斤拷示顺锟斤拷
public virtual int GetShowOrder() { return 0; }
// 锟斤拷锟矫硷拷锟杰硷拷锟斤拷
public virtual int SetLevel(int level) { return 0; }
// 锟斤拷锟斤拷锟斤拷蠹侗锟?
public virtual int GetMaxLevel() { return 0; }
// 锟角凤拷锟斤拷锟斤拷锟斤拷锟斤拷
public virtual bool IsWarmup() { return false; }
// 使锟矫猴拷锟角凤拷锟皆讹拷锟斤拷锟斤拷
public virtual bool IsAutoAttack(){return false;}
// 瞬锟斤拷锟斤拷锟斤拷
public virtual bool IsInstant(){return false;}
// 锟角凤拷锟斤拷锟斤拷锟斤拷锟?
public virtual bool IsDurative() { return false; }
// 杀锟剿凤拷围锟斤拷锟斤拷锟斤拷
public virtual int GetRangeType() { return 0; }
// 锟酵放伙拷锟斤拷锟斤拷锟斤拷锟叫★拷锟斤拷锟芥、水锟斤拷
public virtual int GetCastEnv() { return 0; }
// 锟斤拷取小锟斤拷锟斤拷学习锟斤拷锟酵放硷拷锟斤拷锟斤拷锟斤拷锟届赋锟斤拷
public virtual int GetRequiredGenius(int idSkill) { return 0; }
// 效锟斤拷锟侥硷拷锟斤拷
public virtual byte[] GetEffect() { return null;}
public virtual byte[] GetElseEffect() { return null;}
// 使锟斤拷锟斤拷要MP
public virtual int GetMpCost(){return 1;}
// 使锟斤拷锟斤拷要AP
public virtual int GetApCost(){return 0;}
// 锟斤拷支锟斤拷锟斤拷
public virtual int GetArrowCost(){return 0;}
// 锟斤拷锟斤拷锟斤拷锟斤拷锟叫讹拷
public virtual bool ValidWeapon(int w) { return true; }
// 0, 锟缴癸拷锟斤拷1锟斤拷锟斤拷锟斤拷锟斤拷匹锟戒;2, mp锟斤拷锟姐;3锟斤拷位锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟姐;4锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷悖?5锟斤拷锟斤拷锟斤拷ID, 6锟斤拷未选锟斤拷目锟斤拷
public int Condition(UseRequirement info)
{
return 0;
}
public virtual bool IsAllowLand(){ return true; }
public virtual bool IsAllowWater(){ return true; }
public virtual bool IsAllowAir(){ return true; }
public virtual bool GetNotuseInCombat(){ return false; }
//锟角凤拷锟狡讹拷施锟斤拷
public virtual bool IsMovingSkill() { return false; }
// 锟斤拷锟斤拷锟杰凤拷锟节碉拷前锟斤拷锟斤拷状态锟斤拷使锟斤拷
public bool IsValidForm(byte form)
{
byte form_type = (byte)((form & FORM_MASK_HIGH) >> 6);
return ((GetAllowForms() & (1 << form_type))!=0);
}
public virtual byte GetAllowForms() { return 0; }
public virtual bool Interrupt() { return true; }
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: fc68b472f6584455b9960c566b282a3e
+168
View File
@@ -0,0 +1,168 @@
using System.Collections.Generic;
namespace BrewMonster.Scripts.Skills
{
public class Range
{
/// <summary>0=point 1=line 2=self sphere 3=target sphere 4=cone 5=self</summary>
public char type; // 0点 1线 2自身球 3目标球 4圆锥形 5自身
public bool IsPoint() { return type == 0; }
public bool IsLine() { return type == 1; }
public bool IsSelfBall() { return type == 2; }
public bool IsTargetBall() { return type == 3; }
public bool IsSector() { return type == 4; }
public bool IsSelf() { return type == 5; }
public bool NoTarget() { return type == 2 || type == 5; }
}
// 占位技能类 // Placeholder Skill class
public class Skill : ElementSkill
{
}
public abstract class SkillStub
{
public const int MIN_LEVEL = 1;
public const int MAX_LEVEL = 10;
// Base info
public uint id; // 唯一锟斤拷锟街憋拷识 // Unique identifier
public int cls; // 职业 // Class/Profession
public ushort[] name; // 锟斤拷锟斤拷锟斤拷锟斤拷 // Skill name
public byte[] nativename; // 锟斤拷锟斤拷锟斤拷 // Native name
public byte[] icon; // 锟斤拷锟斤拷图锟斤拷 // Skill icon
public int max_level; // 锟斤拷锟斤拷锟斤拷蠹侗锟? // Maximum level
public byte type; // 锟斤拷锟斤拷锟斤拷锟? 1锟斤拷锟斤拷锟斤拷锟斤拷 2锟斤拷锟斤拷锟斤拷锟斤拷 3锟斤拷锟斤拷锟劫伙拷 4锟斤拷锟斤拷 5锟斤拷锟斤拷 // Skill type: 1-Normal 2-Special 3-Partner 4-Mount 5-Other
// Execute condition
public bool allow_ride; // 锟斤拷锟斤拷锟叫? // Allow while riding
public short attr; // 锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷, 1锟斤拷锟斤拷锟斤拷2锟斤拷3木锟斤拷4水锟斤拷5锟斤拷6锟斤拷 锟斤拷选一 默锟较o拷锟斤拷锟斤拷锟斤拷 // Attribute: 1-Metal 2-Earth 3-Wood 4-Water 5-Fire 6-Special (Choose one, default none)
public int rank; // 锟斤拷锟芥级锟斤拷 // Rank
public int eventflag; // Event flag
public byte is_senior; // Senior flag
public bool is_inherent; // 锟斤拷锟斤拷锟斤拷锟杰o拷锟斤拷锟斤拷学锟斤拷锟斤拷锟斤拷 // Inherent skill, cannot be learned
public bool is_movingcast; // 锟狡讹拷施锟斤拷 // Can cast while moving
public int npcdelay; // NPC delay
public int showorder; // Display order
public byte allow_forms; // Allowed forms
public int apcost; // AP cost
public int apgain; // AP gain
public byte doenchant; // Do enchant
public byte dobless; // Do bless
public int arrowcost; // Arrow cost
public Dictionary<uint, int> pre_skills;
// Execute condition
public bool allow_land; // 陆地有效 // Effective on land
public bool allow_air; // 空中有效 // Effective in air
public bool allow_water; // 水中有效 // Effective in water
public bool notuse_in_combat; // 战斗状态不可用 // Cannot use in combat state
public int restrict_corpse; // 只对尸体有效 // Only effective on corpses
public bool restrict_change; // 是否可以变身 // Whether can transform
public bool restrict_attach; // 是否可以附身 // Whether can possess
public bool auto_attack; // 使用后是否自动攻击 // Whether to auto attack after use
public char time_type; // 瞬发类型 // Instant cast type
public char long_range;
public char posdouble; // 位置选择 // Position selection
public int clslimit; // 职业限制 // Class restriction
public int commoncooldown; // 公共冷却mask bit0-4 技能冷却0-4 bit5-9 物品冷却0-4
// Common cooldown mask bit0-4 skill cooldown 0-4 bit5-9 item cooldown 0-4
public int commoncooldowntime; // 冷却时间,单位毫秒 // Cooldown time in milliseconds
public int itemcost; // 释放时消耗物品 >0有效 // Item cost when casting, effective if >0
// 连击相关 // Combo related
public int combosk_preskill;
public int combosk_interval;
public int combosk_nobreak;
public byte[] effect;
public byte[] aerial_effect;
public Range range;
public bool has_stateattack;
public List<int> restrict_weapons;
public static Dictionary<uint, SkillStub> map;
public static Dictionary<uint, SkillStub> GetMap() => map;
public static Dictionary<uint, List<uint>> inheritSkillMap = new();
public static List<uint> GetInherentSkillList(uint cls)
{
return inheritSkillMap[cls];
}
public static Dictionary<uint, List<uint>> comboSkillMap;
public static Dictionary<uint, List<uint>> GetComboSkMap() => comboSkillMap;
public static SkillStub GetStub(uint i)
{
return GetMap().TryGetValue(i, out var stub) ? stub : null;
}
public static void InitStaticData()
{
var map = GetMap();
foreach (var skill in map)
{
SkillStub sk = skill.Value;
if (sk.is_inherent) GetInherentSkillList((uint)sk.cls).Add(sk.id);
if (sk.combosk_preskill > 0) GetComboSkMap()[(uint)sk.combosk_preskill].Add(sk.id);
}
}
public List<uint> GetPostComboSkill(uint id)
{
var m = GetComboSkMap();
if (m.TryGetValue(id, out var list)) return list;
return null;
}
// 以下为从C++转换的接口 // The following methods are converted from C++
public uint GetId() { return id; }
public int GetCls() { return cls; }
public ushort[] GetName() { return name; }
public byte[] GetIcon() { return icon; }
public int GetMaxLevel() { return max_level; }
public Range GetRange() { return range; }
public int GetItemCost() { return itemcost; }
public bool IsMovingSkill() { return is_movingcast; }
public new byte GetType() { return type; } // 隐藏System.Object.GetType // Hide System.Object.GetType
// 运行时相关虚函数 // Runtime-related virtual functions
public virtual int GetCoolingtime(Skill skill) { return 0; }
public virtual int GetRequiredSp(Skill skill) { return 0; }
public virtual int GetRequiredLevel(Skill skill) { return 0; }
public virtual int GetMaxAbility(Skill skill) { return 0; }
public virtual int GetRequiredItem(Skill skill) { return 0; }
public virtual int GetRequiredMoney(Skill skill) { return 0; }
public virtual int GetRequiredRealmLevel(Skill skill) { return 0; }
public virtual float GetPraydistance(Skill skill) { return 0f; }
public virtual float GetMpcost(Skill skill) { return 0f; }
public virtual int GetExecutetime(Skill skill) { return 1000; }
public virtual bool CheckHpCondition(int hp, int max_hp) { return true; }
public virtual bool CheckComboSkExtraCondition(Skill skill) { return true; }
public virtual int GetIntroduction(Skill skill, ushort[] descBuffer, int descBufferLen, ushort[] titleBuffer) { return 0; }
// 武器有效性检查 // Validate weapon restriction
public bool ValidWeapon(int weapon)
{
if (restrict_weapons != null)
{
int i;
for (i = 0; i < restrict_weapons.Count; i++)
{
if (weapon == restrict_weapons[i])
return true;
}
if (i > 0 && i >= restrict_weapons.Count)
return false;
}
return true;
}
}
}
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: d862905bd32244cdbb4755279b5e84cd
timeCreated: 1760588062