diff --git a/code/datums/uplink/badassery.dm b/code/datums/uplink/badassery.dm index d6f5f8e8d0..4e81ca14cf 100644 --- a/code/datums/uplink/badassery.dm +++ b/code/datums/uplink/badassery.dm @@ -78,7 +78,7 @@ /datum/uplink_item/item/badassery/surplus/get_goods(var/obj/item/device/uplink/U, var/loc) var/obj/structure/largecrate/C = new(loc) - var/random_items = get_random_uplink_items(null, item_worth, C) + var/random_items = get_surplus_items(null, item_worth, C) for(var/datum/uplink_item/I in random_items) I.purchase_log(U) I.get_goods(U, C) diff --git a/code/datums/uplink/uplink_items.dm b/code/datums/uplink/uplink_items.dm index 32a7d0cffb..0cb7ce1d1d 100644 --- a/code/datums/uplink/uplink_items.dm +++ b/code/datums/uplink/uplink_items.dm @@ -31,6 +31,7 @@ var/datum/uplink/uplink = new() var/item_cost = 0 var/datum/uplink_category/category // Item category var/list/datum/antagonist/antag_roles // Antag roles this item is displayed to. If empty, display to all. + var/blacklisted = 0 /datum/uplink_item/item var/path = null @@ -172,3 +173,15 @@ datum/uplink_item/dd_SortValue() remaining_TC -= I.cost(remaining_TC, U) return bought_items + +/proc/get_surplus_items(var/obj/item/device/uplink/U, var/remaining_TC, var/loc) + var/list/bought_items = list() + var/override = 1 + while(remaining_TC) + var/datum/uplink_item/I = all_uplink_selection.get_random_item(remaining_TC, U, bought_items, override) + if(!I) + break + bought_items += I + remaining_TC -= I.cost(remaining_TC, U) + + return bought_items diff --git a/code/game/objects/items/devices/uplink_random_lists.dm b/code/game/objects/items/devices/uplink_random_lists.dm index 49333e4c22..f8d73d76b2 100644 --- a/code/game/objects/items/devices/uplink_random_lists.dm +++ b/code/game/objects/items/devices/uplink_random_lists.dm @@ -1,4 +1,5 @@ var/datum/uplink_random_selection/default_uplink_selection = new/datum/uplink_random_selection/default() +var/datum/uplink_random_selection/all_uplink_selection = new/datum/uplink_random_selection/all() /datum/uplink_random_item var/uplink_item // The uplink item @@ -14,17 +15,26 @@ var/datum/uplink_random_selection/default_uplink_selection = new/datum/uplink_ra /datum/uplink_random_selection var/list/datum/uplink_random_item/items + var/list/datum/uplink_random_item/all_items /datum/uplink_random_selection/New() ..() items = list() + all_items = list() -/datum/uplink_random_selection/proc/get_random_item(var/telecrystals, obj/item/device/uplink/U, var/list/bought_items) +/datum/uplink_random_selection/proc/get_random_item(var/telecrystals, obj/item/device/uplink/U, var/list/bought_items, var/items_override = 0) var/const/attempts = 50 for(var/i = 0; i < attempts; i++) - var/datum/uplink_random_item/RI = pick(items) + var/datum/uplink_random_item/RI + if(items_override) + world << 1 + RI = pick(all_items) + else + world << 2 + RI = pick(items) if(!prob(RI.keep_probability)) + world << 3 continue var/datum/uplink_item/I = uplink.items_assoc[RI.uplink_item] if(I.cost(telecrystals, U) > telecrystals) @@ -35,6 +45,13 @@ var/datum/uplink_random_selection/default_uplink_selection = new/datum/uplink_ra continue return I +/datum/uplink_random_selection/all/New() + for(var/datum/uplink_item/item in uplink.items) + if(item.blacklisted) + continue + else + all_items += new/datum/uplink_random_item(item.type) + /datum/uplink_random_selection/default/New() ..()