Skip to content
This repository was archived by the owner on Aug 9, 2023. It is now read-only.

Commit 221dc51

Browse files
authored
Merge pull request #85 from SynapseSL/development
Development
2 parents 669c831 + 9ef66b3 commit 221dc51

40 files changed

+563
-206
lines changed

.github/workflows/testbuild.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: TestBuild
22

3-
on: [pull_request]
3+
on: [push, pull_request]
44

55
env:
66
# Path to the solution file relative to the root of the project.

Refs/Assembly-CSharp-Publicized.dll

18.5 KB
Binary file not shown.

Synapse/Api/Dummy.cs

-1
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,6 @@ public Dummy(Vector3 pos, Vector2 rot, RoleType role = RoleType.ClassD, string n
223223
Player.QueryProcessor.NetworkPlayerId = QueryProcessor._idIterator;
224224
Player.QueryProcessor._ipAddress = Server.Get.Host.IpAddress;
225225
Player.ClassManager.CurClass = role;
226-
Player.MaxHealth = Player.ClassManager.Classes.SafeGet((int)Player.RoleType).maxHP;
227226
Player.Health = Player.MaxHealth;
228227
Player.NicknameSync.Network_myNickSync = name;
229228
Player.RankName = badgetext;

Synapse/Api/Events/EventHandler.cs

+8-2
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,22 @@ internal EventHandler()
1414
Server.UpdateEvent += OnUpdate;
1515
#if DEBUG
1616
Player.PlayerKeyPressEvent += KeyPress;
17+
Player.PlayerShootEvent += Shoot;
1718
#endif
1819
}
1920

21+
private void Shoot(SynapseEventArguments.PlayerShootEventArgs ev)
22+
{
23+
Logger.Get.Warn(ev.TargetPosition);
24+
}
25+
2026
private void KeyPress(SynapseEventArguments.PlayerKeyPressEventArgs ev)
2127
{
2228
switch (ev.KeyCode)
2329
{
2430
case KeyCode.Alpha1:
25-
Logger.Get.Debug(ev.Player.ItemInHand.ID);
26-
31+
foreach (var station in Api.Map.Get.WorkStations)
32+
Logger.Get.Warn(station.GameObject.name);
2733
break;
2834
}
2935
}

Synapse/Api/Events/PlayerEvents.cs

+15-8
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using UnityEngine;
55
using InventorySystem.Items.MicroHID;
66
using System;
7+
using PlayerStatsSystem;
78
using Synapse.Api.Enum;
89

910
namespace Synapse.Api.Events
@@ -117,25 +118,31 @@ internal void InvokePlayerSpeakEvent(DissonanceUserSetup userSetup, ref bool int
117118
allow = ev.Allow;
118119
}
119120

120-
internal void InvokePlayerDeathEvent(Player victim, Player killer, PlayerStats.HitInfo info)
121+
internal void InvokePlayerDeathEvent(Player victim, Player killer, ItemType Weapon)
121122
{
122-
var ev = new PlayerDeathEventArgs {HitInfo = info, Killer = killer, Victim = victim};
123+
var ev = new PlayerDeathEventArgs
124+
{
125+
Killer = killer,
126+
Victim = victim,
127+
Weapon = Weapon
128+
};
123129
PlayerDeathEvent?.Invoke(ev);
124130
}
125131

126-
internal void InvokePlayerDamageEvent(Player victim, Player killer, ref PlayerStats.HitInfo info, out bool allow)
132+
internal void InvokePlayerDamageEvent(Player victim, Player killer, ref float Damage, ItemType Weapon, out bool Allow)
127133
{
128134
var ev = new PlayerDamageEventArgs
129135
{
130-
HitInfo = info,
131136
Killer = killer,
132-
Victim = victim
137+
Victim = victim,
138+
Damage = Damage,
139+
Weapon = Weapon
133140
};
134-
141+
135142
PlayerDamageEvent?.Invoke(ev);
136143

137-
info = ev.HitInfo;
138-
allow = ev.Allow;
144+
Damage = ev.Damage;
145+
Allow = ev.Allow;
139146
}
140147

141148
internal void InvokeLoadComponentsEvent(GameObject gameObject)

Synapse/Api/Events/SynapseEventArguments/PlayerEventArgs.cs

+8-13
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
using InventorySystem.Items.MicroHID;
66
using Synapse.Api.Enum;
77
using System;
8+
using PlayerStatsSystem;
9+
using Synapse.Api;
810

911
// ReSharper disable UnusedAutoPropertyAccessor.Global
1012
namespace Synapse.Api.Events.SynapseEventArguments
@@ -66,27 +68,20 @@ public class PlayerDeathEventArgs : EventHandler.ISynapseEventArgs
6668

6769
public Player Killer { get; internal set; }
6870

69-
public PlayerStats.HitInfo HitInfo { get; internal set; }
71+
public float Damage { get; set; }
72+
73+
public ItemType Weapon { get; internal set; }
7074
}
7175

7276
public class PlayerDamageEventArgs : EventHandler.ISynapseEventArgs
7377
{
7478
public Player Killer { get; internal set; }
7579

7680
public Player Victim { get; internal set; }
77-
78-
public float DamageAmount
79-
{
80-
get => HitInfo.Amount;
81-
set
82-
{
83-
var info = HitInfo;
84-
info.Amount = value;
85-
HitInfo = info;
86-
}
87-
}
8881

89-
public PlayerStats.HitInfo HitInfo { get; set; }
82+
public float Damage { get; set; }
83+
84+
public ItemType Weapon { get; internal set; }
9085

9186
public bool Allow { get; set; } = true;
9287
}

Synapse/Api/Map.cs

+4-3
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using InventorySystem.Items.Firearms.Attachments;
77
using MapGeneration;
88
using Mirror;
9+
using PlayerStatsSystem;
910
using Scp914;
1011
using Synapse.Api.Enum;
1112
using Synapse.Api.Items;
@@ -161,9 +162,9 @@ public Dummy CreateDummy(Vector3 pos, Quaternion rot, RoleType role = RoleType.C
161162
public WorkStation CreateWorkStation(Vector3 position, Vector3 rotation, Vector3 scale)
162163
=> new WorkStation(position, rotation, scale);
163164

164-
[Obsolete("Moved to Ragdoll.CreateRagdoll()", true)]
165-
public Ragdoll CreateRagdoll(RoleType roletype, Vector3 pos, Quaternion rot, Vector3 velocity, PlayerStats.HitInfo info, bool allowRecall, Player owner)
166-
=> new Ragdoll(roletype, pos, rot, velocity, info, allowRecall, owner.NickName);
165+
//[Obsolete("Moved to Ragdoll.CreateRagdoll()", true)]
166+
//public Ragdoll CreateRagdoll(RoleType roletype, Vector3 pos, Quaternion rot, DamageHandlerBase handler, Player owner)
167+
// => new Ragdoll(roletype, pos, rot, handler, owner);
167168

168169
[Obsolete("Moved to Door.SpawnDoorVariant()", true)]
169170
public Door SpawnDoorVariant(Vector3 position, Quaternion? rotation = null, DoorPermissions permissions = null)

Synapse/Api/Player.cs

+20-30
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,13 @@
55
using InventorySystem;
66
using InventorySystem.Disarming;
77
using InventorySystem.Items;
8+
using InventorySystem.Items.Firearms;
89
using InventorySystem.Items.Firearms.Attachments;
910
using InventorySystem.Searching;
1011
using MapGeneration;
1112
using Mirror;
1213
using Mirror.LiteNetLib4Mirror;
14+
using PlayerStatsSystem;
1315
using RemoteAdmin;
1416
using Synapse.Api.Enum;
1517
using Synapse.Api.Events.SynapseEventArguments;
@@ -74,10 +76,10 @@ public void ChangeRoleAtPosition(RoleType role)
7476
RoleChangeClassIdPatch.ForceLite = false;
7577
}
7678

77-
public void Kill(DamageTypes.DamageType damageType = default)
79+
public void Kill(DamageHandlerBase damageType = default)
7880
{
79-
Health = 1;
80-
Hurt(100);
81+
damageType ??= new UniversalDamageHandler(10000, DeathTranslations.Unknown);
82+
PlayerStats.KillPlayer(damageType);
8183
}
8284

8385
public void GiveTextHint(string message, float duration = 5f)
@@ -123,15 +125,12 @@ public void RaLogout()
123125
Hub.serverRoles.TargetCloseRemoteAdmin();
124126
}
125127

126-
public void Heal(float hp) => PlayerStats.HealHPAmount(hp);
128+
public void Heal(float hp) => Health += hp;
127129

128-
public void Hurt(int amount, DamageTypes.DamageType damagetype = default, Player attacker = null)
130+
public void Hurt(int amount, DamageHandlerBase damageType = default)
129131
{
130-
if (damagetype == default)
131-
damagetype = DamageTypes.None;
132-
133-
if (attacker == null) attacker = this;
134-
attacker.PlayerStats.HurtPlayer(new PlayerStats.HitInfo(amount, attacker.NickName, damagetype, attacker.PlayerId, true), gameObject);
132+
damageType ??= new UniversalDamageHandler(amount, DeathTranslations.Unknown);
133+
PlayerStats.DealDamage(damageType);
135134
}
136135

137136
public void OpenReportWindow(string text) => GameConsoleTransmission.SendToClient(Connection, "[REPORTING] " + text, "white");
@@ -547,27 +546,19 @@ public Vector3 Scale
547546

548547
public float Health
549548
{
550-
get => PlayerStats.Health;
551-
set => PlayerStats.Health = value;
549+
get => Hub.playerStats.GetModule<HealthStat>().CurValue;
550+
set => Hub.playerStats.GetModule<HealthStat>().CurValue = value;
552551
}
553552

554-
public int MaxHealth
555-
{
556-
get => PlayerStats.maxHP;
557-
set => PlayerStats.maxHP = value;
558-
}
553+
public float MaxHealth => Hub.playerStats.GetModule<HealthStat>().MaxValue;
559554

560555
public float ArtificialHealth
561556
{
562-
get => PlayerStats.GetAhpValue();
563-
set => PlayerStats.SafeSetAhpValue(value);
557+
get => Hub.playerStats.GetModule<AhpStat>().CurValue;
558+
set => Hub.playerStats.GetModule<AhpStat>().CurValue = value;
564559
}
565560

566-
public int MaxArtificialHealth
567-
{
568-
get => PlayerStats.MaxArtificialHealth;
569-
set => PlayerStats.MaxArtificialHealth = value;
570-
}
561+
public int MaxArtificialHealth => (int) Hub.playerStats.GetModule<AhpStat>().MaxValue;
571562

572563
public float Stamina
573564
{
@@ -609,7 +600,7 @@ public Player Cuffer
609600
{
610601
get
611602
{
612-
if (!DisarmedPlayers.Entries.Any(x => x.DisarmedPlayer == NetworkIdentity.netId)) return null;
603+
if (DisarmedPlayers.Entries.All(x => x.DisarmedPlayer != NetworkIdentity.netId)) return null;
613604

614605
var id = DisarmedPlayers.Entries.FirstOrDefault(x => x.DisarmedPlayer == NetworkIdentity.netId).Disarmer;
615606
if (id == 0)
@@ -932,25 +923,25 @@ public void TriggerEscape()
932923
switch (RealTeam)
933924
{
934925
case Team.MTF when changeTeam:
935-
RoundSummary.escaped_scientists++;
926+
RoundSummary.EscapedScientists++;
936927
tickets.GrantTickets(Respawning.SpawnableTeamType.NineTailedFox,
937928
GameCore.ConfigFile.ServerConfig.GetInt("respawn_tickets_mtf_classd_cuffed_count", 1), false);
938929
break;
939930

940931
case Team.MTF when !changeTeam:
941-
RoundSummary.escaped_scientists++;
932+
RoundSummary.EscapedScientists++;
942933
tickets.GrantTickets(Respawning.SpawnableTeamType.NineTailedFox,
943934
GameCore.ConfigFile.ServerConfig.GetInt("respawn_tickets_mtf_scientist_count", 1), false);
944935
break;
945936

946937
case Team.CHI when changeTeam:
947-
RoundSummary.escaped_ds++;
938+
RoundSummary.EscapedClassD++;
948939
tickets.GrantTickets(Respawning.SpawnableTeamType.NineTailedFox,
949940
GameCore.ConfigFile.ServerConfig.GetInt("respawn_tickets_ci_scientist_cuffed_count", 1), false);
950941
break;
951942

952943
case Team.CHI when !changeTeam:
953-
RoundSummary.escaped_ds++;
944+
RoundSummary.EscapedClassD++;
954945
tickets.GrantTickets(Respawning.SpawnableTeamType.NineTailedFox,
955946
GameCore.ConfigFile.ServerConfig.GetInt("respawn_tickets_ci_classd_count", 1), false);
956947
break;
@@ -959,7 +950,6 @@ public void TriggerEscape()
959950
else
960951
{
961952
CustomRole.Escape();
962-
return;
963953
}
964954
}
965955
}

Synapse/Api/Ragdoll.cs

+20-17
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
using Mirror;
22
using UnityEngine;
33
using System.Linq;
4+
using PlayerStatsSystem;
45

56
namespace Synapse.Api
67
{
78
public class Ragdoll
89
{
910
internal Ragdoll(global::Ragdoll rag) => ragdoll = rag;
1011

11-
public Ragdoll(RoleType roletype, Vector3 pos, Quaternion rot, Vector3 velocity, PlayerStats.HitInfo info, bool allowRecall, string owner)
12+
/*public Ragdoll(RoleType roletype, Vector3 pos, Quaternion rot, Vector3 velocity, PlayerStats.HitInfo info, bool allowRecall, string owner)
1213
{
1314
var role = Server.Get.Host.ClassManager.Classes.SafeGet((int)roletype);
1415
var gameobject = UnityEngine.Object.Instantiate(role.model_ragdoll, pos + role.ragdoll_offset.position, Quaternion.Euler(rot.eulerAngles + role.ragdoll_offset.rotation));
@@ -18,6 +19,20 @@ public Ragdoll(RoleType roletype, Vector3 pos, Quaternion rot, Vector3 velocity,
1819
ragdoll.NetworkallowRecall = allowRecall;
1920
ragdoll.NetworkPlayerVelo = velocity;
2021
Map.Get.Ragdolls.Add(this);
22+
}*/
23+
24+
public Ragdoll(RoleType roleType, Vector3 pos, Quaternion rot, DamageHandlerBase handler, Player owner)
25+
{
26+
GameObject gameObject = Server.Get.Host.ClassManager.Classes.SafeGet((int) roleType).model_ragdoll;
27+
//GameObject gameObject = Object.Instantiate(role.model_ragdoll, pos + role.model_offset.position,
28+
// Quaternion.Euler(rot.eulerAngles + role.model_offset.rotation));
29+
if (gameObject == null || !Object.Instantiate(gameObject).TryGetComponent(out ragdoll))
30+
{
31+
return;
32+
}
33+
ragdoll = gameObject.GetComponent<global::Ragdoll>();
34+
ragdoll.NetworkInfo = new RagdollInfo(owner.Hub, handler, pos, rot);
35+
NetworkServer.Spawn(gameObject);
2136
}
2237

2338
private readonly global::Ragdoll ragdoll;
@@ -28,7 +43,7 @@ public Ragdoll(RoleType roletype, Vector3 pos, Quaternion rot, Vector3 velocity,
2843

2944
public RoleType RoleType
3045
{
31-
get => Server.Get.Host.ClassManager.Classes.FirstOrDefault(role => role.fullName == ragdoll.owner.FullName).roleId;
46+
get => ragdoll.Info.RoleType;
3247
}
3348

3449
public Vector3 Position
@@ -55,19 +70,7 @@ public Vector3 Scale
5570

5671
public Player Owner
5772
{
58-
get => Server.Get.GetPlayer(ragdoll.owner.PlayerId);
59-
set
60-
{
61-
ragdoll.owner.PlayerId = value.PlayerId;
62-
ragdoll.owner.Nick = value.NickName;
63-
ragdoll.owner.ownerHLAPI_id = value.GetComponent<Dissonance.Integrations.MirrorIgnorance.MirrorIgnorancePlayer>().PlayerId;
64-
}
65-
}
66-
67-
public bool AllowRecall
68-
{
69-
get => ragdoll.allowRecall;
70-
set => ragdoll.allowRecall = value;
73+
get => Server.Get.GetPlayer(ragdoll.Info.OwnerHub.playerId);
7174
}
7275

7376
public void Destroy()
@@ -76,7 +79,7 @@ public void Destroy()
7679
Map.Get.Ragdolls.Remove(this);
7780
}
7881

79-
public static Ragdoll CreateRagdoll(RoleType roletype, Vector3 pos, Quaternion rot, Vector3 velocity, PlayerStats.HitInfo info, bool allowRecall, Player owner)
80-
=> new Ragdoll(roletype, pos, rot, velocity, info, allowRecall, owner.NickName);
82+
public static Ragdoll CreateRagdoll(RoleType roletype, Vector3 pos, Quaternion rot, DamageHandlerBase handler, Player owner)
83+
=> new Ragdoll(roletype, pos, rot, handler, owner);
8184
}
8285
}

0 commit comments

Comments
 (0)