Skip to content

Commit

Permalink
Battle message are sent by host now
Browse files Browse the repository at this point in the history
  • Loading branch information
starfi5h committed Aug 27, 2024
1 parent 6cc1e67 commit 2c5815b
Show file tree
Hide file tree
Showing 10 changed files with 55 additions and 29 deletions.
4 changes: 2 additions & 2 deletions NebulaModel/Packets/Chat/NewChatMessagePacket.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,11 @@ public class NewChatMessagePacket
{
public NewChatMessagePacket() { }

public NewChatMessagePacket(ChatMessageType messageType, string messageText, DateTime sentAt, string userName)
public NewChatMessagePacket(ChatMessageType messageType, string messageText, DateTime sentAt = default, string userName = "")
{
MessageType = messageType;
MessageText = messageText;
SentAt = sentAt.ToBinary();
SentAt = sentAt == default ? 0 : sentAt.ToBinary();
UserName = userName;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,12 @@ protected override void ProcessPacket(NewChatMessagePacket packet, NebulaConnect
Server.SendPacketExclude(packet, conn);
}

if (string.IsNullOrEmpty(packet.UserName))
{
// non-player chat
ChatManager.Instance.SendChatMessage(packet.MessageText, packet.MessageType);
return;
}
var sentAt = packet.SentAt == 0 ? DateTime.Now : DateTime.FromBinary(packet.SentAt);
ChatManager.Instance.SendChatMessage(ChatManager.FormatChatMessage(sentAt, packet.UserName, packet.MessageText),
packet.MessageType);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,12 +42,6 @@ protected override void ProcessPacket(DFRelayArriveBasePacket packet, NebulaConn
EnemyManager.SetPlanetFactoryNextEnemyId(factory, packet.NextGroundEnemyId);
}
dfrelayComponent.ArriveBase();

// Display message when DF relay is successfully landed and the planet has buildings
if (packet.HasFactory)
{
Multiplayer.Session.Enemies.DisplayPlanetPingMessage("DF relay landed on planet".Translate(), dfrelayComponent.targetAstroId, dfrelayComponent.targetLPos);
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,6 @@ protected override void ProcessPacket(DFTinderDispatchPacket packet, NebulaConne
var hiveSystem = GameMain.spaceSector.GetHiveByAstroId(packet.OriginHiveAstroId);
if (hiveSystem == null) return;

Multiplayer.Session.Enemies.DisplayAstroMessage("DF seed sent out from".Translate(), hiveSystem.starData.astroId);

ref var tinderComponent = ref hiveSystem.tinders.buffer[packet.TinderId];
if (tinderComponent.id != packet.TinderId) return;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,6 @@ protected override void ProcessPacket(DFGLaunchAssaultPacket packet, NebulaConne
var factory = GameMain.galaxy.PlanetById(packet.PlanetId)?.factory;
if (factory == null)
{
// Display message in chat if it can't show in UIDarkFogMonitor
Multiplayer.Session.Enemies.DisplayPlanetPingMessage("Planetary base is attacking".Translate(), packet.PlanetId, packet.TarPos.ToVector3());
return;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ public class DFSLaunchLancerAssaultProcessor : PacketProcessor<DFSLaunchLancerAs
{
protected override void ProcessPacket(DFSLaunchLancerAssaultPacket packet, NebulaConnection conn)
{
Multiplayer.Session.Enemies.DisplayAstroMessage("Space hive is attacking".Translate(), packet.TargetAstroId);
var spaceSector = GameMain.spaceSector;
var hive = spaceSector.GetHiveByAstroId(packet.HiveAstroId);
if (hive == null) return;
Expand Down
4 changes: 2 additions & 2 deletions NebulaPatcher/Patches/Dynamic/DFRelayComponent_Patch.cs
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ public static void ArriveBase_Postfix(DFRelayComponent __instance)
var factory = __instance.hive.galaxy.astrosFactory[__instance.targetAstroId];
if (factory != null && factory.entityCount > 0 && __instance.baseId > 0)
{
Multiplayer.Session.Enemies.DisplayPlanetPingMessage("DF relay landed on planet".Translate(), __instance.targetAstroId, __instance.targetLPos);
Multiplayer.Session.Enemies.SendPlanetPosMessage("DF relay landed on".Translate(), __instance.targetAstroId, __instance.targetLPos);
}
}

Expand All @@ -80,7 +80,7 @@ public static bool LeaveBase_Prefix(DFRelayComponent __instance)
var planet = GameMain.galaxy.PlanetById(__instance.targetAstroId);
if (planet != null)
{
Multiplayer.Session.Enemies.DisplayPlanetPingMessage("DF relay left from planet".Translate(), __instance.targetAstroId, __instance.targetLPos);
Multiplayer.Session.Enemies.SendPlanetPosMessage("DF relay left from".Translate(), __instance.targetAstroId, __instance.targetLPos);
}
}

Expand Down
14 changes: 13 additions & 1 deletion NebulaPatcher/Patches/Dynamic/DFTinderComponent_Patch.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,19 @@ public static bool DispatchFromHive_Prefix(ref DFTinderComponent __instance, int
{
__instance.targetHiveAstroId = _targetHiveAstroId;
Multiplayer.Session.Network.SendPacket(new DFTinderDispatchPacket(__instance));
Multiplayer.Session.Enemies.DisplayAstroMessage("DF seed sent out from".Translate(), hive1.starData.astroId);
var hasFactory = false;
foreach (var planet in hive2.starData.planets)
{
if (planet != null && planet.factory != null && planet.factory.entityCount > 0)
{
hasFactory = true;
break;
}
}
if (hasFactory)
{
Multiplayer.Session.Enemies.SendAstroMessage("DF seed sent out".Translate(), hive1.starData.astroId, hive2.starData.astroId);
}
}
return true;
}
Expand Down
13 changes: 9 additions & 4 deletions NebulaPatcher/Patches/Dynamic/EnemyDFHiveSystem_Patch.cs
Original file line number Diff line number Diff line change
Expand Up @@ -233,19 +233,24 @@ public static bool LaunchLancerAssault_Prefix(EnemyDFHiveSystem __instance, EAgg
if (!Multiplayer.IsActive) return true;
if (Multiplayer.Session.IsClient) return Multiplayer.Session.Enemies.IsIncomingRequest;

// Brocast launch assault events to all players
// Broadcast launch assault events to all players
var packet = new DFSLaunchLancerAssaultPacket(in __instance, aggressiveLevel,
in tarPos, in maxHatredPos, targetAstroId, unitCount0, unitThreat);
Multiplayer.Session.Server.SendPacket(packet);
Multiplayer.Session.Enemies.DisplayAstroMessage("Space hive is attacking".Translate(), packet.TargetAstroId);
Multiplayer.Session.Enemies.SendAstroMessage("Space hive is attacking".Translate(), packet.TargetAstroId);
return true;
}

[HarmonyPrefix]
[HarmonyPatch(nameof(EnemyDFHiveSystem.NotifyRelayKilled))]
public static bool NotifyRelayKilled(EnemyDFHiveSystem __instance, ref EnemyData enemy)
public static bool NotifyRelayKilled_Prefix(EnemyDFHiveSystem __instance, ref EnemyData enemy)
{
if (!Multiplayer.IsActive || Multiplayer.Session.IsServer) return true;
if (!Multiplayer.IsActive) return true;
if (Multiplayer.Session.IsServer)
{
Multiplayer.Session.Enemies.SendAstroMessage("DF relay killed on".Translate(), enemy.astroId);
return true;
}

var dfrelayComponent = __instance.relays.buffer[enemy.dfRelayId];
if (dfrelayComponent?.id == enemy.dfRelayId)
Expand Down
32 changes: 23 additions & 9 deletions NebulaWorld/Combat/EnemyManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
using NebulaModel.DataStructures;
using NebulaModel.DataStructures.Chat;
using NebulaModel.Logger;
using NebulaModel.Packets.Chat;
using NebulaModel.Packets.Combat.DFHive;
using NebulaModel.Packets.Combat.GroundEnemy;
using NebulaWorld.Chat.ChatLinks;
Expand Down Expand Up @@ -86,31 +87,44 @@ public void BroadcastHiveStatusPackets(EnemyDFHiveSystem hive, long gameTick)
}
}

public void DisplayPlanetPingMessage(string text, int planetId, Vector3 pos)
public void SendPlanetPosMessage(string text, int planetId, Vector3 pos)
{
if (Multiplayer.Session.IsClient) return;
var planet = GameMain.galaxy.PlanetById(planetId);
if (planet == null) return;

var message = text + " [" + NavigateChatLinkHandler.FormatNavigateToPlanetPos(planetId, pos, planet.displayName) + "]";
ChatManager.Instance.SendChatMessage(message, ChatMessageType.BattleMessage);
Multiplayer.Session.Network.SendPacket(new NewChatMessagePacket(ChatMessageType.BattleMessage, message));
}

public void DisplayAstroMessage(string text, int astroId)
public void SendAstroMessage(string text, int astroId0, int astroId1 = 0)
{
string displayMessage = null;
if (Multiplayer.Session.IsClient) return;

var message = text + " " + GetAstroLinkText(astroId0);
if (astroId1 != 0) message += " => " + GetAstroLinkText(astroId1);
ChatManager.Instance.SendChatMessage(message, ChatMessageType.BattleMessage);
Multiplayer.Session.Network.SendPacket(new NewChatMessagePacket(ChatMessageType.BattleMessage, message));
}

static string GetAstroLinkText(int astroId)
{
string displayName = null;
if (GameMain.galaxy.PlanetById(astroId) != null)
{
displayMessage = GameMain.galaxy.PlanetById(astroId).displayName;
displayName = GameMain.galaxy.PlanetById(astroId).displayName;
}
else if (GameMain.galaxy.StarById(astroId / 100) != null)
{
displayMessage = GameMain.galaxy.StarById(astroId / 100).displayName;
displayName = GameMain.galaxy.StarById(astroId / 100).displayName;
}
if (displayMessage == null) return;

var message = text + " [" + NavigateChatLinkHandler.FormatNavigateToAstro(astroId, displayMessage) + "]";
ChatManager.Instance.SendChatMessage(message, ChatMessageType.BattleMessage);
else if (GameMain.spaceSector.GetHiveByAstroId(astroId) != null)
{
displayName = GameMain.spaceSector.GetHiveByAstroId(astroId).displayName;
}
if (displayName == null) return "";
return "[" + NavigateChatLinkHandler.FormatNavigateToAstro(astroId, displayName) + "]";
}

public void OnFactoryLoadFinished(PlanetFactory factory)
Expand Down

0 comments on commit 2c5815b

Please sign in to comment.