public void ApplyExtraHealthPermil(int x, int y, int radius, int team, int extraHealthPermil, int extraHealthMin, int extraHealthMax, int time, int targetType) { LogicArrayList <LogicComponent> components = this.GetComponentManager().GetComponents(LogicComponentType.HITPOINT); for (int i = 0; i < components.Size(); i++) { LogicHitpointComponent hitpointComponent = (LogicHitpointComponent)components[i]; LogicGameObject parent = hitpointComponent.GetParent(); if (!parent.IsHidden() && hitpointComponent.GetHitpoints() != 0 && hitpointComponent.GetTeam() == team) { LogicMovementComponent movementComponent = parent.GetMovementComponent(); if (movementComponent != null) { if (parent.GetGameObjectType() == LogicGameObjectType.CHARACTER) { LogicCharacter character = (LogicCharacter)parent; if (character.GetCharacterData().GetAuraSpell(character.GetUpgradeLevel()) == this.m_data) { continue; } } if (parent.IsFlying()) { if (targetType != 1) { continue; } } else if (targetType == 0) { continue; } int distanceX = x - parent.GetMidX(); int distanceY = y - parent.GetMidY(); if (LogicMath.Abs(distanceX) <= radius && LogicMath.Abs(distanceY) <= radius && distanceX * distanceX + distanceY * distanceY < (uint)(radius * radius)) { int hp = hitpointComponent.GetOriginalHitpoints() + LogicMath.Clamp(extraHealthPermil * hitpointComponent.GetOriginalHitpoints() / 1000, 100 * extraHealthMin, 100 * extraHealthMax); if (hp >= hitpointComponent.GetMaxHitpoints()) { hitpointComponent.SetExtraHealth(hp, time); } } } } } }
public bool DuplicateCharacter() { if (this.m_duplicateHousingSpace < 0) { this.m_duplicateHousingSpace = this.GetSpellData().GetDuplicateHousing(this.m_upgradeLevel); } if (this.m_duplicableCharacters != null) { if (this.m_duplicableCharacters.Size() > 0) { int minHousingSpace = ((LogicCharacter)this.m_duplicableCharacters[0]).GetCharacterData().GetHousingSpace(); for (int i = 0; i < this.m_duplicableCharacters.Size(); i++) { LogicCharacter character = (LogicCharacter)this.m_duplicableCharacters[(i + this.m_duplicateCharacterOffset) % this.m_duplicableCharacters.Size()]; LogicCharacterData data = character.GetCharacterData(); int housingSpace = data.GetHousingSpace(); if (minHousingSpace > housingSpace) { minHousingSpace = housingSpace; } if (this.DuplicateCharacter(data, character.GetUpgradeLevel())) { return(true); } } return(false); } return(this.DuplicateCharacter(this.m_duplicateCharacterData, this.m_duplicateCharacterUpgradeLevel)); } return(this.m_duplicateCharacterData != null && this.DuplicateCharacter(this.m_duplicateCharacterData, this.m_duplicateCharacterUpgradeLevel)); }
public void SelectDuplicableCharacters() { if (this.m_duplicableCharacters == null) { this.m_duplicableCharacters = new LogicArrayList <LogicGameObject>(20); } if (this.m_duplicateCharacters == null) { this.m_duplicateCharacters = new LogicArrayList <LogicGameObject>(20); } int radius = this.GetSpellData().GetRadius(this.m_upgradeLevel); LogicArrayList <LogicComponent> components = this.GetComponentManager().GetComponents(LogicComponentType.MOVEMENT); for (int i = 0; i < components.Size(); i++) { LogicMovementComponent movementComponent = (LogicMovementComponent)components[i]; LogicGameObject parent = movementComponent.GetParent(); if (parent.GetGameObjectType() == LogicGameObjectType.CHARACTER) { LogicCharacter character = (LogicCharacter)parent; LogicCharacterData characterData = character.GetCharacterData(); LogicHitpointComponent hitpointComponent = character.GetHitpointComponent(); if (hitpointComponent != null && hitpointComponent.GetTeam() == 0 && character.IsAlive() && !character.IsHero() && characterData.GetHousingSpace() <= this.m_duplicateHousingSpace) { int distanceX = character.GetPosition().m_x - this.GetMidX(); int distanceY = character.GetPosition().m_y - this.GetMidY(); if (LogicMath.Abs(distanceX) <= radius && LogicMath.Abs(distanceY) <= radius && distanceX * distanceX + distanceY * distanceY < (uint)(radius * radius)) { int idx = -1; for (int j = 0, size = this.m_duplicableCharacters.Size(); j < size; j++) { if (this.m_duplicableCharacters[j] == character) { idx = j; break; } } if (idx == -1) { this.m_duplicateCharacterData = characterData; this.m_duplicateCharacterUpgradeLevel = character.GetUpgradeLevel(); this.m_duplicableCharacters.Add(character); // Listener. } } } } } }