verdie-g / crpg

Multiplayer mod for Mount & Blade II: Bannerlord
https://c-rpg.eu
GNU General Public License v3.0
31 stars 25 forks source link

Make character body dependent on strength #615

Open verdie-g opened 1 year ago

verdie-g commented 1 year ago

MissionNetworkComponent.HandleServerEventCreateAgent completely ignores the given body properties to chose MissionPeer.Peer.BodyProperties.

verdie-g commented 1 year ago
private BodyProperties CreateBodyPropertiesForCharacter(NetworkCommunicator networkPeer, CrpgCharacter crpgCharacter)
    {
        // The age should be at least 16 because the game doesn't accept maturity < teenager.
        // 1.0.2 MBBodyProperties.GetMaturityType => [0-4] = Toddler, [5-9] = Child, [10-15] = Teen, [16-20] = Teenager, [21;[ = Adult

        var playerBodyProperties = networkPeer.PlayerConnectionInfo.GetParameter<PlayerData>("PlayerData").BodyProperties;

        float age = MBMath.Lerp(valueFrom: 16, valueTo: 50, amount: crpgCharacter.Level / 40f);
        float weight = Math.Min(MBMath.Lerp(valueFrom: 0, valueTo: 1, amount: (/*crpgCharacter.Characteristics.Attributes.Strength*/40 - 3) / 35f), 1f);
        float build = weight;
        Debug.Print($"Age={age}, Weight={weight}, Build={build}");
        DynamicBodyProperties dynamicBodyProperties = new(age, weight, build);

        return new BodyProperties(dynamicBodyProperties, playerBodyProperties.StaticProperties);
    }
verdie-g commented 1 year ago

Depends on https://forums.taleworlds.com/index.php?threads/mission-spawnagent-should-not-modify-the-given-agentbuilddata.456810.