mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-28 06:27:26 +01:00
Merge branch 'master' into bleeding-edge-freeze
This commit is contained in:
@@ -5,6 +5,7 @@ var/global/list/datum/money_account/department_accounts = list()
|
||||
var/global/next_account_number = 0
|
||||
var/global/obj/machinery/account_database/centcomm_account_db
|
||||
var/global/datum/money_account/vendor_account
|
||||
var/global/list/all_money_accounts = list()
|
||||
|
||||
/proc/create_station_account()
|
||||
if(!station_account)
|
||||
@@ -27,8 +28,7 @@ var/global/datum/money_account/vendor_account
|
||||
|
||||
//add the account
|
||||
station_account.transaction_log.Add(T)
|
||||
for(var/obj/machinery/account_database/A in machines)
|
||||
A.accounts.Add(station_account)
|
||||
all_money_accounts.Add(station_account)
|
||||
|
||||
/proc/create_department_account(department)
|
||||
next_account_number = rand(111111, 999999)
|
||||
@@ -50,14 +50,71 @@ var/global/datum/money_account/vendor_account
|
||||
|
||||
//add the account
|
||||
department_account.transaction_log.Add(T)
|
||||
for(var/obj/machinery/account_database/A in machines)
|
||||
A.accounts.Add(department_account)
|
||||
all_money_accounts.Add(department_account)
|
||||
|
||||
department_accounts[department] = department_account
|
||||
|
||||
//the current ingame time (hh:mm) can be obtained by calling:
|
||||
//worldtime2text()
|
||||
|
||||
/proc/create_account(var/new_owner_name = "Default user", var/starting_funds = 0, var/obj/machinery/account_database/source_db)
|
||||
|
||||
//create a new account
|
||||
var/datum/money_account/M = new()
|
||||
M.owner_name = new_owner_name
|
||||
M.remote_access_pin = rand(1111, 111111)
|
||||
M.money = starting_funds
|
||||
|
||||
//create an entry in the account transaction log for when it was created
|
||||
var/datum/transaction/T = new()
|
||||
T.target_name = new_owner_name
|
||||
T.purpose = "Account creation"
|
||||
T.amount = starting_funds
|
||||
if(!source_db)
|
||||
//set a random date, time and location some time over the past few decades
|
||||
T.date = "[num2text(rand(1,31))] [pick("January","February","March","April","May","June","July","August","September","October","November","December")], 25[rand(10,56)]"
|
||||
T.time = "[rand(0,24)]:[rand(11,59)]"
|
||||
T.source_terminal = "NTGalaxyNet Terminal #[rand(111,1111)]"
|
||||
|
||||
M.account_number = rand(111111, 999999)
|
||||
else
|
||||
T.date = current_date_string
|
||||
T.time = worldtime2text()
|
||||
T.source_terminal = source_db.machine_id
|
||||
|
||||
M.account_number = next_account_number
|
||||
next_account_number += rand(1,25)
|
||||
|
||||
//create a sealed package containing the account details
|
||||
var/obj/item/smallDelivery/P = new /obj/item/smallDelivery(source_db.loc)
|
||||
|
||||
var/obj/item/weapon/paper/R = new /obj/item/weapon/paper(P)
|
||||
P.wrapped = R
|
||||
R.name = "Account information: [M.owner_name]"
|
||||
R.info = "<b>Account details (confidential)</b><br><hr><br>"
|
||||
R.info += "<i>Account holder:</i> [M.owner_name]<br>"
|
||||
R.info += "<i>Account number:</i> [M.account_number]<br>"
|
||||
R.info += "<i>Account pin:</i> [M.remote_access_pin]<br>"
|
||||
R.info += "<i>Starting balance:</i> $[M.money]<br>"
|
||||
R.info += "<i>Date and time:</i> [worldtime2text()], [current_date_string]<br><br>"
|
||||
R.info += "<i>Creation terminal ID:</i> [source_db.machine_id]<br>"
|
||||
R.info += "<i>Authorised NT officer overseeing creation:</i> [source_db.held_card.registered_name]<br>"
|
||||
|
||||
//stamp the paper
|
||||
var/image/stampoverlay = image('icons/obj/bureaucracy.dmi')
|
||||
stampoverlay.icon_state = "paper_stamp-cent"
|
||||
if(!R.stamped)
|
||||
R.stamped = new
|
||||
R.stamped += /obj/item/weapon/stamp
|
||||
R.overlays += stampoverlay
|
||||
R.stamps += "<HR><i>This paper has been stamped by the Accounts Database.</i>"
|
||||
|
||||
//add the account
|
||||
M.transaction_log.Add(T)
|
||||
all_money_accounts.Add(M)
|
||||
|
||||
return M
|
||||
|
||||
/datum/money_account
|
||||
var/owner_name = ""
|
||||
var/account_number = 0
|
||||
@@ -82,7 +139,6 @@ var/global/datum/money_account/vendor_account
|
||||
icon = 'virology.dmi'
|
||||
icon_state = "analyser"
|
||||
density = 1
|
||||
var/list/accounts = list()
|
||||
req_one_access = list(access_hop, access_captain)
|
||||
var/receipt_num
|
||||
var/machine_id = ""
|
||||
@@ -156,10 +212,10 @@ var/global/datum/money_account/vendor_account
|
||||
dat += "</tr>"
|
||||
dat += "</table>"
|
||||
else
|
||||
dat += "<a href='?src=\ref[src];choice=create_account;'>Create new account</a> <a href='?src=\ref[src];choice=sync_accounts;'>Sync accounts across databases</a><br><br>"
|
||||
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<=accounts.len, i++)
|
||||
var/datum/money_account/D = accounts[i]
|
||||
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>"
|
||||
@@ -193,22 +249,12 @@ var/global/datum/money_account/vendor_account
|
||||
|
||||
if(href_list["choice"])
|
||||
switch(href_list["choice"])
|
||||
if("sync_accounts")
|
||||
for(var/obj/machinery/account_database/A in machines)
|
||||
for(var/datum/money_account/M in src.accounts)
|
||||
if(!A.accounts.Find(M))
|
||||
A.accounts.Add(M)
|
||||
for(var/datum/money_account/M in A.accounts)
|
||||
if(!src.accounts.Find(M))
|
||||
src.accounts.Add(M)
|
||||
usr << "\icon[src] <span class='info'>Accounts synched across all NanoTrasen financial databases.</span>"
|
||||
|
||||
if("create_account")
|
||||
creating_new_account = 1
|
||||
if("finalise_create_account")
|
||||
var/account_name = href_list["holder_name"]
|
||||
var/starting_funds = max(text2num(href_list["starting_funds"]), 0)
|
||||
add_account(account_name, starting_funds)
|
||||
create_account(account_name, starting_funds, src)
|
||||
if(starting_funds > 0)
|
||||
//subtract the money
|
||||
station_account.money -= starting_funds
|
||||
@@ -247,85 +293,18 @@ var/global/datum/money_account/vendor_account
|
||||
access_level = 1
|
||||
if("view_account_detail")
|
||||
var/index = text2num(href_list["account_index"])
|
||||
if(index && index <= accounts.len)
|
||||
detailed_account_view = accounts[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)
|
||||
|
||||
/obj/machinery/account_database/proc/add_account_across_all(var/new_owner_name = "Default user", var/starting_funds = 0, var/pre_existing = 0)
|
||||
var/datum/money_account/M = add_account(new_owner_name, starting_funds, pre_existing)
|
||||
for(var/obj/machinery/account_database/D in machines)
|
||||
if(D == src)
|
||||
continue
|
||||
D.accounts.Add(M)
|
||||
|
||||
return M
|
||||
|
||||
/obj/machinery/account_database/proc/add_account(var/new_owner_name = "Default user", var/starting_funds = 0, var/pre_existing = 0)
|
||||
|
||||
//create a new account
|
||||
var/datum/money_account/M = new()
|
||||
M.owner_name = new_owner_name
|
||||
M.remote_access_pin = rand(1111, 111111)
|
||||
M.money = starting_funds
|
||||
|
||||
//create an entry in the account transaction log for when it was created
|
||||
var/datum/transaction/T = new()
|
||||
T.target_name = new_owner_name
|
||||
T.purpose = "Account creation"
|
||||
T.amount = starting_funds
|
||||
if(pre_existing)
|
||||
//set a random date, time and location some time over the past few decades
|
||||
T.date = "[num2text(rand(1,31))] [pick("January","February","March","April","May","June","July","August","September","October","November","December")], 25[rand(10,56)]"
|
||||
T.time = "[rand(0,24)]:[rand(11,59)]"
|
||||
T.source_terminal = "NTGalaxyNet Terminal #[rand(111,1111)]"
|
||||
|
||||
M.account_number = rand(111111, 999999)
|
||||
else
|
||||
T.date = current_date_string
|
||||
T.time = worldtime2text()
|
||||
T.source_terminal = machine_id
|
||||
|
||||
M.account_number = next_account_number
|
||||
next_account_number += rand(1,25)
|
||||
|
||||
//create a sealed package containing the account details
|
||||
var/obj/item/smallDelivery/P = new(src.loc)
|
||||
|
||||
var/obj/item/weapon/paper/R = new(P)
|
||||
P.wrapped = R
|
||||
R.name = "Account information: [M.owner_name]"
|
||||
R.info = "<b>Account details (confidential)</b><br><hr><br>"
|
||||
R.info += "<i>Account holder:</i> [M.owner_name]<br>"
|
||||
R.info += "<i>Account number:</i> [M.account_number]<br>"
|
||||
R.info += "<i>Account pin:</i> [M.remote_access_pin]<br>"
|
||||
R.info += "<i>Starting balance:</i> $[M.money]<br>"
|
||||
R.info += "<i>Date and time:</i> [worldtime2text()], [current_date_string]<br><br>"
|
||||
R.info += "<i>Creation terminal ID:</i> [machine_id]<br>"
|
||||
R.info += "<i>Authorised NT officer overseeing creation:</i> [held_card.registered_name]<br>"
|
||||
|
||||
//stamp the paper
|
||||
var/image/stampoverlay = image('icons/obj/bureaucracy.dmi')
|
||||
stampoverlay.icon_state = "paper_stamp-cent"
|
||||
if(!R.stamped)
|
||||
R.stamped = new
|
||||
R.stamped += /obj/item/weapon/stamp
|
||||
R.overlays += stampoverlay
|
||||
R.stamps += "<HR><i>This paper has been stamped by the Accounts Database.</i>"
|
||||
|
||||
//add the account
|
||||
M.transaction_log.Add(T)
|
||||
accounts.Add(M)
|
||||
|
||||
return M
|
||||
|
||||
/obj/machinery/account_database/proc/charge_to_account(var/attempt_account_number, var/source_name, var/purpose, var/terminal_id, var/amount)
|
||||
if(!activated)
|
||||
return 0
|
||||
for(var/datum/money_account/D in accounts)
|
||||
for(var/datum/money_account/D in all_money_accounts)
|
||||
if(D.account_number == attempt_account_number)
|
||||
D.money += amount
|
||||
|
||||
@@ -350,7 +329,12 @@ var/global/datum/money_account/vendor_account
|
||||
/obj/machinery/account_database/proc/attempt_account_access(var/attempt_account_number, var/attempt_pin_number, var/security_level_passed = 0)
|
||||
if(!activated)
|
||||
return 0
|
||||
for(var/datum/money_account/D in accounts)
|
||||
for(var/datum/money_account/D in all_money_accounts)
|
||||
if(D.account_number == attempt_account_number)
|
||||
if( D.security_level <= security_level_passed && (!D.security_level || D.remote_access_pin == attempt_pin_number) )
|
||||
return D
|
||||
|
||||
/obj/machinery/account_database/proc/get_account(var/account_number)
|
||||
for(var/datum/money_account/D in all_money_accounts)
|
||||
if(D.account_number == account_number)
|
||||
return D
|
||||
|
||||
@@ -21,6 +21,30 @@
|
||||
spawn(0)
|
||||
print_reference()
|
||||
|
||||
//create a short manual as well
|
||||
var/obj/item/weapon/paper/R = new(src.loc)
|
||||
R.name = "Steps to success: Correct EFTPOS Usage"
|
||||
R.info += "<b>When first setting up your EFTPOS device:</b>"
|
||||
R.info += "1. Memorise your EFTPOS command code (provided with all EFTPOS devices).<br>"
|
||||
R.info += "2. Confirm that your EFTPOS device is connected to your local accounts database. For additional assistance with this step, contact NanoTrasen IT Support<br>"
|
||||
R.info += "3. Confirm that your EFTPOS device has been linked to the account that you wish to recieve funds for all transactions processed on this device.<br>"
|
||||
R.info += "<b>When starting a new transaction with your EFTPOS device:</b>"
|
||||
R.info += "1. Ensure the device is UNLOCKED so that new data may be entered.<br>"
|
||||
R.info += "2. Enter a sum of money and reference message for the new transaction.<br>"
|
||||
R.info += "3. Lock the transaction, it is now ready for your customer.<br>"
|
||||
R.info += "4. If at this stage you wish to modify or cancel your transaction, you may simply reset (unlock) your EFTPOS device.<br>"
|
||||
R.info += "5. Give your EFTPOS device to the customer, they must authenticate the transaction by swiping their ID card and entering their PIN number.<br>"
|
||||
R.info += "6. If done correctly, the transaction will be logged to both accounts with the reference you have entered, the terminal ID of your EFTPOS device and the money transferred across accounts.<br>"
|
||||
|
||||
//stamp the paper
|
||||
var/image/stampoverlay = image('icons/obj/bureaucracy.dmi')
|
||||
stampoverlay.icon_state = "paper_stamp-cent"
|
||||
if(!R.stamped)
|
||||
R.stamped = new
|
||||
R.stamped += /obj/item/weapon/stamp
|
||||
R.overlays += stampoverlay
|
||||
R.stamps += "<HR><i>This paper has been stamped by the EFTPOS device.</i>"
|
||||
|
||||
//by default, connect to the station account
|
||||
//the user of the EFTPOS device can change the target account though, and no-one will be the wiser (except whoever's being charged)
|
||||
linked_account = station_account
|
||||
|
||||
@@ -36,9 +36,12 @@ log transactions
|
||||
|
||||
/obj/machinery/atm/New()
|
||||
..()
|
||||
reconnect_database()
|
||||
machine_id = "[station_name()] RT #[num_financial_terminals++]"
|
||||
|
||||
/obj/machinery/atm/initialize()
|
||||
..()
|
||||
reconnect_database()
|
||||
|
||||
/obj/machinery/atm/process()
|
||||
if(stat & NOPOWER)
|
||||
return
|
||||
@@ -253,13 +256,15 @@ log transactions
|
||||
playsound(src, 'buzz-two.ogg', 50, 1)
|
||||
|
||||
//create an entry in the account transaction log
|
||||
var/datum/transaction/T = new()
|
||||
T.target_name = authenticated_account.owner_name
|
||||
T.purpose = "Unauthorised login attempt"
|
||||
T.source_terminal = machine_id
|
||||
T.date = current_date_string
|
||||
T.time = worldtime2text()
|
||||
authenticated_account.transaction_log.Add(T)
|
||||
var/datum/money_account/failed_account = linked_db.get_account(tried_account_num)
|
||||
if(failed_account)
|
||||
var/datum/transaction/T = new()
|
||||
T.target_name = failed_account.owner_name
|
||||
T.purpose = "Unauthorised login attempt"
|
||||
T.source_terminal = machine_id
|
||||
T.date = current_date_string
|
||||
T.time = worldtime2text()
|
||||
failed_account.transaction_log.Add(T)
|
||||
else
|
||||
usr << "\red \icon[src] Incorrect pin/account combination entered, [max_pin_attempts - number_incorrect_tries] attempts remaining."
|
||||
previous_account_number = tried_account_num
|
||||
|
||||
@@ -134,7 +134,6 @@ turf
|
||||
return ..()
|
||||
|
||||
proc/update_air_properties()
|
||||
. = 1
|
||||
var/air_directions_archived = air_check_directions
|
||||
air_check_directions = 0
|
||||
|
||||
@@ -259,7 +258,7 @@ turf
|
||||
//The unsimulated turf is adjacent to another one of our zone's turfs,
|
||||
// better rebuild to be sure we didn't get cut in twain
|
||||
if(consider_rebuild)
|
||||
NT.zone.rebuild = 1
|
||||
zone.rebuild = 1
|
||||
|
||||
//Not adjacent to anything, and unsimulated. Goodbye~
|
||||
else
|
||||
@@ -269,6 +268,7 @@ turf
|
||||
processing = 1
|
||||
else
|
||||
processing = 0
|
||||
return 1
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -780,7 +780,7 @@ proc/anim(turf/location as turf,target as mob|obj,a_icon,a_icon_state as text,fl
|
||||
return 0
|
||||
|
||||
var/delayfraction = round(delay/numticks)
|
||||
var/turf/T = user.loc
|
||||
var/turf/T = get_turf(user)
|
||||
var/holding = user.get_active_hand()
|
||||
|
||||
for(var/i = 0, i<numticks, i++)
|
||||
|
||||
@@ -127,10 +127,9 @@ proc/get_id_photo(var/mob/living/carbon/human/H)
|
||||
icobase = 'icons/mob/human_races/r_lizard.dmi'
|
||||
if("Skrell")
|
||||
icobase = 'icons/mob/human_races/r_skrell.dmi'
|
||||
|
||||
if("Vox")
|
||||
icobase = 'icons/mob/human_races/r_vox.dmi'
|
||||
if("Kidan")
|
||||
icobase = 'icons/mob/human_races/r_kidan.dmi'
|
||||
|
||||
else
|
||||
icobase = 'icons/mob/human_races/r_human.dmi'
|
||||
|
||||
@@ -730,7 +730,7 @@ client
|
||||
usr << "This can only be done to instances of type /mob/living/carbon/human"
|
||||
return
|
||||
|
||||
var/new_mutantrace = input("Please choose a new mutantrace","Mutantrace",null) as null|anything in list("NONE","golem","lizard","slime","plant","shadow","tajaran","skrell","vox","kidan")
|
||||
var/new_mutantrace = input("Please choose a new mutantrace","Mutantrace",null) as null|anything in list("NONE","golem","lizard","slime","plant","shadow","tajaran","skrell","vox")
|
||||
switch(new_mutantrace)
|
||||
if(null)
|
||||
return
|
||||
|
||||
@@ -213,6 +213,8 @@ Implants;
|
||||
for(var/mob/living/carbon/human/man in player_list) if(man.client && man.mind)
|
||||
// NT relation option
|
||||
var/special_role = man.mind.special_role
|
||||
if (special_role == "Wizard" || special_role == "Ninja" || special_role == "Syndicate")
|
||||
continue //NT intelligence ruled out possiblity that those are too classy to pretend to be a crew.
|
||||
if(man.client.prefs.nanotrasen_relation == "Opposed" && prob(50) || \
|
||||
man.client.prefs.nanotrasen_relation == "Skeptical" && prob(20))
|
||||
suspects += man
|
||||
@@ -473,4 +475,4 @@ proc/get_nt_opposed()
|
||||
else if(man.client.prefs.nanotrasen_relation == "Skeptical" && prob(50))
|
||||
dudes += man
|
||||
if(dudes.len == 0) return null
|
||||
return pick(dudes)
|
||||
return pick(dudes)
|
||||
|
||||
@@ -134,7 +134,7 @@ var/global/datum/controller/occupations/job_master
|
||||
if(!job) continue
|
||||
var/list/candidates = FindOccupationCandidates(job, level)
|
||||
if(!candidates.len) continue
|
||||
|
||||
|
||||
// Build a weighted list, weight by age.
|
||||
var/list/weightedCandidates = list()
|
||||
|
||||
@@ -144,7 +144,7 @@ var/global/datum/controller/occupations/job_master
|
||||
if(command_position == "Captain")
|
||||
good_age_minimal = 30
|
||||
good_age_maximal = 70 // Old geezer captains ftw
|
||||
|
||||
|
||||
for(var/mob/V in candidates)
|
||||
// Log-out during round-start? What a bad boy, no head position for you!
|
||||
if(!V.client) continue
|
||||
@@ -164,9 +164,9 @@ var/global/datum/controller/occupations/job_master
|
||||
weightedCandidates[V] = 3 // Geezer.
|
||||
else
|
||||
// If there's ABSOLUTELY NOBODY ELSE
|
||||
if(candidates.len == 1) weightedCandidates[V] = 1
|
||||
|
||||
|
||||
if(candidates.len == 1) weightedCandidates[V] = 1
|
||||
|
||||
|
||||
var/mob/new_player/candidate = pickweight(weightedCandidates)
|
||||
if(AssignRole(candidate, command_position))
|
||||
return 1
|
||||
@@ -340,6 +340,7 @@ var/global/datum/controller/occupations/job_master
|
||||
//For ones returning to lobby
|
||||
for(var/mob/new_player/player in unassigned)
|
||||
if(player.client.prefs.alternate_option == RETURN_TO_LOBBY)
|
||||
player.ready = 0
|
||||
unassigned -= player
|
||||
return 1
|
||||
|
||||
@@ -368,7 +369,7 @@ var/global/datum/controller/occupations/job_master
|
||||
|
||||
//give them an account in the station database
|
||||
if(centcomm_account_db)
|
||||
var/datum/money_account/M = centcomm_account_db.add_account_across_all(H.real_name, starting_funds = rand(50,500)*10, pre_existing = 1)
|
||||
var/datum/money_account/M = create_account(H.real_name, rand(50,500)*10, null)
|
||||
if(H.mind)
|
||||
var/remembered_info = ""
|
||||
remembered_info += "<b>Your account number is:</b> #[M.account_number]<br>"
|
||||
|
||||
+861
-846
File diff suppressed because it is too large
Load Diff
@@ -112,8 +112,7 @@
|
||||
|
||||
if (B)
|
||||
beaker.reagents.reagent_list |= B
|
||||
beaker.reagents.del_reagent("clonexadone") //Fix for infinite meat spawning when taking blood from human
|
||||
beaker.reagents.update_total() //to an IV drip full of clonex
|
||||
beaker.reagents.update_total()
|
||||
beaker.on_reagent_change()
|
||||
beaker.reagents.handle_reactions()
|
||||
update_icon()
|
||||
|
||||
@@ -570,10 +570,12 @@
|
||||
w_class = 3
|
||||
attack_verb = list("attacked", "slashed", "stabbed", "sliced")
|
||||
|
||||
/* NYET.
|
||||
/obj/item/weapon/toddler
|
||||
icon_state = "toddler"
|
||||
name = "toddler"
|
||||
desc = "This baby looks almost real. Wait, did it just burp?"
|
||||
force = 5
|
||||
w_class = 4.0
|
||||
slot_flags = SLOT_BACK
|
||||
slot_flags = SLOT_BACK
|
||||
*/
|
||||
+10
-6
@@ -103,8 +103,8 @@ var/global/normal_ooc_colour = "#002eb8"
|
||||
msg = copytext(sanitize(msg), 1, MAX_MESSAGE_LEN)
|
||||
if(!msg) return
|
||||
|
||||
if(!(prefs.toggles & CHAT_OOC))
|
||||
src << "\red You have OOC muted."
|
||||
if(!(prefs.toggles & CHAT_LOOC))
|
||||
src << "\red You have LOOC muted."
|
||||
return
|
||||
|
||||
if(!holder)
|
||||
@@ -127,14 +127,15 @@ var/global/normal_ooc_colour = "#002eb8"
|
||||
|
||||
log_ooc("(LOCAL) [mob.name]/[key] : [msg]")
|
||||
|
||||
for(var/mob/M in hearers())
|
||||
var/list/heard = get_mobs_in_view(7, src.mob)
|
||||
for(var/mob/M in heard)
|
||||
if(!M.client)
|
||||
continue
|
||||
var/client/C = M.client
|
||||
if (C in admins)
|
||||
continue //they are handled after that
|
||||
|
||||
if(C.prefs.toggles & CHAT_OOC)
|
||||
if(C.prefs.toggles & CHAT_LOOC)
|
||||
var/display_name = src.key
|
||||
if(holder)
|
||||
if(holder.fakekey)
|
||||
@@ -144,5 +145,8 @@ var/global/normal_ooc_colour = "#002eb8"
|
||||
display_name = holder.fakekey
|
||||
C << "<font color='#6699CC'><span class='ooc'><span class='prefix'>LOOC:</span> <EM>[display_name]:</EM> <span class='message'>[msg]</span></span></font>"
|
||||
for(var/client/C in admins)
|
||||
if(C.prefs.toggles & CHAT_OOC)
|
||||
C << "<font color='#6699CC'><span class='ooc'><span class='prefix'>LOOC:</span> <EM>[src.key]:</EM> <span class='message'>[msg]</span></span></font>"
|
||||
if(C.prefs.toggles & CHAT_LOOC)
|
||||
var/prefix = "(R)LOOC"
|
||||
if (C.mob in heard)
|
||||
prefix = "LOOC"
|
||||
C << "<font color='#6699CC'><span class='ooc'><span class='prefix'>[prefix]:</span> <EM>[src.key]:</EM> <span class='message'>[msg]</span></span></font>"
|
||||
@@ -651,7 +651,7 @@ var/list/admin_verbs_mod = list(
|
||||
if(!istype(M, /mob/living/carbon/human))
|
||||
usr << "\red You can only do this to humans!"
|
||||
return
|
||||
switch(alert("Are you sure you wish to edit this mob's appearance? Skrell, Unathi, Vox, Kida, and Tajara can result in unintended consequences.",,"Yes","No"))
|
||||
switch(alert("Are you sure you wish to edit this mob's appearance? Skrell, Unathi, Vox and Tajaran can result in unintended consequences.",,"Yes","No"))
|
||||
if("No")
|
||||
return
|
||||
var/new_facial = input("Please select facial hair color.", "Character Generation") as color
|
||||
|
||||
@@ -441,10 +441,10 @@ client/proc/one_click_antag()
|
||||
|
||||
var/leader_chosen = 0 //when the leader is chosen. The last person spawned.
|
||||
|
||||
//Generates a list of candidates from active ghosts. The admin picks which players to respawn as the vox.
|
||||
//Generates a list of candidates from active ghosts.
|
||||
for(var/mob/dead/observer/G in player_list)
|
||||
spawn(0)
|
||||
if(is_alien_whitelisted(src, "Vox") || !config.usealienwhitelist)
|
||||
if(is_alien_whitelisted(G, "Vox") || !config.usealienwhitelist)
|
||||
switch(alert(G,"Do you wish to be considered for a vox raiding party arriving on the station?","Please answer in 30 seconds!","Yes","No"))
|
||||
if("Yes")
|
||||
if((world.time-time_passed)>300)//If more than 30 game seconds passed.
|
||||
@@ -462,7 +462,7 @@ client/proc/one_click_antag()
|
||||
candidates.Remove(G)
|
||||
|
||||
if(candidates.len)
|
||||
var/max_raiders = 6
|
||||
var/max_raiders = 4
|
||||
var/raiders = max_raiders
|
||||
//Spawns vox raiders and equips them.
|
||||
for (var/obj/effect/landmark/L in world)
|
||||
@@ -507,6 +507,7 @@ client/proc/one_click_antag()
|
||||
i++
|
||||
newname += pick(list("ti","hi","ki","ya","ta","ha","ka","ya","chi","cha","kah"))
|
||||
|
||||
new_vox.vox_talk_understand = 1
|
||||
new_vox.real_name = capitalize(newname)
|
||||
new_vox.name = new_vox.real_name
|
||||
new_vox.age = rand(12,20)
|
||||
|
||||
@@ -794,18 +794,18 @@ datum/preferences
|
||||
if(is_alien_whitelisted(user, "Skrell")) //Check for Skrell and admins
|
||||
new_species += "Skrell"
|
||||
whitelisted = 1
|
||||
if(is_alien_whitelisted(user, "Kidan")) // Check for Kidan and admins
|
||||
new_species += "Kidan"
|
||||
if(is_alien_whitelisted(user, "Vox")) //Check for Skrell and admins
|
||||
new_species += "Vox"
|
||||
whitelisted = 1
|
||||
|
||||
|
||||
if(!whitelisted)
|
||||
alert(user, "You cannot change your species as you need to be whitelisted. If you wish to be whitelisted contact an admin in-game, on the forums, or on IRC.")
|
||||
|
||||
else //Not using the whitelist? Aliens for everyone!
|
||||
new_species += "Tajaran"
|
||||
new_species += "Unathi"
|
||||
new_species += "Skrell"
|
||||
new_species += "Kidan"
|
||||
new_species += "Vox"
|
||||
species = input("Please select a species", "Character Generation", null) in new_species
|
||||
|
||||
if(prev_species != species)
|
||||
|
||||
@@ -95,6 +95,17 @@
|
||||
src << "You will [(prefs.toggles & CHAT_OOC) ? "now" : "no longer"] see messages on the OOC channel."
|
||||
feedback_add_details("admin_verb","TOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
|
||||
/client/verb/listen_looc()
|
||||
set name = "Show/Hide LOOC"
|
||||
set category = "Preferences"
|
||||
set desc = "Toggles seeing Local OutOfCharacter chat"
|
||||
prefs.toggles ^= CHAT_LOOC
|
||||
prefs.save_preferences()
|
||||
src << "You will [(prefs.toggles & CHAT_LOOC) ? "now" : "no longer"] see messages on the LOOC channel."
|
||||
feedback_add_details("admin_verb","TLOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
|
||||
/client/verb/Toggle_Soundscape() //All new ambience should be added here so it works with this verb until someone better at things comes up with a fix that isn't awful
|
||||
set name = "Hear/Silence Ambience"
|
||||
set category = "Preferences"
|
||||
|
||||
@@ -10,6 +10,8 @@
|
||||
set name = "Toggle Magboots"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
if(usr.stat)
|
||||
return
|
||||
if(src.magpulse)
|
||||
src.flags &= ~NOSLIP
|
||||
src.slowdown = SHOES_SLOWDOWN
|
||||
|
||||
@@ -8,12 +8,13 @@
|
||||
var/obj/machinery/account_database/affected_db
|
||||
|
||||
/datum/event/money_hacker/setup()
|
||||
for(var/obj/machinery/account_database/DB in world)
|
||||
if( DB.z == 1 && !(DB.stat&NOPOWER) && DB.activated && DB.accounts.len)
|
||||
affected_db = DB
|
||||
break
|
||||
if(all_money_accounts.len)
|
||||
for(var/obj/machinery/account_database/DB in world)
|
||||
if( DB.z == 1 && !(DB.stat&NOPOWER) && DB.activated )
|
||||
affected_db = DB
|
||||
break
|
||||
if(affected_db)
|
||||
affected_account = pick(affected_db.accounts)
|
||||
affected_account = pick(all_money_accounts)
|
||||
else
|
||||
kill()
|
||||
return
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
|
||||
/datum/event/money_lotto/start()
|
||||
winner_sum = pick(5000, 10000, 50000, 100000, 500000, 1000000, 1500000)
|
||||
if(centcomm_account_db.accounts.len)
|
||||
var/datum/money_account/D = pick(centcomm_account_db.accounts)
|
||||
if(all_money_accounts.len)
|
||||
var/datum/money_account/D = pick(all_money_accounts)
|
||||
D.money += winner_sum
|
||||
|
||||
var/datum/transaction/T = new()
|
||||
|
||||
@@ -22,7 +22,8 @@ datum/event/organ_failure/start()
|
||||
var/mob/living/carbon/human/C = candidates[1]
|
||||
|
||||
// Bruise one of their organs
|
||||
var/datum/organ/internal/I = pick(C.internal_organs)
|
||||
var/O = pick(C.internal_organs)
|
||||
var/datum/organ/internal/I = C.internal_organs[O]
|
||||
I.damage = I.min_bruised_damage
|
||||
candidates.Remove(C)
|
||||
severity--
|
||||
severity--
|
||||
@@ -808,8 +808,6 @@
|
||||
return "Mobile vegetation"
|
||||
if("golem")
|
||||
return "Animated Construct"
|
||||
if("kidan")
|
||||
return "Kidan"
|
||||
else
|
||||
return "Human"
|
||||
|
||||
@@ -822,9 +820,7 @@
|
||||
else if(src.dna.mutantrace == "tajaran")
|
||||
return "Tajaran"
|
||||
else if(src.dna.mutantrace == "vox")
|
||||
return "Vox"
|
||||
else if(src.dna.mutantrace == "kidan")
|
||||
return "Kidan"
|
||||
return "vox"
|
||||
|
||||
/mob/living/carbon/proc/update_mutantrace_languages()
|
||||
if(src.dna)
|
||||
@@ -836,8 +832,6 @@
|
||||
src.tajaran_talk_understand = 1
|
||||
else if(src.dna.mutantrace == "vox")
|
||||
src.vox_talk_understand = 1
|
||||
else if(src.dna.mutantrace == "kidan")
|
||||
src.kidan_talk_understand = 1
|
||||
|
||||
/mob/living/carbon/human/proc/play_xylophone()
|
||||
if(!src.xylophone)
|
||||
|
||||
@@ -440,12 +440,10 @@ proc/get_damage_icon_part(damage_state, body_part)
|
||||
if("skrell")
|
||||
race_icon = 'icons/mob/human_races/r_skrell.dmi'
|
||||
deform_icon = 'icons/mob/human_races/r_def_skrell.dmi'
|
||||
|
||||
if("vox")
|
||||
race_icon = 'icons/mob/human_races/r_vox.dmi'
|
||||
deform_icon = 'icons/mob/human_races/r_def_vox.dmi'
|
||||
if("kidan")
|
||||
race_icon = 'icons/mob/human_races/r_kidan.dmi'
|
||||
deform_icon = 'icons/mob/human_races/r_def_kidan.dmi'
|
||||
|
||||
else
|
||||
race_icon = 'icons/mob/human_races/r_human.dmi'
|
||||
|
||||
@@ -19,7 +19,6 @@ var/list/department_radio_keys = list(
|
||||
":j" = "tajaran", "#j" = "tajaran", ".j" = "tajaran",
|
||||
":o" = "soghun", "#o" = "soghun", ".o" = "soghun",
|
||||
":v" = "vox", "#v" = "vox", ".v" = "vox",
|
||||
":q" = "kidan", "#q" = "kidan", ".q" = "kidan",
|
||||
|
||||
":R" = "right hand", "#R" = "right hand", ".R" = "right hand",
|
||||
":L" = "left hand", "#L" = "left hand", ".L" = "left hand",
|
||||
@@ -40,7 +39,6 @@ var/list/department_radio_keys = list(
|
||||
":J" = "tajaran", "#J" = "tajaran", ".J" = "tajaran",
|
||||
":O" = "soghun", "#O" = "soghun", ".O" = "soghun",
|
||||
":V" = "vox", "#V" = "vox", ".V" = "vox",
|
||||
":Q" = "kidan", "#Q" = "kidan", ".Q" = "kidan",
|
||||
|
||||
//kinda localization -- rastaf0
|
||||
//same keys as above, but on russian keyboard layout. This file uses cp1251 as encoding.
|
||||
@@ -190,7 +188,6 @@ var/list/department_radio_keys = list(
|
||||
var/is_speaking_soghun = 0
|
||||
var/is_speaking_taj = 0
|
||||
var/is_speaking_vox = 0
|
||||
var/is_speaking_kidan = 0
|
||||
var/is_speaking_radio = 0
|
||||
|
||||
switch (message_mode)
|
||||
@@ -293,10 +290,6 @@ var/list/department_radio_keys = list(
|
||||
if(vox_talk_understand || universal_speak)
|
||||
is_speaking_vox = 1
|
||||
|
||||
if ("kidan")
|
||||
if(kidan_talk_understand || universal_speak)
|
||||
is_speaking_kidan = 1
|
||||
|
||||
if("changeling")
|
||||
if(mind && mind.changeling)
|
||||
for(var/mob/Changeling in mob_list)
|
||||
@@ -395,8 +388,6 @@ var/list/department_radio_keys = list(
|
||||
heard_a += M
|
||||
else if(is_speaking_vox && (M:vox_talk_understand || M:universal_speak))
|
||||
heard_a += M
|
||||
else if(is_speaking_kidan && (M:kidan_talk_understand || M:universal_speak))
|
||||
heard_a += M
|
||||
else
|
||||
heard_b += M
|
||||
else
|
||||
@@ -412,7 +403,7 @@ var/list/department_radio_keys = list(
|
||||
|
||||
var/rendered = null
|
||||
if (length(heard_a))
|
||||
var/message_a = say_quote(message,is_speaking_soghun,is_speaking_skrell,is_speaking_taj,is_speaking_vox,is_speaking_kidan)
|
||||
var/message_a = say_quote(message,is_speaking_soghun,is_speaking_skrell,is_speaking_taj,is_speaking_vox)
|
||||
|
||||
if (italics)
|
||||
message_a = "<i>[message_a]</i>"
|
||||
@@ -437,7 +428,7 @@ var/list/department_radio_keys = list(
|
||||
message_b = voice_message
|
||||
else
|
||||
message_b = stars(message)
|
||||
message_b = say_quote(message_b,is_speaking_soghun,is_speaking_skrell,is_speaking_taj,is_speaking_vox,is_speaking_kidan)
|
||||
message_b = say_quote(message_b,is_speaking_soghun,is_speaking_skrell,is_speaking_taj,is_speaking_vox)
|
||||
|
||||
if (italics)
|
||||
message_b = "<i>[message_b]</i>"
|
||||
|
||||
@@ -63,16 +63,21 @@
|
||||
else
|
||||
powered = 0
|
||||
|
||||
/datum/robot_component/armour
|
||||
name = "armour plating"
|
||||
energy_consumption = 0
|
||||
external_type = /obj/item/robot_parts/robot_component/armour
|
||||
max_damage = 60
|
||||
|
||||
/datum/robot_component/actuator
|
||||
name = "actuator"
|
||||
energy_consumption = 2
|
||||
external_type = /obj/item/robot_parts/robot_component/actuator
|
||||
max_damage = 60
|
||||
max_damage = 50
|
||||
|
||||
/datum/robot_component/cell
|
||||
name = "power cell"
|
||||
max_damage = 60
|
||||
max_damage = 50
|
||||
|
||||
/datum/robot_component/cell/destroy()
|
||||
..()
|
||||
@@ -81,8 +86,8 @@
|
||||
/datum/robot_component/radio
|
||||
name = "radio"
|
||||
external_type = /obj/item/robot_parts/robot_component/radio
|
||||
energy_consumption = 3
|
||||
max_damage = 10
|
||||
energy_consumption = 1
|
||||
max_damage = 40
|
||||
|
||||
/datum/robot_component/binary_communication
|
||||
name = "binary communication device"
|
||||
@@ -93,8 +98,8 @@
|
||||
/datum/robot_component/camera
|
||||
name = "camera"
|
||||
external_type = /obj/item/robot_parts/robot_component/camera
|
||||
energy_consumption = 2
|
||||
max_damage = 20
|
||||
energy_consumption = 1
|
||||
max_damage = 40
|
||||
|
||||
/datum/robot_component/diagnosis_unit
|
||||
name = "self-diagnosis unit"
|
||||
@@ -111,6 +116,7 @@
|
||||
components["diagnosis unit"] = new/datum/robot_component/diagnosis_unit(src)
|
||||
components["camera"] = new/datum/robot_component/camera(src)
|
||||
components["comms"] = new/datum/robot_component/binary_communication(src)
|
||||
components["armour"] = new/datum/robot_component/armour(src)
|
||||
|
||||
/mob/living/silicon/robot/proc/is_component_functioning(module_name)
|
||||
var/datum/robot_component/C = components[module_name]
|
||||
@@ -135,6 +141,9 @@
|
||||
/obj/item/robot_parts/robot_component/actuator
|
||||
name = "actuator"
|
||||
|
||||
/obj/item/robot_parts/robot_component/armour
|
||||
name = "armour plating"
|
||||
|
||||
/obj/item/robot_parts/robot_component/camera
|
||||
name = "camera"
|
||||
|
||||
|
||||
@@ -3,14 +3,15 @@
|
||||
real_name = "Cyborg"
|
||||
icon = 'icons/mob/robots.dmi'
|
||||
icon_state = "robot"
|
||||
maxHealth = 300
|
||||
health = 300
|
||||
maxHealth = 200
|
||||
health = 200
|
||||
universal_speak = 1
|
||||
|
||||
var/sight_mode = 0
|
||||
var/custom_name = ""
|
||||
var/base_icon
|
||||
var/custom_sprite = 0 //Due to all the sprites involved, a var for our custom borgs may be best
|
||||
var/crisis //Admin-settable for combat module use.
|
||||
|
||||
//Hud stuff
|
||||
|
||||
@@ -106,17 +107,17 @@
|
||||
camera.status = 0
|
||||
|
||||
initialize_components()
|
||||
if(!unfinished)
|
||||
// Create all the robot parts.
|
||||
for(var/V in components) if(V != "power cell")
|
||||
var/datum/robot_component/C = components[V]
|
||||
C.installed = 1
|
||||
C.wrapped = new C.external_type
|
||||
//if(!unfinished)
|
||||
// Create all the robot parts.
|
||||
for(var/V in components) if(V != "power cell")
|
||||
var/datum/robot_component/C = components[V]
|
||||
C.installed = 1
|
||||
C.wrapped = new C.external_type
|
||||
|
||||
if(!cell)
|
||||
cell = new /obj/item/weapon/cell(src)
|
||||
cell.maxcharge = 7500
|
||||
cell.charge = 7500
|
||||
if(!cell)
|
||||
cell = new /obj/item/weapon/cell(src)
|
||||
cell.maxcharge = 7500
|
||||
cell.charge = 7500
|
||||
|
||||
..()
|
||||
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
/mob/living/silicon/robot/updatehealth()
|
||||
if(status_flags & GODMODE)
|
||||
health = 100
|
||||
health = 200
|
||||
stat = CONSCIOUS
|
||||
return
|
||||
health = 100 - (getBruteLoss() + getFireLoss())
|
||||
health = 200 - (getBruteLoss() + getFireLoss())
|
||||
return
|
||||
|
||||
/mob/living/silicon/robot/getBruteLoss()
|
||||
@@ -47,6 +47,14 @@
|
||||
if(C.installed == 1) rval += C
|
||||
return rval
|
||||
|
||||
/mob/living/silicon/robot/proc/get_armour()
|
||||
|
||||
if(!components.len) return 0
|
||||
var/datum/robot_component/C = components["armour"]
|
||||
if(C && C.installed == 1)
|
||||
return C
|
||||
return 0
|
||||
|
||||
/mob/living/silicon/robot/heal_organ_damage(var/brute, var/burn)
|
||||
var/list/datum/robot_component/parts = get_damaged_components(brute,burn)
|
||||
if(!parts.len) return
|
||||
@@ -75,6 +83,11 @@
|
||||
burn -= absorb_burn
|
||||
src << "\red Your shield absorbs some of the impact!"
|
||||
|
||||
var/datum/robot_component/armour/A = get_armour()
|
||||
if(A)
|
||||
A.take_damage(brute,burn,sharp)
|
||||
return
|
||||
|
||||
var/datum/robot_component/C = pick(components)
|
||||
C.take_damage(brute,burn,sharp)
|
||||
|
||||
@@ -115,6 +128,11 @@
|
||||
burn -= absorb_burn
|
||||
src << "\red Your shield absorbs some of the impact!"
|
||||
|
||||
var/datum/robot_component/armour/A = get_armour()
|
||||
if(A)
|
||||
A.take_damage(brute,burn,sharp)
|
||||
return
|
||||
|
||||
while(parts.len && (brute>0 || burn>0) )
|
||||
var/datum/robot_component/picked = pick(parts)
|
||||
|
||||
|
||||
@@ -208,13 +208,12 @@
|
||||
|
||||
//Whether or not mobs can understand other mobtypes. These stay in /mob so that ghosts can hear everything.
|
||||
var/universal_speak = 0 // Set to 1 to enable the mob to speak to everyone -- TLE
|
||||
var/robot_talk_understand = 0
|
||||
var/alien_talk_understand = 0
|
||||
var/tajaran_talk_understand = 0
|
||||
var/soghun_talk_understand = 0
|
||||
var/skrell_talk_understand = 0
|
||||
var/vox_talk_understand = 0
|
||||
var/kidan_talk_understand = 0
|
||||
var/robot_talk_understand = 0
|
||||
var/alien_talk_understand = 0
|
||||
var/tajaran_talk_understand = 0
|
||||
var/soghun_talk_understand = 0
|
||||
var/skrell_talk_understand = 0
|
||||
var/vox_talk_understand = 0
|
||||
|
||||
var/has_limbs = 1 //Whether this mob have any limbs he can move with
|
||||
var/can_stand = 1 //Whether this mob have ability to stand
|
||||
|
||||
@@ -359,10 +359,10 @@
|
||||
if(is_alien_whitelisted(src, "Skrell") || !config.usealienwhitelist)
|
||||
new_character.dna.mutantrace = "skrell"
|
||||
new_character.skrell_talk_understand = 1
|
||||
if(client.prefs.species == "Kidan")
|
||||
if(is_alien_whitelisted(src, "Kidan") || !config.usealienwhitelist)
|
||||
new_character.dna.mutantrace = "kidan"
|
||||
new_character.kidan_talk_understand = 1
|
||||
if(client.prefs.species == "Vox")
|
||||
if(is_alien_whitelisted(src, "Vox"|| !config.usealienwhitelist))
|
||||
new_character.dna.mutantrace = "vox"
|
||||
new_character.vox_talk_understand = 1
|
||||
|
||||
if(client.prefs.language == "Tajaran")
|
||||
if(is_alien_whitelisted(src, "Language_Tajaran") || !config.usealienwhitelist)
|
||||
@@ -373,9 +373,6 @@
|
||||
if(client.prefs.language == "Skrell")
|
||||
if(is_alien_whitelisted(src, "Language_Skrell") || !config.usealienwhitelist)
|
||||
new_character.skrell_talk_understand = 1
|
||||
if(client.prefs.language == "Kidan")
|
||||
if(is_alien_whitelisted(src, "Language_Kidan") || !config.usealienwhitelist)
|
||||
new_character.kidan_talk_understand = 1
|
||||
|
||||
|
||||
if(ticker.random_players)
|
||||
|
||||
@@ -144,10 +144,9 @@ datum/preferences
|
||||
icobase = 'icons/mob/human_races/r_lizard.dmi'
|
||||
if("Skrell")
|
||||
icobase = 'icons/mob/human_races/r_skrell.dmi'
|
||||
|
||||
if("Vox")
|
||||
icobase = 'icons/mob/human_races/r_vox.dmi'
|
||||
if("Kidan")
|
||||
icobase = 'icons/mob/human_races/r_kidan.dmi'
|
||||
|
||||
else
|
||||
icobase = 'icons/mob/human_races/r_human.dmi'
|
||||
|
||||
@@ -285,6 +285,7 @@
|
||||
icon_state = "hair_e"
|
||||
gender = MALE // turnoff!
|
||||
|
||||
|
||||
bald
|
||||
name = "Bald"
|
||||
icon_state = "bald"
|
||||
@@ -305,7 +306,7 @@
|
||||
name = "Shaved"
|
||||
icon_state = "bald"
|
||||
gender = NEUTER
|
||||
species_allowed = list("Human","Unathi","Tajaran","Skrell","Vox","Kidan")
|
||||
species_allowed = list("Human","Unathi","Tajaran","Skrell","Vox")
|
||||
|
||||
watson
|
||||
name = "Watson Mustache"
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/mob/proc/say_quote(var/text,var/is_speaking_soghun,var/is_speaking_skrell,var/is_speaking_tajaran,var/is_speaking_vox,var/is_speaking_kidan)
|
||||
/mob/proc/say_quote(var/text,var/is_speaking_soghun,var/is_speaking_skrell,var/is_speaking_tajaran,var/is_speaking_vox)
|
||||
if(!text)
|
||||
return "says, \"...\""; //not the best solution, but it will stop a large number of runtimes. The cause is somewhere in the Tcomms code
|
||||
//tcomms code is still runtiming somewhere here
|
||||
@@ -81,9 +81,7 @@
|
||||
if (is_speaking_tajaran)
|
||||
return "<span class='say_quote'>mrowls</span>, \"<span class='tajaran'>[text]</span>\"";
|
||||
if (is_speaking_vox)
|
||||
return "<span class='say_quote'>shrieks</span>, \"<span class='vox'>[text]</span>\"";
|
||||
if (is_speaking_kidan)
|
||||
return "<span class='say_quote'>chitters</span>, \"<span class='kidan'>[text]</span>\"";
|
||||
return "<span class='say_quote'>chirps</span>, \"<span class='vox'>[text]</span>\"";
|
||||
//Needs Virus2
|
||||
// if (src.disease_symptoms & DISEASE_HOARSE)
|
||||
// return "rasps, \"[text]\"";
|
||||
|
||||
@@ -746,10 +746,9 @@ obj/item/weapon/organ/New(loc, mob/living/carbon/human/H)
|
||||
base = new('icons/mob/human_races/r_lizard.dmi')
|
||||
if("skrell")
|
||||
base = new('icons/mob/human_races/r_skrell.dmi')
|
||||
|
||||
if("vox")
|
||||
base = new('icons/mob/human_races/r_vox.dmi')
|
||||
if("kidan")
|
||||
base = new('icons/mob/human_races/r_kidan.dmi')
|
||||
|
||||
else
|
||||
base = new('icons/mob/human_races/r_human.dmi')
|
||||
|
||||
@@ -74,7 +74,7 @@
|
||||
|
||||
var/mob/living/carbon/human/H = new_mob
|
||||
if(H.dna)
|
||||
H.dna.mutantrace = pick("lizard","tajaran","skrell","golem","slime","plant","vox","kidan",4;"")
|
||||
H.dna.mutantrace = pick("lizard","tajaran","skrell","golem","slime","plant","vox",4;"")
|
||||
else
|
||||
return
|
||||
|
||||
|
||||
@@ -1030,6 +1030,9 @@ datum
|
||||
/mob/living/simple_animal/hostile/syndicate/ranged,
|
||||
/mob/living/simple_animal/hostile/syndicate/ranged/space,
|
||||
/mob/living/simple_animal/hostile/alien/queen/large,
|
||||
/mob/living/simple_animal/hostile/faithless,
|
||||
/mob/living/simple_animal/hostile/panther,
|
||||
/mob/living/simple_animal/hostile/snake,
|
||||
/mob/living/simple_animal/hostile/retaliate,
|
||||
/mob/living/simple_animal/hostile/retaliate/clown
|
||||
)//exclusion list for things you don't want the reaction to create.
|
||||
|
||||
@@ -109,7 +109,7 @@
|
||||
|
||||
/obj/machinery/keycard_auth/proc/broadcast_request()
|
||||
icon_state = "auth_on"
|
||||
for(var/obj/machinery/keycard_auth/KA in machines)
|
||||
for(var/obj/machinery/keycard_auth/KA in world)
|
||||
if(KA == src) continue
|
||||
KA.reset()
|
||||
spawn()
|
||||
|
||||
+2
-1
@@ -624,6 +624,7 @@ var/list/TAGGERLOCATIONS = list("Disposals",
|
||||
#define CHAT_RADIO 512
|
||||
#define CHAT_ATTACKLOGS 1024
|
||||
#define CHAT_DEBUGLOGS 2048
|
||||
#define CHAT_LOOC 4096
|
||||
|
||||
|
||||
#define TOGGLES_DEFAULT (SOUND_ADMINHELP|SOUND_MIDI|SOUND_AMBIENCE|SOUND_LOBBY|CHAT_OOC|CHAT_DEAD|CHAT_GHOSTEARS|CHAT_GHOSTSIGHT|CHAT_PRAYER|CHAT_RADIO|CHAT_ATTACKLOGS)
|
||||
@@ -692,4 +693,4 @@ var/list/bradycardics = list("neurotoxin", "cryoxadone", "clonexadone", "space_d
|
||||
|
||||
//proc/get_pulse methods
|
||||
#define GETPULSE_HAND 0 //less accurate (hand)
|
||||
#define GETPULSE_TOOL 1 //more accurate (med scanner, sleeper, etc)
|
||||
#define GETPULSE_TOOL 1 //more accurate (med scanner, sleeper, etc)
|
||||
|
||||
@@ -56,7 +56,6 @@ h1.alert, h2.alert {color: #000000;}
|
||||
.skrell {color: #00CED1;}
|
||||
.soghun {color: #228B22;}
|
||||
.vox {color: #AA00AA;}
|
||||
.kidan {color: #cc9900;}
|
||||
.say_quote {font-family: Georgia, Verdana, sans-serif;}
|
||||
|
||||
.interface {color: #330033;}
|
||||
|
||||
Reference in New Issue
Block a user