First of all, it was a wise decision to ask for advice before starting to develop the game! I've seen too many examples where people did the opposite.
While you can create 40+ boolean variables and code each of the attacks separately, this won't be a good solution. Such code will be difficult to manage and worst of all - it won't be expandable. Imagine if you decide to introduce two new elements later, when the game is almost ready!
So my suggestion is to use some data object to store all attacks and their properties. Here is a example with an array:
I chose an array because it's easy to edit in C3, but there are other options - JSON, CSV (Excel), XML etc. In fact, I would probably use the array for entering and editing data, but convert it internally to JSON in runtime.
With all the values configured, you will only need 3 variables to start an attack and your code can look something like this: