Skip to content

Commit 3600345

Browse files
committed
添加项目文件。
1 parent cdc21ce commit 3600345

File tree

12 files changed

+692
-13
lines changed

12 files changed

+692
-13
lines changed

LabMorePlugins/API/Events.cs

Lines changed: 201 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,201 @@
1+
using HintServiceMeow.Core.Extension;
2+
using HintServiceMeow.Core.Models.Hints;
3+
using LabApi.Events.Arguments.PlayerEvents;
4+
using LabApi.Events.Arguments.Scp914Events;
5+
using LabApi.Events.Arguments.ServerEvents;
6+
using LabApi.Events.CustomHandlers;
7+
using LabApi.Features.Wrappers;
8+
using LabMorePlugins.Enums;
9+
using LabMorePlugins.Patchs;
10+
using MEC;
11+
using PlayerRoles;
12+
using PlayerRoles.PlayableScps.Scp079;
13+
using PlayerRoles.Spectating;
14+
using System;
15+
using System.Collections.Generic;
16+
using System.Linq;
17+
using System.Text;
18+
using System.Text.RegularExpressions;
19+
using System.Threading.Tasks;
20+
using UnityEngine;
21+
22+
namespace LabMorePlugins.API
23+
{
24+
public class Events:CustomEventsHandler
25+
{
26+
public override void OnPlayerChangingRole(PlayerChangingRoleEventArgs ev)
27+
{
28+
if (ev.NewRole == RoleTypeId.Spectator)
29+
{
30+
Hint sphint = new Hint()
31+
{
32+
AutoText = a =>
33+
{
34+
var p = Player.Get(a.PlayerDisplay.ReferenceHub);
35+
if (p.RoleBase is SpectatorRole spectatorRole)
36+
{
37+
var spRole = Player.Get(spectatorRole.SyncedSpectatedNetId);
38+
return $"你正在观看<color=red>{spRole.Nickname}</color>的操作\n已经查出他是[<color=yellow>Lv.{spRole.GetPlayerData().Level}</color>]入|角色为{spRole.Role.GetRoleName()}";
39+
}
40+
else
41+
{
42+
return "";
43+
}
44+
},
45+
YCoordinate = 950,
46+
Alignment = HintServiceMeow.Core.Enum.HintAlignment.Center,
47+
FontSize = 25
48+
};
49+
ev.Player.GetPlayerDisplay().AddHint(sphint);
50+
}
51+
}
52+
public override void OnPlayerJoined(PlayerJoinedEventArgs ev)
53+
{
54+
Plugin.Instance.SavePlayerData();
55+
Timing.CallDelayed(0.1f, () =>
56+
{
57+
Plugin.Instance.LoadPlayerData();
58+
});
59+
Hint hint = new Hint()
60+
{
61+
AutoText = arg =>
62+
{
63+
var p = Player.Get(arg.PlayerDisplay.ReferenceHub);
64+
return $"<color=33f3ff>你好{p.Nickname}|[Lv.{p.GetPlayerData().Level}]</color>";
65+
},
66+
YCoordinate = 1000,
67+
Alignment = HintServiceMeow.Core.Enum.HintAlignment.Center,
68+
FontSize = 20
69+
};
70+
Hint hint1 = new Hint()
71+
{
72+
AutoText = arg =>
73+
{
74+
string round_time = Regex.Replace(Round.Duration.ToString(), "\\.\\d+$", string.Empty);
75+
return $"<color=33f3ff>|Tps:{Server.Tps}/{Server.MaxTps}|回合时长[{round_time}]|</color>";
76+
},
77+
YCoordinate = 20,
78+
Alignment = HintServiceMeow.Core.Enum.HintAlignment.Center,
79+
FontSize = 20
80+
};
81+
ev.Player.GetPlayerDisplay().AddHint(hint);
82+
ev.Player.GetPlayerDisplay().AddHint(hint1);
83+
}
84+
public override void OnPlayerHurting(PlayerHurtingEventArgs ev)
85+
{
86+
if (ev.Attacker != null&&ev.Player!=null)
87+
{
88+
if (ev.Attacker.Role == PlayerRoles.RoleTypeId.Scp106)
89+
{
90+
if (!SRoleSystem.IsRole(ev.Player.PlayerId, Enums.RoleName.SCP550)&&Plugin.Instance.Config.SCP106Pock)
91+
{
92+
ev.Player.EnableEffect(new CustomPlayerEffects.PocketCorroding());
93+
}
94+
}
95+
}
96+
97+
}
98+
public override void OnPlayerDeath(PlayerDeathEventArgs ev)
99+
{
100+
if (ev.Player != null&&ev.Attacker!=null)
101+
{
102+
ev.Player.setRankName("", "");
103+
ev.Player.SetScale(Vector3.one);
104+
ev.Player.DisableAllEffects();
105+
SCPChannelFixSecond.scpChannel.Remove(ev.Player.PlayerId);
106+
var killer = ev.Attacker;
107+
if (killer.IsHuman&&ev.Player.IsHuman)
108+
{
109+
var data = Plugin.Instance.GetPlayerData(ev.Attacker.UserId);
110+
data.Exp += Plugin.Instance.Config.PeopleKillSCP;
111+
}
112+
else if (killer.IsSCP&&ev.Player.IsHuman)
113+
{
114+
var data = Plugin.Instance.GetPlayerData(ev.Attacker.UserId);
115+
data.Exp += Plugin.Instance.Config.SCPKillPeople;
116+
}
117+
else if (killer.IsHuman&&ev.Player.IsSCP)
118+
{
119+
var data = Plugin.Instance.GetPlayerData(ev.Attacker.UserId);
120+
data.Exp += Plugin.Instance.Config.PeopleKillSCP;
121+
}
122+
var data2 = Plugin.Instance.GetPlayerData(killer.UserId);
123+
Plugin.Instance.CheckLevelUp(data2, killer);
124+
Plugin.Instance.SavePlayerData();
125+
}
126+
127+
}
128+
public override void OnServerRoundEnded(RoundEndedEventArgs ev)
129+
{
130+
Plugin.Instance.SavePlayerData();
131+
Server.FriendlyFire = true;
132+
foreach (Player player in Player.List)
133+
{
134+
SRoleSystem.RemoveRole(player.PlayerId);
135+
player.SendHint("<size=30><color=blue>回合结束</color>\n<color=blue>[友伤]</color>已开启</size>", 15);
136+
}
137+
Round.IsLocked = false;
138+
Player mvpPlayer = null;
139+
int maxKills = 0;
140+
if (Plugin.killCounts.Any())
141+
{
142+
maxKills = Plugin.killCounts.Values.Max();
143+
var candidates = Plugin.killCounts
144+
.Where(kvp => kvp.Value == maxKills)
145+
.Select(kvp => kvp.Key)
146+
.ToList();
147+
148+
if (candidates.Any())
149+
{
150+
int randomIndex = SAPI.Random.Next(0, candidates.Count);
151+
mvpPlayer = candidates[randomIndex];
152+
}
153+
if (mvpPlayer == null)
154+
{
155+
Server.SendBroadcast($"<color=blue>[回合结束]</color>\n===---------===\n<color=blue>[未能找到本局MVPQwQ]</color>", 10);
156+
return;
157+
}
158+
var data = Plugin.Instance.GetPlayerData(mvpPlayer.UserId);
159+
data.Exp += 35;
160+
Server.SendBroadcast($"<color=blue>[回合结束]</color>\n===---------===\n<color=blue>本局MVP[{mvpPlayer.Nickname}]</color>", 10);
161+
Plugin.killCounts.Clear();
162+
}
163+
}
164+
public override void OnServerWaveRespawned(WaveRespawnedEventArgs ev)
165+
{
166+
if (ev.Wave.Faction == PlayerRoles.Faction.FoundationStaff)
167+
{
168+
Timing.CallDelayed(0.1f, () =>
169+
{
170+
Server.SendBroadcast($"{Plugin.Instance.Config.SpawnNTF}", 6);
171+
});
172+
173+
}
174+
else if (ev.Wave.Faction == PlayerRoles.Faction.FoundationEnemy)
175+
{
176+
Timing.CallDelayed(0.1f, () =>
177+
{
178+
Server.SendBroadcast($"{Plugin.Instance.Config.SpawnCI}", 6);
179+
});
180+
181+
}
182+
}
183+
public override void OnPlayerUsedItem(PlayerUsedItemEventArgs ev)
184+
{
185+
if (ev.Player!=null)
186+
{
187+
188+
}
189+
}
190+
public override void OnPlayerInteractingDoor(PlayerInteractingDoorEventArgs ev)
191+
{
192+
foreach (var item in ev.Player.Items)
193+
{
194+
if (item.Base is InventorySystem.Items.Keycards.KeycardItem)
195+
{
196+
197+
}
198+
}
199+
}
200+
}
201+
}

LabMorePlugins/API/SAPI.cs

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,79 @@
11
using Christmas.Scp2536.Gifts;
2+
using GameCore;
23
using InventorySystem.Items.ThrowableProjectiles;
34
using LabApi.Features.Wrappers;
5+
using PlayerRoles;
46
using System;
57
using System.Collections.Generic;
68
using System.Linq;
79
using System.Text;
810
using System.Threading.Tasks;
11+
using UnityEngine;
12+
using Random = System.Random;
913

1014
namespace LabMorePlugins.API
1115
{
1216
public static class SAPI
1317
{
1418
public static Random Random = new Random();
19+
public static List<Player> SpecialPlayerList = new List<Player>();
20+
public static Room GetRandomRoom()
21+
{
22+
List<Room> rooms = Room.List.ToList();
23+
return rooms[Random.Next(0, rooms.Count)];
24+
}
25+
public static Room GetRandomRoomByZone(MapGeneration.FacilityZone zoneType)
26+
{
27+
List<Room> rooms = Room.List.Where(room => room.Zone == zoneType).ToList();
28+
if (rooms.Count == 0) return null;
29+
return rooms[Random.Next(0, rooms.Count)];
30+
}
31+
public static List<Player> RandomPlayers(IEnumerable<Player> playerList, int count)
32+
{
33+
var players = playerList.ToList();
34+
if (count >= players.Count)
35+
return players;
36+
if (count <= 0)
37+
return new List<Player>();
38+
var result = new List<Player>(count);
39+
var tempList = new List<Player>(players);
40+
41+
for (int i = 0; i < count; i++)
42+
{
43+
int index = Random.Next(0, tempList.Count);
44+
result.Add(tempList[index]);
45+
tempList.RemoveAt(index);
46+
}
47+
48+
return result;
49+
}
50+
public static Player GetRandomPlayer(List<Player> playerList)
51+
{
52+
if (playerList.Any())
53+
{
54+
return playerList[Random.Next(0, playerList.Count() - 1)];
55+
}
56+
57+
return null;
58+
}
59+
public static Player GetRandomSpecialPlayer(RoleTypeId roleTypeId)
60+
{
61+
List<Player> players = new List<Player>();
62+
foreach (Player player in SpecialPlayerList)
63+
{
64+
if (player.Role == roleTypeId)
65+
{
66+
players.Add(player);
67+
}
68+
}
69+
if (players.Any())
70+
{
71+
var randomPlayer = players[Random.Next(0, players.Count() - 1)];
72+
SpecialPlayerList.Remove(randomPlayer);
73+
return randomPlayer;
74+
}
75+
76+
return null;
77+
}
1578
}
1679
}

LabMorePlugins/API/SRoleSystem.cs

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
using LabApi.Features.Wrappers;
2+
using LabMorePlugins.Enums;
3+
using System;
4+
using System.Collections.Generic;
5+
using System.Linq;
6+
using System.Text;
7+
using System.Threading.Tasks;
8+
9+
namespace LabMorePlugins.API
10+
{
11+
public class SRoleSystem
12+
{
13+
private static Dictionary<int, RoleName> _playerRoles = new Dictionary<int, RoleName>();
14+
/// <summary>
15+
/// 添加特殊角色
16+
/// </summary>
17+
/// <param name="role">特殊角色名称</param>
18+
/// <param name="playerId">playerid</param>
19+
public static void Add(RoleName role, int playerId)
20+
{
21+
try
22+
{
23+
if (_playerRoles.ContainsKey(playerId))
24+
{
25+
_playerRoles[playerId] = role;
26+
return;
27+
}
28+
29+
_playerRoles.Add(playerId, role);
30+
}
31+
catch (Exception ex)
32+
{
33+
Console.WriteLine($"添加角色时出错: {ex.Message}");
34+
}
35+
}
36+
public static void RemoveRole(int playerId)
37+
{
38+
try
39+
{
40+
if (!_playerRoles.ContainsKey(playerId))
41+
{
42+
return;
43+
}
44+
_playerRoles.Remove(playerId);
45+
}
46+
catch (Exception ex)
47+
{
48+
Console.WriteLine($"移除角色时出错: {ex.Message}");
49+
throw;
50+
}
51+
}
52+
public static bool IsRole(int playerId, RoleName role)
53+
{
54+
try
55+
{
56+
if (!_playerRoles.ContainsKey(playerId))
57+
{
58+
return false;
59+
}
60+
61+
return _playerRoles[playerId] == role;
62+
}
63+
catch (Exception ex)
64+
{
65+
Console.WriteLine($"检查角色时出错: {ex.Message}");
66+
return false;
67+
}
68+
}
69+
public static RoleName? GetPlayerRole(int playerId)
70+
{
71+
if (_playerRoles.TryGetValue(playerId, out var role))
72+
{
73+
return role;
74+
}
75+
return null;
76+
}
77+
}
78+
}

0 commit comments

Comments
 (0)