rework pre-battle timer (notificartion)

This commit is contained in:
Robert Paciorek 2024-01-21 02:53:14 +00:00 committed by Spirtix
parent 37d23af369
commit b58f01d101
5 changed files with 68 additions and 55 deletions

View File

@ -27,26 +27,6 @@ class LoginHandler : ICommandHandler
rl.Add(r1);
NetworkArray r2 = new();
NetworkArray we = new();
NetworkArray we1 = new();
NetworkArray we2 = new();
we1.Add("WE_ScoutAttack");
we1.Add((Byte)4);
we1.Add(WorldEvent.Get().EventInfo());
we1.Add(false);
we1.Add(true);
we2.Add("WEN_ScoutAttack");
we2.Add((Byte)4);
we2.Add(WorldEvent.Get().EventInfoNext());
we2.Add(false);
we2.Add(true);
we.Add(we1);
we.Add(we2);
r2.Add(1);
r2.Add("ADMIN");
r2.Add("default");
@ -55,7 +35,7 @@ class LoginHandler : ICommandHandler
r2.Add(true);
r2.Add((short)0);
r2.Add((short)1);
r2.Add(we);
r2.Add(WorldEvent.Get().EventInfoArray(true));
rl.Add(r2);
NetworkArray r3 = new();

View File

@ -32,7 +32,8 @@ class WorldEventHealthHandler : ICommandHandler {
// send: {"a":11,"c":0,"p":{"r":367256,"vl":[["WEH_ZydLUmCC1",4,"0.33133352,Thu Jun 22 02:02:43 UTC 2023",false,false]]}}
NetworkPacket packet = Utils.VlNetworkPacket(
"WEH_" + targetUid,
health.ToString("0.0#####", CultureInfo.GetCultureInfo("en-US")) + "," + DateTime.UtcNow.ToString("ddd MMM dd HH:mm:ss UTC yyyy", CultureInfo.GetCultureInfo("en-US"))
health.ToString("0.0#####", CultureInfo.GetCultureInfo("en-US")) + "," + DateTime.UtcNow.ToString("ddd MMM dd HH:mm:ss UTC yyyy", CultureInfo.GetCultureInfo("en-US")),
WorldEvent.Get().GetRoom().Id
);
foreach (var roomClient in WorldEvent.Get().GetRoom().Clients) {
roomClient.Send(packet);
@ -50,7 +51,8 @@ class WorldEventFlareHandler : ICommandHandler {
// send: {"a":11,"c":0,"p":{"r":403777,"vl":[["WEF_WpnpDyJ51,14,0",4,"0,6/29/2023 3:03:18 AM",false,false]]}}
NetworkPacket packet = Utils.VlNetworkPacket(
"WEF_" + p.Get<string>("fuid"),
p.Get<string>("oh") + "," + p.Get<string>("ts")
p.Get<string>("oh") + "," + p.Get<string>("ts"),
WorldEvent.Get().GetRoom().Id
);
foreach (var roomClient in WorldEvent.Get().GetRoom().Clients) {
roomClient.Send(packet);

View File

@ -50,4 +50,8 @@ public class Room {
public static void Add(string name) {
rooms[name] = new Room(rooms.Count + 3, name);
}
public static Room[] AllRooms() {
return rooms.Values.ToArray();
}
}

View File

@ -22,23 +22,23 @@ internal static class Utils {
return true;
}
public static NetworkPacket VlNetworkPacket(NetworkArray vl2, int roomID) {
NetworkObject wedata = new();
NetworkArray vl = new();
vl.Add(vl2);
wedata.Add("r", roomID);
wedata.Add("vl", vl);
return NetworkObject.WrapObject(0, 11, wedata).Serialize();
public static NetworkPacket VlNetworkPacket(NetworkArray vl, int roomID) {
NetworkObject obj = new();
obj.Add("r", roomID);
obj.Add("vl", vl);
return NetworkObject.WrapObject(0, 11, obj).Serialize();
}
public static NetworkPacket VlNetworkPacket(string a, string b) {
public static NetworkPacket VlNetworkPacket(string a, string b, int roomID) {
NetworkArray vl = new();
NetworkArray vl2 = new();
vl2.Add(a);
vl2.Add((Byte)4);
vl2.Add(b);
vl2.Add(false);
vl2.Add(false);
return VlNetworkPacket(vl2, WorldEvent.Get().GetRoom().Id);
vl.Add(vl2);
return VlNetworkPacket(vl, roomID);
}
public static NetworkPacket ArrNetworkPacket(string[] data) {

View File

@ -12,7 +12,7 @@ class WorldEvent {
private static WorldEvent _instance = null;
private object EventLock = new object();
private Random random = new Random();
private System.Timers.Timer timer;
private System.Timers.Timer timer = null;
public static WorldEvent Get() {
if (_instance == null) {
@ -22,7 +22,7 @@ class WorldEvent {
}
private WorldEvent() {
Reset(1.3f);
Reset(3.3f);
}
private Room room;
@ -52,9 +52,25 @@ class WorldEvent {
endTimeIsSet = false;
Console.WriteLine($"Event {uid} start time: {startTimeString}");
ResetTimer((endTime - DateTime.UtcNow).TotalSeconds + 30);
}
}
private void ResetTimer(double timeout) {
if (timer != null) {
timer.Stop();
timer.Close();
}
timer = new System.Timers.Timer(timeout * 1000);
timer.Elapsed += PostEndEvent;
timer.AutoReset = false;
timer.Enabled = true;
Console.WriteLine($"Event {uid} reset timer set to {timeout} s");
}
private void InitEvent() {
lock (EventLock) {
if (AITime < DateTime.UtcNow) {
@ -69,7 +85,7 @@ class WorldEvent {
state = State.Active;
}
operatorAI.Send(Utils.VlNetworkPacket("WE__AI", operatorAI.PlayerData.Uid));
operatorAI.Send(Utils.VlNetworkPacket("WE__AI", operatorAI.PlayerData.Uid, room.Id));
Console.WriteLine($"Event {uid} AI operator: {operatorAI.PlayerData.Uid}");
}
}
@ -96,7 +112,8 @@ class WorldEvent {
NetworkPacket packet = Utils.VlNetworkPacket(
"WE_ScoutAttack_End",
$"{uid};{results};{scores};{targets}"
$"{uid};{results};{scores};{targets}",
room.Id
);
foreach (var roomClient in room.Clients) {
roomClient.Send(packet);
@ -104,7 +121,6 @@ class WorldEvent {
Console.WriteLine($"Event {uid} end: {results} {targets}");
NetworkObject wedata = new();
NetworkArray vl = new();
NetworkArray vl1 = new();
vl1.Add("WE__AI");
@ -129,20 +145,13 @@ class WorldEvent {
vl3.Add(false);
vl.Add(vl3);
}
wedata.Add("r", room.Id);
wedata.Add("vl", vl);
packet = NetworkObject.WrapObject(0, 11, wedata).Serialize();
packet = Utils.VlNetworkPacket(vl, room.Id);
foreach (var roomClient in room.Clients) {
roomClient.Send(packet);
}
Reset(4);
timer = new System.Timers.Timer(10000);
timer.Elapsed += PostEndEvent;
timer.AutoReset = false;
timer.Enabled = true;
// (re)schedule event reset and announcement of next event
ResetTimer(10);
return true;
}
@ -150,22 +159,40 @@ class WorldEvent {
}
private void PostEndEvent(Object source, ElapsedEventArgs e) {
NetworkPacket packet = Utils.ArrNetworkPacket( new string[] {
"WESR",
"WE_ScoutAttack|" + EventInfo()
});
foreach (var roomClient in room.Clients) {
Reset(7);
Console.WriteLine($"Event {uid} send event notification (WE_ + WEN_) to all clients");
NetworkPacket packet = Utils.VlNetworkPacket(EventInfoArray(), room.Id);
foreach (var r in Room.AllRooms()) {
foreach (var roomClient in r.Clients) {
roomClient.Send(packet);
}
}
}
public string EventInfo() {
return startTimeString + "," + uid + ", false, HubTrainingDO";
}
public string EventInfoNext() {
return startTimeString; // TODO on og this was different time (real next event?)
public NetworkArray EventInfoArray(bool x = false) {
NetworkArray vl = new();
NetworkArray vl1 = new();
vl1.Add("WE_ScoutAttack");
vl1.Add((Byte)4);
vl1.Add(EventInfo());
vl1.Add(false);
vl1.Add(x);
vl.Add(vl1);
NetworkArray vl2 = new();
vl2.Add("WEN_ScoutAttack");
vl2.Add((Byte)4);
vl2.Add(startTimeString);
vl2.Add(false);
vl2.Add(x);
vl.Add(vl2);
return vl;
}
public string GetUid() => uid;