diff --git a/code/WorkInProgress/computer3/lapvend.dm b/code/WorkInProgress/computer3/lapvend.dm new file mode 100644 index 0000000000..d36af863d1 --- /dev/null +++ b/code/WorkInProgress/computer3/lapvend.dm @@ -0,0 +1,398 @@ +/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/datum/browser/popup = null + 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/blob_act() + if (prob(50)) + spawn(0) + del(src) + return + + return + + +/obj/machinery/lapvend/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(vendmode == 1) + if(istype(W, /obj/item/weapon/card)) + var/obj/item/weapon/card/I = W + scan_card(I) + vendmode = 0 + if(vendmode == 3) + if(istype(W,/obj/item/weapon/card)) + var/obj/item/weapon/card/I = W + reimburse(I) + vendmode = 0 + 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 = 3 + usr << "You slot your [L.name] into \The [src.name]" + else + ..() + + +/obj/machinery/lapvend/attack_hand(mob/user as mob) + user.set_machine(src) + var/vendorname = (src.name) //import the machine's name + var/dat = "
[vendorname]


" //display the name, and added a horizontal rule + if(vendmode == 0) + dat += "
Please choose your laptop customization options

" + dat += "
Your comptuer will automatically be loaded with any programs you can use after the transaction is complete." + dat += "
Some programs will require additional components to be installed!


" + dat += "
HDD (Required) : Added

" + dat += "
Card Reader : Single (50) | Dual (125)
" + dat += "
Floppy Drive: Add (50)
" + dat += "
Radio Network card Add (50)
" + dat += "
Camera Card Add (100)
" + dat += "
Network card Area (75) Adjacent (50)Powernet (25)
" + dat += "
Power source upgrade
Extended (175) Unreal (250)" + + if(vendmode == 0 || vendmode == 1) + dat += "

Cart

" + dat += "Total: [total()]
" + if(cardreader == 1) + dat += "Card Reader: (single) (50)
" + else if (cardreader == 2) + dat += "Card Reader: (double) (125)
" + else + dat += "Card Reader: None
" + if(floppy == 0) + dat += "Floppy Drive: None
" + else + dat += "Floppy Drive: Added (50)
" + if(radionet == 1) + dat += "Radio Card: Added (50)
" + else + dat += "Radio Card: None
" + if(camera == 1) + dat += "Camera Card: Added (100)
" + else + dat += "Camera Card: None
" + if(network == 1) + dat += "Network card: Area (75)
" + else if(network == 2) + dat += "Network card: Adjacent (50)
" + else if(network == 3) + dat += "Network card: Powernet (25)
" + else + dat += "Network card: None" + if (power == 0) + dat += "Power source: Regular" + else if (power == 1) + dat += "Power source: Extended (175)
" + else + dat += "Power source: Unreal (250)
" + + if(vendmode == 0) + dat += "
Vend Laptop" + + if(vendmode == 1) + dat += "Please swipe your card and enter your PIN to complete the transaction" + + if(vendmode == 3) + dat += "Please swipe your card and enter your PIN to be finish returning your computer
" + dat += "Cancel" + + + + + popup = new(user, "lapvend", name, 450, 500) + popup.set_content(dat) + popup.open() + return + + +/obj/machinery/lapvend/Topic(href, href_list) + 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 ("single_rem" || "dual_rem") + cardreader = 0 + if ("floppy_rem") + floppy = 0 + if ("radio_rem") + radionet = 0 + if ("camnet_rem") + camera = 0 + if ("area_rem" || "prox_rem" || "cable_rem") + network = 0 + if ("high_rem" || "super_rem") + power = 0 + + if("vend") + vendmode = 1 + + if("cancel") + relap.loc = src.loc + relap = null + vendmode = 0 + + src.updateUsrDialog() + return + + +/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) + del(newlap.battery) + newlap.battery = new /obj/item/weapon/cell/high(newlap) + if (power == 2) + del(newlap.battery) + newlap.battery = new /obj/item/weapon/cell/super(newlap) + + newlap.spawn_parts() + +/obj/machinery/lapvend/proc/scan_card(var/obj/item/weapon/card/I) + if (istype(I, /obj/item/weapon/card/id)) + var/obj/item/weapon/card/id/C = I + visible_message("[usr] swipes a card through [src].") + 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) + 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 = worldtime2text() + 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 = worldtime2text() + vendor_account.transaction_log.Add(T) + + newlap = new /obj/machinery/computer3/laptop/vended(src.loc) + + choose_progs(C) + vend() + popup.close() + newlap.close_computer() + 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!" + else + usr << "\icon[src]Unable to access account. Check security settings and try again." + else + usr << "\icon[src]Unable to access vendor account. Please record the machine ID and call CentComm Support." + +/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) + newlap.spawn_files += (/datum/file/program/crew) + newlap.spawn_files += (/datum/file/program/med_data) + 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) + 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(var/obj/item/weapon/card/I) + if (istype(I, /obj/item/weapon/card/id)) + var/obj/item/weapon/card/id/C = I + visible_message("[usr] swipes a card through [src].") + 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) + 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 = worldtime2text() + 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 = worldtime2text() + vendor_account.transaction_log.Add(T) + + del(relap) + + vendmode = 0 + cardreader = 0 + floppy = 0 + radionet = 0 + camera = 0 + network = 0 + power = 0 + + else + usr << "\icon[src]Unable to access account. Check security settings and try again." + else + usr << "\icon[src]Unable to access vendor account. Please record the machine ID and call CentComm Support." \ No newline at end of file