Attributes, proficiency and levels

A level is a band, not a currency

Proficiency (熟练度) is the number that grows. The level (等级) is only which band that number has reached, and the bands are fixed for every skill in the game:

100   250   450   700   1000

Nothing is spent, nothing is chosen, and there is no level-up to perform: cross a line and the level follows the same frame. 烹饪 at 205 is 等级1 because 205 is past 100 and not past 250; at 251 it is 等级2. Tools.LVL_GRADE holds those five numbers, Tools.GetSkillLevel does the comparison.

Consequence worth stating: "raise my cooking level" and "add cooking proficiency" are the same action. There is no separate pool to spend and nothing is wasted by overshooting a band.

Not every attribute is measured the same way

The denominator depends on the attribute, and the game asks per attribute rather than assuming:

Anything that reproduces the ladder by hand rather than asking will be wrong for exactly these cases.

What lives on which tab

The attribute page's five tabs come from one table, AttriManager.typeList:

Tab Attributes
品性 福气 容貌 口才 商道 胆识 修养 坚韧 豪爽
技艺 炼器 炼丹 巧手 缝纫 酿酒 烹饪
雅趣 琴艺 棋艺 书法 画道 酒量 垂钓
武学 刀法 剑术 搏击 枪棍 兵道 诡辞
学问 道学 佛学 儒学 墨学 魔学 农学

The table holds six lists and the first two are identical, so the page shows five. 资质 (元气, 根骨, 力道, 内力, 体魄, 精神, 身法, 专注) are not in it — they belong to the status page instead. Neither are 暗器, 奇术, 医道, 毒技, 采药, 变矿, 种植, 打猎, which exist as attributes with no tab of their own.

The pools that refill

Four attributes are a current value with a ceiling: 气血 (FieldHp/HpMax), 真气 (FieldMp/MpMax), 轻功 (FieldQingGong/QingGongMax) and 精力 (FieldJingLi/JingliMax).

精力 is the one that gates you. Crafting, gathering and the life skills all spend it, and a forge or a still refuses when it is short. The game shows it on the character page and inside the panel that is about to charge you for it — never while you are walking there. A consumable can raise its ceiling, but the ceiling is capped at 300: items that raise 最大精力 stop doing anything at that point (the clamp is in ItemStorage.UseItemAttri, attribute 84).