personal idea
1) create a invisible enitity, solid_trigger
2) set it's size to fit the "radius"
3) set it's origin to the player's origin & set it follow "the player"(movetype_follow)
4) when other players touch the created entity, use some trace-line to filtrate "wall" | "water" etc, then the residual status is been "hurt", just make "fakedamage" to them
5) if you want damage per some seconds, chang some param of the created entity by every "think" of it(through set the created entity's "nextthink" by your custom time), or simply use loop task
sorry for my bad English.