A server-side lua implementation of Natural Character Growth And Decay - MW by Greywander for TES3MP.
Add a "known issues" section for the level sync thing
Proper local variable definition
This isn't actually needed



You can also use your local clone with git send-email.


A server-side lua implementation of Natural Character Growth And Decay - MW by Greywander, for TES3MP.


  • Requires DataManager!
  • Existing, non-NCGD players are not supported!
  • Your attributes grow automatically as your skills increase.
  • Leveling happens automatically as attributes increase.
  • Attribute modifier numbers and skill attributes (which skills increase which attributes) are fully configurable.
  • Your attributes, level, and skills will also decay over time. (Optional)
  • On death, the decay rate is accelerated. (Optional, with optional effect stacking)


  1. Place this repo into your CoreScripts/scripts/custom/ directory.

  2. Add the following to CoreScripts/scripts/customScripts.lua:

     -- DataManager needs to before NCGD, like this
     DataManager = require("custom/DataManager/main")
  3. Ensure that DataManager loads before this mod as seen above.

  4. Optionally configure NCGD by editing the CoreScripts/data/custom/__config_ncgdTES3MP.json file (see below).

#Differences from MWscript NCGD

  • No mastery effects; skills can raise to whatever the server max values are without them.
  • Scripts are not ran every frame or tick, but when OnPlayerSkill fires (among other events used).
  • There are no in-game player dialogue GUIs, and there is currently no way to migrate a non-NCGD player.
    • There is presently no way to properly "convert" existing players to NCGD since I can't know what their starting attributes are.
  • Decay rates are gotten from an individual player's in-game hours spent playing, not the total world time that's passed.
  • This version is highly configurable; almost every value that matters is tweakable (see below).
  • Optional decay acceleration when a player dies, that is optionally stackable if they keep dying (see below).
  • In-game chat commands for recalculating things on the fly. Optionally for admins only (see below).
  • No client plugin is needed.

#Known Issues

  • If you level up repeatedly, in the same cell, without leaving, it's possible to re-level up each time a skill raises. This happens because of a sync issue with the server; the correct level is always eventually calculated, and you can generally "fix" the problem by leaving the cell (e.g. if indoors, go outdoors, etc.) or repeatedly changing cells.


Several commands are offered for recalculating data on the fly:

  • /ncgd health: Recalculates health (shortcut: h)
  • /ncgd recalcattrs: Recalculates all attributes from skill values (shortcut: a)
  • /ncgd reloadskilldata: Reloads NCGD's internal skill numbers from player data (shortcut: s)
  • /ncgd all: All of the above, in one

All commands have a configurable cooldown (see below).


  • Attribute modifiers

Each attribute modifier is fully configurable. Look for the modifiers key in the config file and edit to suit your needs. Default: what's in mwscript NCGD

  • Skill Attributes

An array of strings. Indicates which attributes are affected by a particular skill's increase. Default: what's in mwscript NCGD

  • attributeCapMsg

String. Message that's displayed to players when they reach the server's attribute cap. The string is passed to string.format() with an attribute name as an argument. Default: Your %s is being limited by otherworldly forces...

  • cmdCooldown

Integer. The number of seconds between commands. Default: 30

  • deathDecay.enabled

Boolean. Enables a period of accelerated decay after death. Default: true

  • deathDecay.durationHrs

Integer. The number of in-game hours accelerated decay caused by death will last. Default: 1

  • deathDecay.modifier

Integer. The default decay rate is multipled by this value after death. Default: 2

  • deathDecay.stack

Boolean. Controls whether decay acceleration increases will be stacked if multiple deaths occur before the duration expires. Default: false

  • decayMinLvl

Integer. The minimum level a skill can decay to. Default: 15

  • decayRate

String. Set the rate of skill decay: fast, standard, slow or none. Default: fast

  • decayRates.*

Integer. Control the weight of each decay level. Default: 0, 1, 2, and 3 for none, slow, standard, and fast, respectively.

  • forceLoad*

Boolean. Force load the related event hook for this mod in the event another one has disabled custom hooks. Default: false

  • growthRate

String. Set the rate of attribute growth: fast, standard, or slow. Default: slow

  • growthRates.*

Integers. Control the weight of each growth level. Default: 1, 2, and 3 for slow, standard, and fast, respectively.

  • healthAttributes

Array of strings. Choose which attributes affect health growth. Default: Endurance, Strength, Willpower

  • healthMod

Boolean. Set whether or not health modifications should be applied. Default: true

  • levelCap

Integer. Set whether or not a level cap should be applied, 0 to disable. Default: 0

  • levelCapMsg

String. Message that's displayed to players when they reach the level cap. Default: Your level is being held back by otherworldly forces...

  • rankErr

String. Message that's displayed to players when they try to use a command but lack the required rank. Default: This command requires admin privileges!

  • reqRank

Integer. The player rank that's required to use commands. Default: 2