o
    oj                     @   s   d dl Z ddlmZmZmZmZmZmZ dedefddZ	de
de
fd	d
Zde
dededB fddZde
de
fddZde
defddZdedefddZdS )    N   )
ATTRIBUTESSKILLSXP_THRESHOLDSability_modifier
class_inforace_bonusesxpreturnc                 C   s*   d}t tddD ]
\}}| |kr|}q|S )u%   由经验值反推等级（1-20）。r   )start)	enumerater   )r	   leveli	threshold r   0/home/dore/onebot/Bot_Ero/core/trpg/character.pylevel_from_xp   s   r   	char_datac                 C   s0  t | }| dd}t|}i }tD ]}t|}t| |d}|||d ||< || ||< q||d< t|d }t|d }	t| dd}
|
d	d}| d
dv rZ|| nt| d
 |d
< | ddv rmd|	 nt| d |d< t| dd}|dkrt|nt| dd}||d< d|d d  |d< t	| dg pg }i }tD ]}t|t| }||v r||d 7 }|||< q||d< t	| dg pg }i }t
D ]}t
| }t|t| }||v r|d7 }|||< q||d< t|d }d|v rdnd}d| | |d< |	|d< | d| |d< |S )u|   根据基础属性+种族加值计算最终属性、HP、AC、技能加值。

    返回新增计算字段的副本。
    race    r   scores	con_score	dex_score
class_namehp_diehp)Nr   ac
   r	   r   r         
prof_bonussaving_profs	save_modsproficient_skills
skill_mods	wis_scoreu   察觉passive_perception
initiativedhit_dice)dictgetr   r   	_attr_keyintr   r   r   setr   )r   outr   bonusesr   attrkeybasecon_moddex_modclsr   r	   r   r"   r#   mod
proficientr%   skillwis_modperception_bonusr   r   r   finalize   sV   && 

r=   namec                 C   sB   | sdS t | }|tv rt|t| S |tv r|d |S dS )u=   按中文属性名/技能名取加值（供骰子引用）。Nr%   )r=   r   r   r-   r   r,   )r   r>   datar   r   r   get_attr_valueQ   s   r@   c                 C   s<   t | }i }tD ]}t|t| ||< q||d  |S )u^   返回 {属性名/技能名: 加值} 映射（一次 finalize，供骰子表达式替换）。r%   )r=   r   r   r-   update)r   r?   r0   r2   r   r   r   resolve_expression_values]   s   rB   c                 C   sx  t | }t|dd}g }tD ]"}t|}t|| }|dkr%d| nt|}|| |  qd|}d|d  d|d	d
 d|dd d|dd d|d  d|d  d|dd d| g}	|dd}
|dd}|dd}|dd}|	d|
 d| d| d|  |d g }|r|	d!d"|  |d#d}|r|	d$|  d%|	S )&u-   格式化角色卡文本（精简视图）。r   r   r   +z  u   【	char_nameu   】 Lv.r   r    r   ?zHP: r   z    AC: r   u       HP骰: dr   r   u   属性: r!   r(   r'   r   r*   1d8u   熟练加值: +u       先攻: u       被动感知: u       生命骰: r$   u   熟练技能: z, notesu   备注: 
)	r=   r   r,   r   r-   r   strappendjoin)r   r?   r7   modsr2   r3   r8   mod_str	attr_linelinesr!   initpassiver*   r9   rH   r   r   r   format_sheetg   s2   
6$"
rS   r2   c                 C   s   ddddddd}| | dS )	N	str_scorer   r   	int_scorer&   	cha_score)u   力量u   敏捷u   体质u   智力u   感知u   魅力r   )r,   )r2   mappingr   r   r   r-      s   r-   )jsonrulesr   r   r   r   r   r   r.   r   r+   r=   rJ   r@   rB   rS   r-   r   r   r   r   <module>   s     
	;
$