`
This commit is contained in:
parent
6fa9e619c5
commit
33a3657e2b
@ -82,16 +82,19 @@ namespace XNet.Business.Net
|
|||||||
{
|
{
|
||||||
if (InstanceSubscribers.TryGetValue(roomId, out var room))
|
if (InstanceSubscribers.TryGetValue(roomId, out var room))
|
||||||
{
|
{
|
||||||
|
bool isHasUser = false;
|
||||||
if (room.TryRemove(connId, out var playerRoom))
|
if (room.TryRemove(connId, out var playerRoom))
|
||||||
{
|
{
|
||||||
if (player.Agent != null)
|
if (player.Agent != null)
|
||||||
{
|
{
|
||||||
playerRoom?.Crowd?.RemoveAgent(player.Agent);//移除寻路索引
|
playerRoom?.Crowd?.RemoveAgent(player.Agent);//移除寻路索引
|
||||||
}
|
}
|
||||||
|
|
||||||
|
isHasUser = playerRoom?.Players.Count(s => !s.Value.IsAI) > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
//房间没有人了,把房间信息从相关集合移除
|
//房间除了AI没有人了,把房间信息从相关集合移除
|
||||||
if (room.IsEmpty)
|
if (!isHasUser || room.IsEmpty)
|
||||||
{
|
{
|
||||||
_sceneAgent.RemoveInstance(roomId);
|
_sceneAgent.RemoveInstance(roomId);
|
||||||
InstanceSubscribers.TryRemove(roomId, out _);
|
InstanceSubscribers.TryRemove(roomId, out _);
|
||||||
|
|||||||
@ -280,8 +280,8 @@ namespace XNet.Business.PathNavigation
|
|||||||
if (agent != null && agent.state != DtCrowdAgentState.DT_CROWDAGENT_STATE_INVALID)
|
if (agent != null && agent.state != DtCrowdAgentState.DT_CROWDAGENT_STATE_INVALID)
|
||||||
{
|
{
|
||||||
agent.npos = realPos;
|
agent.npos = realPos;
|
||||||
//agent.targetRef = targetRef; // ✅ 修正:绑定导航网格用nref
|
agent.targetRef = targetRef; // ✅ 修正:绑定导航网格用nref
|
||||||
agent.targetRef = 0; // ✅ 清空寻路目标,避免瞬移后继续寻路
|
//agent.targetRef = 0; // ✅ 清空寻路目标,避免瞬移后继续寻路
|
||||||
agent.vel = agent.dvel = RcVec3f.Zero;
|
agent.vel = agent.dvel = RcVec3f.Zero;
|
||||||
ci.Crowd.ResetMoveTarget(agent);
|
ci.Crowd.ResetMoveTarget(agent);
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@ -475,6 +475,8 @@ namespace XNet.Business.Tank.Manager
|
|||||||
IsEnterMap = false
|
IsEnterMap = false
|
||||||
};
|
};
|
||||||
|
|
||||||
|
room.Players[aiPlayer.PlayerId] = aiPlayer;
|
||||||
|
|
||||||
await this.RequestInitPlayer(room, mapKey, aiPlayer, message);
|
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.Agent = _sceneAgent.AddAgent(room.RoomId, loginPlayer.CurrentPos, loginPlayer.Radius, loginPlayer.Radius, loginPlayer.PlayerId, loginPlayer.Speed * speedScale * 2, loginPlayer.Speed * speedScale);
|
||||||
}
|
}
|
||||||
|
|
||||||
loginPlayer.TmpPos = loginPlayer.CurrentPos;
|
if (loginPlayer.Agent != null)
|
||||||
_sceneAgent.AgentTeleport(room.RoomId, loginPlayer.Agent.idx, loginPlayer.CurrentPos);
|
{
|
||||||
|
//loginPlayer.TmpPos = loginPlayer.CurrentPos;
|
||||||
|
_sceneAgent.AgentTeleport(room.RoomId, loginPlayer.Agent.idx, loginPlayer.CurrentPos);
|
||||||
|
}
|
||||||
|
|
||||||
loginPlayer.IsEnterMap = true;
|
loginPlayer.IsEnterMap = true;
|
||||||
if (!loginPlayer.IsAI)
|
if (!loginPlayer.IsAI)
|
||||||
@ -620,7 +625,7 @@ namespace XNet.Business.Tank.Manager
|
|||||||
foreach (var playerKv in room.Players)
|
foreach (var playerKv in room.Players)
|
||||||
{
|
{
|
||||||
var player = playerKv.Value;
|
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 pos = client.CurrentPos * Global.LocationMultiply;
|
||||||
var convertPos = new Vec3((int)pos.X, (int)pos.Y, (int)pos.Z);
|
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;
|
var player = playerKv.Value;
|
||||||
if (player.IsAI && player.IsEnterMap)
|
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 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);
|
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,
|
Type = WsMsgType.ADD_OR_UPDATE_PLAYER,
|
||||||
PlayerId = client.PlayerId,
|
PlayerId = player.PlayerId,
|
||||||
IsAI = false,
|
IsAI = false,
|
||||||
NickName = client.NickName,
|
NickName = player.NickName,
|
||||||
Blood = client.MaxBlood,
|
Blood = player.MaxBlood,
|
||||||
BodyIdx = client.BodyIdx,
|
BodyIdx = player.BodyIdx,
|
||||||
ArmorIdx = client.ArmorIdx,
|
ArmorIdx = player.ArmorIdx,
|
||||||
ChassisIdx = client.ChassisIdx,
|
ChassisIdx = player.ChassisIdx,
|
||||||
DeviceColor = client.DeviceColor,
|
DeviceColor = player.DeviceColor,
|
||||||
HeadImageUrl = client.HeadImageUrl,
|
HeadImageUrl = player.HeadImageUrl,
|
||||||
Position = convertPos,
|
Position = convertPos,
|
||||||
EulerAngles = convertEuler,
|
EulerAngles = convertEuler,
|
||||||
});
|
});
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user