Kathira Custom Item (#12367)

This commit is contained in:
Geeves
2021-08-25 16:31:39 +02:00
committed by GitHub
parent 9b62f0d8e6
commit fbc98d3208
7 changed files with 153 additions and 6 deletions
+8
View File
@@ -2126,3 +2126,11 @@ All custom items with worn sprites must follow the contained sprite system: http
icon_state = "pax_bag"
item_state = "pax_bag"
contained_sprite = TRUE
/obj/item/journal/fluff/kathira // Blue Leather-Bound Journal - Kathira El-Hashem - TheGreyWolf
name = "blue leather-bound journal"
desc = "A blue journal emblazoned with the New Kingdom of Adhomai's flag across the cover."
closed_desc = " The pages within are a mix of clearly indexed case files, and study notes alongside less clearly indexed pages that appears to be fragmented thoughts, not unlike a diary. The very first page of the journal reads “dedicated to Qirandri Mrorirhaldarr” and is signed “Mrradar Sanufar” underneath."
icon = 'icons/obj/custom_items/kathira_journal.dmi'
icon_state = "kath_journal"
item_state = "kath_journal"
+32 -4
View File
@@ -7,6 +7,8 @@
drop_sound = 'sound/items/drop/paper.ogg'
pickup_sound = 'sound/items/pickup/paper.ogg'
var/can_write = FALSE
/obj/item/folder/blue
desc = "A blue folder."
icon_state = "folder_blue"
@@ -52,7 +54,7 @@
var/dat = "<title>[name]</title>"
for(var/obj/item/paper/P in src)
dat += "<A href='?src=\ref[src];remove=\ref[P]'>Remove</A> <A href='?src=\ref[src];rename=\ref[P]'>Rename</A> - <A href='?src=\ref[src];read=\ref[P]'>[P.name]</A><BR>"
dat += "[can_write ? "<A href='?src=\ref[src];write=\ref[P]'>Write</A> " : ""]<A href='?src=\ref[src];remove=\ref[P]'>Remove</A> <A href='?src=\ref[src];rename=\ref[P]'>Rename</A> - <A href='?src=\ref[src];read=\ref[P]'>[P.name]</A><BR>"
for(var/obj/item/photo/Ph in src)
dat += "<A href='?src=\ref[src];remove=\ref[Ph]'>Remove</A> <A href='?src=\ref[src];rename=\ref[Ph]'>Rename</A> - <A href='?src=\ref[src];look=\ref[Ph]'>[Ph.name]</A><BR>"
for(var/obj/item/paper_bundle/Pb in src)
@@ -69,14 +71,19 @@
if((usr.stat || usr.restrained()))
return
if(src.loc == usr)
if(loc_check(usr))
if(href_list["remove"])
var/obj/item/P = locate(href_list["remove"])
if(P && (P.loc == src) && istype(P))
P.forceMove(usr.loc)
usr.put_in_hands(P)
handle_post_remove()
else if(href_list["write"])
var/obj/item/paper/P = locate(href_list["write"])
var/obj/item/I = usr.get_inactive_hand()
if(P && I && (P.loc == src) && istype(P) && I.ispen())
P.attackby(I, usr)
else if(href_list["read"])
var/obj/item/paper/P = locate(href_list["read"])
if(P && (P.loc == src) && istype(P))
@@ -111,6 +118,14 @@
update_icon()
return
/obj/item/folder/proc/loc_check(var/atom/A)
if(loc == A)
return TRUE
return FALSE
/obj/item/folder/proc/handle_post_remove()
return
/obj/item/folder/blue/nka/Initialize()
. = ..()
for (var/I = 1 to 5)
@@ -119,4 +134,17 @@
/obj/item/folder/filled/Initialize()
. = ..()
for (var/I = 1 to 10)
new /obj/item/paper(src)
new /obj/item/paper(src)
/obj/item/folder/embedded
name = "index"
can_write = TRUE
/obj/item/folder/embedded/loc_check(var/atom/A)
if(loc.loc == A)
return TRUE
return FALSE
/obj/item/folder/embedded/handle_post_remove()
if(!length(contents))
qdel(src)
+96
View File
@@ -0,0 +1,96 @@
/obj/item/journal
name = "journal"
desc = "A journal, kind of like a folder, but bigger! And personal."
var/closed_desc
desc_info = "Ctrl-click this while it's on your person to open this journal."
icon = 'icons/obj/contained_items/misc/journal.dmi'
icon_state = "journal"
item_state = "journal"
contained_sprite = TRUE
update_icon_on_init = TRUE
throw_speed = 1
throw_range = 5
w_class = ITEMSIZE_NORMAL
attack_verb = list("bashed", "whacked", "educated")
drop_sound = 'sound/items/drop/book.ogg'
pickup_sound = 'sound/items/pickup/book.ogg'
var/static/list/insertables = list(/obj/item/paper, /obj/item/photo, /obj/item/paper_bundle, /obj/item/sample)
var/open = FALSE
var/list/indices
/obj/item/journal/Destroy()
for(var/obj/item/folder/embedded/E as anything in indices)
qdel(E)
return ..()
/obj/item/journal/update_icon()
if(!open)
icon_state = "[initial(icon_state)]_closed"
else if(LAZYLEN(indices))
icon_state = "[initial(icon_state)]_writing"
else
icon_state = initial(icon_state)
if(closed_desc)
desc = open ? initial(desc) + closed_desc : initial(desc)
/obj/item/journal/CtrlClick(mob/user)
if(loc == user)
open = !open
to_chat(user, SPAN_NOTICE("You [open ? "open" : "close"] \the [src]."))
update_icon()
return
return ..()
/obj/item/journal/attack_self(mob/user)
if(!open)
to_chat(user, SPAN_WARNING("You can't look inside \the [src] while it's closed."))
return
if(!LAZYLEN(indices))
to_chat(user, SPAN_WARNING("\The [src] doesn't have anything inside!"))
return
var/selected_folder = input(user, "Select an index to view.", "Index View") as null|anything in indices
if(isnull(selected_folder))
return
var/obj/item/folder/embedded/E = indices[selected_folder]
E.attack_self(user)
/obj/item/journal/attackby(obj/item/I, mob/user)
if(is_type_in_list(I, insertables))
if(!open)
to_chat(user, SPAN_WARNING("You can't put anything into \the [src] while it's closed."))
return
var/obj/item/folder/embedded/E
var/list/options = LAZYLEN(indices) ? indices + "New Index" : list("New Index")
var/selected_folder = input(user, "Select an index to insert this into.", "Index Selection") as null|anything in options
if(isnull(selected_folder))
return
if(selected_folder == "New Index")
E = generate_index(user)
else
E = indices[selected_folder]
if(!E)
return
user.drop_from_inventory(I, E)
to_chat(user, SPAN_NOTICE("You put \the [I] into \the [E]."))
update_icon()
return
/obj/item/journal/proc/generate_index(var/mob/user)
var/obj/item/folder/embedded/E = new /obj/item/folder/embedded(src)
var/index_name = sanitize(input(user, "Enter the index' name.", "Index Name") as text|null)
if(!index_name)
qdel(E)
return null
if(index_name == "New Index" || LAZYISIN(indices, index_name))
index_name = "Index ([length(indices) + 1])"
E.name = index_name
LAZYSET(indices, E.name, E)
destroyed_event.register(E, src, .proc/remove_index)
return E
/obj/item/journal/proc/remove_index(var/obj/item/folder/embedded/E)
LAZYREMOVE(indices, E.name)
update_icon()
+16 -2
View File
@@ -433,6 +433,8 @@
return
var/obj/item/i = usr.get_active_hand() // Check to see if he still got that darn pen, also check if he's using a crayon or pen.
if(!i || !i.ispen())
i = usr.get_inactive_hand()
var/obj/item/clipboard/c
var/iscrayon = FALSE
var/isfountain = FALSE
@@ -463,8 +465,7 @@
else
isfountain = FALSE
// if paper is not in usr, then it must be near them, or in a clipboard or folder, which must be in or near usr
if(src.loc != usr && !src.Adjacent(usr) && !((istype(src.loc, /obj/item/clipboard) || istype(src.loc, /obj/item/folder)) && (src.loc.loc == usr || src.loc.Adjacent(usr)) ) )
if(!write_check(usr))
return
var/last_fields_value = fields
@@ -495,6 +496,19 @@
if(c)
c.update_icon()
/obj/item/paper/proc/write_check(var/mob/user)
. = TRUE
// if paper is not in usr, then it must be near them, or in a clipboard or folder, which must be in or near usr
if(loc != user && !Adjacent(user))
. = FALSE
if(!. && istype(loc, /obj/item/clipboard))
var/obj/item/clipboard/C = loc
if(C.loc == user || C.Adjacent(user))
. = TRUE
if(!. && istype(loc, /obj/item/folder))
var/obj/item/folder/F = loc
if(F.loc_check(user) || F.Adjacent(user))
. = TRUE
/obj/item/paper/attackby(var/obj/item/P, mob/user)
..()