public void CacheEnemy(NPC npc) { if (npc.boss || npc.realLife != -1 || (npc.rarity > 0 || npc.extraValue < CoinLossRevengeSystem.MinimumCoinsForCaching) || ((double)npc.position.X < (double)Main.leftWorld + 640.0 + 16.0 || (double)npc.position.X + (double)npc.width > (double)Main.rightWorld - 640.0 - 32.0 || ((double)npc.position.Y < (double)Main.topWorld + 640.0 + 16.0 || (double)npc.position.Y > (double)Main.bottomWorld - 640.0 - 32.0 - (double)npc.height))) { return; } int num1 = npc.netID; int num2; if (NPCID.Sets.RespawnEnemyID.TryGetValue(num1, out num2)) { num1 = num2; } if (num1 == 0) { return; } CoinLossRevengeSystem.RevengeMarker marker = new CoinLossRevengeSystem.RevengeMarker(npc.Center, num1, npc.GetLifePercent(), npc.type, npc.aiStyle, npc.extraValue, npc.value, npc.SpawnedFromStatue, this._gameTime, -1); this.AddMarker(marker); if (Main.netMode == 2) { NetMessage.SendCoinLossRevengeMarker(marker, -1, -1); } if (!CoinLossRevengeSystem.DisplayCaching) { return; } Main.NewText("Cached " + npc.GivenOrTypeName, byte.MaxValue, byte.MaxValue, byte.MaxValue); }
public CoinLossRevengeSystem.RevengeMarker DrawMapIcons( SpriteBatch spriteBatch, Vector2 mapTopLeft, Vector2 mapX2Y2AndOff, Rectangle?mapRect, float mapScale, float drawScale, ref string unused) { CoinLossRevengeSystem.RevengeMarker revengeMarker = (CoinLossRevengeSystem.RevengeMarker)null; lock (this._markersLock) { foreach (CoinLossRevengeSystem.RevengeMarker marker in this._markers) { if (marker.DrawMapIcon(spriteBatch, mapTopLeft, mapX2Y2AndOff, mapRect, mapScale, drawScale, this._gameTime)) { revengeMarker = marker; } } } return(revengeMarker); }
private void AddMarker(CoinLossRevengeSystem.RevengeMarker marker) { lock (this._markersLock) this._markers.Add(marker); }
public void CheckRespawns() { lock (this._markersLock) { if (this._markers.Count == 0) { return; } } List <Tuple <int, Rectangle, Rectangle> > tupleList = new List <Tuple <int, Rectangle, Rectangle> >(); for (int index = 0; index < (int)byte.MaxValue; ++index) { Player player = Main.player[index]; if (player.active && !player.dead) { tupleList.Add(Tuple.Create <int, Rectangle, Rectangle>(index, Utils.CenteredRectangle(player.Center, CoinLossRevengeSystem._playerBoxSizeInner), Utils.CenteredRectangle(player.Center, CoinLossRevengeSystem._playerBoxSizeOuter))); } } if (tupleList.Count == 0) { return; } this.RemoveExpiredOrInvalidMarkers(); lock (this._markersLock) { List <CoinLossRevengeSystem.RevengeMarker> revengeMarkerList = new List <CoinLossRevengeSystem.RevengeMarker>(); for (int index = 0; index < this._markers.Count; ++index) { CoinLossRevengeSystem.RevengeMarker marker = this._markers[index]; bool flag = false; Tuple <int, Rectangle, Rectangle> tuple1 = (Tuple <int, Rectangle, Rectangle>)null; foreach (Tuple <int, Rectangle, Rectangle> tuple2 in tupleList) { if (marker.Intersects(tuple2.Item2, tuple2.Item3)) { tuple1 = tuple2; flag = true; break; } } if (!flag) { marker.SetRespawnAttemptLock(false); } else if (!marker.RespawnAttemptLocked) { marker.SetRespawnAttemptLock(true); if (marker.WouldNPCBeDiscouraged(Main.player[tuple1.Item1])) { marker.SetToExpire(); } else { marker.SpawnEnemy(); revengeMarkerList.Add(marker); NetMessage.SendData((int)sbyte.MaxValue, -1, -1, (NetworkText)null, marker.UniqueID, 0.0f, 0.0f, 0.0f, 0, 0, 0); } } } this._markers = this._markers.Except <CoinLossRevengeSystem.RevengeMarker>((IEnumerable <CoinLossRevengeSystem.RevengeMarker>)revengeMarkerList).ToList <CoinLossRevengeSystem.RevengeMarker>(); } }