This commit is contained in:
wuyanchen 2025-12-31 19:43:10 +08:00
parent 6fa9e619c5
commit 33a3657e2b
3 changed files with 26 additions and 18 deletions

View File

@ -82,16 +82,19 @@ namespace XNet.Business.Net
{
if (InstanceSubscribers.TryGetValue(roomId, out var room))
{
bool isHasUser = false;
if (room.TryRemove(connId, out var playerRoom))
{
if (player.Agent != null)
{
playerRoom?.Crowd?.RemoveAgent(player.Agent);//移除寻路索引
}
isHasUser = playerRoom?.Players.Count(s => !s.Value.IsAI) > 0;
}
//房间没有人了,把房间信息从相关集合移除
if (room.IsEmpty)
//房间除了AI没有人了,把房间信息从相关集合移除
if (!isHasUser || room.IsEmpty)
{
_sceneAgent.RemoveInstance(roomId);
InstanceSubscribers.TryRemove(roomId, out _);

View File

@ -280,8 +280,8 @@ namespace XNet.Business.PathNavigation
if (agent != null && agent.state != DtCrowdAgentState.DT_CROWDAGENT_STATE_INVALID)
{
agent.npos = realPos;
//agent.targetRef = targetRef; // ✅ 修正绑定导航网格用nref
agent.targetRef = 0; // ✅ 清空寻路目标,避免瞬移后继续寻路
agent.targetRef = targetRef; // ✅ 修正绑定导航网格用nref
//agent.targetRef = 0; // ✅ 清空寻路目标,避免瞬移后继续寻路
agent.vel = agent.dvel = RcVec3f.Zero;
ci.Crowd.ResetMoveTarget(agent);
return true;

View File

@ -475,6 +475,8 @@ namespace XNet.Business.Tank.Manager
IsEnterMap = false
};
room.Players[aiPlayer.PlayerId] = aiPlayer;
await this.RequestInitPlayer(room, mapKey, aiPlayer, message);
//可以移动了
@ -549,8 +551,11 @@ namespace XNet.Business.Tank.Manager
loginPlayer.Agent = _sceneAgent.AddAgent(room.RoomId, loginPlayer.CurrentPos, loginPlayer.Radius, loginPlayer.Radius, loginPlayer.PlayerId, loginPlayer.Speed * speedScale * 2, loginPlayer.Speed * speedScale);
}
loginPlayer.TmpPos = loginPlayer.CurrentPos;
_sceneAgent.AgentTeleport(room.RoomId, loginPlayer.Agent.idx, loginPlayer.CurrentPos);
if (loginPlayer.Agent != null)
{
//loginPlayer.TmpPos = loginPlayer.CurrentPos;
_sceneAgent.AgentTeleport(room.RoomId, loginPlayer.Agent.idx, loginPlayer.CurrentPos);
}
loginPlayer.IsEnterMap = true;
if (!loginPlayer.IsAI)
@ -620,7 +625,7 @@ namespace XNet.Business.Tank.Manager
foreach (var playerKv in room.Players)
{
var player = playerKv.Value;
if (!player.IsAI && player.IsEnterMap && player.PlayerId != client.PlayerId)
if (!player.IsAI && player.IsEnterMap)// && player.PlayerId != client.PlayerId)
{
var pos = client.CurrentPos * Global.LocationMultiply;
var convertPos = new Vec3((int)pos.X, (int)pos.Y, (int)pos.Z);
@ -663,24 +668,24 @@ namespace XNet.Business.Tank.Manager
var player = playerKv.Value;
if (player.IsAI && player.IsEnterMap)
{
var pos = client.CurrentPos * Global.LocationMultiply;
var pos = player.CurrentPos * Global.LocationMultiply;
var convertPos = new Vec3((int)pos.X, (int)pos.Y, (int)pos.Z);
var euler = client.CurrentEuler * Global.LocationMultiply;
var euler = player.CurrentEuler * Global.LocationMultiply;
var convertEuler = new Vec3((int)euler.X, (int)euler.Y, (int)euler.Z);
await _wsManager.SendBaseSingleMessage(player.PlayerId, WsMsgType.PRIVATGE, new PlayerInitSync
await _wsManager.SendBaseSingleMessage(client.PlayerId, WsMsgType.PRIVATGE, new PlayerInitSync
{
Type = WsMsgType.ADD_OR_UPDATE_PLAYER,
PlayerId = client.PlayerId,
PlayerId = player.PlayerId,
IsAI = false,
NickName = client.NickName,
Blood = client.MaxBlood,
BodyIdx = client.BodyIdx,
ArmorIdx = client.ArmorIdx,
ChassisIdx = client.ChassisIdx,
DeviceColor = client.DeviceColor,
HeadImageUrl = client.HeadImageUrl,
NickName = player.NickName,
Blood = player.MaxBlood,
BodyIdx = player.BodyIdx,
ArmorIdx = player.ArmorIdx,
ChassisIdx = player.ChassisIdx,
DeviceColor = player.DeviceColor,
HeadImageUrl = player.HeadImageUrl,
Position = convertPos,
EulerAngles = convertEuler,
});