fix event end behaviour

This commit is contained in:
Robert Paciorek 2024-01-22 13:42:52 +00:00 committed by Spirtix
parent b58f01d101
commit 21045494f6
2 changed files with 37 additions and 12 deletions

View File

@ -10,7 +10,8 @@ class WorldEventStatusHandler : ICommandHandler {
public void Handle(Client client, NetworkObject receivedObject) { public void Handle(Client client, NetworkObject receivedObject) {
client.Send(Utils.ArrNetworkPacket( new string[] { client.Send(Utils.ArrNetworkPacket( new string[] {
"WESR", "WESR",
"WE_ScoutAttack|" + WorldEvent.Get().EventInfo() "WE_ScoutAttack|" + WorldEvent.Get().EventInfo(),
"EvEnd|" + WorldEvent.Get().GetLastResults()
})); }));
} }
} }
@ -19,6 +20,7 @@ class WorldEventStatusHandler : ICommandHandler {
class WorldEventHealthHandler : ICommandHandler { class WorldEventHealthHandler : ICommandHandler {
// rec: {"a":13,"c":1,"p":{"c":"wex.OV","p":{"en":"","event":"ScoutAttack","eventUID":"ZydLUmCC","oh":"0.003444444","uid":"ZydLUmCC1"},"r":-1}} // rec: {"a":13,"c":1,"p":{"c":"wex.OV","p":{"en":"","event":"ScoutAttack","eventUID":"ZydLUmCC","oh":"0.003444444","uid":"ZydLUmCC1"},"r":-1}}
public void Handle(Client client, NetworkObject receivedObject) { public void Handle(Client client, NetworkObject receivedObject) {
// NOTE: this should be process on event in any state - we use it to make event active
NetworkObject p = receivedObject.Get<NetworkObject>("p"); NetworkObject p = receivedObject.Get<NetworkObject>("p");
float healthUpdateVal = float.Parse( float healthUpdateVal = float.Parse(
p.Get<string>("oh"), p.Get<string>("oh"),
@ -46,6 +48,9 @@ class WorldEventHealthHandler : ICommandHandler {
class WorldEventFlareHandler : ICommandHandler { class WorldEventFlareHandler : ICommandHandler {
// rec: {"a":13,"c":1,"p":{"c":"wex.OVF","p":{"en":"","fuid":"WpnpDyJ51,14,0","oh":"0","ts":"6/29/2023 3:03:18 AM"},"r":-1}} // rec: {"a":13,"c":1,"p":{"c":"wex.OVF","p":{"en":"","fuid":"WpnpDyJ51,14,0","oh":"0","ts":"6/29/2023 3:03:18 AM"},"r":-1}}
public void Handle(Client client, NetworkObject receivedObject) { public void Handle(Client client, NetworkObject receivedObject) {
if (!WorldEvent.Get().IsActive())
return;
NetworkObject p = receivedObject.Get<NetworkObject>("p"); NetworkObject p = receivedObject.Get<NetworkObject>("p");
// send: {"a":11,"c":0,"p":{"r":403777,"vl":[["WEF_WpnpDyJ51,14,0",4,"0,6/29/2023 3:03:18 AM",false,false]]}} // send: {"a":11,"c":0,"p":{"r":403777,"vl":[["WEF_WpnpDyJ51,14,0",4,"0,6/29/2023 3:03:18 AM",false,false]]}}
@ -64,6 +69,9 @@ class WorldEventFlareHandler : ICommandHandler {
class WorldEventMissileHandler : ICommandHandler { class WorldEventMissileHandler : ICommandHandler {
// rec: {"a":13,"c":1,"p":{"c":"wex.ST","p":{"en":"","objID":"-4X_gWAo1","tID":"f5b6254a-df78-4e24-aa9d-7e14539fb858","uID":"1f8eeb6b-753f-4e7f-af13-42cdd69d14e7","wID":"5"},"r":-1}} // rec: {"a":13,"c":1,"p":{"c":"wex.ST","p":{"en":"","objID":"-4X_gWAo1","tID":"f5b6254a-df78-4e24-aa9d-7e14539fb858","uID":"1f8eeb6b-753f-4e7f-af13-42cdd69d14e7","wID":"5"},"r":-1}}
public void Handle(Client client, NetworkObject receivedObject) { public void Handle(Client client, NetworkObject receivedObject) {
if (!WorldEvent.Get().IsActive())
return;
NetworkObject p = receivedObject.Get<NetworkObject>("p"); NetworkObject p = receivedObject.Get<NetworkObject>("p");
// send: {"a":13,"c":1,"p":{"c":"","p":{"arr":["WA","1f8eeb6b-753f-4e7f-af13-42cdd69d14e7","5","f5b6254a-df78-4e24-aa9d-7e14539fb858","-4X_gWAo1"]}}} // send: {"a":13,"c":1,"p":{"c":"","p":{"arr":["WA","1f8eeb6b-753f-4e7f-af13-42cdd69d14e7","5","f5b6254a-df78-4e24-aa9d-7e14539fb858","-4X_gWAo1"]}}}
@ -84,8 +92,12 @@ class WorldEventMissileHandler : ICommandHandler {
class WorldEventScoreHandler : ICommandHandler { class WorldEventScoreHandler : ICommandHandler {
// rec: {"a":13,"c":1,"p":{"c":"wex.PS","p":{"ScoreData":"Datashyo/10","en":"","id":"ScoutAttack"},"r":-1}} // rec: {"a":13,"c":1,"p":{"c":"wex.PS","p":{"ScoreData":"Datashyo/10","en":"","id":"ScoutAttack"},"r":-1}}
public void Handle(Client client, NetworkObject receivedObject) { public void Handle(Client client, NetworkObject receivedObject) {
if (!WorldEvent.Get().IsActive())
return;
string scoreData = receivedObject.Get<NetworkObject>("p").Get<string>("ScoreData"); string scoreData = receivedObject.Get<NetworkObject>("p").Get<string>("ScoreData");
WorldEvent.Get().UpdateScore(client, scoreData); string[] keyValPair = scoreData.Split('/');
WorldEvent.Get().UpdateScore(keyValPair[0], keyValPair[1]);
} }
} }

View File

@ -34,10 +34,12 @@ class WorldEvent {
private DateTime endTime; private DateTime endTime;
private string startTimeString; private string startTimeString;
private Dictionary<string, float> health; private Dictionary<string, float> health;
private Dictionary<Client, string> players; private Dictionary<string, string> players;
private DateTime AITime; private DateTime AITime;
private bool endTimeIsSet; private bool endTimeIsSet;
private string lastResults;
private void Reset(float time) { private void Reset(float time) {
lock (EventLock) { lock (EventLock) {
room = Room.GetOrAdd("HubTrainingDO"); room = Room.GetOrAdd("HubTrainingDO");
@ -53,7 +55,7 @@ class WorldEvent {
Console.WriteLine($"Event {uid} start time: {startTimeString}"); Console.WriteLine($"Event {uid} start time: {startTimeString}");
ResetTimer((endTime - DateTime.UtcNow).TotalSeconds + 30); ResetTimer((endTime - DateTime.UtcNow).TotalSeconds + 90);
} }
} }
@ -82,6 +84,7 @@ class WorldEvent {
// clear here because after Reset() we can get late packages about previous events // clear here because after Reset() we can get late packages about previous events
health = new(); health = new();
players = new(); players = new();
lastResults = "";
state = State.Active; state = State.Active;
} }
@ -107,19 +110,20 @@ class WorldEvent {
string scores = ""; string scores = "";
foreach (var x in players) { foreach (var x in players) {
scores += x.Value + ","; scores += x.Key + "/" + x.Value + ",";
} }
lastResults = $"{uid};{results};{scores};{targets}";
NetworkPacket packet = Utils.VlNetworkPacket( NetworkPacket packet = Utils.VlNetworkPacket(
"WE_ScoutAttack_End", "WE_ScoutAttack_End",
$"{uid};{results};{scores};{targets}", lastResults,
room.Id room.Id
); );
foreach (var roomClient in room.Clients) { foreach (var roomClient in room.Clients) {
roomClient.Send(packet); roomClient.Send(packet);
} }
Console.WriteLine($"Event {uid} end: {results} {targets}"); Console.WriteLine($"Event {uid} end: {results} {targets} {scores}");
NetworkArray vl = new(); NetworkArray vl = new();
NetworkArray vl1 = new(); NetworkArray vl1 = new();
@ -151,7 +155,7 @@ class WorldEvent {
} }
// (re)schedule event reset and announcement of next event // (re)schedule event reset and announcement of next event
ResetTimer(10); ResetTimer(60);
return true; return true;
} }
@ -215,19 +219,17 @@ class WorldEvent {
if (health[targetUid] < 0) { if (health[targetUid] < 0) {
health[targetUid] = 0.0f; health[targetUid] = 0.0f;
if (EndEvent()) EndEvent();
return -1.0f;
} }
if (endTime < DateTime.UtcNow) { if (endTime < DateTime.UtcNow) {
EndEvent(true); EndEvent(true);
return -1.0f;
} }
return health[targetUid]; return health[targetUid];
} }
public void UpdateScore(Client client, string value) { public void UpdateScore(string client, string value) {
if (!players.ContainsKey(client)) { if (!players.ContainsKey(client)) {
players.Add(client, value); players.Add(client, value);
} else { } else {
@ -241,6 +243,9 @@ class WorldEvent {
} }
public void SetTimeSpan(Client client, float seconds) { public void SetTimeSpan(Client client, float seconds) {
if (state != State.Active) {
return;
}
if (client == operatorAI || !endTimeIsSet) { if (client == operatorAI || !endTimeIsSet) {
Console.WriteLine($"Event {uid} set TimeSpan: {seconds} from operator: {client == operatorAI}"); Console.WriteLine($"Event {uid} set TimeSpan: {seconds} from operator: {client == operatorAI}");
endTime = startTime.AddSeconds(seconds); endTime = startTime.AddSeconds(seconds);
@ -249,4 +254,12 @@ class WorldEvent {
} }
public float GetHealth(string targetUid) => health[targetUid]; public float GetHealth(string targetUid) => health[targetUid];
public bool IsActive() {
return state == State.Active;
}
public string GetLastResults() {
return lastResults;
}
} }