simaple.core

simaple.core.base

class simaple.core.base.ActionStat(*, cooltime_reduce: float = 0.0, summon_duration: float = 0.0, buff_duration: float = 0.0, cooltime_reduce_rate: float = 0.0)[source]
buff_duration: float
calculate_buff_duration(original_duration)[source]
calculate_cooldown(original_cooldown)[source]
cooltime_reduce: float
cooltime_reduce_rate: float
model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'buff_duration': FieldInfo(annotation=float, required=False, default=0.0), 'cooltime_reduce': FieldInfo(annotation=float, required=False, default=0.0), 'cooltime_reduce_rate': FieldInfo(annotation=float, required=False, default=0.0), 'summon_duration': FieldInfo(annotation=float, required=False, default=0.0)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

summon_duration: float
class simaple.core.base.AttackType(value)[source]

An enumeration.

attack_power = 'attack_power'
magic_attack = 'magic_attack'
class simaple.core.base.BaseStatType(value)[source]

An enumeration.

DEX = 'DEX'
INT = 'INT'
LUK = 'LUK'
STR = 'STR'
class simaple.core.base.ExtendedStat(*, stat: Stat = None, action_stat: ActionStat = None, level_stat: LevelStat = None)[source]
action_stat: ActionStat
compute_by_level(level) Stat[source]
level_stat: LevelStat
model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {'extra': 'forbid'}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'action_stat': FieldInfo(annotation=ActionStat, required=False, default_factory=ActionStat), 'level_stat': FieldInfo(annotation=LevelStat, required=False, default_factory=LevelStat), 'stat': FieldInfo(annotation=Stat, required=False, default_factory=Stat)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

stat: Stat
class simaple.core.base.LevelStat(*, STR: float = 0.0, LUK: float = 0.0, INT: float = 0.0, DEX: float = 0.0, attack_power: float = 0.0, magic_attack: float = 0.0)[source]
DEX: float
INT: float
LUK: float
STR: float
attack_power: float
get_stat(level: int) Stat[source]
magic_attack: float
model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'DEX': FieldInfo(annotation=float, required=False, default=0.0), 'INT': FieldInfo(annotation=float, required=False, default=0.0), 'LUK': FieldInfo(annotation=float, required=False, default=0.0), 'STR': FieldInfo(annotation=float, required=False, default=0.0), 'attack_power': FieldInfo(annotation=float, required=False, default=0.0), 'magic_attack': FieldInfo(annotation=float, required=False, default=0.0)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

class simaple.core.base.Stat(*, STR: float = 0.0, LUK: float = 0.0, INT: float = 0.0, DEX: float = 0.0, STR_multiplier: float = 0.0, LUK_multiplier: float = 0.0, INT_multiplier: float = 0.0, DEX_multiplier: float = 0.0, STR_static: float = 0.0, LUK_static: float = 0.0, INT_static: float = 0.0, DEX_static: float = 0.0, attack_power: float = 0.0, magic_attack: float = 0.0, attack_power_multiplier: float = 0.0, magic_attack_multiplier: float = 0.0, critical_rate: float = 0.0, critical_damage: float = 0.0, boss_damage_multiplier: float = 0.0, damage_multiplier: float = 0.0, final_damage_multiplier: float = 0.0, ignored_defence: float = 0.0, MHP: float = 0.0, MMP: float = 0.0, MHP_multiplier: float = 0.0, MMP_multiplier: float = 0.0, elemental_resistance: float = 0.0)[source]
DEX: float
DEX_multiplier: float
DEX_static: float
INT: float
INT_multiplier: float
INT_static: float
LUK: float
LUK_multiplier: float
LUK_static: float
MHP: float
MHP_multiplier: float
MMP: float
MMP_multiplier: float
STR: float
STR_multiplier: float
STR_static: float
classmethod all_stat(v) Stat[source]
classmethod all_stat_multiplier(v) Stat[source]
attack_power: float
attack_power_multiplier: float
boss_damage_multiplier: float
critical_damage: float
critical_rate: float
damage_multiplier: float
elemental_resistance: float
final_damage_multiplier: float
get(prop: StatProps)[source]
get_attack_coefficient(attack_type: AttackType) float[source]
get_base_stat_coefficient(base_stat_type: BaseStatType) float[source]
ignored_defence: float
magic_attack: float
magic_attack_multiplier: float
model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'DEX': FieldInfo(annotation=float, required=False, default=0.0), 'DEX_multiplier': FieldInfo(annotation=float, required=False, default=0.0), 'DEX_static': FieldInfo(annotation=float, required=False, default=0.0), 'INT': FieldInfo(annotation=float, required=False, default=0.0), 'INT_multiplier': FieldInfo(annotation=float, required=False, default=0.0), 'INT_static': FieldInfo(annotation=float, required=False, default=0.0), 'LUK': FieldInfo(annotation=float, required=False, default=0.0), 'LUK_multiplier': FieldInfo(annotation=float, required=False, default=0.0), 'LUK_static': FieldInfo(annotation=float, required=False, default=0.0), 'MHP': FieldInfo(annotation=float, required=False, default=0.0), 'MHP_multiplier': FieldInfo(annotation=float, required=False, default=0.0), 'MMP': FieldInfo(annotation=float, required=False, default=0.0), 'MMP_multiplier': FieldInfo(annotation=float, required=False, default=0.0), 'STR': FieldInfo(annotation=float, required=False, default=0.0), 'STR_multiplier': FieldInfo(annotation=float, required=False, default=0.0), 'STR_static': FieldInfo(annotation=float, required=False, default=0.0), 'attack_power': FieldInfo(annotation=float, required=False, default=0.0), 'attack_power_multiplier': FieldInfo(annotation=float, required=False, default=0.0), 'boss_damage_multiplier': FieldInfo(annotation=float, required=False, default=0.0), 'critical_damage': FieldInfo(annotation=float, required=False, default=0.0), 'critical_rate': FieldInfo(annotation=float, required=False, default=0.0), 'damage_multiplier': FieldInfo(annotation=float, required=False, default=0.0), 'elemental_resistance': FieldInfo(annotation=float, required=False, default=0.0), 'final_damage_multiplier': FieldInfo(annotation=float, required=False, default=0.0), 'ignored_defence': FieldInfo(annotation=float, required=False, default=0.0), 'magic_attack': FieldInfo(annotation=float, required=False, default=0.0), 'magic_attack_multiplier': FieldInfo(annotation=float, required=False, default=0.0)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

short_dict() dict[str, float][source]
show() str[source]
stack(stack: int) Stat[source]

StackableBuffSkill을 위한 메소드로, armor_ignore 및 final_damage_multiplier를 단순 곱셈한 값을 반환합니다.

classmethod sum(stats: list[simaple.core.base.Stat]) Stat[source]
class simaple.core.base.StatProps(value)[source]

An enumeration.

DEX = 'DEX'
DEX_multiplier = 'DEX_multiplier'
DEX_static = 'DEX_static'
INT = 'INT'
INT_multiplier = 'INT_multiplier'
INT_static = 'INT_static'
LUK = 'LUK'
LUK_multiplier = 'LUK_multiplier'
LUK_static = 'LUK_static'
MHP = 'MHP'
MHP_multiplier = 'MHP_multiplier'
MMP = 'MMP'
MMP_multiplier = 'MMP_multiplier'
STR = 'STR'
STR_multiplier = 'STR_multiplier'
STR_static = 'STR_static'
attack_power = 'attack_power'
attack_power_multiplier = 'attack_power_multiplier'
boss_damage_multiplier = 'boss_damage_multiplier'
critical_damage = 'critical_damage'
critical_rate = 'critical_rate'
damage_multiplier = 'damage_multiplier'
final_damage_multiplier = 'final_damage_multiplier'
ignored_defence = 'ignored_defence'
magic_attack = 'magic_attack'
magic_attack_multiplier = 'magic_attack_multiplier'
classmethod multiplier(base_type: BaseStatType)[source]
classmethod static(base_type: BaseStatType)[source]
class simaple.core.job_category.JobCategory(value)[source]

An enumeration.

archer = 2
magician = 1
pirate = 4
thief = 3
warrior = 0
class simaple.core.damage.DEXBasedDamageLogic(*, attack_range_constant: float, mastery: float)[source]
get_attack_type() AttackType[source]
get_base_stat_factor(stat: Stat) float[source]
get_best_level_based_stat(level: int) Stat[source]
get_major_stat(stat: Stat) float[source]
get_symbol_stat(value: int) Stat[source]

value may given as hundreds; to represent arcane and authentic both

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'attack_range_constant': FieldInfo(annotation=float, required=True), 'mastery': FieldInfo(annotation=float, required=True)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

class simaple.core.damage.DamageLogic(*, attack_range_constant: float, mastery: float)[source]
attack_range_constant: float
get_armor_factor(stat: Stat, armor: int) float[source]
abstract get_attack_type() AttackType[source]
get_attack_type_factor(stat: Stat) float[source]
abstract get_base_stat_factor(stat: Stat) float[source]
abstract get_best_level_based_stat(level: int) Stat[source]
get_critical_factor(stat: Stat) float[source]
get_damage_factor(stat: Stat, armor: int = 300) float[source]

Averaged Multiplier for skill damage.

get_dot_factor(stat: Stat, armor: int = 300) float[source]
get_elemental_disadvantage(stat: Stat) float[source]
abstract get_major_stat(stat: Stat) float[source]
get_maximum_attack_range(stat: Stat) float[source]

Maximum stat power in character status window.

get_minimum_attack_range(stat: Stat) float[source]
abstract get_symbol_stat(value: int) Stat[source]

value may given as hundreds; to represent arcane and authentic both

mastery: float
model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'attack_range_constant': FieldInfo(annotation=float, required=True), 'mastery': FieldInfo(annotation=float, required=True)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

class simaple.core.damage.INTBasedDamageLogic(*, attack_range_constant: float, mastery: float)[source]
get_attack_type() AttackType[source]
get_base_stat_factor(stat: Stat) float[source]
get_best_level_based_stat(level: int) Stat[source]
get_major_stat(stat: Stat) float[source]
get_symbol_stat(value: int) Stat[source]

value may given as hundreds; to represent arcane and authentic both

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'attack_range_constant': FieldInfo(annotation=float, required=True), 'mastery': FieldInfo(annotation=float, required=True)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

class simaple.core.damage.LUKBasedDamageLogic(*, attack_range_constant: float, mastery: float)[source]
get_attack_type() AttackType[source]
get_base_stat_factor(stat: Stat) float[source]
get_best_level_based_stat(level: int) Stat[source]
get_major_stat(stat: Stat) float[source]
get_symbol_stat(value: int) Stat[source]

value may given as hundreds; to represent arcane and authentic both

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'attack_range_constant': FieldInfo(annotation=float, required=True), 'mastery': FieldInfo(annotation=float, required=True)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

class simaple.core.damage.LUKBasedDualSubDamageLogic(*, attack_range_constant: float, mastery: float)[source]
get_attack_type() AttackType[source]
get_base_stat_factor(stat: Stat) float[source]
get_best_level_based_stat(level: int) Stat[source]
get_major_stat(stat: Stat) float[source]
get_symbol_stat(value: int) Stat[source]

value may given as hundreds; to represent arcane and authentic both

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'attack_range_constant': FieldInfo(annotation=float, required=True), 'mastery': FieldInfo(annotation=float, required=True)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

class simaple.core.damage.STRBasedDamageLogic(*, attack_range_constant: float, mastery: float)[source]
get_attack_type() AttackType[source]
get_base_stat_factor(stat: Stat) float[source]
get_best_level_based_stat(level: int) Stat[source]
get_major_stat(stat: Stat) float[source]
get_symbol_stat(value: int) Stat[source]

value may given as hundreds; to represent arcane and authentic both

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[dict[str, FieldInfo]] = {'attack_range_constant': FieldInfo(annotation=float, required=True), 'mastery': FieldInfo(annotation=float, required=True)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

class simaple.core.jobtype.JobType(value)[source]

An enumeration.

adele = 'adele'
angelicbuster = 'angelicbuster'
aran = 'aran'
archmagefb = 'archmagefb'
archmagetc = 'archmagetc'
ark = 'ark'
battlemage = 'battlemage'
bishop = 'bishop'
blaster = 'blaster'
bowmaster = 'bowmaster'
buccaneer = 'buccaneer'
cadena = 'cadena'
cannoneer = 'cannoneer'
corsair = 'corsair'
darkknight = 'darkknight'
demonavenger = 'demonavenger'
demonslayer = 'demonslayer'
dualblade = 'dualblade'
eunwol = 'eunwol'
evan = 'evan'
flamewizard = 'flamewizard'
hero = 'hero'
hoyoung = 'hoyoung'
illium = 'illium'
kain = 'kain'
kaiser = 'kaiser'
khali = 'khali'
kinesis = 'kinesis'
lara = 'lara'
luminous = 'luminous'
mechanic = 'mechanic'
mercedes = 'mercedes'
mihile = 'mihile'
nightlord = 'nightlord'
nightwalker = 'nightwalker'
paladin = 'paladin'
pathfinder = 'pathfinder'
phantom = 'phantom'
shadower = 'shadower'
sniper = 'sniper'
soulmaster = 'soulmaster'
striker = 'striker'
virtual_maplestory_m = 'virtual_maplestory_m'
wildhunter = 'wildhunter'
windbreaker = 'windbreaker'
zenon = 'zenon'
zero = 'zero'
simaple.core.jobtype.get_job_category(jobtype: JobType) JobCategory[source]