From 0746116e1791bf0b87bf103069a254b6fbd4858f Mon Sep 17 00:00:00 2001 From: DeltaFire Date: Fri, 25 Sep 2020 22:04:55 +0200 Subject: [PATCH] fixes a bunch of blacksmithing stuff the blacksmithing skill is now actually dwarfy instead of not because of a typo picking up how ingots without gloves is now not a better decision than picking them up with non-heatresistant gloves. you can't interact with anvils while they are already being worked to prevent issues. Also fixes associative skill level code a tiny bit. --- code/datums/skills/_skill.dm | 1 + code/datums/skills/blacksmithing.dm | 3 ++- code/modules/smithing/anvil.dm | 30 +++++++++++++++++------------ 3 files changed, 21 insertions(+), 13 deletions(-) diff --git a/code/datums/skills/_skill.dm b/code/datums/skills/_skill.dm index eecf416b1b..a7d7df72e4 100644 --- a/code/datums/skills/_skill.dm +++ b/code/datums/skills/_skill.dm @@ -171,6 +171,7 @@ GLOBAL_LIST_INIT_TYPED(skill_datums, /datum/skill, init_skill_datums()) continue max_assoc = levels[lvl-1] levels["[max_assoc] +[max_assoc_start++]"] = value + continue levels[key] = value /datum/skill/level/sanitize_value(new_value) diff --git a/code/datums/skills/blacksmithing.dm b/code/datums/skills/blacksmithing.dm index 0bddae5562..1f8eae357a 100644 --- a/code/datums/skills/blacksmithing.dm +++ b/code/datums/skills/blacksmithing.dm @@ -1,6 +1,7 @@ -/datum/skill/level/dorfy/blacksmithing +/datum/skill/level/dwarfy/blacksmithing name = "Blacksmithing" desc = "Making metal into fancy shapes using heat and force. Higher levels increase both your working speed at an anvil as well as the quality of your works." name_color = COLOR_FLOORTILE_GRAY skill_traits = list(SKILL_SANITY, SKILL_INTELLIGENCE, SKILL_USE_TOOL, SKILL_TRAINING_TOOL) ui_category = SKILL_UI_CAT_MISC + standard_xp_lvl_up = 100 //Effectively 200xp for level 1 because of how this code works. 300 more for 2, Etc, diff --git a/code/modules/smithing/anvil.dm b/code/modules/smithing/anvil.dm index 19d48119e6..b796edabbf 100644 --- a/code/modules/smithing/anvil.dm +++ b/code/modules/smithing/anvil.dm @@ -36,6 +36,7 @@ icon_state = "anvil" density = TRUE anchored = TRUE + var/busy = FALSE //If someone is already interacting with this anvil var/workpiece_state = FALSE var/datum/material/workpiece_material var/anvilquality = 0 @@ -84,7 +85,7 @@ currentquality = anvilquality var/skillmod = 0 if(user.mind.skill_holder) - skillmod = user.mind.get_skill_level(/datum/skill/level/dorfy/blacksmithing)/2 + skillmod = user.mind.get_skill_level(/datum/skill/level/dwarfy/blacksmithing)/2 currentquality += skillmod qdel(notsword) else @@ -93,12 +94,14 @@ return else if(istype(I, /obj/item/melee/smith/hammer)) var/obj/item/melee/smith/hammer/hammertime = I - if(workpiece_state == WORKPIECE_PRESENT || workpiece_state == WORKPIECE_INPROGRESS) - do_shaping(user, hammertime.qualitymod) - return - else - to_chat(user, "You can't work an empty anvil!") - return FALSE + if(!(workpiece_state == WORKPIECE_PRESENT || workpiece_state == WORKPIECE_INPROGRESS)) + to_chat(user, "You can't work an empty anvil!") + return FALSE + if(busy) + to_chat(user, "This anvil is already being worked!") + return FALSE + do_shaping(user, hammertime.qualitymod) + return return ..() /obj/structure/anvil/wrench_act(mob/living/user, obj/item/I) @@ -108,16 +111,18 @@ /obj/structure/anvil/proc/do_shaping(mob/user, var/qualitychange) + busy = TRUE currentquality += qualitychange var/list/shapingsteps = list("weak hit", "strong hit", "heavy hit", "fold", "draw", "shrink", "bend", "punch", "upset") //weak/strong/heavy hit affect strength. All the other steps shape. workpiece_state = WORKPIECE_INPROGRESS var/stepdone = input(user, "How would you like to work the metal?") in shapingsteps var/steptime = 50 if(user.mind.skill_holder) - var/skillmod = user.mind.get_skill_level(/datum/skill/level/dorfy/blacksmithing)/10 + 1 + var/skillmod = user.mind.get_skill_level(/datum/skill/level/dwarfy/blacksmithing)/10 + 1 steptime = 50 / skillmod playsound(src, 'sound/effects/clang2.ogg',40, 2) if(!do_after(user, steptime, target = src)) + busy = FALSE return FALSE switch(stepdone) if("weak hit") @@ -162,16 +167,17 @@ addtimer(CALLBACK(GLOBAL_PROC, .proc/playsound, src, 'sound/effects/clang2.ogg', 40, 2), 15) if(length(stepsdone) >= 3) tryfinish(user) + busy = FALSE /obj/structure/anvil/proc/tryfinish(mob/user) var/artifactchance = 0 if(!artifactrolled) - artifactchance = (1+(user.mind.get_skill_level(/datum/skill/level/dorfy/blacksmithing)/4))/2500 + artifactchance = (1+(user.mind.get_skill_level(/datum/skill/level/dwarfy/blacksmithing)/4))/2500 artifactrolled = TRUE var/artifact = max(prob(artifactchance), debug) var/finalfailchance = outrightfailchance if(user.mind.skill_holder) - var/skillmod = user.mind.get_skill_level(/datum/skill/level/dorfy/blacksmithing)/10 + 1 + var/skillmod = user.mind.get_skill_level(/datum/skill/level/dwarfy/blacksmithing)/10 + 1 finalfailchance = max(0, finalfailchance / skillmod) //lv 2 gives 20% less to fail, 3 30%, etc if((currentsteps > 10 || (rng && prob(finalfailchance))) && !artifact) to_chat(user, "You overwork the metal, causing it to turn into useless slag!") @@ -184,7 +190,7 @@ outrightfailchance = 1 artifactrolled = FALSE if(user.mind.skill_holder) - user.mind.auto_gain_experience(/datum/skill/level/dorfy/blacksmithing, 25, 400, silent = FALSE) + user.mind.auto_gain_experience(/datum/skill/level/dwarfy/blacksmithing, 25, 400, silent = FALSE) for(var/i in smithrecipes) if(i == stepsdone) var/turf/T = get_turf(user) @@ -217,7 +223,7 @@ outrightfailchance = 1 artifactrolled = FALSE if(user.mind.skill_holder) - user.mind.auto_gain_experience(/datum/skill/level/dorfy/blacksmithing, 50, 10000000, silent = FALSE) + user.mind.auto_gain_experience(/datum/skill/level/dwarfy/blacksmithing, 50, 10000000, silent = FALSE) break /obj/structure/anvil/debugsuper