/obj/machinery/lapvend name = "Laptop Vendor" desc = "A generic vending machine." icon = 'icons/obj/vending.dmi' icon_state = "robotics" layer = 2.9 anchored = 1 density = 1 var/obj/machinery/computer3/laptop/vended/newlap = null var/obj/item/device/laptop/relap = null var/vendmode = 0 var/cardreader = 0 var/floppy = 0 var/radionet = 0 var/camera = 0 var/network = 0 var/power = 0 /obj/machinery/lapvend/New() ..() spawn(4) power_change() return return /obj/machinery/lapvend/attackby(obj/item/weapon/W as obj, mob/user as mob) var/obj/item/weapon/card/id/I = W.GetID() if(vendmode == 1 && I) scan_id(I, W) vendmode = 0 nanomanager.update_uis(src) if(vendmode == 2 && I) if(reimburse_id(I, W)) vendmode = 0 nanomanager.update_uis(src) if(vendmode == 0) if(istype(W, /obj/item/device/laptop)) var/obj/item/device/laptop/L = W relap = L calc_reimburse(L) usr.drop_item() L.loc = src vendmode = 2 usr << "You slot your [L.name] into \The [src.name]" nanomanager.update_uis(src) else ..() /obj/machinery/lapvend/attack_hand(mob/user as mob) if(stat & (BROKEN|NOPOWER)) return ui_interact(user) /** * Display the NanoUI window for the vending machine. * * See NanoUI documentation for details. */ /obj/machinery/lapvend/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) user.set_machine(src) var/list/data = list() data["mode"] = vendmode data["cardreader"] = cardreader data["floppy"] = floppy data["radionet"] = radionet data["camera"] = camera data["network"] = network data["power"] = power data["total"] = total() ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) ui = new(user, src, ui_key, "laptop_vendor.tmpl", src.name, 480, 425) ui.set_initial_data(data) ui.open() //ui.set_auto_update(5) /obj/machinery/lapvend/Topic(href, href_list) if(stat & (BROKEN|NOPOWER)) return if(usr.stat || usr.restrained()) return if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf)))) usr.set_machine(src) switch(href_list["choice"]) if("single_add") cardreader = 1 if ("dual_add") cardreader = 2 if ("floppy_add") floppy = 1 if ("radio_add") radionet = 1 if ("camnet_add") camera = 1 if ("area_add") network = 1 if ("prox_add") network = 2 if ("cable_add") network = 3 if ("high_add") power = 1 if ("super_add") power = 2 if ("cardreader_rem") cardreader = 0 if ("floppy_rem") floppy = 0 if ("radio_rem") radionet = 0 if ("camnet_rem") camera = 0 if ("network_rem") network = 0 if ("power_rem") power = 0 if("vend") vendmode = 1 if("cancel") if(relap) relap.loc = src.loc relap = null vendmode = 0 src.add_fingerprint(usr) nanomanager.update_uis(src) /obj/machinery/lapvend/proc/vend() if(cardreader > 0) if(cardreader == 1) newlap.spawn_parts += (/obj/item/part/computer/cardslot) else newlap.spawn_parts += (/obj/item/part/computer/cardslot/dual) if(floppy == 1) newlap.spawn_parts += (/obj/item/part/computer/storage/removable) if(radionet == 1) newlap.spawn_parts += (/obj/item/part/computer/networking/radio) if(camera == 1) newlap.spawn_parts += (/obj/item/part/computer/networking/cameras) if (network == 1) newlap.spawn_parts += (/obj/item/part/computer/networking/area) if (network == 2) newlap.spawn_parts += (/obj/item/part/computer/networking/prox) if (network == 3) newlap.spawn_parts += (/obj/item/part/computer/networking/cable) if (power == 1) newlap.battery.maxcharge = 1000 newlap.battery.charge = 1000 if (power == 2) newlap.battery.maxcharge = 1750 newlap.battery.charge = 1750 newlap.spawn_parts() /obj/machinery/lapvend/proc/scan_id(var/obj/item/weapon/card/id/C, var/obj/item/I) visible_message("\The [usr] swipes \the [I] through \the [src].") var/datum/money_account/CH = get_account(C.associated_account_number) if(!CH) usr << "\icon[src]No valid account number is associated with this card." return if(CH.security_level != 0) //If card requires pin authentication (ie seclevel 1 or 2) if(vendor_account) var/attempt_pin = input("Enter pin code", "Vendor transaction") as num var/datum/money_account/D = attempt_account_access(C.associated_account_number, attempt_pin, 2) if(D) transfer_and_vend(D, C) else usr << "\icon[src]Unable to access vendor account. Please record the machine ID and call [boss_short] Support." else usr << "\icon[src]Unable to access vendor account. Please record the machine ID and call CentComm Support." else transfer_and_vend(CH, C) // Transfers money and vends the laptop. /obj/machinery/lapvend/proc/transfer_and_vend(var/datum/money_account/D, var/obj/item/weapon/card/C) var/transaction_amount = total() if(transaction_amount <= D.money) //transfer the money D.money -= transaction_amount vendor_account.money += transaction_amount //Transaction logs var/datum/transaction/T = new() T.target_name = "[vendor_account.owner_name] (via [src.name])" T.purpose = "Purchase of Laptop" if(transaction_amount > 0) T.amount = "([transaction_amount])" else T.amount = "[transaction_amount]" T.source_terminal = src.name T.date = current_date_string T.time = stationtime2text() D.transaction_log.Add(T) // T = new() T.target_name = D.owner_name T.purpose = "Purchase of Laptop" T.amount = "[transaction_amount]" T.source_terminal = src.name T.date = current_date_string T.time = stationtime2text() vendor_account.transaction_log.Add(T) newlap = new /obj/machinery/computer3/laptop/vended(src.loc) choose_progs(C) vend() newlap.close_laptop() newlap = null cardreader = 0 floppy = 0 radionet = 0 camera = 0 network = 0 power = 0 else usr << "\icon[src]You don't have that much money!" /obj/machinery/lapvend/proc/total() var/total = 0 if(cardreader == 1) total += 50 if(cardreader == 2) total += 125 if(floppy == 1) total += 50 if(radionet == 1) total += 50 if(camera == 1) total += 100 if(network == 1) total += 75 if(network == 2) total += 50 if(network == 3) total += 25 if(power == 1) total += 175 if(power == 2) total += 250 return total /obj/machinery/lapvend/proc/choose_progs(var/obj/item/weapon/card/id/C) if(access_security in C.access) newlap.spawn_files += (/datum/file/program/secure_data) newlap.spawn_files += (/datum/file/camnet_key) newlap.spawn_files += (/datum/file/program/security) if(access_armory in C.access) newlap.spawn_files += (/datum/file/program/prisoner) if(access_atmospherics in C.access) newlap.spawn_files += (/datum/file/program/atmos_alert) if(access_change_ids in C.access) newlap.spawn_files += (/datum/file/program/card_comp) if(access_heads in C.access) newlap.spawn_files += (/datum/file/program/communications) if((access_medical in C.access) || (access_forensics_lockers in C.access)) //Gives detective the medical records program, but not the crew monitoring one. newlap.spawn_files += (/datum/file/program/med_data) if (access_medical in C.access) newlap.spawn_files += (/datum/file/program/crew) if(access_engine in C.access) newlap.spawn_files += (/datum/file/program/powermon) if(access_research in C.access) newlap.spawn_files += (/datum/file/camnet_key/research) newlap.spawn_files += (/datum/file/camnet_key/bombrange) newlap.spawn_files += (/datum/file/camnet_key/xeno) if(access_rd in C.access) newlap.spawn_files += (/datum/file/program/borg_control) if(access_cent_specops in C.access) newlap.spawn_files += (/datum/file/camnet_key/creed) newlap.spawn_files += (/datum/file/program/arcade) newlap.spawn_files += (/datum/file/camnet_key/entertainment) //Atlantis: Each laptop gets "invisible" program/security - REQUIRED for camnetkeys to work. newlap.spawn_files += (/datum/file/program/security/hidden) newlap.update_spawn_files() /obj/machinery/lapvend/proc/calc_reimburse(var/obj/item/device/laptop/L) if(istype(L.stored_computer.cardslot,/obj/item/part/computer/cardslot)) cardreader = 1 if(istype(L.stored_computer.cardslot,/obj/item/part/computer/cardslot/dual)) cardreader = 2 if(istype(L.stored_computer.floppy,/obj/item/part/computer/storage/removable)) floppy = 1 if(istype(L.stored_computer.radio,/obj/item/part/computer/networking/radio)) radionet = 1 if(istype(L.stored_computer.camnet,/obj/item/part/computer/networking/cameras)) camera = 1 if(istype(L.stored_computer.net,/obj/item/part/computer/networking/area)) network = 1 if(istype(L.stored_computer.net,/obj/item/part/computer/networking/prox)) network = 2 if(istype(L.stored_computer.net,/obj/item/part/computer/networking/cable)) network = 3 if(istype(L.stored_computer.battery, /obj/item/weapon/cell/high)) power = 1 if(istype(L.stored_computer.battery, /obj/item/weapon/cell/super)) power = 2 /obj/machinery/lapvend/proc/reimburse_id(var/obj/item/weapon/card/id/C, var/obj/item/I) visible_message("\The [usr] swipes \the [I] through \the [src].") var/datum/money_account/CH = get_account(C.associated_account_number) if(!CH) usr << "\icon[src]No valid account number is associated with this card." return 0 if(CH.security_level != 0) //If card requires pin authentication (ie seclevel 1 or 2) if(vendor_account) var/attempt_pin = input("Enter pin code", "Vendor transaction") as num var/datum/money_account/D = attempt_account_access(C.associated_account_number, attempt_pin, 2) if(D) transfer_and_reimburse(D) return 1 else usr << "\icon[src]Unable to access vendor account. Please record the machine ID and call [boss_short] Support." return 0 else usr << "\icon[src]Unable to access vendor account. Please record the machine ID and call CentComm Support." return 0 else transfer_and_reimburse(CH) return 1 /obj/machinery/lapvend/proc/transfer_and_reimburse(var/datum/money_account/D) var/transaction_amount = total() //transfer the money D.money += transaction_amount vendor_account.money -= transaction_amount //Transaction logs var/datum/transaction/T = new() T.target_name = "[vendor_account.owner_name] (via [src.name])" T.purpose = "Return purchase of Laptop" if(transaction_amount > 0) T.amount = "([transaction_amount])" else T.amount = "[transaction_amount]" T.source_terminal = src.name T.date = current_date_string T.time = stationtime2text() D.transaction_log.Add(T) // T = new() T.target_name = D.owner_name T.purpose = "Return purchase of Laptop" T.amount = "[transaction_amount]" T.source_terminal = src.name T.date = current_date_string T.time = stationtime2text() vendor_account.transaction_log.Add(T) qdel(relap) vendmode = 0 cardreader = 0 floppy = 0 radionet = 0 camera = 0 network = 0 power = 0