forked from SoDOff-Project/sodoff-mmo
fix event end behaviour
This commit is contained in:
parent
b58f01d101
commit
21045494f6
@ -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]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user