mirror of
https://github.com/Gurge44/EndlessHostRoles.git
synced 2026-10-20 01:46:25 +00:00
fix
This commit is contained in:
1 parent
66ac4fbb42
commit
c5aa57abaa
3 files changed
+7
-161
No files matched your search
+4
-159
@@ -354,175 +354,20 @@ namespace EHR
|
||||
{
|
||||
if (!AmongUsClient.Instance.AmHost) return;
|
||||
|
||||
MessageWriter writer = MessageWriter.Get(SendOption.Reliable);
|
||||
writer.StartMessage(5);
|
||||
writer.Write(AmongUsClient.Instance.GameId);
|
||||
writer.StartMessage(5);
|
||||
writer.WritePacked(playerControl.NetId);
|
||||
writer.EndMessage();
|
||||
writer.EndMessage();
|
||||
AmongUsClient.Instance.SendOrDisconnect(writer);
|
||||
writer.Recycle();
|
||||
Despawn();
|
||||
|
||||
Main.Instance.StartCoroutine(WaitForMeetingEnd());
|
||||
return;
|
||||
|
||||
IEnumerator WaitForMeetingEnd()
|
||||
{
|
||||
yield return new WaitForSecondsRealtime(5f);
|
||||
yield return new WaitForSecondsRealtime(10f);
|
||||
while (ReportDeadBodyPatch.MeetingStarted || GameStates.IsMeeting || ExileController.Instance || AntiBlackout.SkipTasks) yield return null;
|
||||
yield return new WaitForSecondsRealtime(1f);
|
||||
yield return new WaitForSecondsRealtime(3f);
|
||||
while (ReportDeadBodyPatch.MeetingStarted || GameStates.IsMeeting || ExileController.Instance || AntiBlackout.SkipTasks) yield return null;
|
||||
if (GameStates.IsEnded || !GameStates.InGame || GameStates.IsLobby) yield break;
|
||||
|
||||
try
|
||||
{
|
||||
try
|
||||
{
|
||||
AmongUsClient.Instance.RemoveNetObject(playerControl);
|
||||
Object.Destroy(playerControl.gameObject);
|
||||
}
|
||||
catch (Exception e) { Utils.ThrowException(e); }
|
||||
|
||||
playerControl = Object.Instantiate(AmongUsClient.Instance.PlayerPrefab, Vector2.zero, Quaternion.identity);
|
||||
playerControl.PlayerId = 254;
|
||||
playerControl.isNew = false;
|
||||
playerControl.notRealPlayer = true;
|
||||
|
||||
try { playerControl.NetTransform.SnapTo(new Vector2(50f, 50f)); }
|
||||
catch (Exception e) { Utils.ThrowException(e); }
|
||||
|
||||
AmongUsClient.Instance.NetIdCnt += 1U;
|
||||
MessageWriter msg = MessageWriter.Get(SendOption.Reliable);
|
||||
msg.StartMessage(5);
|
||||
msg.Write(AmongUsClient.Instance.GameId);
|
||||
msg.StartMessage(4);
|
||||
SpawnGameDataMessage item = AmongUsClient.Instance.CreateSpawnMessage(playerControl, -2, SpawnFlags.None);
|
||||
item.SerializeValues(msg);
|
||||
msg.EndMessage();
|
||||
|
||||
if (GameStates.CurrentServerType == GameStates.ServerType.Vanilla)
|
||||
{
|
||||
for (uint i = 1; i <= 3; ++i)
|
||||
{
|
||||
msg.StartMessage(4);
|
||||
msg.WritePacked(2U);
|
||||
msg.WritePacked(-2);
|
||||
msg.Write((byte)SpawnFlags.None);
|
||||
msg.WritePacked(1);
|
||||
msg.WritePacked(AmongUsClient.Instance.NetIdCnt - i);
|
||||
msg.StartMessage(1);
|
||||
msg.EndMessage();
|
||||
msg.EndMessage();
|
||||
}
|
||||
}
|
||||
|
||||
msg.EndMessage();
|
||||
AmongUsClient.Instance.SendOrDisconnect(msg);
|
||||
msg.Recycle();
|
||||
if (PlayerControl.AllPlayerControls.Contains(playerControl))
|
||||
PlayerControl.AllPlayerControls.Remove(playerControl);
|
||||
playerControl.cosmetics.currentBodySprite.BodySprite.color = Color.clear;
|
||||
playerControl.cosmetics.colorBlindText.color = Color.clear;
|
||||
}
|
||||
catch (Exception e) { Utils.ThrowException(e); }
|
||||
|
||||
yield return new WaitForSecondsRealtime(0.1f);
|
||||
|
||||
try
|
||||
{
|
||||
foreach (var pc in PlayerControl.AllPlayerControls)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (pc.AmOwner) continue;
|
||||
CustomRpcSender sender = CustomRpcSender.Create("CustomNetObject.OnMeeting", SendOption.Reliable);
|
||||
MessageWriter writer2 = sender.stream;
|
||||
sender.StartMessage(pc.OwnerId);
|
||||
writer2.StartMessage(1);
|
||||
{
|
||||
writer2.WritePacked(playerControl.NetId);
|
||||
writer2.Write(pc.PlayerId);
|
||||
}
|
||||
writer2.EndMessage();
|
||||
sender.StartRpc(playerControl.NetId, (byte)RpcCalls.MurderPlayer)
|
||||
.WriteNetObject(playerControl)
|
||||
.Write((int)MurderResultFlags.FailedError)
|
||||
.EndRpc();
|
||||
writer2.StartMessage(1);
|
||||
{
|
||||
writer2.WritePacked(playerControl.NetId);
|
||||
writer2.Write((byte)254);
|
||||
}
|
||||
writer2.EndMessage();
|
||||
sender.EndMessage();
|
||||
sender.SendMessage();
|
||||
}
|
||||
catch (Exception e) { Utils.ThrowException(e); }
|
||||
}
|
||||
playerControl.CachedPlayerData = PlayerControl.LocalPlayer.Data;
|
||||
}
|
||||
catch (Exception e) { Utils.ThrowException(e); }
|
||||
|
||||
yield return new WaitForSecondsRealtime(0.1f);
|
||||
|
||||
try
|
||||
{
|
||||
string name = PlayerControl.LocalPlayer.Data.Outfits[PlayerOutfitType.Default].PlayerName;
|
||||
int colorId = PlayerControl.LocalPlayer.Data.Outfits[PlayerOutfitType.Default].ColorId;
|
||||
string hatId = PlayerControl.LocalPlayer.Data.Outfits[PlayerOutfitType.Default].HatId;
|
||||
string skinId = PlayerControl.LocalPlayer.Data.Outfits[PlayerOutfitType.Default].SkinId;
|
||||
string petId = PlayerControl.LocalPlayer.Data.Outfits[PlayerOutfitType.Default].PetId;
|
||||
string visorId = PlayerControl.LocalPlayer.Data.Outfits[PlayerOutfitType.Default].VisorId;
|
||||
var sender = CustomRpcSender.Create("CustomNetObject.CreateNetObject", SendOption.Reliable, log: false);
|
||||
MessageWriter writer2 = sender.stream;
|
||||
sender.StartMessage();
|
||||
PlayerControl.LocalPlayer.Data.Outfits[PlayerOutfitType.Default].PlayerName = "<size=14><br></size>" + Sprite;
|
||||
PlayerControl.LocalPlayer.Data.Outfits[PlayerOutfitType.Default].ColorId = 0;
|
||||
PlayerControl.LocalPlayer.Data.Outfits[PlayerOutfitType.Default].HatId = "";
|
||||
PlayerControl.LocalPlayer.Data.Outfits[PlayerOutfitType.Default].SkinId = "";
|
||||
PlayerControl.LocalPlayer.Data.Outfits[PlayerOutfitType.Default].PetId = "";
|
||||
PlayerControl.LocalPlayer.Data.Outfits[PlayerOutfitType.Default].VisorId = "";
|
||||
writer2.StartMessage(1);
|
||||
{
|
||||
writer2.WritePacked(PlayerControl.LocalPlayer.Data.NetId);
|
||||
PlayerControl.LocalPlayer.Data.Serialize(writer2, false);
|
||||
}
|
||||
writer2.EndMessage();
|
||||
|
||||
try { playerControl.Shapeshift(PlayerControl.LocalPlayer, false); }
|
||||
catch (Exception e) { Utils.ThrowException(e); }
|
||||
|
||||
sender.StartRpc(playerControl.NetId, (byte)RpcCalls.Shapeshift)
|
||||
.WriteNetObject(PlayerControl.LocalPlayer)
|
||||
.Write(false)
|
||||
.EndRpc();
|
||||
|
||||
PlayerControl.LocalPlayer.Data.Outfits[PlayerOutfitType.Default].PlayerName = name;
|
||||
PlayerControl.LocalPlayer.Data.Outfits[PlayerOutfitType.Default].ColorId = colorId;
|
||||
PlayerControl.LocalPlayer.Data.Outfits[PlayerOutfitType.Default].HatId = hatId;
|
||||
PlayerControl.LocalPlayer.Data.Outfits[PlayerOutfitType.Default].SkinId = skinId;
|
||||
PlayerControl.LocalPlayer.Data.Outfits[PlayerOutfitType.Default].PetId = petId;
|
||||
PlayerControl.LocalPlayer.Data.Outfits[PlayerOutfitType.Default].VisorId = visorId;
|
||||
writer2.StartMessage(1);
|
||||
{
|
||||
writer2.WritePacked(PlayerControl.LocalPlayer.Data.NetId);
|
||||
PlayerControl.LocalPlayer.Data.Serialize(writer2, false);
|
||||
}
|
||||
writer2.EndMessage();
|
||||
|
||||
try { playerControl.NetTransform.SnapTo(Position); }
|
||||
catch (Exception e) { Utils.ThrowException(e); }
|
||||
|
||||
sender.StartRpc(playerControl.NetTransform.NetId, (byte)RpcCalls.SnapTo)
|
||||
.WriteVector2(Position)
|
||||
.Write(playerControl.NetTransform.lastSequenceId)
|
||||
.EndRpc();
|
||||
|
||||
sender.EndMessage();
|
||||
sender.SendMessage();
|
||||
}
|
||||
catch (Exception e) { Utils.ThrowException(e); }
|
||||
CreateNetObject(Sprite, Position);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1170,6 +1170,7 @@ internal static class CustomRolesHelper
|
||||
CustomRoles.Egoist when !pc.IsImpostor() => false,
|
||||
CustomRoles.Damocles when pc.GetCustomRole() is CustomRoles.Bomber or CustomRoles.Nuker or CustomRoles.Mercenary or CustomRoles.Cantankerous => false,
|
||||
CustomRoles.Damocles when pc.GetRoleTypes() is not (RoleTypes.Impostor or RoleTypes.Phantom or RoleTypes.Shapeshifter or RoleTypes.Viper) => false,
|
||||
CustomRoles.Damocles when pc.Is(CustomRoleTypes.Coven) && !pc.Is(CustomRoles.CovenLeader) => false,
|
||||
CustomRoles.Flash when pc.Is(CustomRoles.Swiftclaw) || pc.Is(CustomRoles.Giant) || pc.Is(CustomRoles.Spurt) || pc.GetCustomRole() is CustomRoles.Tank or CustomRoles.Zombie => false,
|
||||
CustomRoles.Giant when pc.Is(CustomRoles.Flash) || pc.Is(CustomRoles.Spurt) || pc.Is(CustomRoles.RoomRusher) => false,
|
||||
CustomRoles.Necroview when pc.Is(CustomRoles.Visionary) => false,
|
||||
|
||||
@@ -1169,8 +1169,8 @@ internal static class ReportDeadBodyPatch
|
||||
|
||||
try
|
||||
{
|
||||
for (int i = CustomNetObject.AllObjects.Count - 1; i >= 0; --i)
|
||||
CustomNetObject.AllObjects[i].OnMeeting();
|
||||
foreach (CustomNetObject cno in CustomNetObject.AllObjects.ToArray())
|
||||
cno.OnMeeting();
|
||||
}
|
||||
catch (Exception e) { ThrowException(e); }
|
||||
|
||||
|
||||
Reference in new issue
Block a user