Skip to content

Commit d2dce57

Browse files
committed
Merge branch 'main' into work/Merge5.1.6
2 parents 740f6cf + 94cb37f commit d2dce57

File tree

3 files changed

+37
-36
lines changed

3 files changed

+37
-36
lines changed

Modules/GameState.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public bool CanUseMovingPlatform
3535
}
3636
public (DateTime, byte) RealKiller;
3737
public PlainShipRoom LastRoom;
38-
/// <summary>会議等の後に湧いた後かどうか</summary>
38+
/// <summary>会議等の後に湧いた後かどうか<br/>ホスト以外は正しい値にならないので注意</summary>
3939
public bool HasSpawned { get; set; } = false;
4040
public Dictionary<byte, string> TargetColorData;
4141
public PlayerState(byte playerId)

Patches/PlayerContorolPatch.cs

+34-33
Original file line numberDiff line numberDiff line change
@@ -208,22 +208,52 @@ public static bool Prefix(PlayerControl __instance, [HarmonyArgument(0)] PlayerC
208208
__instance.RpcRejectShapeshift();
209209
return false;
210210
}
211+
var shapeshifter = __instance;
212+
var shapeshifting = shapeshifter.PlayerId != target.PlayerId;
213+
// 変身したとき一番近い人をマッドメイトにする処理
214+
if (shapeshifter.CanMakeMadmate() && shapeshifting)
215+
{
216+
var sidekickable = shapeshifter.GetRoleClass() as ISidekickable;
217+
var targetRole = sidekickable?.SidekickTargetRole ?? CustomRoles.SKMadmate;
218+
219+
Vector2 shapeshifterPosition = shapeshifter.transform.position;//変身者の位置
220+
Dictionary<PlayerControl, float> mpdistance = new();
221+
float dis;
222+
foreach (var p in Main.AllAlivePlayerControls)
223+
{
224+
if (p.Data.Role.Role != RoleTypes.Shapeshifter && !p.Is(CustomRoleTypes.Impostor) && !p.Is(targetRole))
225+
{
226+
dis = Vector2.Distance(shapeshifterPosition, p.transform.position);
227+
mpdistance.Add(p, dis);
228+
}
229+
}
230+
if (mpdistance.Count != 0)
231+
{
232+
var min = mpdistance.OrderBy(c => c.Value).FirstOrDefault();//一番値が小さい
233+
PlayerControl targetm = min.Key;
234+
targetm.RpcSetCustomRole(targetRole);
235+
Logger.Info($"Make SKMadmate:{targetm.name}", "Shapeshift");
236+
Main.SKMadmateNowCount++;
237+
Utils.MarkEveryoneDirtySettings();
238+
Utils.NotifyRoles();
239+
}
240+
}
211241
// 役職の処理
212-
var role = __instance.GetRoleClass();
242+
var role = shapeshifter.GetRoleClass();
213243
if (role?.OnCheckShapeshift(target, ref shouldAnimate) == false)
214244
{
215245
if (role.CanDesyncShapeshift)
216246
{
217-
__instance.RpcSpecificRejectShapeshift(target, shouldAnimate);
247+
shapeshifter.RpcSpecificRejectShapeshift(target, shouldAnimate);
218248
}
219249
else
220250
{
221-
__instance.RpcRejectShapeshift();
251+
shapeshifter.RpcRejectShapeshift();
222252
}
223253
return false;
224254
}
225255

226-
__instance.RpcShapeshift(target, shouldAnimate);
256+
shapeshifter.RpcShapeshift(target, shouldAnimate);
227257
return false;
228258
}
229259
private static bool CheckInvalidShapeshifting(PlayerControl instance, PlayerControl target, bool animate)
@@ -289,35 +319,6 @@ public static void Prefix(PlayerControl __instance, [HarmonyArgument(0)] PlayerC
289319

290320
if (!shapeshifting) Camouflage.RpcSetSkin(__instance);
291321

292-
// 変身したとき一番近い人をマッドメイトにする処理
293-
if (shapeshifter.CanMakeMadmate() && shapeshifting)
294-
{
295-
var sidekickable = shapeshifter.GetRoleClass() as ISidekickable;
296-
var targetRole = sidekickable?.SidekickTargetRole ?? CustomRoles.SKMadmate;
297-
298-
Vector2 shapeshifterPosition = shapeshifter.transform.position;//変身者の位置
299-
Dictionary<PlayerControl, float> mpdistance = new();
300-
float dis;
301-
foreach (var p in Main.AllAlivePlayerControls)
302-
{
303-
if (p.Data.Role.Role != RoleTypes.Shapeshifter && !p.Is(CustomRoleTypes.Impostor) && !p.Is(targetRole))
304-
{
305-
dis = Vector2.Distance(shapeshifterPosition, p.transform.position);
306-
mpdistance.Add(p, dis);
307-
}
308-
}
309-
if (mpdistance.Count != 0)
310-
{
311-
var min = mpdistance.OrderBy(c => c.Value).FirstOrDefault();//一番値が小さい
312-
PlayerControl targetm = min.Key;
313-
targetm.RpcSetCustomRole(targetRole);
314-
Logger.Info($"Make SKMadmate:{targetm.name}", "Shapeshift");
315-
Main.SKMadmateNowCount++;
316-
Utils.MarkEveryoneDirtySettings();
317-
Utils.NotifyRoles();
318-
}
319-
}
320-
321322
//変身解除のタイミングがずれて名前が直せなかった時のために強制書き換え
322323
if (!shapeshifting)
323324
{

main.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,9 @@ public class Main : BasePlugin
5858
public static readonly Version ParsedForkVersion = Version.Parse(ForkVersion);
5959

6060
public const string PluginGuid = "com.emptybottle.townofhost";
61-
public const string PluginVersion = "5.1.5";
61+
public const string PluginVersion = "5.1.6";
6262
// サポートされている最低のAmongUsバージョン
63-
public static readonly string LowestSupportedVersion = "2023.10.24";
63+
public static readonly string LowestSupportedVersion = "2024.3.5";
6464
// このバージョンのみで公開ルームを無効にする場合
6565
public static readonly bool IsPublicAvailableOnThisVersion = false;
6666
public Harmony Harmony { get; } = new Harmony(PluginGuid);

0 commit comments

Comments
 (0)