Soapstone bug fixes (#23446)

🆑 coiax
add: You can regain a use of a soapstone by erasing one of your own
messages. (This means you can remove a message if you don't like the
colour and want to try rephrasing it to get a better colour). Erasing
someone else's message still uses a charge.
fix: Fixes bugs where you'd spend a charge without engraving anything.
fix: Fixes a bug where the wrong ckey was entered in the engraving,
you won't be able to take advantage of the "recharging" on messages made
before this change.
/🆑

Also includes the user's real_name rather than their name.
This commit is contained in:
coiax
2017-01-30 17:17:21 +00:00
committed by AnturK
parent bff83238bc
commit dd160df63e
+52 -16
View File
@@ -9,6 +9,7 @@
var/tool_speed = 50
var/remaining_uses = 3
var/non_dull_name
var/w_engrave = "engrave"
var/w_engraving = "engraving"
var/w_chipping = "chipping"
@@ -39,19 +40,28 @@
/obj/item/soapstone/examine(mob/user)
. = ..()
user << "It has [remaining_uses] uses left."
if(remaining_uses != -1)
user << "It has [remaining_uses] uses left."
else
user << "It looks like it can be used an unlimited number of times."
/obj/item/soapstone/afterattack(atom/target, mob/user, proximity)
var/turf/T = get_turf(target)
if(!proximity)
return
if(!remaining_uses)
// The dull chisel is dull.
user << "<span class='warning'>[src] is [w_dull].</span>"
var/obj/structure/chisel_message/already_message = locate(/obj/structure/chisel_message) in T
var/our_message = FALSE
if(already_message)
our_message = already_message.creator_key == user.ckey
if(!remaining_uses && !our_message)
// The dull chisel is dull.
user << "<span class='warning'>[src] is [w_dull].</span>"
return
if(!good_chisel_message_location(T))
user << "<span class='warning'>It's not appropriate to [w_engrave] on [T].</span>"
return
@@ -60,11 +70,17 @@
user.visible_message("<span class='notice'>[user] starts erasing [already_message].</span>", "<span class='notice'>You start erasing [already_message].</span>", "<span class='italics'>You hear a [w_chipping] sound.</span>")
playsound(loc, 'sound/items/gavel.ogg', 50, 1, -1)
if(do_after(user, tool_speed, target=target) && spend_use())
// Removing our own messages refunds a charge
if((our_message || can_use()) && do_after(user, tool_speed, target=target) && (our_message || can_use()))
user.visible_message("<span class='notice'>[user] has erased [already_message].</span>", "<span class='notice'>You erased [already_message].</span>")
already_message.persists = FALSE
qdel(already_message)
playsound(loc, 'sound/items/gavel.ogg', 50, 1, -1)
if(our_message)
refund_use()
else
remove_use()
return
var/message = stripped_input(user, "What would you like to [w_engrave]?", "[name] Message")
@@ -78,21 +94,38 @@
playsound(loc, 'sound/items/gavel.ogg', 50, 1, -1)
user.visible_message("<span class='notice'>[user] starts [w_engraving] a message into [T].</span>", "You start [w_engraving] a message into [T].", "<span class='italics'>You hear a [w_chipping] sound.</span>")
if(do_after(user, tool_speed, target=T))
if(!locate(/obj/structure/chisel_message in T) && spend_use())
if(can_use() && do_after(user, tool_speed, target=T) && can_use())
if(!locate(/obj/structure/chisel_message in T))
user << "You [w_engrave] a message into [T]."
playsound(loc, 'sound/items/gavel.ogg', 50, 1, -1)
var/obj/structure/chisel_message/M = new(T)
M.register(user, message)
remove_use()
/obj/item/soapstone/proc/spend_use(mob/user)
if(!remaining_uses)
. = FALSE
else
remaining_uses--
if(!remaining_uses)
name = "[w_dull] [name]"
/obj/item/soapstone/proc/can_use()
if(remaining_uses == -1 || remaining_uses >= 0)
. = TRUE
else
. = FALSE
/obj/item/soapstone/proc/remove_use()
if(remaining_uses <= 0)
// -1 == unlimited, 0 == empty
return
remaining_uses--
if(!remaining_uses)
non_dull_name = name
name = "[w_dull] [name]"
/obj/item/soapstone/proc/refund_use()
if(remaining_uses == -1)
return
var/was_dull = remaining_uses
remaining_uses++
if(was_dull)
name = non_dull_name
/* Persistent engraved messages, etched onto the station turfs to serve
as instructions and/or memes for the next generation of spessmen.
@@ -101,6 +134,9 @@
but only permamently removed with the librarian's soapstone.
*/
/obj/item/soapstone/infinite
remaining_uses = -1
/proc/good_chisel_message_location(turf/T)
if(!T)
. = FALSE
@@ -141,8 +177,8 @@
/obj/structure/chisel_message/proc/register(mob/user, newmessage)
hidden_message = newmessage
creator_name = user.name
creator_key = user.key
creator_name = user.real_name
creator_key = user.ckey
realdate = world.timeofday
map = MAP_NAME
update_icon()