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

Commit 669c831

Browse files
authored
Merge pull request #78 from SynapseSL/development
Development
2 parents 592edc4 + 8ee9b87 commit 669c831

File tree

12 files changed

+150
-94
lines changed

12 files changed

+150
-94
lines changed

Refs/Assembly-CSharp-Publicized.dll

31 KB
Binary file not shown.

Synapse/Api/Dummy.cs

+76-63
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using System.Collections.Generic;
1+
using System;
2+
using System.Collections.Generic;
23
using InventorySystem;
34
using Mirror;
45
using RemoteAdmin;
@@ -99,7 +100,11 @@ public string BadgeColor
99100
public PlayerMovementState Movement
100101
{
101102
get => Player.AnimationController.MoveState;
102-
set => Player.AnimationController.UserCode_CmdChangeSpeedState((byte)value);
103+
set
104+
{
105+
Player.AnimationController.MoveState = Movement;
106+
Player.AnimationController.RpcReceiveState((byte)Movement);
107+
}
103108
}
104109

105110
public MovementDirection Direction { get; set; }
@@ -116,68 +121,75 @@ private IEnumerator<float> Update()
116121
for(; ; )
117122
{
118123
yield return MEC.Timing.WaitForSeconds(0.1f);
119-
if (GameObject == null) yield break;
120-
if (Direction == MovementDirection.Stop)
121-
{
122-
continue;
123-
}
124-
125-
var wall = false;
126-
var speed = 0f;
127-
128-
switch (Movement)
129-
{
130-
case PlayerMovementState.Sneaking:
131-
speed = SneakSpeed;
132-
break;
133-
134-
case PlayerMovementState.Sprinting:
135-
speed = RunSpeed * Map.Get.SprintSpeed;
136-
break;
137-
138-
case PlayerMovementState.Walking:
139-
speed = WalkSpeed * Map.Get.WalkSpeed;
140-
break;
141-
}
142-
143-
switch (Direction)
124+
try
144125
{
145-
case MovementDirection.Forward:
146-
var pos = Position + Player.CameraReference.forward / 10 * speed;
147-
148-
if (!Physics.Linecast(Position, pos, Player.PlayerMovementSync.CollidableSurfaces))
149-
Player.PlayerMovementSync.OverridePosition(pos, 0f, true);
150-
else wall = true;
151-
break;
152-
153-
case MovementDirection.BackWards:
154-
pos = Position - Player.CameraReference.forward / 10 * speed;
155-
156-
if (!Physics.Linecast(Position, pos, Player.PlayerMovementSync.CollidableSurfaces))
157-
Player.PlayerMovementSync.OverridePosition(pos, 0f, true);
158-
else wall = true;
159-
break;
160-
161-
case MovementDirection.Right:
162-
pos = Position + Quaternion.AngleAxis(90, Vector3.up) * Player.CameraReference.forward / 10 * speed;
163-
164-
if (!Physics.Linecast(Position, pos, Player.PlayerMovementSync.CollidableSurfaces))
165-
Player.PlayerMovementSync.OverridePosition(pos, 0f, true);
166-
else wall = true;
167-
break;
168-
169-
case MovementDirection.Left:
170-
pos = Position - Quaternion.AngleAxis(90, Vector3.up) * Player.CameraReference.forward / 10 * speed;
171-
172-
if (!Physics.Linecast(Position, pos, Player.PlayerMovementSync.CollidableSurfaces))
173-
Player.PlayerMovementSync.OverridePosition(pos, 0f, true);
174-
else wall = true;
175-
break;
126+
if (GameObject == null) yield break;
127+
if (Direction == MovementDirection.Stop)
128+
{
129+
continue;
130+
}
131+
132+
var wall = false;
133+
var speed = 0f;
134+
135+
switch (Movement)
136+
{
137+
case PlayerMovementState.Sneaking:
138+
speed = SneakSpeed;
139+
break;
140+
141+
case PlayerMovementState.Sprinting:
142+
speed = RunSpeed * Map.Get.SprintSpeed;
143+
break;
144+
145+
case PlayerMovementState.Walking:
146+
speed = WalkSpeed * Map.Get.WalkSpeed;
147+
break;
148+
}
149+
150+
switch (Direction)
151+
{
152+
case MovementDirection.Forward:
153+
var pos = Position + Player.CameraReference.forward / 10 * speed;
154+
155+
if (!Physics.Linecast(Position, pos, Player.PlayerMovementSync.CollidableSurfaces))
156+
Player.PlayerMovementSync.OverridePosition(pos, 0f, true);
157+
else wall = true;
158+
break;
159+
160+
case MovementDirection.BackWards:
161+
pos = Position - Player.CameraReference.forward / 10 * speed;
162+
163+
if (!Physics.Linecast(Position, pos, Player.PlayerMovementSync.CollidableSurfaces))
164+
Player.PlayerMovementSync.OverridePosition(pos, 0f, true);
165+
else wall = true;
166+
break;
167+
168+
case MovementDirection.Right:
169+
pos = Position + Quaternion.AngleAxis(90, Vector3.up) * Player.CameraReference.forward / 10 * speed;
170+
171+
if (!Physics.Linecast(Position, pos, Player.PlayerMovementSync.CollidableSurfaces))
172+
Player.PlayerMovementSync.OverridePosition(pos, 0f, true);
173+
else wall = true;
174+
break;
175+
176+
case MovementDirection.Left:
177+
pos = Position - Quaternion.AngleAxis(90, Vector3.up) * Player.CameraReference.forward / 10 * speed;
178+
179+
if (!Physics.Linecast(Position, pos, Player.PlayerMovementSync.CollidableSurfaces))
180+
Player.PlayerMovementSync.OverridePosition(pos, 0f, true);
181+
else wall = true;
182+
break;
183+
}
184+
185+
if (wall)
186+
{
187+
Direction = MovementDirection.Stop;
188+
}
176189
}
177-
178-
if (wall)
190+
catch(Exception e)
179191
{
180-
Direction = MovementDirection.Stop;
192+
Logger.Get.Error($"Synapse-Dummy: Dummy Update Failed:\n{e}");
181193
}
182194
}
183195
}
@@ -196,7 +208,7 @@ private IEnumerator<float> Update()
196208
public Dummy(Vector3 pos, Vector2 rot, RoleType role = RoleType.ClassD, string name = "(null)", string badgetext = "", string badgecolor = "")
197209
{
198210
GameObject obj =
199-
Object.Instantiate(
211+
UnityEngine.Object.Instantiate(
200212
NetworkManager.singleton.playerPrefab);
201213

202214
GameObject = obj;
@@ -217,6 +229,7 @@ public Dummy(Vector3 pos, Vector2 rot, RoleType role = RoleType.ClassD, string n
217229
Player.RankName = badgetext;
218230
Player.RankColor = badgecolor;
219231
Player.GodMode = true;
232+
Player.PlayerMovementSync.NetworkGrounded = true;
220233
RunSpeed = CharacterClassManager._staticClasses[(int)role].runSpeed;
221234
WalkSpeed = CharacterClassManager._staticClasses[(int)role].walkSpeed;
222235
MEC.Timing.RunCoroutine(Update());
@@ -254,7 +267,7 @@ public void Spawn()
254267
/// </summary>
255268
public void Destroy()
256269
{
257-
Object.Destroy(GameObject);
270+
UnityEngine.Object.Destroy(GameObject);
258271
Map.Get.Dummies.Remove(this);
259272
}
260273

Synapse/Api/Events/EventHandler.cs

+4-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,10 @@ private void KeyPress(SynapseEventArguments.PlayerKeyPressEventArgs ev)
2121
{
2222
switch (ev.KeyCode)
2323
{
24-
24+
case KeyCode.Alpha1:
25+
Logger.Get.Debug(ev.Player.ItemInHand.ID);
26+
27+
break;
2528
}
2629
}
2730

Synapse/Api/Items/ItemManager.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ public class ItemManager
88
{
99
public static ItemManager Get => Server.Get.ItemManager;
1010

11-
public const int HighestItem = (int)ItemType.GunShotgun;
11+
public const int HighestItem = (int)ItemType.SCP2176;
1212

1313
private readonly List<CustomItemInformation> customItems = new List<CustomItemInformation>();
1414

Synapse/Api/Items/PlayerInventory.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public SynapseItem this[int index]
1717
get => Items[index];
1818
}
1919

20-
public List<Items.SynapseItem> Items => player.VanillaInventory.UserInventory.Items.Select(x => x.Value.GetSynapseItem()).ToList();
20+
public List<Items.SynapseItem> Items => player.VanillaInventory.UserInventory.Items.Select(x => x.Value.GetSynapseItem()).Where(x => x != null).ToList();
2121

2222
public void AddItem(SynapseItem item) => item.PickUp(player);
2323

@@ -36,7 +36,7 @@ public void DropAll()
3636
try
3737
{
3838
foreach (var item in Items)
39-
item.Drop();
39+
item?.Drop();
4040

4141
foreach (var ammo in player.VanillaInventory.UserInventory.ReserveAmmo.ToList())
4242
player.VanillaInventory.ServerDropAmmo(ammo.Key, ammo.Value);

Synapse/Api/Items/SynapseItem.cs

+24-2
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,7 @@ public Vector3 Scale
297297
}
298298
}
299299

300+
private float durabillity = 0;
300301
public float Durabillity
301302
{
302303
get
@@ -331,10 +332,16 @@ public float Durabillity
331332
break;
332333
}
333334

334-
return 0;
335+
return durabillity;
335336
}
336337
set
337338
{
339+
if(State == ItemState.Despawned)
340+
{
341+
durabillity = value;
342+
return;
343+
}
344+
338345
switch (ItemCategory)
339346
{
340347
case ItemCategory.Radio:
@@ -372,6 +379,7 @@ public float Durabillity
372379
}
373380
}
374381

382+
private uint attachments = 0;
375383
public uint WeaponAttachments
376384
{
377385
get
@@ -384,10 +392,16 @@ public uint WeaponAttachments
384392
{
385393
return armpickup.Status.Attachments;
386394
}
387-
return 0;
395+
return attachments;
388396
}
389397
set
390398
{
399+
if (State == ItemState.Despawned)
400+
{
401+
attachments = value;
402+
return;
403+
}
404+
391405
if (ItemBase is Firearm arm)
392406
{
393407
arm.ApplyAttachmentsCode(value,true);
@@ -412,6 +426,8 @@ public void PickUp(Player player)
412426

413427
case ItemState.Despawned:
414428
player.VanillaInventory.ServerAddItem(ItemType, Serial);
429+
Durabillity = durabillity;
430+
WeaponAttachments = attachments;
415431
break;
416432

417433
case ItemState.Inventory:
@@ -449,6 +465,9 @@ public void Drop(Vector3 position)
449465
PickupBase.transform.localScale = Scale;
450466
NetworkServer.Spawn(PickupBase.gameObject);
451467
PickupBase.InfoReceived(default, info);
468+
469+
Durabillity = durabillity;
470+
WeaponAttachments = attachments;
452471
}
453472
break;
454473
}
@@ -465,6 +484,9 @@ public void Drop()
465484

466485
public void Despawn()
467486
{
487+
durabillity = Durabillity;
488+
attachments = WeaponAttachments;
489+
468490
DespawnItemBase();
469491
DespawnPickup();
470492
Throwable.DestroyProjectile();

Synapse/Api/MapPoint.cs

+29
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.Linq;
3+
using MapGeneration;
34
using UnityEngine;
45

56
namespace Synapse.Api
@@ -62,6 +63,34 @@ public MapPoint(string mappointstring)
6263
RelativePosition = new Vector3(x, y, z);
6364
}
6465

66+
/// <summary>
67+
/// Creates a MapPoint
68+
/// </summary>
69+
/// <param name="type"></param>
70+
/// <param name="x"></param>
71+
/// <param name="y"></param>
72+
/// <param name="z"></param>
73+
public MapPoint(RoomName type, float x, float y, float z)
74+
{
75+
var synapseroom = SynapseController.Server.Map.GetRoom(type);
76+
Room = synapseroom ?? throw new Exception("Parsing of string to MapPoint failed because of the roomname");
77+
RelativePosition = new Vector3(x, y, z);
78+
}
79+
80+
/// <summary>
81+
/// Creates a MapPoint
82+
/// </summary>
83+
/// <param name="room"></param>
84+
/// <param name="x"></param>
85+
/// <param name="y"></param>
86+
/// <param name="z"></param>
87+
public MapPoint(string room, float x, float y, float z)
88+
{
89+
var synapseroom = SynapseController.Server.Map.Rooms.FirstOrDefault(r => r.RoomName.ToLower() == room.ToLower());
90+
Room = synapseroom ?? throw new Exception("Parsing of string to MapPoint failed because of the roomname");
91+
RelativePosition = new Vector3(x, y, z);
92+
}
93+
6594

6695
/// <summary>
6796
/// The Room of which the MapPoint is relative too

Synapse/Api/Player.cs

+8-4
Original file line numberDiff line numberDiff line change
@@ -589,7 +589,7 @@ public RoleType RoleType
589589

590590
public Room Room
591591
{
592-
get => RoomIdUtils.RoomAtPosition(Position).GetSynapseRoom();
592+
get => RoomIdUtils.RoomAtPosition(Position).GetSynapseRoom() ?? Map.Get.Rooms.OrderBy(x => Vector3.Distance(x.Position, Position)).FirstOrDefault();
593593
set => Position = value.Position;
594594
}
595595

@@ -667,7 +667,11 @@ public ushort this[AmmoType ammo]
667667

668668
return 0;
669669
}
670-
set => player.VanillaInventory.UserInventory.ReserveAmmo[(ItemType)ammo] = value;
670+
set
671+
{
672+
player.VanillaInventory.UserInventory.ReserveAmmo[(ItemType)ammo] = value;
673+
player.VanillaInventory.SendAmmoNextFrame = true;
674+
}
671675
}
672676
}
673677

@@ -771,9 +775,9 @@ public SynapseItem ItemInHand
771775
{
772776
get
773777
{
774-
if (VanillaInventory.CurItem == ItemIdentifier.None) return SynapseItem.None;
778+
if (VanillaInventory.CurItem == ItemIdentifier.None || VanillaInventory.CurInstance == null) return SynapseItem.None;
775779

776-
return VanillaInventory.CurInstance.GetSynapseItem();
780+
return SynapseItem.AllItems[VanillaInventory.CurItem.SerialNumber];
777781
}
778782
set
779783
{

Synapse/Patches/EventsPatches/PlayerPatches/PlayerDamagePatch.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ private static bool HurtPlayer(PlayerStats __instance, out bool __result, Player
3434
bool friendlyFire = default;
3535
DamageTypes.DamageType damageType = default;
3636

37-
if (!TryPlayerDamageEvent(killer, victim, out (float artificialHealth, float health, bool friendlyFire, DamageTypes.DamageType damageType) temp))
37+
if (!TryPlayerDamageEvent(ref killer, victim, out (float artificialHealth, float health, bool friendlyFire, DamageTypes.DamageType damageType) temp))
3838
return false;
3939

4040
(artificialHealth, health, friendlyFire, damageType) = (temp.artificialHealth, temp.health, temp.friendlyFire, temp.damageType);
@@ -367,7 +367,7 @@ void HandleDamage(float artificialHealth, Player victim)
367367
victim.PlayerStats.lastHitInfo = info;
368368

369369
}
370-
bool TryPlayerDamageEvent(Player killer, Player victim, out (float ArtificialHealth, float Health, bool FriendlyFire, DamageTypes.DamageType DamageType) paramInfo)
370+
bool TryPlayerDamageEvent(ref Player killer, Player victim, out (float ArtificialHealth, float Health, bool FriendlyFire, DamageTypes.DamageType DamageType) paramInfo)
371371
{
372372
paramInfo.ArtificialHealth = 0;
373373
paramInfo.Health = 0;

0 commit comments

Comments
 (0)