mirror of
https://github.com/Gurge44/EndlessHostRoles.git
synced 2026-10-20 01:46:25 +00:00
optimize CTF code
This commit is contained in:
1 parent
d15e0a4ba2
commit
f121855345
3 files changed
+65
-21
No files matched your search
+61
-19
@@ -193,32 +193,66 @@ public static class CaptureTheFlag
|
||||
{
|
||||
if (!ValidTag || seer.PlayerId != target.PlayerId) return string.Empty;
|
||||
|
||||
string arrows = TargetArrow.GetAllArrows(seer.PlayerId);
|
||||
arrows = arrows.Length > 0 ? $"{arrows}\n" : string.Empty;
|
||||
byte id = seer.PlayerId;
|
||||
|
||||
var str = $"{arrows}<size=1.4>{GetStatistics(target.PlayerId).Replace(" | ", "\n")}</size>\n";
|
||||
var sb = new StringBuilder(128);
|
||||
|
||||
string arrows = TargetArrow.GetAllArrows(id);
|
||||
if (arrows.Length > 0)
|
||||
{
|
||||
sb.Append(arrows);
|
||||
sb.Append('\n');
|
||||
}
|
||||
|
||||
(int carriedFor, int tags) = GetStatistics(target.PlayerId);
|
||||
sb.Append("<size=1.4>");
|
||||
sb.Append(string.Format(Translator.GetString("CTF_PlayerStats_CarriedFor"), carriedFor));
|
||||
sb.Append('\n');
|
||||
sb.Append(string.Format(Translator.GetString("CTF_PlayerStats_Tags"), tags));
|
||||
sb.Append("</size>\n");
|
||||
|
||||
if (GameEndCriteria.GetValue() == 2)
|
||||
{
|
||||
long timeLeft = TimeLimit.GetInt() - (Utils.TimeStamp - GameStartTS) + 1;
|
||||
|
||||
if (timeLeft >= 0) str += $"<size=1.8><#ffffff>{timeLeft / 60:00}:{timeLeft % 60:00}</color></size>\n";
|
||||
else str += $"<size=1.6><#ffffff>{Translator.GetString("CTF_TimeIsUp")}</color></size>\n";
|
||||
if (timeLeft >= 0)
|
||||
{
|
||||
sb.Append("<size=1.8><#ffffff>");
|
||||
long minutes = timeLeft / 60;
|
||||
long seconds = timeLeft % 60;
|
||||
|
||||
if (minutes < 10) sb.Append('0');
|
||||
sb.Append(minutes);
|
||||
sb.Append(':');
|
||||
if (seconds < 10) sb.Append('0');
|
||||
sb.Append(seconds);
|
||||
}
|
||||
else
|
||||
{
|
||||
sb.Append("<size=1.6><#ffffff>");
|
||||
sb.Append(Translator.GetString("CTF_TimeIsUp"));
|
||||
}
|
||||
|
||||
sb.Append("</color></size>\n");
|
||||
}
|
||||
|
||||
if (TemporarilyOutPlayers.TryGetValue(seer.PlayerId, out long backTS))
|
||||
if (TemporarilyOutPlayers.TryGetValue(id, out long backTS))
|
||||
{
|
||||
long timeLeft = backTS - Utils.TimeStamp;
|
||||
str += $"{string.Format(Translator.GetString("CTF_BackIn"), timeLeft)}\n";
|
||||
sb.Append(string.Format(Translator.GetString("CTF_BackIn"), backTS - Utils.TimeStamp));
|
||||
sb.Append('\n');
|
||||
}
|
||||
|
||||
return str + string.Join("<#ffffff> | </color>", TeamData.Select(x => Utils.ColorString(x.Key.GetTeamColor(), x.Value.RoundsWon.ToString())));
|
||||
sb.Append(Utils.ColorString(Color.blue, TeamData[CTFTeam.Blue].RoundsWon.ToString()));
|
||||
sb.Append("<#ffffff> | </color>");
|
||||
sb.Append(Utils.ColorString(Color.yellow, TeamData[CTFTeam.Yellow].RoundsWon.ToString()));
|
||||
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
public static string GetStatistics(byte id)
|
||||
public static (int CarriedFor, int Tags) GetStatistics(byte id)
|
||||
{
|
||||
if (!PlayerData.TryGetValue(id, out CTFPlayerData stats)) return string.Empty;
|
||||
return string.Format(Translator.GetString("CTF_PlayerStats"), Math.Round(stats.FlagTime, 1), stats.TagCount);
|
||||
if (!PlayerData.TryGetValue(id, out CTFPlayerData stats)) return (0, 0);
|
||||
return ((int)Math.Round(stats.FlagTime, 1), stats.TagCount);
|
||||
}
|
||||
|
||||
public static int GetFlagTime(byte id)
|
||||
@@ -713,17 +747,25 @@ public static class CaptureTheFlag
|
||||
//[HarmonyPatch(typeof(PlayerControl), nameof(PlayerControl.FixedUpdate))]
|
||||
public static class FixedUpdatePatch
|
||||
{
|
||||
private static long LastUpdate;
|
||||
|
||||
public static void Postfix(PlayerControl __instance)
|
||||
{
|
||||
if (!AmongUsClient.Instance.AmHost || !GameStates.IsInTask || ExileController.Instance || Options.CurrentGameMode != CustomGameMode.CaptureTheFlag || !Main.IntroDestroyed || __instance.PlayerId >= 254 || WinnerData.Team != "No one wins" || IntroCutsceneDestroyPatch.IntroDestroyTS + 5 > Utils.TimeStamp) return;
|
||||
if (!AmongUsClient.Instance.AmHost || !GameStates.IsInTask || ExileController.Instance || Options.CurrentGameMode != CustomGameMode.CaptureTheFlag || !Main.IntroDestroyed || __instance.PlayerId >= 254 || WinnerData.Team != "No one wins") return;
|
||||
|
||||
long now = Utils.TimeStamp;
|
||||
if (IntroCutsceneDestroyPatch.IntroDestroyTS + 5 > now) return;
|
||||
|
||||
bool notified = false;
|
||||
|
||||
if (__instance.AmOwner)
|
||||
{
|
||||
TeamData.Values.Do(x => x.Update());
|
||||
|
||||
if (GameEndCriteria.GetValue() == 2)
|
||||
if (now != LastUpdate && GameEndCriteria.GetValue() == 2)
|
||||
{
|
||||
long timeLeft = TimeLimit.GetInt() - (Utils.TimeStamp - GameStartTS) + 1;
|
||||
LastUpdate = now;
|
||||
long timeLeft = TimeLimit.GetInt() - (now - GameStartTS) + 1;
|
||||
|
||||
switch (timeLeft)
|
||||
{
|
||||
@@ -736,6 +778,7 @@ public static class CaptureTheFlag
|
||||
case >= -1:
|
||||
{
|
||||
Utils.NotifyRoles(SendOption: SendOption.None);
|
||||
notified = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -760,16 +803,15 @@ public static class CaptureTheFlag
|
||||
|
||||
if (TemporarilyOutPlayers.TryGetValue(__instance.PlayerId, out long endTS))
|
||||
{
|
||||
if (Utils.TimeStamp >= endTS)
|
||||
if (now >= endTS)
|
||||
{
|
||||
TemporarilyOutPlayers.Remove(__instance.PlayerId);
|
||||
__instance.ReviveFromTemporaryExile();
|
||||
__instance.TP(team.GetFlagBase().Position);
|
||||
RPC.PlaySoundRPC(__instance.PlayerId, Sounds.SpawnSound);
|
||||
Utils.NotifyRoles(SpecifySeer: __instance, SpecifyTarget: __instance, SendOption: SendOption.None);
|
||||
}
|
||||
else if (GameEndCriteria.GetValue() != 2)
|
||||
Utils.NotifyRoles(SpecifySeer: __instance, SpecifyTarget: __instance, SendOption: SendOption.None);
|
||||
|
||||
if (!notified) Utils.NotifyRoles(SpecifySeer: __instance, SpecifyTarget: __instance, SendOption: SendOption.None);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+2
-1
@@ -4221,7 +4221,8 @@ public static class Utils
|
||||
summary = $"{ColorString(Main.PlayerColors[id], name)} - <#e8cd46>{rrSurvivedText}{vitalText}";
|
||||
break;
|
||||
case CustomGameMode.CaptureTheFlag:
|
||||
summary = $"{ColorString(Main.PlayerColors[id], name)}: {CaptureTheFlag.GetStatistics(id)}";
|
||||
(int carriedFor, int tags) = CaptureTheFlag.GetStatistics(id);
|
||||
summary = $"{ColorString(Main.PlayerColors[id], name)}: {string.Format(GetString("CTF_PlayerStats_CarriedFor"), carriedFor)} | {string.Format(GetString("CTF_PlayerStats_Tags"), tags)}";
|
||||
if (CaptureTheFlag.IsDeathPossible) summary += $" ({GetVitalText(id, true)})";
|
||||
break;
|
||||
case CustomGameMode.KingOfTheZones:
|
||||
|
||||
@@ -4258,7 +4258,8 @@
|
||||
"CTF_GameEndCriteria.PlayXRounds": "Play X Rounds",
|
||||
"CTF_GameEndCriteria.TimeLimit": "Time Limit",
|
||||
"CTF_Notify_EnemyTeamRoom": "The enemy team is in <#00ffa5>{0}</color>",
|
||||
"CTF_PlayerStats": "<#00ffa5>Carried For: <#ffffff>{0}s</color> | Tags: <#ffffff>{1}</color></color>",
|
||||
"CTF_PlayerStats_CarriedFor": "<#00a5ff>Carried For: <#ffffff>{0}s</color></color>",
|
||||
"CTF_PlayerStats_Tags": "<#00a5ff>Tags: <#ffffff>{1}</color></color>",
|
||||
"CTF_PointsToWin": "Points to Win",
|
||||
"CTF_RoundsToPlay": "Rounds to Play",
|
||||
"CTF_SpeedReductionForFlagCarrier": "Speed Reduction for Flag Carriers",
|
||||
|
||||
Reference in new issue
Block a user