mirror of
https://github.com/Aurorastation/Aurora-Old.git
synced 2026-08-25 05:36:19 +01:00
Merge resolution.
This commit is contained in:
@@ -20,17 +20,39 @@ world/IsBanned(key,address,computer_id)
|
||||
return list("reason"="Using ToR", "desc"="\nReason: The network you are using to connect has been banned.\nIf you believe this is a mistake, please request help at [config.banappeals]")
|
||||
|
||||
if(config && config.ip_blacklist_enabled)
|
||||
msg_scopes("Doing blacklist stuff")
|
||||
if(!blacklist)
|
||||
loadBlacklist()
|
||||
if(blacklist)
|
||||
if(address in blacklist)
|
||||
log_access("Failed Login: [src] - Blacklisted IP")
|
||||
message_admins("\blue Failed Login: [src] - Blacklisted IP")
|
||||
AddBan(ckey(key), computer_id, "Bad IP", "Automated Ban", 0, 0)
|
||||
return list("reason"="IP Blacklisted", "desc"="\nReason: This IP has been blacklisted from the server.\nIf you believe this is a mistake, please request help at [config.banappeals]")
|
||||
var/banhe = 0
|
||||
msg_scopes("Checking [key]'s IP for blacklist.")
|
||||
if(!establish_db_connection())
|
||||
//No database. Make do!
|
||||
error("Database connection failed while checking blacklist. Reverted to old system.")
|
||||
|
||||
msg_scopes("Executing old blacklisting.")
|
||||
if(!blacklist)
|
||||
loadBlacklist()
|
||||
if(blacklist)
|
||||
if(address in blacklist)
|
||||
banhe = 1
|
||||
else
|
||||
msg_scopes("Where is the blacklist!")
|
||||
else
|
||||
msg_scopes("Where is the blacklist!")
|
||||
//Have data, will base.
|
||||
var/DBQuery/query = dbcon.NewQuery("SELECT ip FROM aurora_ipblacklist WHERE ip = '[address]'")
|
||||
query.Execute()
|
||||
|
||||
while(query.NextRow())
|
||||
var/bip = query.item[1]
|
||||
|
||||
if(bip == address)
|
||||
banhe = 1
|
||||
|
||||
if(banhe == 1)
|
||||
log_access("Failed Login: [key] - Blacklisted IP")
|
||||
message_admins("\blue Failed Login: [key] - Blacklisted IP")
|
||||
message_mods("\blue Failed Login: [key] - Blacklisted IP")
|
||||
AddBan(ckey(key), computer_id, "Bad IP", "Automated Ban", 0, 0)
|
||||
return list("reason"="IP Blacklisted", "desc"="\nReason: This IP has been blacklisted from the server.\nIf you believe this is a mistake, please request help at [config.banappeals]")
|
||||
|
||||
msg_scopes("[key]'s blacklist check completed.")
|
||||
|
||||
if(config.ban_legacy_system)
|
||||
|
||||
|
||||
@@ -159,8 +159,6 @@ var/list/admin_verbs_dev = list(
|
||||
/client/proc/restart_controller,
|
||||
/client/proc/enable_debug_verbs,
|
||||
/client/proc/toggledebuglogs,
|
||||
/client/proc/SDQL_query,
|
||||
/client/proc/SDQL2_query,
|
||||
/client/proc/cmd_dev_say,
|
||||
/client/proc/cmd_dev_bst,
|
||||
/client/proc/cmd_dev_reset_gravity,
|
||||
@@ -184,6 +182,8 @@ var/list/admin_verbs_server = list(
|
||||
/datum/admins/proc/toggleAI,
|
||||
/client/proc/cmd_admin_delete, /*delete an instance/object/mob/etc*/
|
||||
/client/proc/cmd_debug_del_all,
|
||||
/client/proc/SDQL_query,
|
||||
/client/proc/SDQL2_query,
|
||||
/datum/admins/proc/adrev,
|
||||
/datum/admins/proc/adspawn,
|
||||
/datum/admins/proc/adjump,
|
||||
@@ -216,8 +216,6 @@ var/list/admin_verbs_debug = list(
|
||||
/client/proc/enable_debug_verbs,
|
||||
/client/proc/callproc,
|
||||
/client/proc/toggledebuglogs,
|
||||
/client/proc/SDQL_query,
|
||||
/client/proc/SDQL2_query,
|
||||
/client/proc/cmd_dev_reset_gravity,
|
||||
/client/proc/cmd_dev_reset_floating,
|
||||
/client/proc/fillspace,
|
||||
|
||||
@@ -553,7 +553,44 @@
|
||||
dat += "<tr><td><i>Traitor not found!</i></td></tr>"
|
||||
dat += "</table>"
|
||||
|
||||
var/datum/game_mode/mutiny/mutiny = get_mutiny_mode()
|
||||
if(mutiny)
|
||||
dat += mutiny.check_antagonists_ui(src)
|
||||
|
||||
dat += "</body></html>"
|
||||
usr << browse(dat, "window=roundstatus;size=400x500")
|
||||
else
|
||||
alert("The game hasn't started yet!")
|
||||
|
||||
/proc/check_role_table(name, list/members, admins, show_objectives=1)
|
||||
var/txt = "<br><table cellspacing=5><tr><td><b>[name]</b></td><td></td></tr>"
|
||||
for(var/datum/mind/M in members)
|
||||
txt += check_role_table_row(M.current, admins, show_objectives)
|
||||
txt += "</table>"
|
||||
return txt
|
||||
|
||||
/proc/check_role_table_row(mob/M, admins=src, show_objectives)
|
||||
if (!istype(M))
|
||||
return "<tr><td><i>Not found!</i></td></tr>"
|
||||
|
||||
var/txt = {"
|
||||
<tr>
|
||||
<td>
|
||||
<a href='?src=\ref[admins];adminplayeropts=\ref[M]'>[M.real_name]</a>
|
||||
[M.client ? "" : " <i>(logged out)</i>"]
|
||||
[M.is_dead() ? " <b><font color='red'>(DEAD)</font></b>" : ""]
|
||||
</td>
|
||||
<td>
|
||||
<a href='?src=\ref[usr];priv_msg=\ref[M]'>PM</a>
|
||||
</td>
|
||||
"}
|
||||
|
||||
if (show_objectives)
|
||||
txt += {"
|
||||
<td>
|
||||
<a href='?src=\ref[admins];traitor=\ref[M]'>Show Objective</a>
|
||||
</td>
|
||||
"}
|
||||
|
||||
txt += "</tr>"
|
||||
return txt
|
||||
@@ -6,6 +6,10 @@
|
||||
message_admins("[usr.key] has attempted to override the admin panel!")
|
||||
return
|
||||
|
||||
if(ticker.mode && ticker.mode.check_antagonists_topic(href, href_list))
|
||||
check_antagonists()
|
||||
return
|
||||
|
||||
if(href_list["makeAntag"])
|
||||
switch(href_list["makeAntag"])
|
||||
if("1")
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
/client/proc/SDQL_query(query_text as message)
|
||||
set category = "Admin"
|
||||
if(!check_rights(R_DEBUG)) //Shouldn't happen... but just to be safe.
|
||||
if(!check_rights(R_SERVER)) //Shouldn't happen... but just to be safe.
|
||||
message_admins("\red ERROR: Non-admin [usr.key] attempted to execute a SDQL query!")
|
||||
log_admin("Non-admin [usr.key] attempted to execute a SDQL query!")
|
||||
|
||||
|
||||
@@ -36,19 +36,10 @@ var/inactive_keys = "None<br>"
|
||||
//grab all ckeys associated with custom items
|
||||
var/list/ckeys_with_customitems = list()
|
||||
|
||||
var/file = file2text("config/custom_items.txt")
|
||||
var/lines = text2list(file, "\n")
|
||||
|
||||
for(var/line in lines)
|
||||
// split & clean up
|
||||
var/list/Entry = text2list(line, ":")
|
||||
for(var/i = 1 to Entry.len)
|
||||
Entry[i] = trim(Entry[i])
|
||||
|
||||
if(Entry.len < 1)
|
||||
continue
|
||||
|
||||
var/cur_key = Entry[1]
|
||||
var/DBQuery/query_ckeys = dbcon.NewQuery("SELECT ckey FROM aurora_customitems")
|
||||
query_ckeys.Execute()
|
||||
while(query_ckeys.NextRow())
|
||||
var/cur_key = query_ckeys.item[1]
|
||||
if(!ckeys_with_customitems.Find(cur_key))
|
||||
ckeys_with_customitems.Add(cur_key)
|
||||
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
set desc = "Retrieve any session logfiles saved by dreamdeamon."
|
||||
set category = null
|
||||
|
||||
var/path = browse_files("data/logs/runtime/")
|
||||
var/path = browse_files("data/runtime/")
|
||||
if(!path)
|
||||
return
|
||||
|
||||
|
||||
@@ -17,7 +17,8 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set
|
||||
"ninja" = "true", // 10
|
||||
"vox raider" = IS_MODE_COMPILED("heist"), // 11
|
||||
"diona" = 1, // 12
|
||||
"vampire" = IS_MODE_COMPILED("vampire") // 13
|
||||
"vampire" = IS_MODE_COMPILED("vampire"), // 13
|
||||
"mutineer" = IS_MODE_COMPILED("mutiny") // 14
|
||||
)
|
||||
|
||||
var/const/MAX_SAVE_SLOTS = 20
|
||||
|
||||
@@ -13,19 +13,28 @@ var/global/list/seen_religions = list()
|
||||
return
|
||||
|
||||
var/global/list/citizenship_choices = list(
|
||||
"Earth",
|
||||
"Mars",
|
||||
"Moghes",
|
||||
"Ahdomai",
|
||||
"Qerrbalak"
|
||||
"Sol Alliance",
|
||||
"Republic of Elyra",
|
||||
"People’s Republic of Adhomai",
|
||||
"Moghes Hegemony",
|
||||
"Skrellian Confederacy",
|
||||
"None",
|
||||
"Other"
|
||||
)
|
||||
|
||||
var/global/list/home_system_choices = list(
|
||||
"Sol",
|
||||
"Nyx",
|
||||
"Tau Ceti",
|
||||
"Epsilon Ursae Majoris",
|
||||
"S'randarr"
|
||||
"Epsilon Eridani",
|
||||
"Altair",
|
||||
"Trimurti",
|
||||
"Nralakk",
|
||||
"Uueoa-Esa",
|
||||
"S’rand’marr",
|
||||
"Sedantis",
|
||||
"Jedeed Isfahan",
|
||||
"Other"
|
||||
)
|
||||
|
||||
var/global/list/faction_choices = list(
|
||||
@@ -43,11 +52,12 @@ var/global/list/faction_choices = list(
|
||||
)
|
||||
|
||||
var/global/list/religion_choices = list(
|
||||
"Unitarianism",
|
||||
"Hinduism",
|
||||
"Buddhist",
|
||||
"Islamic",
|
||||
"Buddhism",
|
||||
"Islam",
|
||||
"Christian",
|
||||
"Agnostic",
|
||||
"Deist"
|
||||
"Deist",
|
||||
"None",
|
||||
"Other"
|
||||
)
|
||||
@@ -91,6 +91,11 @@ proc/populate_gear_list()
|
||||
path = /obj/item/weapon/reagent_containers/food/drinks/flask/barflask
|
||||
cost = 2
|
||||
|
||||
/datum/gear/cards
|
||||
display_name = "deck of cards"
|
||||
path = /obj/item/weapon/deck
|
||||
cost = 1
|
||||
|
||||
/datum/gear/tie_horrible
|
||||
display_name = "horrible tie"
|
||||
path = /obj/item/clothing/tie/horrible
|
||||
|
||||
@@ -19,6 +19,12 @@
|
||||
icon_state = "policehelm"
|
||||
flags_inv = 0
|
||||
|
||||
/obj/item/clothing/head/helmet/secfcap
|
||||
name = "officer's cap"
|
||||
desc = "A security officer's cap."
|
||||
icon_state = "officercap"
|
||||
flags_inv = 0
|
||||
|
||||
/obj/item/clothing/head/helmet/riot
|
||||
name = "riot helmet"
|
||||
desc = "It's a helmet specifically designed to protect against close range attacks."
|
||||
|
||||
@@ -358,7 +358,7 @@
|
||||
/obj/item/clothing/head/helmet/space/rig/syndi
|
||||
name = "blood-red hardsuit helmet"
|
||||
desc = "An advanced helmet designed for work in special operations. Property of Gorlex Marauders."
|
||||
icon_state = "rig0-syndie"
|
||||
icon_state = "rig0-syndi"
|
||||
item_state = "syndie_helm"
|
||||
item_color = "syndie"
|
||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 35, bio = 100, rad = 60)
|
||||
@@ -383,7 +383,7 @@
|
||||
usr << "This helmet has a built-in camera. It's [camera ? "" : "in"]active."
|
||||
|
||||
/obj/item/clothing/suit/space/rig/syndi
|
||||
icon_state = "rig-syndie"
|
||||
icon_state = "rig-syndi"
|
||||
name = "blood-red hardsuit"
|
||||
desc = "An advanced suit that protects against injuries during special operations. Property of Gorlex Marauders."
|
||||
item_state = "syndie_hardsuit"
|
||||
|
||||
@@ -32,6 +32,11 @@
|
||||
icon_state = "warden_jacket"
|
||||
item_state = "armor"
|
||||
|
||||
/obj/item/clothing/suit/armor/vest/warden/jacket
|
||||
name = "Warden's jacket"
|
||||
desc = "An armoured jacket with silver rank pips and livery."
|
||||
icon_state = "formal_warden"
|
||||
item_state = "formal_warden"
|
||||
|
||||
/obj/item/clothing/suit/armor/riot
|
||||
name = "Riot Suit"
|
||||
|
||||
@@ -58,6 +58,16 @@
|
||||
item_state = "warden_corporate"
|
||||
item_color = "warden_corporate"
|
||||
|
||||
/obj/item/clothing/under/rank/security/formal
|
||||
icon_state = "sec_f"
|
||||
item_state = "sec_f"
|
||||
item_color = "sec_f"
|
||||
|
||||
/obj/item/clothing/under/rank/warden/formal
|
||||
icon_state = "warden_f"
|
||||
item_state = "warden_f"
|
||||
item_color = "warden_f"
|
||||
|
||||
/obj/item/clothing/under/tactical
|
||||
name = "tactical jumpsuit"
|
||||
desc = "It's made of a slightly sturdier material than standard jumpsuits, to allow for robust protection."
|
||||
@@ -128,6 +138,11 @@
|
||||
item_state = "hos_corporate"
|
||||
item_color = "hos_corporate"
|
||||
|
||||
/obj/item/clothing/under/rank/head_of_security/formal
|
||||
icon_state = "hos_f"
|
||||
item_state = "hos_f"
|
||||
item_color = "hos_f"
|
||||
|
||||
/obj/item/clothing/head/helmet/HoS
|
||||
name = "Head of Security Hat"
|
||||
desc = "The hat of the Head of Security. For showing the officers who's in charge."
|
||||
@@ -156,6 +171,11 @@
|
||||
flags_inv = 0
|
||||
siemens_coefficient = 0.6
|
||||
|
||||
/obj/item/clothing/suit/armor/hos/formal
|
||||
name = "Head of Security's jacket"
|
||||
desc = "An armoured jacket with golden rank pips and livery."
|
||||
icon_state = "formal_hos"
|
||||
item_state = "formal_hos"
|
||||
|
||||
/obj/item/clothing/head/helmet/HoS/dermal
|
||||
name = "Dermal Armour Patch"
|
||||
|
||||
@@ -4,6 +4,11 @@
|
||||
//for multiple items just add mutliple entries, unless i change it to be a listlistlist
|
||||
//yes, it has to be an item, you can't pick up nonitems
|
||||
|
||||
/*
|
||||
*Old procs for custom items start here
|
||||
*Includes list creation and spawn management
|
||||
*
|
||||
|
||||
/var/list/custom_items = list()
|
||||
|
||||
/hook/startup/proc/loadCustomItems()
|
||||
@@ -11,7 +16,7 @@
|
||||
custom_items = text2list(custom_items_file, "\n")
|
||||
return 1
|
||||
|
||||
/proc/EquipCustomItems(mob/living/carbon/human/M)
|
||||
proc/EquipCustomItems(mob/living/carbon/human/M)
|
||||
for(var/line in custom_items)
|
||||
// split & clean up
|
||||
var/list/Entry = text2list(line, ":")
|
||||
@@ -119,4 +124,62 @@
|
||||
|
||||
skip:
|
||||
if (ok == 0) // Finally, since everything else failed, place it on the ground
|
||||
Item.loc = get_turf(M.loc)
|
||||
Item.loc = get_turf(M.loc)
|
||||
*
|
||||
*
|
||||
*New proc, SQL based, for custom item spawning starts here.
|
||||
*
|
||||
*/
|
||||
|
||||
/proc/EquipCustomItems(mob/living/carbon/human/M)
|
||||
establish_db_connection()
|
||||
if(!dbcon.IsConnected())
|
||||
error("Custom item check failed: unable to connect to database.")
|
||||
return
|
||||
|
||||
var/ckeyl = sanitizeSQL(M.ckey)
|
||||
var/DBQuery/query = dbcon.NewQuery("SELECT item, job, real_name FROM aurora_customitems WHERE ckey='[ckeyl]'")
|
||||
query.Execute()
|
||||
|
||||
while(query.NextRow())
|
||||
var/path = query.item[1]
|
||||
var/jobs = query.item[2]
|
||||
var/char = query.item[3]
|
||||
//Okay, so we have a query. It will only fill the var/path if the character actually has an item.
|
||||
//I guess recursive spawn code is a thing to do, creating a list, and running a for() on that list seems excessive
|
||||
|
||||
//Getting lazy, alternative would be to use two variables, but this is just self-updating, really
|
||||
if(char == M.real_name)
|
||||
path = trim(path)
|
||||
path = text2path(path)
|
||||
var/obj/item/Item = new path()
|
||||
|
||||
var/ok = 0
|
||||
|
||||
if(!jobs)
|
||||
goto skip
|
||||
|
||||
if(jobs)
|
||||
jobs = text2list(jobs, ",")
|
||||
if(M.mind.role_alt_title in jobs)
|
||||
goto skip
|
||||
else
|
||||
del(Item)
|
||||
ok = 1
|
||||
continue
|
||||
|
||||
|
||||
skip:
|
||||
if(ok == 0)
|
||||
if(istype(M.back,/obj/item/weapon/storage) && M.back:contents.len < M.back:storage_slots) // Try to place it in something on the mob's back
|
||||
Item.loc = M.back
|
||||
ok = 1
|
||||
continue
|
||||
else if(ok == 0)
|
||||
for(var/obj/item/weapon/storage/S in M.contents) // Try to place it in any item that can store stuff, on the mob.
|
||||
if (S.contents.len < S.storage_slots)
|
||||
Item.loc = S
|
||||
ok = 1
|
||||
continue
|
||||
else if(ok == 0)// Finally, since everything else failed, place it on the ground
|
||||
Item.loc = get_turf(M.loc)
|
||||
|
||||
@@ -76,7 +76,7 @@ obj/machinery/computer/forensic_scanning
|
||||
var/scan_name = ""
|
||||
var/scan_process = 0
|
||||
|
||||
req_access = list(access_forensics_lockers)
|
||||
req_access = list(access_forensics)
|
||||
|
||||
|
||||
New()
|
||||
|
||||
@@ -523,6 +523,9 @@
|
||||
if(src.closed == 1)
|
||||
user << "\red Open the cover before inserting the sample."
|
||||
return
|
||||
if(!istype(W))
|
||||
user << "\red You struggle to put that in the machine."
|
||||
return
|
||||
if(W.used == 1)
|
||||
src.bloodsamp = W
|
||||
user.drop_item()
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
|
||||
/obj/machinery/account_database
|
||||
name = "Accounts uplink console"
|
||||
name = "Accounts uplink terminal"
|
||||
desc = "Access transaction logs, account data and all kinds of other financial records."
|
||||
icon = 'icons/obj/computer.dmi'
|
||||
icon_state = "aiupload"
|
||||
@@ -9,115 +9,134 @@
|
||||
var/receipt_num
|
||||
var/machine_id = ""
|
||||
var/obj/item/weapon/card/id/held_card
|
||||
var/access_level = 0
|
||||
var/datum/money_account/detailed_account_view
|
||||
var/creating_new_account = 0
|
||||
|
||||
proc/get_access_level()
|
||||
if (!held_card)
|
||||
return 0
|
||||
if(access_cent_captain in held_card.access)
|
||||
return 2
|
||||
else if(access_hop in held_card.access || access_captain in held_card.access)
|
||||
return 1
|
||||
|
||||
proc/create_transation(target, reason, amount)
|
||||
var/datum/transaction/T = new()
|
||||
T.target_name = target
|
||||
T.purpose = reason
|
||||
T.amount = amount
|
||||
T.date = current_date_string
|
||||
T.time = worldtime2text()
|
||||
T.source_terminal = machine_id
|
||||
return T
|
||||
|
||||
proc/accounting_letterhead(report_name)
|
||||
return {"
|
||||
<center><h1><b>[report_name]</b></h1></center>
|
||||
<center><small><i>[station_name()] Accounting Report</i></small></center>
|
||||
<hr>
|
||||
<u>Generated By:</u> [held_card.registered_name], [held_card.assignment]<br>
|
||||
"}
|
||||
|
||||
/obj/machinery/account_database/New()
|
||||
..()
|
||||
machine_id = "[station_name()] Acc. DB #[num_financial_terminals++]"
|
||||
..()
|
||||
|
||||
/obj/machinery/account_database/attackby(obj/O, mob/user)
|
||||
if(!istype(O, /obj/item/weapon/card/id))
|
||||
return ..()
|
||||
|
||||
if(!held_card)
|
||||
user.drop_item()
|
||||
O.loc = src
|
||||
held_card = O
|
||||
|
||||
nanomanager.update_uis(src)
|
||||
|
||||
attack_hand(user)
|
||||
|
||||
/obj/machinery/account_database/attack_hand(mob/user as mob)
|
||||
if(get_dist(src,user) <= 1)
|
||||
var/dat = "<b>Accounts Database</b><br>"
|
||||
dat += "<i>[machine_id]</i><br>"
|
||||
dat += "Confirm identity: <a href='?src=\ref[src];choice=insert_card'>[held_card ? held_card : "-----"]</a><br>"
|
||||
if(stat & (NOPOWER|BROKEN)) return
|
||||
ui_interact(user)
|
||||
|
||||
if(access_level > 0)
|
||||
dat += "You may not edit accounts at this terminal, only create and view them.<br>"
|
||||
if(creating_new_account)
|
||||
dat += "<br>"
|
||||
dat += "<a href='?src=\ref[src];choice=view_accounts_list;'>Return to accounts list</a>"
|
||||
dat += "<form name='create_account' action='?src=\ref[src]' method='get'>"
|
||||
dat += "<input type='hidden' name='src' value='\ref[src]'>"
|
||||
dat += "<input type='hidden' name='choice' value='finalise_create_account'>"
|
||||
dat += "<b>Holder name:</b> <input type='text' id='holder_name' name='holder_name' style='width:250px; background-color:white;'><br>"
|
||||
dat += "<b>Initial funds:</b> <input type='text' id='starting_funds' name='starting_funds' style='width:250px; background-color:white;'> (subtracted from station account)<br>"
|
||||
dat += "<i>New accounts are automatically assigned a secret number and pin, which are printed separately in a sealed package.</i><br>"
|
||||
dat += "<input type='submit' value='Create'><br>"
|
||||
dat += "</form>"
|
||||
else
|
||||
if(detailed_account_view)
|
||||
dat += "<br>"
|
||||
dat += "<a href='?src=\ref[src];choice=view_accounts_list;'>Return to accounts list</a><hr>"
|
||||
dat += "<b>Account number:</b> #[detailed_account_view.account_number]<br>"
|
||||
dat += "<b>Account holder:</b> [detailed_account_view.owner_name]<br>"
|
||||
dat += "<b>Account balance:</b> $[detailed_account_view.money]<br>"
|
||||
if(access_level > 1)
|
||||
dat += "<b><a href='?src=\ref[src];choice=add_funds'>Silently add funds (no transaction log)</a><br>"
|
||||
dat += "<b><a href='?src=\ref[src];choice=remove_funds'>Silently remove funds (no transaction log)</a><br>"
|
||||
dat += "<b><a href='?src=\ref[src];choice=toggle_suspension'>[detailed_account_view.suspended ? "Unsuspend account" : "Suspend account"]</a><br>"
|
||||
dat += "<table border=1 style='width:100%'>"
|
||||
dat += "<tr>"
|
||||
dat += "<td><b>Date</b></td>"
|
||||
dat += "<td><b>Time</b></td>"
|
||||
dat += "<td><b>Target</b></td>"
|
||||
dat += "<td><b>Purpose</b></td>"
|
||||
dat += "<td><b>Value</b></td>"
|
||||
dat += "<td><b>Source terminal ID</b></td>"
|
||||
dat += "</tr>"
|
||||
for(var/datum/transaction/T in detailed_account_view.transaction_log)
|
||||
dat += "<tr>"
|
||||
dat += "<td>[T.date]</td>"
|
||||
dat += "<td>[T.time]</td>"
|
||||
dat += "<td>[T.target_name]</td>"
|
||||
dat += "<td>[T.purpose]</td>"
|
||||
dat += "<td>$[T.amount]</td>"
|
||||
dat += "<td>[T.source_terminal]</td>"
|
||||
dat += "</tr>"
|
||||
dat += "</table>"
|
||||
else
|
||||
dat += "<a href='?src=\ref[src];choice=create_account;'>Create new account</a><br><br>"
|
||||
dat += "<table border=1 style='width:100%'>"
|
||||
for(var/i=1, i<=all_money_accounts.len, i++)
|
||||
var/datum/money_account/D = all_money_accounts[i]
|
||||
dat += "<tr>"
|
||||
dat += "<td>#[D.account_number]</td>"
|
||||
dat += "<td>[D.owner_name]</td>"
|
||||
dat += "<td>[D.suspended ? "SUSPENDED" : ""]</td>"
|
||||
dat += "<td><a href='?src=\ref[src];choice=view_account_detail;account_index=[i]'>View in detail</a></td>"
|
||||
dat += "</tr>"
|
||||
dat += "</table>"
|
||||
/obj/machinery/account_database/ui_interact(mob/user, ui_key="main", var/datum/nanoui/ui = null, var/force_open = 1)
|
||||
user.set_machine(src)
|
||||
|
||||
user << browse(dat,"window=account_db;size=700x650")
|
||||
else
|
||||
user << browse(null,"window=account_db")
|
||||
var/data[0]
|
||||
data["src"] = "\ref[src]"
|
||||
data["id_inserted"] = !!held_card
|
||||
data["id_card"] = held_card ? text("[held_card.registered_name], [held_card.assignment]") : "-----"
|
||||
data["access_level"] = get_access_level()
|
||||
data["machine_id"] = machine_id
|
||||
data["creating_new_account"] = creating_new_account
|
||||
data["detailed_account_view"] = !!detailed_account_view
|
||||
data["station_account_number"] = station_account.account_number
|
||||
data["transactions"] = null
|
||||
data["accounts"] = null
|
||||
|
||||
/obj/machinery/account_database/attackby(O as obj, user as mob)//TODO:SANITY
|
||||
if(istype(O, /obj/item/weapon/card))
|
||||
var/obj/item/weapon/card/id/idcard = O
|
||||
if(!held_card)
|
||||
usr.drop_item()
|
||||
idcard.loc = src
|
||||
held_card = idcard
|
||||
if (detailed_account_view)
|
||||
data["account_number"] = detailed_account_view.account_number
|
||||
data["owner_name"] = detailed_account_view.owner_name
|
||||
data["money"] = detailed_account_view.money
|
||||
data["suspended"] = detailed_account_view.suspended
|
||||
|
||||
if(access_cent_captain in idcard.access)
|
||||
access_level = 2
|
||||
else if(access_hop in idcard.access || access_captain in idcard.access)
|
||||
access_level = 1
|
||||
else
|
||||
..()
|
||||
var/list/trx[0]
|
||||
for (var/datum/transaction/T in detailed_account_view.transaction_log)
|
||||
trx.Add(list(list(\
|
||||
"date" = T.date, \
|
||||
"time" = T.time, \
|
||||
"target_name" = T.target_name, \
|
||||
"purpose" = T.purpose, \
|
||||
"amount" = T.amount, \
|
||||
"source_terminal" = T.source_terminal)))
|
||||
|
||||
/obj/machinery/account_database/Topic(var/href, var/href_list)
|
||||
if (trx.len > 0)
|
||||
data["transactions"] = trx
|
||||
|
||||
var/list/accounts[0]
|
||||
for(var/i=1, i<=all_money_accounts.len, i++)
|
||||
var/datum/money_account/D = all_money_accounts[i]
|
||||
accounts.Add(list(list(\
|
||||
"account_number"=D.account_number,\
|
||||
"owner_name"=D.owner_name,\
|
||||
"suspended"=D.suspended ? "SUSPENDED" : "",\
|
||||
"account_index"=i)))
|
||||
|
||||
if (accounts.len > 0)
|
||||
data["accounts"] = accounts
|
||||
|
||||
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
if (!ui)
|
||||
ui = new(user, src, ui_key, "accounts_terminal.tmpl", src.name, 400, 640)
|
||||
ui.set_initial_data(data)
|
||||
ui.open()
|
||||
|
||||
/obj/machinery/account_database/Topic(href, href_list)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
var/datum/nanoui/ui = nanomanager.get_open_ui(usr, src, "main")
|
||||
|
||||
if(href_list["choice"])
|
||||
switch(href_list["choice"])
|
||||
if("create_account")
|
||||
creating_new_account = 1
|
||||
|
||||
if("add_funds")
|
||||
var/amount = input("Enter the amount you wish to add", "Silently add funds") as num
|
||||
if(detailed_account_view)
|
||||
detailed_account_view.money += amount
|
||||
|
||||
if("remove_funds")
|
||||
var/amount = input("Enter the amount you wish to remove", "Silently remove funds") as num
|
||||
if(detailed_account_view)
|
||||
detailed_account_view.money -= amount
|
||||
|
||||
if("toggle_suspension")
|
||||
if(detailed_account_view)
|
||||
if(detailed_account_view.suspended)
|
||||
detailed_account_view.suspended = 0
|
||||
else
|
||||
detailed_account_view.suspended = 1
|
||||
detailed_account_view.suspended = !detailed_account_view.suspended
|
||||
callHook("change_account_status", list(detailed_account_view))
|
||||
|
||||
if("finalise_create_account")
|
||||
var/account_name = href_list["holder_name"]
|
||||
var/starting_funds = max(text2num(href_list["starting_funds"]), 0)
|
||||
@@ -127,14 +146,11 @@
|
||||
station_account.money -= starting_funds
|
||||
|
||||
//create a transaction log entry
|
||||
var/datum/transaction/T = new()
|
||||
T.target_name = account_name
|
||||
T.purpose = "New account funds initialisation"
|
||||
T.amount = "([starting_funds])"
|
||||
T.date = current_date_string
|
||||
T.time = worldtime2text()
|
||||
T.source_terminal = machine_id
|
||||
station_account.transaction_log.Add(T)
|
||||
var/trx = create_transation(account_name, "New account activation", "([starting_funds])")
|
||||
station_account.transaction_log.Add(trx)
|
||||
|
||||
creating_new_account = 0
|
||||
ui.close()
|
||||
|
||||
creating_new_account = 0
|
||||
if("insert_card")
|
||||
@@ -144,7 +160,6 @@
|
||||
if(ishuman(usr) && !usr.get_active_hand())
|
||||
usr.put_in_hands(held_card)
|
||||
held_card = null
|
||||
access_level = 0
|
||||
|
||||
else
|
||||
var/obj/item/I = usr.get_active_hand()
|
||||
@@ -154,16 +169,103 @@
|
||||
C.loc = src
|
||||
held_card = C
|
||||
|
||||
if(access_cent_captain in C.access)
|
||||
access_level = 2
|
||||
else if(access_hop in C.access || access_captain in C.access)
|
||||
access_level = 1
|
||||
if("view_account_detail")
|
||||
var/index = text2num(href_list["account_index"])
|
||||
if(index && index <= all_money_accounts.len)
|
||||
detailed_account_view = all_money_accounts[index]
|
||||
|
||||
if("view_accounts_list")
|
||||
detailed_account_view = null
|
||||
creating_new_account = 0
|
||||
|
||||
src.attack_hand(usr)
|
||||
if("revoke_payroll")
|
||||
var/funds = detailed_account_view.money
|
||||
var/account_trx = create_transation(station_account.owner_name, "Revoke payroll", "([funds])")
|
||||
var/station_trx = create_transation(detailed_account_view.owner_name, "Revoke payroll", funds)
|
||||
|
||||
station_account.money += funds
|
||||
detailed_account_view.money = 0
|
||||
|
||||
detailed_account_view.transaction_log.Add(account_trx)
|
||||
station_account.transaction_log.Add(station_trx)
|
||||
|
||||
callHook("revoke_payroll", list(detailed_account_view))
|
||||
|
||||
if("print")
|
||||
var/text
|
||||
var/obj/item/weapon/paper/P = new(loc)
|
||||
if (detailed_account_view)
|
||||
P.name = "account #[detailed_account_view.account_number] details"
|
||||
var/title = "Account #[detailed_account_view.account_number] Details"
|
||||
text = {"
|
||||
[accounting_letterhead(title)]
|
||||
<u>Holder:</u> [detailed_account_view.owner_name]<br>
|
||||
<u>Balance:</u> $[detailed_account_view.money]<br>
|
||||
<u>Status:</u> [detailed_account_view.suspended ? "Suspended" : "Active"]<br>
|
||||
<u>Transactions:</u> ([detailed_account_view.transaction_log.len])<br>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<td>Timestamp</td>
|
||||
<td>Target</td>
|
||||
<td>Reason</td>
|
||||
<td>Value</td>
|
||||
<td>Terminal</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
"}
|
||||
|
||||
for (var/datum/transaction/T in detailed_account_view.transaction_log)
|
||||
text += {"
|
||||
<tr>
|
||||
<td>[T.date] [T.time]</td>
|
||||
<td>[T.target_name]</td>
|
||||
<td>[T.purpose]</td>
|
||||
<td>[T.amount]</td>
|
||||
<td>[T.source_terminal]</td>
|
||||
</tr>
|
||||
"}
|
||||
|
||||
text += {"
|
||||
</tbody>
|
||||
</table>
|
||||
"}
|
||||
|
||||
else
|
||||
P.name = "financial account list"
|
||||
text = {"
|
||||
[accounting_letterhead("Financial Account List")]
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<td>Account Number</td>
|
||||
<td>Holder</td>
|
||||
<td>Balance</td>
|
||||
<td>Status</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
"}
|
||||
|
||||
for(var/i=1, i<=all_money_accounts.len, i++)
|
||||
var/datum/money_account/D = all_money_accounts[i]
|
||||
text += {"
|
||||
<tr>
|
||||
<td>#[D.account_number]</td>
|
||||
<td>[D.owner_name]</td>
|
||||
<td>$[D.money]</td>
|
||||
<td>[D.suspended ? "Suspended" : "Active"]</td>
|
||||
</tr>
|
||||
"}
|
||||
|
||||
text += {"
|
||||
</tbody>
|
||||
</table>
|
||||
"}
|
||||
|
||||
P.info = text
|
||||
state("The terminal prints out a report.")
|
||||
|
||||
return 1
|
||||
|
||||
@@ -77,7 +77,7 @@ var/list/event_last_fired = list()
|
||||
possibleEvents[/datum/event/radiation_storm] = active_with_role["Medical"] * 10
|
||||
possibleEvents[/datum/event/spontaneous_appendicitis] = active_with_role["Medical"] * 10
|
||||
possibleEvents[/datum/event/viral_infection] = active_with_role["Medical"] * 20
|
||||
possibleEvents[/datum/event/organ_failure] = active_with_role["Medical"] * 50
|
||||
// possibleEvents[/datum/event/organ_failure] = active_with_role["Medical"] * 50
|
||||
|
||||
possibleEvents[/datum/event/prison_break] = active_with_role["Security"] * 50
|
||||
if(active_with_role["Security"] > 0)
|
||||
|
||||
@@ -41,7 +41,8 @@
|
||||
var/track = null
|
||||
if(istype(src, /mob/dead/observer))
|
||||
if(italics && client.prefs.toggles & CHAT_GHOSTRADIO)
|
||||
return
|
||||
if(!verb == ("whispers" || " quietly" || " softly"))
|
||||
return
|
||||
if(speaker_name != speaker.real_name && speaker.real_name)
|
||||
speaker_name = "[speaker.real_name] ([speaker_name])"
|
||||
track = "(<a href='byond://?src=\ref[src];track=\ref[speaker]'>follow</a>) "
|
||||
@@ -70,9 +71,13 @@
|
||||
return
|
||||
|
||||
var/track = null
|
||||
|
||||
var/speaker_name
|
||||
var/style = "body"
|
||||
|
||||
if(!language)
|
||||
language = new /datum/language/common
|
||||
// if(!speaker)
|
||||
|
||||
//non-verbal languages are garbled if you can't see the speaker. Yes, this includes if they are inside a closet.
|
||||
if (language && (language.flags & NONVERBAL))
|
||||
if (!speaker || (src.sdisabilities & BLIND || src.blinded) || !(speaker in view(src)))
|
||||
@@ -93,13 +98,13 @@
|
||||
|
||||
if(hard_to_hear)
|
||||
message = stars(message)
|
||||
|
||||
var/speaker_name = speaker.name
|
||||
if(speaker)
|
||||
speaker_name = speaker.name
|
||||
|
||||
if(vname)
|
||||
speaker_name = vname
|
||||
|
||||
if(istype(speaker, /mob/living/carbon/human))
|
||||
if(speaker && (istype(speaker, /mob/living/carbon/human)))
|
||||
var/mob/living/carbon/human/H = speaker
|
||||
if(H.voice)
|
||||
speaker_name = H.voice
|
||||
@@ -113,7 +118,7 @@
|
||||
var/jobname // the mob's "job"
|
||||
var/mob/living/carbon/human/impersonating //The crewmember being impersonated, if any.
|
||||
|
||||
if (ishuman(speaker))
|
||||
if (speaker && (ishuman(speaker)))
|
||||
var/mob/living/carbon/human/H = speaker
|
||||
|
||||
if((H.wear_id && istype(H.wear_id,/obj/item/weapon/card/id/syndicate)) && (H.wear_mask && istype(H.wear_mask,/obj/item/clothing/mask/gas/voice)))
|
||||
|
||||
@@ -146,6 +146,14 @@
|
||||
key = "4"
|
||||
flags = SIGNLANG
|
||||
|
||||
/datum/language/vaurcese
|
||||
name = "Vaurcese"
|
||||
desc = "Vaurca native language made of clicks and sputters, \"It's a bugs life.\""
|
||||
speech_verb = "clicks"
|
||||
colour = "vaurca"
|
||||
key = "p"
|
||||
flags = WHITELISTED
|
||||
|
||||
////////////////////////////////////
|
||||
//Not sure if stuff but yeah
|
||||
////////////////////////////////////
|
||||
|
||||
@@ -133,10 +133,11 @@
|
||||
/mob/living/carbon/proc/swap_hand()
|
||||
var/obj/item/item_in_hand = src.get_active_hand()
|
||||
if(item_in_hand) //this segment checks if the item in your hand is twohanded.
|
||||
if(istype(item_in_hand,/obj/item/weapon/twohanded))
|
||||
if(istype(item_in_hand,/obj/item/weapon/twohanded) || istype(item_in_hand,/obj/item/weapon/gun))
|
||||
if(item_in_hand:wielded == 1)
|
||||
usr << "<span class='warning'>Your other hand is too busy holding the [item_in_hand.name]</span>"
|
||||
return
|
||||
|
||||
src.hand = !( src.hand )
|
||||
if(hud_used.l_hand_hud_object && hud_used.r_hand_hud_object)
|
||||
if(hand) //This being 1 means the left hand is in use
|
||||
|
||||
@@ -39,10 +39,12 @@
|
||||
/mob/living/carbon/human/machine/New(var/new_loc)
|
||||
h_style = "blue IPC screen"
|
||||
..(new_loc, "Machine")
|
||||
*/
|
||||
|
||||
/mob/living/carbon/human/machine/isipc()
|
||||
return 1
|
||||
|
||||
/*
|
||||
/mob/living/carbon/human/kocasslani/New(var/new_loc)
|
||||
h_style = "Bald"
|
||||
..(new_loc, "Kocasslani")
|
||||
|
||||
@@ -1857,6 +1857,14 @@
|
||||
holder.icon_state = "hudninja"
|
||||
if("Vampire")
|
||||
holder.icon_state = "hudvampire"
|
||||
if("head_loyalist")
|
||||
holder.icon_state = "loyalist"
|
||||
if("loyalist")
|
||||
holder.icon_state = "loyalist"
|
||||
if("head_mutineer")
|
||||
holder.icon_state = "mutineer"
|
||||
if("mutineer")
|
||||
holder.icon_state = "mutineer"
|
||||
|
||||
hud_list[SPECIALROLE_HUD] = holder
|
||||
hud_updateflag = 0
|
||||
|
||||
@@ -137,7 +137,7 @@
|
||||
else
|
||||
if(!(stunned >= 4))
|
||||
if(message_mode)
|
||||
if(message_mode in (radiochannels | "department"))
|
||||
if(message_mode in (radiochannels | "department" | "special"))
|
||||
if(l_ear && istype(l_ear,/obj/item/device/radio))
|
||||
l_ear.talk_into(src,message, message_mode, verb, speaking)
|
||||
used_radios += l_ear
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
var/death_message = "seizes up and falls limp, their eyes dead and lifeless..."
|
||||
|
||||
var/breath_type = "oxygen" // Non-oxygen gas breathed, if any.
|
||||
var/poison_type = "plasma" // Poisonous air.
|
||||
var/poison_type = "toxins" // Poisonous air.
|
||||
var/exhale_type = "carbon_dioxide" // Exhaled gas type.
|
||||
|
||||
var/total_health = 100 //Point at which the mob will enter crit.
|
||||
@@ -483,7 +483,7 @@
|
||||
|
||||
icobase = 'icons/mob/human_races/r_machine.dmi' //placeholders
|
||||
deform = 'icons/mob/human_races/r_machine.dmi' //bloop blop butts
|
||||
language = "Tradeband" //placeholders //vaurcese, :p to speak. no support on language side yet
|
||||
language = "Vaurcese"
|
||||
unarmed_type = /datum/unarmed_attack/claws //literally butts
|
||||
secondary_unarmed_type = /datum/unarmed_attack/bite/strong
|
||||
rarity_value = 2 //according to the code this does nothing but upset me so i guess it can stay
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
usr << "\red Speech is currently admin-disabled."
|
||||
return
|
||||
|
||||
log_whisper("[src.name]/[src.key] : [message]")
|
||||
// log_whisper("[src.name]/[src.key] : [message]")
|
||||
|
||||
if (src.client)
|
||||
if (src.client.prefs.muted & MUTE_IC)
|
||||
@@ -99,7 +99,7 @@
|
||||
if (!(M.client))
|
||||
continue
|
||||
if(M.stat == DEAD && M.client && (M.client.prefs.toggles & CHAT_GHOSTEARS))
|
||||
listening |= M //I want to see if this does anything for ghosts
|
||||
// listening |= M //I want to see if this does anything for ghosts
|
||||
M.hear_say(message, verb, speaking, alt_name, italics, src)
|
||||
|
||||
//Pass whispers on to anything inside the immediate listeners.
|
||||
|
||||
@@ -17,6 +17,11 @@
|
||||
if("nuclear emergency")
|
||||
if(mind in ticker.mode:syndicates)
|
||||
ticker.mode.update_all_synd_icons()
|
||||
|
||||
if("mutiny")
|
||||
var/datum/game_mode/mutiny/mode = get_mutiny_mode()
|
||||
if(mode)
|
||||
mode.update_all_icons()
|
||||
return .
|
||||
|
||||
//This stuff needs to be merged from cloning.dm but I'm not in the mood to be shouted at for breaking all the things :< ~Carn
|
||||
|
||||
@@ -44,8 +44,17 @@
|
||||
return
|
||||
|
||||
/obj/item/weapon/clipboard/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
|
||||
if(istype(W, /obj/item/weapon/paper) || istype(W, /obj/item/weapon/photo))
|
||||
|
||||
if(istype(W,/obj/item/weapon/stamp))
|
||||
if(!toppaper || !user.loc)
|
||||
return
|
||||
toppaper.loc = user.loc
|
||||
toppaper.attackby(W,user)
|
||||
if(toppaper) // Better safe than runtimes.
|
||||
toppaper.loc = src
|
||||
return
|
||||
|
||||
else if(istype(W, /obj/item/weapon/paper) || istype(W, /obj/item/weapon/photo))
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
if(istype(W, /obj/item/weapon/paper))
|
||||
@@ -107,20 +116,20 @@
|
||||
|
||||
else if(href_list["write"])
|
||||
var/obj/item/weapon/P = locate(href_list["write"])
|
||||
|
||||
|
||||
if(P && (P.loc == src) && istype(P, /obj/item/weapon/paper) && (P == toppaper) )
|
||||
|
||||
|
||||
var/obj/item/I = usr.get_active_hand()
|
||||
|
||||
|
||||
if(istype(I, /obj/item/weapon/pen))
|
||||
|
||||
|
||||
P.attackby(I, usr)
|
||||
|
||||
else if(href_list["remove"])
|
||||
var/obj/item/P = locate(href_list["remove"])
|
||||
|
||||
|
||||
if(P && (P.loc == src) && (istype(P, /obj/item/weapon/paper) || istype(P, /obj/item/weapon/photo)) )
|
||||
|
||||
|
||||
P.loc = usr.loc
|
||||
usr.put_in_hands(P)
|
||||
if(P == toppaper)
|
||||
@@ -133,9 +142,9 @@
|
||||
|
||||
else if(href_list["read"])
|
||||
var/obj/item/weapon/paper/P = locate(href_list["read"])
|
||||
|
||||
|
||||
if(P && (P.loc == src) && istype(P, /obj/item/weapon/paper) )
|
||||
|
||||
|
||||
if(!(istype(usr, /mob/living/carbon/human) || istype(usr, /mob/dead/observer) || istype(usr, /mob/living/silicon)))
|
||||
usr << browse("<HTML><HEAD><TITLE>[P.name]</TITLE></HEAD><BODY>[stars(P.info)][P.stamps]</BODY></HTML>", "window=[P.name]")
|
||||
onclose(usr, "[P.name]")
|
||||
|
||||
@@ -387,8 +387,8 @@
|
||||
user << "<span class='notice'>You are no-longer stabilizing the [name] with both hands.</span>"
|
||||
O.unwield()
|
||||
unwield()
|
||||
if(src)
|
||||
del(src)
|
||||
if(src)
|
||||
del(src)
|
||||
|
||||
/obj/item/weapon/gun/offhand/mob_can_equip(M as mob, slot)
|
||||
return 0 //Because you can't equip your hand yet somehow you can
|
||||
@@ -152,9 +152,16 @@
|
||||
revoke_maint_all_access()
|
||||
feedback_inc("alert_keycard_auth_maintRevoke",1)
|
||||
if("Emergency Response Team")
|
||||
if(!config.ert_admin_call_only)
|
||||
trigger_armed_response_team(1)
|
||||
feedback_inc("alert_keycard_auth_ert",1)
|
||||
if(is_ert_blocked())
|
||||
usr << "\red All emergency response teams are dispatched and can not be called at this time."
|
||||
return
|
||||
|
||||
trigger_armed_response_team(1)
|
||||
feedback_inc("alert_keycard_auth_ert",1)
|
||||
|
||||
/obj/machinery/keycard_auth/proc/is_ert_blocked()
|
||||
if(config.ert_admin_call_only) return 1
|
||||
return ticker.mode && ticker.mode.ert_disabled
|
||||
|
||||
var/global/maint_all_access = 0
|
||||
|
||||
|
||||
Reference in New Issue
Block a user