Final adjustments.
This commit is contained in:
@@ -23,7 +23,7 @@
|
||||
* from/to new/old minds.
|
||||
*/
|
||||
#define ADD_SKILL_MODIFIER_BODY(path, id, body, prototype) \
|
||||
prototype = GLOB.skill_modifiers[GET_SKILL_MOD_ID(path, id)] || new path(id);\
|
||||
prototype = GLOB.skill_modifiers[GET_SKILL_MOD_ID(path, id)] || new path(id, TRUE);\
|
||||
if(body.mind){\
|
||||
body.mind.add_skill_modifier(prototype.identifier)\
|
||||
} else {\
|
||||
@@ -43,6 +43,6 @@
|
||||
///Macro used when adding generic singleton skill modifiers.
|
||||
#define ADD_SINGLETON_SKILL_MODIFIER(mind, path, id) \
|
||||
if(!GLOB.skill_modifiers[GET_SKILL_MOD_ID(path, id)]){\
|
||||
new path(id)\
|
||||
new path(id, TRUE)\
|
||||
};\
|
||||
mind.add_skill_modifier(GET_SKILL_MOD_ID(path, id))
|
||||
mind.add_skill_modifier(GET_SKILL_MOD_ID(path, id))
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
for(var/k in L)
|
||||
var/datum/skill_modifier/M = GLOB.skill_modifiers[k]
|
||||
. = M.apply_modifier(., skill, skill_holder, MODIFIER_TARGET_LEVEL)
|
||||
. = SANITIZE_SKILL_LEVEL(skill, round ? round(.) : .)
|
||||
. = SANITIZE_SKILL_LEVEL(skill, round ? round(., 1) : .)
|
||||
|
||||
/**
|
||||
* Grabs our affinity for a skill. !!This is a multiplier!!
|
||||
|
||||
@@ -10,7 +10,7 @@ GLOBAL_LIST_EMPTY(potential_mods_per_skill)
|
||||
/// flags for this skill modifier.
|
||||
var/modifier_flags = NONE
|
||||
/// target skills, can be a specific skill typepath or a set of skill flags.
|
||||
var/target_skills = ALL
|
||||
var/target_skills = NONE
|
||||
/// The identifier key this skill modifier is associated with.
|
||||
var/identifier
|
||||
/// skill affinity modifier, can be a multiplier or addendum, depending on the modifier_flags flags.
|
||||
@@ -22,15 +22,21 @@ GLOBAL_LIST_EMPTY(potential_mods_per_skill)
|
||||
/// Priority of this skill modifier compared to other ones.
|
||||
var/priority = MODIFIER_SKILL_PRIORITY_DEF
|
||||
|
||||
/datum/skill_modifier/New(id)
|
||||
/datum/skill_modifier/New(id, register = FALSE)
|
||||
identifier = GET_SKILL_MOD_ID(type, id)
|
||||
if(id)
|
||||
var/former_id = identifier
|
||||
var/dupe = 0
|
||||
while(GLOB.skill_modifiers[identifier])
|
||||
identifier = "[former_id][++dupe]"
|
||||
GLOB.skill_modifiers[identifier] = src
|
||||
|
||||
if(register)
|
||||
register()
|
||||
|
||||
/datum/skill_modifier/proc/register()
|
||||
if(GLOB.skill_modifiers[identifier])
|
||||
CRASH("Skill modifier identifier \"[identifier]\" already taken.")
|
||||
GLOB.skill_modifiers[identifier] = src
|
||||
if(ispath(target_skills))
|
||||
var/list/mod_L = GLOB.potential_mods_per_skill[target_skills]
|
||||
if(!mod_L)
|
||||
@@ -147,11 +153,13 @@ GLOBAL_LIST_EMPTY(potential_mods_per_skill)
|
||||
if(MODIFIER_TARGET_AFFINITY)
|
||||
mod = affinity_mod
|
||||
|
||||
var/diff = 0
|
||||
if(modifier_flags & (MODIFIER_SKILL_VIRTUE|MODIFIER_SKILL_HANDICAP))
|
||||
if(modifier_flags & MODIFIER_SKILL_VIRTUE)
|
||||
. = max(., mod)
|
||||
if(modifier_flags & MODIFIER_SKILL_HANDICAP)
|
||||
. = min(., mod)
|
||||
diff = . - mod
|
||||
else if(modifier_flags & MODIFIER_SKILL_MULT)
|
||||
. *= mod
|
||||
else
|
||||
@@ -164,7 +172,7 @@ GLOBAL_LIST_EMPTY(potential_mods_per_skill)
|
||||
to_access = H.original_levels
|
||||
if(MODIFIER_TARGET_AFFINITY)
|
||||
to_access = H.original_affinities
|
||||
. += value - LAZYACCESS(to_access[identifier], "[skillpath]")
|
||||
. += value - diff - LAZYACCESS(to_access[identifier], "[skillpath]")
|
||||
|
||||
///Body bound modifier signal procs.
|
||||
/datum/skill_modifier/proc/on_mind_transfer(datum/mind/source, mob/new_character, mob/old_character)
|
||||
|
||||
@@ -138,7 +138,7 @@
|
||||
if(current_users[user])
|
||||
return FALSE
|
||||
if(req_skill && user?.mind)
|
||||
var/level_diff = req_skill - user.mind.get_skill_level(/datum/skill/level/job/wiring)
|
||||
var/level_diff = req_skill - user.mind.get_skill_level(/datum/skill/level/job/wiring, round = TRUE)
|
||||
if(level_diff > 0)
|
||||
LAZYSET(current_users, user, TRUE)
|
||||
to_chat(user, "<span class='notice'>You begin cutting [holder]'s [color] wire...</span>")
|
||||
@@ -167,7 +167,7 @@
|
||||
if(current_users[user])
|
||||
return FALSE
|
||||
if(req_skill && user?.mind)
|
||||
var/level_diff = req_skill - user.mind.get_skill_level(/datum/skill/level/job/wiring)
|
||||
var/level_diff = req_skill - user.mind.get_skill_level(/datum/skill/level/job/wiring, round = TRUE)
|
||||
if(level_diff > 0)
|
||||
LAZYSET(current_users, user, TRUE)
|
||||
to_chat(user, "<span class='notice'>You begin pulsing [holder]'s [color] wire...</span>")
|
||||
|
||||
Reference in New Issue
Block a user