Merge branch 'master' of https://github.com/Skyrat-SS13/Skyrat-tg
@@ -66,32 +66,6 @@ ALTER TABLE `messages`
|
||||
ALTER TABLE `round`
|
||||
ADD COLUMN `server_name` VARCHAR(32) DEFAULT NULL AFTER `end_datetime`;
|
||||
|
||||
Version 5.13, 30 April 2021, by Atlanta Ned
|
||||
Added the `citation` table for tracking security citations in the database.
|
||||
|
||||
```
|
||||
CREATE TABLE `citation` (
|
||||
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`round_id` INT(11) UNSIGNED NOT NULL,
|
||||
`server_ip` INT(11) UNSIGNED NOT NULL,
|
||||
`server_port` INT(11) UNSIGNED NOT NULL,
|
||||
`citation` TEXT NOT NULL COLLATE 'utf8mb4_general_ci',
|
||||
`action` VARCHAR(20) NOT NULL DEFAULT '' COLLATE 'utf8mb4_general_ci',
|
||||
`sender` VARCHAR(32) NOT NULL DEFAULT '' COLLATE 'utf8mb4_general_ci',
|
||||
`sender_ic` VARCHAR(64) NOT NULL DEFAULT '' COMMENT 'Longer because this is the character name, not the ckey' COLLATE 'utf8mb4_general_ci',
|
||||
`recipient` VARCHAR(64) NOT NULL DEFAULT '' COMMENT 'Longer because this is the character name, not the ckey' COLLATE 'utf8mb4_general_ci',
|
||||
`crime` TEXT NOT NULL COLLATE 'utf8mb4_general_ci',
|
||||
`fine` INT(4) NULL DEFAULT NULL,
|
||||
`paid` INT(4) NULL DEFAULT '0',
|
||||
`timestamp` DATETIME NOT NULL,
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
UNIQUE INDEX `idx_constraints` (`round_id`, `server_ip`, `server_port`, `citation`(100)) USING BTREE
|
||||
)
|
||||
COLLATE='utf8mb4_general_ci'
|
||||
ENGINE=InnoDB
|
||||
AUTO_INCREMENT=1
|
||||
;
|
||||
```
|
||||
|
||||
-----------------------------------------------------
|
||||
|
||||
|
||||
@@ -2,5 +2,6 @@
|
||||
#define JOB_UNAVAILABLE_SPECIES 7
|
||||
#define JOB_UNAVAILABLE_LANGUAGE 7
|
||||
|
||||
#define SEC_RESTRICTED_QUIRKS "Blind" = TRUE, "Brain Tumor" = TRUE, "Deaf" = TRUE, "Paraplegic" = TRUE, "Mute" = TRUE, "Foreigner" = TRUE, "Pacifist" = TRUE
|
||||
#define HEAD_RESTRICTED_QUIRKS "Blind" = TRUE, "Deaf" = TRUE, "Mute" = TRUE, "Foreigner" = TRUE
|
||||
#define SEC_RESTRICTED_QUIRKS "Blind" = TRUE, "Brain Tumor" = TRUE, "Deaf" = TRUE, "Paraplegic" = TRUE, "Mute" = TRUE, "Foreigner" = TRUE, "Pacifist" = TRUE, "Chunky Fingers" = TRUE
|
||||
#define HEAD_RESTRICTED_QUIRKS "Blind" = TRUE, "Deaf" = TRUE, "Mute" = TRUE, "Foreigner" = TRUE, "Chunky Fingers" = TRUE
|
||||
#define TECH_RESTRICTED_QUIRKS "Chunky Fingers" = TRUE
|
||||
|
||||
@@ -161,6 +161,7 @@ SUBSYSTEM_DEF(ticker)
|
||||
for(var/client/C in GLOB.clients)
|
||||
window_flash(C, ignorepref = TRUE) //let them know lobby has opened up.
|
||||
to_chat(world, "<span class='notice'><b>Welcome to [station_name()]!</b></span>")
|
||||
//SKYRAT EDIT START - DISCORD SPAM PREVENTION
|
||||
if(!discord_alerted)
|
||||
discord_alerted = TRUE
|
||||
send2chat("<@&[CONFIG_GET(string/game_alert_role_id)]> New round starting on [SSmapping.config.map_name], [CONFIG_GET(string/servername)]! \nIf you wish to be pinged for game related stuff, go to <#[CONFIG_GET(string/role_assign_channel_id)]> and assign yourself the roles.", CONFIG_GET(string/chat_announce_new_game)) // Skyrat EDIT -- role pingcurrent_state = GAME_STATE_PREGAME
|
||||
|
||||
@@ -82,10 +82,10 @@
|
||||
if(emote_type == EMOTE_AUDIBLE)
|
||||
//SKYRAT EDIT CHANGE BEGIN
|
||||
//user.audible_message(msg, audible_message_flags = EMOTE_MESSAGE) - SKYRAT EDIT - ORIGINAL
|
||||
user.audible_message(msg, deaf_message = "You see how <b>[user]</b> [msg]", audible_message_flags = EMOTE_MESSAGE)
|
||||
user.audible_message(msg, deaf_message = "<span class='emote'>You see how <b>[user]</b> [msg]</span>", audible_message_flags = EMOTE_MESSAGE)
|
||||
else
|
||||
//user.visible_message(msg, visible_message_flags = EMOTE_MESSAGE) - SKYRAT EDIT - ORIGINAL
|
||||
user.visible_message(msg, blind_message = "You hear how <b>[user]</b> [msg]", visible_message_flags = EMOTE_MESSAGE)
|
||||
user.visible_message(msg, blind_message = "<span class='emote'>You hear how <b>[user]</b> [msg]</span>", visible_message_flags = EMOTE_MESSAGE)
|
||||
//SKYRAT EDIT CHANGE END
|
||||
|
||||
/// For handling emote cooldown, return true to allow the emote to happen
|
||||
|
||||
@@ -178,7 +178,9 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
|
||||
/obj/item/pda/update_overlays()
|
||||
. = ..()
|
||||
var/mutable_appearance/overlay = new(icon)
|
||||
if(!initial(icon))
|
||||
return
|
||||
var/mutable_appearance/overlay = new(initial(icon))
|
||||
overlay.pixel_x = overlays_x_offset
|
||||
if(id)
|
||||
overlay.icon_state = "id_overlay"
|
||||
|
||||
@@ -49,6 +49,8 @@
|
||||
// Special AI/pAI PDAs that cannot explode.
|
||||
/obj/item/pda/ai
|
||||
icon = null
|
||||
greyscale_config = null
|
||||
greyscale_colors = null
|
||||
ttone = "data"
|
||||
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
new /obj/item/assembly/flash/handheld(src)
|
||||
new /obj/item/clothing/glasses/meson/engine(src)
|
||||
new /obj/item/door_remote/chief_engineer(src)
|
||||
new /obj/item/pipe_dispenser(src)
|
||||
new /obj/item/pipe_dispenser/bluespace(src) // SKYRAT EDIT -- BLUESPACE RPD -- ORIGINAL: new /obj/item/pipe_dispenser(src)
|
||||
new /obj/item/circuitboard/machine/techfab/department/engineering(src)
|
||||
new /obj/item/extinguisher/advanced(src)
|
||||
new /obj/item/storage/photo_album/ce(src)
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
//Fluff structures serve no purpose and exist only for enriching the environment. They can be destroyed with a wrench.
|
||||
|
||||
/**
|
||||
* # Fluff structure
|
||||
*
|
||||
* Fluff structures serve no purpose and exist only for enriching the environment. By default, they can be deconstructed with a wrench.
|
||||
*/
|
||||
/obj/structure/fluff
|
||||
name = "fluff structure"
|
||||
desc = "Fluffier than a sheep. This shouldn't exist."
|
||||
@@ -8,6 +11,7 @@
|
||||
anchored = TRUE
|
||||
density = FALSE
|
||||
opacity = FALSE
|
||||
///If true, the structure can be deconstructed into a metal sheet with a wrench.
|
||||
var/deconstructible = TRUE
|
||||
|
||||
/obj/structure/fluff/attackby(obj/item/I, mob/living/user, params)
|
||||
@@ -21,15 +25,19 @@
|
||||
qdel(src)
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/structure/fluff/empty_terrarium //Empty terrariums are created when a preserved terrarium in a lavaland seed vault is activated.
|
||||
/**
|
||||
* Empty terrariums are created when a preserved terrarium in a lavaland seed vault is activated.
|
||||
*/
|
||||
/obj/structure/fluff/empty_terrarium
|
||||
name = "empty terrarium"
|
||||
desc = "An ancient machine that seems to be used for storing plant matter. Its hatch is ajar."
|
||||
icon = 'icons/obj/lavaland/spawners.dmi'
|
||||
icon_state = "terrarium_open"
|
||||
density = TRUE
|
||||
|
||||
/obj/structure/fluff/empty_sleeper //Empty sleepers are created by a good few ghost roles in lavaland.
|
||||
/**
|
||||
* Empty sleepers are created by a good few ghost roles in lavaland.
|
||||
*/
|
||||
/obj/structure/fluff/empty_sleeper
|
||||
name = "empty sleeper"
|
||||
desc = "An open sleeper. It looks as though it would be awaiting another patient, were it not broken."
|
||||
icon = 'icons/obj/machines/sleeper.dmi'
|
||||
@@ -43,8 +51,10 @@
|
||||
|
||||
/obj/structure/fluff/empty_sleeper/syndicate
|
||||
icon_state = "sleeper_s-open"
|
||||
|
||||
/obj/structure/fluff/empty_cryostasis_sleeper //Empty cryostasis sleepers are created when a malfunctioning cryostasis sleeper in a lavaland shelter is activated
|
||||
/**
|
||||
* Empty cryostasis sleepers are created when a malfunctioning cryostasis sleeper in a lavaland shelter is activated.
|
||||
*/
|
||||
/obj/structure/fluff/empty_cryostasis_sleeper
|
||||
name = "empty cryostasis sleeper"
|
||||
desc = "Although comfortable, this sleeper won't function as anything but a bed ever again."
|
||||
icon = 'icons/obj/lavaland/spawners.dmi'
|
||||
@@ -55,8 +65,10 @@
|
||||
desc = "A segment of broken flooring."
|
||||
icon = 'icons/obj/brokentiling.dmi'
|
||||
icon_state = "corner"
|
||||
|
||||
/obj/structure/fluff/drake_statue //Ash drake status spawn on either side of the necropolis gate in lavaland.
|
||||
/**
|
||||
* Ash drake status spawn on either side of the necropolis gate in lavaland.
|
||||
*/
|
||||
/obj/structure/fluff/drake_statue
|
||||
name = "drake statue"
|
||||
desc = "A towering basalt sculpture of a proud and regal drake. Its eyes are six glowing gemstones."
|
||||
icon = 'icons/effects/64x64.dmi'
|
||||
@@ -65,8 +77,10 @@
|
||||
density = TRUE
|
||||
deconstructible = FALSE
|
||||
layer = EDGED_TURF_LAYER
|
||||
|
||||
/obj/structure/fluff/drake_statue/falling //A variety of statue in disrepair; parts are broken off and a gemstone is missing
|
||||
/**
|
||||
* A variety of statue in disrepair; parts are broken off and a gemstone is missing
|
||||
*/
|
||||
/obj/structure/fluff/drake_statue/falling
|
||||
desc = "A towering basalt sculpture of a drake. Cracks run down its surface and parts of it have fallen off."
|
||||
icon_state = "drake_statue_falling"
|
||||
|
||||
@@ -270,8 +284,10 @@
|
||||
opacity = FALSE
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/structure/fluff/hedge/opaque //useful for mazes and such
|
||||
/**
|
||||
* useful for mazes and such
|
||||
*/
|
||||
/obj/structure/fluff/hedge/opaque
|
||||
opacity = TRUE
|
||||
|
||||
/obj/structure/fluff/tram_rail
|
||||
|
||||
@@ -17,11 +17,11 @@
|
||||
|
||||
/datum/antagonist/heretic_monster/greet()
|
||||
owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/ecult_op.ogg', 100, FALSE, pressure_affected = FALSE, use_reverb = FALSE)//subject to change
|
||||
to_chat(owner, "<span class='boldannounce'>You became an Eldritch Horror!</span>")
|
||||
to_chat(owner, "<span class='userdanger'>You became an Eldritch Horror!</span>")
|
||||
|
||||
/datum/antagonist/heretic_monster/on_removal()
|
||||
if(master)
|
||||
to_chat(master, "<span class='boldannounce'>Your master is no longer [master.owner.current.real_name]</span>")
|
||||
to_chat(master, "<span class='deconversion_message'>Your master is no longer [master.owner.current.real_name]</span>")
|
||||
master = null
|
||||
return ..()
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
master_obj.completed = TRUE
|
||||
objectives += master_obj
|
||||
owner.announce_objectives()
|
||||
to_chat(owner, "<span class='boldannounce'>Your master is [master.owner.current.real_name]</span>")
|
||||
to_chat(owner, "<span class='notice'>Your master is [master.owner.current.real_name]</span>")
|
||||
return
|
||||
|
||||
/datum/antagonist/heretic_monster/apply_innate_effects(mob/living/mob_override)
|
||||
|
||||
@@ -104,12 +104,17 @@
|
||||
var/alternative_fire_sound
|
||||
///If only our alternative ammuntion misfires and not our main ammunition, we set this to TRUE
|
||||
var/alternative_ammo_misfires = FALSE
|
||||
|
||||
/// Misfire Variables ///
|
||||
|
||||
/// Whether our ammo misfires now or when it's set by the wrench_act. TRUE means it misfires.
|
||||
var/can_misfire = FALSE
|
||||
///How likely is our gun to misfire?
|
||||
var/misfire_probability = 0
|
||||
///How much does shooting the gun increment the misfire probability?
|
||||
var/misfire_percentage_increment = 0
|
||||
///What is the cap on our misfire probability? Do not set this to 100.
|
||||
var/misfire_probability_cap = 25
|
||||
|
||||
/obj/item/gun/ballistic/Initialize()
|
||||
. = ..()
|
||||
@@ -358,6 +363,7 @@
|
||||
/obj/item/gun/ballistic/shoot_live_shot(mob/living/user, pointblank = 0, atom/pbtarget = null, message = 1)
|
||||
if(can_misfire)
|
||||
misfire_probability += misfire_percentage_increment
|
||||
misfire_probability = clamp(misfire_probability, 0, misfire_probability_cap)
|
||||
|
||||
. = ..()
|
||||
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
author: "Seris02"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "various OOC messages going into unsorted now get sorted"
|
||||
- bugfix: "various other miscellaneous unsorted messages now get sorted"
|
||||
@@ -1,6 +0,0 @@
|
||||
author: "SkyratBot"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "many of the toggle preferences in preferences_toggles.dm going into the unsorted chat log"
|
||||
- bugfix: "many of the role greetings from sending to the wrong chat filters/ to unsorted"
|
||||
- bugfix: "miscellaneous other strings getting sent to the unsorted chat filter"
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "unit0016"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "Lone Infiltrators are now on the prowl."
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "KasparoVy"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "Adds a new 8-point negative quirk preventing you from using most firearms, modular computers/tablets and laser pointers like an Ashwalker or Golem. KAs can be adapted w/ a modkit. You cannot be command, security, engineering, atmos, doctor, virologist, chemist, roboticist or scientist with this trait."
|
||||
@@ -0,0 +1,5 @@
|
||||
author: "thestubborn"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "Two new colourable coats"
|
||||
- rscadd: "Like five new collars"
|
||||
@@ -1,4 +0,0 @@
|
||||
author: "sqnztb"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "icebox perma cabin has piped atmospherics again"
|
||||
@@ -1,5 +0,0 @@
|
||||
author: "SkyratBot"
|
||||
delete-after: True
|
||||
changes:
|
||||
- imageadd: "New candle animations"
|
||||
- imageadd: "New animations for altar candles"
|
||||
@@ -1,4 +0,0 @@
|
||||
author: "SkyratBot"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "dogs now resist before fetching or harassing, to unbuckle from stuff if they need to"
|
||||
@@ -1,4 +0,0 @@
|
||||
author: "Celotajs"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "GAGS-generated clothing can now have proper blood splatters and damage"
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "ZephyrTFA"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "Bluespace RPD"
|
||||
@@ -1,4 +0,0 @@
|
||||
author: "SkyratBot"
|
||||
delete-after: True
|
||||
changes:
|
||||
- imageadd: "centers hydroponic sprays, adds new sprites for plant-b-gone"
|
||||
@@ -1,4 +0,0 @@
|
||||
author: "tf-4"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "a single space"
|
||||
@@ -1,4 +0,0 @@
|
||||
author: "tf-4"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "the sec medic and HoP now get four mags in their gunsets, same as everyone else"
|
||||
@@ -1,4 +0,0 @@
|
||||
author: "SkyratBot"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "The cursed slot machine sprite in the Greed lavaland ruin is now slightly less cursed."
|
||||
@@ -1,4 +0,0 @@
|
||||
author: "SkyratBot"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "BBQ Sauce can now be ordered in the kitchen console."
|
||||
@@ -1,4 +0,0 @@
|
||||
author: "SparkezelPL"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "Single tank bombs no longer just delete themselves"
|
||||
@@ -1,5 +0,0 @@
|
||||
author: "SkyratBot"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "Syndicate uplink types can now be changed again"
|
||||
- bugfix: "Radio uplink frequencies are now random again"
|
||||
@@ -1,4 +0,0 @@
|
||||
author: "SkyratBot"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "spammable logging in chem grenades"
|
||||
@@ -1,5 +0,0 @@
|
||||
author: "SkyratBot"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "fixed buggy organ fridges repair rate"
|
||||
- bugfix: "fixed upgraded organ fridges not repairing organs"
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "ORCACommander"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "Cleaned up the SQL Changelog AGAIN"
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "SkyratBot"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "Messages related to becoming and ceasing to be a heretic monster are now more noticeable."
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "Celotajs"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "Fixed PDA overlays for GAGS PDAs"
|
||||
@@ -245,3 +245,34 @@
|
||||
unit0016:
|
||||
- balance: The most involved balance change ever - NSS Journey's turf decals have
|
||||
been changed up a lot. Also the aux base is a bit different, I suppose.
|
||||
2021-05-07:
|
||||
Celotajs:
|
||||
- bugfix: GAGS-generated clothing can now have proper blood splatters and damage
|
||||
SkyratBot:
|
||||
- bugfix: dogs now resist before fetching or harassing, to unbuckle from stuff if
|
||||
they need to
|
||||
- bugfix: spammable logging in chem grenades
|
||||
- bugfix: Syndicate uplink types can now be changed again
|
||||
- bugfix: Radio uplink frequencies are now random again
|
||||
- imageadd: New candle animations
|
||||
- imageadd: New animations for altar candles
|
||||
- bugfix: many of the toggle preferences in preferences_toggles.dm going into the
|
||||
unsorted chat log
|
||||
- bugfix: many of the role greetings from sending to the wrong chat filters/ to
|
||||
unsorted
|
||||
- bugfix: miscellaneous other strings getting sent to the unsorted chat filter
|
||||
- bugfix: fixed buggy organ fridges repair rate
|
||||
- bugfix: fixed upgraded organ fridges not repairing organs
|
||||
- rscadd: BBQ Sauce can now be ordered in the kitchen console.
|
||||
- bugfix: The cursed slot machine sprite in the Greed lavaland ruin is now slightly
|
||||
less cursed.
|
||||
- bugfix: Prevents guns that can misfire reaching 100% probability.
|
||||
- imageadd: centers hydroponic sprays, adds new sprites for plant-b-gone
|
||||
SparkezelPL:
|
||||
- bugfix: Single tank bombs no longer just delete themselves
|
||||
sqnztb:
|
||||
- bugfix: icebox perma cabin has piped atmospherics again
|
||||
tf-4:
|
||||
- bugfix: the sec medic and HoP now get four mags in their gunsets, same as everyone
|
||||
else
|
||||
- bugfix: a single space
|
||||
|
||||
@@ -33,3 +33,12 @@
|
||||
. = ..()
|
||||
var/mob/living/carbon/human/H = quirk_holder
|
||||
H?.cure_trauma_type(/datum/brain_trauma/severe/monophobia, TRAUMA_RESILIENCE_ABSOLUTE)
|
||||
|
||||
/datum/quirk/ashwalkertalons
|
||||
name = "Chunky Fingers"
|
||||
desc = "Your digits are thick and tough and unable to use modular computers including tablets, certain devices like laser pointers, and non-adapted firearms."
|
||||
gain_text = "<span class='notice'>Your fingers feel thicker and slightly less dextrous. You expect you'll have a difficult time using computers, certain small devices and firearms.</span>"
|
||||
lose_text = "<span class='notice'>Your digits feel lithe and capable once more.</span>"
|
||||
medical_record_text = "Patient's digits are thick and lack the dexterity for operating some small devices, computers and non-adapted firearms."
|
||||
value = -8
|
||||
mob_trait = TRAIT_CHUNKYFINGERS
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
/datum/antagonist/traitor/infiltrator
|
||||
name = "Infiltrator"
|
||||
var/infil_outfit = /datum/outfit/syndicateinfiltrator
|
||||
|
||||
/datum/antagonist/traitor/infiltrator/on_gain()
|
||||
var/mob/living/carbon/human/H = owner.current
|
||||
H.equipOutfit(infil_outfit)
|
||||
var/chosen_name = H.dna.species.random_name(H.gender,1,1)
|
||||
H.fully_replace_character_name(H.real_name,chosen_name)
|
||||
return ..()
|
||||
@@ -0,0 +1,64 @@
|
||||
/datum/dynamic_ruleset/midround/from_ghosts/lone_infiltrator
|
||||
name = "Lone Infiltrator"
|
||||
antag_datum = /datum/antagonist/traitor/infiltrator
|
||||
antag_flag = ROLE_TRAITOR
|
||||
restricted_roles = list("Cyborg", "AI", "Positronic Brain")
|
||||
required_candidates = 1
|
||||
weight = 5 //Slightly less common than normal midround traitors.
|
||||
cost = 15 //But also slightly more costly.
|
||||
requirements = list(50,40,30,20,10,10,10,10,10,10)
|
||||
var/list/spawn_locs = list()
|
||||
|
||||
/datum/dynamic_ruleset/midround/from_ghosts/lone_infiltrator/execute()
|
||||
for(var/obj/effect/landmark/carpspawn/C in GLOB.landmarks_list)
|
||||
spawn_locs += (C.loc)
|
||||
if(!spawn_locs.len)
|
||||
message_admins("No valid spawn locations found, aborting...")
|
||||
return MAP_ERROR
|
||||
. = ..()
|
||||
|
||||
/datum/dynamic_ruleset/midround/from_ghosts/lone_infiltrator/generate_ruleset_body(mob/applicant)
|
||||
var/datum/mind/player_mind = new /datum/mind(applicant.key)
|
||||
|
||||
var/mob/living/carbon/human/operative = new(pick(spawn_locs))
|
||||
applicant.client.prefs.copy_to(operative)
|
||||
operative.dna.update_dna_identity()
|
||||
operative.dna.species.before_equip_job(null, operative)
|
||||
operative.regenerate_icons()
|
||||
SSquirks.AssignQuirks(operative, applicant.client, TRUE, TRUE, null, FALSE, operative)
|
||||
player_mind.assigned_role = "Lone Infiltrator"
|
||||
player_mind.special_role = "Lone Infiltrator"
|
||||
player_mind.active = TRUE
|
||||
player_mind.transfer_to(operative)
|
||||
player_mind.add_antag_datum(/datum/antagonist/traitor/infiltrator)
|
||||
|
||||
message_admins("[ADMIN_LOOKUPFLW(operative)] has been made into lone infiltrator by midround ruleset.")
|
||||
log_game("[key_name(operative)] was spawned as a lone infiltrator by midround ruleset.")
|
||||
return operative
|
||||
|
||||
//OUTFIT//
|
||||
/datum/outfit/syndicateinfiltrator
|
||||
name = "Syndicate Operative - Infiltrator"
|
||||
|
||||
uniform = /obj/item/clothing/under/syndicate
|
||||
shoes = /obj/item/clothing/shoes/combat
|
||||
gloves = /obj/item/clothing/gloves/combat
|
||||
back = /obj/item/storage/backpack/fireproof
|
||||
ears = /obj/item/radio/headset/syndicate/alt
|
||||
id = /obj/item/card/id/advanced/chameleon
|
||||
glasses = /obj/item/clothing/glasses/night
|
||||
mask = /obj/item/clothing/mask/gas/syndicate
|
||||
suit = /obj/item/clothing/suit/space/hardsuit/syndi
|
||||
r_pocket = /obj/item/tank/internals/emergency_oxygen/engi
|
||||
internals_slot = ITEM_SLOT_RPOCKET
|
||||
belt = /obj/item/storage/belt/military
|
||||
backpack_contents = list(/obj/item/storage/box/survival/syndie=1,\
|
||||
/obj/item/tank/jetpack/oxygen/harness=1,\
|
||||
/obj/item/gun/ballistic/automatic/pistol=1,\
|
||||
/obj/item/kitchen/knife/combat/survival)
|
||||
|
||||
id_trim = /datum/id_trim/chameleon/operative
|
||||
|
||||
/datum/outfit/syndicateinfiltrator/post_equip(mob/living/carbon/human/H)
|
||||
H.faction |= ROLE_SYNDICATE
|
||||
H.update_icons()
|
||||
@@ -75,7 +75,7 @@ GLOBAL_LIST_EMPTY(ckey_to_aooc_name)
|
||||
var/mode = listeners[c]
|
||||
var/color = (!anon && CONFIG_GET(flag/allow_admin_ooccolor) && C.prefs.ooccolor) ? C.prefs.ooccolor : GLOB.AOOC_COLOR
|
||||
var/name = (mode == AOOC_LISTEN_ADMIN && anon) ? "([key])[keyname]" : keyname
|
||||
to_chat(C, "<font color='[color]'><b><span class='prefix'>AOOC:</span> <EM>[name]:</EM> <span class='message linkify'>[msg]</span></b></font>")
|
||||
to_chat(C, "<span class='oocplain'><font color='[color]'><b><span class='prefix'>AOOC:</span> <EM>[name]:</EM> <span class='message linkify'>[msg]</span></b></font></span>")
|
||||
|
||||
#undef AOOC_LISTEN_PLAYER
|
||||
#undef AOOC_LISTEN_ADMIN
|
||||
@@ -101,7 +101,7 @@ GLOBAL_LIST_EMPTY(ckey_to_aooc_name)
|
||||
listeners[M.client] = TRUE
|
||||
for(var/c in listeners)
|
||||
var/client/C = c
|
||||
to_chat(C, "<B>The AOOC channel has been globally [GLOB.aooc_allowed ? "enabled" : "disabled"].</B>")
|
||||
to_chat(C, "<span class='oocplain'><B>The AOOC channel has been globally [GLOB.aooc_allowed ? "enabled" : "disabled"].</B></span>")
|
||||
|
||||
/datum/admins/proc/toggleaooc()
|
||||
set category = "Server"
|
||||
|
||||
@@ -75,7 +75,7 @@ GLOBAL_LIST_EMPTY(ckey_to_sooc_name)
|
||||
var/mode = listeners[c]
|
||||
var/color = (!anon && CONFIG_GET(flag/allow_admin_ooccolor) && C.prefs.ooccolor) ? C.prefs.ooccolor : GLOB.SOOC_COLOR
|
||||
var/name = (mode == SOOC_LISTEN_ADMIN && anon) ? "([key])[keyname]" : keyname
|
||||
to_chat(C, "<font color='[color]'><b><span class='prefix'>SOOC:</span> <EM>[name]:</EM> <span class='message linkify'>[msg]</span></b></font>")
|
||||
to_chat(C, "<span class='oocplain'><font color='[color]'><b><span class='prefix'>SOOC:</span> <EM>[name]:</EM> <span class='message linkify'>[msg]</span></b></font></span>")
|
||||
|
||||
#undef SOOC_LISTEN_PLAYER
|
||||
#undef SOOC_LISTEN_ADMIN
|
||||
@@ -101,7 +101,7 @@ GLOBAL_LIST_EMPTY(ckey_to_sooc_name)
|
||||
listeners[M.client] = TRUE
|
||||
for(var/c in listeners)
|
||||
var/client/C = c
|
||||
to_chat(C, "<B>The SOOC channel has been globally [GLOB.sooc_allowed ? "enabled" : "disabled"].</B>")
|
||||
to_chat(C, "<span class='oocplain'><B>The SOOC channel has been globally [GLOB.sooc_allowed ? "enabled" : "disabled"].</B></span>")
|
||||
|
||||
/datum/admins/proc/togglesooc()
|
||||
set category = "Server"
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
#define BSRPD_CAPAC_MAX 500
|
||||
#define BSRPD_CAPAC_USE 10
|
||||
#define BSRPD_CAPAC_NEW 250
|
||||
|
||||
/obj/item/pipe_dispenser/bluespace
|
||||
name = "Bluespace RPD"
|
||||
desc = "State of the art technology being tested by NT scientists; this is their only working prototype."
|
||||
icon = 'modular_skyrat/modules/bsrpd/icons/bsrpd.dmi'
|
||||
icon_state = "bsrpd"
|
||||
lefthand_file = 'modular_skyrat/modules/bsrpd/icons/bsrpd_left.dmi'
|
||||
righthand_file = 'modular_skyrat/modules/bsrpd/icons/bsrpd_right.dmi'
|
||||
inhand_icon_state = "bsrpd"
|
||||
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
|
||||
custom_materials = null
|
||||
var/bs_capac = BSRPD_CAPAC_MAX
|
||||
var/bs_use = BSRPD_CAPAC_USE
|
||||
var/bs_prog = 0
|
||||
|
||||
/obj/item/pipe_dispenser/bluespace/attackby(obj/item/item, mob/user, param)
|
||||
if(istype(item, /obj/item/stack/sheet/bluespace_crystal))
|
||||
if(BSRPD_CAPAC_NEW > (BSRPD_CAPAC_MAX - bs_capac) || bs_use == 0)
|
||||
to_chat(user, "<span class='warning'>You cannot recharge [src] anymore!</span>")
|
||||
return
|
||||
item.use(1)
|
||||
to_chat(user, "<span class='notice'>You recharge the bluespace capacitor inside of [src]</span>")
|
||||
bs_capac += BSRPD_CAPAC_NEW
|
||||
return
|
||||
if(istype(item, /obj/item/assembly/signaler/anomaly/bluespace))
|
||||
if(bs_use)
|
||||
to_chat(user, "<span class='notice'>You slot [item] into [src]; supercharging the bluespace capacitor!</span>")
|
||||
bs_use = 0
|
||||
qdel(item)
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You cannot improve the [src] further.</span>")
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/item/pipe_dispenser/bluespace/examine(mob/user)
|
||||
. = ..()
|
||||
if(user.Adjacent(src))
|
||||
. += "Currently has [bs_use == 0 ? "infinite" : bs_capac / bs_use] charges remaining."
|
||||
if(bs_use != 0)
|
||||
. += "The Bluespace Anomaly Core slot is empty."
|
||||
else
|
||||
. += "You cannot see the charge capacity."
|
||||
|
||||
/obj/item/pipe_dispenser/bluespace/afterattack(atom/target, mob/user, prox)
|
||||
if(prox) // If we are in proximity to the target, don't use charge and don't call this shitcode.
|
||||
return ..()
|
||||
if(bs_capac < (bs_use * (bs_prog + 1)))
|
||||
to_chat(user, "<span class='warning'>The [src] lacks the charge to do that.</span>")
|
||||
return FALSE
|
||||
bs_prog++ // So people can't just spam click and get more uses
|
||||
user.Beam(target, icon_state = "rped_upgrade", time = 1 SECONDS)
|
||||
if(pre_attack(target, user))
|
||||
bs_prog--
|
||||
bs_capac -= bs_use
|
||||
return TRUE
|
||||
bs_prog--
|
||||
return FALSE
|
||||
|
||||
#undef BSRPD_CAPAC_MAX
|
||||
#undef BSRPD_CAPAC_USE
|
||||
#undef BSRPD_CAPAC_NEW
|
||||
|
After Width: | Height: | Size: 478 B |
|
After Width: | Height: | Size: 648 B |
|
After Width: | Height: | Size: 639 B |
@@ -30,7 +30,7 @@ GLOBAL_VAR_INIT(combat_indicator_overlay, GenerateCombatOverlay())
|
||||
nextcombatpopup = world.time + COMBAT_NOTICE_COOLDOWN
|
||||
playsound(src, 'sound/machines/chime.ogg', 10, ignore_walls = FALSE)
|
||||
flick_emote_popup_on_mob("combat", 20)
|
||||
visible_message("<span class='boldwarning'>[src] gets ready for combat!</span>")
|
||||
visible_message("<span class='warning'><b>[src] gets ready for combat!</b></span>")
|
||||
add_overlay(GLOB.combat_indicator_overlay)
|
||||
combat_indicator = TRUE
|
||||
src.log_message("<font color='red'>has turned ON the combat indicator!</font>", INDIVIDUAL_ATTACK_LOG)
|
||||
|
||||
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 584 KiB After Width: | Height: | Size: 586 KiB |
|
Before Width: | Height: | Size: 610 KiB After Width: | Height: | Size: 612 KiB |
|
Before Width: | Height: | Size: 7.2 KiB After Width: | Height: | Size: 8.4 KiB |
|
Before Width: | Height: | Size: 220 KiB After Width: | Height: | Size: 221 KiB |
|
Before Width: | Height: | Size: 264 KiB After Width: | Height: | Size: 266 KiB |
@@ -193,4 +193,4 @@
|
||||
/datum/loadout_item/backpack/donator/intern_hat
|
||||
name = "Intern Hat"
|
||||
path = /obj/item/clothing/head/intern/developer
|
||||
ckeywhitelist = list("gandalf2k15", "yawet330", "junglerat", "theooz", "tf4", "cheshify", "swiftfeather", "spcr", "tygertac", "useroth")
|
||||
ckeywhitelist = list("gandalf2k15", "yawet330", "junglerat", "theooz", "tf4", "cheshify", "swiftfeather", "spcr", "tygertac", "useroth", "slippyjoe")
|
||||
|
||||
@@ -21,6 +21,26 @@
|
||||
path = /obj/item/clothing/neck/human_petcollar/leather
|
||||
extra_info = LOADOUT_INFO_THREE_COLORS
|
||||
|
||||
/datum/loadout_item/neck/cbellcollar
|
||||
name = "Cowbell collar"
|
||||
path = /obj/item/clothing/neck/human_petcollar/locked/cowcollar
|
||||
|
||||
/datum/loadout_item/neck/bellcollar
|
||||
name = "Bell collar"
|
||||
path = /obj/item/clothing/neck/human_petcollar/locked/bellcollar
|
||||
|
||||
/datum/loadout_item/neck/spikecollar
|
||||
name = "Spike collar"
|
||||
path = /obj/item/clothing/neck/human_petcollar/locked/spikecollar
|
||||
|
||||
/datum/loadout_item/neck/hcollar
|
||||
name = "Holocollar"
|
||||
path = /obj/item/clothing/neck/human_petcollar/locked/holocollar
|
||||
|
||||
/datum/loadout_item/neck/crosscollar
|
||||
name = "Cross collar"
|
||||
path = /obj/item/clothing/neck/human_petcollar/locked/cross
|
||||
|
||||
/datum/loadout_item/neck/poly_cloak
|
||||
name = "Polychromic Cloak"
|
||||
path = /obj/item/clothing/neck/cloak/polychromic
|
||||
|
||||
@@ -36,6 +36,16 @@
|
||||
name = "Tailcoat"
|
||||
path = /obj/item/clothing/suit/costume/tailcoat
|
||||
|
||||
/datum/loadout_item/suit/duster
|
||||
name = "Colorable Duster"
|
||||
path = /obj/item/clothing/suit/duster/colorable
|
||||
extra_info = LOADOUT_INFO_ONE_COLOR
|
||||
|
||||
/datum/loadout_item/suit/peacoat
|
||||
name = "Colorable Peacoat"
|
||||
path = /obj/item/clothing/suit/toggle/peacoat
|
||||
extra_info = LOADOUT_INFO_ONE_COLOR
|
||||
|
||||
/datum/loadout_item/suit/dresscoat
|
||||
name = "Black Dresscoat"
|
||||
path = /obj/item/clothing/suit/costume/vic_dresscoat
|
||||
|
||||
@@ -2,6 +2,11 @@
|
||||
category = LOADOUT_CATEGORY_UNIFORM
|
||||
|
||||
//MISC
|
||||
/datum/loadout_item/uniform/gandalf
|
||||
name = "Nostalgic Costume"
|
||||
path = /obj/item/clothing/under/nostalgiacritic
|
||||
ckeywhitelist = list("gandalf2k15")
|
||||
|
||||
/datum/loadout_item/uniform/assistantformal
|
||||
name = "Assistant's formal uniform"
|
||||
path = /obj/item/clothing/under/misc/assistantformal
|
||||
|
||||
@@ -90,3 +90,42 @@
|
||||
/obj/item/key/collar
|
||||
name = "Collar Key"
|
||||
desc = "A key for a tiny lock on a collar or bag."
|
||||
|
||||
/obj/item/clothing/neck/human_petcollar/locked/cowcollar
|
||||
icon = 'modular_skyrat/modules/customization/icons/obj/clothing/neck.dmi'
|
||||
worn_icon = 'modular_skyrat/modules/customization/icons/mob/clothing/neck.dmi'
|
||||
name = "cowbell collar"
|
||||
desc = "Don't fear the ripper, now your pet doesn't have to."
|
||||
icon_state = "collar_cowbell"
|
||||
|
||||
/obj/item/clothing/neck/human_petcollar/locked/bellcollar
|
||||
icon = 'modular_skyrat/modules/customization/icons/obj/clothing/neck.dmi'
|
||||
worn_icon = 'modular_skyrat/modules/customization/icons/mob/clothing/neck.dmi'
|
||||
name = "bell collar"
|
||||
desc = "A loud and annoying collar for your little kittens!"
|
||||
icon_state = "collar_bell"
|
||||
|
||||
/obj/item/clothing/neck/human_petcollar/locked/spikecollar
|
||||
icon = 'modular_skyrat/modules/customization/icons/obj/clothing/neck.dmi'
|
||||
worn_icon = 'modular_skyrat/modules/customization/icons/mob/clothing/neck.dmi'
|
||||
name = "spiked collar"
|
||||
desc = "A collar for moody pets. Or pitbulls."
|
||||
icon_state = "collar_spik"
|
||||
|
||||
/obj/item/clothing/neck/human_petcollar/locked/holocollar
|
||||
icon = 'modular_skyrat/modules/customization/icons/obj/clothing/neck.dmi'
|
||||
worn_icon = 'modular_skyrat/modules/customization/icons/mob/clothing/neck.dmi'
|
||||
name = "holocollar"
|
||||
desc = "A collar with holographic information, like a microchip, but around the neck."
|
||||
icon_state = "collar_holo"
|
||||
|
||||
/obj/item/clothing/neck/human_petcollar/locked/cross
|
||||
icon = 'modular_skyrat/modules/customization/icons/obj/clothing/neck.dmi'
|
||||
worn_icon = 'modular_skyrat/modules/customization/icons/mob/clothing/neck.dmi'
|
||||
name = "cross collar"
|
||||
desc = "A religious punishment, probably."
|
||||
icon_state = "collar_blk"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -230,3 +230,30 @@
|
||||
mutant_variants = NONE
|
||||
|
||||
|
||||
/obj/item/clothing/suit/duster/colorable
|
||||
name = "colorable duster"
|
||||
desc = "This station aint big enough for the both of us."
|
||||
icon = 'modular_skyrat/modules/customization/icons/obj/clothing/suits.dmi'
|
||||
worn_icon = 'modular_skyrat/modules/customization/icons/mob/clothing/suit.dmi'
|
||||
icon_state = "duster"
|
||||
mutant_variants = NONE
|
||||
|
||||
/obj/item/clothing/suit/duster/colorable/ComponentInitialize()
|
||||
. = ..()
|
||||
AddElement(/datum/element/polychromic, list("5D5"))
|
||||
|
||||
/obj/item/clothing/suit/toggle/peacoat
|
||||
name = "colorable peacoat"
|
||||
desc = "The way you guys are blending in with the local colour. I mean, Flag Girl was bad enough, but U-Boat Captain?"
|
||||
icon = 'modular_skyrat/modules/customization/icons/obj/clothing/suits.dmi'
|
||||
worn_icon = 'modular_skyrat/modules/customization/icons/mob/clothing/suit.dmi'
|
||||
icon_state = "peacoat"
|
||||
mutant_variants = NONE
|
||||
|
||||
/obj/item/clothing/suit/toggle/peacoat/ComponentInitialize()
|
||||
. = ..()
|
||||
AddElement(/datum/element/polychromic, list("5D5"))
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -394,5 +394,12 @@
|
||||
worn_icon = 'modular_skyrat/modules/customization/icons/mob/clothing/uniform.dmi'
|
||||
icon_state = "rusuni"
|
||||
|
||||
/obj/item/clothing/under/nostalgiacritic
|
||||
name = "nostalgic outfit"
|
||||
desc = "He remembers it so you don't have to."
|
||||
icon = 'modular_skyrat/modules/customization/icons/obj/clothing/uniforms.dmi'
|
||||
worn_icon = 'modular_skyrat/modules/customization/icons/mob/clothing/uniform.dmi'
|
||||
icon_state = "cia"
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -155,6 +155,10 @@
|
||||
icon = 'modular_skyrat/modules/customization/icons/obj/clothing/uniforms.dmi'
|
||||
worn_icon = 'modular_skyrat/modules/customization/icons/mob/clothing/uniform.dmi'
|
||||
icon_state = "prisonerclassic"
|
||||
body_parts_covered = CHEST|GROIN|ARMS|LEGS
|
||||
has_sensor = LOCKED_SENSORS
|
||||
sensor_mode = SENSOR_COORDS
|
||||
random_sensor = FALSE
|
||||
|
||||
///CDO
|
||||
/obj/item/clothing/under/rank/security/peacekeeper/junior/sol
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
var/list/species_whitelist
|
||||
//Blacklist of species for this job.
|
||||
var/list/species_blacklist
|
||||
/// Which languages does the job require, associative to LANGUAGE_UNDERSTOOD or LANGUAGE_SPOKEN
|
||||
/// Which languages does the job require, associative to LANGUAGE_UNDERSTOOD or LANGUAGE_SPOKEN
|
||||
var/list/required_languages = list(/datum/language/common = LANGUAGE_SPOKEN)
|
||||
|
||||
/datum/job/proc/has_banned_quirk(datum/preferences/pref)
|
||||
@@ -49,7 +49,7 @@
|
||||
|
||||
/datum/job/security_sergeant
|
||||
banned_quirks = list(SEC_RESTRICTED_QUIRKS)
|
||||
|
||||
|
||||
/datum/job/security_medic
|
||||
banned_quirks = list(SEC_RESTRICTED_QUIRKS)
|
||||
|
||||
@@ -101,6 +101,27 @@
|
||||
/datum/job/prisoner
|
||||
required_languages = null
|
||||
|
||||
/datum/job/station_engineer
|
||||
banned_quirks = list(TECH_RESTRICTED_QUIRKS)
|
||||
|
||||
/datum/job/atmospheric_technician
|
||||
banned_quirks = list(TECH_RESTRICTED_QUIRKS)
|
||||
|
||||
/datum/job/doctor
|
||||
banned_quirks = list(TECH_RESTRICTED_QUIRKS)
|
||||
|
||||
/datum/job/virologist
|
||||
banned_quirks = list(TECH_RESTRICTED_QUIRKS)
|
||||
|
||||
/datum/job/chemist
|
||||
banned_quirks = list(TECH_RESTRICTED_QUIRKS)
|
||||
|
||||
/datum/job/roboticist
|
||||
banned_quirks = list(TECH_RESTRICTED_QUIRKS)
|
||||
|
||||
/datum/job/scientist
|
||||
banned_quirks = list(TECH_RESTRICTED_QUIRKS)
|
||||
|
||||
/datum/job/proc/has_required_languages(datum/preferences/pref)
|
||||
if(!required_languages)
|
||||
return TRUE
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
/area/centcom/holding/cafebuild, /area/centcom/holding/cafevox, /area/centcom/holding/cafedorms, /area/centcom/holding/cafepark, /area/centcom/holding/cafeplumbing))
|
||||
ADD_TRAIT(new_spawn, TRAIT_SIXTHSENSE, GHOSTROLE_TRAIT)
|
||||
ADD_TRAIT(new_spawn, TRAIT_FREE_GHOST, GHOSTROLE_TRAIT)
|
||||
to_chat(new_spawn,"<span class='boldwarning'>Ghosting is free!</span>")
|
||||
to_chat(new_spawn,"<span class='warning'><b>Ghosting is free!</b></span>")
|
||||
var/datum/action/toggle_dead_chat_mob/D = new(new_spawn)
|
||||
D.Grant(new_spawn)
|
||||
|
||||
@@ -64,7 +64,7 @@
|
||||
/area/centcom/holding/cafebuild, /area/centcom/holding/cafevox, /area/centcom/holding/cafedorms, /area/centcom/holding/cafepark, /area/centcom/holding/cafeplumbing))
|
||||
ADD_TRAIT(new_spawn, TRAIT_SIXTHSENSE, GHOSTROLE_TRAIT)
|
||||
ADD_TRAIT(new_spawn, TRAIT_FREE_GHOST, GHOSTROLE_TRAIT)
|
||||
to_chat(new_spawn,"<span class='boldwarning'>Ghosting is free!</span>")
|
||||
to_chat(new_spawn,"<span class='warning'><b>Ghosting is free!</b></span>")
|
||||
//to_chat(new_spawn,"<span class='narsiesmall'>Be warned: People who opt out of EORG will come here. Do not make the area uninhabitable and do NOT commit EORG. This is a safe-zone. If you attack people in EORG, you will be banned for griefing.</span>")
|
||||
var/datum/action/toggle_dead_chat_mob/D = new(new_spawn)
|
||||
D.Grant(new_spawn)
|
||||
|
||||
@@ -92,8 +92,8 @@
|
||||
locked = TRUE
|
||||
log_combat(target, source, "locked onto with aiming")
|
||||
playsound(get_turf(source), 'modular_skyrat/modules/gunpoint/sound/targeton.ogg', 50,1)
|
||||
to_chat(source, "<span class='boldnotice'>You lock onto [target.name]!</span>")
|
||||
target.visible_message("<span class='boldwarning'>[source.name] holds [target.name] at gunpoint with the [aimed_gun.name]!</span>", "<span class='userdanger'>[source.name] holds you at gunpoint with the [aimed_gun.name]!</span>")
|
||||
to_chat(source, "<span class='notice'><b>You lock onto [target.name]!</b></span>")
|
||||
target.visible_message("<span class='warning'><b>[source.name] holds [target.name] at gunpoint with the [aimed_gun.name]!</b></span>", "<span class='userdanger'>[source.name] holds you at gunpoint with the [aimed_gun.name]!</span>")
|
||||
if(target.gunpointed.len == 1)//First case
|
||||
to_chat(target, "<span class='danger'>You'll <b>get shot</b> if you <b>use radio</b>, <b>move</b> or <b>interact with items</b>!</span>")
|
||||
to_chat(target, "<span class='notice'>You can however take items out, toss harmless items or drop them.</span>")
|
||||
@@ -131,7 +131,7 @@
|
||||
source.gunpointing = null
|
||||
if(locked)
|
||||
QDEL_NULL(gunpoint_gui)
|
||||
target.visible_message("<span class='notice'>[source.name] no longer holds [target.name] at gunpoint.</span>", "<span class='boldnotice'>[source.name] no longer holds you at gunpoint.</span>")
|
||||
target.visible_message("<span class='notice'>[source.name] no longer holds [target.name] at gunpoint.</span>", "<span class='notice'><b>[source.name] no longer holds you at gunpoint.</b></span>")
|
||||
source = null
|
||||
target = null
|
||||
aimed_gun = null
|
||||
|
||||
@@ -38,9 +38,9 @@
|
||||
var/datum/action/innate/turn_to_human
|
||||
var/datum/action/innate/devour
|
||||
var/transformed_time = 0
|
||||
var/playstyle_string = "<b><font size=3 color='red'>We have entered our true form!</font> We are unbelievably powerful, and regenerate life at a steady rate. However, most of \
|
||||
var/playstyle_string = "<span class=infoplain><b><font size=3 color='red'>We have entered our true form!</font> We are unbelievably powerful, and regenerate life at a steady rate. However, most of \
|
||||
our abilities are useless in this form, and we must utilise the abilities that we have gained as a result of our transformation. Currently, we are incapable of returning to a human. \
|
||||
After several minutes, we will once again be able to revert into a human. Taking too much damage will cause us to reach equilibrium and our cells will combust into a shower of gore, watch out!</b>"
|
||||
After several minutes, we will once again be able to revert into a human. Taking too much damage will cause us to reach equilibrium and our cells will combust into a shower of gore, watch out!</b></span>"
|
||||
var/mob/living/carbon/human/stored_changeling = null //The changeling that transformed
|
||||
var/devouring = FALSE //If the true changeling is currently devouring a human
|
||||
|
||||
@@ -71,7 +71,7 @@
|
||||
if(stat)
|
||||
return
|
||||
if(act == "scream")
|
||||
message = "<B>[src]</B> makes a loud, bone-chilling roar!"
|
||||
message = "<span class='emote'><B>[src]</B> makes a loud, bone-chilling roar!</span>"
|
||||
act = "me"
|
||||
scream(message)
|
||||
return
|
||||
@@ -79,7 +79,7 @@
|
||||
|
||||
/mob/living/simple_animal/hostile/true_changeling/proc/scream(message)
|
||||
if(!message)
|
||||
message = "<B>[src]</B> makes a loud, bone-chilling roar!"
|
||||
message = "<span class='emote'><B>[src]</B> makes a loud, bone-chilling roar!</span>"
|
||||
var/frequency = get_rand_frequency() //so sound frequency is consistent
|
||||
for(var/mob/M in range(35, src)) //You can hear the scream 7 screens away
|
||||
// Double check for client
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
return
|
||||
|
||||
var/show_char = CONFIG_GET(flag/mentors_mobname_only)
|
||||
var/mentor_msg = "<span class='mentornotice'><b><font color='purple'>MENTORHELP:</b> <b>[key_name_mentor(src, 1, 0, 1, show_char)]</b>: [msg]</font></span>"
|
||||
var/mentor_msg = "<span class='infoplain'><span class='mentornotice'><b><font color='purple'>MENTORHELP:</b> <b>[key_name_mentor(src, 1, 0, 1, show_char)]</b>: [msg]</font></span></span>"
|
||||
log_mentor("MENTORHELP: [key_name_mentor(src, 0, 0, 0, 0)]: [msg]")
|
||||
|
||||
for(var/it in GLOB.mentors)
|
||||
@@ -23,7 +23,7 @@
|
||||
SEND_SOUND(X, 'sound/items/bikehorn.ogg')
|
||||
to_chat(X, mentor_msg)
|
||||
|
||||
to_chat(src, "<span class='mentornotice'><font color='purple'>PM to-<b>Mentors</b>: [msg]</font></span>")
|
||||
to_chat(src, "<span class='infoplain'><span class='mentornotice'><font color='purple'>PM to-<b>Mentors</b>: [msg]</font></span></span>")
|
||||
return
|
||||
|
||||
/proc/get_mentor_counts()
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
return
|
||||
|
||||
if(is_mentor(whom))
|
||||
to_chat(GLOB.mentors, "<font color='purple'>[src] has started replying to [whom]'s mhelp.</font>")
|
||||
to_chat(GLOB.mentors, "<span class='infoplain'><font color='purple'>[src] has started replying to [whom]'s mhelp.</font></span>")
|
||||
|
||||
//get message text, limit it's length.and clean/escape html
|
||||
if(!msg)
|
||||
@@ -40,7 +40,7 @@
|
||||
|
||||
if(!msg)
|
||||
if (is_mentor(whom))
|
||||
to_chat(GLOB.mentors, "<span class='purple'>[src] has stopped their reply to [whom]'s mhelp.</span>")
|
||||
to_chat(GLOB.mentors, "<span class='infoplain'><span class='purple'>[src] has stopped their reply to [whom]'s mhelp.</span></span>")
|
||||
return
|
||||
|
||||
if(!C)
|
||||
@@ -57,7 +57,7 @@
|
||||
msg = sanitize(copytext_char(msg, 1, MAX_MESSAGE_LEN))
|
||||
if(!msg)
|
||||
if (is_mentor(whom))
|
||||
to_chat(GLOB.mentors, "<span class='purple'>[src] has stopped their reply to [whom]'s mhelp.</span>")
|
||||
to_chat(GLOB.mentors, "<span class='infoplain'><span class='purple'>[src] has stopped their reply to [whom]'s mhelp.</span></span>")
|
||||
return
|
||||
log_mentor("Mentor PM: [key_name(src)]->[key_name(C)]: [msg]")
|
||||
|
||||
@@ -66,17 +66,17 @@
|
||||
var/show_char = CONFIG_GET(flag/mentors_mobname_only)
|
||||
if(C.is_mentor())
|
||||
if(is_mentor())//both are mentors
|
||||
to_chat(C, "<span class='purple'>Mentor PM from-<b>[key_name_mentor(src, C, 1, 0, 0)]</b>: [msg]</span>")
|
||||
to_chat(src, "<span class='blue'>Mentor PM to-<b>[key_name_mentor(C, C, 1, 0, 0)]</b>: [msg]</font>")
|
||||
to_chat(C, "<span class='infoplain'><span class='purple'>Mentor PM from-<b>[key_name_mentor(src, C, 1, 0, 0)]</b>: [msg]</span></span>")
|
||||
to_chat(src, "<span class='infoplain'><span class='blue'>Mentor PM to-<b>[key_name_mentor(C, C, 1, 0, 0)]</b>: [msg]</span></span>")
|
||||
|
||||
else //recipient is a mentor but sender is not
|
||||
to_chat(C, "<span class='purple'>Reply PM from-<b>[key_name_mentor(src, C, 1, 0, show_char)]</b>: [msg]</span>")
|
||||
to_chat(src, "<span class='pink'>Mentor PM to-<b>[key_name_mentor(C, C, 1, 0, 0)]</b>: [msg]</span>")
|
||||
to_chat(C, "<span class='infoplain'><span class='purple'>Reply PM from-<b>[key_name_mentor(src, C, 1, 0, show_char)]</b>: [msg]</span></span>")
|
||||
to_chat(src, "<span class='infoplain'><span class='pink'>Mentor PM to-<b>[key_name_mentor(C, C, 1, 0, 0)]</b>: [msg]</span></span>")
|
||||
|
||||
else
|
||||
if(is_mentor()) //sender is a mentor but recipient is not.
|
||||
to_chat(C, "<span class='purple'>Mentor PM from-<b>[key_name_mentor(src, C, 1, 0, 0)]</b>: [msg]</span>")
|
||||
to_chat(src, "<span class='pink'>Mentor PM to-<b>[key_name_mentor(C, C, 1, 0, show_char)]</b>: [msg]</span>")
|
||||
to_chat(C, "<span class='infoplain'><span class='purple'>Mentor PM from-<b>[key_name_mentor(src, C, 1, 0, 0)]</b>: [msg]</span></span>")
|
||||
to_chat(src, "<span class='infoplain'><span class='pink'>Mentor PM to-<b>[key_name_mentor(C, C, 1, 0, show_char)]</b>: [msg]</span></span>")
|
||||
|
||||
//we don't use message_Mentors here because the sender/receiver might get it too
|
||||
var/show_char_sender = !is_mentor() && CONFIG_GET(flag/mentors_mobname_only)
|
||||
@@ -84,4 +84,4 @@
|
||||
for(var/it in GLOB.mentors)
|
||||
var/client/X = it
|
||||
if(X.key!=key && X.key!=C.key) //check client/X is an Mentor and isn't the sender or recipient
|
||||
to_chat(X, "<B><span class='pink'>Mentor PM: [key_name_mentor(src, X, 0, 0, show_char_sender)]->[key_name_mentor(C, X, 0, 0, show_char_recip)]:</span></B> <span class='blue'>[msg]</span>") //inform X
|
||||
to_chat(X, "<span class='infoplain'><B><span class='pink'>Mentor PM: [key_name_mentor(src, X, 0, 0, show_char_sender)]->[key_name_mentor(C, X, 0, 0, show_char_recip)]:</span></B> <span class='blue'>[msg]</span></span>") //inform X
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
log_mentor("MSAY: [key_name(src)] : [msg]")
|
||||
|
||||
if(check_rights_for(src, R_ADMIN,0))
|
||||
msg = "<b><font color ='#8A2BE2'><span class='prefix'>MENTOR:</span> <EM>[key_name(src, 0, 0)]</EM>: <span class='message'>[msg]</span></font></b>"
|
||||
msg = "<span class='infoplain'><b><font color ='#8A2BE2'><span class='prefix'>MENTOR:</span> <EM>[key_name(src, 0, 0)]</EM>: <span class='message'>[msg]</span></font></b></span>"
|
||||
else
|
||||
msg = "<b><font color ='#E236D8'><span class='prefix'>MENTOR:</span> <EM>[key_name(src, 0, 0)]</EM>: <span class='message'>[msg]</span></font></b>"
|
||||
msg = "<span class='infoplain'><b><font color ='#E236D8'><span class='prefix'>MENTOR:</span> <EM>[key_name(src, 0, 0)]</EM>: <span class='message'>[msg]</span></font></b></span>"
|
||||
to_chat(GLOB.admins | GLOB.mentors, msg)
|
||||
|
||||
@@ -18,5 +18,5 @@
|
||||
|
||||
if(C.is_afk())
|
||||
suffix += " (AFK)"
|
||||
msg += "\t[C][suffix]\n"
|
||||
msg += "<span class='infoplain'>\t[C][suffix]\n</span>"
|
||||
to_chat(src, msg)
|
||||
|
||||
@@ -34,5 +34,5 @@ GLOBAL_VAR_INIT(ssd_indicator_overlay, mutable_appearance('modular_skyrat/module
|
||||
//This proc should stop mobs from having the overlay when someone keeps jumping control of mobs, unfortunately it causes Aghosts to have their character without the SSD overlay, I wasn't able to find a better proc unfortunately
|
||||
/mob/living/transfer_ckey(mob/new_mob, send_signal = TRUE)
|
||||
..()
|
||||
set_ssd_indicator(FALSE)
|
||||
set_ssd_indicator(FALSE)
|
||||
*/
|
||||
|
||||
@@ -5,5 +5,5 @@
|
||||
set desc = "Toggles seeing LocalOutOfCharacter chat"
|
||||
usr.client.prefs.skyrat_toggles ^= CHAT_LOOC
|
||||
usr.client.prefs.save_preferences()
|
||||
to_chat(usr, "You will [(usr.client.prefs.skyrat_toggles & CHAT_LOOC) ? "now" : "no longer"] see messages on the LOOC channel.")
|
||||
to_chat(usr, "<span class='infoplain'>You will [(usr.client.prefs.skyrat_toggles & CHAT_LOOC) ? "now" : "no longer"] see messages on the LOOC channel.</span>")
|
||||
SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Seeing LOOC", "[usr.client.prefs.skyrat_toggles & CHAT_LOOC ? "Enabled" : "Disabled"]"))
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
if(handle_spam_prevention(msg,MUTE_OOC))
|
||||
return
|
||||
if(findtext(msg, "byond://"))
|
||||
to_chat(src, "<B>Advertising other servers is not allowed.</B>")
|
||||
to_chat(src, "<span class='boldannounce'><B>Advertising other servers is not allowed.</B></span>")
|
||||
log_admin("[key_name(src)] has attempted to advertise in LOOC: [msg]")
|
||||
return
|
||||
if(mob.stat)
|
||||
@@ -65,5 +65,5 @@
|
||||
return
|
||||
prefs.skyrat_toggles ^= CHAT_LOOC_ADMIN
|
||||
prefs.save_preferences()
|
||||
to_chat(usr, "You will [(prefs.skyrat_toggles & CHAT_LOOC_ADMIN) ? "now" : "no longer"] hear LOOC globally.")
|
||||
to_chat(usr, "<span class='infoplain'>You will [(prefs.skyrat_toggles & CHAT_LOOC_ADMIN) ? "now" : "no longer"] hear LOOC globally.</span>")
|
||||
SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Togle Admin LOOC", "[usr.client.prefs.skyrat_toggles & CHAT_LOOC_ADMIN ? "Enabled" : "Disabled"]"))
|
||||
|
||||
@@ -3763,6 +3763,7 @@
|
||||
#include "modular_skyrat\modules\brigoff\code\modules\jobs\job_types\brigoff.dm"
|
||||
#include "modular_skyrat\modules\bsa_overhaul\code\bsa_cannon.dm"
|
||||
#include "modular_skyrat\modules\bsa_overhaul\code\bsa_computer.dm"
|
||||
#include "modular_skyrat\modules\bsrpd\code\bsrpd.dm"
|
||||
#include "modular_skyrat\modules\bulletrebalance\sniper.dm"
|
||||
#include "modular_skyrat\modules\cargo\code\bloat.dm"
|
||||
#include "modular_skyrat\modules\cargo\code\goodies.dm"
|
||||
@@ -4144,6 +4145,8 @@
|
||||
#include "modular_skyrat\modules\mentor\code\mentorpm.dm"
|
||||
#include "modular_skyrat\modules\mentor\code\mentorsay.dm"
|
||||
#include "modular_skyrat\modules\mentor\code\mentorwho.dm"
|
||||
#include "modular_skyrat\modules\Midroundtraitor\datum_traitor.dm"
|
||||
#include "modular_skyrat\modules\Midroundtraitor\event.dm"
|
||||
#include "modular_skyrat\modules\modular_items\code\datums\components\crafting\recipes\recipes_misc.dm"
|
||||
#include "modular_skyrat\modules\modular_items\code\datums\components\crafting\recipes\tailoring.dm"
|
||||
#include "modular_skyrat\modules\modular_items\code\game\modular_clothing.dm"
|
||||
|
||||
@@ -82,7 +82,7 @@ export const MESSAGE_TYPES = [
|
||||
type: MESSAGE_TYPE_OOC,
|
||||
name: 'OOC',
|
||||
description: 'The bluewall of global OOC messages',
|
||||
selector: '.ooc, .adminooc, .oocplain, .looc',
|
||||
selector: '.ooc, .adminooc, .oocplain, .looc, .rlooc',
|
||||
},
|
||||
{
|
||||
type: MESSAGE_TYPE_ADMINPM,
|
||||
|
||||