diff options
author | Jaume Aloy <hircine45@gmail.com> | 2014-08-19 12:38:15 +0200 |
---|---|---|
committer | Jaume Aloy <hircine45@gmail.com> | 2014-08-19 12:38:15 +0200 |
commit | d3fd63c9eb5f783da0186efcef81a5b0eb9338d6 (patch) | |
tree | 58041caa169e5bd5ac4e5f6887ee24e2aea1d8b5 /src/Entities/Entity.cpp | |
parent | Merge pull request #1329 from mc-server/Move (diff) | |
download | cuberite-d3fd63c9eb5f783da0186efcef81a5b0eb9338d6.tar cuberite-d3fd63c9eb5f783da0186efcef81a5b0eb9338d6.tar.gz cuberite-d3fd63c9eb5f783da0186efcef81a5b0eb9338d6.tar.bz2 cuberite-d3fd63c9eb5f783da0186efcef81a5b0eb9338d6.tar.lz cuberite-d3fd63c9eb5f783da0186efcef81a5b0eb9338d6.tar.xz cuberite-d3fd63c9eb5f783da0186efcef81a5b0eb9338d6.tar.zst cuberite-d3fd63c9eb5f783da0186efcef81a5b0eb9338d6.zip |
Diffstat (limited to 'src/Entities/Entity.cpp')
-rw-r--r-- | src/Entities/Entity.cpp | 62 |
1 files changed, 61 insertions, 1 deletions
diff --git a/src/Entities/Entity.cpp b/src/Entities/Entity.cpp index 32f220897..398f7703b 100644 --- a/src/Entities/Entity.cpp +++ b/src/Entities/Entity.cpp @@ -316,8 +316,68 @@ bool cEntity::DoTakeDamage(TakeDamageInfo & a_TDI) // IsOnGround() only is false if the player is moving downwards // TODO: Better damage increase, and check for enchantments (and use magic critical instead of plain) - if (!Player->IsOnGround()) + + cEnchantments Enchantments = Player->GetEquippedItem().m_Enchantments; + + int SharpnessLevel = Enchantments.GetLevel(cEnchantments::enchSharpness); + int SmiteLevel = Enchantments.GetLevel(cEnchantments::enchSmite); + int BaneOfArthropodsLevel = Enchantments.GetLevel(cEnchantments::enchBaneOfArthropods); + + if (SharpnessLevel > 0) + { + a_TDI.RawDamage += 1.25 * SharpnessLevel; + } + else if (SmiteLevel > 0) + { + if (IsMob()) + { + cMonster * Monster = (cMonster *)this; + switch (Monster->GetMobType()) + { + case cMonster::mtSkeleton: + case cMonster::mtZombie: + case cMonster::mtWither: + case cMonster::mtZombiePigman: + { + a_TDI.RawDamage += 2.5 * SmiteLevel; + break; + } + } + } + } + else if (BaneOfArthropodsLevel > 0) + { + if (IsMob()) + { + cMonster * Monster = (cMonster *)this; + switch (Monster->GetMobType()) + { + case cMonster::mtSpider: + case cMonster::mtCaveSpider: + case cMonster::mtSilverfish: + { + a_TDI.RawDamage += 2.5 * BaneOfArthropodsLevel; + break; + } + } + } + } + + int FireAspectLevel = Enchantments.GetLevel(cEnchantments::enchFireAspect); + if (FireAspectLevel > 0) { + int BurnTicks = 3; + + if (FireAspectLevel > 1) + { + BurnTicks += 4 * (FireAspectLevel - 1); + } + + StartBurning(BurnTicks * 20); + } + + if (!Player->IsOnGround()) + { if ((a_TDI.DamageType == dtAttack) || (a_TDI.DamageType == dtArrowAttack)) { a_TDI.FinalDamage += 2; |