More Enchantments
- Added Thorns and Respiration enchantments
This commit is contained in:
parent
19d1c976e7
commit
7d771953c0
|
@ -433,7 +433,6 @@ void cBlockHandler::DropBlock(cChunkInterface & a_ChunkInterface, cWorldInterfac
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// TODO: Add a proper overridable function for this
|
// TODO: Add a proper overridable function for this
|
||||||
// Pickups.Add(m_BlockType, 1, Meta);
|
|
||||||
cEnchantments Enchantments = a_Digger->GetEquippedWeapon().m_Enchantments;
|
cEnchantments Enchantments = a_Digger->GetEquippedWeapon().m_Enchantments;
|
||||||
if ((Enchantments.GetLevel(cEnchantments::enchSilkTouch) > 0) && a_Digger->IsPlayer())
|
if ((Enchantments.GetLevel(cEnchantments::enchSilkTouch) > 0) && a_Digger->IsPlayer())
|
||||||
{
|
{
|
||||||
|
|
|
@ -357,8 +357,11 @@ bool cEntity::DoTakeDamage(TakeDamageInfo & a_TDI)
|
||||||
case cMonster::mtSilverfish:
|
case cMonster::mtSilverfish:
|
||||||
{
|
{
|
||||||
a_TDI.RawDamage += 2.5 * BaneOfArthropodsLevel;
|
a_TDI.RawDamage += 2.5 * BaneOfArthropodsLevel;
|
||||||
|
// TODO: Add slowness effect
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
};
|
||||||
|
default: break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -390,8 +393,27 @@ bool cEntity::DoTakeDamage(TakeDamageInfo & a_TDI)
|
||||||
default: StartBurning(BurnTicks * 20);
|
default: StartBurning(BurnTicks * 20);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int ThornsLevel = 0;
|
||||||
|
cItem ArmorItems[] = { GetEquippedHelmet(), GetEquippedChestplate(), GetEquippedLeggings(), GetEquippedBoots() };
|
||||||
|
for (size_t i = 0; i < ARRAYCOUNT(ArmorItems); i++)
|
||||||
|
{
|
||||||
|
cItem Item = ArmorItems[i];
|
||||||
|
if (Item.m_Enchantments.GetLevel(cEnchantments::enchThorns) > ThornsLevel) ThornsLevel = Item.m_Enchantments.GetLevel(cEnchantments::enchThorns);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ThornsLevel > 0)
|
||||||
|
{
|
||||||
|
int Chance = ThornsLevel * 15;
|
||||||
|
|
||||||
|
cFastRandom Random;
|
||||||
|
int RandomValue = Random.GenerateRandomInteger(0, 100);
|
||||||
|
|
||||||
|
if (RandomValue <= Chance)
|
||||||
|
{
|
||||||
|
a_TDI.Attacker->TakeDamage(dtAttack, this, 0, Random.GenerateRandomInteger(1, 4), 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Player->IsOnGround())
|
if (!Player->IsOnGround())
|
||||||
|
@ -405,6 +427,7 @@ bool cEntity::DoTakeDamage(TakeDamageInfo & a_TDI)
|
||||||
|
|
||||||
Player->GetStatManager().AddValue(statDamageDealt, (StatValue)floor(a_TDI.FinalDamage * 10 + 0.5));
|
Player->GetStatManager().AddValue(statDamageDealt, (StatValue)floor(a_TDI.FinalDamage * 10 + 0.5));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IsPlayer()){
|
if (IsPlayer()){
|
||||||
double TotalEPF = 0.0;
|
double TotalEPF = 0.0;
|
||||||
double EPFProtection = 0.00;
|
double EPFProtection = 0.00;
|
||||||
|
@ -413,65 +436,39 @@ bool cEntity::DoTakeDamage(TakeDamageInfo & a_TDI)
|
||||||
double EPFProjectileProtection = 0.00;
|
double EPFProjectileProtection = 0.00;
|
||||||
double EPFFeatherFalling = 0.00;
|
double EPFFeatherFalling = 0.00;
|
||||||
|
|
||||||
cEnchantments ChestplateEnchantments = GetEquippedChestplate().m_Enchantments;
|
cItem ArmorItems[] = { GetEquippedHelmet(), GetEquippedChestplate(), GetEquippedLeggings(), GetEquippedBoots() };
|
||||||
cEnchantments LeggingsEnchantments = GetEquippedLeggings().m_Enchantments;
|
for (size_t i = 0; i < ARRAYCOUNT(ArmorItems); i++)
|
||||||
cEnchantments BootsEnchantments = GetEquippedBoots().m_Enchantments;
|
|
||||||
cEnchantments HelmetEnchantments = GetEquippedHelmet().m_Enchantments;
|
|
||||||
|
|
||||||
if ((ChestplateEnchantments.GetLevel(cEnchantments::enchProtection) > 0) || (LeggingsEnchantments.GetLevel(cEnchantments::enchProtection) > 0)
|
|
||||||
|| (BootsEnchantments.GetLevel(cEnchantments::enchProtection) > 0) || (HelmetEnchantments.GetLevel(cEnchantments::enchProtection) > 0))
|
|
||||||
{
|
{
|
||||||
EPFProtection += (6 + pow(ChestplateEnchantments.GetLevel(cEnchantments::enchProtection), 2)) * 0.75 / 3;
|
cItem Item = ArmorItems[i];
|
||||||
EPFProtection += (6 + pow(LeggingsEnchantments.GetLevel(cEnchantments::enchProtection), 2)) * 0.75 / 3;
|
if (Item.m_Enchantments.GetLevel(cEnchantments::enchProtection) > 0)
|
||||||
EPFProtection += (6 + pow(BootsEnchantments.GetLevel(cEnchantments::enchProtection), 2)) * 0.75 / 3;
|
{
|
||||||
EPFProtection += (6 + pow(HelmetEnchantments.GetLevel(cEnchantments::enchProtection), 2)) * 0.75 / 3;
|
EPFProtection += (6 + pow(Item.m_Enchantments.GetLevel(cEnchantments::enchProtection), 2)) * 0.75 / 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Item.m_Enchantments.GetLevel(cEnchantments::enchFireProtection) > 0)
|
||||||
|
{
|
||||||
|
EPFFireProtection += (6 + pow(Item.m_Enchantments.GetLevel(cEnchantments::enchFireProtection), 2)) * 1.25 / 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Item.m_Enchantments.GetLevel(cEnchantments::enchFeatherFalling) > 0)
|
||||||
|
{
|
||||||
|
EPFFeatherFalling += (6 + pow(Item.m_Enchantments.GetLevel(cEnchantments::enchFeatherFalling), 2)) * 2.5 / 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Item.m_Enchantments.GetLevel(cEnchantments::enchBlastProtection) > 0)
|
||||||
|
{
|
||||||
|
EPFBlastProtection += (6 + pow(Item.m_Enchantments.GetLevel(cEnchantments::enchBlastProtection), 2)) * 1.5 / 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Item.m_Enchantments.GetLevel(cEnchantments::enchProjectileProtection) > 0)
|
||||||
|
{
|
||||||
|
EPFProjectileProtection += (6 + pow(Item.m_Enchantments.GetLevel(cEnchantments::enchProjectileProtection), 2)) * 1.5 / 3;
|
||||||
|
}
|
||||||
|
|
||||||
TotalEPF += EPFProtection;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((ChestplateEnchantments.GetLevel(cEnchantments::enchFireProtection) > 0) || (LeggingsEnchantments.GetLevel(cEnchantments::enchFireProtection) > 0)
|
TotalEPF = EPFProtection + EPFFireProtection + EPFFeatherFalling + EPFBlastProtection + EPFProjectileProtection;
|
||||||
|| (BootsEnchantments.GetLevel(cEnchantments::enchFireProtection) > 0) || (HelmetEnchantments.GetLevel(cEnchantments::enchFireProtection) > 0))
|
|
||||||
{
|
|
||||||
EPFFireProtection += (6 + pow(ChestplateEnchantments.GetLevel(cEnchantments::enchFireProtection), 2)) * 1.25 / 3;
|
|
||||||
EPFFireProtection += (6 + pow(LeggingsEnchantments.GetLevel(cEnchantments::enchFireProtection), 2)) * 1.25 / 3;
|
|
||||||
EPFFireProtection += (6 + pow(BootsEnchantments.GetLevel(cEnchantments::enchFireProtection), 2)) * 1.25 / 3;
|
|
||||||
EPFFireProtection += (6 + pow(HelmetEnchantments.GetLevel(cEnchantments::enchFireProtection), 2)) * 1.25 / 3;
|
|
||||||
|
|
||||||
TotalEPF += EPFFireProtection;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((ChestplateEnchantments.GetLevel(cEnchantments::enchFeatherFalling) > 0) || (LeggingsEnchantments.GetLevel(cEnchantments::enchFeatherFalling) > 0)
|
|
||||||
|| (BootsEnchantments.GetLevel(cEnchantments::enchFeatherFalling) > 0) || (HelmetEnchantments.GetLevel(cEnchantments::enchFeatherFalling) > 0))
|
|
||||||
{
|
|
||||||
EPFFeatherFalling += (6 + pow(ChestplateEnchantments.GetLevel(cEnchantments::enchFeatherFalling), 2)) * 2.5 / 3;
|
|
||||||
EPFFeatherFalling += (6 + pow(LeggingsEnchantments.GetLevel(cEnchantments::enchFeatherFalling), 2)) * 2.5 / 3;
|
|
||||||
EPFFeatherFalling += (6 + pow(BootsEnchantments.GetLevel(cEnchantments::enchFeatherFalling), 2)) * 2.5 / 3;
|
|
||||||
EPFFeatherFalling += (6 + pow(HelmetEnchantments.GetLevel(cEnchantments::enchFeatherFalling), 2)) * 2.5 / 3;
|
|
||||||
|
|
||||||
TotalEPF += EPFFeatherFalling;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((ChestplateEnchantments.GetLevel(cEnchantments::enchBlastProtection) > 0) || (LeggingsEnchantments.GetLevel(cEnchantments::enchBlastProtection) > 0)
|
|
||||||
|| (BootsEnchantments.GetLevel(cEnchantments::enchBlastProtection) > 0) || (HelmetEnchantments.GetLevel(cEnchantments::enchBlastProtection) > 0))
|
|
||||||
{
|
|
||||||
EPFBlastProtection += (6 + pow(ChestplateEnchantments.GetLevel(cEnchantments::enchBlastProtection), 2)) * 1.5 / 3;
|
|
||||||
EPFBlastProtection += (6 + pow(LeggingsEnchantments.GetLevel(cEnchantments::enchBlastProtection), 2)) * 1.5 / 3;
|
|
||||||
EPFBlastProtection += (6 + pow(BootsEnchantments.GetLevel(cEnchantments::enchBlastProtection), 2)) * 1.5 / 3;
|
|
||||||
EPFBlastProtection += (6 + pow(HelmetEnchantments.GetLevel(cEnchantments::enchBlastProtection), 2)) * 1.5 / 3;
|
|
||||||
|
|
||||||
TotalEPF += EPFBlastProtection;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((ChestplateEnchantments.GetLevel(cEnchantments::enchProjectileProtection) > 0) || (LeggingsEnchantments.GetLevel(cEnchantments::enchProjectileProtection) > 0)
|
|
||||||
|| (BootsEnchantments.GetLevel(cEnchantments::enchProjectileProtection) > 0) || (HelmetEnchantments.GetLevel(cEnchantments::enchProjectileProtection) > 0))
|
|
||||||
{
|
|
||||||
EPFProjectileProtection += (6 + pow(ChestplateEnchantments.GetLevel(cEnchantments::enchProjectileProtection), 2)) * 1.5 / 3;
|
|
||||||
EPFProjectileProtection += (6 + pow(LeggingsEnchantments.GetLevel(cEnchantments::enchProjectileProtection), 2)) * 1.5 / 3;
|
|
||||||
EPFProjectileProtection += (6 + pow(BootsEnchantments.GetLevel(cEnchantments::enchProjectileProtection), 2)) * 1.5 / 3;
|
|
||||||
EPFProjectileProtection += (6 + pow(HelmetEnchantments.GetLevel(cEnchantments::enchProjectileProtection), 2)) * 1.5 / 3;
|
|
||||||
|
|
||||||
TotalEPF += EPFProjectileProtection;
|
|
||||||
}
|
|
||||||
|
|
||||||
EPFProtection = EPFProtection / TotalEPF;
|
EPFProtection = EPFProtection / TotalEPF;
|
||||||
EPFFireProtection = EPFFireProtection / TotalEPF;
|
EPFFireProtection = EPFFireProtection / TotalEPF;
|
||||||
|
@ -482,10 +479,9 @@ bool cEntity::DoTakeDamage(TakeDamageInfo & a_TDI)
|
||||||
if (TotalEPF > 25) TotalEPF = 25;
|
if (TotalEPF > 25) TotalEPF = 25;
|
||||||
|
|
||||||
cFastRandom Random;
|
cFastRandom Random;
|
||||||
float randomvalue;
|
float RandomValue = Random.GenerateRandomInteger(50, 100) * 0.01;
|
||||||
randomvalue = Random.GenerateRandomInteger(50, 100) * 0.01;
|
|
||||||
|
|
||||||
TotalEPF = ceil(TotalEPF * randomvalue);
|
TotalEPF = ceil(TotalEPF * RandomValue);
|
||||||
|
|
||||||
if (TotalEPF > 20) TotalEPF = 20;
|
if (TotalEPF > 20) TotalEPF = 20;
|
||||||
|
|
||||||
|
@ -507,9 +503,13 @@ bool cEntity::DoTakeDamage(TakeDamageInfo & a_TDI)
|
||||||
|
|
||||||
if (a_TDI.DamageType == dtProjectile) RemovedDamage += ceil(EPFBlastProtection * 0.04 * a_TDI.FinalDamage);
|
if (a_TDI.DamageType == dtProjectile) RemovedDamage += ceil(EPFBlastProtection * 0.04 * a_TDI.FinalDamage);
|
||||||
|
|
||||||
|
if (a_TDI.FinalDamage < RemovedDamage) RemovedDamage = 0;
|
||||||
|
|
||||||
a_TDI.FinalDamage -= RemovedDamage;
|
a_TDI.FinalDamage -= RemovedDamage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
m_Health -= (short)a_TDI.FinalDamage;
|
m_Health -= (short)a_TDI.FinalDamage;
|
||||||
|
|
||||||
// TODO: Apply damage to armor
|
// TODO: Apply damage to armor
|
||||||
|
@ -533,7 +533,7 @@ bool cEntity::DoTakeDamage(TakeDamageInfo & a_TDI)
|
||||||
case 2: AdditionalSpeed.Set(8, 0.3, 8); break;
|
case 2: AdditionalSpeed.Set(8, 0.3, 8); break;
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
SetSpeed(a_TDI.Knockback + AdditionalSpeed);
|
AddSpeed(a_TDI.Knockback + AdditionalSpeed);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_World->BroadcastEntityStatus(*this, esGenericHurt);
|
m_World->BroadcastEntityStatus(*this, esGenericHurt);
|
||||||
|
@ -1435,6 +1435,8 @@ void cEntity::HandleAir(void)
|
||||||
// See if the entity is /submerged/ water (block above is water)
|
// See if the entity is /submerged/ water (block above is water)
|
||||||
// Get the type of block the entity is standing in:
|
// Get the type of block the entity is standing in:
|
||||||
|
|
||||||
|
int RespirationLevel = GetEquippedHelmet().m_Enchantments.GetLevel(cEnchantments::enchRespiration);
|
||||||
|
|
||||||
if (IsSubmerged())
|
if (IsSubmerged())
|
||||||
{
|
{
|
||||||
if (!IsPlayer()) // Players control themselves
|
if (!IsPlayer()) // Players control themselves
|
||||||
|
@ -1442,6 +1444,11 @@ void cEntity::HandleAir(void)
|
||||||
SetSpeedY(1); // Float in the water
|
SetSpeedY(1); // Float in the water
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (RespirationLevel > 0)
|
||||||
|
{
|
||||||
|
((cPawn *)this)->AddEntityEffect(cEntityEffect::effNightVision, 200, 5, 0);
|
||||||
|
}
|
||||||
|
|
||||||
if (m_AirLevel <= 0)
|
if (m_AirLevel <= 0)
|
||||||
{
|
{
|
||||||
// Runs the air tick timer to check whether the player should be damaged
|
// Runs the air tick timer to check whether the player should be damaged
|
||||||
|
@ -1468,6 +1475,12 @@ void cEntity::HandleAir(void)
|
||||||
// Set the air back to maximum
|
// Set the air back to maximum
|
||||||
m_AirLevel = MAX_AIR_LEVEL;
|
m_AirLevel = MAX_AIR_LEVEL;
|
||||||
m_AirTickTimer = DROWNING_TICKS;
|
m_AirTickTimer = DROWNING_TICKS;
|
||||||
|
|
||||||
|
if (RespirationLevel > 0)
|
||||||
|
{
|
||||||
|
m_AirTickTimer = DROWNING_TICKS + (RespirationLevel * 15 * 20);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user