Files
vgstation13/code/modules/mining/mint.dm
gurfan 12b68b9546 Electric Boogaloo (Take Two) (#31892)
* wall and floor and overlay icons

* HOLY SHIT PLANEMASTERS ARE AMAZING <3 LUMMOX

* nevermind shit is fucked i hate byond

* apc hackin tweaks start now

* attack_ai is overridden almost everywhere for zero reason

* more attack_ai shit

* more shit

* FORCEDISABLE pt. 1

* FORCEDISABLE pt 2

* more forcedisable 3

* 3.1

* end of forcedisable

* remove all hackview shit, cleanup

* better apc hacking, lots of fixes, and UI!

* more machine ability, lots of cleanup, radial lock updating, modules and active modules

* movable ui elements

* ADVANCED hologrmas

* more SHIT

* SHUNTSHUNTSHUNT

* fig congflgighgsa

* more testing

* fuck

* commit 2

* holo fixes

* fake APC images!

* lots of stuff

* fixes and cleanup and vomit

* More abilities. AI Control fixes and cleanup

* fixes

* fix

* clear another warning

* remove comment fix numbers

* raise price

* raise price

* fix

* 1 autoborger limit

* remove undocumented change

* handle at bot level

* order of operations

* dont call ert

* decrease

* fix unit test

* icon check please work

* remove unused icons, comment out chem dispenser drain

* comment out firewall, add disable to turrets

* remove unused wall icons

* Sort mob list, humans appear at the top

* fix sorting, fix hologram bug

* hologram tweaks, stupid fucking alert APC name

* qdel

* raise ever so slightly

* revert

* Delete broken_hand_icons.txt

* Update setup.dm

* Create setup.dm

* attack_self

* fix filter icon, delete unused file, remove forcedisable from magtape deck

* accidental change

* mousedropfrom recharge station

* oh rite

* fixo

* remove useless code

* aaahhh

* remove rig meal, made obsolete by emag

* fffffshhhhhhwooooop

* typo!
2022-01-31 18:18:06 -06:00

225 lines
7.1 KiB
Plaintext

/**********************Mint**************************/
/obj/machinery/mineral/mint
name = "coin press"
desc = "Turns precious sheets into luxurious item tokens. Or small, annoying throwing weapons."
icon = 'icons/obj/stationobjs.dmi'
icon_state = "coinpress0"
density = 1
anchored = 1
machine_flags = SCREWTOGGLE | CROWDESTROY | WRENCHMOVE | FIXED2WORK
starting_materials = list() //makes the new empty datum
var/coins_per_sheet = 5 //Related to part quality
var/newCoins = 0 //how many coins the machine made last run
var/processing = 0
var/chosen = null //which material will be used to make coins
var/coinsToProduce = 10
in_dir = WEST // Sheets go in
out_dir = EAST //Coins come out.
/obj/machinery/mineral/mint/New()
..()
component_parts = newlist(
/obj/item/weapon/circuitboard/coin_press,
/obj/item/weapon/stock_parts/matter_bin,
/obj/item/weapon/stock_parts/manipulator,
/obj/item/weapon/stock_parts/manipulator,
/obj/item/weapon/stock_parts/micro_laser
)
RefreshParts()
/obj/machinery/mineral/mint/process_inside(atom/movable/A)
if(istype(A,/obj/item/stack/sheet))
var/obj/item/stack/sheet/O = A
for(var/sheet_id in materials.storage)
var/datum/material/mat = materials.getMaterial(sheet_id)
if (mat.cointype && istype(O,mat.sheettype))
materials.addAmount(sheet_id, O.amount)
src.updateUsrDialog()
qdel(O)
break
/obj/machinery/mineral/mint/RefreshParts()
var/i = 0
for(var/obj/item/weapon/stock_parts/manipulator/A in component_parts)
i += A.rating
coins_per_sheet = initial(coins_per_sheet) * (i / 2) //Better coin ratio, it's something.
/obj/machinery/mineral/mint/attack_hand(mob/user)
add_fingerprint(user)
if(stat & (FORCEDISABLE | NOPOWER | BROKEN))
if(user.machine == src)
user.unset_machine(src)
return
user.set_machine(src)
var/dat = list()
dat += "<table><tr><td colspan='3'; align='center'><b>Sheets</b></td></tr><tr>"
var/nloaded=0
for(var/ore_id in materials.storage)
var/datum/material/ore_info = materials.getMaterial(ore_id)
if(materials.storage[ore_id] && ore_info.cointype)
if (chosen == null)
chosen = ore_id //Auto select the first sheet
dat += "<td align='right'>"
if (chosen == ore_id)
dat += "[ore_info.processed_name]</td>"
else
dat += "<a href='?src=\ref[src];choose=[ore_id]'>[ore_info.processed_name]</a></td>"
dat += "<td>[materials.storage[ore_id]]</td>"
dat += "<td><a href='?src=\ref[src];eject=[ore_id]'>Eject</a></td></tr>"
nloaded++
else
if(chosen == ore_id)
chosen = null
if(nloaded)
dat += "</table>"
else
dat+="<tr><td colspan='3'><em>No Sheets Loaded</em></td></tr></table>"
dat += "<p>The press will produce <b>[coinsToProduce]</b> coins at a rate of <b>[coins_per_sheet]</b> coins per sheet.</p>"
dat += "<p>\["
dat += "<a href='?src=\ref[src];chooseAmt=-10'>-10</a>"
dat += "<a href='?src=\ref[src];chooseAmt=-5'>-5</a>"
//"<a href='?src=\ref[src];chooseAmt=-1'>-1</a>"
//"<a href='?src=\ref[src];chooseAmt=1'>+1</a>"
dat += "<a href='?src=\ref[src];chooseAmt=5'>+5</a>"
dat += "<a href='?src=\ref[src];chooseAmt=10'>+10</a>"
dat += {"\]</p>
<p>In total, <font color='green'><b>[newCoins]</b></font> coins have been minted.</p>
<p><b><A href="?src=\ref[src];makeCoins=[1]">Make Coins</A></b></p>"}
dat += "<table><tr><td align='right'><b>Input:</b></td><td><a href='?src=\ref[src];changedir=1'>[capitalize(dir2text(in_dir))]</a></td></tr><tr><td><b>Output:</b></td><td><a href='?src=\ref[src];changedir=2'>[capitalize(dir2text(out_dir))]</a></td></tr></table>"
dat = jointext(dat,"")
var/datum/browser/popup = new(user, "mint", "Coin Press", 420, 410, src)
popup.set_content(dat)
popup.open()
/obj/machinery/mineral/mint/proc/Change_Dir(var/dir)
var/changingdir = dir //See ore processing_unit for original comments
changingdir = clamp(changingdir, 1, 2)
var/newdir = input("Select the new direction", name, "North") as null|anything in list("North", "South", "East", "West")
if(!newdir)
return 1
newdir = text2dir(newdir)
var/list/dirlist = list(in_dir, out_dir)
var/olddir = dirlist[changingdir]
dirlist[changingdir] = -1
var/conflictingdir = dirlist.Find(newdir)
if(conflictingdir)
dirlist[conflictingdir] = olddir
dirlist[changingdir] = newdir
in_dir = dirlist[1]
out_dir = dirlist[2]
return 1
/obj/machinery/mineral/mint/proc/DropSheet(var/matID)
var/datum/material/M = materials.getMaterial(matID)
var/obj/item/stack/sheet/sh = new M.sheettype(src.loc)
if(sh)
var/available_num_sheets = materials.storage[matID]
if(available_num_sheets>0)
//available_num_sheets % sh.max_amount
sh.amount = available_num_sheets
materials.removeAmount(matID, sh.amount)
else
qdel(sh)
return 1
/obj/machinery/mineral/mint/Topic(href, href_list)
. = ..()
if(.)
return
usr.set_machine(src)
src.add_fingerprint(usr)
var/turf/out_T = get_step(src, out_dir)
if(href_list["close"])
usr.unset_machine(src)
return 1
if(processing==1)
to_chat(usr, "<span class='notice'>The machine is processing.</span>")
return
if(href_list["eject"])
var/datum/material/ma = materials.getMaterial(href_list["eject"])
var/obj/item/stack/sheet/sh = new ma.sheettype(out_T)
sh.amount = materials.getAmount(href_list["eject"])
materials.removeAmount(href_list["eject"], sh.amount)
if (chosen == href_list["eject"])
chosen = null
if("changedir" in href_list)
//Change_Dir()
var/changingdir = text2num(href_list["changedir"]) //See ore processing_unit for original comments
changingdir = clamp(changingdir, 1, 2)
var/newdir = input("Select the new direction", name, "North") as null|anything in list("North", "South", "East", "West")
if(!newdir)
return 1
newdir = text2dir(newdir)
var/list/dirlist = list(in_dir, out_dir)
var/olddir = dirlist[changingdir]
dirlist[changingdir] = -1
var/conflictingdir = dirlist.Find(newdir)
if(conflictingdir)
dirlist[conflictingdir] = olddir
dirlist[changingdir] = newdir
in_dir = dirlist[1]
out_dir = dirlist[2]
if(href_list["choose"])
chosen = href_list["choose"]
if(href_list["chooseAmt"])
coinsToProduce = clamp(coinsToProduce + text2num(href_list["chooseAmt"]), 0, 1000)
if(href_list["makeCoins"])
if(chosen == null)
return
var/temp_coins = coinsToProduce
if (src.out_dir)
processing = 1
icon_state = "coinpress1"
var/datum/material/po=materials.getMaterial(chosen)
if(!po)
chosen=null
processing=0
return
while(materials.storage[chosen] > 0 && coinsToProduce > 0)
var/obj/item/weapon/storage/bag/money/tempbag = locate(/obj/item/weapon/storage/bag/money,out_T)
materials.removeAmount(chosen, 1) //We'll get that money up front don't you worry.
for(var/i=0,i<coins_per_sheet,i++)
var/obj/item/weapon/coin/co = new po.cointype(out_T)
if(tempbag)
if(tempbag.can_be_inserted(co, 1))
tempbag.handle_item_insertion(co, 1)
coinsToProduce--
newCoins++
src.updateUsrDialog()
sleep(2)
sleep(2)
icon_state = "coinpress0"
processing = 0
coinsToProduce = temp_coins
src.updateUsrDialog()
return
/obj/machinery/mineral/mint/crowbarDestroy(mob/user, obj/item/tool/crowbar/I)
if(..())
if(materials)
for(var/matID in materials.storage)
DropSheet(matID)
return TRUE
return FALSE