diff --git a/Assets/NetworkLib/Debug/netstandard2.1/CSNetwork.dll b/Assets/NetworkLib/Debug/netstandard2.1/CSNetwork.dll index 6c1836ca4b..372deb8d5a 100644 Binary files a/Assets/NetworkLib/Debug/netstandard2.1/CSNetwork.dll and b/Assets/NetworkLib/Debug/netstandard2.1/CSNetwork.dll differ diff --git a/Assets/PerfectWorld/Scripts/Common/CECObject.cs b/Assets/PerfectWorld/Scripts/Common/CECObject.cs index 8a05d8a83f..971f7473fa 100644 --- a/Assets/PerfectWorld/Scripts/Common/CECObject.cs +++ b/Assets/PerfectWorld/Scripts/Common/CECObject.cs @@ -1,42 +1,42 @@ -using UnityEngine; +//using UnityEngine; -public class CECObject : MonoBehaviour -{ - protected uint m_dwBornStamp; - protected bool m_bBornInSight; - protected bool m_bSelectable; - protected int m_iCID; +//public class CECObject : MonoBehaviour +//{ +// protected uint m_dwBornStamp; +// protected bool m_bBornInSight; +// protected bool m_bSelectable; +// protected int m_iCID; - public virtual void SetUpCECObject() - { - m_dwBornStamp = 0; - m_bBornInSight = false; - m_bSelectable = false; - m_iCID = (int)ClassID.OCID_OBJECT; - } - public void SetBornStamp(uint dwStamp) { m_dwBornStamp = dwStamp; } - public void SetBornInSight(bool bFlag) { m_bBornInSight = bFlag; } - public void SetSelectable(bool bSelectable) { m_bSelectable = bSelectable; } - public enum ClassID - { - OCID_OBJECT = 0, - OCID_PLAYER, - OCID_HOSTPLAYER, - OCID_ELSEPLAYER, - OCID_LOGINPLAYER, - OCID_NPC, - OCID_MONSTER, - OCID_SERVER, - OCID_MATTER, - OCID_PET, - OCID_CLONED_PLAYER, // 复制角色模型 - OCID_HOST_NAVIGATER, // 纯客户端player类,用于强制移动 - OCID_NPCCLONED_MASTER, // NPC 复制的角色模型 - }; - public enum EnviromentMoveType - { - MOVEENV_GROUND = 0, // Move on ground - MOVEENV_WATER, - MOVEENV_AIR, - } -} \ No newline at end of file +// public virtual void SetUpCECObject() +// { +// m_dwBornStamp = 0; +// m_bBornInSight = false; +// m_bSelectable = false; +// m_iCID = (int)ClassID.OCID_OBJECT; +// } +// public void SetBornStamp(uint dwStamp) { m_dwBornStamp = dwStamp; } +// public void SetBornInSight(bool bFlag) { m_bBornInSight = bFlag; } +// public void SetSelectable(bool bSelectable) { m_bSelectable = bSelectable; } +// public enum ClassID +// { +// OCID_OBJECT = 0, +// OCID_PLAYER, +// OCID_HOSTPLAYER, +// OCID_ELSEPLAYER, +// OCID_LOGINPLAYER, +// OCID_NPC, +// OCID_MONSTER, +// OCID_SERVER, +// OCID_MATTER, +// OCID_PET, +// OCID_CLONED_PLAYER, // 复制角色模型 +// OCID_HOST_NAVIGATER, // 纯客户端player类,用于强制移动 +// OCID_NPCCLONED_MASTER, // NPC 复制的角色模型 +// }; +// public enum EnviromentMoveType +// { +// MOVEENV_GROUND = 0, // Move on ground +// MOVEENV_WATER, +// MOVEENV_AIR, +// } +//} \ No newline at end of file diff --git a/Assets/PerfectWorld/Scripts/Managers/CECNPCMan.cs b/Assets/PerfectWorld/Scripts/Managers/CECNPCMan.cs index 21717cb448..a1607d9a21 100644 --- a/Assets/PerfectWorld/Scripts/Managers/CECNPCMan.cs +++ b/Assets/PerfectWorld/Scripts/Managers/CECNPCMan.cs @@ -7,9 +7,6 @@ using System.Buffers.Binary; using System.Collections.Generic; using System.Runtime.InteropServices; using UnityEngine; -using UnityEngine.LightTransport; -using static CECNPC; -using static CECObject; public class CECNPCMan : CECObject, IMsgHandler { @@ -21,7 +18,7 @@ public class CECNPCMan : CECObject, IMsgHandler public CECNPCMan() { m_vServerPos = Vector3.zero; - m_iCID = (int)ClassID.OCID_MONSTER; + m_iCID = (int)Class_ID.OCID_MONSTER; } public bool ProcessMessage(ECMSG Msg) { diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_HPWork.cs b/Assets/PerfectWorld/Scripts/Managers/EC_HPWork.cs index df1793511a..91939111ec 100644 --- a/Assets/PerfectWorld/Scripts/Managers/EC_HPWork.cs +++ b/Assets/PerfectWorld/Scripts/Managers/EC_HPWork.cs @@ -1,6 +1,3 @@ -using DG.Tweening; -using System.Collections.Generic; -using UnityEngine; using WorkList = System.Collections.Generic.List; public class CECHPWork : CECObjectWork @@ -423,36 +420,71 @@ public class CECHPWorkMan } } - void CancelWork(CECHPWork pWork) + public void CancelWork(CECHPWork pWork) { } - void CancelWorkAtPriority(int iPriority) + public void CancelWorkAtPriority(int iPriority) { } - bool DelayWork(int iPriority, CECHPWork pWork) + public bool DelayWork(int iPriority, CECHPWork pWork) { return false; } - void StartDelayedWork() + public void StartDelayedWork() { } - void ClearDelayedWork() + public void ClearDelayedWork() { } - CECHPWork GetDelayedWork() + public CECHPWork GetDelayedWork() { return m_Delayed.pWork; } - bool ValidatePriority(int iPriority) + public bool ValidatePriority(int iPriority) { return iPriority >= 0 && iPriority < Work_priority.NUM_PRIORITY; } + + public bool StartWork(int iPriority, CECHPWork pWork, bool bNoDelay = false) + { + //if (!pWork) + //{ + // ASSERT(false); + // return false; + //} + //if (!ValidatePriority(iPriority)) + //{ + // ASSERT(false); + // delete pWork; + // return false; + //} + //if (pWork->GetWorkID() == CECHPWork::WORK_TRACEOBJECT) + //{ + // if (g_pGame->GetGameRun()->GetHostInputFilter()->IsMoveUsagePressed()) + // { + // CECHPWorkTrace* pWorkTrace = dynamic_cast(pWork); + // if (!pWorkTrace->CanTouch()) + // { // 2014-8-16 当还在通过键盘操纵移动时、有条件忽略 CECHPWorkTrace, + // delete pWorkTrace; // 否则会因 CECHPWorkTrace 中临时转向目标位置、而后又被键盘操纵调整移动方向导致方向瞬间抖动 + // return false; // 当 CECHPWorkTrace 中目标可立即接触时,不忽略 CECHPWorkTrace,以实现键盘控制移动中、对某怪应用技能时,立刻转向怪施放技能 + // } + // } + //} + //if (!bNoDelay && DelayWork(iPriority, pWork)) + //{ + // return true; + //} + //return InternallyStartWork(iPriority, pWork); + } + public bool StartWork_p0(CECHPWork pWork, bool bNoDelay = false) { return StartWork(Work_priority.PRIORITY_0, pWork, bNoDelay); } + public bool StartWork_p1(CECHPWork pWork, bool bNoDelay = false) { return StartWork(Work_priority.PRIORITY_1, pWork, bNoDelay); } + public bool StartWork_p2(CECHPWork pWork, bool bNoDelay = false) { return StartWork(Work_priority.PRIORITY_2, pWork, bNoDelay); } } public abstract class CECHPWorkPostTickCommand @@ -485,4 +517,47 @@ public class CECHPWorkGeneralMatcher : CECHPWorkMatcher m_priority = priority; m_matchDelayedWork = bIncludeDelayedWork; } -} +} + +public class CECHPWorkPostTickRunWorkCommand : CECHPWorkPostTickCommand +{ + CECHPWork m_pWork; + int m_iPriority; + bool m_bNoDelay; + bool m_bShouldTick; + uint m_dwTickTime; + + // Constructor + public CECHPWorkPostTickRunWorkCommand( + CECHPWork pWork, + bool bNoDelay = false, + int iPriority = CECHPWorkMan.Work_priority.PRIORITY_1, + bool bShouldTick = false, + uint dwTickTime = 0) + { + m_pWork = pWork; + m_bNoDelay = bNoDelay; + m_iPriority = iPriority; + m_bShouldTick = bShouldTick; + m_dwTickTime = dwTickTime; + } + + public override bool Run(CECHPWorkMan pWorkMan) + { + if (m_pWork == null || pWorkMan == null) + { + return false; + } + if (!pWorkMan.StartWork(m_iPriority, m_pWork, m_bNoDelay)) + { + m_pWork = null; + return false; + } + if (m_bShouldTick) + { + m_pWork.Tick(m_dwTickTime); + } + m_pWork = null; + return true; + } +}; diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkMelee.cs b/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkMelee.cs index c5bff68208..9c94e94251 100644 --- a/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkMelee.cs +++ b/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkMelee.cs @@ -1,5 +1,6 @@ using BrewMonster; using CSNetwork.GPDataType; +using PerfectWorld.Scripts.Managers; using PerfectWorld.Scripts.Player; using UnityEngine; @@ -68,7 +69,7 @@ class CECHPWorkMelee : CECHPWork } else if (GPDataTypeHelper.ISNPCID(m_idTarget)) { - CECNPC pNPC = g_pGame.GetGameRun().GetWorld().GetNPCMan().GetNPC(m_idTarget); + CECNPC pNPC = EC_ManMessageMono.Instance._CECNPCMan.GetNPC(m_idTarget); if (!pNPC || pNPC.IsDead()) // Taget has missed ? return true; diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_Object.cs b/Assets/PerfectWorld/Scripts/Managers/EC_Object.cs index 1f356d9546..a9a950fc37 100644 --- a/Assets/PerfectWorld/Scripts/Managers/EC_Object.cs +++ b/Assets/PerfectWorld/Scripts/Managers/EC_Object.cs @@ -8,7 +8,7 @@ using UnityEngine; // /////////////////////////////////////////////////////////////////////////// -class CECObject : MonoBehaviour +public class CECObject : MonoBehaviour { // Class ID public static class Class_ID @@ -60,8 +60,18 @@ class CECObject : MonoBehaviour m_bSelectable = true; } - // Tick routine - public bool Tick(float dwDeltaTime) + public virtual void SetUpCECObject() + { + m_dwBornStamp = 0; + m_bBornInSight = false; + m_bSelectable = false; + m_iCID = (int)Class_ID.OCID_OBJECT; + } + + public void SetSelectable(bool bSelectable) { m_bSelectable = bSelectable; } + + // Tick routine + public bool Tick(float dwDeltaTime) { if (m_bAdjustOrient) AdjustOrientation(dwDeltaTime); @@ -129,7 +139,7 @@ class CECObject : MonoBehaviour return v / mag; } - private A3DVECTOR3 GetPos() + public A3DVECTOR3 GetPos() { return new A3DVECTOR3(transform.position.x, transform.position.y, transform.position.z); } @@ -202,7 +212,6 @@ class CECObject : MonoBehaviour { } - public void SetSelectable(bool bSelectable) { m_bSelectable = bSelectable; } protected void AdjustOrientation(float dwDeltaTime) { diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_RoleTypes.cs b/Assets/PerfectWorld/Scripts/Managers/EC_RoleTypes.cs new file mode 100644 index 0000000000..423543ee84 --- /dev/null +++ b/Assets/PerfectWorld/Scripts/Managers/EC_RoleTypes.cs @@ -0,0 +1,6 @@ +using UnityEngine; + +public class EC_RoleTypes +{ + +} diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_RoleTypes.cs.meta b/Assets/PerfectWorld/Scripts/Managers/EC_RoleTypes.cs.meta new file mode 100644 index 0000000000..7323269a1f --- /dev/null +++ b/Assets/PerfectWorld/Scripts/Managers/EC_RoleTypes.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 2a00af48d21485d46bf5bae22e8b09f9 \ No newline at end of file diff --git a/Assets/PerfectWorld/Scripts/NPC/CECNPC.cs b/Assets/PerfectWorld/Scripts/NPC/CECNPC.cs index fcc0a6ecf7..7566393375 100644 --- a/Assets/PerfectWorld/Scripts/NPC/CECNPC.cs +++ b/Assets/PerfectWorld/Scripts/NPC/CECNPC.cs @@ -1,7 +1,6 @@ 锘縰sing CSNetwork.GPDataType; using System.Text; using System; -using UnityEditor.Rendering; using UnityEngine; using BrewMonster; using CSNetwork; @@ -22,7 +21,7 @@ public class CECNPC : CECObject protected float m_fDistToHost; protected float m_fDistToHostH; protected OtherPlayer_Move_Info m_cdr; - protected float m_fTouchRad; + protected float m_fTouchRad = 1f; protected ROLEBASICPROP m_BasicProps; protected Vector3 m_vMoveDir; protected int m_iPassiveMove; @@ -48,7 +47,7 @@ public class CECNPC : CECObject { base.SetUpCECObject(); m_vServerPos = new Vector3(); - m_iCID = (int)ClassID.OCID_NPC; + m_iCID = (int)Class_ID.OCID_NPC; } public virtual bool Init(int tid, in info_npc info, ReadOnlySpan packet, int infoOffset) { @@ -73,9 +72,9 @@ public class CECNPC : CECObject _characterController = GetComponent(); - m_iMoveEnv = (int)((info.state & PlayerNPCState.GP_STATE_NPC_FLY) != 0 ? EnviromentMoveType.MOVEENV_AIR - : (info.state & PlayerNPCState.GP_STATE_NPC_SWIM) != 0 ? EnviromentMoveType.MOVEENV_WATER - : EnviromentMoveType.MOVEENV_GROUND); + m_iMoveEnv = (int)((info.state & PlayerNPCState.GP_STATE_NPC_FLY) != 0 ? Move_environment.MOVEENV_AIR + : (info.state & PlayerNPCState.GP_STATE_NPC_SWIM) != 0 ? Move_environment.MOVEENV_WATER + : Move_environment.MOVEENV_GROUND); var npcVisual = GetComponent(); m_pNPCModelPolicy.SetNpcVisual(npcVisual); @@ -797,8 +796,10 @@ public class CECNPC : CECObject } } bool IsMonsterOrPet() { return IsMonsterNPC() || IsPetNPC(); } - bool IsMonsterNPC() { return (int)ClassID.OCID_MONSTER == m_iCID; } - bool IsPetNPC() { return (int)ClassID.OCID_PET == m_iCID; } + bool IsMonsterNPC() { return (int)Class_ID.OCID_MONSTER == m_iCID; } + bool IsPetNPC() { return (int)Class_ID.OCID_PET == m_iCID; } + + public bool IsDead(){ return (m_dwStates & PlayerNPCState.GP_STATE_CORPSE) != 0; } public void PlayMoveAction(int iMoveMode) { BrewMonster.BMLogger.LogError($"HoangDev: PlayMoveAction {iMoveMode}"); @@ -850,6 +851,8 @@ public class CECNPC : CECObject } bool IsDisappearing() { return m_DisappearCnt == 0 ? true : false; } + public float GetTouchRadius() { return m_fTouchRad; } + bool IsLag(float fDist) { return m_iPassiveMove == 0 && fDist > MAX_LAGDIST; diff --git a/Assets/PerfectWorld/Scripts/Players/EC_ElsePlayer.cs b/Assets/PerfectWorld/Scripts/Players/EC_ElsePlayer.cs index 43a07b88b9..ce0212975c 100644 --- a/Assets/PerfectWorld/Scripts/Players/EC_ElsePlayer.cs +++ b/Assets/PerfectWorld/Scripts/Players/EC_ElsePlayer.cs @@ -445,7 +445,7 @@ namespace PerfectWorld.Scripts.Player m_aabbServer.CompleteMinsMaxs(); } - private A3DVECTOR3 GetPos() + public A3DVECTOR3 GetPos() { A3DVECTOR3 result = new A3DVECTOR3(); result.x = transform.position.x; @@ -518,6 +518,11 @@ namespace PerfectWorld.Scripts.Player return iAction; } + + //public A3DVECTOR3 GetPos() + //{ + // return new A3DVECTOR3(transform.position.x, transform.position.y, transform.position.z); + //} } // Player appear flag diff --git a/Assets/Scripts/CECHostPlayer.cs b/Assets/Scripts/CECHostPlayer.cs index 12f9d5cf11..e2c12bf6ed 100644 --- a/Assets/Scripts/CECHostPlayer.cs +++ b/Assets/Scripts/CECHostPlayer.cs @@ -233,34 +233,34 @@ public class CECHostPlayer : EC_Player switch (cmd) { case CommandID.EQUIP_ITEM: - { + { byte index_inv = data[0]; byte index_equip = data[1]; - // Update client-side data: move item between PACK_INVENTORY and PACK_EQUIPMENT - var invItem = EC_Inventory.GetItem(EC_Inventory.PACK_INVENTORY, index_inv, true); - var equipItem = EC_Inventory.GetItem(EC_Inventory.PACK_EQUIPMENT, index_equip, true); - if (invItem != null) - { - invItem.Package = EC_Inventory.PACK_EQUIPMENT; - invItem.Slot = index_equip; - EC_Inventory.SetItem(EC_Inventory.PACK_EQUIPMENT, index_equip, invItem); - } - if (equipItem != null) - { - equipItem.Package = EC_Inventory.PACK_INVENTORY; - equipItem.Slot = index_inv; - EC_Inventory.SetItem(EC_Inventory.PACK_INVENTORY, index_inv, equipItem); - } + // Update client-side data: move item between PACK_INVENTORY and PACK_EQUIPMENT + var invItem = EC_Inventory.GetItem(EC_Inventory.PACK_INVENTORY, index_inv, true); + var equipItem = EC_Inventory.GetItem(EC_Inventory.PACK_EQUIPMENT, index_equip, true); + if (invItem != null) + { + invItem.Package = EC_Inventory.PACK_EQUIPMENT; + invItem.Slot = index_equip; + EC_Inventory.SetItem(EC_Inventory.PACK_EQUIPMENT, index_equip, invItem); + } + if (equipItem != null) + { + equipItem.Package = EC_Inventory.PACK_INVENTORY; + equipItem.Slot = index_inv; + EC_Inventory.SetItem(EC_Inventory.PACK_INVENTORY, index_inv, equipItem); + } - // Trigger UI refresh if an EC_InventoryUI is present in scene - var ui = GameObject.FindObjectOfType(); - if (ui != null) - { - ui.RefreshAll(); - } + // Trigger UI refresh if an EC_InventoryUI is present in scene + var ui = GameObject.FindObjectOfType(); + if (ui != null) + { + ui.RefreshAll(); + } - break; - } + break; + } } } public void OnMsgHstOwnItemInfo(ECMSG Msg) @@ -487,7 +487,7 @@ public class CECHostPlayer : EC_Player bool bUseAutoPF = false; //CECPlayerWrapper* pWrapper = CECAutoPolicy::GetInstance().GetPlayerWrapper(); //if (CECAutoPolicy::GetInstance().IsAutoPolicyEnabled() && pWrapper.GetAttackError() >= 2) - bUseAutoPF = true; + bUseAutoPF = true; CECHPWorkTrace pWorkTrace = null; CECHPWork pWork = null; @@ -686,7 +686,78 @@ public class CECHostPlayer : EC_Player return iRet; } + private float A3d_Magnitude(A3DVECTOR3 v) + { + return Mathf.Sqrt(v.x * v.x + v.y * v.y + v.z * v.z); + } + public bool CannotAttack() { return (m_dwLIES & (uint)Logic_Influence_Extned_states.LIES_DISABLEFIGHT) != 0; } + + public bool CanTouchTarget(A3DVECTOR3 vHostPos, A3DVECTOR3 vTargetPos, float fTargetRad, int iReason, float fMaxCut = 1.0f) + { + float fDist = A3d_Magnitude(vTargetPos - vHostPos); + switch (iReason) + { + case 1: // melee + { + float fRange; + if (fMaxCut >= 0.0f) + { + float fCutDist = m_ExtProps.ak.AttackRange * 0.3f; + if (fCutDist > fMaxCut) + fCutDist = fMaxCut; + + fRange = m_ExtProps.ak.AttackRange - fCutDist; + } + + else + fRange = m_ExtProps.ak.AttackRange * 0.7f; + + if (fDist - fTargetRad <= fRange) + return true; + + break; + } + //case 2: // cast magic + //{ + // if (m_pPrepSkill) + // { + // float fRange = m_pPrepSkill->GetCastRange(m_ExtProps.ak.AttackRange, GetPrayDistancePlus()); + // if (fRange > 0.0f) + // { + // if (fDist - fTargetRad <= fRange) + // return true; + // } + // else + // return true; + // } + + // break; + //} + case 3: // talk + { + if (fDist - fTargetRad <= 5.0f) + return true; + + break; + } + default: // no special reason + { + if (fDist < (fTargetRad + m_fTouchRad) * 3.0f) + return true; + + break; + } + } + + return false; + } + + public bool CanTouchTarget(A3DVECTOR3 vTargetPos, float fTargetRad, int iReason, float fMaxCut = 1.0f) + { + A3DVECTOR3 vector = new A3DVECTOR3(gameObject.transform.position.x, gameObject.transform.position.y, gameObject.transform.position.z); + return CanTouchTarget(vector, vTargetPos, fTargetRad, iReason, fMaxCut); + } } public enum StateAnim diff --git a/Assets/Scripts/Move/EC_Player.cs b/Assets/Scripts/Move/EC_Player.cs index 80075e0ea7..b1c5ad744e 100644 --- a/Assets/Scripts/Move/EC_Player.cs +++ b/Assets/Scripts/Move/EC_Player.cs @@ -1,4 +1,5 @@ 锘縰sing BrewMonster; +using CSNetwork.GPDataType; using ModelRenderer.Scripts.GameData; using System; using System.Collections.Generic; @@ -14,6 +15,9 @@ public abstract class EC_Player : MonoBehaviour protected float rotationSpeed = 5; internal int m_iMoveMode; // Player's move mode internal int m_idSelTarget; // 脩隆脰脨脛驴卤锚碌脛ID + uint m_dwStates; // Player's basic states + protected ROLEEXTPROP m_ExtProps; // Extend properties + protected float m_fTouchRad = 0.3f; // Touch radius protected void Awake() { @@ -32,7 +36,10 @@ public abstract class EC_Player : MonoBehaviour { BuildActionList(); } - public bool IsValidAction(int iIndex) { return (iIndex >= 0 && iIndex < (int)PLAYER_ACTION_TYPE.ACT_MAX) ? true : false; } + + public bool IsDead(){ return (m_dwStates & PlayerNPCState.GP_STATE_CORPSE) != 0; } + + public bool IsValidAction(int iIndex) { return (iIndex >= 0 && iIndex < (int)PLAYER_ACTION_TYPE.ACT_MAX) ? true : false; } private static void BuildActionList() { if (_default_actions == null) @@ -272,6 +279,7 @@ public abstract class EC_Player : MonoBehaviour ACT_CASTSKILL // Ch峄 l脿 placeholder cho skill actions } + public float GetTouchRadius(){ return m_fTouchRad; } } public struct PlayActionEvent { diff --git a/Packages/packages-lock.json b/Packages/packages-lock.json index 438057a59d..8cb9f7c98f 100644 --- a/Packages/packages-lock.json +++ b/Packages/packages-lock.json @@ -17,7 +17,7 @@ "hash": "a7c6b49a0141a5bff9b1983e38137522ef61977d" }, "com.unity.ai.navigation": { - "version": "2.0.9", + "version": "2.0.8", "depth": 0, "source": "registry", "dependencies": { @@ -46,7 +46,7 @@ "url": "https://packages.unity.com" }, "com.unity.collab-proxy": { - "version": "2.9.3", + "version": "2.9.1", "depth": 0, "source": "registry", "dependencies": {}, @@ -71,7 +71,7 @@ "dependencies": {} }, "com.unity.ide.rider": { - "version": "3.0.37", + "version": "3.0.36", "depth": 0, "source": "registry", "dependencies": {