Merge pull request #5732 from DeityLink/paintings

[Content] Merch Computer revamp and Paintings
This commit is contained in:
Rob Nelson
2015-10-04 00:30:23 -07:00
34 changed files with 558 additions and 207 deletions

View File

@@ -1179,7 +1179,7 @@ var/list/WALLITEMS = list(
"/obj/machinery/newscaster", "/obj/machinery/firealarm", "/obj/structure/noticeboard", "/obj/machinery/door_control",
"/obj/machinery/computer/security/telescreen", "/obj/machinery/embedded_controller/radio/simple_vent_controller",
"/obj/item/weapon/storage/secure/safe", "/obj/machinery/door_timer", "/obj/machinery/flasher", "/obj/machinery/keycard_auth",
"/obj/structure/mirror", "/obj/structure/closet/fireaxecabinet", "obj/structure/sign"
"/obj/structure/mirror", "/obj/structure/closet/fireaxecabinet", "obj/structure/sign", "obj/structure/painting"
)
/proc/gotwallitem(loc, dir)
//writepanic("[__FILE__].[__LINE__] (no type)([usr ? usr.ckey : ""]) \\/proc/gotwallitem() called tick#: [world.time]")
@@ -1366,6 +1366,13 @@ proc/find_holder_of_type(var/atom/reference,var/typepath) //Returns the first ob
/proc/print_runtime(exception/e)
world.log << "[time_stamp()] Runtime detected\n[e] at [e.file]:[e.line]\n [e.desc]"
/proc/transfer_fingerprints(atom/A,atom/B)//synchronizes the fingerprints between two atoms. Useful when you have two different atoms actually being different states of a same object.
if(!A || !B)
return
B.fingerprints = A.fingerprints
B.fingerprintshidden = A.fingerprintshidden
B.fingerprintslast = A.fingerprintslast
/world/Error(exception/e)
print_runtime(e)
..()

View File

@@ -282,7 +282,7 @@ var/global/list/rune_list = list() // HOLY FUCK WHY ARE WE LOOPING THROUGH THE W
<h3>Manifest a ghost</h3>
Unlike the Raise Dead rune, this rune does not require any special preparations or vessels. Instead of using full lifeforce of a sacrifice, it will drain YOUR lifeforce. Stand on the rune and invoke it. If theres a ghost standing over the rune, it will materialise, and will live as long as you dont move off the rune or die. You can put a paper with a name on the rune to make the new body look like that person.<br>
<h3>Imbue a talisman</h3>
This rune allows you to imbue the magic of some runes into paper talismans. Create an imbue rune, then an appropriate rune beside it. Put an empty piece of paper on the imbue rune and invoke it. You will now have a one-use talisman with the power of the target rune. Using a talisman drains some health, so be careful with it. You can imbue a talisman with power of the following runes: summon tome, reveal, conceal, teleport, tisable technology, communicate, deafen, blind and stun.<br>
This rune allows you to imbue the magic of some runes into paper talismans. Create an imbue rune, then an appropriate rune beside it. Put an empty piece of paper on the imbue rune and invoke it. You will now have a one-use talisman with the power of the target rune. Using a talisman drains some health, so be careful with it. You can imbue a talisman with power of the following runes: summon tome, reveal, conceal, teleport, disable technology, communicate, deafen, blind and stun.<br>
<h3>Sacrifice</h3>
Sacrifice rune allows you to sacrifice a living thing or a body to the Geometer of Blood. Monkeys and dead humans are the most basic sacrifices, they might or might not be enough to gain His favor. A living human is what a real sacrifice should be, however, you will need 3 people chanting the invocation to sacrifice a living person.<br>Silicons can also be disposed of using this rune.<br>
<h3>Create a wall</h3>

View File

@@ -743,7 +743,9 @@
qdel(newtalisman)
invocation("rune_imbue")
else
return fizzle()
usr.say("H'drak v[pick("'","`")]loso, mir'kanas verbot!")
usr.show_message("\<span class='warning'>The markings pulse with a small burst of light, then fall dark.</span>", 3, "<span class='warning'>You hear a faint fizzle.</span>", 2)
usr << "<span class='notice'> You remembered the words correctly, but the rune isn't working properly. Maybe you're missing something in the ritual.</span>"
/////////////////////////////////////////THIRTEENTH RUNE

View File

@@ -4,6 +4,37 @@
var/uses = 0
var/nullblock = 0
/obj/item/weapon/paper/talisman/examine(mob/user)
..()
if(iscultist(user) || isobserver(user))
switch(imbue)
if("newtome")
user << "This talisman has been imbued with the power of spawning a new Arcane Tome."
if("armor")
user << "This talisman has been imbued with the power of clothing yourself in cult fighting gear."
if("emp")
user << "This talisman has been imbued with the power of disabling technology in a small radius around you."
if("conceal")
user << "This talisman has been imbued with the power of concealing nearby runes."
if("revealrunes")
user << "This talisman has been imbued with the power of revealing hidden nearby runes."
if("ire", "ego", "nahlizet", "certum", "veri", "jatkaa", "balaq", "mgar", "karazet", "geeri")
user << "This talisman has been imbued with the power of taking you to someplace else. You can read <i>[imbue]</i> on it."
if("communicate")
user << "This talisman has been imbued with the power of communicating your whispers to your allies."
if("deafen")
user << "This talisman has been imbued with the power of deafening visible enemies."
if("blind")
user << "This talisman has been imbued with the power of blinding visible enemies."
if("runestun")
user << "This talisman has been imbued with the power of paralyzing the beings you touch with it. The effect works on silicons as well, but humans will also be muted for a short time."
if("supply")
user << "This talisman has been imbued with the power of providing you and your allies with some supplies to start your cult."
else
user << "This talisman.....has no particular power. Is this some kind of joke?"
else
user << "Something about the blood stains on this paper fills you with uneasiness."
/obj/item/weapon/paper/talisman/proc/findNullRod(var/atom/target)
//writepanic("[__FILE__].[__LINE__] ([src.type])([usr ? usr.ckey : ""]) \\/obj/item/weapon/paper/talisman/proc/findNullRod() called tick#: [world.time]")
if(istype(target,/obj/item/weapon/nullrod))

View File

@@ -205,7 +205,7 @@
var/datum/transaction/T = new()
T.target_name = "[linked_account.owner_name] (via [src.name])"
T.purpose = "Purchase of [appdatum ? "[appdatum.name]" : "a new PDA"]"
T.amount = "[transaction_amount]"
T.amount = "-[transaction_amount]"
T.source_terminal = src.name
T.date = current_date_string
T.time = worldtime2text()

View File

@@ -3,9 +3,88 @@
icon = 'icons/obj/computer.dmi'
icon_state = "store"
circuit = "/obj/item/weapon/circuitboard/merch"
var/datum/html_interface/interface
var/tmp/next_process = 0
light_color = LIGHT_COLOR_ORANGE
var/categories = list(
"Food" = list(
/datum/storeitem/menu1,
/datum/storeitem/menu2,
),
"Tools" = list(
/datum/storeitem/pen,
/datum/storeitem/wrapping_paper,
),
"Electronics" = list(
/datum/storeitem/boombox,
),
"Toys" = list(
/datum/storeitem/beachball,
/datum/storeitem/snap_pops,
/datum/storeitem/crayons,
),
"Clothing" = list(
/datum/storeitem/robotnik_labcoat,
/datum/storeitem/robotnik_jumpsuit,
),
"Luxury" = list(
/datum/storeitem/photo_album,
/datum/storeitem/painting,
),
)
/obj/machinery/computer/merch/New()
..()
var/head = {"
<style type="text/css">
span.area
{
display: block;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
width: auto;
}
</style>
"}
src.interface = new/datum/html_interface/nanotrasen(src, src.name, 800, 700, head)
html_machines += src
init_ui()
/obj/machinery/computer/merch/proc/init_ui()
var/dat = {"<tbody id="StoreTable">"}
for(var/category_name in categories)
var/list/category_items = categories[category_name]
dat += {"
<table>
<th><h2>[category_name]</h2></th>
"}
for(var/store_item in category_items)
var/datum/storeitem/SI = new store_item()
dat += {"
<tr><td><A href='?src=\ref[src];choice=buy;chosen_item=[store_item]'>[get_display_name(SI)]</A></td></tr>
<tr><td><i>[SI.desc]</i></td></tr>
"}
dat += "</table>"
dat += "</tbody>"
interface.updateLayout(dat)
/obj/machinery/computer/merch/Destroy()
..()
html_machines -= src
qdel(interface)
interface = null
/obj/item/weapon/circuitboard/merch
name = "\improper Merchandise Computer Circuitboard"
build_path = /obj/machinery/computer/merch
@@ -20,134 +99,39 @@
src.add_hiddenprint(user)
return attack_hand(user)
/obj/machinery/computer/merch/attack_hand(mob/user as mob)
user.set_machine(src)
add_fingerprint(user)
/obj/machinery/computer/merch/proc/get_display_name(var/datum/storeitem/storeitem)
return "[storeitem.name] ([!(storeitem.cost) ? "free" : "[storeitem.cost]$"])"
if(stat & (BROKEN|NOPOWER))
/obj/machinery/computer/merch/attack_hand(var/mob/user)
. = ..()
if(.)
interface.hide(user)
return
var/obj/item/weapon/card/id/card = user.get_id_card()
interact(user)
var/balance=0
/obj/machinery/computer/merch/interact(mob/user)
if(stat & (BROKEN|NOPOWER))
return
if(user.stat || user.restrained() || !allowed(user))
return
if(card)
balance = card.GetBalance()
var/dat = {"
<html>
<head>
<title>[command_name()] Merchandise</title>
<style type="text/css">
* {
font-family:sans-serif;
font-size:x-small;
}
html {
background:#333;
color:#999;
}
a {
color:#cfcfcf;
text-decoration:none;
font-weight:bold;
}
a:hover {
color:#ffffff;
}
tr {
background:#303030;
border-radius:6px;
margin-bottom:0.5em;
border-bottom:1px solid black;
}
tr:nth-child(even) {
background:#3f3f3f;
}
td.cost {
font-size:20pt;
font-weight:bold;
}
td.cost.affordable {
background:green;
}
td.cost.toomuch {
background:maroon;
}
</style>
</head>
<body>
<p style="float:right"><a href='byond://?src=\ref[src];refresh=1'>Refresh</a> | <b>Balance:</b> $[balance]</p>
<h1>[command_name()] Merchandise</h1>
<p>
<b>Doing your job and not getting any recognition at work?</b> Well, welcome to the
merch shop! Here, you can buy cool things in exchange for money you earn when you've
completed your Job Objectives.
</p>
<p>Work hard. Get cash. Acquire bragging rights.</p>
<h2>In Stock:</h2>
<table cellspacing="0" cellpadding="0">
<thead>
<th>#</th>
<th>Name/Description</th>
<th>Price</th>
</thead>
<tbody>
"}
for(var/datum/storeitem/item in centcomm_store.items)
var/cost_class="affordable"
if(item.cost>balance)
cost_class="toomuch"
var/itemID=centcomm_store.items.Find(item)
dat += {"
<tr>
<th>
[itemID]
</th>
<td>
<p><b>[item.name]</b></p>
<p>[item.desc]</p>
</td>
<td class="cost [cost_class]">
<a href="byond://?src=\ref[src];buy=[itemID]">$[item.cost]</a>
</td>
</tr>
"}
dat += {"
</tbody>
</table>
</body>
</html>"}
user << browse(dat, "window=merch")
onclose(user, "merch")
return
interface.show(user)
/obj/machinery/computer/merch/Topic(href, href_list)
if(..())
return
//testing(href)
src.add_fingerprint(usr)
if (href_list["buy"])
var/itemID = text2num(href_list["buy"])
var/datum/storeitem/item = centcomm_store.items[itemID]
var/sure = alert(usr,"Are you sure you wish to purchase [item.name] for $[item.cost]?","You sure?","Yes","No") in list("Yes","No")
if(sure=="No")
updateUsrDialog()
return
if(!centcomm_store.PlaceOrder(usr,itemID))
usr << "<span class='warning'>Unable to charge your account.</span>"
else
usr << "<span class='notice'>You've successfully purchased the item. It should be in your hands or on the floor.</span>"
switch(href_list["choice"])
if ("buy")
var/itemID = href_list["chosen_item"]
if(!centcomm_store.PlaceOrder(usr,itemID,src))
usr << "\icon[src]<span class='warning'>Unable to charge your account.</span>"
else
usr << "\icon[src]<span class='notice'>Transaction complete! Enjoy your product.</span>"
src.updateUsrDialog()
return

View File

@@ -410,7 +410,7 @@
var/datum/transaction/T = new()
T.target_name = "[linked_account.owner_name] (via [src.name])"
T.purpose = "Purchase of [currently_vending.product_name]"
T.amount = "[transaction_amount]"
T.amount = "-[transaction_amount]"
T.source_terminal = src.name
T.date = current_date_string
T.time = worldtime2text()

View File

@@ -5,13 +5,14 @@
w_type=RECYK_METAL
var/sheets_refunded = 2
var/list/mount_reqs = list() //can contain simfloor, nospace. Used in try_build to see if conditions are needed, then met
var/frame_material = /obj/item/stack/sheet/metal
/obj/item/mounted/frame/attackby(obj/item/weapon/W, mob/user)
..()
if (istype(W, /obj/item/weapon/wrench) && sheets_refunded)
//new /obj/item/stack/sheet/metal( get_turf(src.loc), sheets_refunded )
var/obj/item/stack/sheet/metal/M = getFromPool(/obj/item/stack/sheet/metal, get_turf(src))
M.amount = sheets_refunded
var/obj/item/stack/sheet/S = getFromPool(frame_material, get_turf(src))
S.amount = sheets_refunded
qdel(src)
/obj/item/mounted/frame/try_build(turf/on_wall, mob/user)

View File

@@ -0,0 +1,210 @@
var/global/list/available_paintings = list(
"duck",
"mario",
"gradius",
"kudzu",
"dwarf",
"xenolisa",
"bottles",
"aymao",
"flowey",
"sunset",
)
/obj/item/mounted/frame/painting
name = "painting"
desc = "A blank painting."
icon = 'icons/obj/paintings.dmi'
icon_state = "item"
item_state = "painting"
inhand_states = list("left_hand" = 'icons/mob/in-hand/left/misc_tools.dmi', "right_hand" = 'icons/mob/in-hand/right/misc_tools.dmi')
flags = FPRINT
w_type = RECYK_WOOD
frame_material = /obj/item/stack/sheet/wood
sheets_refunded = 2
autoignition_temperature = AUTOIGNITION_WOOD
var/paint = ""
/obj/item/mounted/frame/painting/New()
..()
pixel_x = rand(-6,6)
pixel_y = rand(-6,6)
if(!paint)
paint = pick(available_paintings)
update_painting()
/obj/item/mounted/frame/painting/proc/update_painting()
switch(paint)
if("narsie")
name = "\improper Papa Narnar"
desc = "A painting of Nar-Sie. You feel as if it's watching you."
if("monkey")
name = "\improper Mr. Deempisi portrait"
desc = "Under the painting a plaque reads: 'While the meat grinder may not have spared you, fear not. Not one part of you has gone to waste... You were delicious.'"
if("duck")
name = "\improper Duck"
desc = "A painting of a duck. It has a crazed look in its eyes."
if("mario")
name = "\improper Mario and Coin"
desc = "A painting of an italian plumber and an oversized golden plate. Apparently he's a video game mascot of sorts."
if("gradius")
name = "\improper Vic Viper"
desc = "A painting of a space ship. It makes you feel like diving right into an alien base and release your blasters right onto its core."
if("justice")
name = "\improper Justice"
desc = "A painting of a golden scale. Those are often found within courtrooms."
if("kudzu")
name = "\improper Scythe on Kudzu"
desc = "A painting of a scythe and some vines."
if("dwarf")
name = "\improper Dwarven Miner"
desc = "A painting of a dwarf mining adamantine. A long lost high-value metal that was said to be impossibly lightweight, strong, and sharp."
if("xenolisa")
name = "\improper Xeno Lisa"
desc = "A painting of a xenomorph queen, wearing some human clothing. The hands are particularly well-painted."
if("bottles")
name = "\improper Bottle and Bottle"
desc = "A painting of two glass bottles filled with blue and red liquids. You can almost feel the intensity of the artistic discussions that led to this creation."
if("aymao")
name = "\improper Ay Mao"
desc = "A painting of the glorious leader of the Grey Democratic Republic. He looks dignified, and a bit high too."
if("flowey")
name = "\improper Flowey the Flower"
desc = "A painting of your best friend. Also SERIAL MURDERER."
if("sunset")
name = "\improper Path toward the Sunset"
desc = "A painting by D.T.Link. The colours fill you with hope and determination."
else
name = "painting"
desc = "a blank painting."
/obj/item/mounted/frame/painting/do_build(turf/on_wall, mob/user)
user << "<span class='notice'>You hang the [src] on \the [on_wall]...</span>"
add_fingerprint(user)
//declaring D because otherwise if P gets 'deconstructed' we lose our reference to P.resulting_poster
var/obj/structure/painting/P = new(user.loc)
P.icon_state = paint
P.update_painting()
transfer_fingerprints(src, P)
var/pDir = get_dir(user,on_wall)
if(pDir & NORTH)
P.pixel_y = 32
if(pDir & SOUTH)
P.pixel_y = -32
if(pDir & EAST)
P.pixel_x = 32
if(pDir & WEST)
P.pixel_x = -32
playsound(on_wall, 'sound/items/Deconstruct.ogg', 25, 1)
user.drop_item(src)
qdel(src)
/obj/item/mounted/frame/painting/blank
paint = "blank"
/obj/item/mounted/frame/painting/cultify()
new /obj/item/mounted/frame/painting/narsie(loc)
..()
/obj/item/mounted/frame/painting/narsie
paint = "narsie"
/obj/item/mounted/frame/painting/narsie/cultify()
return
/obj/structure/painting
name = "painting"
desc = "A blank painting."
icon = 'icons/obj/paintings.dmi'
icon_state = "blank"
autoignition_temperature = AUTOIGNITION_WOOD
/obj/structure/painting/New()
..()
update_painting()
/obj/structure/painting/proc/update_painting()
switch(icon_state)
if("narsie")
name = "\improper Papa Narnar"
desc = "A painting of Nar-Sie. You feel as if it's watching you."
if("monkey")
name = "\improper Mr. Deempisi portrait"
desc = "Under the painting a plaque reads: 'While the meat grinder may not have spared you, fear not. Not one part of you has gone to waste... You were delicious.'"
if("duck")
name = "\improper Duck"
desc = "A painting of a duck. It has a crazed look in its eyes."
if("mario")
name = "\improper Mario and Coin"
desc = "A painting of an italian plumber and an oversized golden plate. Apparently he's a video game mascot of sorts."
if("gradius")
name = "\improper Vic Viper"
desc = "A painting of a space ship. It makes you feel like diving right into an alien base and release your blasters right onto its core."
if("justice")
name = "\improper Justice"
desc = "A painting of a golden scale. Those are often found within courtrooms."
if("kudzu")
name = "\improper Scythe on Kudzu"
desc = "A painting of a scythe and some vines."
if("dwarf")
name = "\improper Dwarven Miner"
desc = "A painting of a dwarf mining adamantine. A long lost high-value metal that was said to be impossibly lightweight, strong, and sharp."
if("xenolisa")
name = "\improper Xeno Lisa"
desc = "A painting of a xenomorph queen, wearing some human clothing. The hands are particularly well-painted."
if("bottles")
name = "\improper Bottle and Bottle"
desc = "A painting of two glass bottles filled with blue and red liquids. You can almost feel the intensity of the artistic discussions that led to this creation."
if("aymao")
name = "\improper Ay Mao"
desc = "A painting of the glorious leader of the Grey Democratic Republic. He looks dignified, and a bit high too."
if("flowey")
name = "\improper Flowey the Flower"
desc = "A painting of your best friend. Also SERIAL MURDERER."
if("sunset")
name = "\improper Path toward the Sunset"
desc = "A painting by D.T.Link. The colours fill you with hope and determination."
else
name = "painting"
desc = "a blank painting."
/obj/structure/painting/attack_hand(mob/user)
user << "<span class='notice'>You pick up \the [src]...</span>"
add_fingerprint(user)
var/obj/item/mounted/frame/painting/P = new(loc)
P.paint = icon_state
P.update_painting()
transfer_fingerprints(src, P)
playsound(loc, 'sound/weapons/thudswoosh.ogg', 25, 1)
P.attack_hand(user)
qdel(src)
/obj/structure/painting/cultify()
var/obj/structure/painting/narsie/N = new(loc)
N.pixel_x = pixel_x
N.pixel_y = pixel_y
..()
/obj/structure/painting/narsie
icon_state = "narsie"
/obj/structure/painting/narsie/cultify()
return
/obj/structure/painting/random/New()
..()
icon_state = pick(available_paintings)
update_painting()

View File

@@ -188,6 +188,7 @@ var/global/list/datum/stack_recipe/wood_recipes = list ( \
new/datum/stack_recipe("apiary", /obj/item/apiary, 10, time = 25, one_per_turf = 0, on_floor = 0), \
new/datum/stack_recipe("bowl", /obj/item/trash/bowl, 1), \
new/datum/stack_recipe("notice board", /obj/structure/noticeboard, 2, time = 15, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("blank canvas", /obj/item/mounted/frame/painting/blank, 2, time = 15), \
)
/obj/item/stack/sheet/wood
@@ -198,6 +199,7 @@ var/global/list/datum/stack_recipe/wood_recipes = list ( \
origin_tech = "materials=1;biotech=1"
autoignition_temperature=AUTOIGNITION_WOOD
sheettype = "wood"
w_type = RECYK_WOOD
/obj/item/stack/sheet/wood/cultify()
return

View File

@@ -138,6 +138,20 @@
icon_state = "foodbag0"
else icon_state = "foodbag1"
/obj/item/weapon/storage/bag/food/menu1/New()
..()
new/obj/item/weapon/reagent_containers/food/snacks/monkeyburger(src)//6 nutriments
new/obj/item/weapon/reagent_containers/food/snacks/fries(src)//4 nutriments
new/obj/item/weapon/reagent_containers/food/drinks/soda_cans/cola(src)//-3 drowsy
update_icon()
/obj/item/weapon/storage/bag/food/menu2/New()
..()
new/obj/item/weapon/reagent_containers/food/snacks/bigbiteburger(src)//14 nutriments
new/obj/item/weapon/reagent_containers/food/snacks/cheesyfries(src)//6 nutriments
new/obj/item/weapon/reagent_containers/food/drinks/soda_cans/space_mountain_wind(src)//-7 drowsy, -1 sleepy
update_icon()
// -----------------------------
// Borg Food bag
// -----------------------------

View File

@@ -69,8 +69,7 @@
T.amount = "([transaction_amount])"
else
T.amount = "[transaction_amount]"
if(terminal_id)
T.source_terminal = terminal_id
T.source_terminal = terminal_name
T.date = current_date_string
T.time = worldtime2text()
dest.transaction_log.Add(T)
@@ -80,9 +79,8 @@
if(terminal_name!="")
T.target_name += " (via [terminal_name])"
T.purpose = transaction_purpose
T.amount = "[transaction_amount]"
if(terminal_id)
T.source_terminal = terminal_id
T.amount = "-[transaction_amount]"
T.source_terminal = terminal_name
T.date = current_date_string
T.time = worldtime2text()
transaction_log.Add(T)

View File

@@ -0,0 +1,3 @@
/obj/structure/closet/crate/secure/loot/vg_painting/New()
..()
new/obj/item/mounted/frame/painting(src)

View File

@@ -49,6 +49,7 @@
)
fluffitems = list(
/obj/effect/gateway=1,
/obj/item/mounted/frame/painting/narsie=1,
/obj/effect/gibspawner=1,
/obj/structure/cult/talisman=1,
/obj/item/toy/crayon/red=2,

View File

@@ -10,6 +10,7 @@
icon_state = "paper"
throwforce = 0
w_class = 1.0
w_type = RECYK_WOOD
throw_range = 1
throw_speed = 1
layer = 3.9

View File

@@ -81,18 +81,18 @@
<table class="table" width="100%; table-layout: fixed;">
<colgroup><col/><col style="width: 60px;"/><col style="width: 60px;"/><col style="width: 60px;"/><col style="width: 80px;"/><col style="width: 80px;"/><col style="width: 20px;"/></colgroup>
<thead><tr><th>Area</th><th>Eqp.</th><th>Lgt.</th><th>Env.</th><th align="right">Load</th><th align="right">Cell</th><th></th></tr></thead>
<tbody id="APCTable">
<tbody id="APCTable">
</tbody>
</table>
</div>
<div id="n_operatable" style="display: none;">
<span class="error">No connection.</span>
</div>
</div>
"}
interface.updateContent("content", dat)
/obj/machinery/power/monitor/attack_ai(mob/user)
. = attack_hand(user)
@@ -114,7 +114,7 @@
//Needs to be overriden because else it will use the shitty set_machine().
/obj/machinery/power/monitor/hiIsValidClient(datum/html_interface_client/hclient, datum/html_interface/hi)
return hclient.client.mob.html_mob_check(src.type)
/obj/machinery/power/monitor/interact(mob/user)
var/delay = 0
delay += send_asset(user.client, "Chart.js")
@@ -127,7 +127,7 @@
for(var/i = 1 to POWER_MONITOR_HIST_SIZE)
interface.callJavaScript("pushPowerData", list(demand_hist[i], supply_hist[i], load_hist[i]), user)
/obj/machinery/power/monitor/power_change()
..()
if(stat & BROKEN)
@@ -183,7 +183,7 @@
load_hist.Cut(1,2)
interface.callJavaScript("pushPowerData", list(load(), avail(), powernet.viewload))
// src.next_process == 0 is in place to make it update the first time around, then wait until someone watches
if ((!src.next_process || src.interface.isUsed()) && world.time >= src.next_process)
src.next_process = world.time + 30
@@ -200,7 +200,7 @@
for(var/obj/machinery/power/terminal/term in powernet.nodes)
if(istype(term.master, /obj/machinery/power/apc))
var/obj/machinery/power/apc/A = term.master
tbl += "<tr>"
tbl += "<td><span class=\"area\">["\The [A.areaMaster]"]</span></td>"

View File

@@ -28,6 +28,10 @@
else
user << "<span class='info'>Nothing.</span>"
/obj/structure/reagent_dispensers/cultify()
new /obj/structure/reagent_dispensers/bloodkeg(get_turf(src))
..()
/obj/structure/reagent_dispensers/verb/set_APTFT() //set amount_per_transfer_from_this
set name = "Set transfer amount"
set category = "Object"
@@ -257,6 +261,20 @@
. = ..()
reagents.add_reagent("beer", 1000)
/obj/structure/reagent_dispensers/bloodkeg
name = "old keg"
desc = "A very old-looking keg. Some red liquid periodically drips from it."
icon = 'icons/obj/objects.dmi'
icon_state = "bloodkeg"
amount_per_transfer_from_this = 10
/obj/structure/reagent_dispensers/bloodkeg/New()
. = ..()
reagents.add_reagent("blood", 1000)
/obj/structure/reagent_dispensers/bloodkeg/cultify()
return
/obj/structure/reagent_dispensers/beerkeg/blob_act()
explosion(src.loc,0,3,5,7,10)
del(src)

View File

@@ -602,6 +602,7 @@ var/list/DEFAULT_TAGGER_LOCATIONS = list(
// Set up types. BYOND is the dumb and won't let me do this in the var def.
types[RECYK_BIOLOGICAL] = "Biological"
types[RECYK_WOOD] = "Wooden"
types[RECYK_ELECTRONIC] = "Electronics"
types[RECYK_GLASS] = "Glasses"
types[RECYK_METAL] = "Metals/Minerals"

View File

@@ -6,61 +6,109 @@
var/desc="It's a thing."
var/typepath=/obj/item/weapon/storage/box
var/cost=0
var/category = "misc"
/datum/storeitem/proc/deliver(var/mob/user)
/datum/storeitem/proc/deliver(var/mob/user,var/obj/machinery/computer/merch/merchcomp)
//writepanic("[__FILE__].[__LINE__] ([src.type])([usr ? usr.ckey : ""]) \\/datum/storeitem/proc/deliver() called tick#: [world.time]")
if(istype(typepath,/obj/item/weapon/storage))
var/thing = new typepath(user.loc)
var/thing = new typepath(merchcomp.loc)
user.put_in_hands(thing)
else if(istype(typepath,/obj/item))
var/obj/item/weapon/storage/box/box=new(user.loc)
new typepath(box)
box.name="[name] package"
box.desc="A special gift for doing your job."
user.put_in_hands(box)
//else if(istype(typepath,/obj/item))
// var/obj/item/weapon/storage/box/box=new(loc)
// new typepath(box)
// box.name="[name] package"
// box.desc="A special gift for doing your job."
// user.put_in_hands(box)
else
new typepath(user.loc)
new typepath(merchcomp.loc)
/////////////////////////////
// Shit for robotics/science
// Food
/////////////////////////////
/datum/storeitem/robotnik_labcoat
name = "Robotnik's Research Labcoat"
desc = "Join the empire and display your hatred for woodland animals."
typepath = /obj/item/clothing/suit/storage/labcoat/custom/N3X15/robotics
cost = 350
/datum/storeitem/robotnik_jumpsuit
name = "Robotics Interface Suit"
desc = "A modern black and red design with reinforced seams and brass neural interface fittings."
typepath = /obj/item/clothing/under/custom/N3X15/robotics
cost = 500
/datum/storeitem/menu1
name = "Fast-Food Menu"
desc = "The normal sized average american meal. Courtesy of Nanotrasen."
typepath = /obj/item/weapon/storage/bag/food/menu1
cost = 50
/datum/storeitem/menu2
name = "Fast-Food Menu (XL)"
desc = "For when you're 100% starved and want to become fat in 1 easy step."
typepath = /obj/item/weapon/storage/bag/food/menu2
cost = 100
/////////////////////////////
// General
// Tools
/////////////////////////////
/datum/storeitem/pen
name = "Pen"
desc = "Just a simple pen."
typepath = /obj/item/weapon/pen
cost = 10
/datum/storeitem/wrapping_paper
name = "Wrapping Paper"
desc = "Makes gifts 200% more touching."
typepath = /obj/item/weapon/wrapping_paper
cost = 50
/////////////////////////////
// Electronics
/////////////////////////////
/datum/storeitem/boombox
name = "Boombox"
desc = "I ask you a question: is a man not entitled to the beats of his own smooth jazz?"
typepath = /obj/machinery/media/receiver/boombox
cost = 400
/////////////////////////////
// Toys
/////////////////////////////
/datum/storeitem/snap_pops
name = "Snap-Pops"
desc = "Ten-thousand-year-old chinese fireworks: IN SPACE"
typepath = /obj/item/weapon/storage/box/snappops
cost = 200
cost = 100
/datum/storeitem/crayons
name = "Crayons"
desc = "Let security know how they're doing by scrawling lovenotes all over their hallways."
typepath = /obj/item/weapon/storage/fancy/crayons
cost = 350
cost = 150
/datum/storeitem/beachball
name="Beach Ball"
desc="Summer up your office with this cheap vinyl beachball made by prisoners!"
typepath=/obj/item/weapon/beach_ball
cost = 500
name = "Beach Ball"
desc = "Summer up your office with this cheap vinyl beachball made by prisoners!"
typepath = /obj/item/weapon/beach_ball
cost = 50
/datum/storeitem/boombox
name="Boombox"
desc="I ask you a question: is a man not entitled to the beats of his own smooth jazz?"
typepath=/obj/machinery/media/receiver/boombox
cost = 500
/////////////////////////////
// Clothing
/////////////////////////////
/datum/storeitem/robotnik_labcoat
name = "Robotnik's Research Labcoat"
desc = "Join the empire and display your hatred for woodland animals."
typepath = /obj/item/clothing/suit/storage/labcoat/custom/N3X15/robotics
cost = 200
/datum/storeitem/robotnik_jumpsuit
name = "Robotics Interface Suit"
desc = "A modern black and red design with reinforced seams and brass neural interface fittings."
typepath = /obj/item/clothing/under/custom/N3X15/robotics
cost = 200
/////////////////////////////
// Luxurt
/////////////////////////////
/datum/storeitem/photo_album
name = "Photo Album"
desc = "Clearly all your photos of the clown's shenanigans deserve this investment."
typepath = /obj/item/weapon/storage/photo_album
cost = 300
/datum/storeitem/painting
name = "Painting"
desc = "A random painting from Centcom's museum. For those with good taste in art."
typepath = /obj/item/mounted/frame/painting
cost = 700

View File

@@ -28,7 +28,7 @@ var/global/datum/store/centcomm_store=new
for(var/itempath in typesof(/datum/storeitem) - /datum/storeitem/)
items += new itempath()
/datum/store/proc/charge(var/mob/user,var/amount,var/datum/storeitem/item)
/datum/store/proc/charge(var/mob/user,var/amount,var/datum/storeitem/item,var/obj/machinery/computer/merch/merchcomp)
//writepanic("[__FILE__].[__LINE__] ([src.type])([usr ? usr.ckey : ""]) \\/datum/store/proc/charge() called tick#: [world.time]")
if(!user)
//testing("No initial_account")
@@ -47,16 +47,19 @@ var/global/datum/store/centcomm_store=new
return 0
if(D.money < amount)
//testing("Not enough cash")
user << "\icon[merchcomp]<span class='warning'>You don't have that much money!</span>"
return 0
D.money -= amount
user << "\icon[merchcomp]<span class='notice'>Remaining balance: [D.money]$</span>"
var/datum/transaction/T = new()
T.target_name = "[command_name()] Merchandising"
T.purpose = "Purchase of [item.name]"
T.amount = -amount
T.date = current_date_string
T.time = worldtime2text()
T.source_terminal = "\[CLASSIFIED\] Terminal #[rand(111,333)]"
T.source_terminal = merchcomp.name
D.transaction_log.Add(T)
if(vendor_account)
@@ -66,7 +69,7 @@ var/global/datum/store/centcomm_store=new
T.amount = amount
T.date = current_date_string
T.time = worldtime2text()
T.source_terminal = "\[CLASSIFIED\] Terminal #[rand(111,333)]"
T.source_terminal = merchcomp.name
vendor_account.transaction_log.Add(T)
return 1
@@ -80,15 +83,16 @@ var/global/datum/store/centcomm_store=new
linked_db = DB
break
/datum/store/proc/PlaceOrder(var/mob/living/usr, var/itemID)
/datum/store/proc/PlaceOrder(var/mob/living/usr, var/itemID, var/obj/machinery/computer/merch/merchcomp)
//writepanic("[__FILE__].[__LINE__] ([src.type])([usr ? usr.ckey : ""]) \\/datum/store/proc/PlaceOrder() called tick#: [world.time]")
// Get our item, first.
var/datum/storeitem/item = items[itemID]
var/datum/storeitem/item = new itemID()
if(!item)
return 0
// Try to deduct funds.
if(!charge(usr,item.cost,item))
if(!charge(usr,item.cost,item,merchcomp))
return 0
// Give them the item.
item.deliver(usr)
item.deliver(usr,merchcomp)
return 1

View File

@@ -926,6 +926,7 @@ var/list/RESTRICTED_CAMERA_NETWORKS = list( //Those networks can only be accesse
#define RECYK_BIOLOGICAL 3
#define RECYK_METAL 4
#define RECYK_ELECTRONIC 5
#define RECYK_WOOD 6
////////////////
// job.info_flags