Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8b5e3c33d2 | ||
|
|
079716cc85 | ||
|
|
04337028b3 | ||
|
|
6b9910486b | ||
|
|
c320a07370 | ||
|
|
a0d1386712 |
@@ -41,6 +41,9 @@ public static class DefaultWidgets
|
|||||||
if (PlayerManager.ShowNameToggleButton.Value)
|
if (PlayerManager.ShowNameToggleButton.Value)
|
||||||
RegisterManager.RegisterPlayerRow(InternalWidgets.NameToggleButton.Create());
|
RegisterManager.RegisterPlayerRow(InternalWidgets.NameToggleButton.Create());
|
||||||
|
|
||||||
|
if (PlayerManager.ShowTransButton.Value)
|
||||||
|
RegisterManager.RegisterPlayerRow(InternalWidgets.TransButton.Create());
|
||||||
|
|
||||||
if (PlayerManager.ShowMuteButton.Value)
|
if (PlayerManager.ShowMuteButton.Value)
|
||||||
RegisterManager.RegisterPlayerRow(InternalWidgets.MuteButton.Create());
|
RegisterManager.RegisterPlayerRow(InternalWidgets.MuteButton.Create());
|
||||||
if (PlayerManager.ShowAddFriendButton.Value)
|
if (PlayerManager.ShowAddFriendButton.Value)
|
||||||
|
|||||||
21
Gui/InternalWidgets/TransButton.cs
Normal file
21
Gui/InternalWidgets/TransButton.cs
Normal 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,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,6 +3,7 @@ using MultiplayerBasicExample;
|
|||||||
using Steamworks;
|
using Steamworks;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using stick.plugins.playermanager.Recorder;
|
using stick.plugins.playermanager.Recorder;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace stick.plugins.playermanager.Gui;
|
namespace stick.plugins.playermanager.Gui;
|
||||||
|
|
||||||
@@ -30,6 +31,11 @@ public static class PlayerManagerGUI
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
private static readonly LayoutCursor Cursor = new();
|
private static readonly LayoutCursor Cursor = new();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 记录该行widget是否该绘制
|
||||||
|
/// </summary>
|
||||||
|
private static readonly HashSet<IPlayerRowWidget> IgnoreWidgets = [];
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region 主绘制方法
|
#region 主绘制方法
|
||||||
@@ -89,10 +95,29 @@ public static class PlayerManagerGUI
|
|||||||
Cursor.EndRow();
|
Cursor.EndRow();
|
||||||
}
|
}
|
||||||
|
|
||||||
// 玩家行区域:每玩家一行,行内横向迭代注册的 PlayerRowWidget
|
|
||||||
for (int i = 0; i < PlayerManager.lobbyMemberList.Count; i++)
|
IgnoreWidgets.Clear();
|
||||||
|
// 如果一个widget对所有玩家都不需要绘制,则忽略
|
||||||
|
foreach (var widget in RegisterManager.PlayerRowWidgets)
|
||||||
|
{
|
||||||
|
bool shouldDraw = false;
|
||||||
|
foreach (var member in PlayerManager.lobbyMemberList)
|
||||||
|
{
|
||||||
|
if (!member.SteamId.IsValid()) continue;
|
||||||
|
if (widget.ShouldDraw(member))
|
||||||
|
{
|
||||||
|
shouldDraw = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!shouldDraw)
|
||||||
|
IgnoreWidgets.Add(widget);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 玩家行区域:每玩家一行,行内横向迭代注册的 PlayerRowWidget
|
||||||
|
foreach (var member in PlayerManager.lobbyMemberList)
|
||||||
{
|
{
|
||||||
PlayerInfo member = PlayerManager.lobbyMemberList[i];
|
|
||||||
if (!member.SteamId.IsValid()) continue;
|
if (!member.SteamId.IsValid()) continue;
|
||||||
|
|
||||||
Cursor.BeginRow();
|
Cursor.BeginRow();
|
||||||
@@ -101,7 +126,8 @@ public static class PlayerManagerGUI
|
|||||||
if (widget.ShouldDraw(member))
|
if (widget.ShouldDraw(member))
|
||||||
widget.Draw(Cursor.NextColumn(widget.Width, 40f), member);
|
widget.Draw(Cursor.NextColumn(widget.Width, 40f), member);
|
||||||
else
|
else
|
||||||
Cursor.NextColumn(widget.Width, 40f); // 占位推进列位置
|
if (!IgnoreWidgets.Contains(widget))
|
||||||
|
Cursor.NextColumn(widget.Width, 40f); // 占位推进列位置对齐
|
||||||
}
|
}
|
||||||
Cursor.EndRow();
|
Cursor.EndRow();
|
||||||
}
|
}
|
||||||
|
|||||||
26
Plugin.cs
26
Plugin.cs
@@ -39,6 +39,11 @@ public class PlayerManager : BaseUnityPlugin
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
internal static ConfigEntry<bool> ShowKickButton;
|
internal static ConfigEntry<bool> ShowKickButton;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 是否显示转让按钮
|
||||||
|
/// </summary>
|
||||||
|
internal static ConfigEntry<bool> ShowTransButton;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 是否显示记录/拉黑按钮
|
/// 是否显示记录/拉黑按钮
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -244,6 +249,13 @@ public class PlayerManager : BaseUnityPlugin
|
|||||||
"是否显示踢人按钮"
|
"是否显示踢人按钮"
|
||||||
);
|
);
|
||||||
|
|
||||||
|
ShowTransButton = Config.Bind(
|
||||||
|
"GUI",
|
||||||
|
"ShowTransButton",
|
||||||
|
true,
|
||||||
|
"是否显示转让按钮"
|
||||||
|
);
|
||||||
|
|
||||||
ShowRecordButton = Config.Bind(
|
ShowRecordButton = Config.Bind(
|
||||||
"GUI",
|
"GUI",
|
||||||
"ShowRecordButton",
|
"ShowRecordButton",
|
||||||
@@ -326,6 +338,7 @@ public class PlayerManager : BaseUnityPlugin
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
RequestLobbyList();
|
RequestLobbyList();
|
||||||
|
OnLobbyMembersChanged();
|
||||||
PlayerManagerGUI.ShowLobbyInfo = true;
|
PlayerManagerGUI.ShowLobbyInfo = true;
|
||||||
Debug.Log("大厅信息界面已打开");
|
Debug.Log("大厅信息界面已打开");
|
||||||
}
|
}
|
||||||
@@ -334,6 +347,19 @@ public class PlayerManager : BaseUnityPlugin
|
|||||||
|
|
||||||
#region 公共方法
|
#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>
|
/// <summary>
|
||||||
/// 通过SteamID获取NetworkSpawnID
|
/// 通过SteamID获取NetworkSpawnID
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
## 功能
|
## 功能
|
||||||
|
|
||||||
- 房间查找
|
- 房间查找
|
||||||
|
- 转让房主
|
||||||
- 玩家记录
|
- 玩家记录
|
||||||
- 被记录的玩家显示为黄名
|
- 被记录的玩家显示为黄名
|
||||||
- 是steam好友的玩家显示为绿名(优先级更高)
|
- 是steam好友的玩家显示为绿名(优先级更高)
|
||||||
@@ -23,6 +24,11 @@
|
|||||||
|
|
||||||
## 更新日志
|
## 更新日志
|
||||||
|
|
||||||
|
### v4.0.8
|
||||||
|
|
||||||
|
1. 添加了转让房主功能
|
||||||
|
2. 现在如果某个按钮(行组件)对所有人都不显示,则不留空
|
||||||
|
|
||||||
### v4.0.7
|
### v4.0.7
|
||||||
|
|
||||||
1. 现在点击大厅列表中的按钮进入大厅会在列表中将该大厅用灰色样式标识,标记已进入过
|
1. 现在点击大厅列表中的按钮进入大厅会在列表中将该大厅用灰色样式标识,标记已进入过
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<TargetFramework>net35</TargetFramework>
|
<TargetFramework>net35</TargetFramework>
|
||||||
<AssemblyName>stick.plugins.playermanager</AssemblyName>
|
<AssemblyName>stick.plugins.playermanager</AssemblyName>
|
||||||
<Product>PlayerManager</Product>
|
<Product>PlayerManager</Product>
|
||||||
<Version>4.0.7</Version>
|
<Version>4.0.8</Version>
|
||||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||||
<LangVersion>latest</LangVersion>
|
<LangVersion>latest</LangVersion>
|
||||||
<RestoreAdditionalProjectSources>
|
<RestoreAdditionalProjectSources>
|
||||||
|
|||||||
Reference in New Issue
Block a user