`
This commit is contained in:
parent
6fa9e619c5
commit
33a3657e2b
@ -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 _);
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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,
|
||||
});
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user