mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 18:22:39 +00:00
414 lines
13 KiB
Plaintext
414 lines
13 KiB
Plaintext
/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 << "<span class='notice'>You slot your [L.name] into \The [src.name]</span>"
|
|
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 = "<TT><center><b>[vendorname]</b></center><hr /><br>" //display the name, and added a horizontal rule
|
|
if(vendmode == 0)
|
|
dat += "<center><b>Please choose your laptop customization options</b></center><br>"
|
|
dat += "<center>Your comptuer will automatically be loaded with any programs you can use after the transaction is complete."
|
|
dat += "<center><b>Some programs will require additional components to be installed!</center></b><hr /><br>"
|
|
dat += "<center><b>HDD (Required)</b> : Added</center><br>"
|
|
dat += "<center><b>Card Reader</b> : <A href='?src=\ref[src];choice=single_add'>Single (50)</a> | <A href='?src=\ref[src];choice=dual_add'>Dual (125)</a><br>"
|
|
dat += "<center><b>Floppy Drive</b>: <A href='?src=\ref[src];choice=floppy_add'>Add (50)</a><br>"
|
|
dat += "<center><b>Radio Network card</b> <A href='?src=\ref[src];choice=radio_add'>Add (50)</a><br>"
|
|
dat += "<center><b>Camera Card</b> <A href='?src=\ref[src];choice=camnet_add'>Add (100)</a><br>"
|
|
dat += "<center><b> Network card</b> <A href='?src=\ref[src];choice=area_add'>Area (75)</a> <A href='?src=\ref[src];choice=prox_add'>Adjacent (50)</a><A href='?src=\ref[src];choice=cable_add'>Powernet (25)</a><br>"
|
|
dat += "<hr /><center> Power source upgrade</center> <A href='?src=\ref[src];choice=high_add'>Extended (175)</a> <A href='?src=\ref[src];choice=super_add'>Unreal (250)</a>"
|
|
|
|
if(vendmode == 0 || vendmode == 1)
|
|
dat += "<hr /><br><center>Cart</center><br>"
|
|
dat += "<b>Total: [total()]</b><br>"
|
|
if(cardreader == 1)
|
|
dat += "<A href='?src=\ref[src];choice=single_rem'>Card Reader: (single) (50)</a><br>"
|
|
else if (cardreader == 2)
|
|
dat += "<A href='?src=\ref[src];choice=dual_rem'>Card Reader: (double) (125)</a><br>"
|
|
else
|
|
dat += "Card Reader: None<br>"
|
|
if(floppy == 0)
|
|
dat += "Floppy Drive: None<br>"
|
|
else
|
|
dat += "<A href='?src=\ref[src];choice=floppy_rem'>Floppy Drive: Added (50)</a><br>"
|
|
if(radionet == 1)
|
|
dat += "<A href='?src=\ref[src];choice=radio_rem'>Radio Card: Added (50)</a><br>"
|
|
else
|
|
dat += "Radio Card: None<br>"
|
|
if(camera == 1)
|
|
dat += "<A href='?src=\ref[src];choice=camnet_rem'>Camera Card: Added (100)</a><br>"
|
|
else
|
|
dat += "Camera Card: None<br>"
|
|
if(network == 1)
|
|
dat += "<A href='?src=\ref[src];choice=area_rem'>Network card: Area (75)</a><br>"
|
|
else if(network == 2)
|
|
dat += "<A href='?src=\ref[src];choice=prox_rem'>Network card: Adjacent (50)</a><br>"
|
|
else if(network == 3)
|
|
dat += "<A href='?src=\ref[src];choice=cable_rem'>Network card: Powernet (25)</a><br>"
|
|
else
|
|
dat += "Network card: None"
|
|
if (power == 0)
|
|
dat += "Power source: Regular"
|
|
else if (power == 1)
|
|
dat += "<A href='?src=\ref[src];choice=high_rem'>Power source: Extended (175)</a><br>"
|
|
else
|
|
dat += "<A href='?src=\ref[src];choice=super_rem'>Power source: Unreal (250)</a><br>"
|
|
|
|
if(vendmode == 0)
|
|
dat += "<br><A href='?src=\ref[src];choice=vend'>Vend Laptop</a>"
|
|
|
|
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<br>"
|
|
dat += "<a href='?src=\ref[src];choice=cancel'>Cancel</a>"
|
|
|
|
|
|
|
|
|
|
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("<span class='info'>[usr] swipes a card through [src].</span>")
|
|
var/datum/money_account/CH = get_account(C.associated_account_number)
|
|
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]<span class='warning'>Unable to access account. Check security settings and try again.</span>"
|
|
else
|
|
usr << "\icon[src]<span class='warning'>Unable to access vendor account. Please record the machine ID and call CentComm Support.</span>"
|
|
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 = 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_laptop()
|
|
newlap = null
|
|
cardreader = 0
|
|
floppy = 0
|
|
radionet = 0
|
|
camera = 0
|
|
network = 0
|
|
power = 0
|
|
else
|
|
usr << "\icon[src]<span class='warning'>You don't have that much money!</span>"
|
|
|
|
/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(var/obj/item/weapon/card/I)
|
|
if (istype(I, /obj/item/weapon/card/id))
|
|
var/obj/item/weapon/card/id/C = I
|
|
visible_message("<span class='info'>[usr] swipes a card through [src].</span>")
|
|
var/datum/money_account/CH = get_account(C.associated_account_number)
|
|
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)
|
|
else
|
|
usr << "\icon[src]<span class='warning'>Unable to access account. Check security settings and try again.</span>"
|
|
else
|
|
usr << "\icon[src]<span class='warning'>Unable to access vendor account. Please record the machine ID and call CentComm Support.</span>"
|
|
else
|
|
transfer_and_reimburse(CH)
|
|
|
|
/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 = 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
|