/obj/machinery/computer/stockexchange name = "stock exchange computer" icon = 'icons/obj/computer.dmi' icon_state = "oldcomp" icon_screen = "stock_computer" icon_keyboard = "no_keyboard" var/logged_in = "Cargo Department" var/vmode = 1 circuit = /obj/item/weapon/circuitboard/computer/stockexchange clockwork = TRUE //it'd look weird light_color = LIGHT_COLOR_GREEN /obj/machinery/computer/stockexchange/New() ..() logged_in = "[station_name()] Cargo Department" /obj/machinery/computer/stockexchange/proc/balance() if (!logged_in) return 0 return SSshuttle.points /obj/machinery/computer/stockexchange/attack_ai(mob/user) return attack_hand(user) /obj/machinery/computer/stockexchange/attack_robot(mob/user) return attack_hand(user) /obj/machinery/computer/stockexchange/attack_hand(var/mob/user) if(..()) return user.machine = src var/css={""} var/dat = "[station_name()] Stock Exchange[css]" dat += "Welcome, [logged_in]
Credits: [balance()]
" for (var/datum/stock/S in GLOB.stockExchange.last_read) var/list/LR = GLOB.stockExchange.last_read[S] if (!(logged_in in LR)) LR[logged_in] = 0 dat += "View mode: [vmode ? "Compact" : "Full"] " dat += "Stock Transaction Log: Check
" dat += "This is a work in progress. Certain features may not be available." dat += "

Listed stocks

" if (vmode == 0) for (var/datum/stock/S in GLOB.stockExchange.stocks) var/mystocks = 0 if (logged_in && (logged_in in S.shareholders)) mystocks = S.shareholders[logged_in] dat += "
[S.name] ([S.short_name])[S.bankrupt ? " BANKRUPT" : null]
" if (S.last_unification) dat += "Unified shares [(world.time - S.last_unification) / 600] minutes ago.
" dat += "Current value per share: [S.current_value] | View history

" dat += "You currently own [mystocks] shares in this company. There are [S.available_shares] purchasable shares on the market currently.
" if (S.bankrupt) dat += "You cannot buy or sell shares in a bankrupt company!

" else dat += "Buy shares | Sell shares

" dat += "Prominent products:
" for (var/prod in S.products) dat += "[prod]
" var/news = 0 if (logged_in) var/list/LR = GLOB.stockExchange.last_read[S] var/lrt = LR[logged_in] for (var/datum/article/A in S.articles) if (A.ticks > lrt) news = 1 break if (!news) for (var/datum/stockEvent/E in S.events) if (E.last_change > lrt && !E.hidden) news = 1 break dat += "View news archives[news ? " (updated)" : null]
" else if (vmode == 1) dat += "Actions: + Buy, - Sell, (A)rchives, (H)istory

" dat += "" dat += "" for (var/datum/stock/S in GLOB.stockExchange.stocks) var/mystocks = 0 if (logged_in && (logged_in in S.shareholders)) mystocks = S.shareholders[logged_in] if(S.bankrupt) dat += "" else dat += "" if(S.disp_value_change > 0) dat += "" else if(S.disp_value_change < 0) dat += "" else dat += "" dat += "" dat += "" if(!S.bankrupt) dat += "" else dat += "" if(mystocks) dat += "" else dat += "" dat += "" var/news = 0 if (logged_in) var/list/LR = GLOB.stockExchange.last_read[S] var/lrt = LR[logged_in] for (var/datum/article/A in S.articles) if (A.ticks > lrt) news = 1 break if (!news) for (var/datum/stockEvent/E in S.events) if (E.last_change > lrt && !E.hidden) news = 1 break dat += "" dat += "" dat += "
 IDNameValueOwnedAvailActions
+-=[S.short_name][S.name][S.current_value]0[mystocks]0[S.available_shares]" if (S.bankrupt) dat += "+ - " else dat += "+ - " dat += "(A) (H)
" dat += "" var/datum/browser/popup = new(user, "computer", "Stock Exchange", 600, 600) popup.set_content(dat) popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) popup.open() return /obj/machinery/computer/stockexchange/proc/sell_some_shares(var/datum/stock/S, var/mob/user) if (!user || !S) return var/li = logged_in if (!li) to_chat(user, "No active account on the console!") return var/b = SSshuttle.points var/avail = S.shareholders[logged_in] if (!avail) to_chat(user, "This account does not own any shares of [S.name]!") return var/price = S.current_value var/amt = round(input(user, "How many shares? \n(Have: [avail], unit price: [price])", "Sell shares in [S.name]", 0) as num|null) amt = min(amt, S.shareholders[logged_in]) if (!user || (!(user in range(1, src)) && iscarbon(user))) return if (!amt) return if (li != logged_in) return b = SSshuttle.points if (!isnum(b)) to_chat(user, "No active account on the console!") return var/total = amt * S.current_value if (!S.sellShares(logged_in, amt)) to_chat(user, "Could not complete transaction.") return to_chat(user, "Sold [amt] shares of [S.name] at [S.current_value] a share for [total] credits.") GLOB.stockExchange.add_log(/datum/stock_log/sell, user.name, S.name, amt, S.current_value, total) /obj/machinery/computer/stockexchange/proc/buy_some_shares(var/datum/stock/S, var/mob/user) if (!user || !S) return var/li = logged_in if (!li) to_chat(user, "No active account on the console!") return var/b = balance() if (!isnum(b)) to_chat(user, "No active account on the console!") return var/avail = S.available_shares var/price = S.current_value var/canbuy = round(b / price) var/amt = round(input(user, "How many shares? \n(Available: [avail], unit price: [price], can buy: [canbuy])", "Buy shares in [S.name]", 0) as num|null) if (!user || (!(user in range(1, src)) && iscarbon(user))) return if (li != logged_in) return b = balance() if (!isnum(b)) to_chat(user, "No active account on the console!") return amt = min(amt, S.available_shares, round(b / S.current_value)) if (!amt) return if (!S.buyShares(logged_in, amt)) to_chat(user, "<Could not complete transaction.") return var/total = amt * S.current_value to_chat(user, "Bought [amt] shares of [S.name] at [S.current_value] a share for [total] credits.") GLOB.stockExchange.add_log(/datum/stock_log/buy, user.name, S.name, amt, S.current_value, total) /obj/machinery/computer/stockexchange/proc/do_borrowing_deal(var/datum/borrow/B, var/mob/user) if (B.stock.borrow(B, logged_in)) to_chat(user, "You successfully borrowed [B.share_amount] shares. Deposit: [B.deposit].") GLOB.stockExchange.add_log(/datum/stock_log/borrow, user.name, B.stock.name, B.share_amount, B.deposit) else to_chat(user, "Could not complete transaction. Check your account balance.") /obj/machinery/computer/stockexchange/Topic(href, href_list) if (..()) return 1 if (!usr || (!(usr in range(1, src)) && iscarbon(usr))) usr.machine = src if (href_list["viewhistory"]) var/datum/stock/S = locate(href_list["viewhistory"]) in GLOB.stockExchange.stocks if (S) S.displayValues(usr) if (href_list["logout"]) logged_in = null if (href_list["buyshares"]) var/datum/stock/S = locate(href_list["buyshares"]) in GLOB.stockExchange.stocks if (S) buy_some_shares(S, usr) if (href_list["sellshares"]) var/datum/stock/S = locate(href_list["sellshares"]) in GLOB.stockExchange.stocks if (S) sell_some_shares(S, usr) if (href_list["show_logs"]) var/dat = "Stock Transaction Logs

Stock Transaction Logs

Refresh

" for(var/D in GLOB.stockExchange.logs) var/datum/stock_log/L = D if(istype(L, /datum/stock_log/buy)) dat += "[L.time] | [L.user_name] bought [L.stocks] stocks at [L.shareprice] a share for [L.money] total credits in [L.company_name].
" continue if(istype(L, /datum/stock_log/sell)) dat += "[L.time] | [L.user_name] sold [L.stocks] stocks at [L.shareprice] a share for [L.money] total credits from [L.company_name].
" continue if(istype(L, /datum/stock_log/borrow)) dat += "[L.time] | [L.user_name] borrowed [L.stocks] stocks with a deposit of [L.money] credits in [L.company_name].
" continue var/datum/browser/popup = new(usr, "stock_logs", "Stock Transaction Logs", 600, 400) popup.set_content(dat) popup.set_title_image(usr.browse_rsc_icon(src.icon, src.icon_state)) popup.open() if (href_list["archive"]) var/datum/stock/S = locate(href_list["archive"]) if (logged_in && logged_in != "") var/list/LR = GLOB.stockExchange.last_read[S] LR[logged_in] = world.time var/dat = "News feed for [S.name]

News feed for [S.name]

Refresh
" dat += "

Events

" var/p = 0 for (var/datum/stockEvent/E in S.events) if (E.hidden) continue if (p > 0) dat += "
" dat += "
[E.current_title]
[E.current_desc]
" p++ dat += "

Articles

" p = 0 for (var/datum/article/A in S.articles) if (p > 0) dat += "
" dat += "
[A.headline]
[A.subtitle]

[A.article]
- [A.author], [A.spacetime] (via [A.outlet])
" p++ dat += "
" var/datum/browser/popup = new(usr, "archive_[S.name]", "Stock News", 600, 400) popup.set_content(dat) popup.set_title_image(usr.browse_rsc_icon(src.icon, src.icon_state)) popup.open() if (href_list["cycleview"]) vmode++ if (vmode > 1) vmode = 0 src.add_fingerprint(usr) src.updateUsrDialog()