Bleeding edgy refresh (#303)
* not code stuff * other things * global vars, defines, helpers * onclick hud stuff, orphans, world.dm * controllers and datums * game folder * everything not client/mobs in modules * client folder * stage 1 mob stuff * simple animal things * silicons * carbon things * ayylmaos and monkeys * hyoomahn * icons n shit * sprite fixes * compile fixes * some fixes I cherrypicked. * qdel fixes * forgot brain refractors
This commit is contained in:
@@ -15,17 +15,17 @@
|
||||
|
||||
/obj/item/weapon/book/codex_gigas/attack_self(mob/user)
|
||||
if(is_blind(user))
|
||||
user << "<span class='warning'>As you are trying to read, you suddenly feel very stupid.</span>"
|
||||
to_chat(user, "<span class='warning'>As you are trying to read, you suddenly feel very stupid.</span>")
|
||||
return
|
||||
if(ismonkey(user))
|
||||
user << "<span class='notice'>You skim through the book but can't comprehend any of it.</span>"
|
||||
to_chat(user, "<span class='notice'>You skim through the book but can't comprehend any of it.</span>")
|
||||
return
|
||||
if(inUse)
|
||||
user << "<span class='notice'>Someone else is reading it.</span>"
|
||||
to_chat(user, "<span class='notice'>Someone else is reading it.</span>")
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/U = user
|
||||
if(U.check_acedia())
|
||||
user << "<span class='notice'>None of this matters, why are you reading this? You put the [title] down.</span>"
|
||||
to_chat(user, "<span class='notice'>None of this matters, why are you reading this? You put the [title] down.</span>")
|
||||
return
|
||||
inUse = 1
|
||||
var/devilName = copytext(sanitize(input(user, "What infernal being do you wish to research?", "Codex Gigas", null) as text),1,MAX_MESSAGE_LEN)
|
||||
|
||||
@@ -44,13 +44,13 @@
|
||||
if(istype(I, /obj/item/weapon/wrench))
|
||||
playsound(loc, I.usesound, 100, 1)
|
||||
if(do_after(user, 20*I.toolspeed, target = src))
|
||||
user << "<span class='notice'>You wrench the frame into place.</span>"
|
||||
to_chat(user, "<span class='notice'>You wrench the frame into place.</span>")
|
||||
anchored = 1
|
||||
state = 1
|
||||
if(istype(I, /obj/item/weapon/crowbar))
|
||||
playsound(loc, I.usesound, 100, 1)
|
||||
if(do_after(user, 20*I.toolspeed, target = src))
|
||||
user << "<span class='notice'>You pry the frame apart.</span>"
|
||||
to_chat(user, "<span class='notice'>You pry the frame apart.</span>")
|
||||
deconstruct(TRUE)
|
||||
|
||||
if(1)
|
||||
@@ -58,12 +58,12 @@
|
||||
var/obj/item/stack/sheet/mineral/wood/W = I
|
||||
if(W.get_amount() >= 2)
|
||||
W.use(2)
|
||||
user << "<span class='notice'>You add a shelf.</span>"
|
||||
to_chat(user, "<span class='notice'>You add a shelf.</span>")
|
||||
state = 2
|
||||
icon_state = "book-0"
|
||||
if(istype(I, /obj/item/weapon/wrench))
|
||||
playsound(loc, I.usesound, 100, 1)
|
||||
user << "<span class='notice'>You unwrench the frame.</span>"
|
||||
to_chat(user, "<span class='notice'>You unwrench the frame.</span>")
|
||||
anchored = 0
|
||||
state = 0
|
||||
|
||||
@@ -78,7 +78,7 @@
|
||||
for(var/obj/item/T in B.contents)
|
||||
if(istype(T, /obj/item/weapon/book) || istype(T, /obj/item/weapon/spellbook))
|
||||
B.remove_from_storage(T, src)
|
||||
user << "<span class='notice'>You empty \the [I] into \the [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You empty \the [I] into \the [src].</span>")
|
||||
update_icon()
|
||||
else if(istype(I, /obj/item/weapon/pen))
|
||||
var/newname = stripped_input(user, "What would you like to title this bookshelf?")
|
||||
@@ -88,10 +88,10 @@
|
||||
name = ("bookcase ([sanitize(newname)])")
|
||||
else if(istype(I, /obj/item/weapon/crowbar))
|
||||
if(contents.len)
|
||||
user << "<span class='warning'>You need to remove the books first!</span>"
|
||||
to_chat(user, "<span class='warning'>You need to remove the books first!</span>")
|
||||
else
|
||||
playsound(loc, I.usesound, 100, 1)
|
||||
user << "<span class='notice'>You pry the shelf out.</span>"
|
||||
to_chat(user, "<span class='notice'>You pry the shelf out.</span>")
|
||||
new /obj/item/stack/sheet/mineral/wood(loc, 2)
|
||||
state = 1
|
||||
icon_state = "bookempty"
|
||||
@@ -180,36 +180,36 @@
|
||||
|
||||
/obj/item/weapon/book/attack_self(mob/user)
|
||||
if(is_blind(user))
|
||||
user << "<span class='warning'>As you are trying to read, you suddenly feel very stupid!</span>"
|
||||
to_chat(user, "<span class='warning'>As you are trying to read, you suddenly feel very stupid!</span>")
|
||||
return
|
||||
if(ismonkey(user))
|
||||
user << "<span class='notice'>You skim through the book but can't comprehend any of it.</span>"
|
||||
to_chat(user, "<span class='notice'>You skim through the book but can't comprehend any of it.</span>")
|
||||
return
|
||||
if(dat)
|
||||
user << browse("<TT><I>Penned by [author].</I></TT> <BR>" + "[dat]", "window=book[window_size != null ? ";size=[window_size]" : ""]")
|
||||
user.visible_message("[user] opens a book titled \"[title]\" and begins reading intently.")
|
||||
onclose(user, "book")
|
||||
else
|
||||
user << "<span class='notice'>This book is completely blank!</span>"
|
||||
to_chat(user, "<span class='notice'>This book is completely blank!</span>")
|
||||
|
||||
|
||||
/obj/item/weapon/book/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/weapon/pen))
|
||||
if(is_blind(user))
|
||||
user << "<span class='warning'> As you are trying to write on the book, you suddenly feel very stupid!</span>"
|
||||
to_chat(user, "<span class='warning'> As you are trying to write on the book, you suddenly feel very stupid!</span>")
|
||||
return
|
||||
if(unique)
|
||||
user << "<span class='warning'>These pages don't seem to take the ink well! Looks like you can't modify it.</span>"
|
||||
to_chat(user, "<span class='warning'>These pages don't seem to take the ink well! Looks like you can't modify it.</span>")
|
||||
return
|
||||
var/choice = input("What would you like to change?") in list("Title", "Contents", "Author", "Cancel")
|
||||
switch(choice)
|
||||
if("Title")
|
||||
var/newtitle = reject_bad_text(stripped_input(usr, "Write a new title:"))
|
||||
if (length(newtitle) > 20)
|
||||
usr << "That title won't fit on the cover!"
|
||||
to_chat(usr, "That title won't fit on the cover!")
|
||||
return
|
||||
if(!newtitle)
|
||||
usr << "That title is invalid."
|
||||
to_chat(usr, "That title is invalid.")
|
||||
return
|
||||
else
|
||||
name = newtitle
|
||||
@@ -217,14 +217,14 @@
|
||||
if("Contents")
|
||||
var/content = stripped_input(usr, "Write your book's contents (HTML NOT allowed):","","",8192)
|
||||
if(!content)
|
||||
usr << "The content is invalid."
|
||||
to_chat(usr, "The content is invalid.")
|
||||
return
|
||||
else
|
||||
dat += content
|
||||
if("Author")
|
||||
var/newauthor = stripped_input(usr, "Write the author's name:")
|
||||
if(!newauthor)
|
||||
usr << "The name is invalid."
|
||||
to_chat(usr, "The name is invalid.")
|
||||
return
|
||||
else
|
||||
author = newauthor
|
||||
@@ -234,37 +234,37 @@
|
||||
else if(istype(I, /obj/item/weapon/barcodescanner))
|
||||
var/obj/item/weapon/barcodescanner/scanner = I
|
||||
if(!scanner.computer)
|
||||
user << "[I]'s screen flashes: 'No associated computer found!'"
|
||||
to_chat(user, "[I]'s screen flashes: 'No associated computer found!'")
|
||||
else
|
||||
switch(scanner.mode)
|
||||
if(0)
|
||||
scanner.book = src
|
||||
user << "[I]'s screen flashes: 'Book stored in buffer.'"
|
||||
to_chat(user, "[I]'s screen flashes: 'Book stored in buffer.'")
|
||||
if(1)
|
||||
scanner.book = src
|
||||
scanner.computer.buffer_book = name
|
||||
user << "[I]'s screen flashes: 'Book stored in buffer. Book title stored in associated computer buffer.'"
|
||||
to_chat(user, "[I]'s screen flashes: 'Book stored in buffer. Book title stored in associated computer buffer.'")
|
||||
if(2)
|
||||
scanner.book = src
|
||||
for(var/datum/borrowbook/b in scanner.computer.checkouts)
|
||||
if(b.bookname == name)
|
||||
scanner.computer.checkouts.Remove(b)
|
||||
user << "[I]'s screen flashes: 'Book stored in buffer. Book has been checked in.'"
|
||||
to_chat(user, "[I]'s screen flashes: 'Book stored in buffer. Book has been checked in.'")
|
||||
return
|
||||
user << "[I]'s screen flashes: 'Book stored in buffer. No active check-out record found for current title.'"
|
||||
to_chat(user, "[I]'s screen flashes: 'Book stored in buffer. No active check-out record found for current title.'")
|
||||
if(3)
|
||||
scanner.book = src
|
||||
for(var/obj/item/weapon/book in scanner.computer.inventory)
|
||||
if(book == src)
|
||||
user << "[I]'s screen flashes: 'Book stored in buffer. Title already present in inventory, aborting to avoid duplicate entry.'"
|
||||
to_chat(user, "[I]'s screen flashes: 'Book stored in buffer. Title already present in inventory, aborting to avoid duplicate entry.'")
|
||||
return
|
||||
scanner.computer.inventory.Add(src)
|
||||
user << "[I]'s screen flashes: 'Book stored in buffer. Title added to general inventory.'"
|
||||
to_chat(user, "[I]'s screen flashes: 'Book stored in buffer. Title added to general inventory.'")
|
||||
|
||||
else if(istype(I, /obj/item/weapon/kitchen/knife) || istype(I, /obj/item/weapon/wirecutters))
|
||||
user << "<span class='notice'>You begin to carve out [title]...</span>"
|
||||
to_chat(user, "<span class='notice'>You begin to carve out [title]...</span>")
|
||||
if(do_after(user, 30, target = src))
|
||||
user << "<span class='notice'>You carve out the pages from [title]! You didn't want to read it anyway.</span>"
|
||||
to_chat(user, "<span class='notice'>You carve out the pages from [title]! You didn't want to read it anyway.</span>")
|
||||
var/obj/item/weapon/storage/book/B = new
|
||||
B.name = src.name
|
||||
B.title = src.title
|
||||
@@ -300,7 +300,7 @@
|
||||
mode += 1
|
||||
if(mode > 3)
|
||||
mode = 0
|
||||
user << "[src] Status Display:"
|
||||
to_chat(user, "[src] Status Display:")
|
||||
var/modedesc
|
||||
switch(mode)
|
||||
if(0)
|
||||
@@ -313,9 +313,9 @@
|
||||
modedesc = "Scan book to local buffer, attempt to add book to general inventory."
|
||||
else
|
||||
modedesc = "ERROR"
|
||||
user << " - Mode [mode] : [modedesc]"
|
||||
to_chat(user, " - Mode [mode] : [modedesc]")
|
||||
if(computer)
|
||||
user << "<font color=green>Computer has been associated with this unit.</font>"
|
||||
to_chat(user, "<font color=green>Computer has been associated with this unit.</font>")
|
||||
else
|
||||
user << "<font color=red>No associated computer found. Only local scans will function properly.</font>"
|
||||
user << "\n"
|
||||
to_chat(user, "<font color=red>No associated computer found. Only local scans will function properly.</font>")
|
||||
to_chat(user, "\n")
|
||||
|
||||
@@ -51,14 +51,14 @@
|
||||
dat += "<table>"
|
||||
dat += "<tr><td>AUTHOR</td><td>TITLE</td><td>CATEGORY</td><td>SS<sup>13</sup>BN</td></tr>"
|
||||
|
||||
var/DBQuery/query = dbcon.NewQuery(SQLquery)
|
||||
query.Execute()
|
||||
|
||||
while(query.NextRow())
|
||||
var/author = query.item[1]
|
||||
var/title = query.item[2]
|
||||
var/category = query.item[3]
|
||||
var/id = query.item[4]
|
||||
var/DBQuery/query_library_list_books = dbcon.NewQuery(SQLquery)
|
||||
if(!query_library_list_books.Execute())
|
||||
dat += "<font color=red><b>ERROR</b>: Unable to retrieve book listings. Please contact your system administrator for assistance.</font><BR>"
|
||||
while(query_library_list_books.NextRow())
|
||||
var/author = query_library_list_books.item[1]
|
||||
var/title = query_library_list_books.item[2]
|
||||
var/category = query_library_list_books.item[3]
|
||||
var/id = query_library_list_books.item[4]
|
||||
dat += "<tr><td>[author]</td><td>[title]</td><td>[category]</td><td>[id]</td></tr>"
|
||||
dat += "</table><BR>"
|
||||
dat += "<A href='?src=\ref[src];back=1'>\[Go Back\]</A><BR>"
|
||||
@@ -137,15 +137,15 @@ var/global/list/datum/cachedbook/cachedbooks // List of our cached book datums
|
||||
if(!dbcon.Connect())
|
||||
return
|
||||
cachedbooks = list()
|
||||
var/DBQuery/query = dbcon.NewQuery("SELECT id, author, title, category FROM [format_table_name("library")] WHERE isnull(deleted)")
|
||||
query.Execute()
|
||||
|
||||
while(query.NextRow())
|
||||
var/DBQuery/query_library_cache = dbcon.NewQuery("SELECT id, author, title, category FROM [format_table_name("library")] WHERE isnull(deleted)")
|
||||
if(!query_library_cache.Execute())
|
||||
return
|
||||
while(query_library_cache.NextRow())
|
||||
var/datum/cachedbook/newbook = new()
|
||||
newbook.id = query.item[1]
|
||||
newbook.author = query.item[2]
|
||||
newbook.title = query.item[3]
|
||||
newbook.category = query.item[4]
|
||||
newbook.id = query_library_cache.item[1]
|
||||
newbook.author = query_library_cache.item[2]
|
||||
newbook.title = query_library_cache.item[3]
|
||||
newbook.category = query_library_cache.item[4]
|
||||
cachedbooks += newbook
|
||||
|
||||
|
||||
@@ -270,9 +270,7 @@ var/global/list/datum/cachedbook/cachedbooks // List of our cached book datums
|
||||
if(5)
|
||||
dat += "<H3>Upload a New Title</H3>"
|
||||
if(!scanner)
|
||||
for(var/obj/machinery/libraryscanner/S in range(9))
|
||||
scanner = S
|
||||
break
|
||||
findscanner(9)
|
||||
if(!scanner)
|
||||
dat += "<FONT color=red>No scanner found within wireless network range.</FONT><BR>"
|
||||
else if(!scanner.cache)
|
||||
@@ -288,6 +286,8 @@ var/global/list/datum/cachedbook/cachedbooks // List of our cached book datums
|
||||
dat += "<A href='?src=\ref[src];switchscreen=0'>(Return to main menu)</A><BR>"
|
||||
if(6)
|
||||
dat += "<h3>Post Title to Newscaster</h3>"
|
||||
if(!scanner)
|
||||
scanner = findscanner(9)
|
||||
if(!scanner)
|
||||
dat += "<FONT color=red>No scanner found within wireless network range.</FONT><BR>"
|
||||
else if(!scanner.cache)
|
||||
@@ -313,6 +313,11 @@ var/global/list/datum/cachedbook/cachedbooks // List of our cached book datums
|
||||
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
|
||||
popup.open()
|
||||
|
||||
/obj/machinery/computer/libraryconsole/bookmanagement/proc/findscanner(viewrange)
|
||||
for(var/obj/machinery/libraryscanner/S in range(viewrange))
|
||||
return S
|
||||
return null
|
||||
|
||||
/obj/machinery/computer/libraryconsole/bookmanagement/proc/print_forbidden_lore(mob/user)
|
||||
var/spook = pick("blood", "brass")
|
||||
var/turf/T = get_turf(src)
|
||||
@@ -321,14 +326,14 @@ var/global/list/datum/cachedbook/cachedbooks // List of our cached book datums
|
||||
else
|
||||
new /obj/item/clockwork/slab(T)
|
||||
|
||||
user << "<span class='warning'>Your sanity barely endures the seconds spent in the vault's browsing window. The only thing to remind you of this when you stop browsing is a [spook == "blood" ? "dusty old tome" : "strange metal tablet"] sitting on the desk. You don't really remember printing it.[spook == "brass" ? " And how did it print something made of metal?" : ""]</span>"
|
||||
to_chat(user, "<span class='warning'>Your sanity barely endures the seconds spent in the vault's browsing window. The only thing to remind you of this when you stop browsing is a [spook == "blood" ? "dusty old tome" : "strange metal tablet"] sitting on the desk. You don't really remember printing it.[spook == "brass" ? " And how did it print something made of metal?" : ""]</span>")
|
||||
user.visible_message("[user] stares at the blank screen for a few moments, [user.p_their()] expression frozen in fear. When [user.p_they()] finally awaken[user.p_s()] from it, [user.p_they()] look[user.p_s()] a lot older.", 2)
|
||||
|
||||
/obj/machinery/computer/libraryconsole/bookmanagement/attackby(obj/item/weapon/W, mob/user, params)
|
||||
if(istype(W, /obj/item/weapon/barcodescanner))
|
||||
var/obj/item/weapon/barcodescanner/scanner = W
|
||||
scanner.computer = src
|
||||
user << "[scanner]'s associated machine has been set to [src]."
|
||||
to_chat(user, "[scanner]'s associated machine has been set to [src].")
|
||||
audible_message("[src] lets out a low, short blip.")
|
||||
else
|
||||
return ..()
|
||||
@@ -414,9 +419,10 @@ var/global/list/datum/cachedbook/cachedbooks // List of our cached book datums
|
||||
var/sqlauthor = sanitizeSQL(scanner.cache.author)
|
||||
var/sqlcontent = sanitizeSQL(scanner.cache.dat)
|
||||
var/sqlcategory = sanitizeSQL(upload_category)
|
||||
var/DBQuery/query = dbcon.NewQuery("INSERT INTO [format_table_name("library")] (author, title, content, category, ckey, datetime) VALUES ('[sqlauthor]', '[sqltitle]', '[sqlcontent]', '[sqlcategory]', '[usr.ckey]', Now())")
|
||||
if(!query.Execute())
|
||||
usr << query.ErrorMsg()
|
||||
var/DBQuery/query_library_upload = dbcon.NewQuery("INSERT INTO [format_table_name("library")] (author, title, content, category, ckey, datetime) VALUES ('[sqlauthor]', '[sqltitle]', '[sqlcontent]', '[sqlcategory]', '[usr.ckey]', Now())")
|
||||
if(!query_library_upload.Execute())
|
||||
alert("Database error encountered uploading to Archive")
|
||||
return
|
||||
else
|
||||
log_game("[usr.name]/[usr.key] has uploaded the book titled [scanner.cache.name], [length(scanner.cache.dat)] signs")
|
||||
alert("Upload Complete. Uploaded title will be unavailable for printing for a short period")
|
||||
@@ -449,13 +455,14 @@ var/global/list/datum/cachedbook/cachedbooks // List of our cached book datums
|
||||
say("Printer unavailable. Please allow a short time before attempting to print.")
|
||||
else
|
||||
cooldown = world.time + PRINTER_COOLDOWN
|
||||
var/DBQuery/query = dbcon.NewQuery("SELECT * FROM [format_table_name("library")] WHERE id=[sqlid] AND isnull(deleted)")
|
||||
query.Execute()
|
||||
|
||||
while(query.NextRow())
|
||||
var/author = query.item[2]
|
||||
var/title = query.item[3]
|
||||
var/content = query.item[4]
|
||||
var/DBQuery/query_library_print = dbcon.NewQuery("SELECT * FROM [format_table_name("library")] WHERE id=[sqlid] AND isnull(deleted)")
|
||||
if(!query_library_print.Execute())
|
||||
say("PRINTER ERROR! Failed to print document (0x0000000F)")
|
||||
return
|
||||
while(query_library_print.NextRow())
|
||||
var/author = query_library_print.item[2]
|
||||
var/title = query_library_print.item[3]
|
||||
var/content = query_library_print.item[4]
|
||||
var/obj/item/weapon/book/B = new(get_turf(src))
|
||||
B.name = "Book: [title]"
|
||||
B.title = title
|
||||
@@ -477,7 +484,7 @@ var/global/list/datum/cachedbook/cachedbooks // List of our cached book datums
|
||||
say("Printer currently unavailable, please wait a moment.")
|
||||
if(href_list["printposter"])
|
||||
if(cooldown < world.time)
|
||||
new /obj/item/weapon/poster/legit(src.loc)
|
||||
new /obj/item/weapon/poster/random_official(src.loc)
|
||||
cooldown = world.time + PRINTER_COOLDOWN
|
||||
else
|
||||
say("Printer currently unavailable, please wait a moment.")
|
||||
@@ -563,7 +570,7 @@ var/global/list/datum/cachedbook/cachedbooks // List of our cached book datums
|
||||
if(stat)
|
||||
return
|
||||
if(busy)
|
||||
user << "<span class='warning'>The book binder is busy. Please wait for completion of previous operation.</span>"
|
||||
to_chat(user, "<span class='warning'>The book binder is busy. Please wait for completion of previous operation.</span>")
|
||||
return
|
||||
if(!user.drop_item())
|
||||
return
|
||||
|
||||
@@ -43,19 +43,18 @@
|
||||
if(prob(25))
|
||||
category = null
|
||||
var/c = category? " AND category='[sanitizeSQL(category)]'" :""
|
||||
var/DBQuery/query = dbcon.NewQuery("SELECT * FROM [format_table_name("library")] WHERE isnull(deleted)[c] GROUP BY title ORDER BY rand() LIMIT [amount];") // isdeleted copyright (c) not me
|
||||
if(query.Execute())
|
||||
while(query.NextRow())
|
||||
var/DBQuery/query_get_random_books = dbcon.NewQuery("SELECT * FROM [format_table_name("library")] WHERE isnull(deleted)[c] GROUP BY title ORDER BY rand() LIMIT [amount];") // isdeleted copyright (c) not me
|
||||
if(query_get_random_books.Execute())
|
||||
while(query_get_random_books.NextRow())
|
||||
var/obj/item/weapon/book/B = new(location)
|
||||
. += B
|
||||
B.author = query.item[2]
|
||||
B.title = query.item[3]
|
||||
B.dat = query.item[4]
|
||||
B.author = query_get_random_books.item[2]
|
||||
B.title = query_get_random_books.item[3]
|
||||
B.dat = query_get_random_books.item[4]
|
||||
B.name = "Book: [B.title]"
|
||||
B.icon_state= "book[rand(1,8)]"
|
||||
else
|
||||
log_game("SQL ERROR populating library bookshelf. Category: \[[category]\], Count: [amount], Error: \[[query.ErrorMsg()]\]\n")
|
||||
|
||||
return
|
||||
|
||||
/obj/structure/bookcase/random/fiction
|
||||
name = "bookcase (Fiction)"
|
||||
|
||||
@@ -43,76 +43,59 @@
|
||||
/obj/item/soapstone/examine(mob/user)
|
||||
. = ..()
|
||||
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."
|
||||
to_chat(user, "It has [remaining_uses] uses left.")
|
||||
|
||||
/obj/item/soapstone/afterattack(atom/target, mob/user, proximity)
|
||||
var/turf/T = get_turf(target)
|
||||
if(!proximity)
|
||||
return
|
||||
|
||||
var/obj/structure/chisel_message/existing_message = locate() in T
|
||||
|
||||
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 && !already_message)
|
||||
// The dull chisel is dull.
|
||||
user << "<span class='warning'>[src] is [w_dull].</span>"
|
||||
if(!remaining_uses && !existing_message)
|
||||
to_chat(user, "<span class='warning'>[src] is too worn out to use.</span>")
|
||||
return
|
||||
|
||||
if(!good_chisel_message_location(T))
|
||||
user << "<span class='warning'>It's not appropriate to [w_engrave] on [T].</span>"
|
||||
to_chat(user, "<span class='warning'>It's not appropriate to [w_engrave] on [T].</span>")
|
||||
return
|
||||
|
||||
if(already_message)
|
||||
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>")
|
||||
if(existing_message)
|
||||
user.visible_message("<span class='notice'>[user] starts erasing [existing_message].</span>", "<span class='notice'>You start erasing [existing_message].</span>", "<span class='italics'>You hear a [w_chipping] sound.</span>")
|
||||
playsound(loc, 'sound/items/gavel.ogg', 50, 1, -1)
|
||||
|
||||
// Removing our own messages refunds a charge
|
||||
|
||||
if(do_after(user, tool_speed, target=target))
|
||||
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)
|
||||
if(do_after(user, tool_speed, target = existing_message))
|
||||
user.visible_message("<span class='notice'>[user] erases [existing_message].</span>", "<span class='notice'>You erase [existing_message][existing_message.creator_key == user.ckey ? ", refunding a use" : ""].</span>")
|
||||
existing_message.persists = FALSE
|
||||
qdel(existing_message)
|
||||
playsound(loc, 'sound/items/gavel.ogg', 50, 1, -1)
|
||||
if(our_message)
|
||||
if(existing_message.creator_key == user.ckey)
|
||||
refund_use()
|
||||
return
|
||||
|
||||
var/message = stripped_input(user, "What would you like to [w_engrave]?", "[name] Message")
|
||||
var/message = stripped_input(user, "What would you like to [w_engrave]?", "Leave a message")
|
||||
if(!message)
|
||||
user << "You decide not to [w_engrave] anything."
|
||||
to_chat(user, "<span class='notice'>You decide not to [w_engrave] anything.</span>")
|
||||
return
|
||||
|
||||
if(!target.Adjacent(user) && locate(/obj/structure/chisel_message) in T)
|
||||
user << "You decide not to [w_engrave] anything."
|
||||
to_chat(user, "<span class='warning'>Someone wrote here before you chose! Find another spot.</span>")
|
||||
return
|
||||
|
||||
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(can_use() && do_after(user, tool_speed, target=T) && can_use())
|
||||
user.visible_message("<span class='notice'>[user] starts [w_engraving] a message into [T]...</span>", "<span class='notice'>You start [w_engraving] a message into [T]...</span>", "<span class='italics'>You hear a [w_chipping] sound.</span>")
|
||||
if(can_use() && do_after(user, tool_speed, target = T) && can_use()) //This looks messy but it's actually really clever!
|
||||
if(!locate(/obj/structure/chisel_message in T))
|
||||
user << "You [w_engrave] a message into [T]."
|
||||
user.visible_message("<span class='notice'>[user] leaves a message for future spacemen!</span>", "<span class='notice'>You [w_engrave] a message into [T]!</span>", "<span class='italics'>You hear a [w_chipping] sound.</span>")
|
||||
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/can_use()
|
||||
if(remaining_uses == -1 || remaining_uses >= 0)
|
||||
. = TRUE
|
||||
else
|
||||
. = FALSE
|
||||
return remaining_uses == -1 || remaining_uses >= 0
|
||||
|
||||
/obj/item/soapstone/proc/remove_use()
|
||||
if(remaining_uses <= 0)
|
||||
// -1 == unlimited, 0 == empty
|
||||
return
|
||||
|
||||
remaining_uses--
|
||||
check_name()
|
||||
|
||||
@@ -158,6 +141,7 @@
|
||||
desc = "A message from a past traveler."
|
||||
icon = 'icons/obj/stationobjs.dmi'
|
||||
icon_state = "soapstone_message"
|
||||
layer = HIGH_OBJ_LAYER
|
||||
density = 0
|
||||
anchored = 1
|
||||
luminosity = 1
|
||||
@@ -189,7 +173,7 @@
|
||||
creator_name = user.real_name
|
||||
creator_key = user.ckey
|
||||
realdate = world.timeofday
|
||||
map = MAP_NAME
|
||||
map = SSmapping.config.map_name
|
||||
update_icon()
|
||||
|
||||
/obj/structure/chisel_message/update_icon()
|
||||
@@ -204,7 +188,7 @@
|
||||
data["creator_name"] = creator_name
|
||||
data["creator_key"] = creator_key
|
||||
data["realdate"] = realdate
|
||||
data["map"] = MAP_NAME
|
||||
data["map"] = SSmapping.config.map_name
|
||||
var/turf/T = get_turf(src)
|
||||
data["x"] = T.x
|
||||
data["y"] = T.y
|
||||
@@ -231,7 +215,7 @@
|
||||
|
||||
/obj/structure/chisel_message/examine(mob/user)
|
||||
..()
|
||||
user << "<span class='warning'>[hidden_message]</span>"
|
||||
to_chat(user, "<span class='warning'>[hidden_message]</span>")
|
||||
|
||||
/obj/structure/chisel_message/Destroy()
|
||||
if(persists)
|
||||
|
||||
Reference in New Issue
Block a user