Vaal Researcher
| Spectre | Y |
|---|---|
| Area | หอสมุดคามาซา |
| Tags | allows_additional_projectiles, allows_inc_aoe, นักเวท, has_staff, has_two_handed_melee, human, humanoid, lightning_affinity, melee, not_dex, not_str, physical_affinity, plate_armour, puncturing_weapon, ranged, red_blood, Unarmed_onhit_audio, very_slow_movement |
| Packs |
พลังชีวิต
110%
Energy Shield From Life
20%
ค่าต้านทาน
Damage
110%
ความแม่นยำ
100%
ปะทะคริติคอล Chance
5%
Attack Distance
3 ~ 17
1.17 Second
Damage Spread
±20%
ค่าประสบการณ์
110%
Model Size
100%
Type
VaalArchivistLiving
Metadata
VaalArchivistLiving
The following values do not include map affix bonuses, monster buff bonuses, altar bonuses, atlas skill bonuses.
เลเวล
43
พลังชีวิต
1,736
512
347
Damage
111
ความเสียหายเวท
111
ความแม่นยำ
894
1.17
ค่าประสบการณ์
5,807
Minion Life
3,103
Minion Energy Shield
621
Minion Damage
269
Minion Armour
512
The following values are skill base values and do not include map affix bonuses, monster buff bonuses, altar bonuses, atlas skill bonuses, monster base damage(ex: The Maven 150% multiplier), monster rarity bonuses (ex: unique 70% more, unique attack 33% less).
MeleeAtAnimationSpeed
Attack, RangedAttack, MirageArcherCanUse, Projectile, MeleeSingleTarget, Melee, ProjectilesFromUser, AttackInPlace
โจมตีพื้นฐาน
Base Damage: 89—133
โอกาสปะทะคริติคอล: 5%
action attack or cast time uses animation length [1]
projectile uses contact position [1]
skill can fire wand projectiles [1]
use scaled contact offset [1]
VaalArchivistSpark
Spell, Projectile, ProjectilesFromUser, Damage, Duration, Trappable, Totemable, Mineable, Multicastable, Triggerable, Lightning, Unleashable, Invokable, UsableWhileMoving
ประกายสายฟ้า
โอกาสปะทะคริติคอล: 5%
ปล่อยโพรเจกไทล์ประกายสายฟ้าออกมาเป็นฝอย มันจะเคลื่อนไปตามพื้นอย่างไร้กฎเกณฑ์จนกว่าจะปะทะศัตรูหรือหมดเวลา สกิลนี้สามารถกลืนกิน ชุบพลังน้ำแข็ง 1 ลูกหากเป็นไปได้เพื่อปล่อยสายฟ้าออกมาจำนวนมากกระจายรอบวงได้
สกิลที่เสริม ยิงโพรเจกไทล์เป็นวงกลม
ยิงโพรเจกไทล์ เพิ่มเติม 7 ลูก
โพรเจกไทล์ มีระยะเวลา 2 วินาที
base is projectile [1]
GTVaalArchivistFlameWall
Spell, Triggerable, AttackInPlace
action attack or cast time uses animation length [1]
SOArchivistFlameWall
Triggerable, AttackInPlace
GTVaalArchivistFlameWall2
Spell, Triggerable, AttackInPlace
action attack or cast time uses animation length [1]
SOArchivistFlameRune
Triggerable, AttackInPlace
คูลดาวน์: 5 {วิ}
spell maximum action distance +% [-40]
GSVaalArchivistLightningBlast
GSVaalArchivistFlamewall
Triggerable, Spell, Damage, AttackInPlace
is area damage [1]
SOArchivistLightningRune
Triggerable, AttackInPlace
คูลดาวน์: 4 {วิ}
spell maximum action distance +% [-40]
EDSVaalArchivistColdRune
Triggerable, Spell, Damage, AttackInPlace
โอกาสปะทะคริติคอล: 5%
คูลดาวน์: 5 {วิ}
is area damage [1]
spell maximum action distance +% [-40]
SOArchivistMonkeyRune
Triggerable, AttackInPlace
คูลดาวน์: 6 {วิ}
spell maximum action distance +% [-40]
SOArchivistSnakeRune
Triggerable, AttackInPlace
คูลดาวน์: 6 {วิ}
spell maximum action distance +% [-40]
SSMVaalArchivistJaguar
Spell, Multicastable, Triggerable, AttackInPlace
alternate minion [1026]
monster no drops or experience [1]
number of monsters to summon [1]
summon specific monsters radius +% [-99]
summoned monsters are minions [1]
GTVaalArchivistSummonJaguar
Spell, Triggerable, AttackInPlace
คูลดาวน์: 6 {วิ}
action attack or cast time uses animation length [1]
spell maximum action distance +% [-40]
MPSVaalArchivistFireProj
Spell, Projectile, ProjectilesFromUser, Triggerable, Damage, AttackInPlace
โอกาสปะทะคริติคอล: 5%
base is projectile [1]
maintain projectile direction when using contact position [1]
monster projectile variation [1032]
projectile uses contact position [1]
spell maximum action distance +% [-30]
use scaled contact offset [1]
MPSVaalArchivistLightningProj
Spell, Projectile, ProjectilesFromUser, Triggerable, Damage, AttackInPlace
โอกาสปะทะคริติคอล: 5%
base is projectile [1]
maintain projectile direction when using contact position [1]
monster projectile variation [1034]
projectile uses contact position [1]
spell maximum action distance +% [-30]
use scaled contact offset [1]
MPSVaalArchivistColdProj
Spell, Projectile, ProjectilesFromUser, Triggerable, Damage, AttackInPlace
โอกาสปะทะคริติคอล: 5%
base is projectile [1]
maintain projectile direction when using contact position [1]
monster projectile variation [1033]
projectile uses contact position [1]
spell maximum action distance +% [-30]
use scaled contact offset [1]
MPSVaalArchivistBloodProj
Spell, Projectile, ProjectilesFromUser, Triggerable, Damage, AttackInPlace
โอกาสปะทะคริติคอล: 5%
base is projectile [1]
maintain projectile direction when using contact position [1]
monster projectile variation [1035]
projectile uses contact position [1]
spell maximum action distance +% [-30]
use scaled contact offset [1]
DoLiterallyNothing
???
Object Type
version 2
extends "Metadata/Monsters/Monster"
Actor
{
basic_action = "MoveForced"
basic_action = "ChangeToStance1"
basic_action = "ChangeToStance2"
}Object Type Codes
version 2 extends "Metadata/Monsters/Monster"
-- src\Data\Spectres.lua
minions["Metadata/Monsters/VaalMonsters/Living/VaalArchivistLiving"] = {
name = "Vaal Researcher",
life = 1.1,
energyShield = 0.2,
fireResist = 0,
coldResist = 0,
lightningResist = 0,
chaosResist = 0,
damage = 1.1,
damageSpread = 0.2,
attackTime = 1.17,
attackRange = 17,
accuracy = 1,
skillList = {
"MeleeAtAnimationSpeed",
"SSMVaalArchivistJaguar",
"GSVaalArchivistLightningBlast",
"GSVaalArchivistFlamewall",
"SOArchivistFlameWall",
"SOArchivistFlameRune",
"SOArchivistLightningRune",
"SOArchivistMonkeyRune",
"SOArchivistSnakeRune",
"GTVaalArchivistFlameWall",
"GTVaalArchivistFlameWall2",
"GTVaalArchivistSummonJaguar",
"EDSVaalArchivistColdRune",
"DoLiterallyNothing",
"VaalArchivistSpark",
"MPSVaalArchivistFireProj",
"MPSVaalArchivistColdProj",
"MPSVaalArchivistLightningProj",
"MPSVaalArchivistBloodProj",
},
modList = {
},
}
-- src\Data\Skills\spectre.lua
skills["MeleeAtAnimationSpeed"] = {
name = "Basic Attack",
hidden = true,
color = ,
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
[SkillType.Attack] = true,
[SkillType.RangedAttack] = true,
[SkillType.MirageArcherCanUse] = true,
[SkillType.Projectile] = true,
[SkillType.MeleeSingleTarget] = true,
[SkillType.Melee] = true,
[SkillType.ProjectilesFromUser] = true,
[SkillType.AttackInPlace] = true,
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 1,
baseFlags = {
attack = true,
melee = true,
projectile = true,
},
baseMods = {
},
qualityStats = {
},
stats = {
"skill_can_fire_arrows",
"skill_can_fire_wand_projectiles",
"action_attack_or_cast_time_uses_animation_length",
"projectile_uses_contact_position",
"use_scaled_contact_offset",
},
levels = {
[1] = {levelRequirement = 1, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["SSMVaalArchivistJaguar"] = {
name = "SSMVaalArchivistJaguar",
hidden = true,
color = ,
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
[SkillType.Spell] = true,
[SkillType.Multicastable] = true,
[SkillType.Triggerable] = true,
[SkillType.AttackInPlace] = true,
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 1,
baseFlags = {
spell = true,
},
baseMods = {
},
qualityStats = {
},
stats = {
"alternate_minion",
"number_of_monsters_to_summon",
"summon_specific_monsters_radius_+%",
"summoned_monsters_are_minions",
"monster_no_drops_or_experience",
},
levels = {
[1] = {1026, 1, -99, levelRequirement = 1, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["GSVaalArchivistLightningBlast"] = {
name = "GSVaalArchivistLightningBlast",
hidden = true,
color = ,
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
[SkillType.Triggerable] = true,
[SkillType.Spell] = true,
[SkillType.Damage] = true,
[SkillType.AttackInPlace] = true,
},
statDescriptionScope = "geometry_spell",
castTime = 1,
baseFlags = {
spell = true,
area = true,
},
baseMods = {
},
qualityStats = {
},
stats = {
"spell_minimum_base_lightning_damage",
"spell_maximum_base_lightning_damage",
"is_area_damage",
},
levels = {
[1] = {0.5, 1.5, critChance = 5, levelRequirement = 1, statInterpolation = {3, 3}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["GSVaalArchivistFlamewall"] = {
name = "GSVaalArchivistFlamewall",
hidden = true,
color = ,
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
[SkillType.Triggerable] = true,
[SkillType.Spell] = true,
[SkillType.Damage] = true,
[SkillType.AttackInPlace] = true,
},
statDescriptionScope = "geometry_spell",
castTime = 1,
baseFlags = {
spell = true,
area = true,
},
baseMods = {
},
qualityStats = {
},
stats = {
"spell_minimum_base_fire_damage",
"spell_maximum_base_fire_damage",
"is_area_damage",
},
levels = {
[1] = {0.80000001192093, 1.2000000476837, levelRequirement = 1, statInterpolation = {3, 3}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["SOArchivistFlameWall"] = {
name = "SOArchivistFlameWall",
hidden = true,
color = ,
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
[SkillType.Triggerable] = true,
[SkillType.AttackInPlace] = true,
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 1,
baseFlags = {
},
baseMods = {
},
qualityStats = {
},
stats = {
},
levels = {
[1] = {levelRequirement = 1, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["SOArchivistFlameRune"] = {
name = "SOArchivistFlameRune",
hidden = true,
color = ,
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
[SkillType.Triggerable] = true,
[SkillType.AttackInPlace] = true,
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 1.87,
baseFlags = {
},
baseMods = {
},
qualityStats = {
},
stats = {
"spell_maximum_action_distance_+%",
},
levels = {
[1] = {-40, levelRequirement = 1, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["SOArchivistLightningRune"] = {
name = "SOArchivistLightningRune",
hidden = true,
color = ,
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
[SkillType.Triggerable] = true,
[SkillType.AttackInPlace] = true,
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 1.87,
baseFlags = {
},
baseMods = {
},
qualityStats = {
},
stats = {
"spell_maximum_action_distance_+%",
},
levels = {
[1] = {-40, levelRequirement = 1, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["SOArchivistMonkeyRune"] = {
name = "SOArchivistMonkeyRune",
hidden = true,
color = ,
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
[SkillType.Triggerable] = true,
[SkillType.AttackInPlace] = true,
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 1.87,
baseFlags = {
},
baseMods = {
},
qualityStats = {
},
stats = {
"spell_maximum_action_distance_+%",
},
levels = {
[1] = {-40, levelRequirement = 1, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["SOArchivistSnakeRune"] = {
name = "SOArchivistSnakeRune",
hidden = true,
color = ,
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
[SkillType.Triggerable] = true,
[SkillType.AttackInPlace] = true,
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 1.87,
baseFlags = {
},
baseMods = {
},
qualityStats = {
},
stats = {
"spell_maximum_action_distance_+%",
},
levels = {
[1] = {-40, levelRequirement = 1, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["GTVaalArchivistFlameWall"] = {
name = "GTVaalArchivistFlameWall",
hidden = true,
color = ,
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
[SkillType.Spell] = true,
[SkillType.Triggerable] = true,
[SkillType.AttackInPlace] = true,
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 1,
baseFlags = {
spell = true,
},
baseMods = {
},
qualityStats = {
},
stats = {
"action_attack_or_cast_time_uses_animation_length",
},
levels = {
[1] = {levelRequirement = 1, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["GTVaalArchivistFlameWall2"] = {
name = "GTVaalArchivistFlameWall2",
hidden = true,
color = ,
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
[SkillType.Spell] = true,
[SkillType.Triggerable] = true,
[SkillType.AttackInPlace] = true,
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 1,
baseFlags = {
spell = true,
},
baseMods = {
},
qualityStats = {
},
stats = {
"action_attack_or_cast_time_uses_animation_length",
},
levels = {
[1] = {levelRequirement = 1, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["GTVaalArchivistSummonJaguar"] = {
name = "GTVaalArchivistSummonJaguar",
hidden = true,
color = ,
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
[SkillType.Spell] = true,
[SkillType.Triggerable] = true,
[SkillType.AttackInPlace] = true,
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 2,
baseFlags = {
spell = true,
},
baseMods = {
},
qualityStats = {
},
stats = {
"spell_maximum_action_distance_+%",
"action_attack_or_cast_time_uses_animation_length",
},
levels = {
[1] = {-40, levelRequirement = 1, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["EDSVaalArchivistColdRune"] = {
name = "EDSVaalArchivistColdRune",
hidden = true,
color = ,
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
[SkillType.Triggerable] = true,
[SkillType.Spell] = true,
[SkillType.Damage] = true,
[SkillType.AttackInPlace] = true,
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 1.87,
baseFlags = {
spell = true,
area = true,
},
baseMods = {
},
qualityStats = {
},
stats = {
"spell_minimum_base_cold_damage",
"spell_maximum_base_cold_damage",
"spell_maximum_action_distance_+%",
"is_area_damage",
},
levels = {
[1] = {0.80000001192093, 1.2000000476837, -40, critChance = 5, levelRequirement = 1, statInterpolation = {3, 3}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["DoLiterallyNothing"] = {
name = "???",
hidden = true,
color = ,
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 1,
baseFlags = {
},
baseMods = {
},
qualityStats = {
},
stats = {
},
levels = {
[1] = {levelRequirement = 1, statInterpolation = {}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["VaalArchivistSpark"] = {
name = "Spark",
hidden = true,
color = ,
baseEffectiveness = 0,
incrementalEffectiveness = 0,
description = "Launch a spray of sparking [Projectile|Projectiles] that travel erratically along the ground until they hit an enemy or expire. [Consume|Consumes] a [Cold] [ElementalInfusion|Infusion] if possible to fire many sparks in a circle.",
skillTypes = {
[SkillType.Spell] = true,
[SkillType.Projectile] = true,
[SkillType.ProjectilesFromUser] = true,
[SkillType.Damage] = true,
[SkillType.Duration] = true,
[SkillType.Trappable] = true,
[SkillType.Totemable] = true,
[SkillType.Mineable] = true,
[SkillType.Multicastable] = true,
[SkillType.Triggerable] = true,
[SkillType.Lightning] = true,
[SkillType.Unleashable] = true,
[SkillType.Invokable] = true,
[SkillType.UsableWhileMoving] = true,
},
statDescriptionScope = "spark/statset_0",
castTime = 1,
baseFlags = {
spell = true,
projectile = true,
duration = true,
},
baseMods = {
},
qualityStats = {
},
stats = {
"spell_minimum_base_lightning_damage",
"spell_maximum_base_lightning_damage",
"base_skill_effect_duration",
"number_of_additional_projectiles",
"projectiles_nova",
"base_is_projectile",
},
levels = {
[1] = {0.5, 1.5, 2000, 7, critChance = 5, levelRequirement = 1, statInterpolation = {3, 3}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["MPSVaalArchivistFireProj"] = {
name = "MPSVaalArchivistFireProj",
hidden = true,
color = ,
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
[SkillType.Spell] = true,
[SkillType.Projectile] = true,
[SkillType.ProjectilesFromUser] = true,
[SkillType.Triggerable] = true,
[SkillType.Damage] = true,
[SkillType.AttackInPlace] = true,
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 1.87,
baseFlags = {
spell = true,
projectile = true,
},
baseMods = {
},
qualityStats = {
},
stats = {
"spell_minimum_base_fire_damage",
"spell_maximum_base_fire_damage",
"monster_projectile_variation",
"spell_maximum_action_distance_+%",
"base_is_projectile",
"use_scaled_contact_offset",
"projectile_uses_contact_position",
"maintain_projectile_direction_when_using_contact_position",
},
levels = {
[1] = {0.80000001192093, 1.2000000476837, 1032, -30, critChance = 5, levelRequirement = 1, statInterpolation = {3, 3}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["MPSVaalArchivistColdProj"] = {
name = "MPSVaalArchivistColdProj",
hidden = true,
color = ,
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
[SkillType.Spell] = true,
[SkillType.Projectile] = true,
[SkillType.ProjectilesFromUser] = true,
[SkillType.Triggerable] = true,
[SkillType.Damage] = true,
[SkillType.AttackInPlace] = true,
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 1.87,
baseFlags = {
spell = true,
projectile = true,
},
baseMods = {
},
qualityStats = {
},
stats = {
"spell_minimum_base_cold_damage",
"spell_maximum_base_cold_damage",
"monster_projectile_variation",
"spell_maximum_action_distance_+%",
"base_is_projectile",
"use_scaled_contact_offset",
"projectile_uses_contact_position",
"maintain_projectile_direction_when_using_contact_position",
},
levels = {
[1] = {0.80000001192093, 1.2000000476837, 1033, -30, critChance = 5, levelRequirement = 1, statInterpolation = {3, 3}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["MPSVaalArchivistLightningProj"] = {
name = "MPSVaalArchivistLightningProj",
hidden = true,
color = ,
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
[SkillType.Spell] = true,
[SkillType.Projectile] = true,
[SkillType.ProjectilesFromUser] = true,
[SkillType.Triggerable] = true,
[SkillType.Damage] = true,
[SkillType.AttackInPlace] = true,
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 1.87,
baseFlags = {
spell = true,
projectile = true,
},
baseMods = {
},
qualityStats = {
},
stats = {
"spell_minimum_base_lightning_damage",
"spell_maximum_base_lightning_damage",
"monster_projectile_variation",
"spell_maximum_action_distance_+%",
"base_is_projectile",
"use_scaled_contact_offset",
"projectile_uses_contact_position",
"maintain_projectile_direction_when_using_contact_position",
},
levels = {
[1] = {0.5, 1.5, 1034, -30, critChance = 5, levelRequirement = 1, statInterpolation = {3, 3}, cost = { }, },
},
}
-- src\Data\Skills\spectre.lua
skills["MPSVaalArchivistBloodProj"] = {
name = "MPSVaalArchivistBloodProj",
hidden = true,
color = ,
baseEffectiveness = 0,
incrementalEffectiveness = 0,
skillTypes = {
[SkillType.Spell] = true,
[SkillType.Projectile] = true,
[SkillType.ProjectilesFromUser] = true,
[SkillType.Triggerable] = true,
[SkillType.Damage] = true,
[SkillType.AttackInPlace] = true,
},
statDescriptionScope = "skill_stat_descriptions",
castTime = 1.87,
baseFlags = {
spell = true,
projectile = true,
},
baseMods = {
},
qualityStats = {
},
stats = {
"spell_minimum_base_physical_damage",
"spell_maximum_base_physical_damage",
"monster_projectile_variation",
"spell_maximum_action_distance_+%",
"base_is_projectile",
"use_scaled_contact_offset",
"projectile_uses_contact_position",
"maintain_projectile_direction_when_using_contact_position",
},
levels = {
[1] = {0.80000001192093, 1.2000000476837, 1035, -30, critChance = 5, levelRequirement = 1, statInterpolation = {3, 3}, cost = { }, },
},
}
stance movement speed +% final [-5]
| Family | Stance |
|---|---|
| Domains | Monster (3) |
| GenerationType | ยูนิค (3) |
| Req. level | 1 |
| Stats | |
| Craft Tags | ความเร็ว |
| Family | Nothing |
|---|---|
| Domains | Monster (3) |
| GenerationType | ยูนิค (3) |
| Req. level | 1 |
Edit
Wikis Content is available under CC BY-NC-SA 3.0 unless otherwise noted.
Wikis Content is available under CC BY-NC-SA 3.0 unless otherwise noted.
มนุษย์