I’m looking at the code for PainCausingVolume code and unfortunately you can’t create a BP child and override the functions. You can however do it in C++ and expose it to Blueprints.
Basically it does everything you want except the randomized damage. You’ll just need to implement virtual void CausePainTo(class AActor Other);* in your child class and add your randomized damage logic.