Files
hjha-server/GameFix/Common/Core/GameDeskUtility.cs
xiaoou e9616125ce feat: initial commit - HJHA game server full source
6 major server modules (PdkFriendServer/GlobalSever/ServerCore/GameModule/GameNetModule) +
game logic (GameFix/GameDAL/ServerData) +
network layer (NetWorkMessage) +
data layer (ObjectModel) +
utilities (MrWu/Core/Config/CloudAPI/dll) +
adapters (zyxAdapter/base)

.NET 8.0 C# solution, 16 projects, 958 source files
2026-07-07 12:02:15 +08:00

205 lines
6.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using GameData;
using GameMessage;
using UnityGame;
namespace GameFix
{
/// <summary>
/// int[] Seat
/// - 下标索引表示进入桌子的初始位置号,也是服务器原始玩家数组的索引
/// - 索引对应的内容是存在打乱之后的位置信息
/// </summary>
public static class GameDeskUtility
{
#region GameDeskInfo
/// <summary>
/// 初始化位置信息
/// </summary>
public static void InitDeskSeat(this GameDeskInfo deskInfo, int playerCnt)
{
deskInfo.Seat = new int[playerCnt];
for (int i = 0; i < playerCnt; i++)
{
deskInfo.Seat[i] = i;
}
}
public static void UpdateSeat(this GameDeskInfo deskInfo, int[] seat)
{
deskInfo.Seat = (int[])seat.Clone();
}
public static int GetServerSeat(this GameDeskInfo deskInfo, int serverSeat)
{
return GetServerSeat(deskInfo.Seat, serverSeat);
}
public static int GetNextServerSeat(this GameDeskInfo deskInfo, int serverRealSeat)
{
return GetNextServerSeat(deskInfo.Seat, serverRealSeat);
}
public static int GetNextServerSeat(this GameDeskInfo deskInfo, int serverRealSeat, int n)
{
return GetNextServerSeat(deskInfo.Seat, serverRealSeat, n);
}
public static void SwitchSeat(this GameDeskInfo deskInfo, int originalSeat, int targetSeat)
{
SwitchSeat(deskInfo.Seat, originalSeat, targetSeat);
}
#if !Server
public static int ClientToServerSeat(this GameDeskInfo deskInfo, int clientSeat)
{
return ClientToServerSeat(deskInfo.Seat, clientSeat);
}
public static int ServerToClientSeat(this GameDeskInfo deskInfo, int serverSeat)
{
return ServerToClientSeat(deskInfo.Seat, serverSeat);
}
#endif
#endregion
#if !Server
/// <summary>
/// 客户端转服务器位置
/// </summary>
public static int ClientToServerSeat(int[] seat, int clientSeat)
{
if (UnityGame.hjhaGlobale.Instance.userData == null)
{
return -1;
}
if (seat == null || seat.Length < clientSeat)
{
return -1;
}
if (seat.Length <= 0)
{
return -1;
}
if (clientSeat < 0)
{
return 0;
}
int mySeat = UnityGame.hjhaGlobale.Instance.userData.seat;
mySeat = Array.IndexOf(seat, mySeat);
if (mySeat < 0)
{
if (hjhaGlobale.Instance.userData.state == (int)PlayerState.Desk
|| hjhaGlobale.Instance.userData.state == (int)PlayerState.Ready
|| hjhaGlobale.Instance.userData.state == (int)PlayerState.War)
{
UnityEngine.Debug.LogError($"位置信息错误MySeat={mySeat}");
}
return -1;
}
int serverSeat = (mySeat + clientSeat) % seat.Length;
return GetServerSeat(seat, serverSeat);
}
/// <summary>
/// 服务器转客户端位置
/// </summary>
public static int ServerToClientSeat(int[] seat, int serverSeat)
{
if (UnityGame.hjhaGlobale.Instance.userData == null)
{
return -1;
}
if (seat == null || seat.Length < serverSeat)
{
return -1;
}
int seatCnt = seat.Length;
if (seatCnt <= 0)
{
return -1;
}
if (serverSeat < 0)
{
return -1;
}
int mySeat = UnityGame.hjhaGlobale.Instance.userData.seat;
mySeat = Array.IndexOf(seat, mySeat);
serverSeat = Array.IndexOf(seat, serverSeat);
if (mySeat < 0 || serverSeat < 0)
{
UnityEngine.Debug.LogError($"位置信息错误ServerSeat={serverSeat} MySeat={mySeat}");
return -1;
}
return (serverSeat - mySeat + seatCnt) % seatCnt;
}
#endif
/// <summary>
/// 获取真实的服务器位置
/// </summary>
public static int GetServerSeat(int[] seat, int serverSeat)
{
if (seat == null || seat.Length < serverSeat)
{
#if Server
MrWu.Debug.Debug.Error($"位置信息错误serverSeat={serverSeat}");
#endif
return serverSeat;
}
return seat[serverSeat];
}
/// <summary>
/// 获取 [serverSeat] 下N个玩家的服务器的位置
/// </summary>
public static int GetNextServerSeat(int[] seat, int serverSeat, int n)
{
if (seat == null || seat.Length < serverSeat)
{
#if Server
MrWu.Debug.Debug.Error($"位置信息错误serverSeat={serverSeat}");
#endif
return serverSeat;
}
serverSeat = Array.IndexOf(seat, serverSeat);
if (serverSeat < 0)
{
#if Server
MrWu.Debug.Debug.Error($"位置信息错误serverSeat={serverSeat}");
#endif
return serverSeat;
}
var nextSeat = (serverSeat + n) % seat.Length;
return GetServerSeat(seat, nextSeat);
}
/// <summary>
/// 获取 [serverSeat] 下一个玩家的服务器的位置
/// </summary>
public static int GetNextServerSeat(int[] seat, int serverSeat)
{
return GetNextServerSeat(seat, serverSeat, 1);
}
/// <summary>
/// 交换位置
/// </summary>
public static void SwitchSeat(int[] seat, int originalSeat, int targetSeat)
{
(seat[originalSeat], seat[targetSeat]) = (seat[targetSeat], seat[originalSeat]);
}
}
}