Even though most methods in AgentStatCalculateModel have access to the Agent, some don't, for example:
This is very annoying when player information are usually stored in a PeerComponent accessible through the Agent. There is the BasicCharacterObject available that sounds like it could help but it's actually very misleading as it's a copy of what you find in your characters.xml and doesn't depend on the player. For example BasicCharacterObject.IsMounted can return true even though the agent doesn't have an horse.
C#:
int GetEffectiveSkill(
BasicCharacterObject agentCharacter,
IAgentOriginBase agentOrigin,
Formation agentFormation,
SkillObject skill);
float GetWeaponDamageMultiplier(
BasicCharacterObject character,
IAgentOriginBase agentOrigin,
Formation agentFormation,
WeaponComponentData weaponComponent);
This is very annoying when player information are usually stored in a PeerComponent accessible through the Agent. There is the BasicCharacterObject available that sounds like it could help but it's actually very misleading as it's a copy of what you find in your characters.xml and doesn't depend on the player. For example BasicCharacterObject.IsMounted can return true even though the agent doesn't have an horse.