/
githubmirror
/
vgstation13
Обзор
Документация
Войти
/
githubmirror
/
vgstation13
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
Bleeding-Edge
code/modules/mining/mint.dm
224 строки
7 KB
gurfan
Electric Boogaloo (Take Two) (#31892)
01 фев 2022, 03:18
Не верифицирован
01 фев 2022, 03:18
12b68b9
Код
Авторство
О чём код?
/**********************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