Client LuaCsForBarotrauma
BarotraumaClient/ClientSource/Events/Missions/SalvageMission.cs
2 using FarseerPhysics;
3 
4 namespace Barotrauma
5 {
6  partial class SalvageMission : Mission
7  {
8  public override bool DisplayAsCompleted => false;
9  public override bool DisplayAsFailed => false;
10 
11  private void TryShowRetrievedMessage()
12  {
13  if (DetermineCompleted())
14  {
15  if (!allRetrievedMessage.IsNullOrEmpty()) { CreateMessageBox(string.Empty, allRetrievedMessage); }
16  //no need to show this again, clear it
17  allRetrievedMessage = string.Empty;
18  }
19  else
20  {
21  if (!partiallyRetrievedMessage.IsNullOrEmpty()) { CreateMessageBox(string.Empty, partiallyRetrievedMessage); }
22  //no need to show this again, clear it
23  partiallyRetrievedMessage = string.Empty;
24  }
25  }
26 
27  public override void ClientReadInitial(IReadMessage msg)
28  {
29  base.ClientReadInitial(msg);
30 
31  foreach (var target in targets)
32  {
33  bool targetFound = msg.ReadBoolean();
34  if (!targetFound) { continue; }
35 
36  bool usedExistingItem = msg.ReadBoolean();
37  if (usedExistingItem)
38  {
39  ushort id = msg.ReadUInt16();
40  target.Item = Entity.FindEntityByID(id) as Item;
41  if (target.Item == null)
42  {
43  throw new System.Exception("Error in SalvageMission.ClientReadInitial: failed to find item " + id + " (mission: " + Prefab.Identifier + ")");
44  }
45  }
46  else
47  {
48  target.Item = Item.ReadSpawnData(msg);
49  target.Item.HighlightColor = GUIStyle.Orange;
50  target.Item.ExternalHighlight = true;
51 
52  ushort parentTargetId = msg.ReadUInt16();
53  if (parentTargetId != Entity.NullEntityID)
54  {
55  target.OriginalContainer = Entity.FindEntityByID(parentTargetId) as Item;
56  }
57 
58  if (target.Item == null)
59  {
60  throw new System.Exception("Error in SalvageMission.ClientReadInitial: spawned item was null (mission: " + Prefab.Identifier + ")");
61  }
62  }
63 
64  int executedEffectCount = msg.ReadByte();
65  for (int i = 0; i < executedEffectCount; i++)
66  {
67  int listIndex = msg.ReadByte();
68  int effectIndex = msg.ReadByte();
69  var selectedEffect = target.StatusEffects[listIndex][effectIndex];
70  target.Item.ApplyStatusEffect(selectedEffect, selectedEffect.type, deltaTime: 1.0f, worldPosition: target.Item.Position);
71  }
72 
73  if (target.Item.body != null && target.Item.CurrentHull == null)
74  {
75  target.Item.body.FarseerBody.BodyType = BodyType.Kinematic;
76  }
77  }
78  }
79 
80  public override void ClientRead(IReadMessage msg)
81  {
82  base.ClientRead(msg);
83  bool atLeastOneTargetWasRetrieved = false;
84  int targetCount = msg.ReadByte();
85  for (int i = 0; i < targetCount; i++)
86  {
87  var state = (Target.RetrievalState)msg.ReadByte();
88  if (i < targets.Count)
89  {
90  bool wasRetrieved = targets[i].Retrieved;
91  targets[i].State = state;
92  if (!wasRetrieved && targets[i].Retrieved)
93  {
94  atLeastOneTargetWasRetrieved = true;
95  }
96  }
97  }
98  if (atLeastOneTargetWasRetrieved)
99  {
100  TryShowRetrievedMessage();
101  }
102  }
103  }
104 }
const ushort NullEntityID
Definition: Entity.cs:14
static Entity FindEntityByID(ushort ID)
Find an entity based on the ID
Definition: Entity.cs:204
static Item ReadSpawnData(IReadMessage msg, bool spawn=true)
Item(ItemPrefab itemPrefab, Vector2 position, Submarine submarine, ushort id=Entity.NullEntityID, bool callOnItemLoaded=true)
void CreateMessageBox(LocalizedString header, LocalizedString message)
readonly Identifier Identifier
Definition: Prefab.cs:34