private void Game_OnProcessSpell(Obj_AI_Base hero, GameObjectProcessSpellCastEventArgs args) { if (!menu.Item("TrackEnemyWards").GetValue <bool>()) { return; } if (hero.IsEnemy && hero.IsValid <Obj_AI_Hero>()) { WardData wardData; if (WardDatabase.wardspellNames.TryGetValue(args.SData.Name.ToLower(), out wardData)) { var pos = args.End.To2D(); DelayAction.Add(50, () => { foreach (var ward in wards) { if (ward.position.To2D().Distance(pos) < 50 && HelperUtils.TickCount - ward.timestamp < 100) { return; } } WardTrackerInfo newWard = new WardTrackerInfo( wardData, pos.To3D(), null ); newWard.startPos = args.Start.To2D(); newWard.endPos = args.End.To2D(); wards.Add(newWard); }); } } }
private void Game_OnCreateObj(GameObject sender, EventArgs args) { /*if (sender.Name.ToLower().Contains("minion") || sender.Name.ToLower().Contains("turret")) { return; } if (sender.IsValid<MissileClient>()) { var tMissile = sender as MissileClient; if (tMissile.SpellCaster.Type != GameObjectType.obj_AI_Hero) { return; } } ConsolePrinter.Print(sender.Type + " : " + sender.Name);*/ if (!menu.Item("TrackEnemyWards").GetValue<bool>()) { return; } //Visible ward placement var obj = sender as Obj_AI_Minion; WardData wardData; if (obj != null && obj.IsEnemy && WardDatabase.wardObjNames.TryGetValue(obj.CharData.BaseSkinName.ToLower(), out wardData)) { var timestamp = HelperUtils.TickCount - (obj.MaxMana - obj.Mana) * 1000; WardTrackerInfo newWard = new WardTrackerInfo( wardData, obj.Position, obj, !obj.IsVisible && args == null, timestamp ); wards.Add(newWard); DelayAction.Add(500, () => { if (newWard.wardObject != null && newWard.wardObject.IsValid && !newWard.wardObject.IsDead) { timestamp = HelperUtils.TickCount - (obj.MaxMana - obj.Mana) * 1000; newWard.timestamp = timestamp; foreach (var ward in wards) { if (ward.wardObject == null) { //Check for Process Spell wards if (ward.position.Distance(sender.Position) < 550 && Math.Abs(ward.timestamp - timestamp) < 2000) { DelayAction.Add(0, () => wards.Remove(ward)); break; } } } } }); } //FOW placement var missile = sender as MissileClient; if (missile != null && missile.SpellCaster.IsEnemy) { if (missile.SData.Name.ToLower() == "itemplacementmissile")// && !missile.SpellCaster.IsVisible) { var dir = (missile.EndPosition.To2D() - missile.StartPosition.To2D()).Normalized(); var pos = missile.StartPosition.To2D() + dir * 500; foreach (var ward in wards) //check for visible { if (ward.position.To2D().Distance(pos) < 750 && HelperUtils.TickCount - ward.timestamp < 50) { return; } } DelayAction.Add(100, () => { foreach (var ward in wards) //check for OnProcessSpell { if (ward.position.To2D().Distance(pos) < 750 && HelperUtils.TickCount - ward.timestamp < 125) { return; } } WardTrackerInfo newWard = new WardTrackerInfo( WardDatabase.missileWardData, pos.To3D(), null, true ); newWard.startPos = missile.StartPosition.To2D(); newWard.endPos = missile.EndPosition.To2D(); wards.Add(newWard); }); } } }
private void Game_OnProcessSpell(Obj_AI_Base hero, GameObjectProcessSpellCastEventArgs args) { if (!menu.Item("TrackEnemyWards").GetValue<bool>()) { return; } if (hero.IsEnemy && hero.IsValid<Obj_AI_Hero>()) { WardData wardData; if (WardDatabase.wardspellNames.TryGetValue(args.SData.Name.ToLower(), out wardData)) { var pos = args.End.To2D(); DelayAction.Add(50, () => { foreach (var ward in wards) { if (ward.position.To2D().Distance(pos) < 50 && HelperUtils.TickCount - ward.timestamp < 100) { return; } } WardTrackerInfo newWard = new WardTrackerInfo( wardData, pos.To3D(), null ); newWard.startPos = args.Start.To2D(); newWard.endPos = args.End.To2D(); wards.Add(newWard); }); } } }
private void Game_OnCreateObj(GameObject sender, EventArgs args) { /*if (sender.Name.ToLower().Contains("minion") || sender.Name.ToLower().Contains("turret")) || { || return; || } || || if (sender.IsValid<MissileClient>()) || { || var tMissile = sender as MissileClient; || if (tMissile.SpellCaster.Type != GameObjectType.obj_AI_Hero) || { || return; || } || } || || ConsolePrinter.Print(sender.Type + " : " + sender.Name);*/ if (!menu.Item("TrackEnemyWards").GetValue <bool>()) { return; } //Visible ward placement var obj = sender as Obj_AI_Minion; WardData wardData; if (obj != null && obj.IsEnemy && WardDatabase.wardObjNames.TryGetValue(obj.CharData.BaseSkinName.ToLower(), out wardData)) { var timestamp = HelperUtils.TickCount - (obj.MaxMana - obj.Mana) * 1000; WardTrackerInfo newWard = new WardTrackerInfo( wardData, obj.Position, obj, !obj.IsVisible && args == null, timestamp ); wards.Add(newWard); DelayAction.Add(500, () => { if (newWard.wardObject != null && newWard.wardObject.IsValid && !newWard.wardObject.IsDead) { timestamp = HelperUtils.TickCount - (obj.MaxMana - obj.Mana) * 1000; newWard.timestamp = timestamp; foreach (var ward in wards) { if (ward.wardObject == null) { //Check for Process Spell wards if (!ward.unknownDuration && Math.Abs(ward.timestamp - timestamp) < 2000) { if (ward.position.Distance(sender.Position) < 25) { DelayAction.Add(0, () => wards.Remove(ward)); break; } else //ward hit a wall { var projection = sender.Position.To2D().ProjectOn(ward.startPos, ward.endPos); if (projection.SegmentPoint.Distance(sender.Position.To2D()) < 100) { DelayAction.Add(0, () => wards.Remove(ward)); break; } } } else if (ward.startPos != null) //check for FOW Wards { var projection = sender.Position.To2D().ProjectOn(ward.startPos, ward.endPos); if (projection.SegmentPoint.Distance(sender.Position.To2D()) < 100 && Math.Abs(ward.timestamp - timestamp) < 2000) { DelayAction.Add(0, () => wards.Remove(ward)); break; } } } } } }); } //FOW placement var missile = sender as MissileClient; if (missile != null && missile.SpellCaster.IsEnemy) { if (missile.SData.Name.ToLower() == "itemplacementmissile")// && !missile.SpellCaster.IsVisible) { var dir = (missile.EndPosition.To2D() - missile.StartPosition.To2D()).Normalized(); var pos = missile.StartPosition.To2D() + dir * 500; foreach (var ward in wards) //check for visible { if (ward.position.To2D().Distance(pos) < 750 && HelperUtils.TickCount - ward.timestamp < 50) { return; } } DelayAction.Add(100, () => { foreach (var ward in wards) //check for OnProcessSpell { if (ward.position.To2D().Distance(pos) < 750 && HelperUtils.TickCount - ward.timestamp < 125) { return; } } WardTrackerInfo newWard = new WardTrackerInfo( WardDatabase.missileWardData, pos.To3D(), null, true ); newWard.startPos = missile.StartPosition.To2D(); newWard.endPos = missile.EndPosition.To2D(); wards.Add(newWard); }); } } }