Skip to content

Commit 67f2bfc

Browse files
Fixed hostage rescue zone positions
1 parent 5bdc75b commit 67f2bfc

File tree

4 files changed

+70
-23
lines changed

4 files changed

+70
-23
lines changed

src/SourceEngine.Demo.Parser/DP/Entity.cs

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -140,35 +140,27 @@ class PropertyEntry
140140
* The single purpose for this is to see what kind of values an entity has. You can check this faster with this thing.
141141
* Really, ignore it if you don't know what you're doing.
142142
*/
143-
[Obsolete("Don't use this attribute. It is only avaible for debugging. Bind to the correct event instead."
144-
#if !DEBUG
145-
, true
146-
#endif
147-
)]
143+
[Obsolete("Don't use this attribute. It is only avaible for debugging. Bind to the correct event instead.", false)]
148144
#pragma warning disable 0067 // this is unused in release builds, just as it should be
149-
public event EventHandler<PropertyUpdateEventArgs<object>> DataRecivedDontUse;
145+
public event EventHandler<PropertyUpdateEventArgs<object>> DataRecivedDontUse;
150146
#pragma warning restore 0067
151147

152-
[Conditional("DEBUG")]
148+
//[Conditional("DEBUG")]
153149
private void FireDataReceived_DebugEvent(object val, Entity e)
154150
{
155-
#if DEBUG
156151
#pragma warning disable 0618
157152
if (DataRecivedDontUse != null)
158153
DataRecivedDontUse(this, new PropertyUpdateEventArgs<object>(val, e, this));
159154
#pragma warning restore 0618
160-
#endif
161155
}
162156

163157

164-
[Conditional("DEBUG")]
158+
//[Conditional("DEBUG")]
165159
private void DeleteDataRecived()
166160
{
167-
#if DEBUG
168161
#pragma warning disable 0618
169162
DataRecivedDontUse = null;
170163
#pragma warning restore 0618
171-
#endif
172164
}
173165

174166
public void Decode(IBitStream stream, Entity e)
@@ -291,7 +283,7 @@ public override string ToString()
291283
return string.Format("[PropertyEntry: Entry={0}]", Entry);
292284
}
293285

294-
[Conditional("DEBUG")]
286+
//[Conditional("DEBUG")]
295287
public void CheckBindings(Entity e)
296288
{
297289
if (IntRecived != null && this.Entry.Prop.Type != SendPropertyType.Int)

src/SourceEngine.Demo.Parser/DP/Handler/GameEventHandler.cs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ public static void Apply(GameEvent rawEvent, DemoParser parser, bool parseChicke
187187
}
188188

189189
//makes sure that bombsite triggers' vector values have been set if they exist
190-
parser.HandleBombSites();
190+
parser.HandleBombSitesAndRescueZones();
191191

192192
//checks if the map contains bombsite triggers to figure out the gamemode
193193
var bombsiteCenterA = parser.bombsiteACenter;
@@ -343,9 +343,13 @@ public static void Apply(GameEvent rawEvent, DemoParser parser, bool parseChicke
343343
if (hurt.Attacker != null && hurt.Weapon.Class != EquipmentClass.Grenade && hurt.Attacker.Weapons.Any ()) {
344344
var originalString = hurt.Weapon.OriginalString; // original string is lost when setting hurt.Weapon to hurt.Attacker.ActiveWeapon
345345
hurt.Weapon = new Player(hurt.Attacker).ActiveWeapon;
346-
hurt.Weapon.Owner = new Player(hurt.Weapon.Owner);
347-
hurt.Weapon.OriginalString = originalString;
348-
hurt.WeaponString = originalString;
346+
347+
if (hurt.Weapon != null)
348+
{
349+
hurt.Weapon.Owner = new Player(hurt.Weapon.Owner);
350+
hurt.Weapon.OriginalString = originalString;
351+
hurt.WeaponString = originalString;
352+
}
349353
}
350354

351355
hurt.TimeInRound = parser.CurrentTime - timestampFreezetimeEnded;

src/SourceEngine.Demo.Parser/DemoParser.cs

Lines changed: 55 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -387,6 +387,7 @@ public IEnumerable<Player> PlayingParticipants {
387387
public int hostageAIndex { get; internal set; } = -1;
388388
public int hostageBIndex { get; internal set; } = -1;
389389
public int rescueZoneIndex { get; internal set; } = -1;
390+
public Vector rescueZoneCenter { get; internal set; } = new Vector();
390391

391392
/// <summary>
392393
/// The ID of the CT-Team
@@ -784,7 +785,7 @@ private void BindEntites()
784785
//Okay, first the team-stuff.
785786
HandleTeamScores();
786787

787-
HandleBombSites();
788+
HandleBombSitesAndRescueZones();
788789

789790
HandlePlayers();
790791

@@ -1198,28 +1199,78 @@ void HandleWeapon (object sender, EntityCreatedEventArgs e)
11981199
}
11991200

12001201
public List<BoundingBoxInformation> triggers = new List<BoundingBoxInformation>();
1201-
public void HandleBombSites()
1202+
public void HandleBombSitesAndRescueZones()
12021203
{
12031204
SendTableParser.FindByName("CCSPlayerResource").OnNewEntity += (s1, newResource) => {
1205+
// defuse
12041206
newResource.Entity.FindProperty("m_bombsiteCenterA").VectorRecived += (s2, center) => {
12051207
bombsiteACenter = center.Value;
12061208
};
12071209
newResource.Entity.FindProperty("m_bombsiteCenterB").VectorRecived += (s3, center) => {
12081210
bombsiteBCenter = center.Value;
12091211
};
1212+
1213+
// hostage (for multiple hostage rescue zones, use 001, 002 and 003)
1214+
newResource.Entity.FindProperty("m_hostageRescueX.000").DataRecivedDontUse += (s4, center) =>
1215+
{
1216+
if (!(rescueZoneCenter.X != 0 && Convert.ToSingle(center.Value) == 0))
1217+
{
1218+
rescueZoneCenter.X = Convert.ToSingle(center.Value);
1219+
}
1220+
};
1221+
newResource.Entity.FindProperty("m_hostageRescueY.000").DataRecivedDontUse += (s5, center) =>
1222+
{
1223+
if (!(rescueZoneCenter.Y != 0 && Convert.ToSingle(center.Value) == 0))
1224+
{
1225+
rescueZoneCenter.Y = Convert.ToSingle(center.Value);
1226+
}
1227+
};
1228+
newResource.Entity.FindProperty("m_hostageRescueZ.000").DataRecivedDontUse += (s6, center) =>
1229+
{
1230+
if (!(rescueZoneCenter.Z != 0 && Convert.ToSingle(center.Value) == 0))
1231+
{
1232+
rescueZoneCenter.Z = Convert.ToSingle(center.Value);
1233+
}
1234+
};
12101235
};
12111236

12121237
SendTableParser.FindByName("CBaseTrigger").OnNewEntity += (s1, newResource) => {
12131238

12141239
BoundingBoxInformation trigger = new BoundingBoxInformation(newResource.Entity.ID);
12151240
triggers.Add(trigger);
12161241

1242+
// if bombsites, it gets x,y,z values from the world origin (0,0,0)
1243+
// if hostage rescue zones, it gets x,y,z values relative to the entity's origin
12171244
newResource.Entity.FindProperty("m_Collision.m_vecMins").VectorRecived += (s2, vector) => {
1218-
trigger.Min = vector.Value;
1245+
if (bombsiteACenter.Absolute == 0 && bombsiteBCenter.Absolute == 0) // is hostage
1246+
{
1247+
trigger.Min = new Vector()
1248+
{
1249+
X = rescueZoneCenter.X + vector.Value.X,
1250+
Y = rescueZoneCenter.Y + vector.Value.Y,
1251+
Z = rescueZoneCenter.Z + vector.Value.Z,
1252+
};
1253+
}
1254+
else // is defuse
1255+
{
1256+
trigger.Min = vector.Value;
1257+
}
12191258
};
12201259

12211260
newResource.Entity.FindProperty("m_Collision.m_vecMaxs").VectorRecived += (s3, vector) => {
1222-
trigger.Max = vector.Value;
1261+
if (bombsiteACenter.Absolute == 0 && bombsiteBCenter.Absolute == 0) // is hostage
1262+
{
1263+
trigger.Max = new Vector()
1264+
{
1265+
X = rescueZoneCenter.X + vector.Value.X,
1266+
Y = rescueZoneCenter.Y + vector.Value.Y,
1267+
Z = rescueZoneCenter.Z + vector.Value.Z,
1268+
};
1269+
}
1270+
else // is defuse
1271+
{
1272+
trigger.Max = vector.Value;
1273+
}
12231274
};
12241275
};
12251276

src/SourceEngine.Demo.Stats/DemoProcessor.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -829,7 +829,7 @@ public AllStats CreateFiles(ProcessedData processedData, bool createJsonFile = t
829829

830830
allStats.bombsiteStats = GetBombsiteStats(processedData);
831831
allStats.hostageStats = GetHostageStats(processedData);
832-
allStats.rescueZoneStats = GetRescueZoneStats(processedData);
832+
allStats.rescueZoneStats = GetRescueZoneStats();
833833

834834
string[] nadeTypes = { "Flash", "Smoke", "HE", "Incendiary", "Decoy" };
835835
var nadeGroups = GetNadeGroups(processedData, nadeTypes);
@@ -1420,7 +1420,7 @@ public List<hostageStats> GetHostageStats(ProcessedData processedData)
14201420
return hostageStats;
14211421
}
14221422

1423-
public List<rescueZoneStats> GetRescueZoneStats(ProcessedData processedData)
1423+
public List<rescueZoneStats> GetRescueZoneStats()
14241424
{
14251425
List<rescueZoneStats> rescueZoneStats = new List<rescueZoneStats>();
14261426

0 commit comments

Comments
 (0)