- Fixed: If AbsorbDamage resulted in an item having been destroyed, the following items in the inventory chain were not processed.

This commit is contained in:
Player701 2020-11-17 14:20:12 +03:00 committed by Christoph Oelckers
parent 75c791ecff
commit 7ff79546e4

View file

@ -3242,8 +3242,11 @@ bool AActor::AdjustReflectionAngle (AActor *thing, DAngle &angle)
int AActor::AbsorbDamage(int damage, FName dmgtype, AActor *inflictor, AActor *source, int flags) int AActor::AbsorbDamage(int damage, FName dmgtype, AActor *inflictor, AActor *source, int flags)
{ {
for (AActor *item = Inventory; item != nullptr; item = item->Inventory) AActor *next;
for (AActor *item = Inventory; item != nullptr; item = next)
{ {
// [Player701] Remember the next item now in case the current item is destroyed later
next = item->Inventory;
IFVIRTUALPTRNAME(item, NAME_Inventory, AbsorbDamage) IFVIRTUALPTRNAME(item, NAME_Inventory, AbsorbDamage)
{ {
VMValue params[7] = { item, damage, dmgtype.GetIndex(), &damage, inflictor, source, flags }; VMValue params[7] = { item, damage, dmgtype.GetIndex(), &damage, inflictor, source, flags };