Implemented Enfeebled Target enchant. Tests are corrected to use the new DamageNumber methods. Release Build 11017.

mac-build
sigonasr2 6 months ago
parent 6d7240c765
commit 58298839bf
  1. 33
      Adventures in Lestoria Tests/EnchantTests.cpp
  2. 2
      Adventures in Lestoria Tests/MonsterTests.cpp
  3. 4
      Adventures in Lestoria Tests/PlayerTests.cpp
  4. 4
      Adventures in Lestoria/AdventuresInLestoria.cpp
  5. 2
      Adventures in Lestoria/Version.h
  6. 2
      Adventures in Lestoria/assets/config/items/ItemEnchants.txt
  7. BIN
      x64/Release/Adventures in Lestoria.exe

@ -842,5 +842,38 @@ namespace EnchantTests
player->ReduceAutoAttackTimer(INFINITE);
player->AutoAttack();
}
TEST_METHOD(EnfeebledTargetNoEnchantCheck){
testKey->bHeld=true; //Force the key to be held down for testing purposes.
game->ChangePlayerClass(TRAPPER);
player=game->GetPlayer();
Monster&newMonster{game->SpawnMonster({},MONSTER_DATA["TestName"])};
game->SetElapsedTime(0.01f);
game->OnUserUpdate(0.01f);
player->_ForceCastSpell(player->GetAbility1());
game->SetElapsedTime("Trapper.Ability 1.Precast Time"_F);
game->OnUserUpdate("Trapper.Ability 1.Precast Time"_F);
game->SetElapsedTime(0.6f); //Wait for mark lock-on
game->OnUserUpdate(0.6f); //Wait for mark lock-on
Assert::AreEqual(2.f,newMonster.GetMoveSpdMult(),L"Move Spd Multiplier should not be reduced by 30%");
Assert::AreEqual(10,newMonster.GetAttack(),L"Monster Attack damage should not be reduced.");
}
TEST_METHOD(EnfeebledTargetEnchantCheck){
testKey->bHeld=true; //Force the key to be held down for testing purposes.
game->ChangePlayerClass(TRAPPER);
player=game->GetPlayer();
std::weak_ptr<Item>nullRing{Inventory::AddItem("Null Ring"s)};
Inventory::EquipItem(nullRing,EquipSlot::RING1);
nullRing.lock()->EnchantItem("Enfeebled Target");
Monster&newMonster{game->SpawnMonster({},MONSTER_DATA["TestName"])};
game->SetElapsedTime(0.01f);
game->OnUserUpdate(0.01f);
player->_ForceCastSpell(player->GetAbility1());
game->SetElapsedTime("Trapper.Ability 1.Precast Time"_F);
game->OnUserUpdate("Trapper.Ability 1.Precast Time"_F);
game->SetElapsedTime(0.6f); //Wait for mark lock-on
game->OnUserUpdate(0.6f); //Wait for mark lock-on
Assert::AreEqual(1.4f,newMonster.GetMoveSpdMult(),L"Move Spd Multiplier should be reduced by 30%");
Assert::AreEqual(8,newMonster.GetAttack(),L"Monster Attack damage should be reduced.");
}
};
}

@ -396,7 +396,7 @@ namespace MonsterTests
testMonster.Hurt(10,testMonster.OnUpperLevel(),testMonster.GetZ(),HurtFlag::DOT);
Assert::AreEqual(10,testMonster.GetHealth(),L"A DOT should go through all sources of iframes.");
Assert::AreEqual(2,std::accumulate(DAMAGENUMBER_LIST.begin(),DAMAGENUMBER_LIST.end(),0,[](int count,const std::shared_ptr<DamageNumber>&damageNumber){
if(damageNumber->type==DamageNumberType::DOT)return count+1;
if(damageNumber->GetType()==DamageNumberType::DOT)return count+1;
else return count;
})
,L"There should be 2 damage numbers of type DOT.");

@ -610,7 +610,7 @@ namespace PlayerTests
player->Hurt(20,player->OnUpperLevel(),player->GetZ(),HurtFlag::DOT);
Assert::AreEqual(80,player->GetHealth(),L"Player should take 20 damage through a DOT.");
Assert::AreEqual(1,std::accumulate(DAMAGENUMBER_LIST.begin(),DAMAGENUMBER_LIST.end(),0,[](int count,const std::shared_ptr<DamageNumber>&damageNumber){
if(damageNumber->type==DamageNumberType::DOT)return count+1;
if(damageNumber->GetType()==DamageNumberType::DOT)return count+1;
else return count;
})
,L"There should be a damage number of type DOT.");
@ -619,7 +619,7 @@ namespace PlayerTests
player->Hurt(20,player->OnUpperLevel(),player->GetZ(),HurtFlag::DOT);
Assert::AreEqual(80,player->GetHealth(),L"Player should take 20 damage through a DOT even when iframes are on."); //HP Recovery/4s set effect has restored the health of the player to 100. So it should go back down to 80.
Assert::AreEqual(2,std::accumulate(DAMAGENUMBER_LIST.begin(),DAMAGENUMBER_LIST.end(),0,[](int count,const std::shared_ptr<DamageNumber>&damageNumber){
if(damageNumber->type==DamageNumberType::DOT)return count+1;
if(damageNumber->GetType()==DamageNumberType::DOT)return count+1;
else return count;
})
,L"There should be 2 damage numbers of type DOT.");

@ -4421,6 +4421,10 @@ void AiL::GlobalGameUpdates(){
const auto&[monster,stackCount,time]=lockOnTargets.front();
if(!monster.expired()){
monster.lock()->AddBuff(BuffType::TRAPPER_MARK,time,stackCount);
if(game->GetPlayer()->HasEnchant("Enfeebled Target")){
monster.lock()->AddBuff(BuffType::SLOWDOWN,time,"Enfeebled Target"_ENC["SLOW PCT"]/100.f);
monster.lock()->AddBuff(BuffType::STAT_UP,time,-"Enfeebled Target"_ENC["DAMAGE REDUCTION PCT"]/100.f,{"Attack %"});
}
SoundEffect::PlaySFX("Lock On",monster.lock()->GetPos());
lastLockOnTargetTime=0.2f;
}

@ -39,7 +39,7 @@ All rights reserved.
#define VERSION_MAJOR 1
#define VERSION_MINOR 2
#define VERSION_PATCH 3
#define VERSION_BUILD 11014
#define VERSION_BUILD 11017
#define stringify(a) stringify_(a)
#define stringify_(a) #a

@ -248,7 +248,7 @@ Item Enchants
Description = "Marked targets are slowed by {SLOW PCT}% and deal {DAMAGE REDUCTION PCT}% less damage."
Affects = Ability 1
SLOT PCT = 30%
SLOW PCT = 30%
DAMAGE REDUCTION PCT = 20%
# Stat, Lowest, Highest Value

Loading…
Cancel
Save