mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-21 12:02:31 +01:00
Kathira Custom Item (#12367)
This commit is contained in:
@@ -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"
|
||||
@@ -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)
|
||||
@@ -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()
|
||||
@@ -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)
|
||||
..()
|
||||
|
||||
Reference in New Issue
Block a user