forked from sin365/AxibugEmuOnline
房主离线,自动选择延迟最低另一名玩家做房主
This commit is contained in:
parent
3706ca9c82
commit
f04c7e543d
@ -707,13 +707,13 @@ namespace AxibugEmuOnline.Server
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Dictionary<uint, uint> GetSlotDataByUID(long uid)
|
public bool GetSlotDataByUID(long uid, out Dictionary<uint, uint> slotIdx2JoyIdx)
|
||||||
{
|
{
|
||||||
Dictionary<uint, uint> slotIdx2JoyIdx = new Dictionary<uint, uint>();
|
slotIdx2JoyIdx = new Dictionary<uint, uint>();
|
||||||
var dataarr = PlayerSlot.Where(w => w.UID == uid).ToArray();
|
var dataarr = PlayerSlot.Where(w => w.UID == uid).ToArray();
|
||||||
foreach (var slot in dataarr)
|
foreach (var slot in dataarr)
|
||||||
slotIdx2JoyIdx[slot.SlotIdx] = slot.LocalJoyIdx;
|
slotIdx2JoyIdx[slot.SlotIdx] = slot.LocalJoyIdx;
|
||||||
return slotIdx2JoyIdx;
|
return slotIdx2JoyIdx.Count > 0;
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 按照SlotIdx设置Input
|
/// 按照SlotIdx设置Input
|
||||||
@ -832,7 +832,7 @@ namespace AxibugEmuOnline.Server
|
|||||||
|
|
||||||
public void SetPlayerSlotData(ClientInfo _c, ref readonly Dictionary<uint, uint> newSlotIdx2JoyIdx)
|
public void SetPlayerSlotData(ClientInfo _c, ref readonly Dictionary<uint, uint> newSlotIdx2JoyIdx)
|
||||||
{
|
{
|
||||||
Dictionary<uint, uint> oldSlotIdx2JoyIdx = GetSlotDataByUID(_c.UID);
|
GetSlotDataByUID(_c.UID, out Dictionary<uint, uint> oldSlotIdx2JoyIdx);
|
||||||
HashSet<uint> diffSlotIdxs = ObjectPoolAuto.AcquireSet<uint>();// new HashSet<uint>();
|
HashSet<uint> diffSlotIdxs = ObjectPoolAuto.AcquireSet<uint>();// new HashSet<uint>();
|
||||||
foreach (var old in oldSlotIdx2JoyIdx)
|
foreach (var old in oldSlotIdx2JoyIdx)
|
||||||
{
|
{
|
||||||
@ -1132,6 +1132,32 @@ namespace AxibugEmuOnline.Server
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//房主离线,自动选择延迟最低另一名玩家做房主
|
||||||
|
if (!GetSlotDataByUID(this.HostUID, out Dictionary<uint, uint> slotIdx2JoyIdx))
|
||||||
|
{
|
||||||
|
List<ClientInfo> userlist = ObjectPoolAuto.AcquireList<ClientInfo>();
|
||||||
|
GetAllPlayerClientList(ref userlist);
|
||||||
|
if (userlist.Count > 0)
|
||||||
|
{
|
||||||
|
ClientInfo? client = userlist.OrderBy(w => w.AveNetDelay).FirstOrDefault();
|
||||||
|
this.HostUID = client.UID;
|
||||||
|
AppSrv.g_Log.DebugCmd($"更换房主为{this.HostUID}");
|
||||||
|
bChanged = true;
|
||||||
|
}
|
||||||
|
ObjectPoolAuto.Release(userlist);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.GameState > RoomGameState.OnlyHost && newPlayerCount == 1)
|
||||||
|
{
|
||||||
|
this.GameState = RoomGameState.OnlyHost;
|
||||||
|
AppSrv.g_Log.DebugCmd("回到OnlyHost状态");
|
||||||
|
bChanged = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
return bChanged;
|
return bChanged;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user