mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-24 04:27:35 +01:00
Merge branch 'master' of https://github.com/ParadiseSS13/Paradise into HereWeGoAgain
This commit is contained in:
@@ -10,6 +10,7 @@
|
||||
var/spamcheck = 0
|
||||
var/emagged = 0
|
||||
var/insults = 0
|
||||
var/span = ""
|
||||
var/list/insultmsg = list("FUCK EVERYONE!", "I'M A TATER!", "ALL SECURITY TO SHOOT ME ON SIGHT!", "I HAVE A BOMB!", "CAPTAIN IS A COMDOM!", "FOR THE SYNDICATE!")
|
||||
|
||||
/obj/item/megaphone/attack_self(mob/living/user as mob)
|
||||
@@ -32,6 +33,10 @@
|
||||
if(H && H.mind && H.mind.miming)
|
||||
to_chat(user, "<span class='warning'>Your vow of silence prevents you from speaking.</span>")
|
||||
return
|
||||
if(H.mind)
|
||||
span = H.mind.speech_span
|
||||
if((COMIC in H.mutations) || H.get_int_organ(/obj/item/organ/internal/cyberimp/brain/clown_voice))
|
||||
span = "sans"
|
||||
if(spamcheck)
|
||||
to_chat(user, "<span class='warning'>\The [src] needs to recharge!</span>")
|
||||
return
|
||||
@@ -51,6 +56,8 @@
|
||||
else
|
||||
to_chat(user, "<span class='warning'>*BZZZZzzzzzt*</span>")
|
||||
else
|
||||
if(span)
|
||||
message = "<span class='[span]'>[message]</span>"
|
||||
saymsg(user, message)
|
||||
|
||||
spamcheck = 1
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
origin_tech = "bluespace=1"
|
||||
var/emagged = 0
|
||||
var/syndicate = 0
|
||||
var/area_bypass = FALSE
|
||||
|
||||
/obj/item/radio/beacon/New()
|
||||
..()
|
||||
|
||||
@@ -12,7 +12,7 @@ var/list/world_uplinks = list()
|
||||
var/welcome // Welcoming menu message
|
||||
var/uses // Numbers of crystals
|
||||
var/hidden_crystals = 0
|
||||
var/list/ItemsCategory // List of categories with lists of items
|
||||
var/list/uplink_items // List of categories with lists of items
|
||||
var/list/ItemsReference // List of references with an associated item
|
||||
var/list/nanoui_items // List of items for NanoUI use
|
||||
var/nanoui_menu = 0 // The current menu we are in
|
||||
@@ -32,7 +32,7 @@ var/list/world_uplinks = list()
|
||||
..()
|
||||
welcome = ticker.mode.uplink_welcome
|
||||
uses = ticker.mode.uplink_uses
|
||||
ItemsCategory = get_uplink_items()
|
||||
uplink_items = get_uplink_items()
|
||||
|
||||
world_uplinks += src
|
||||
|
||||
@@ -57,14 +57,14 @@ var/list/world_uplinks = list()
|
||||
dat += "<I>Each item costs a number of telecrystals as indicated by the number following its name.</I><br>"
|
||||
|
||||
var/category_items = 1
|
||||
for(var/category in ItemsCategory)
|
||||
for(var/category in uplink_items)
|
||||
if(category_items < 1)
|
||||
dat += "<i>We apologize, as you could not afford anything from this category.</i><br>"
|
||||
dat += "<br>"
|
||||
dat += "<b>[category]</b><br>"
|
||||
category_items = 0
|
||||
|
||||
for(var/datum/uplink_item/I in ItemsCategory[category])
|
||||
for(var/datum/uplink_item/I in uplink_items[category])
|
||||
if(I.cost > uses)
|
||||
continue
|
||||
if(I.job && I.job.len)
|
||||
@@ -87,9 +87,9 @@ var/list/world_uplinks = list()
|
||||
var/list/nano = new
|
||||
var/list/reference = new
|
||||
|
||||
for(var/category in ItemsCategory)
|
||||
for(var/category in uplink_items)
|
||||
nano[++nano.len] = list("Category" = category, "items" = list())
|
||||
for(var/datum/uplink_item/I in ItemsCategory[category])
|
||||
for(var/datum/uplink_item/I in uplink_items[category])
|
||||
if(I.job && I.job.len)
|
||||
if(!(I.job.Find(job)))
|
||||
continue
|
||||
@@ -117,6 +117,9 @@ var/list/world_uplinks = list()
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if(href_list["refund"])
|
||||
refund(usr)
|
||||
|
||||
if(href_list["buy_item"] == "random")
|
||||
var/datum/uplink_item/UI = chooseRandomItem()
|
||||
href_list["buy_item"] = UI.reference
|
||||
@@ -142,6 +145,22 @@ var/list/world_uplinks = list()
|
||||
|
||||
return 1
|
||||
|
||||
/obj/item/uplink/proc/refund(mob/user as mob)
|
||||
var/obj/item/I = user.get_active_hand()
|
||||
if(I) // Make sure there's actually something in the hand before even bothering to check
|
||||
for(var/category in uplink_items)
|
||||
for(var/item in uplink_items[category])
|
||||
var/datum/uplink_item/UI = item
|
||||
var/path = UI.refund_path || UI.item
|
||||
var/cost = UI.refund_amount || UI.cost
|
||||
if(I.type == path && UI.refundable && I.check_uplink_validity())
|
||||
uses += cost
|
||||
used_TC -= cost
|
||||
to_chat(user, "<span class='notice'>[I] refunded.</span>")
|
||||
qdel(I)
|
||||
return
|
||||
..()
|
||||
|
||||
// HIDDEN UPLINK - Can be stored in anything but the host item has to have a trigger for it.
|
||||
/* How to create an uplink in 3 easy steps!
|
||||
|
||||
@@ -287,17 +306,6 @@ var/list/world_uplinks = list()
|
||||
return 1
|
||||
return 0
|
||||
|
||||
//Refund proc for the borg teleporter (later I'll make a general refund proc if there is demand for it)
|
||||
/obj/item/radio/uplink/attackby(obj/item/W as obj, mob/user as mob, params)
|
||||
if(istype(W, /obj/item/antag_spawner/borg_tele))
|
||||
var/obj/item/antag_spawner/borg_tele/S = W
|
||||
if(!S.used && !S.checking)
|
||||
hidden_uplink.uses += S.TC_cost
|
||||
qdel(S)
|
||||
to_chat(user, "<span class='notice'>Teleporter refunded.</span>")
|
||||
else
|
||||
to_chat(user, "<span class='notice'>This teleporter is already used, or is currently being used.</span>")
|
||||
|
||||
// PRESET UPLINKS
|
||||
// A collection of preset uplinks.
|
||||
//
|
||||
|
||||
@@ -205,6 +205,7 @@
|
||||
icon = 'icons/obj/hydroponics/harvest.dmi'
|
||||
icon_state = "tea_aspera_leaves"
|
||||
color = "#378C61"
|
||||
stop_bleeding = 0
|
||||
heal_brute = 12
|
||||
|
||||
|
||||
|
||||
@@ -68,12 +68,12 @@ var/global/list/datum/stack_recipe/gold_recipes = list ( \
|
||||
)
|
||||
|
||||
var/global/list/datum/stack_recipe/plasma_recipes = list ( \
|
||||
new/datum/stack_recipe("plasma door", /obj/structure/mineral_door/transparent/plasma, 10, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe/dangerous("plasma door", /obj/structure/mineral_door/transparent/plasma, 10, one_per_turf = 1, on_floor = 1), \
|
||||
null, \
|
||||
new/datum/stack_recipe("plasma tile", /obj/item/stack/tile/mineral/plasma, 1, 4, 20), \
|
||||
new/datum/stack_recipe/dangerous("plasma tile", /obj/item/stack/tile/mineral/plasma, 1, 4, 20), \
|
||||
null, \
|
||||
new/datum/stack_recipe("Scientist Statue", /obj/structure/statue/plasma/scientist, 5, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("Xenomorph Statue", /obj/structure/statue/plasma/xeno, 5, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe/dangerous("Scientist Statue", /obj/structure/statue/plasma/scientist, 5, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe/dangerous("Xenomorph Statue", /obj/structure/statue/plasma/xeno, 5, one_per_turf = 1, on_floor = 1), \
|
||||
)
|
||||
|
||||
var/global/list/datum/stack_recipe/bananium_recipes = list ( \
|
||||
|
||||
@@ -35,6 +35,14 @@
|
||||
result.color = S.color
|
||||
..()
|
||||
|
||||
|
||||
/datum/stack_recipe/dangerous
|
||||
/datum/stack_recipe/dangerous/post_build(/obj/item/stack/S, /obj/result)
|
||||
var/turf/targ = get_turf(usr)
|
||||
message_admins("[title] made by [key_name_admin(usr)](<A HREF='?_src_=holder;adminmoreinfo=\ref[usr]'>?</A>) in [get_area(usr)] [ADMIN_COORDJMP(targ)]!",0,1)
|
||||
log_game("[title] made by [key_name_admin(usr)] at [get_area(usr)] [targ.x], [targ.y], [targ.z].")
|
||||
..()
|
||||
|
||||
/datum/stack_recipe/rods
|
||||
/datum/stack_recipe/rods/post_build(var/obj/item/stack/S, var/obj/result)
|
||||
if(istype(result, /obj/item/stack/rods))
|
||||
|
||||
@@ -39,6 +39,9 @@
|
||||
atmos_spawn_air(SPAWN_HEAT | SPAWN_TOXINS, 5)
|
||||
user.visible_message("<span class='warning'>[user.name] sets the plasma tiles on fire!</span>", \
|
||||
"<span class='warning'>You set the plasma tiles on fire!</span>")
|
||||
message_admins("Plasma tiles ignited by [key_name_admin(user)](<A HREF='?_src_=holder;adminmoreinfo=\ref[user]'>?</A>) (<A HREF='?_src_=holder;adminplayerobservefollow=\ref[user]'>FLW</A>) in ([x],[y],[z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)",0,1)
|
||||
log_game("Plasma tiles ignited by [key_name(user)] in ([x],[y],[z])")
|
||||
investigate_log("was <font color='red'><b>ignited</b></font> by [key_name(user)]","atmos")
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
|
||||
@@ -293,6 +293,10 @@
|
||||
update_icon()
|
||||
return unwield(user)
|
||||
|
||||
/obj/item/twohanded/shockpaddles/on_mob_move(dir, mob/user)
|
||||
if(defib && !(defib.Adjacent(user)))
|
||||
defib.remove_paddles(user)
|
||||
|
||||
/obj/item/twohanded/shockpaddles/proc/check_defib_exists(mainunit, var/mob/living/carbon/human/M, var/obj/O)
|
||||
if(!mainunit || !istype(mainunit, /obj/item/defibrillator)) //To avoid weird issues from admin spawns
|
||||
M.unEquip(O)
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
if(imp)
|
||||
icon_state = "implantcase-[imp.item_color]"
|
||||
origin_tech = imp.origin_tech
|
||||
flags = imp.flags
|
||||
flags = imp.flags & ~DROPDEL
|
||||
reagents = imp.reagents
|
||||
else
|
||||
icon_state = "implantcase-0"
|
||||
|
||||
@@ -160,7 +160,7 @@
|
||||
if(..() || !iscarbon(hit_atom))//if it gets caught or the target can't be cuffed,
|
||||
return//abort
|
||||
var/mob/living/carbon/C = hit_atom
|
||||
if(!C.legcuffed)
|
||||
if(!C.legcuffed && C.get_num_legs() >= 2)
|
||||
visible_message("<span class='danger'>[src] ensnares [C]!</span>")
|
||||
C.legcuffed = src
|
||||
forceMove(C)
|
||||
|
||||
@@ -192,7 +192,27 @@ var/list/pipemenu = list(
|
||||
return
|
||||
if(world.time < lastused + spawndelay)
|
||||
return
|
||||
target.rpd_act(user, src) //Handle RPD effects in separate procs
|
||||
|
||||
|
||||
var/turf/T = get_turf(target)
|
||||
if(target != T)
|
||||
// We only check the rpd_act of the target if it isn't the turf, because otherwise
|
||||
// (A) blocked turfs can be acted on, and (B) unblocked turfs get acted on twice.
|
||||
if(target.rpd_act(user, src) == TRUE)
|
||||
// If the object we are clicking on has a valid RPD interaction for just that specific object, do that and nothing else.
|
||||
// Example: clicking on a pipe with a RPD in rotate mode should rotate that pipe and ignore everything else on the tile.
|
||||
return
|
||||
|
||||
// If we get this far, we have to check every object in the tile, to make sure that none of them block RPD usage on this tile.
|
||||
// This is done by calling rpd_blocksusage on every /obj in the tile. If any block usage, fail at this point.
|
||||
|
||||
for(var/obj/O in T)
|
||||
if(O.rpd_blocksusage() == TRUE)
|
||||
to_chat(user, "<span class='warning'>[O] blocks the [src]!</span>")
|
||||
return
|
||||
|
||||
// If we get here, then we're effectively acting on the turf, probably placing a pipe.
|
||||
T.rpd_act(user, src)
|
||||
|
||||
#undef RPD_COOLDOWN_TIME
|
||||
#undef RPD_WALLBUILD_TIME
|
||||
|
||||
@@ -127,12 +127,48 @@
|
||||
/obj/item/flashlight/pen,
|
||||
/obj/item/clothing/mask/surgical,
|
||||
/obj/item/clothing/gloves/color/latex,
|
||||
/obj/item/reagent_containers/hypospray/autoinjector,
|
||||
/obj/item/rad_laser,
|
||||
/obj/item/reagent_containers/hypospray/autoinjector,
|
||||
/obj/item/reagent_containers/hypospray/CMO,
|
||||
/obj/item/reagent_containers/hypospray/safety,
|
||||
/obj/item/rad_laser,
|
||||
/obj/item/sensor_device,
|
||||
/obj/item/wrench/medical,
|
||||
)
|
||||
|
||||
/obj/item/storage/belt/medical/surgery
|
||||
max_w_class = WEIGHT_CLASS_NORMAL
|
||||
max_combined_w_class = 17
|
||||
use_to_pickup = 1
|
||||
name = "Surgical Belt"
|
||||
desc = "Can hold various surgical tools."
|
||||
storage_slots = 9
|
||||
use_item_overlays = 1
|
||||
can_hold = list(
|
||||
/obj/item/scalpel,
|
||||
/obj/item/hemostat,
|
||||
/obj/item/retractor,
|
||||
/obj/item/circular_saw,
|
||||
/obj/item/bonegel,
|
||||
/obj/item/bonesetter,
|
||||
/obj/item/FixOVein,
|
||||
/obj/item/surgicaldrill,
|
||||
/obj/item/cautery,
|
||||
)
|
||||
|
||||
/obj/item/storage/belt/medical/surgery/loaded
|
||||
|
||||
/obj/item/storage/belt/medical/surgery/loaded/New()
|
||||
..()
|
||||
new /obj/item/scalpel(src)
|
||||
new /obj/item/hemostat(src)
|
||||
new /obj/item/retractor(src)
|
||||
new /obj/item/circular_saw(src)
|
||||
new /obj/item/bonegel(src)
|
||||
new /obj/item/bonesetter(src)
|
||||
new /obj/item/FixOVein(src)
|
||||
new /obj/item/surgicaldrill(src)
|
||||
new /obj/item/cautery(src)
|
||||
|
||||
/obj/item/storage/belt/medical/response_team
|
||||
|
||||
/obj/item/storage/belt/medical/response_team/New()
|
||||
@@ -203,7 +239,7 @@
|
||||
|
||||
/obj/item/storage/belt/security/response_team/New()
|
||||
..()
|
||||
new /obj/item/kitchen/knife/combat(src)
|
||||
new /obj/item/reagent_containers/spray/pepper(src)
|
||||
new /obj/item/melee/baton/loaded(src)
|
||||
new /obj/item/flash(src)
|
||||
new /obj/item/melee/classic_baton/telescopic(src)
|
||||
|
||||
@@ -231,6 +231,15 @@
|
||||
..()
|
||||
base_name = name
|
||||
|
||||
/obj/item/storage/pill_bottle/ert/New()
|
||||
..()
|
||||
new /obj/item/reagent_containers/food/pill/salicylic(src)
|
||||
new /obj/item/reagent_containers/food/pill/salicylic(src)
|
||||
new /obj/item/reagent_containers/food/pill/salicylic(src)
|
||||
new /obj/item/reagent_containers/food/pill/charcoal(src)
|
||||
new /obj/item/reagent_containers/food/pill/charcoal(src)
|
||||
new /obj/item/reagent_containers/food/pill/charcoal(src)
|
||||
|
||||
/obj/item/storage/pill_bottle/MouseDrop(obj/over_object as obj) //Quick pillbottle fix. -Agouri
|
||||
if(ishuman(usr)) //Can monkeys even place items in the pocket slots? Leaving this in just in case~
|
||||
var/mob/M = usr
|
||||
|
||||
@@ -352,6 +352,10 @@
|
||||
W.fire_act()
|
||||
return 1
|
||||
|
||||
/obj/item/storage/Exited(atom/A, loc)
|
||||
remove_from_storage(A, loc) //worry not, comrade; this only gets called once
|
||||
..()
|
||||
|
||||
/obj/item/storage/empty_object_contents(burn, loc)
|
||||
for(var/obj/item/Item in contents)
|
||||
remove_from_storage(Item, loc, burn)
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
#define HEALPERWELD 15
|
||||
|
||||
/* Tools!
|
||||
* Note: Multitools are in devices
|
||||
*
|
||||
@@ -408,25 +410,47 @@
|
||||
to_chat(user, "<span class='warning'>Turn on [src] before attempting repairs!</span>")
|
||||
return 1
|
||||
|
||||
if(S.brute_dam)
|
||||
if(S.brute_dam < ROBOLIMB_SELF_REPAIR_CAP)
|
||||
if(get_fuel() >= 1)
|
||||
if(H == user)
|
||||
if(!do_mob(user, H, 10))
|
||||
return 1
|
||||
if(remove_fuel(1,null))
|
||||
playsound(src.loc, usesound, 50, 1)
|
||||
S.heal_damage(15,0,0,1)
|
||||
user.visible_message("<span class='alert'>\The [user] patches some dents on \the [M]'s [S.name] with \the [src].</span>")
|
||||
if(S.brute_dam > ROBOLIMB_SELF_REPAIR_CAP)
|
||||
to_chat(user, "<span class='danger'>The damage is far too severe to patch over externally.</span>")
|
||||
return
|
||||
|
||||
else if(S.open != 2)
|
||||
to_chat(user, "<span class='warning'>Need more welding fuel!</span>")
|
||||
return 1
|
||||
else
|
||||
to_chat(user, "<span class='danger'>The damage is far too severe to patch over externally.</span>")
|
||||
return 1
|
||||
else if(S.open != 2)
|
||||
if(!S.brute_dam)
|
||||
to_chat(user, "<span class='notice'>Nothing to fix!</span>")
|
||||
return
|
||||
|
||||
if(get_fuel() >= 1)
|
||||
if(H == user)
|
||||
if(!do_mob(user, H, 10))
|
||||
return 1
|
||||
if(!remove_fuel(1,null))
|
||||
to_chat(user, "<span class='warning'>Need more welding fuel!</span>")
|
||||
var/rembrute = HEALPERWELD
|
||||
var/nrembrute = 0
|
||||
var/childlist
|
||||
if(!isnull(S.children))
|
||||
childlist = S.children.Copy()
|
||||
var/parenthealed = FALSE
|
||||
while(rembrute > 0)
|
||||
var/obj/item/organ/external/E
|
||||
if(S.brute_dam)
|
||||
E = S
|
||||
else if(LAZYLEN(childlist))
|
||||
E = pick_n_take(childlist)
|
||||
if(!E.brute_dam || !E.is_robotic())
|
||||
continue
|
||||
else if(S.parent && !parenthealed)
|
||||
E = S.parent
|
||||
parenthealed = TRUE
|
||||
if(!E.brute_dam || !E.is_robotic())
|
||||
break
|
||||
else
|
||||
break
|
||||
playsound(src.loc, usesound, 50, 1)
|
||||
nrembrute = max(rembrute - E.brute_dam, 0)
|
||||
E.heal_damage(rembrute,0,0,1)
|
||||
rembrute = nrembrute
|
||||
user.visible_message("<span class='alert'>\The [user] patches some dents on \the [M]'s [E.name] with \the [src].</span>")
|
||||
return 1
|
||||
else
|
||||
return ..()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user