changed to linear growth from to a configured level, added an upper level to start growing by a configurable amount, added a max growth amount, updated read me with more info

This commit is contained in:
WebLuke
2025-09-09 15:55:59 -06:00
parent 64c2c9ecff
commit eab4fe8451
3 changed files with 133 additions and 43 deletions

View File

@@ -1,15 +1,38 @@
# ![logo](https://raw.githubusercontent.com/azerothcore/azerothcore.github.io/master/images/logo-github.png) AzerothCore # Grow Up
## mod-grownup ## mod-grownup
### This is a module for [AzerothCore](http://www.azerothcore.org)
- Latest build status with azerothcore:
#### Features: This module adds a visual sense of growth and progression to characters, making low-level adventurers look like small “young” versions of their races who literally grow up into heroes over the course of their journey. At even higher levels, veteran heroes can loom larger than their peers (but within a safe cap).
- Changes player size on initial creation, then changes their size as they level up through the first 15 levels to full size. Created for Azerothcore
### Features:
First Login / Character Creation:
- New characters begin their adventure smaller than normal (configurable, default 50% size).
Starter Growth (Level 1 → StarterMaxLevel, default 15):
- As the character levels up, their size grows linearly from the configured minimum (e.g. 60%) up to 100% (normal size) by the chosen cap level.
Normal Zone (Between StarterMaxLevel and HighLevelStart):
- Once characters reach normal size, they remain steady at 100% scale until they reach the next milestone.
High-Level Growth (above HighLevelStart, default 65):
- Beyond this level, players begin to grow again at a small, configurable percentage increase per level (for example, +0.5% per level).
Maximum Cap:
- To prevent absurd scaling or model breaking, the growth is limited by a maximum scale value (configurable, default 120%).
Announcements:
- Optional system messages on login, module enabled confirmation, and perlevel “you grew” notices.
# ![screenshot](https://raw.githubusercontent.com/webluke/mod-grownup/refs/heads/main/grownup.png) # ![screenshot](https://raw.githubusercontent.com/webluke/mod-grownup/refs/heads/main/grownup.png)
### This module currently requires: ### This module currently requires:
- AzerothCore vX.X.X+ - AzerothCore
### How to install ### How to install

View File

@@ -5,36 +5,74 @@
######################################## ########################################
# #
# GrownUp.Enable # GrownUp.Enable
# Description: Enable model that shrinks players on character creation and slowly increases them to normal size by level 15. # Description: Enable module that shrinks players on character creation
# and slowly increases them to normal size by StarterMax level.
# Default: 0 - Disabled # Default: 0 - Disabled
# 1 - Enabled # 1 - Enabled
# #
GrownUp.Enable = 1 GrownUp.Enable = 1
# #
# GrownUp.Enable # GrownUp.LoginCheck
# Description: Check if player size is correct on login. # Description: Ensure player size is correct on login based on level.
# Default: 0 - Disabled # Default: 0 - Disabled
# 1 - Enabled # 1 - Enabled
# #
GrownUp.LoginCheck = 1 GrownUp.LoginCheck = 1
# #
# GrownUp.Announce # GrownUp.Announce
# Description: Announce mod enabled on login. # Description: Announce module enabled on login.
# Default: 0 - Disabled # Default: 0 - Disabled
# 1 - Enabled # 1 - Enabled
# #
GrownUp.Announce = 1 GrownUp.Announce = 1
# #
# GrownUp.GrownAnnounce # GrownUp.GrownAnnounce
# Description: Announce each level. # Description: Announce size change each time a player levels up.
# Default: 0 - Disabled # Default: 0 - Disabled
# 1 - Enabled # 1 - Enabled
# #
GrownUp.GrownAnnounce = 0
GrownUp.GrownAnnounce = 0 #
# GrownUp.StarterMinScale
# Description: The minimum scale players start with at level 1.
# Example: 0.6 = 60% size
# Default: 0.6
#
GrownUp.StarterMinScale = 0.6
#
# GrownUp.StarterMaxLevel
# Description: The level where players reach 100% scale.
# Growth from StarterMinScale → 1.0f is linear across 1 → StarterMaxLevel.
# Default: 15
#
GrownUp.StarterMaxLevel = 15
#
# GrownUp.HighLevelStart
# Description: The level where above-cap growth begins.
# At this level grows again afterward by HighLevelScalePercent.
# Default: 65
#
GrownUp.HighLevelStart = 65
#
# GrownUp.HighLevelScalePercent
# Description: Percentage increase applied per level above HighLevelStart.
# Example: 0.5 = +05% per level.
# Default: 0.5
#
GrownUp.HighLevelScalePercent = 1.0
#
# GrownUp.MaxScale
# Description: Maximum scale cap. Players cannot exceed this size no
# matter their level or scaling calculation.
# Example: 1.2 = 120%
# Default: 1.2
#
GrownUp.MaxScale = 1.2

View File

@@ -22,55 +22,84 @@ public:
void OnPlayerLogin(Player* player) override void OnPlayerLogin(Player* player) override
{ {
if (sConfigMgr->GetOption<bool>("GrownUp.Announce", true)) if (sConfigMgr->GetOption<bool>("GrownUp.Announce", true))
ChatHandler(player->GetSession()).SendSysMessage("This server is running the |cff4CFF00Grown Up |rmodule.");
if (sConfigMgr->GetOption<bool>("GrownUp.LoginCheck", true))
{ {
uint8 level = player->GetLevel(); ChatHandler(player->GetSession())
float newScale = 1.0f; .SendSysMessage("This server is running the |cff4CFF00Grown Up|r module.");
if (level < 5)
newScale = 0.5f;
else if (level < 10)
newScale = 0.65f;
else if (level < 15)
newScale = 0.85f;
else
newScale = 1.0f;
player->SetObjectScale(newScale);
} }
if (sConfigMgr->GetOption<bool>("GrownUp.LoginCheck", true))
ApplyScale(player, false); // ensure consistency
} }
void OnPlayerFirstLogin(Player* player) override void OnPlayerFirstLogin(Player* player) override
{ {
player->SetObjectScale(0.5f); // On very first login, set to the configured StarterMinScale
ChatHandler(player->GetSession()).SendSysMessage("Your adventure begins young one!"); float starterMin =
sConfigMgr->GetOption<float>("GrownUp.StarterMinScale", 0.5f);
player->SetObjectScale(starterMin);
ChatHandler(player->GetSession())
.PSendSysMessage("Your adventure begins small!");
} }
void OnPlayerLevelChanged(Player* player, uint8 /*oldLevel*/) override void OnPlayerLevelChanged(Player* player, uint8 /*oldLevel*/) override
{ {
uint8 newLevel = player->GetLevel(); ApplyScale(player, true);
float newScale = 1.0f; // default full size }
if (newLevel < 5) private:
newScale = 0.5f; void ApplyScale(Player* player, bool notify)
else if (newLevel < 10) {
newScale = 0.65f; uint32 starterMax =
else if (newLevel < 15) sConfigMgr->GetOption<uint32>("GrownUp.StarterMaxLevel", 15);
newScale = 0.85f; uint32 highStart =
sConfigMgr->GetOption<uint32>("GrownUp.HighLevelStart", 65);
float highPercent =
sConfigMgr->GetOption<float>("GrownUp.HighLevelScalePercent", 0.5f);
float maxScale =
sConfigMgr->GetOption<float>("GrownUp.MaxScale", 1.2f);
float starterMin =
sConfigMgr->GetOption<float>("GrownUp.StarterMinScale", 0.6f);
uint32 level = player->GetLevel();
float newScale = 1.0f;
if (level <= starterMax)
{
// Linear growth from StarterMin → 100%
if (starterMax > 1)
newScale = starterMin +
((level - 1) / float(starterMax - 1)) *
(1.0f - starterMin);
else
newScale = 1.0f;
}
else if (level >= highStart)
{
// Beyond highStart: +X% per level
uint32 aboveLevels = level - highStart;
newScale = 1.0f + (aboveLevels * (highPercent / 100.0f));
}
else else
{
// Between starterMax and highStart → stagnant at 100%
newScale = 1.0f; newScale = 1.0f;
}
// Cap scale
newScale = std::min(newScale, maxScale);
player->SetObjectScale(newScale); player->SetObjectScale(newScale);
if (sConfigMgr->GetOption<bool>("GrownUp.GrownAnnounce", true))
if (notify && sConfigMgr->GetOption<bool>("GrownUp.GrownAnnounce", true))
{ {
ChatHandler(player->GetSession()) ChatHandler(player->GetSession())
.PSendSysMessage("Your adventure has grown!"); // Message when leveling up may try and add the % back later. .PSendSysMessage("You have grown adventure.");
} }
} }
}; };
// Add all scripts in one
void AddGrowUpScripts() void AddGrowUpScripts()
{ {
new GrowUp(); new GrowUp();