mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-10 10:21:11 +00:00
There are many files, folders and chunks of code in areas that make absolutely no sense and thanks to the defines being located mostly in a completely separate file, it can be damn-near impossible to find something. Before moving defines to where the rest of their code is located; I'm going to move some code around into places that actually make sense to begin with. I'll mainly be focusing on the code/game/objects folder. This commit mainly lays the groundwork for the work I'll be doing by adding in the effects, structures, decals and turfs folders. I'll slowly be moving appropriate files and code into these folders. I may end up moving machinery into 'objects' and mech stuff into its own module folder but I'll ask for some opinions on coderbus before doing that. I've also gotten rid of the /magic/ folder. I've moved the library stuff into its own folder in modules/library, the cult stuff is now in gamemode/cult with the rest of it and musician.dm is now in objects/structures since the piano is a structure apparently. I think I've got the hang of how DM and SVN handles folders and files but it's quite possible that something will break simply by svn committing it oddly. Please let me know if that's the case! Remember to clean compile. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4513 316c924e-a436-60f5-8080-3fe189b3f50e
236 lines
7.1 KiB
Plaintext
236 lines
7.1 KiB
Plaintext
/* Library Items
|
|
*
|
|
* Contains:
|
|
* Bookcase
|
|
* Book
|
|
* Barcode Scanner
|
|
*/
|
|
|
|
|
|
/*
|
|
* Bookcase
|
|
*/
|
|
|
|
/obj/structure/bookcase
|
|
name = "bookcase"
|
|
icon = 'icons/obj/library.dmi'
|
|
icon_state = "book-0"
|
|
anchored = 1
|
|
density = 1
|
|
opacity = 1
|
|
|
|
/obj/structure/bookcase/attackby(obj/O as obj, mob/user as mob)
|
|
if(istype(O, /obj/item/weapon/book))
|
|
user.drop_item()
|
|
O.loc = src
|
|
update_icon()
|
|
else if(istype(O, /obj/item/weapon/pen))
|
|
var/newname = copytext(sanitize(input("What would you like to title this bookshelf?") as text|null),1,MAX_MESSAGE_LEN)
|
|
if(!newname)
|
|
return
|
|
else
|
|
name = ("bookcase ([sanitize(newname)])")
|
|
else
|
|
..()
|
|
|
|
/obj/structure/bookcase/attack_hand(var/mob/user as mob)
|
|
if(contents.len)
|
|
var/obj/item/weapon/book/choice = input("Which book would you like to remove from the shelf?") in contents as obj|null
|
|
if(choice)
|
|
if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr))
|
|
return
|
|
if(ishuman(user))
|
|
if(!user.get_active_hand())
|
|
user.put_in_hands(choice)
|
|
else
|
|
choice.loc = get_turf(src)
|
|
update_icon()
|
|
|
|
/obj/structure/bookcase/ex_act(severity)
|
|
switch(severity)
|
|
if(1.0)
|
|
for(var/obj/item/weapon/book/b in contents)
|
|
del(b)
|
|
del(src)
|
|
return
|
|
if(2.0)
|
|
for(var/obj/item/weapon/book/b in contents)
|
|
if (prob(50)) b.loc = (get_turf(src))
|
|
else del(b)
|
|
del(src)
|
|
return
|
|
if(3.0)
|
|
if (prob(50))
|
|
for(var/obj/item/weapon/book/b in contents)
|
|
b.loc = (get_turf(src))
|
|
del(src)
|
|
return
|
|
else
|
|
return
|
|
|
|
/obj/structure/bookcase/update_icon()
|
|
if(contents.len < 5)
|
|
icon_state = "book-[contents.len]"
|
|
else
|
|
icon_state = "book-5"
|
|
|
|
|
|
/obj/structure/bookcase/manuals/medical
|
|
name = "Medical Manuals bookcase"
|
|
|
|
New()
|
|
..()
|
|
new /obj/item/weapon/book/manual/medical_cloning(src)
|
|
update_icon()
|
|
|
|
|
|
/obj/structure/bookcase/manuals/engineering
|
|
name = "Engineering Manuals bookcase"
|
|
|
|
New()
|
|
..()
|
|
new /obj/item/weapon/book/manual/engineering_construction(src)
|
|
new /obj/item/weapon/book/manual/engineering_particle_accelerator(src)
|
|
new /obj/item/weapon/book/manual/engineering_hacking(src)
|
|
new /obj/item/weapon/book/manual/engineering_guide(src)
|
|
new /obj/item/weapon/book/manual/engineering_singularity_safety(src)
|
|
new /obj/item/weapon/book/manual/robotics_cyborgs(src)
|
|
update_icon()
|
|
|
|
/obj/structure/bookcase/manuals/research_and_development
|
|
name = "R&D Manuals bookcase"
|
|
|
|
New()
|
|
..()
|
|
new /obj/item/weapon/book/manual/research_and_development(src)
|
|
update_icon()
|
|
|
|
|
|
/*
|
|
* Book
|
|
*/
|
|
/obj/item/weapon/book
|
|
name = "book"
|
|
icon = 'icons/obj/library.dmi'
|
|
icon_state ="book"
|
|
throw_speed = 1
|
|
throw_range = 5
|
|
w_class = 1.0
|
|
flags = FPRINT | TABLEPASS
|
|
attack_verb = list("bashed", "whacked", "educated")
|
|
var/dat // Actual page content
|
|
var/due_date = 0 // Game time in 1/10th seconds
|
|
var/author // Who wrote the thing, can be changed by pen or PC. It is not automatically assigned
|
|
var/unique = 0 // 0 - Normal book, 1 - Should not be treated as normal book, unable to be copied, unable to be modified
|
|
var/title // The real name of the book.
|
|
|
|
/obj/item/weapon/book/attack_self(var/mob/user as mob)
|
|
if(src.dat)
|
|
user << browse("<TT><I>Penned by [author].</I></TT> <BR>" + "[dat]", "window=book")
|
|
user.visible_message("[user] opens a book titled \"[src.title]\" and begins reading intently.")
|
|
onclose(user, "book")
|
|
else
|
|
user << "This book is completely blank!"
|
|
|
|
/obj/item/weapon/book/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
|
if(istype(W, /obj/item/weapon/pen))
|
|
if(unique)
|
|
user << "These pages don't seem to take the ink well. Looks like you can't modify it."
|
|
return
|
|
var/choice = input("What would you like to change?") in list("Title", "Contents", "Author", "Cancel")
|
|
switch(choice)
|
|
if("Title")
|
|
var/newtitle = copytext(reject_bad_text(input("Write a new title:") as text|null),1,MAX_MESSAGE_LEN)
|
|
if(!newtitle)
|
|
usr << "The title is invalid."
|
|
return
|
|
else
|
|
src.name = newtitle
|
|
src.title = newtitle
|
|
if("Contents")
|
|
var/content = strip_html(input("Write your book's contents (HTML NOT allowed):"),8192) as message|null
|
|
if(!content)
|
|
usr << "The content is invalid."
|
|
return
|
|
else
|
|
src.dat += content
|
|
if("Author")
|
|
var/newauthor = copytext(sanitize(input("Write the author's name:") as text|null),1,MAX_NAME_LEN)
|
|
if(!newauthor)
|
|
usr << "The name is invalid."
|
|
return
|
|
else
|
|
src.author = newauthor
|
|
else
|
|
return
|
|
else if(istype(W, /obj/item/weapon/barcodescanner))
|
|
var/obj/item/weapon/barcodescanner/scanner = W
|
|
if(!scanner.computer)
|
|
user << "[W]'s screen flashes: 'No associated computer found!'"
|
|
else
|
|
switch(scanner.mode)
|
|
if(0)
|
|
scanner.book = src
|
|
user << "[W]'s screen flashes: 'Book stored in buffer.'"
|
|
if(1)
|
|
scanner.book = src
|
|
scanner.computer.buffer_book = src.name
|
|
user << "[W]'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 == src.name)
|
|
scanner.computer.checkouts.Remove(b)
|
|
user << "[W]'s screen flashes: 'Book stored in buffer. Book has been checked in.'"
|
|
return
|
|
user << "[W]'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 << "[W]'s screen flashes: 'Book stored in buffer. Title already present in inventory, aborting to avoid duplicate entry.'"
|
|
return
|
|
scanner.computer.inventory.Add(src)
|
|
user << "[W]'s screen flashes: 'Book stored in buffer. Title added to general inventory.'"
|
|
else
|
|
..()
|
|
|
|
|
|
/*
|
|
* Barcode Scanner
|
|
*/
|
|
/obj/item/weapon/barcodescanner
|
|
name = "barcode scanner"
|
|
icon = 'icons/obj/library.dmi'
|
|
icon_state ="scanner"
|
|
throw_speed = 1
|
|
throw_range = 5
|
|
w_class = 1.0
|
|
flags = FPRINT | TABLEPASS
|
|
var/obj/machinery/librarycomp/computer // Associated computer - Modes 1 to 3 use this
|
|
var/obj/item/weapon/book/book // Currently scanned book
|
|
var/mode = 0 // 0 - Scan only, 1 - Scan and Set Buffer, 2 - Scan and Attempt to Check In, 3 - Scan and Attempt to Add to Inventory
|
|
|
|
attack_self(mob/user as mob)
|
|
mode += 1
|
|
if(mode > 3)
|
|
mode = 0
|
|
user << "[src] Status Display:"
|
|
var/modedesc
|
|
switch(mode)
|
|
if(0)
|
|
modedesc = "Scan book to local buffer."
|
|
if(1)
|
|
modedesc = "Scan book to local buffer and set associated computer buffer to match."
|
|
if(2)
|
|
modedesc = "Scan book to local buffer, attempt to check in scanned book."
|
|
if(3)
|
|
modedesc = "Scan book to local buffer, attempt to add book to general inventory."
|
|
else
|
|
modedesc = "ERROR"
|
|
user << " - Mode [mode] : [modedesc]"
|
|
if(src.computer)
|
|
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" |