Merge pull request #16934 from Core0verload/cargo

Changes to Stocks Console UI, cargo fixes
This commit is contained in:
Cheridan
2016-04-28 23:22:17 -05:00
10 changed files with 103 additions and 151 deletions
@@ -12,7 +12,7 @@
"l" = (/obj/item/weapon/coin/gold,/turf/open/floor/engine/cult{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
"m" = (/turf/open/floor/engine/cult{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
"n" = (/obj/structure/table/wood/poker,/obj/item/stack/spacecash/c1000,/turf/open/floor/engine/cult{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
"o" = (/obj/item/weapon/moneybag,/turf/open/floor/engine/cult{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
"o" = (/obj/item/weapon/storage/bag/money,/turf/open/floor/engine/cult{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
"p" = (/obj/structure/table/wood/poker,/obj/item/weapon/ore/gold,/turf/open/floor/engine/cult{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
"q" = (/obj/structure/table/wood/poker,/obj/item/stack/spacecash/c20,/obj/item/stack/spacecash/c50,/turf/open/floor/engine/cult{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
"r" = (/obj/structure/table/wood/poker,/obj/item/stack/spacecash/c500,/obj/item/stack/spacecash/c100,/obj/item/stack/spacecash/c1000,/turf/open/floor/engine/cult{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
+2 -2
View File
@@ -113,7 +113,7 @@
"cl" = (/obj/structure/chair/stool,/turf/open/floor/wood,/area/awaymission/wwmines)
"cm" = (/obj/structure/bookcase{icon_state = "book-5"},/turf/open/floor/wood,/area/awaymission/wwgov)
"cn" = (/turf/open/floor/wood,/area/awaymission/wwgov)
"co" = (/obj/item/weapon/moneybag,/turf/open/floor/wood,/area/awaymission/wwgov)
"co" = (/obj/item/weapon/storage/bag/money,/turf/open/floor/wood,/area/awaymission/wwgov)
"cp" = (/obj/structure/closet/secure_closet/freezer/kitchen,/turf/open/floor/plasteel{icon_state = "stage_bleft"},/area/awaymission/wwgov)
"cq" = (/obj/structure/table/wood,/turf/open/floor/plasteel{icon_state = "stage_bleft"},/area/awaymission/wwgov)
"cr" = (/obj/structure/table/wood,/obj/machinery/microwave,/turf/open/floor/plasteel{icon_state = "stage_bleft"},/area/awaymission/wwgov)
@@ -122,7 +122,7 @@
"cu" = (/obj/structure/lattice,/obj/structure/lattice,/turf/open/space,/area/space)
"cv" = (/obj/effect/decal/cleanable/blood/splatter,/turf/open/floor/carpet,/area/awaymission/wwmines)
"cw" = (/turf/open/floor/carpet,/area/awaymission/wwgov)
"cx" = (/obj/item/weapon/moneybag,/turf/open/floor/carpet,/area/awaymission/wwgov)
"cx" = (/obj/item/weapon/storage/bag/money,/turf/open/floor/carpet,/area/awaymission/wwgov)
"cy" = (/obj/structure/chair/wood/wings,/turf/open/floor/wood,/area/awaymission/wwgov)
"cz" = (/turf/open/floor/plasteel{icon_state = "stage_bleft"},/area/awaymission/wwgov)
"cA" = (/obj/effect/decal/cleanable/blood/splatter,/turf/open/floor/wood,/area/awaymission/wwmines)
+3
View File
@@ -37,6 +37,9 @@
..()
if(copy)
copy_type = copy.type
if(istype(copy, /obj/item/documents/photocopy)) // Copy Of A Copy Of A Copy
var/obj/item/documents/photocopy/C = copy
copy_type = C.copy_type
/obj/item/documents/photocopy/attackby(obj/item/O, mob/user, params)
if(istype(O, /obj/item/toy/crayon/red) || istype(O, /obj/item/toy/crayon/blue))
@@ -248,7 +248,7 @@
if(rand(0,1))
new /obj/item/stack/spacecash/c1000(T)
else
var/obj/item/weapon/moneybag/M = new(T)
var/obj/item/weapon/storage/bag/money/M = new(T)
for(var/i in 1 to rand(5,50))
new /obj/item/weapon/coin/gold(M)
if(14)
+6
View File
@@ -7,6 +7,7 @@
message = "of enemy intelligence"
var/global/originals_recieved = list()
var/global/copies_recieved = list()
var/copy_path = null
export_types = list(/obj/item/documents/syndicate)
/datum/export/intel/applies_to(obj/O, contr = 0, emag = 0)
@@ -23,6 +24,9 @@
return FALSE
if((C.copy_type in originals_recieved) || (C.copy_type in copies_recieved))
return FALSE
if(copy_path && !ispath(C.copy_type, copy_path))
return FALSE
else if(O.type in originals_recieved)
return FALSE
@@ -45,6 +49,7 @@
cost = 15000 // Allows double agents to earn some cargo points without failing their objectives.
unit_name = "photocopied article"
export_types = list(/obj/item/documents/photocopy)
copy_path = /obj/item/documents/syndicate
@@ -58,6 +63,7 @@
cost = 15000
unit_name = "photocopied article"
export_types = list(/obj/item/documents/photocopy)
copy_path = /obj/item/documents/nanotrasen
// Selling Syndicate docs to Syndicate, why not?
/datum/export/intel/syndie/recovered
+1 -1
View File
@@ -3,7 +3,7 @@
var/group = ""
var/hidden = FALSE
var/contraband = FALSE
var/cost = 7 // Minimum cost, or infinite points are possible.
var/cost = 700 // Minimum cost, or infinite points are possible.
var/access = FALSE
var/list/contains = null
var/crate_name = "crate"
+2 -2
View File
@@ -212,8 +212,8 @@
var/turf/T = get_step(src,output_dir)
if(T)
var/obj/item/O = new P(src)
var/obj/item/weapon/moneybag/M = locate(/obj/item/weapon/moneybag, T)
var/obj/item/weapon/storage/bag/money/M = locate(/obj/item/weapon/storage/bag/money, T)
if(!M)
M = new /obj/item/weapon/moneybag(src)
M = new /obj/item/weapon/storage/bag/money(src)
unload_mineral(M)
O.loc = M
+8 -100
View File
@@ -1,112 +1,20 @@
/*****************************Money bag********************************/
/obj/item/weapon/moneybag
icon = 'icons/obj/storage.dmi'
name = "Money bag"
/obj/item/weapon/storage/bag/money
name = "money bag"
icon_state = "moneybag"
flags = CONDUCT
force = 10
throwforce = 0
w_class = 4
burn_state = FLAMMABLE
burntime = 20
/obj/item/weapon/moneybag/attack_hand(mob/user)
var/amt_gold = 0
var/amt_silver = 0
var/amt_diamond = 0
var/amt_iron = 0
var/amt_plasma = 0
var/amt_uranium = 0
var/amt_clown = 0
var/amt_adamantine = 0
for (var/obj/item/weapon/coin/C in contents)
if (istype(C,/obj/item/weapon/coin/diamond))
amt_diamond++;
if (istype(C,/obj/item/weapon/coin/plasma))
amt_plasma++;
if (istype(C,/obj/item/weapon/coin/iron))
amt_iron++;
if (istype(C,/obj/item/weapon/coin/silver))
amt_silver++;
if (istype(C,/obj/item/weapon/coin/gold))
amt_gold++;
if (istype(C,/obj/item/weapon/coin/uranium))
amt_uranium++;
if (istype(C,/obj/item/weapon/coin/clown))
amt_clown++;
if (istype(C,/obj/item/weapon/coin/adamantine))
amt_adamantine++;
var/dat = text("<b>The contents of the moneybag reveal...</b><br>")
if (amt_gold)
dat += text("Gold coins: [amt_gold] <A href='?src=\ref[src];remove=gold'>Remove one</A><br>")
if (amt_silver)
dat += text("Silver coins: [amt_silver] <A href='?src=\ref[src];remove=silver'>Remove one</A><br>")
if (amt_iron)
dat += text("Metal coins: [amt_iron] <A href='?src=\ref[src];remove=iron'>Remove one</A><br>")
if (amt_diamond)
dat += text("Diamond coins: [amt_diamond] <A href='?src=\ref[src];remove=diamond'>Remove one</A><br>")
if (amt_plasma)
dat += text("Plasma coins: [amt_plasma] <A href='?src=\ref[src];remove=plasma'>Remove one</A><br>")
if (amt_uranium)
dat += text("Uranium coins: [amt_uranium] <A href='?src=\ref[src];remove=uranium'>Remove one</A><br>")
if (amt_clown)
dat += text("Bananium coins: [amt_clown] <A href='?src=\ref[src];remove=clown'>Remove one</A><br>")
if (amt_adamantine)
dat += text("Adamantine coins: [amt_adamantine] <A href='?src=\ref[src];remove=adamantine'>Remove one</A><br>")
user << browse("[dat]", "window=moneybag")
/obj/item/weapon/moneybag/attackby(obj/item/weapon/W, mob/user, params)
..()
if (istype(W, /obj/item/weapon/coin))
var/obj/item/weapon/coin/C = W
if(!user.drop_item())
return
user << "<span class='notice'>You add the [C.name] into the bag.</span>"
contents += C
if (istype(W, /obj/item/weapon/moneybag))
var/obj/item/weapon/moneybag/C = W
for (var/obj/O in C.contents)
contents += O;
user << "<span class='notice'>You empty the [C.name] into the bag.</span>"
return
/obj/item/weapon/moneybag/Topic(href, href_list)
if(..())
return
usr.set_machine(src)
src.add_fingerprint(usr)
if(href_list["remove"])
var/obj/item/weapon/coin/COIN
switch(href_list["remove"])
if("gold")
COIN = locate(/obj/item/weapon/coin/gold,src.contents)
if("silver")
COIN = locate(/obj/item/weapon/coin/silver,src.contents)
if("iron")
COIN = locate(/obj/item/weapon/coin/iron,src.contents)
if("diamond")
COIN = locate(/obj/item/weapon/coin/diamond,src.contents)
if("plasma")
COIN = locate(/obj/item/weapon/coin/plasma,src.contents)
if("uranium")
COIN = locate(/obj/item/weapon/coin/uranium,src.contents)
if("clown")
COIN = locate(/obj/item/weapon/coin/clown,src.contents)
if("adamantine")
COIN = locate(/obj/item/weapon/coin/adamantine,src.contents)
if(!COIN)
return
COIN.loc = src.loc
return
w_class = 4
max_w_class = 3
storage_slots = 80
max_combined_w_class = 40
can_hold = list(/obj/item/weapon/coin, /obj/item/stack/spacecash)
/obj/item/weapon/moneybag/vault
/obj/item/weapon/moneybag/vault/New()
/obj/item/weapon/storage/bag/money/vault/New()
..()
new /obj/item/weapon/coin/silver(src)
new /obj/item/weapon/coin/silver(src)
+1 -1
View File
@@ -27,7 +27,7 @@
var/list/storage_objects = list(
/obj/structure/closet,
/obj/item/weapon/storage,
/obj/item/weapon/moneybag,
/obj/item/weapon/storage/bag/money,
/obj/item/weapon/folder, // Selling a folder of stamped manifests? Sure, why not!
/obj/structure/filingcabinet,
/obj/structure/ore_box,
+78 -43
View File
@@ -5,7 +5,7 @@
icon_screen = "stock_computer"
icon_keyboard = "no_keyboard"
var/logged_in = "Cargo Department"
var/vmode = 0
var/vmode = 1
/obj/machinery/computer/stockexchange/New()
..()
@@ -22,35 +22,47 @@
user.machine = src
var/css={"<style>
.company {
.change {
font-weight: bold;
font-family: monospace;
}
.up {
background: #00a000;
}
.down {
background: #a00000;
}
.stable {
width: 100%
border: 1px solid black;
border-collapse: collapse;
}
.stable tr {
border: none;
border: 1px solid #305260;
border-spacing: 4px 4px;
}
.stable td, .stable th {
border-right: 1px solid white;
border-bottom: 1px solid black;
border: 1px solid #305260;
padding: 0px 3px;
}
.bankrupt {
border: 1px solid #a00000;
background: #a00000;
}
a.updated {
color: red;
}
</style>"}
var/dat = "<html><head><title>[station_name()] Stock Exchange</title>[css]</head><body><h2>Stock Exchange</h2>"
dat += "<i>This is a work in progress. Certain features may not be available.</i><br>"
var/dat = "<html><head><title>[station_name()] Stock Exchange</title>[css]</head><body>"
dat += "<span class='user'>Welcome, <b>[logged_in]</b></span><br><span class='balance'><b>Cargo Points:</b> [balance()] points</span><br>"
dat += "<span class='user'>Welcome, <b>[logged_in]</b></span><br><span class='balance'><b>Credits:</b> [balance()] </span><br>"
for (var/datum/stock/S in stockExchange.last_read)
var/list/LR = stockExchange.last_read[S]
if (!(logged_in in LR))
LR[logged_in] = 0
dat += "<b>View mode:</b> <a href='?src=\ref[src];cycleview=1'>[vmode ? "compact" : "full"]</a>"
dat += "<b>Stock Transaction Log:</b> <a href='?src=\ref[src];show_logs=1'>Check</a>"
dat += "<b>View mode:</b> <a href='?src=\ref[src];cycleview=1'>[vmode ? "Compact" : "Full"]</a> "
dat += "<b>Stock Transaction Log:</b> <a href='?src=\ref[src];show_logs=1'>Check</a><br>"
dat += "<i>This is a work in progress. Certain features may not be available.</i>"
dat += "<h3>Listed stocks</h3>"
if (vmode == 0)
@@ -105,15 +117,40 @@ a.updated {
dat += "<a href='?src=\ref[src];archive=\ref[S]'>View news archives</a>[news ? " <span style='color:red'>(updated)</span>" : null]</div>"
else if (vmode == 1)
dat += "<b>Actions:</b> + Buy, - Sell, (A)rchives, (H)istory<br><br>"
dat += "<table class='stable'><tr><th>&nbsp;</th><th>Name</th><th>Value</th><th>Owned/Avail</th><th>Actions</th></tr>"
dat += "<table class='stable'>"
dat += "<tr><th>&nbsp;</th><th>ID</th><th>Name</th><th>Value</th><th>Owned</th><th>Avail</th><th>Actions</th></tr>"
for (var/datum/stock/S in stockExchange.stocks)
var/mystocks = 0
if (logged_in && (logged_in in S.shareholders))
mystocks = S.shareholders[logged_in]
dat += "<tr><td>[S.disp_value_change > 0 ? "+" : (S.disp_value_change < 0 ? "-" : "=")]</td><td><span class='company'>[S.name] "
if (S.bankrupt)
dat += "<b style='color:red'>B</b>"
dat += "</span> <span class='s_company'>([S.short_name])</span></td><td>[S.current_value]</td><td><b>[mystocks]</b>/[S.available_shares]</td>"
if(S.bankrupt)
dat += "<tr class='bankrupt'>"
else
dat += "<tr>"
if(S.disp_value_change > 0)
dat += "<td class='change up'>+</td>"
else if(S.disp_value_change < 0)
dat += "<td class='change down'>-</td>"
else
dat += "<td class='change'>=</td>"
dat += "<td><b>[S.short_name]</b></td>"
dat += "<td>[S.name]</td>"
if(!S.bankrupt)
dat += "<td>[S.current_value]</td>"
else
dat += "<td>0</td>"
if(mystocks)
dat += "<td><b>[mystocks]</b></td>"
else
dat += "<td>0</td>"
dat += "<td>[S.available_shares]</td>"
var/news = 0
if (logged_in)
var/list/LR = stockExchange.last_read[S]
@@ -129,12 +166,17 @@ a.updated {
break
dat += "<td>"
if (S.bankrupt)
dat += "+ - "
dat += "<span class='linkOff'>+</span> <span class='linkOff'>-</span> "
else
dat += "<a href='?src=\ref[src];buyshares=\ref[S]'>+</a> <a href='?src=\ref[src];sellshares=\ref[S]'>-</a> "
dat += "<a href='?src=\ref[src];archive=\ref[S]' class='[news ? "updated" : "default"]'>(A)</a> <a href='?src=\ref[src];viewhistory=\ref[S]'>(H)</a></td></tr>"
dat += "<a href='?src=\ref[src];archive=\ref[S]' class='[news ? "updated" : "default"]'>(A)</a> <a href='?src=\ref[src];viewhistory=\ref[S]'>(H)</a></td>"
dat += "</tr>"
dat += "</table>"
dat += "</body></html>"
var/datum/browser/popup = new(user, "computer", "Stock Exchange", 600, 400)
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()
@@ -153,27 +195,25 @@ a.updated {
user << "<span class='danger'>This account does not own any shares of [S.name]!</span>"
return
var/price = S.current_value
var/amt = round(input(user, "How many shares? (Have: [avail], unit price: [price])", "Sell shares in [S.name]", 0) as num|null)
if (!user)
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)))
return
if (!amt)
return
if (!(user in range(1, src)))
return
if (li != logged_in)
return
b = SSshuttle.points
if (!isnum(b))
user << "<span class='danger'>No active account on the console!</span>"
return
if (amt > S.shareholders[logged_in])
user << "<span class='danger'>You do not own that many shares!</span>"
return
var/total = amt * S.current_value
if (!S.sellShares(logged_in, amt))
user << "<span class='danger'>Could not complete transaction.</span>"
return
user << "<span class='notice'>Sold [amt] shares of [S.name] at [S.current_value] a share for [total] points.</span>"
user << "<span class='notice'>Sold [amt] shares of [S.name] at [S.current_value] a share for [total] credits.</span>"
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)
@@ -190,12 +230,8 @@ a.updated {
var/avail = S.available_shares
var/price = S.current_value
var/canbuy = round(b / price)
var/amt = round(input(user, "How many shares? (Available: [avail], unit price: [price], can buy: [canbuy])", "Buy shares in [S.name]", 0) as num|null)
if (!user)
return
if (!amt)
return
if (!(user in range(1, src)))
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)))
return
if (li != logged_in)
return
@@ -203,17 +239,16 @@ a.updated {
if (!isnum(b))
user << "<span class='danger'>No active account on the console!</span>"
return
if (amt > S.available_shares)
user << "<span class='danger'>That many shares are not available!</span>"
return
var/total = amt * S.current_value
if (total > b)
user << "<span class='danger'>Insufficient points.</span>"
amt = min(amt, S.available_shares, round(b / S.current_value))
if (!amt)
return
if (!S.buyShares(logged_in, amt))
user << "<<span class='danger'>Could not complete transaction.</span>"
return
user << "<span class='notice'>Bought [amt] shares of [S.name] at [S.current_value] a share for [total] points.</span>"
var/total = amt * S.current_value
user << "<span class='notice'>Bought [amt] shares of [S.name] at [S.current_value] a share for [total] credits.</span>"
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)
@@ -261,7 +296,7 @@ a.updated {
dat += "[L.time] | <b>[L.user_name]</b> bought <b>[L.stocks]</b> stocks at [L.shareprice] a share for <b>[L.money]</b> total credits in <b>[L.company_name]</b>.<br>"
continue
if(istype(L, /datum/stock_log/sell))
dat += "[L.time] | <b>[L.user_name]</b> sold <b>[L.stocks]</b> stocks at [L.shareprice] a share for <b>[L.money]</b> totalcredits from <b>[L.company_name]</b>.<br>"
dat += "[L.time] | <b>[L.user_name]</b> sold <b>[L.stocks]</b> stocks at [L.shareprice] a share for <b>[L.money]</b> total credits from <b>[L.company_name]</b>.<br>"
continue
if(istype(L, /datum/stock_log/borrow))
dat += "[L.time] | <b>[L.user_name]</b> borrowed <b>[L.stocks]</b> stocks with a deposit of <b>[L.money]</b> credits in <b>[L.company_name]</b>.<br>"