Contract rerolls and general enhancements (#45703)

* refactor wip

* rerolling and qol

* space not valid

* travis be nice

* comment?

* new tablet sprites

* Start on uplink screen

* new suit sprite

* paper

* merge conflict

* Auto stash before merge of "contract-reroll" and "tgstation/master"
This commit is contained in:
Akrilla
2019-08-10 10:11:11 +01:00
committed by Rob Bailey
parent 978b843d70
commit 9ca37e9169
19 changed files with 230 additions and 139 deletions
@@ -1,7 +1,7 @@
/datum/computer_file/program/contract_uplink
filename = "contract uplink"
filedesc = "Syndicate Contract Uplink"
program_icon_state = "hostile"
filename = "contractor uplink"
filedesc = "Syndicate Contractor Uplink"
program_icon_state = "assign"
extended_desc = "A standard, Syndicate issued system for handling important contracts while on the field."
size = 10
requires_ntnet = 0
@@ -14,6 +14,7 @@
ui_y = 600
var/error = ""
var/page = CONTRACT_UPLINK_PAGE_CONTRACTS
var/assigned = FALSE
/datum/computer_file/program/contract_uplink/run_program(var/mob/living/user)
. = ..(user)
@@ -30,31 +31,40 @@
var/contract_id = text2num(params["contract_id"])
// Set as the active contract
hard_drive.traitor_data.assigned_contracts[contract_id].status = CONTRACT_STATUS_ACTIVE
hard_drive.traitor_data.current_contract = hard_drive.traitor_data.assigned_contracts[contract_id]
hard_drive.traitor_data.contractor_hub.assigned_contracts[contract_id].status = CONTRACT_STATUS_ACTIVE
hard_drive.traitor_data.contractor_hub.current_contract = hard_drive.traitor_data.contractor_hub.assigned_contracts[contract_id]
program_icon_state = "single_contract"
return 1
if("PRG_login")
var/datum/antagonist/traitor/traitor_data = user.mind.has_antag_datum(/datum/antagonist/traitor)
// Bake their data right into the hard drive, or we don't allow non-antags gaining access to unused
// Bake their data right into the hard drive, or we don't allow non-antags gaining access to an unused
// contract system.
// We also create their contracts at this point.
if (traitor_data)
// Only play greet sound, and handle contractor hub when assigning for the first time.
if (!traitor_data.assigned_contracts.len)
if (!traitor_data.contractor_hub)
user.playsound_local(user, 'sound/effects/contractstartup.ogg', 100, 0)
traitor_data.contractor_hub = new
traitor_data.contractor_hub.create_hub_items()
traitor_data.create_contracts()
// Stops any topic exploits such as logging in multiple times on a single system.
if (!assigned)
traitor_data.contractor_hub.create_contracts(traitor_data.owner)
hard_drive.traitor_data = traitor_data
hard_drive.traitor_data = traitor_data
program_icon_state = "contracts"
assigned = TRUE
return 1
if("PRG_call_extraction")
if (hard_drive.traitor_data.current_contract.status != CONTRACT_STATUS_EXTRACTING)
if (hard_drive.traitor_data.current_contract.handle_extraction(user))
if (hard_drive.traitor_data.contractor_hub.current_contract.status != CONTRACT_STATUS_EXTRACTING)
if (hard_drive.traitor_data.contractor_hub.current_contract.handle_extraction(user))
user.playsound_local(user, 'sound/effects/confirmdropoff.ogg', 100, 1)
hard_drive.traitor_data.current_contract.status = CONTRACT_STATUS_EXTRACTING
hard_drive.traitor_data.contractor_hub.current_contract.status = CONTRACT_STATUS_EXTRACTING
program_icon_state = "extracted"
else
user.playsound_local(user, 'sound/machines/uplinkerror.ogg', 50)
error = "Either both you or your target aren't at the dropoff location, or the pod hasn't got a valid place to land. Clear space, or make sure you're both inside."
@@ -64,16 +74,18 @@
return 1
if("PRG_contract_abort")
var/contract_id = hard_drive.traitor_data.current_contract.id
var/contract_id = hard_drive.traitor_data.contractor_hub.current_contract.id
hard_drive.traitor_data.current_contract = null
hard_drive.traitor_data.assigned_contracts[contract_id].status = CONTRACT_STATUS_ABORTED
hard_drive.traitor_data.contractor_hub.current_contract = null
hard_drive.traitor_data.contractor_hub.assigned_contracts[contract_id].status = CONTRACT_STATUS_ABORTED
program_icon_state = "contracts"
return 1
if("PRG_redeem_TC")
if (hard_drive.traitor_data.contract_TC_to_redeem)
if (hard_drive.traitor_data.contractor_hub.contract_TC_to_redeem)
var/obj/item/stack/telecrystal/crystals = new /obj/item/stack/telecrystal(get_turf(user),
hard_drive.traitor_data.contract_TC_to_redeem)
hard_drive.traitor_data.contractor_hub.contract_TC_to_redeem)
if(ishuman(user))
var/mob/living/carbon/human/H = user
if(H.put_in_hands(crystals))
@@ -81,8 +93,8 @@
else
to_chat(user, "<span class='notice'>Your payment materializes onto the floor.</span>")
hard_drive.traitor_data.contract_TC_payed_out += hard_drive.traitor_data.contract_TC_to_redeem
hard_drive.traitor_data.contract_TC_to_redeem = 0
hard_drive.traitor_data.contractor_hub.contract_TC_payed_out += hard_drive.traitor_data.contractor_hub.contract_TC_to_redeem
hard_drive.traitor_data.contractor_hub.contract_TC_to_redeem = 0
return 1
else
user.playsound_local(user, 'sound/machines/uplinkerror.ogg', 50)
@@ -91,8 +103,10 @@
error = ""
if("PRG_contractor_hub")
page = CONTRACT_UPLINK_PAGE_HUB
program_icon_state = "store"
if ("PRG_hub_back")
page = CONTRACT_UPLINK_PAGE_CONTRACTS
program_icon_state = "contracts"
if ("buy_hub")
if (hard_drive.traitor_data.owner.current == user)
var/item = params["item"]
@@ -106,19 +120,22 @@
/datum/computer_file/program/contract_uplink/ui_data(mob/user)
var/list/data = list()
var/obj/item/computer_hardware/hard_drive/small/syndicate/hard_drive = computer.all_components[MC_HDD]
var/screen_to_be = null
if (hard_drive && hard_drive.traitor_data != null)
var/datum/antagonist/traitor/traitor_data = hard_drive.traitor_data
data = get_header_data()
if (traitor_data.current_contract)
if (traitor_data.contractor_hub.current_contract)
data["ongoing_contract"] = TRUE
if (traitor_data.current_contract.status == CONTRACT_STATUS_EXTRACTING)
screen_to_be = "single_contract"
if (traitor_data.contractor_hub.current_contract.status == CONTRACT_STATUS_EXTRACTING)
data["extraction_enroute"] = TRUE
screen_to_be = "extracted"
data["logged_in"] = TRUE
data["station_name"] = GLOB.station_name
data["redeemable_tc"] = traitor_data.contract_TC_to_redeem
data["redeemable_tc"] = traitor_data.contractor_hub.contract_TC_to_redeem
data["contract_rep"] = traitor_data.contractor_hub.contract_rep
data["page"] = page
@@ -134,9 +151,15 @@
"item_icon" = hub_item.item_icon
))
for (var/datum/syndicate_contract/contract in traitor_data.assigned_contracts)
for (var/datum/syndicate_contract/contract in traitor_data.contractor_hub.assigned_contracts)
var/target_rank = ""
if (contract.contract.target)
var/datum/data/record/record = find_record("name", contract.contract.target.current.real_name, GLOB.data_core.general)
target_rank = record.fields["rank"]
data["contracts"] += list(list(
"target" = contract.contract.target,
"target_rank" = target_rank,
"payout" = contract.contract.payout,
"payout_bonus" = contract.contract.payout_bonus,
"dropoff" = contract.contract.dropoff,
@@ -145,24 +168,36 @@
))
var/direction
if (traitor_data.current_contract)
if (traitor_data.contractor_hub.current_contract)
var/turf/curr = get_turf(user)
var/turf/dropoff_turf
data["current_location"] = "[get_area_name(curr, TRUE)]"
for (var/turf/content in traitor_data.current_contract.contract.dropoff.contents)
for (var/turf/content in traitor_data.contractor_hub.current_contract.contract.dropoff.contents)
if (isturf(content))
dropoff_turf = content
break
if(curr.z == dropoff_turf.z) //Direction calculations for same z-level only
direction = uppertext(dir2text(get_dir(curr, dropoff_turf))) //Direction text (East, etc). Not as precise, but still helpful.
if(get_area(user) == traitor_data.current_contract.contract.dropoff)
if(get_area(user) == traitor_data.contractor_hub.current_contract.contract.dropoff)
direction = "LOCATION CONFIRMED"
else
direction = "???"
data["dropoff_direction"] = direction
if (page == CONTRACT_UPLINK_PAGE_HUB)
screen_to_be = "store"
if (!screen_to_be)
screen_to_be = "contracts"
else
data["logged_in"] = FALSE
if (!screen_to_be)
screen_to_be = "assign"
program_icon_state = screen_to_be
update_computer_icon()
return data