/// <summary> /// Initializes a new instance of the <see cref="LogicCharacter" /> class. /// </summary> public LogicCharacter(LogicData data, LogicLevel level, int villageType) : base(data, level, villageType) { LogicCharacterData characterData = (LogicCharacterData)data; this.AddComponent(new LogicHitpointComponent(this, characterData.GetHitpoints(0), 0)); this.AddComponent(new LogicCombatComponent(this)); this.AddComponent(new LogicMovementComponent(this, characterData.GetSpeed(), characterData.IsHealerTrigger(), characterData.IsUnderground())); this.SetUpgradeLevel(0); }
public static float GetCharacterStrength(LogicCharacterData data, int upgLevel) { if (data.IsProductionEnabled()) { float attackStrength = data.GetHitpoints(upgLevel) * 0.04f + LogicMath.Abs(data.GetAttackerItemData(upgLevel).GetDamagePerMS(0, false)) * 0.2f; if (data.GetUnitsInCamp(upgLevel) > 0 && data.GetUnitsInCamp(0) > 0) { attackStrength = (float)data.GetUnitsInCamp(upgLevel) / data.GetUnitsInCamp(0) * attackStrength; } for (int i = data.GetSpecialAbilityLevel(upgLevel); i > 0; i--) { attackStrength *= 1.1f; } return(attackStrength * 0.01f * data.GetStrengthWeight(upgLevel) / data.GetHousingSpace() * 10f); } return(0f); }
public LogicCharacter(LogicGameObjectData data, LogicLevel level, int villageType) : base(data, level, villageType) { LogicCharacterData characterData = (LogicCharacterData)data; this.m_flying = characterData.IsFlying(); this.AddComponent(new LogicHitpointComponent(this, characterData.GetHitpoints(0), 0)); this.AddComponent(new LogicCombatComponent(this)); this.AddComponent(new LogicMovementComponent(this, characterData.GetSpeed(), characterData.IsFlying(), characterData.IsUnderground())); this.SetUpgradeLevel(0); int childTroopCount = characterData.GetChildTroopCount(); if (childTroopCount > 0) { this.m_childrens = new LogicArrayList <LogicCharacter>(childTroopCount); for (int i = 0; i < childTroopCount; i++) { LogicCharacter character = new LogicCharacter(characterData.GetChildTroop(), level, villageType); character.SetTroopChild(this, i); character.GetCombatComponent().SetTroopChild(true); this.m_childrens.Add(character); this.GetGameObjectManager().AddGameObject(character, -1); } } this.m_ejectPosition = new LogicVector2(); this.m_summonTroops = new LogicArrayList <LogicCharacter>(); if (characterData.IsUnderground()) { this.GetCombatComponent().SetUndergroundTime(3600000); } }
public void SetUpgradeLevel(int upgLevel) { this.m_upgradeLevel = upgLevel; LogicCharacterData data = this.GetCharacterData(); LogicHitpointComponent hitpointComponent = this.GetHitpointComponent(); LogicCombatComponent combatComponent = this.GetCombatComponent(); int hp = data.GetHitpoints(upgLevel); int damagePercentage = 100; if (data.GetScaleByTH()) { LogicAvatar avatar = this.m_level.GetHomeOwnerAvatar(); if (hitpointComponent != null && hitpointComponent.GetTeam() == 0) { avatar = this.m_level.GetVisitorAvatar(); } int tmp1 = 700 * avatar.GetTownHallLevel() / (LogicDataTables.GetTownHallLevelCount() - 1); damagePercentage = tmp1 / 10 + 30; hp = damagePercentage * hp / 100; if (damagePercentage * hp < 200) { hp = 1; } if (tmp1 < -289) { damagePercentage = 1; } } hitpointComponent.SetMaxHitpoints(hp); hitpointComponent.SetHitpoints(data.GetHitpoints(upgLevel)); hitpointComponent.SetDieEffect(data.GetDieEffect(upgLevel), data.GetDieEffect2(upgLevel)); if (combatComponent != null) { combatComponent.SetAttackValues(data.GetAttackerItemData(upgLevel), damagePercentage); } if (this.m_childrens != null) { for (int i = 0; i < this.m_childrens.Size(); i++) { this.m_childrens[i].SetUpgradeLevel(upgLevel); } } if (this.IsHero()) { LogicHeroData heroData = (LogicHeroData)this.m_data; LogicAvatar avatar = this.m_level.GetHomeOwnerAvatar(); if (hitpointComponent.GetTeam() == 0) { avatar = this.m_level.GetVisitorAvatar(); } this.m_flying = heroData.IsFlying(avatar.GetHeroMode(heroData)); this.GetMovementComponent().SetFlying(this.m_flying); } if (data.GetAutoMergeDistance() > 0) { this.m_autoMergeTime = 2000; } int speed = data.GetSpeed(); if (data.GetSpecialAbilityLevel(this.m_upgradeLevel) > 0 && data.GetSpecialAbilityType() == LogicCharacterData.SPECIAL_ABILITY_TYPE_SPEED_BOOST) { speed = speed * data.GetSpecialAbilityAttribute(this.m_upgradeLevel) / 100; } this.GetMovementComponent().SetSpeed(speed); }