1 Commits

Author SHA1 Message Date
Yue-bin
a0d1386712 feat(PlayerManager): 添加房间所有权转让功能
添加了转让房主按钮,允许房主将房间所有权转移给其他玩家。
- 在GUI中新增TransButton组件,用于转让房主功能
- 添加ShowTransButton配置项控制按钮显示
- 实现TransferLobbyOwnership方法处理房主转让逻辑
- 默认启用转让按钮显示
2026-06-22 05:02:26 +08:00
3 changed files with 49 additions and 0 deletions

View File

@@ -41,6 +41,9 @@ public static class DefaultWidgets
if (PlayerManager.ShowNameToggleButton.Value)
RegisterManager.RegisterPlayerRow(InternalWidgets.NameToggleButton.Create());
if (PlayerManager.ShowTransButton.Value)
RegisterManager.RegisterPlayerRow(InternalWidgets.TransButton.Create());
if (PlayerManager.ShowMuteButton.Value)
RegisterManager.RegisterPlayerRow(InternalWidgets.MuteButton.Create());
if (PlayerManager.ShowAddFriendButton.Value)

View File

@@ -0,0 +1,21 @@
using MultiplayerBasicExample;
namespace stick.plugins.playermanager.Gui.InternalWidgets;
public static class TransButton
{
public static IPlayerRowWidget Create()
{
return new PlayerRowButtonWidget
{
Name = "Trans Host",
Condition = player =>
PlayerManager.IsHost(PlayerManager.LocalPlayer)
&& !PlayerManager.IsLocalPlayer(player),
GetText = _ => "转让",
OnClick = player =>
PlayerManager.TransferLobbyOwnership(player),
Width = 100f,
};
}
}

View File

@@ -39,6 +39,11 @@ public class PlayerManager : BaseUnityPlugin
/// </summary>
internal static ConfigEntry<bool> ShowKickButton;
/// <summary>
/// 是否显示转让按钮
/// </summary>
internal static ConfigEntry<bool> ShowTransButton;
/// <summary>
/// 是否显示记录/拉黑按钮
/// </summary>
@@ -244,6 +249,13 @@ public class PlayerManager : BaseUnityPlugin
"是否显示踢人按钮"
);
ShowTransButton = Config.Bind(
"GUI",
"ShowTransButton",
true,
"是否显示转让按钮"
);
ShowRecordButton = Config.Bind(
"GUI",
"ShowRecordButton",
@@ -334,6 +346,19 @@ public class PlayerManager : BaseUnityPlugin
#region
/// <summary>
/// 转让房主
/// </summary>
/// <param name="targetPlayer">目标玩家</param>
/// <returns></returns>
public static void TransferLobbyOwnership(PlayerInfo targetPlayer)
{
if (targetPlayer != null && targetPlayer != LocalPlayer)
{
SteamMatchmaking.SetLobbyOwner(CurrentLobbyID, targetPlayer.SteamId);
}
}
/// <summary>
/// 通过SteamID获取NetworkSpawnID
/// </summary>