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
diff --git a/code/modules/smithing/smithed_items.dm b/code/modules/smithing/smithed_items.dm
index 6d10d33a75..e514fd5c9a 100644
--- a/code/modules/smithing/smithed_items.dm
+++ b/code/modules/smithing/smithed_items.dm
@@ -35,7 +35,7 @@
if(G.max_heat_protection_temperature)
prot = (G.max_heat_protection_temperature > 360)
else
- prot = 1
+ prot = 0
if(prot > 0 || HAS_TRAIT(user, TRAIT_RESISTHEAT) || HAS_TRAIT(user, TRAIT_RESISTHEATHANDS))
to_chat(user, "You pick up the [src].")
return ..()