The system of attributes that we use is a bit confusing because it was developed to handle only very simple skills.
We have ranged and melee. They are both physical attacks, the difference is range, not source. So we shouldn't calculate anything related to damage based on them, they only should affect range. For physical source it's better to use another attribute, like "physical". I think I'll handle it on my own though.
The difficult part is to process more than one damage source. Like 50/50 light and physical, or 33/33/33 fire/air/darkness. Meaning:
- attack, defense and damage parts calculated as usual, without changing anything
- then damage output is divided equally between all sources attributes, like 50/50 for fire/air
- check for absorption and resistance for elemental parts, individually
- for those that were not absorbed or resisted checks for elemental multipliers, I mean those inside the get_attributes_multiplier function, individually too
- after calculations, deal all types of damage one after another, and report about it in the log