I’m using a Utility System for the AI in my game, it’s an Alternative to Behavior Trees. This book describes a system for them that is easy to implement in any language. It is very simple though.
Basically:
Your AI has a list of Acitons, the Action with the highest value is performed. That’s it in a nutshell.
Each Action has a list of Axis, these are what calculate the value for that particular Action. These Axis generally are what look at game state or an input as their Y value for input into a function that will then calculate the X.
If everything is kept normalized 0 to 1 you can multiply all the axis together to add up and give the Action the value. You can add weighting to the Actions to push a particular one, such as if it’s a scripted Action you could have 5 as a multiplier to a particular Action, scripted Actions would then always be selected over non scripted ones as long as it’s value was not 0.