Callbacks for revived, givenup.

This commit is contained in:
MrOkiDoki 2023-08-14 16:21:30 +03:00
parent d890dcd1f0
commit b66e3b686e
5 changed files with 153 additions and 11 deletions

View File

@ -19,7 +19,7 @@
PlayerConnected = 50, PlayerConnected = 50,
PlayerDisconnected = 51, PlayerDisconnected = 51,
OnPlayerTypedMessage = 52, OnPlayerTypedMessage = 52,
OnPlayerKilledAnotherPlayer = 53, OnAPlayerDownedAnotherPlayer = 53,
OnPlayerJoining = 54, OnPlayerJoining = 54,
SavePlayerStats = 55, SavePlayerStats = 55,
OnPlayerAskingToChangeRole = 56, OnPlayerAskingToChangeRole = 56,
@ -36,5 +36,7 @@
NotifyNewRoundState = 67, NotifyNewRoundState = 67,
OnPlayerAskingToChangeTeam = 68, OnPlayerAskingToChangeTeam = 68,
GameTick = 69, GameTick = 69,
OnPlayerGivenUp = 70,
OnPlayerRevivedAnother = 71,
} }
} }

View File

@ -3,6 +3,7 @@ using BattleBitAPI.Networking;
using BattleBitAPI.Server; using BattleBitAPI.Server;
using System.Net; using System.Net;
using System.Numerics; using System.Numerics;
using System.Windows.Markup;
namespace BattleBitAPI namespace BattleBitAPI
{ {
@ -15,9 +16,38 @@ namespace BattleBitAPI
public string Name => mInternal.Name; public string Name => mInternal.Name;
public IPAddress IP => mInternal.IP; public IPAddress IP => mInternal.IP;
public GameServer<TPlayer> GameServer => mInternal.GameServer; public GameServer<TPlayer> GameServer => mInternal.GameServer;
public GameRole Role => mInternal.Role; public GameRole Role
public Team Team => mInternal.Team; {
public Squads Squad => mInternal.Squad; 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 bool InSquad => mInternal.Squad != Squads.NoSquad;
public int PingMs => mInternal.PingMs; public int PingMs => mInternal.PingMs;
@ -27,9 +57,13 @@ namespace BattleBitAPI
public bool IsDown => mInternal.HP == 0f; public bool IsDown => mInternal.HP == 0f;
public bool IsDead => mInternal.HP == -1f; public bool IsDead => mInternal.HP == -1f;
public Vector3 Position => mInternal.Position; public Vector3 Position
public PlayerStand Standing => mInternal.Standing; {
public LeaningSide Leaning => mInternal.Leaning; get => mInternal.Position;
set => Teleport(value);
}
public PlayerStand StandingState => mInternal.Standing;
public LeaningSide LeaningState => mInternal.Leaning;
public LoadoutIndex CurrentLoadoutIndex => mInternal.CurrentLoadoutIndex; public LoadoutIndex CurrentLoadoutIndex => mInternal.CurrentLoadoutIndex;
public bool InVehicle => mInternal.InVehicle; public bool InVehicle => mInternal.InVehicle;
public bool IsBleeding => mInternal.IsBleeding; public bool IsBleeding => mInternal.IsBleeding;
@ -49,6 +83,22 @@ namespace BattleBitAPI
public virtual async Task OnSpawned() 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() public virtual async Task OnDied()
{ {
@ -96,6 +146,10 @@ namespace BattleBitAPI
{ {
this.GameServer.KickFromSquad(this); this.GameServer.KickFromSquad(this);
} }
public void JoinSquad(Squads targetSquad)
{
this.GameServer.JoinSquad(this, targetSquad);
}
public void DisbandTheSquad() public void DisbandTheSquad()
{ {
this.GameServer.DisbandPlayerCurrentSquad(this); this.GameServer.DisbandPlayerCurrentSquad(this);

View File

@ -307,7 +307,15 @@ namespace BattleBitAPI.Server
{ {
} }
public virtual async Task OnAPlayerKilledAnotherPlayer(OnPlayerKillArguments<TPlayer> args) public virtual async Task OnPlayerGivenUp(TPlayer player)
{
}
public virtual async Task OnAPlayerDownedAnotherPlayer(OnPlayerKillArguments<TPlayer> args)
{
}
public virtual async Task OnAPlayerRevivedAnotherPlayer(TPlayer from,TPlayer to)
{ {
} }
@ -439,6 +447,14 @@ namespace BattleBitAPI.Server
{ {
KickFromSquad(player.SteamID); KickFromSquad(player.SteamID);
} }
public void JoinSquad(ulong steamID, Squads targetSquad)
{
ExecuteCommand("setsquad " + steamID + " " + ((int)targetSquad));
}
public void JoinSquad(Player<TPlayer> player, Squads targetSquad)
{
JoinSquad(player.SteamID, targetSquad);
}
public void DisbandPlayerSquad(ulong steamID) public void DisbandPlayerSquad(ulong steamID)
{ {
ExecuteCommand("squaddisband " + steamID); ExecuteCommand("squaddisband " + steamID);

View File

@ -701,6 +701,15 @@ namespace BattleBitAPI.Server
if (exist) if (exist)
{ {
var @internal = mInstanceDatabase.GetPlayerInternals(steamID);
if (@internal.HP > -1f)
{
@internal.OnDie();
player.OnDied();
server.OnPlayerDied((TPlayer)player);
}
player.OnDisconnected(); player.OnDisconnected();
server.OnPlayerDisconnected((TPlayer)player); server.OnPlayerDisconnected((TPlayer)player);
} }
@ -740,7 +749,7 @@ namespace BattleBitAPI.Server
} }
break; break;
} }
case NetworkCommuncation.OnPlayerKilledAnotherPlayer: case NetworkCommuncation.OnAPlayerDownedAnotherPlayer:
{ {
if (stream.CanRead(8 + 12 + 8 + 12 + 2 + 1 + 1)) if (stream.CanRead(8 + 12 + 8 + 12 + 2 + 1 + 1))
{ {
@ -770,7 +779,8 @@ namespace BattleBitAPI.Server
KillerTool = tool, KillerTool = tool,
}; };
server.OnAPlayerKilledAnotherPlayer(args); victimClient.OnDowned();
server.OnAPlayerDownedAnotherPlayer(args);
} }
} }
} }
@ -1141,6 +1151,38 @@ namespace BattleBitAPI.Server
} }
break; 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;
}
} }
} }

View File

@ -18,6 +18,7 @@ class Program
} }
class MyPlayer : Player<MyPlayer> class MyPlayer : Player<MyPlayer>
{ {
} }
class MyGameServer : GameServer<MyPlayer> class MyGameServer : GameServer<MyPlayer>
{ {
@ -25,7 +26,34 @@ class MyGameServer : GameServer<MyPlayer>
{ {
ForceStartGame(); 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<MyPlayer> 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);
} }
} }