It's not you, it really is tricky doing simple things like this in C2 given the nature of event sheets, which are constantly running.
If you have an 'if variable1 equals 4 then add 1 to variable 2' (or whatever) then when variable1 hits the value of 4, that expression will then be run 60 times a second and variable2 will increase by a lot more than 1. So then you add a 'System | Once while true' which is fine, but that has its gotchas as well. I tend to have an 'UpdateValues' function(s), which is what it sounds like, but this could also be called many times inadvertently as above. If you have a turn based game (sounds like you might) then just have such a functіon and call it at the end of each turn. Otherwise, If a 'system | once' doesn't do it for you, you can track the 'previous' value of a variable and compare if 'previous does not equal current and current equals 4' and trigger on that.
The above assumes the triggering of when to do the calcs is your issue. If it's just the actual expressions, then you just do something like
system | set variable1 to variable2 + variable3.instanceVar - sin(23)
or whatever your expressіon might be. As sqiddster says though, if it's the algorithm itself, then you need to give more info (and I've wasted my time )
Or is it the if/else thing you're not sure of?