mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-26 22:50:26 +01:00
Merge branch 'master' of https://github.com/tgstation/-tg-station into goofmos
Conflicts: tgui/assets/tgui.js
This commit is contained in:
@@ -147,11 +147,27 @@
|
||||
name = "NULL_ENTRY"
|
||||
hidden = TRUE
|
||||
cost = 14000
|
||||
contains = list(/obj/item/weapon/storage/box/syndicate)
|
||||
contains = list()
|
||||
crate_name = "emergency crate"
|
||||
crate_type = /obj/structure/closet/crate/internals
|
||||
dangerous = TRUE
|
||||
|
||||
/datum/supply_pack/emergency/syndicate/fill(obj/structure/closet/crate/C)
|
||||
var/static/list/uplink_items = get_uplink_items()
|
||||
|
||||
var/crate_value = 50
|
||||
while(crate_value)
|
||||
var/category = pick(uplink_items)
|
||||
var/item = pick(uplink_items[category])
|
||||
var/datum/uplink_item/I = uplink_items[category][item]
|
||||
|
||||
if(!I.surplus || prob(100 - I.surplus))
|
||||
continue
|
||||
if(crate_value < I.cost)
|
||||
continue
|
||||
crate_value -= I.cost
|
||||
new I.item(C)
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////// Security ////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -110,7 +110,6 @@
|
||||
return 1
|
||||
|
||||
/datum/personal_crafting/proc/construct_item(mob/user, datum/crafting_recipe/R)
|
||||
for(var/A in R.parts)
|
||||
var/list/contents = get_surroundings(user)
|
||||
var/send_feedback = 1
|
||||
if(check_contents(R, contents))
|
||||
|
||||
@@ -375,8 +375,10 @@
|
||||
active = 1
|
||||
var/turf/bombturf = get_turf(src)
|
||||
var/area/bombarea = get_area(bombturf)
|
||||
message_admins("[key_name(user)]<A HREF='?_src_=holder;adminmoreinfo=\ref[user]'>?</A> has primed a [name] for detonation at <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[bombturf.x];Y=[bombturf.y];Z=[bombturf.z]'>[bombarea] (JMP)</a>.")
|
||||
log_game("[key_name(user)] has primed a [name] for detonation at [bombarea] ([bombturf.x],[bombturf.y],[bombturf.z]).")
|
||||
var/message = "[ADMIN_LOOKUP(user)] has primed a [name] for detonation at [ADMIN_COORDJMP(bombturf)]."
|
||||
bombers += message
|
||||
message_admins(message)
|
||||
log_game("[key_name(user)] has primed a [name] for detonation at [bombarea] [COORD(bombturf)].")
|
||||
|
||||
user << "<span class='info'>You light \the [src] on fire.</span>"
|
||||
add_overlay(fire_overlay)
|
||||
|
||||
@@ -154,17 +154,18 @@
|
||||
return 1
|
||||
|
||||
//Called when you finish tablecrafting a snack.
|
||||
/obj/item/weapon/reagent_containers/food/snacks/CheckParts(list/parts_list, datum/crafting_recipe/R)
|
||||
/obj/item/weapon/reagent_containers/food/snacks/CheckParts(list/parts_list, datum/crafting_recipe/food/R)
|
||||
..()
|
||||
reagents.reagent_list.Cut()
|
||||
for(var/obj/item/weapon/reagent_containers/RC in contents)
|
||||
RC.reagents.trans_to(reagents, RC.reagents.maximum_volume)
|
||||
contents_loop:
|
||||
for(var/A in contents)
|
||||
for(var/B in initial(R.parts))
|
||||
if(istype(A, B))
|
||||
continue contents_loop
|
||||
qdel(A)
|
||||
if(istype(R))
|
||||
contents_loop:
|
||||
for(var/A in contents)
|
||||
for(var/B in R.real_parts)
|
||||
if(istype(A, B))
|
||||
continue contents_loop
|
||||
qdel(A)
|
||||
feedback_add_details("food_made","[type]")
|
||||
if(bonus_reagents.len)
|
||||
for(var/r_id in bonus_reagents)
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
|
||||
/obj/item/pizzabox/Destroy()
|
||||
unprocess()
|
||||
return ..()
|
||||
|
||||
/obj/item/pizzabox/update_icon()
|
||||
// Description
|
||||
@@ -106,7 +107,9 @@
|
||||
bomb_timer = Clamp(Ceiling(bomb_timer / 2), BOMB_TIMER_MIN, BOMB_TIMER_MAX)
|
||||
bomb_defused = FALSE
|
||||
|
||||
message_admins("[key_name_admin(user)]<A HREF='?_src_=holder;adminmoreinfo=\ref[user]'>?</A> (<A HREF='?_src_=holder;adminplayerobservefollow=\ref[user]'>FLW</A>) has trapped a [src] with [bomb] set to [bomb_timer * 2] seconds.")
|
||||
var/message = "[ADMIN_LOOKUPFLW(user)] has trapped a [src] with [bomb] set to [bomb_timer * 2] seconds."
|
||||
bombers += message
|
||||
message_admins(message)
|
||||
log_game("[key_name(user)] has trapped a [src] with [bomb] set to [bomb_timer * 2] seconds.")
|
||||
bomb.adminlog = "The [bomb.name] in [src.name] that [key_name(user)] activated has detonated!"
|
||||
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
/datum/crafting_recipe/food
|
||||
var/real_parts
|
||||
|
||||
/datum/crafting_recipe/food/New()
|
||||
real_parts = parts.Copy()
|
||||
parts |= reqs
|
||||
|
||||
//////////////////////////////////////////FOOD MIXTURES////////////////////////////////////
|
||||
|
||||
@@ -104,8 +104,10 @@
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/firelemon/attack_self(mob/living/user)
|
||||
var/area/A = get_area(user)
|
||||
user.visible_message("<span class='warning'>[user] primes the [src]!</span>", "<span class='userdanger'>You prime the [src]!</span>")
|
||||
message_admins("[user] ([user.key ? user.key : "no key"]) primed a combustible lemon for detonation at [A] ([user.x], [user.y], [user.z]) <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>(JMP)</a>")
|
||||
log_game("[user] ([user.key ? user.key : "no key"]) primed a combustible lemon for detonation at [A] ([user.x],[user.y],[user.z]).")
|
||||
var/message = "[ADMIN_LOOKUPFLW(user)] primed a combustible lemon for detonation at [A] [ADMIN_COORDJMP(user)]"
|
||||
bombers += message
|
||||
message_admins(message)
|
||||
log_game("[key_name(user)] primed a combustible lemon for detonation at [A] [COORD(user)].")
|
||||
if(iscarbon(user))
|
||||
var/mob/living/carbon/C = user
|
||||
C.throw_mode_on()
|
||||
|
||||
@@ -683,6 +683,14 @@
|
||||
return
|
||||
if(alert(user, "This will make [src] self-sustaining but consume [O] forever. Are you sure?", "[name]", "I'm Sure", "Abort") == "Abort" || !user)
|
||||
return
|
||||
if(!Adjacent(user))
|
||||
return
|
||||
if(self_sustaining)
|
||||
user << "<span class='warning'>This [name] is already self-sustaining!</span>"
|
||||
return
|
||||
if(myseed || weedlevel)
|
||||
user << "<span class='warning'>[src] needs to be clear of plants and weeds!</span>"
|
||||
return
|
||||
user.visible_message("<span class='notice'>[user] gently pulls open the soil for [O] and places it inside.</span>", "<span class='notice'>You tenderly root [O] into [src].</span>")
|
||||
user.drop_item()
|
||||
qdel(O)
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
name = "necropolis chest"
|
||||
desc = "It's watching you closely."
|
||||
icon_state = "necrocrate"
|
||||
burn_state = LAVA_PROOF
|
||||
|
||||
/obj/structure/closet/crate/necropolis/tendril
|
||||
desc = "It's watching you suspiciously."
|
||||
|
||||
@@ -236,7 +236,7 @@
|
||||
else
|
||||
src << "<span class='notice'>Unusable emote '[act]'. Say *help for a list.</span>"
|
||||
|
||||
if (message && src.stat == CONSCIOUS)
|
||||
if (message && stat == CONSCIOUS)
|
||||
log_emote("[name]/[key] : [message]")
|
||||
if (m_type & 1)
|
||||
visible_message(message)
|
||||
@@ -248,9 +248,10 @@
|
||||
set category = "Robot Commands"
|
||||
set name = "Power Warning"
|
||||
|
||||
if(!cell || !cell.charge)
|
||||
visible_message("The power warning light on <span class='name'>[src]</span> flashes urgently.",\
|
||||
"You announce you are operating in low power mode.")
|
||||
playsound(loc, 'sound/machines/buzz-two.ogg', 50, 0)
|
||||
else
|
||||
src << "<span class='warning'>You can only use this emote when you're out of charge.</span>"
|
||||
if(stat == CONSCIOUS)
|
||||
if(!cell || !cell.charge)
|
||||
visible_message("The power warning light on <span class='name'>[src]</span> flashes urgently.",\
|
||||
"You announce you are operating in low power mode.")
|
||||
playsound(loc, 'sound/machines/buzz-two.ogg', 50, 0)
|
||||
else
|
||||
src << "<span class='warning'>You can only use this emote when you're out of charge.</span>"
|
||||
@@ -15,7 +15,8 @@ var/list/blacklisted_tesla_types = typecacheof(list(/obj/machinery/atmospherics,
|
||||
/obj/machinery/field/containment,
|
||||
/obj/structure/disposalpipe,
|
||||
/obj/structure/sign,
|
||||
/obj/machinery/gateway))
|
||||
/obj/machinery/gateway,
|
||||
/obj/structure/lattice))
|
||||
|
||||
/obj/singularity/energy_ball
|
||||
name = "energy ball"
|
||||
|
||||
@@ -12,22 +12,22 @@
|
||||
/obj/structure/reagent_dispensers/ex_act(severity, target)
|
||||
switch(severity)
|
||||
if(1)
|
||||
qdel(src)
|
||||
boom()
|
||||
return
|
||||
if(2)
|
||||
if (prob(50))
|
||||
qdel(src)
|
||||
boom()
|
||||
return
|
||||
if(3)
|
||||
if (prob(5))
|
||||
qdel(src)
|
||||
boom()
|
||||
return
|
||||
else
|
||||
return
|
||||
|
||||
/obj/structure/reagent_dispensers/blob_act(obj/effect/blob/B)
|
||||
if(prob(50))
|
||||
qdel(src)
|
||||
boom()
|
||||
|
||||
/obj/structure/reagent_dispensers/attackby(obj/item/weapon/W, mob/user, params)
|
||||
if(istype(W, /obj/item/weapon/reagent_containers))
|
||||
@@ -48,42 +48,39 @@
|
||||
user << "<span class='danger'>It's empty.</span>"
|
||||
|
||||
|
||||
/obj/structure/reagent_dispensers/proc/boom()
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/reagent_dispensers/watertank
|
||||
name = "water tank"
|
||||
desc = "A water tank."
|
||||
icon_state = "water"
|
||||
|
||||
/obj/structure/reagent_dispensers/watertank/ex_act(severity, target)
|
||||
switch(severity)
|
||||
if(1)
|
||||
qdel(src)
|
||||
return
|
||||
if(2)
|
||||
if (prob(50))
|
||||
PoolOrNew(/obj/effect/particle_effect/water, src.loc)
|
||||
qdel(src)
|
||||
return
|
||||
if(3)
|
||||
if (prob(5))
|
||||
PoolOrNew(/obj/effect/particle_effect/water, src.loc)
|
||||
qdel(src)
|
||||
return
|
||||
else
|
||||
return
|
||||
/obj/structure/reagent_dispensers/waterank/bullet_act(obj/item/projectile/Proj)
|
||||
..()
|
||||
if(tank_volume && istype(Proj) && !Proj.nodamage && ((Proj.damage_type == BURN) || (Proj.damage_type == BRUTE)))
|
||||
boom()
|
||||
|
||||
/obj/structure/reagent_dispensers/watertank/boom()
|
||||
playsound(src.loc, 'sound/effects/spray2.ogg', 50, 1, -6)
|
||||
PoolOrNew(/obj/effect/particle_effect/water, loc)
|
||||
for(var/turf/open/T in view(5,loc))
|
||||
T.MakeSlippery(min_wet_time = 20, wet_time_to_add = 15)
|
||||
for(var/mob/living/L in T)
|
||||
L.adjust_fire_stacks(-20)
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/reagent_dispensers/watertank/blob_act(obj/effect/blob/B)
|
||||
if(prob(50))
|
||||
PoolOrNew(/obj/effect/particle_effect/water, loc)
|
||||
qdel(src)
|
||||
|
||||
|
||||
/obj/structure/reagent_dispensers/watertank/high
|
||||
name = "high-capacity water tank"
|
||||
desc = "A highly-pressurized water tank made to hold gargantuan amounts of water.."
|
||||
icon_state = "water_high" //I was gonna clean my room...
|
||||
tank_volume = 100000
|
||||
|
||||
|
||||
/obj/structure/reagent_dispensers/fueltank
|
||||
name = "fuel tank"
|
||||
desc = "A tank full of industrial welding fuel. Do not consume."
|
||||
@@ -93,11 +90,13 @@
|
||||
/obj/structure/reagent_dispensers/fueltank/bullet_act(obj/item/projectile/Proj)
|
||||
..()
|
||||
if(istype(Proj) && !Proj.nodamage && ((Proj.damage_type == BURN) || (Proj.damage_type == BRUTE)))
|
||||
message_admins("[key_name_admin(Proj.firer)] triggered a fueltank explosion via projectile.")
|
||||
var/boom_message = "[key_name_admin(Proj.firer)] triggered a fueltank explosion via projectile."
|
||||
bombers += boom_message
|
||||
message_admins(boom_message)
|
||||
log_game("[key_name(Proj.firer)] triggered a fueltank explosion via projectile.")
|
||||
boom()
|
||||
|
||||
/obj/structure/reagent_dispensers/fueltank/proc/boom()
|
||||
/obj/structure/reagent_dispensers/fueltank/boom()
|
||||
explosion(get_turf(src), 0, 1, 5, flame_range = 5)
|
||||
qdel(src)
|
||||
|
||||
@@ -130,7 +129,9 @@
|
||||
update_icon()
|
||||
else
|
||||
user.visible_message("<span class='warning'>[user] catastrophically fails at refilling \his [W.name]!</span>", "<span class='userdanger'>That was stupid of you.</span>")
|
||||
message_admins("[key_name_admin(user)] triggered a fueltank explosion via welding tool.")
|
||||
var/message = "[key_name_admin(user)] triggered a fueltank explosion via welding tool."
|
||||
bombers += message
|
||||
message_admins(message)
|
||||
log_game("[key_name(user)] triggered a fueltank explosion via welding tool.")
|
||||
boom()
|
||||
return
|
||||
@@ -189,4 +190,4 @@
|
||||
desc = "A dispenser of low-potency virus mutagenic."
|
||||
icon_state = "virus_food"
|
||||
anchored = 1
|
||||
reagent_id = "virusfood"
|
||||
reagent_id = "virusfood"
|
||||
@@ -139,8 +139,11 @@
|
||||
speculation += rand(-400, 0) / 1000 * speculation
|
||||
if (prob(1) && prob(5)) // pop that bubble
|
||||
speculation += rand(-4000, 0) / 1000 * speculation
|
||||
|
||||
current_value += (speculation / rand(25000, 50000) + performance / rand(100, 800)) * current_value
|
||||
var/fucking_stock_spikes = current_value + 500
|
||||
var/piece_of_shit_fuck = current_value - 500
|
||||
var/i_hate_this_code = (speculation / rand(25000, 50000) + performance / rand(100, 800)) * current_value
|
||||
if(i_hate_this_code < fucking_stock_spikes || i_hate_this_code > piece_of_shit_fuck)
|
||||
current_value += i_hate_this_code
|
||||
if (current_value < 5)
|
||||
current_value = 5
|
||||
|
||||
@@ -306,4 +309,4 @@
|
||||
return 0
|
||||
|
||||
/datum/stock/proc/displayValues(var/mob/user)
|
||||
user << browse(plotBarGraph(values, "[name] share value per share"), "window=stock_[name];size=450x450")
|
||||
user << browse(plotBarGraph(values, "[name] share value per share"), "window=stock_[name];size=450x450")
|
||||
|
||||
Reference in New Issue
Block a user