From b66e3b686eeaca5663a97ad3f1668fe9ba3fb4dc Mon Sep 17 00:00:00 2001 From: MrOkiDoki <0mrokidoki@gmail.com> Date: Mon, 14 Aug 2023 16:21:30 +0300 Subject: [PATCH] Callbacks for revived, givenup. --- .../Networking/NetworkCommuncation.cs | 4 +- BattleBitAPI/Player.cs | 66 +++++++++++++++++-- BattleBitAPI/Server/GameServer.cs | 18 ++++- BattleBitAPI/Server/ServerListener.cs | 46 ++++++++++++- Program.cs | 30 ++++++++- 5 files changed, 153 insertions(+), 11 deletions(-) diff --git a/BattleBitAPI/Networking/NetworkCommuncation.cs b/BattleBitAPI/Networking/NetworkCommuncation.cs index 1927eb8..428f1a9 100644 --- a/BattleBitAPI/Networking/NetworkCommuncation.cs +++ b/BattleBitAPI/Networking/NetworkCommuncation.cs @@ -19,7 +19,7 @@ PlayerConnected = 50, PlayerDisconnected = 51, OnPlayerTypedMessage = 52, - OnPlayerKilledAnotherPlayer = 53, + OnAPlayerDownedAnotherPlayer = 53, OnPlayerJoining = 54, SavePlayerStats = 55, OnPlayerAskingToChangeRole = 56, @@ -36,5 +36,7 @@ NotifyNewRoundState = 67, OnPlayerAskingToChangeTeam = 68, GameTick = 69, + OnPlayerGivenUp = 70, + OnPlayerRevivedAnother = 71, } } diff --git a/BattleBitAPI/Player.cs b/BattleBitAPI/Player.cs index 2c07f18..47a69b9 100644 --- a/BattleBitAPI/Player.cs +++ b/BattleBitAPI/Player.cs @@ -3,6 +3,7 @@ using BattleBitAPI.Networking; using BattleBitAPI.Server; using System.Net; using System.Numerics; +using System.Windows.Markup; namespace BattleBitAPI { @@ -15,9 +16,38 @@ namespace BattleBitAPI public string Name => mInternal.Name; public IPAddress IP => mInternal.IP; public GameServer GameServer => mInternal.GameServer; - public GameRole Role => mInternal.Role; - public Team Team => mInternal.Team; - public Squads Squad => mInternal.Squad; + public GameRole Role + { + get => mInternal.Role; + set + { + if (value == mInternal.Role) + return; + SetNewRole(value); + } + } + public Team Team + { + get => mInternal.Team; + set + { + if (mInternal.Team != value) + ChangeTeam(value); + } + } + public Squads Squad + { + get => mInternal.Squad; + set + { + if (value == mInternal.Squad) + return; + if (value == Squads.NoSquad) + KickFromSquad(); + else + JoinSquad(value); + } + } public bool InSquad => mInternal.Squad != Squads.NoSquad; public int PingMs => mInternal.PingMs; @@ -27,9 +57,13 @@ namespace BattleBitAPI public bool IsDown => mInternal.HP == 0f; public bool IsDead => mInternal.HP == -1f; - public Vector3 Position => mInternal.Position; - public PlayerStand Standing => mInternal.Standing; - public LeaningSide Leaning => mInternal.Leaning; + public Vector3 Position + { + get => mInternal.Position; + set => Teleport(value); + } + public PlayerStand StandingState => mInternal.Standing; + public LeaningSide LeaningState => mInternal.Leaning; public LoadoutIndex CurrentLoadoutIndex => mInternal.CurrentLoadoutIndex; public bool InVehicle => mInternal.InVehicle; public bool IsBleeding => mInternal.IsBleeding; @@ -49,6 +83,22 @@ namespace BattleBitAPI public virtual async Task OnSpawned() { + } + public virtual async Task OnDowned() + { + + } + public virtual async Task OnGivenUp() + { + + } + public virtual async Task OnRevivedByAnotherPlayer() + { + + } + public virtual async Task OnRevivedAnotherPlayer() + { + } public virtual async Task OnDied() { @@ -96,6 +146,10 @@ namespace BattleBitAPI { this.GameServer.KickFromSquad(this); } + public void JoinSquad(Squads targetSquad) + { + this.GameServer.JoinSquad(this, targetSquad); + } public void DisbandTheSquad() { this.GameServer.DisbandPlayerCurrentSquad(this); diff --git a/BattleBitAPI/Server/GameServer.cs b/BattleBitAPI/Server/GameServer.cs index e3a28d6..cddc911 100644 --- a/BattleBitAPI/Server/GameServer.cs +++ b/BattleBitAPI/Server/GameServer.cs @@ -307,7 +307,15 @@ namespace BattleBitAPI.Server { } - public virtual async Task OnAPlayerKilledAnotherPlayer(OnPlayerKillArguments args) + public virtual async Task OnPlayerGivenUp(TPlayer player) + { + + } + public virtual async Task OnAPlayerDownedAnotherPlayer(OnPlayerKillArguments args) + { + + } + public virtual async Task OnAPlayerRevivedAnotherPlayer(TPlayer from,TPlayer to) { } @@ -439,6 +447,14 @@ namespace BattleBitAPI.Server { KickFromSquad(player.SteamID); } + public void JoinSquad(ulong steamID, Squads targetSquad) + { + ExecuteCommand("setsquad " + steamID + " " + ((int)targetSquad)); + } + public void JoinSquad(Player player, Squads targetSquad) + { + JoinSquad(player.SteamID, targetSquad); + } public void DisbandPlayerSquad(ulong steamID) { ExecuteCommand("squaddisband " + steamID); diff --git a/BattleBitAPI/Server/ServerListener.cs b/BattleBitAPI/Server/ServerListener.cs index 22d50f3..018a167 100644 --- a/BattleBitAPI/Server/ServerListener.cs +++ b/BattleBitAPI/Server/ServerListener.cs @@ -701,6 +701,15 @@ namespace BattleBitAPI.Server if (exist) { + var @internal = mInstanceDatabase.GetPlayerInternals(steamID); + if (@internal.HP > -1f) + { + @internal.OnDie(); + + player.OnDied(); + server.OnPlayerDied((TPlayer)player); + } + player.OnDisconnected(); server.OnPlayerDisconnected((TPlayer)player); } @@ -740,7 +749,7 @@ namespace BattleBitAPI.Server } break; } - case NetworkCommuncation.OnPlayerKilledAnotherPlayer: + case NetworkCommuncation.OnAPlayerDownedAnotherPlayer: { if (stream.CanRead(8 + 12 + 8 + 12 + 2 + 1 + 1)) { @@ -770,7 +779,8 @@ namespace BattleBitAPI.Server KillerTool = tool, }; - server.OnAPlayerKilledAnotherPlayer(args); + victimClient.OnDowned(); + server.OnAPlayerDownedAnotherPlayer(args); } } } @@ -1141,6 +1151,38 @@ namespace BattleBitAPI.Server } break; } + case NetworkCommuncation.OnPlayerGivenUp: + { + if (stream.CanRead(8)) + { + ulong steamID = stream.ReadUInt64(); + if (resources.TryGetPlayer(steamID, out var client)) + { + client.OnGivenUp(); + server.OnPlayerGivenUp((TPlayer)client); + } + } + break; + } + case NetworkCommuncation.OnPlayerRevivedAnother: + { + if (stream.CanRead(8 + 8)) + { + ulong from = stream.ReadUInt64(); + ulong to = stream.ReadUInt64(); + if (resources.TryGetPlayer(to, out var toClient)) + { + toClient.OnRevivedByAnotherPlayer(); + + if (resources.TryGetPlayer(from, out var fromClient)) + { + fromClient.OnRevivedAnotherPlayer(); + server.OnAPlayerRevivedAnotherPlayer((TPlayer)fromClient, (TPlayer)toClient); + } + } + } + break; + } } } diff --git a/Program.cs b/Program.cs index 4e02ac0..54d3401 100644 --- a/Program.cs +++ b/Program.cs @@ -18,6 +18,7 @@ class Program } class MyPlayer : Player { + } class MyGameServer : GameServer { @@ -25,7 +26,34 @@ class MyGameServer : GameServer { ForceStartGame(); } - public override async Task OnPlayerJoiningToServer(ulong steamID, PlayerJoiningArguments args) + + + public override async Task OnPlayerConnected(MyPlayer player) { + await Console.Out.WriteLineAsync("Connected: "+player); + } + public override async Task OnPlayerSpawned(MyPlayer player) + { + await Console.Out.WriteLineAsync("Spawned: " + player); + } + public override async Task OnAPlayerDownedAnotherPlayer(OnPlayerKillArguments args) + { + await Console.Out.WriteLineAsync("Downed: " + args.Victim); + } + public override async Task OnPlayerGivenUp(MyPlayer player) + { + await Console.Out.WriteLineAsync("Giveup: " + player); + } + public override async Task OnPlayerDied(MyPlayer player) + { + await Console.Out.WriteLineAsync("Died: " + player); + } + public override async Task OnAPlayerRevivedAnotherPlayer(MyPlayer from, MyPlayer to) + { + await Console.Out.WriteLineAsync(from+" revived "+to); + } + public override async Task OnPlayerDisconnected(MyPlayer player) + { + await Console.Out.WriteLineAsync("Disconnected: " + player); } }