Skip to content

Commit 6ace061

Browse files
Merge pull request #14 from Tosoks67/main
4 fixes, 1 new thing, 1 rewrite of method
2 parents f9f1bd1 + 1910736 commit 6ace061

File tree

6 files changed

+61
-28
lines changed

6 files changed

+61
-28
lines changed

Helpers/Extensions/CollectionExtensions.cs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using Random = UnityEngine.Random;
1+
using SER.Helpers.ResultSystem;
2+
using Random = UnityEngine.Random;
23

34
namespace SER.Helpers.Extensions;
45

@@ -35,6 +36,20 @@ public static string JoinStrings(this IEnumerable<string> source, string separat
3536
{
3637
return string.Join(separator, source);
3738
}
39+
public static TryGet<int> GetEnumerableHashCode<T>(this IEnumerable<T> enumerable)
40+
{
41+
if (enumerable is null) return $"{nameof(enumerable)} is null.";
42+
43+
unchecked
44+
{
45+
var hashCode = 17;
46+
foreach (var item in enumerable)
47+
{
48+
hashCode = hashCode * 31 + (item?.GetHashCode() ?? 0);
49+
}
50+
return hashCode;
51+
}
52+
}
3853

3954
extension<T>(List<T> list)
4055
{

MethodSystem/Methods/AudioMethods/CreateGlobalSpeakerMethod.cs

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using SER.ArgumentSystem.Arguments;
22
using SER.ArgumentSystem.BaseArguments;
3+
using SER.Helpers.Extensions;
34
using SER.MethodSystem.BaseMethods;
45

56
namespace SER.MethodSystem.Methods.AudioMethods;
@@ -25,16 +26,11 @@ public class CreateGlobalSpeakerMethod : SynchronousMethod
2526

2627
public override void Execute()
2728
{
28-
var targetPlayers = Args.GetPlayers("target players");
29+
var targetPlayers = Args.GetPlayers("target players").MaybeNull();
2930

3031
AudioPlayer.Create(
3132
Args.GetText("speaker name"),
32-
condition: hub =>
33-
{
34-
if (targetPlayers is null) return true;
35-
36-
return targetPlayers.Any(p => p.ReferenceHub == hub);
37-
},
33+
condition: hub => targetPlayers is null || targetPlayers.Any(p => p.ReferenceHub == hub),
3834
onIntialCreation: p =>
3935
{
4036
p.AddSpeaker("Main", Args.GetFloat("volume"), isSpatial: false, maxDistance: 5000f);

MethodSystem/Methods/AudioMethods/CreatePlayerAttachedSpeakerMethod.cs

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using SER.ArgumentSystem.Arguments;
22
using SER.ArgumentSystem.BaseArguments;
33
using SER.Helpers.Exceptions;
4+
using SER.Helpers.Extensions;
45
using SER.MethodSystem.BaseMethods;
56
using SER.MethodSystem.MethodDescriptors;
67
using UnityEngine;
@@ -37,7 +38,7 @@ public class CreatePlayerAttachedSpeakerMethod : SynchronousMethod, ICanError
3738
},
3839
new BoolArgument("is stereo")
3940
{
40-
DefaultValue = new(null, "true"),
41+
DefaultValue = new(true, null),
4142
Description = "Whether the audio will be 3D."
4243
},
4344
new PlayersArgument("target players")
@@ -55,23 +56,18 @@ public override void Execute()
5556
var minDistance = Args.GetFloat("min distance");
5657
var maxDistance = Args.GetFloat("max distance");
5758
var isStereo = Args.GetBool("is stereo");
58-
var targetPlayers = Args.GetPlayers("target players");
59+
var targetPlayers = Args.GetPlayers("target players").MaybeNull();
5960

6061
AudioPlayer.Create(
6162
speakerName,
62-
condition: hub =>
63-
{
64-
if (targetPlayers is null) return true;
65-
66-
return targetPlayers.Any(p => p.ReferenceHub == hub);
67-
},
63+
condition: hub => targetPlayers is null || targetPlayers.Any(p => p.ReferenceHub == hub),
6864
onIntialCreation: p =>
6965
{
7066
p.transform.parent = player.GameObject?.transform
7167
?? throw new ScriptRuntimeError(
7268
$"Player '{player.Nickname}' does not have a model to attach a speaker to.");
7369

74-
Speaker speaker = p.AddSpeaker("Main", volume, isStereo, minDistance, maxDistance);
70+
var speaker = p.AddSpeaker("Main", volume, isStereo, minDistance, maxDistance);
7571

7672
speaker.transform.parent = player.GameObject.transform;
7773
speaker.transform.localPosition = Vector3.zero;

MethodSystem/Methods/CASSIEMethods/CassieMethod.cs

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
using Respawning;
22
using SER.ArgumentSystem.Arguments;
33
using SER.ArgumentSystem.BaseArguments;
4-
using SER.Helpers.Extensions;
54
using SER.MethodSystem.BaseMethods;
65

76
namespace SER.MethodSystem.Methods.CASSIEMethods;
@@ -37,15 +36,33 @@ public override void Execute()
3736

3837
if (glitch)
3938
{
40-
message = "jam_100_9 " + message
41-
.Split([' '], StringSplitOptions.RemoveEmptyEntries)
42-
.Select(part =>
39+
// taken from Respawning.Announcements.WaveAnnouncementBase.PlayAnnouncement()
40+
var chanceMultiplier = AlphaWarheadController.Detonated ? 2.5f : 1;
41+
var glitchChance = UnityEngine.Random.Range(0.08f, 0.1f) * chanceMultiplier;
42+
var jamChance = UnityEngine.Random.Range(0.07f, 0.09f) * chanceMultiplier;
43+
44+
var strArray = message.Split([' '], StringSplitOptions.None);
45+
message = "";
46+
// taken from NineTailedFoxAnnouncer.ServerOnlyAddGlitchyPhrase()
47+
for (var index = 0; index < strArray.Length; index++)
48+
{
49+
message += $"{strArray[index]} ";
50+
51+
if (index >= strArray.Length - 1)
4352
{
44-
if (UnityEngine.Random.Range(1, 3) == 1) return part;
45-
return $"pitch_{UnityEngine.Random.Range(0.7f, 1.2f)} {part}";
46-
47-
})
48-
.JoinStrings(" ");
53+
continue;
54+
}
55+
56+
if (UnityEngine.Random.value < glitchChance)
57+
{
58+
message += $".G{UnityEngine.Random.Range(1, 7)} ";
59+
}
60+
61+
if (UnityEngine.Random.value < jamChance)
62+
{
63+
message += $"jam_{UnityEngine.Random.Range(0, 70):000}_{UnityEngine.Random.Range(2, 6)} ";
64+
}
65+
}
4966
}
5067

5168
if (string.IsNullOrEmpty(translation))

ValueSystem/CollectionValue.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using SER.Helpers.Extensions;
33
using SER.Helpers.ResultSystem;
44
using System.Collections;
5+
using System.Diagnostics;
56

67
namespace SER.ValueSystem;
78

@@ -62,7 +63,10 @@ public override bool EqualCondition(Value other)
6263
return !CastedValues.Where((val, i) => !val.EqualCondition(otherP.CastedValues[i])).Any();
6364
}
6465

65-
public override int HashCode => CastedValues.GetHashCode();
66+
public override int HashCode =>
67+
CastedValues.GetEnumerableHashCode().HasErrored(out var error, out var val)
68+
? throw new TosoksFuckedUpException(error)
69+
: val;
6670

6771
public TryGet<Value> GetAt(int index)
6872
{

ValueSystem/PlayerValue.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
using LabApi.Features.Wrappers;
2+
using SER.Helpers.Exceptions;
3+
using SER.Helpers.Extensions;
24

35
namespace SER.ValueSystem;
46

@@ -18,5 +20,8 @@ public PlayerValue(IEnumerable<Player> players)
1820

1921
public override bool EqualCondition(Value other) => other is PlayerValue otherP && Players.SequenceEqual(otherP.Players);
2022

21-
public override int HashCode => Players.GetHashCode();
23+
public override int HashCode =>
24+
Players.Select(plr => plr.UserId).GetEnumerableHashCode().HasErrored(out var error, out var val)
25+
? throw new TosoksFuckedUpException(error)
26+
: val;
2227
}

0 commit comments

Comments
 (0)