private void OnNetworkPropertyChanged(Entity sender, NetworkPropertyChangedEventArgs e) { if (e.PropertyName != "fStockTime") { return; } UpdateManager.BeginInvoke(() => { if (this.tomeSleeper.IsSleeping) { return; } this.OnUpdate(); }); }
private void OnNetworkPropertyChanged(Entity sender, NetworkPropertyChangedEventArgs e) { if (e.PropertyName != "m_bIsWaitingToSpawn") { return; } var newValue = e.NewValue.GetBoolean(); var oldValue = e.OldValue.GetBoolean(); if (newValue == oldValue || (!oldValue && newValue)) { return; } UpdateManager.BeginInvoke(() => { try { if (this.spawnSleeper) { return; } var unit = EntityManager9.GetUnit(sender.Handle); if (unit == null || !unit.IsLaneCreep || unit.Team != this.ownerTeam) { return; } foreach (var creepWave in this.creepWaves.Where(x => !x.IsSpawned)) { creepWave.Spawn(); } this.spawnSleeper.Sleep(25); } catch (Exception ex) { Logger.Error(ex); } }); }
private void Entity_NetworkPropertyChanged(Entity sender, NetworkPropertyChangedEventArgs e) { if (e.PropertyName == "m_angRotation" && sender.ClassId == ClassId.CDOTA_Unit_Hero_Mirana) { Console.WriteLine(e.PropertyName + " " + ((Unit)sender).Rotation); } if (e.PropertyName != "m_anglediff" || sender.ClassId != ClassId.CDOTA_Unit_Hero_Mirana) { return; } Console.WriteLine(e.PropertyName + " " + ((Unit)sender).Rotation + " " + e.NewValue.GetInt32()); /*UpdateManager.BeginInvoke(() => * { * //Console.WriteLine(sender + " " + (NetworkActivity)e.OldValue.GetInt32()); * Console.WriteLine(sender + " " + e.PropertyName + " " + e.NewValue.GetInt32()); * });*/ }
private void OnNetworkPropertyChanged(Entity sender, NetworkPropertyChangedEventArgs e) { if (e.PropertyName != "m_hTowerAttackTarget") { return; } var newValue = e.NewValue.GetUInt32(); if (newValue == e.OldValue.GetUInt32()) { return; } UpdateManager.BeginInvoke(() => { try { var unit = EntityManager9.GetUnit(newValue); if (unit == null || !unit.IsHero || unit.IsIllusion || unit.Distance(this.owner) > 1000) { return; } this.effect?.Dispose(); this.effect = ParticleManager.CreateParticle(@"materials\ensage_ui\particles\target.vpcf", unit.Position); this.effect.SetControlPoint(2, sender.Position); this.effect.SetControlPoint(5, new Vector3(255, 0, 0)); this.effect.SetControlPoint(6, new Vector3(255)); this.tower = (Tower)sender; this.towerTarget = unit; this.handler.IsEnabled = true; } catch (Exception ex) { Logger.Error(ex); } }); }
private void OnNetworkPropertyChanged(Entity sender, NetworkPropertyChangedEventArgs e) { if (e.PropertyName != "m_iAbilityPoints") { return; } UpdateManager.BeginInvoke(async() => { if (sender.Handle != this.owner.HeroHandle) { return; } var newValue = e.NewValue.GetInt32(); if (newValue == e.OldValue.GetInt32()) { return; } await Task.Delay(100); this.LearnAbility(newValue); }); }
private void OnNetworkPropertyChanged(Entity sender, NetworkPropertyChangedEventArgs e) { if (e.PropertyName != "m_bInAbilityPhase") { return; } UpdateManager.BeginInvoke(() => { try { var newValue = e.NewValue.GetBoolean(); if (newValue == e.OldValue.GetBoolean()) { return; } var ability = EntityManager9.GetAbility(sender.Handle) as ActiveAbility; if (ability?.IsControllable != true) { return; } if (this.IsIgnored(ability)) { return; } if (!(ability is AreaOfEffectAbility) && !(ability is PredictionAbility)) { return; } if (newValue) { if (ability is AreaOfEffectAbility) { if (ability.CastRange > 0) { UpdateManager.BeginInvoke(10, () => this.abilityPositions[ability.Handle] = ability.Owner.InFront(ability.CastRange)); } else { UpdateManager.BeginInvoke(10, () => this.abilityPositions[ability.Handle] = ability.Owner.Position); } } this.abilityTimings[ability] = GameManager.RawGameTime + ability.CastPoint; this.failSafeHandler.IsEnabled = true; } else { this.abilityTimings.Remove(ability); this.abilityPositions.Remove(ability.Handle); if (this.abilityTimings.Count <= 0) { this.failSafeHandler.IsEnabled = false; } } } catch (Exception ex) { Logger.Error(ex); } }); }
private void OnNetworkPropertyChanged(Entity sender, NetworkPropertyChangedEventArgs e) { switch (e.PropertyName) { case "m_bToggleState": { var newValue = e.NewValue.GetBoolean(); if (!newValue || newValue == e.OldValue.GetBoolean()) { break; } UpdateManager.BeginInvoke(() => { var ability = EntityManager9.GetAbilityFast(sender.Handle); if (ability == null) { return; } this.AbilityCasted?.Invoke(ability); }); } break; case "m_bInAbilityPhase": { var newValue = e.NewValue.GetBoolean(); if (newValue == e.OldValue.GetBoolean()) { break; } UpdateManager.BeginInvoke(() => { var ability = EntityManager9.GetAbilityFast(sender.Handle); if (ability == null) { return; } ability.IsCasting = newValue; ability.Owner.IsCasting = newValue; this.AbilityCastChange?.Invoke(ability); }); } break; case "m_flEnableTime": { var newValue = e.NewValue.GetSingle(); if (newValue == e.OldValue.GetSingle()) { break; } UpdateManager.BeginInvoke(() => { var ability = EntityManager9.GetAbilityFast(sender.Handle); if (ability == null) { return; } ability.ItemEnableTimeSleeper.SleepUntil(newValue); }); } break; case "m_flCastStartTime": { var newValue = e.NewValue.GetSingle(); var oldValue = e.OldValue.GetSingle(); if (newValue == oldValue) { break; } UpdateManager.BeginInvoke(() => { if (this.AbilityCasted == null) { return; } var ability = EntityManager9.GetAbilityFast(sender.Handle); if (ability == null) { return; } if (!ability.IsDisplayingCharges) { return; } var castTime = newValue - oldValue; if (castTime < 0 || oldValue < 0) { return; } var visibleTime = GameManager.RawGameTime - ability.Owner.LastNotVisibleTime; if (visibleTime < 0.05f) { return; } if (ability.CastPoint <= 0) { this.AbilityCasted(ability); } else { if (Math.Abs(ability.CastPoint - castTime) < 0.03f) { this.AbilityCasted(ability); } } }); } break; case "m_fCooldown": { var newValue = e.NewValue.GetSingle(); var oldValue = e.OldValue.GetSingle(); if (newValue == oldValue) { break; } UpdateManager.BeginInvoke(() => { if (this.AbilityCasted == null) { return; } if (newValue <= oldValue || oldValue > 0) { return; } var ability = EntityManager9.GetAbilityFast(sender.Handle); if (ability == null) { return; } var visibleTime = GameManager.RawGameTime - ability.Owner.LastNotVisibleTime; if (visibleTime < 0.05f) { return; } this.AbilityCasted(ability); }); } break; case "m_flChannelStartTime": { var newValue = e.NewValue.GetSingle(); if (newValue == e.OldValue.GetSingle()) { break; } UpdateManager.BeginInvoke(() => { var ability = EntityManager9.GetAbilityFast(sender.Handle); if (ability == null) { return; } if (!(ability is IChanneled channeled)) { return; } if (newValue > 0) { ability.IsChanneling = true; channeled.Owner.ChannelEndTime = newValue + channeled.ChannelTime; channeled.Owner.ChannelActivatesOnCast = channeled.IsActivatesOnChannelStart; this.AbilityChannel?.Invoke(ability); } else { ability.IsChanneling = false; channeled.Owner.ChannelEndTime = 0; channeled.Owner.ChannelActivatesOnCast = false; } }); } break; case "m_iParity": { if (e.NewValue.GetInt32() == e.OldValue.GetInt32()) { break; } UpdateManager.BeginInvoke(() => { var owner = EntityManager9.GetUnitFast(sender.Handle); if (owner == null) { return; } var inventory = owner.BaseInventory; var checkedItems = new List <uint>(); foreach (var handle in this.GetInventoryItems(inventory).Select(x => x.Handle)) { var item = EntityManager9.GetAbilityFast(handle); if (item == null) { continue; } checkedItems.Add(handle); if (item.Owner == owner) { item.IsAvailable = true; //UpdateManager.BeginInvoke(100, () => InventoryChanged?.Invoke(null, EventArgs.Empty)); continue; } EntityManager9.RemoveAbility(item.BaseAbility); EntityManager9.AddAbility(item.BaseAbility); } foreach (var handle in this.GetStashItems(inventory).Select(x => x.Handle)) { var item = EntityManager9.GetAbilityFast(handle); if (item == null) { continue; } checkedItems.Add(handle); if (item.Owner == owner) { item.IsAvailable = false; //UpdateManager.BeginInvoke(100, () => InventoryChanged?.Invoke(null, EventArgs.Empty)); continue; } EntityManager9.RemoveAbility(item.BaseAbility); EntityManager9.AddAbility(item.BaseAbility); } // stashed neutral items foreach (var item in owner.AbilitiesFast.Where(x => x.IsItem && x.IsAvailable && !checkedItems.Contains(x.Handle))) { item.IsAvailable = false; //UpdateManager.BeginInvoke(100, () => InventoryChanged?.Invoke(null, EventArgs.Empty)); } }); } break; } }
private void OnNetworkPropertyChanged(Entity sender, NetworkPropertyChangedEventArgs e) { switch (e.PropertyName) { case "m_bReincarnating": { var newValue = e.NewValue.GetBoolean(); if (newValue == e.OldValue.GetBoolean()) { break; } UpdateManager.BeginInvoke(() => { var unit = (Hero9)EntityManager9.GetUnitFast(sender.Handle); if (unit == null) { return; } unit.IsReincarnating = newValue; }); } break; case "m_iIsControllableByPlayer64": { if (e.NewValue.GetInt64() == e.OldValue.GetInt64()) { break; } UpdateManager.BeginInvoke(() => { EntityManager9.ChangeEntityControl(sender); }); } break; case "m_hKillCamUnit": { if (e.NewValue.GetUInt32() == e.OldValue.GetUInt32()) { break; } UpdateManager.BeginInvoke(() => { if (sender.Team == this.allyTeam) { return; } var entity = e.NewValue.GetEntity(); if (entity == null || !entity.IsValid) { return; } var handle = ((Player)sender).Hero?.Handle; var unit = (Hero9)EntityManager9.GetUnitFast(handle); if (unit == null) { return; } UpdateManager.BeginInvoke(500, () => RespawnUnit(unit)); }); } break; case "m_iHealth": { var newValue = e.NewValue.GetInt32(); if (newValue == e.OldValue.GetInt32()) { break; } UpdateManager.BeginInvoke(() => { var unit = EntityManager9.GetUnitFast(sender.Handle); if (unit == null) { return; } if (newValue > 0) { this.UnitHealthChange?.Invoke(unit, newValue); } else { unit.DeathTime = GameManager.RawGameTime; this.AttackStopped(unit); this.attackSleeper.Remove(unit.Handle); this.UnitDied?.Invoke(unit); } }); } break; case "m_NetworkActivity": { var newValue = e.NewValue.GetInt32(); if (newValue == e.OldValue.GetInt32()) { break; } UpdateManager.BeginInvoke(() => { var unit = EntityManager9.GetUnitFast(sender.Handle); if (unit == null) { return; } if (this.attackActivities.Contains(newValue)) { this.AttackStarted(unit); } else { this.AttackStopped(unit); } }); } break; } }