m
This commit is contained in:
@@ -1,11 +1,14 @@
|
||||
using BrewMonster;
|
||||
using BrewMonster.Network;
|
||||
using CSNetwork;
|
||||
using CSNetwork.GPDataType;
|
||||
using DG.Tweening;
|
||||
using PerfectWorld.Scripts.Managers.BrewMonster.Managers;
|
||||
using System;
|
||||
using System.Buffers.Binary;
|
||||
using System.Collections.Generic;
|
||||
using System.Runtime.InteropServices;
|
||||
using Unity.VisualScripting;
|
||||
using UnityEngine;
|
||||
|
||||
public class CECNPCMan : CECObject, IMsgHandler
|
||||
@@ -29,7 +32,7 @@ public class CECNPCMan : CECObject, IMsgHandler
|
||||
case long value when value == EC_MsgDef.MSG_NM_NPCINFO: OnMsgNPCInfo(Msg); break;
|
||||
case long value when value == EC_MsgDef.MSG_NM_NPCMOVE: OnMsgNPCMove(Msg); break;
|
||||
case long value when value == EC_MsgDef.MSG_NM_NPCSTOPMOVE: OnMsgNPCStopMove(Msg); break;
|
||||
case long value when value == EC_MsgDef. MSG_NM_NPCATKRESULT : TransmitMessage(Msg); break;
|
||||
case long value when value == EC_MsgDef.MSG_NM_NPCATKRESULT: TransmitMessage(Msg); break;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
@@ -42,7 +45,7 @@ public class CECNPCMan : CECObject, IMsgHandler
|
||||
{
|
||||
case long value when value == EC_MsgDef.MSG_NM_NPCATKRESULT:
|
||||
|
||||
nid = ((cmd_object_atk_result )msg.dwParam1).attacker_id;
|
||||
nid = ((cmd_object_atk_result)msg.dwParam1).attacker_id;
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
@@ -52,6 +55,101 @@ public class CECNPCMan : CECObject, IMsgHandler
|
||||
pNPC.ProcessMessage(msg);
|
||||
else
|
||||
{
|
||||
CECNPC pAttacker = GetNPCFromAll(nid);
|
||||
CECHostPlayer pHost = GameController.Instance.GetHostPlayer();
|
||||
EC_ManPlayer pPlayerMan = EC_ManMessageMono.Instance.GetECManPlayer;
|
||||
|
||||
int idTarget = (0);
|
||||
int dwModifier = (0);
|
||||
int nDamage = (0);
|
||||
|
||||
switch (msg.dwMsg)
|
||||
{
|
||||
case long value when value == EC_MsgDef.MSG_NM_NPCATKRESULT:
|
||||
{
|
||||
cmd_object_atk_result pCmd = (cmd_object_atk_result)msg.dwParam1;
|
||||
idTarget = pCmd.target_id;
|
||||
dwModifier = pCmd.attack_flag;
|
||||
nDamage = pCmd.damage;
|
||||
}
|
||||
break;
|
||||
|
||||
case long value when value == EC_MsgDef.MSG_NM_ENCHANTRESULT:
|
||||
{
|
||||
cmd_enchant_result pCmd = (cmd_enchant_result)msg.dwParam1;
|
||||
idTarget = pCmd.target;
|
||||
dwModifier = pCmd.attack_flag;
|
||||
//nDamage = (GNET::ElementSkill::GetType(pCmd.skill) == GNET::TYPE_ATTACK) ? -1 : -2;
|
||||
}
|
||||
break;
|
||||
|
||||
case long value when value == EC_MsgDef.MSG_NM_NPCSKILLRESULT:
|
||||
{
|
||||
cmd_object_skill_attack_result pCmd = (cmd_object_skill_attack_result)msg.dwParam1;
|
||||
idTarget = pCmd.target_id;
|
||||
dwModifier = pCmd.attack_flag;
|
||||
nDamage = pCmd.attack_flag;
|
||||
}
|
||||
break;
|
||||
}
|
||||
while (idTarget != 0)
|
||||
{
|
||||
if (UnityGameSession.Instance.GameSession.ISNPCID(idTarget))
|
||||
{
|
||||
// Bị tấn công là NPC
|
||||
var pTarget = GetNPCFromAll(idTarget);
|
||||
if (pTarget == null)
|
||||
{
|
||||
// Không tìm thấy NPC bị tấn công → thoát
|
||||
break;
|
||||
}
|
||||
|
||||
// Nếu là pet của chính người chơi
|
||||
if (pTarget.IsPetNPC() && pTarget.GetMasterID() == pHost.GetCharacterID())
|
||||
{
|
||||
// Pet của mình bị đánh → hiển thị damage
|
||||
pTarget.Damaged(nDamage,(uint) dwModifier);
|
||||
break;
|
||||
}
|
||||
|
||||
// Nếu attacker chưa xác định
|
||||
if (pAttacker == null)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
// Nếu attacker là pet của mình → cho phép hiển thị damage target
|
||||
if (pAttacker.IsPetNPC() && pAttacker.GetMasterID() == pHost.GetCharacterID())
|
||||
{
|
||||
//pTarget.Damaged(nDamage, dwModifier);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (UnityGameSession.Instance.GameSession.ISPLAYERID(idTarget))
|
||||
{
|
||||
// Bị tấn công là người chơi khác
|
||||
var pTarget = pPlayerMan.GetPlayer(idTarget);
|
||||
if (pTarget == null)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
if (pAttacker == null)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
// Nếu attacker là pet của mình → xử lý damage
|
||||
if (pAttacker.IsPetNPC() && pAttacker.GetMasterID() == pHost.GetCharacterID())
|
||||
{
|
||||
//pTarget.Damaged(nDamage, dwModifier);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
return true;
|
||||
@@ -164,8 +262,8 @@ public class CECNPCMan : CECObject, IMsgHandler
|
||||
CECNPC pNPC = SeekOutNPC(pCmd.idNPC);
|
||||
if (pNPC)
|
||||
{
|
||||
ROLEBASICPROP bp = pNPC.GetBasicProps();
|
||||
ROLEEXTPROP ep = pNPC.GetExtendProps();
|
||||
ROLEBASICPROP bp = pNPC.GetBasicProps();
|
||||
ROLEEXTPROP ep = pNPC.GetExtendProps();
|
||||
|
||||
bp.iCurHP = pCmd.iHP;
|
||||
ep.bs.max_hp = pCmd.iMaxHP;
|
||||
@@ -288,4 +386,20 @@ public class CECNPCMan : CECObject, IMsgHandler
|
||||
|
||||
return pNPC;
|
||||
}
|
||||
public CECNPC GetNPCFromAll(int nid)
|
||||
{
|
||||
CECNPC pNPC = GetNPC(nid);
|
||||
if (pNPC)
|
||||
return pNPC;
|
||||
|
||||
// Search from disappear array ?
|
||||
/* for (int i = 0; i < m_aDisappearNPCs.GetSize(); i++)
|
||||
{
|
||||
CECNPC* pNPC = m_aDisappearNPCs[i];
|
||||
if (pNPC->GetNPCID() == nid)
|
||||
return pNPC;
|
||||
}*/
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -205,7 +205,6 @@ namespace PerfectWorld.Scripts.Managers
|
||||
|
||||
preSize += iSize;
|
||||
}
|
||||
Debug.LogError("PLAYER_INFO_1_LIST");
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -343,6 +342,19 @@ namespace PerfectWorld.Scripts.Managers
|
||||
return player;
|
||||
}
|
||||
|
||||
public CECPlayer GetPlayer(int cid, uint dwBornStamp = 0/* 0 */)
|
||||
{
|
||||
CECHostPlayer pHost = GetHostPlayer();
|
||||
if (pHost && pHost.GetCharacterID() == cid)
|
||||
return pHost;
|
||||
else
|
||||
return GetElsePlayer(cid, dwBornStamp);
|
||||
}
|
||||
|
||||
private CECHostPlayer GetHostPlayer()
|
||||
{
|
||||
return GameController.Instance.GetHostPlayer();
|
||||
}
|
||||
|
||||
public bool OnMsgPlayerStopMove(ECMSG Msg)
|
||||
{
|
||||
|
||||
@@ -853,11 +853,68 @@ public class CECNPC : CECObject
|
||||
return (int)NPCActionIndex.ACT_NPC_WALK;
|
||||
}
|
||||
}
|
||||
bool IsMonsterOrPet() { return IsMonsterNPC() || IsPetNPC(); }
|
||||
bool IsMonsterNPC() { return (int)Class_ID.OCID_MONSTER == m_iCID; }
|
||||
bool IsPetNPC() { return (int)Class_ID.OCID_PET == m_iCID; }
|
||||
public void Damaged(int iDamage, uint dwModifier = 0)
|
||||
{
|
||||
// == Trường hợp 1: damage là -1 hoặc -2 (chỉ để hiển thị hiệu ứng)
|
||||
if (iDamage == -1 || iDamage == -2)
|
||||
{
|
||||
// Nếu -1 thì chơi animation bị thương
|
||||
if (iDamage == -1)
|
||||
PlayModelAction((int)NPCActionIndex.ACT_WOUNDED);
|
||||
|
||||
public bool IsDead(){ return (m_dwStates & PlayerNPCState.GP_STATE_CORPSE) != 0; }
|
||||
// Xét các kiểu modifier
|
||||
/* if ((dwModifier & CECAttackEvent.MOD_IMMUNE) != 0 && !IsImmuneDisable())
|
||||
BubbleText(BUBBLE_IMMUNE, 0);
|
||||
else if ((dwModifier & CECAttackEvent.MOD_NULLITY) != 0)
|
||||
BubbleText(BUBBLE_INVALIDHIT, 0);
|
||||
else if ((dwModifier & CECAttackEvent.MOD_ENCHANT_FAILED) != 0)
|
||||
BubbleText(BUBBLE_LOSE, 0);
|
||||
else if ((dwModifier & CECAttackEvent.MOD_SUCCESS) != 0)
|
||||
BubbleText(BUBBLE_SUCCESS, 0);
|
||||
else if ((dwModifier & CECAttackEvent.MOD_DODGE_DEBUFF) != 0)
|
||||
BubbleText(BUBBLE_DODGE_DEBUFF, 0);*/
|
||||
}
|
||||
else
|
||||
{
|
||||
// == Trường hợp 2: có damage thật
|
||||
/* bool bDeadlyStrike = (dwModifier & CECAttackEvent.MOD_CRITICAL_STRIKE) != 0;
|
||||
bool bRetort = (dwModifier & CECAttackEvent.MOD_RETORT) != 0;*/
|
||||
|
||||
if (iDamage > 0)
|
||||
{
|
||||
PlayModelAction((int)NPCActionIndex.ACT_WOUNDED);
|
||||
|
||||
/* int p1 = 0;
|
||||
if (bDeadlyStrike)
|
||||
p1 |= 0x0001;
|
||||
else if (bRetort)
|
||||
p1 |= 0x0002;*/
|
||||
|
||||
/* if ((dwModifier & CECAttackEvent.MOD_REBOUND) != 0)
|
||||
BubbleText(BUBBLE_REBOUND, (uint)iDamage);
|
||||
else if ((dwModifier & CECAttackEvent.MOD_BEAT_BACK) != 0)
|
||||
BubbleText(BUBBLE_BEAT_BACK, (uint)iDamage);
|
||||
else
|
||||
BubbleText(BUBBLE_DAMAGE, (uint)iDamage, p1);*/
|
||||
}
|
||||
/* else if ((dwModifier & CECAttackEvent.MOD_IMMUNE) != 0 && !IsImmuneDisable())
|
||||
BubbleText(BUBBLE_IMMUNE, 0);
|
||||
else if ((dwModifier & CECAttackEvent.MOD_NULLITY) != 0)
|
||||
BubbleText(BUBBLE_INVALIDHIT, 0);
|
||||
else if ((dwModifier & CECAttackEvent.MOD_ENCHANT_FAILED) != 0)
|
||||
BubbleText(BUBBLE_LOSE, 0);
|
||||
else if ((dwModifier & CECAttackEvent.MOD_SUCCESS) != 0)
|
||||
BubbleText(BUBBLE_SUCCESS, 0);
|
||||
else
|
||||
BubbleText(BUBBLE_HITMISSED, 0);*/
|
||||
}
|
||||
}
|
||||
|
||||
public int GetMasterID() { return m_idMaster; }
|
||||
public bool IsMonsterOrPet() { return IsMonsterNPC() || IsPetNPC(); }
|
||||
public bool IsMonsterNPC() { return (int)ClassID.OCID_MONSTER == m_iCID; }
|
||||
public bool IsPetNPC() { return (int)ClassID.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}");
|
||||
|
||||
@@ -536,7 +536,28 @@ namespace CSNetwork.GPDataType
|
||||
this.fWaterSurf = fWaterSurf;
|
||||
}
|
||||
};
|
||||
|
||||
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
||||
public struct cmd_enchant_result
|
||||
{
|
||||
public int caster;
|
||||
public int target;
|
||||
public int skill;
|
||||
public char level;
|
||||
public char orange_name;
|
||||
public int attack_flag;
|
||||
public byte section;
|
||||
};
|
||||
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
||||
public struct cmd_object_skill_attack_result
|
||||
{
|
||||
public int attacker_id;
|
||||
public int target_id;
|
||||
public int skill_id;
|
||||
public int damage;
|
||||
public int attack_flag; //±ê¼Ç¸Ã¹¥»÷ÊÇ·ñÓй¥»÷ÓÅ»¯·ûºÍ·ÀÓùÓÅ»¯·ûºÍÖØ»÷·¢Éú
|
||||
public char speed; //¹¥»÷ËÙ¶È speed * 50 ms
|
||||
public byte section;
|
||||
};
|
||||
// Gender
|
||||
public static class GENDER
|
||||
{
|
||||
@@ -582,7 +603,15 @@ namespace CSNetwork.GPDataType
|
||||
public byte dir;
|
||||
public byte move_mode;
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
||||
public struct cmd_object_atk_result
|
||||
{
|
||||
public int attacker_id;
|
||||
public int target_id;
|
||||
public int damage;
|
||||
public int attack_flag; //±ê¼Ç¸Ã¹¥»÷ÊÇ·ñÓй¥»÷ÓÅ»¯·ûºÍ·ÀÓùÓÅ»¯·ûºÍÖØ»÷·¢Éú
|
||||
public char speed; //¹¥»÷ËÙ¶È speed * 50 ms
|
||||
};
|
||||
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
||||
public struct A3DVECTOR3
|
||||
{
|
||||
|
||||
@@ -344,7 +344,7 @@ namespace CSNetwork
|
||||
int lenghtDataType = Marshal.SizeOf<int>();
|
||||
byte[] arrByteData = GetBytes(pDataBuf, lenghtDataType, 0);
|
||||
int idObjMove = BitConverter.ToInt32(arrByteData);
|
||||
if (IsPlayerId(idObjMove))
|
||||
if (ISPLAYERID(idObjMove))
|
||||
{
|
||||
EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYERMOVE, (int)MANAGER_INDEX.MAN_PLAYER, -1, pDataBuf, pCmdHeader, iHostID);
|
||||
}
|
||||
@@ -356,12 +356,12 @@ namespace CSNetwork
|
||||
break;
|
||||
case CommandID.OBJECT_STOP_MOVE:
|
||||
{
|
||||
int id = GPDataTypeHelper.FromBytes<int>(pDataBuf);
|
||||
if (IsPlayerId(id))
|
||||
int id1 = GPDataTypeHelper.FromBytes<int>(pDataBuf);
|
||||
if (ISPLAYERID(id1))
|
||||
{
|
||||
EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYERSTOPMOVE, (int)MANAGER_INDEX.MAN_PLAYER, -1, pDataBuf, pCmdHeader);
|
||||
}
|
||||
else if (ISNPCID(id))
|
||||
else if (ISNPCID(id1))
|
||||
{
|
||||
_logger.Info("HoangDev : NPC OBJECT_MOVE");
|
||||
EC_ManMessage.PostMessage(EC_MsgDef.MSG_NM_NPCSTOPMOVE, (int)MANAGER_INDEX.MAN_NPC, 0, pDataBuf, pCmdHeader);
|
||||
@@ -414,6 +414,18 @@ namespace CSNetwork
|
||||
case CommandID.TASK_VAR_DATA:
|
||||
EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_TASKDATA, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader, dwDataSize);
|
||||
break;
|
||||
case CommandID.BE_HURT:
|
||||
case CommandID.HURT_RESULT:
|
||||
EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_HURTRESULT, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
|
||||
break;
|
||||
case CommandID.OBJECT_ATTACK_RESULT:
|
||||
_logger.Info($"TASK_DATA: " + pCmdHeader);
|
||||
int id = GPDataTypeHelper.FromBytes<int>(pDataBuf);
|
||||
if (ISPLAYERID(id))
|
||||
EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_TASKDATA, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader, dwDataSize);
|
||||
else if (ISNPCID(id))
|
||||
EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_TASKDATA, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader, dwDataSize);
|
||||
break;
|
||||
case CommandID.ERROR_MESSAGE:
|
||||
_logger.Info($"### GameDataSend: ERROR_MESSAGE: {BitConverter.ToInt32(pDataBuf, 0)}");
|
||||
break;
|
||||
@@ -659,7 +671,7 @@ namespace CSNetwork
|
||||
// GC.SuppressFinalize(this);
|
||||
}
|
||||
|
||||
public bool IsPlayerId(int id)
|
||||
public bool ISPLAYERID(int id)
|
||||
{
|
||||
return id != 0 && (id & 0x80000000) == 0;
|
||||
}
|
||||
|
||||
@@ -28,6 +28,7 @@ namespace BrewMonster.Network
|
||||
private string _username = "";
|
||||
private string _password = "";
|
||||
|
||||
public GameSession GameSession => _gameSession;
|
||||
protected override void Awake()
|
||||
{
|
||||
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
|
||||
|
||||
@@ -7,7 +7,7 @@ using UnityEngine;
|
||||
|
||||
namespace PerfectWorld.Scripts.Player
|
||||
{
|
||||
public class EC_ElsePlayer : EC_Player
|
||||
public class EC_ElsePlayer : CECPlayer
|
||||
{
|
||||
A3DVECTOR3 m_vMoveDir; // Player's velocity
|
||||
A3DVECTOR3 m_vServerPos; // Player's real position on server
|
||||
|
||||
@@ -18,7 +18,7 @@ using UnityEngine.SceneManagement;
|
||||
using UnityEngine.UI;
|
||||
using Scene = UnityEngine.SceneManagement.Scene;
|
||||
|
||||
public class CECHostPlayer : EC_Player
|
||||
public class CECHostPlayer : CECPlayer
|
||||
{
|
||||
[SerializeField] private TextMeshPro txtName;
|
||||
[SerializeField] private CharacterController controller;
|
||||
@@ -468,7 +468,6 @@ public class CECHostPlayer : EC_Player
|
||||
if (txtName != null) txtName.text = roleName;
|
||||
transform.position = pos;
|
||||
SetModelHostPlayer();
|
||||
Debug.LogError("Pos Character = " + pos);
|
||||
joystick = FindAnyObjectByType<Joystick>();
|
||||
EventBus.Subscribe<JoystickRealeaseEvent>(JoystickRelease);
|
||||
EventBus.Subscribe<JoystickPressEvent>(JoystickStartDrag);
|
||||
|
||||
@@ -4,7 +4,7 @@ using System;
|
||||
using System.Collections;
|
||||
using System.Runtime.InteropServices;
|
||||
using UnityEngine;
|
||||
using static EC_Player;
|
||||
using static CECPlayer;
|
||||
|
||||
public static class EC_Utility
|
||||
{
|
||||
|
||||
@@ -54,7 +54,7 @@ public class GameController : MonoBehaviour
|
||||
Debug.LogError("null prefab");
|
||||
return;
|
||||
}
|
||||
EC_Player.InitStaticRes();
|
||||
CECPlayer.InitStaticRes();
|
||||
hostPlayer = Instantiate(characterPrefab, transform);
|
||||
hostPlayer.InitCharacter(info);
|
||||
cinemachineCamera.Follow = hostPlayer.transform;
|
||||
|
||||
@@ -5,11 +5,11 @@ public class InitializePlayer /*: IAutoInitialize*/
|
||||
{
|
||||
public void Dispose()
|
||||
{
|
||||
EC_Player.Dispose();
|
||||
CECPlayer.Dispose();
|
||||
}
|
||||
|
||||
public void Initialize()
|
||||
{
|
||||
EC_Player.InitStaticRes();
|
||||
CECPlayer.InitStaticRes();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -46,6 +46,9 @@ public abstract class EC_Player : CECObject
|
||||
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; }
|
||||
public int GetCharacterID() { return m_PlayerInfo.cid; }
|
||||
|
||||
|
||||
private static void BuildActionList()
|
||||
{
|
||||
if (_default_actions == null)
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 041192bec8f11c747a80df312c2df184
|
||||
@@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: be4a22babee7846459b0421234a44c99
|
||||
@@ -1,5 +1,5 @@
|
||||
using UnityEngine;
|
||||
using static EC_Player;
|
||||
using static CECPlayer;
|
||||
|
||||
public class PlayerIdleState : PlayerState
|
||||
{
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
using UnityEngine;
|
||||
using static EC_Player;
|
||||
using static CECPlayer;
|
||||
|
||||
public class PlayerMoveState : PlayerState
|
||||
{
|
||||
|
||||
@@ -23,7 +23,7 @@ public class PlayerVisual : MonoBehaviour
|
||||
BrewMonster.BMLogger.LogError("animancer == null");
|
||||
return;
|
||||
}
|
||||
var player = GetComponentInParent<EC_Player>();
|
||||
var player = GetComponentInParent<CECPlayer>();
|
||||
if(player == null)
|
||||
{
|
||||
BrewMonster.BMLogger.LogError("player == null");
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
{
|
||||
"dependencies": {
|
||||
"com.boxqkrtm.ide.cursor": "https://github.com/boxqkrtm/com.unity.ide.cursor.git",
|
||||
"com.github-glitchenzo.nugetforunity": "https://github.com/GlitchEnzo/NuGetForUnity.git?path=/src/NuGetForUnity",
|
||||
"com.unity.ai.navigation": "2.0.9",
|
||||
"com.unity.cinemachine": "3.1.4",
|
||||
"com.unity.collab-proxy": "2.9.3",
|
||||
|
||||
@@ -1,21 +1,5 @@
|
||||
{
|
||||
"dependencies": {
|
||||
"com.boxqkrtm.ide.cursor": {
|
||||
"version": "https://github.com/boxqkrtm/com.unity.ide.cursor.git",
|
||||
"depth": 0,
|
||||
"source": "git",
|
||||
"dependencies": {
|
||||
"com.unity.test-framework": "1.1.9"
|
||||
},
|
||||
"hash": "38fecf55e4fd94ccfe58a92ed8ad1a529ba1694e"
|
||||
},
|
||||
"com.github-glitchenzo.nugetforunity": {
|
||||
"version": "https://github.com/GlitchEnzo/NuGetForUnity.git?path=/src/NuGetForUnity",
|
||||
"depth": 0,
|
||||
"source": "git",
|
||||
"dependencies": {},
|
||||
"hash": "a7c6b49a0141a5bff9b1983e38137522ef61977d"
|
||||
},
|
||||
"com.unity.ai.navigation": {
|
||||
"version": "2.0.9",
|
||||
"depth": 0,
|
||||
|
||||
Reference in New Issue
Block a user