|
|
|
@@ -10,8 +10,8 @@
|
|
|
|
|
allowed_area = A.name
|
|
|
|
|
. = ..()
|
|
|
|
|
|
|
|
|
|
/mob/camera/aiEye/remote/xenobio/setLoc(var/t)
|
|
|
|
|
var/area/new_area = get_area(t)
|
|
|
|
|
/mob/camera/aiEye/remote/xenobio/setLoc(turf/destination)
|
|
|
|
|
var/area/new_area = get_area(destination)
|
|
|
|
|
if(new_area && new_area.name == allowed_area || new_area && new_area.xenobiology_compatible)
|
|
|
|
|
return ..()
|
|
|
|
|
else
|
|
|
|
@@ -62,6 +62,16 @@
|
|
|
|
|
S.forceMove(drop_location())
|
|
|
|
|
return ..()
|
|
|
|
|
|
|
|
|
|
/obj/machinery/computer/camera_advanced/xenobio/examine(mob/user)
|
|
|
|
|
. = ..()
|
|
|
|
|
if(monkeys)
|
|
|
|
|
. += span_notice("There [monkeys == 1 ? "is" : "are"] [monkeys] monkey\s stored.")
|
|
|
|
|
var/slime_amount = length(stored_slimes)
|
|
|
|
|
if(slime_amount)
|
|
|
|
|
. += span_notice("There [slime_amount == 1 ? "is" : "are"] [slime_amount] slime\s stored.")
|
|
|
|
|
if(current_potion)
|
|
|
|
|
. += span_notice("[current_potion] is currently loaded, press <b>Alt-click</b> to eject.")
|
|
|
|
|
|
|
|
|
|
/obj/machinery/computer/camera_advanced/xenobio/CreateEye()
|
|
|
|
|
eyeobj = new /mob/camera/aiEye/remote/xenobio(get_turf(src))
|
|
|
|
|
eyeobj.origin = src
|
|
|
|
@@ -114,17 +124,17 @@
|
|
|
|
|
actions += new feed_slime_action(src)
|
|
|
|
|
actions += new monkey_recycle_action(src)
|
|
|
|
|
if(successfulupgrade)
|
|
|
|
|
to_chat(user, "<span class='notice'>You have successfully upgraded [src] with [O].</span>")
|
|
|
|
|
to_chat(user, span_notice("You have successfully upgraded [src] with [O]."))
|
|
|
|
|
|
|
|
|
|
for(var/datum/action/actions_removed as anything in actions)
|
|
|
|
|
actions_removed.Remove(current_user)
|
|
|
|
|
GrantActions(current_user)
|
|
|
|
|
else
|
|
|
|
|
to_chat(user, "<span class='warning'>[src] already has the contents of [O] installed!</span>")
|
|
|
|
|
to_chat(user, span_warning("[src] already has the contents of [O] installed!"))
|
|
|
|
|
return
|
|
|
|
|
if(istype(O, /obj/item/reagent_containers/food/snacks/cube/monkey) && (upgradetier & XENOBIO_UPGRADE_MONKEYS)) //CIT CHANGE - makes monkey-related actions require XENOBIO_UPGRADE_MONKEYS
|
|
|
|
|
monkeys++
|
|
|
|
|
to_chat(user, "<span class='notice'>You feed [O] to [src]. It now has [monkeys] monkey cubes stored.</span>")
|
|
|
|
|
to_chat(user, span_notice("You feed [O] to [src]. It now has [monkeys] monkey cubes stored."))
|
|
|
|
|
qdel(O)
|
|
|
|
|
return
|
|
|
|
|
else if(istype(O, /obj/item/storage/bag) && (upgradetier & XENOBIO_UPGRADE_MONKEYS)) //CIT CHANGE - makes monkey-related actions require XENOBIO_UPGRADE_MONKEYS
|
|
|
|
@@ -136,7 +146,7 @@
|
|
|
|
|
monkeys++
|
|
|
|
|
qdel(G)
|
|
|
|
|
if(loaded)
|
|
|
|
|
to_chat(user, "<span class='notice'>You fill [src] with the monkey cubes stored in [O]. [src] now has [monkeys] monkey cubes stored.</span>")
|
|
|
|
|
to_chat(user, span_notice("You fill [src] with the monkey cubes stored in [O]. [src] now has [monkeys] monkey cubes stored."))
|
|
|
|
|
return
|
|
|
|
|
else if(istype(O, /obj/item/slimepotion/slime) && (upgradetier & XENOBIO_UPGRADE_SLIMEADV)) // CIT CHANGE - makes giving slimes potions via console require XENOBIO_UPGRADE_SLIMEADV
|
|
|
|
|
var/replaced = FALSE
|
|
|
|
@@ -146,7 +156,7 @@
|
|
|
|
|
current_potion.forceMove(drop_location())
|
|
|
|
|
replaced = TRUE
|
|
|
|
|
current_potion = O
|
|
|
|
|
to_chat(user, "<span class='notice'>You load [O] in the console's potion slot[replaced ? ", replacing the one that was there before" : ""].</span>")
|
|
|
|
|
to_chat(user, span_notice("You load [O] in the console's potion slot[replaced ? ", replacing the one that was there before" : ""]."))
|
|
|
|
|
return
|
|
|
|
|
..()
|
|
|
|
|
|
|
|
|
@@ -156,10 +166,9 @@
|
|
|
|
|
button_icon_state = "slime_down"
|
|
|
|
|
|
|
|
|
|
/datum/action/innate/slime_place/Activate()
|
|
|
|
|
if(!target || !isliving(owner))
|
|
|
|
|
if(QDELETED(owner) || !isliving(owner))
|
|
|
|
|
return
|
|
|
|
|
var/mob/living/C = owner
|
|
|
|
|
var/mob/camera/aiEye/remote/xenobio/remote_eye = C.remote_control
|
|
|
|
|
var/mob/camera/aiEye/remote/xenobio/remote_eye = owner.remote_control
|
|
|
|
|
var/obj/machinery/computer/camera_advanced/xenobio/X = target
|
|
|
|
|
|
|
|
|
|
if(GLOB.cameranet.checkTurfVis(remote_eye.loc))
|
|
|
|
@@ -168,7 +177,7 @@
|
|
|
|
|
S.visible_message("[S] warps in!")
|
|
|
|
|
X.stored_slimes -= S
|
|
|
|
|
else
|
|
|
|
|
to_chat(owner, "<span class='warning'>Target is not near a camera. Cannot proceed.</span>")
|
|
|
|
|
to_chat(owner, span_warning("Target is not near a camera. Cannot proceed."))
|
|
|
|
|
|
|
|
|
|
/datum/action/innate/slime_pick_up
|
|
|
|
|
name = "Pick up Slime"
|
|
|
|
@@ -176,10 +185,9 @@
|
|
|
|
|
button_icon_state = "slime_up"
|
|
|
|
|
|
|
|
|
|
/datum/action/innate/slime_pick_up/Activate()
|
|
|
|
|
if(!target || !isliving(owner))
|
|
|
|
|
if(QDELETED(owner) || !isliving(owner))
|
|
|
|
|
return
|
|
|
|
|
var/mob/living/C = owner
|
|
|
|
|
var/mob/camera/aiEye/remote/xenobio/remote_eye = C.remote_control
|
|
|
|
|
var/mob/camera/aiEye/remote/xenobio/remote_eye = owner.remote_control
|
|
|
|
|
var/obj/machinery/computer/camera_advanced/xenobio/X = target
|
|
|
|
|
|
|
|
|
|
if(GLOB.cameranet.checkTurfVis(remote_eye.loc))
|
|
|
|
@@ -193,7 +201,7 @@
|
|
|
|
|
S.forceMove(X)
|
|
|
|
|
X.stored_slimes += S
|
|
|
|
|
else
|
|
|
|
|
to_chat(owner, "<span class='warning'>Target is not near a camera. Cannot proceed.</span>")
|
|
|
|
|
to_chat(owner, span_warning("Target is not near a camera. Cannot proceed."))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/datum/action/innate/feed_slime
|
|
|
|
@@ -202,23 +210,22 @@
|
|
|
|
|
button_icon_state = "monkey_down"
|
|
|
|
|
|
|
|
|
|
/datum/action/innate/feed_slime/Activate()
|
|
|
|
|
if(!target || !isliving(owner))
|
|
|
|
|
if(QDELETED(owner) || !isliving(owner))
|
|
|
|
|
return
|
|
|
|
|
var/mob/living/C = owner
|
|
|
|
|
var/mob/camera/aiEye/remote/xenobio/remote_eye = C.remote_control
|
|
|
|
|
var/mob/camera/aiEye/remote/xenobio/remote_eye = owner.remote_control
|
|
|
|
|
var/obj/machinery/computer/camera_advanced/xenobio/X = target
|
|
|
|
|
|
|
|
|
|
if(GLOB.cameranet.checkTurfVis(remote_eye.loc))
|
|
|
|
|
if(X.monkeys >= 1)
|
|
|
|
|
var/mob/living/carbon/monkey/food = new /mob/living/carbon/monkey(remote_eye.loc, TRUE, owner)
|
|
|
|
|
if (!QDELETED(food))
|
|
|
|
|
food.LAssailant = WEAKREF(C)
|
|
|
|
|
X.monkeys --
|
|
|
|
|
to_chat(owner, "<span class='notice'>[X] now has [X.monkeys] monkey(s) left.</span>")
|
|
|
|
|
food.LAssailant = WEAKREF(owner)
|
|
|
|
|
X.monkeys--
|
|
|
|
|
to_chat(owner, span_notice("[X] now has [X.monkeys] monkey(s) left."))
|
|
|
|
|
else
|
|
|
|
|
to_chat(owner, "<span class='warning'>[X] needs to have at least 1 monkey stored. Currently has [X.monkeys] monkeys stored.</span>")
|
|
|
|
|
to_chat(owner, span_warning("[X] needs to have at least 1 monkey stored. Currently has [X.monkeys] monkeys stored."))
|
|
|
|
|
else
|
|
|
|
|
to_chat(owner, "<span class='warning'>Target is not near a camera. Cannot proceed.</span>")
|
|
|
|
|
to_chat(owner, span_warning("Target is not near a camera. Cannot proceed."))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/datum/action/innate/monkey_recycle
|
|
|
|
@@ -227,10 +234,9 @@
|
|
|
|
|
button_icon_state = "monkey_up"
|
|
|
|
|
|
|
|
|
|
/datum/action/innate/monkey_recycle/Activate()
|
|
|
|
|
if(!target || !isliving(owner))
|
|
|
|
|
if(QDELETED(owner) || !isliving(owner))
|
|
|
|
|
return
|
|
|
|
|
var/mob/living/C = owner
|
|
|
|
|
var/mob/camera/aiEye/remote/xenobio/remote_eye = C.remote_control
|
|
|
|
|
var/mob/camera/aiEye/remote/xenobio/remote_eye = owner.remote_control
|
|
|
|
|
var/obj/machinery/computer/camera_advanced/xenobio/X = target
|
|
|
|
|
|
|
|
|
|
if(GLOB.cameranet.checkTurfVis(remote_eye.loc))
|
|
|
|
@@ -240,7 +246,7 @@
|
|
|
|
|
X.monkeys = round(X.monkeys + 0.2,0.1)
|
|
|
|
|
qdel(M)
|
|
|
|
|
else
|
|
|
|
|
to_chat(owner, "<span class='warning'>Target is not near a camera. Cannot proceed.</span>")
|
|
|
|
|
to_chat(owner, span_warning("Target is not near a camera. Cannot proceed."))
|
|
|
|
|
|
|
|
|
|
/datum/action/innate/slime_scan
|
|
|
|
|
name = "Scan Slime"
|
|
|
|
@@ -248,16 +254,15 @@
|
|
|
|
|
button_icon_state = "slime_scan"
|
|
|
|
|
|
|
|
|
|
/datum/action/innate/slime_scan/Activate()
|
|
|
|
|
if(!target || !isliving(owner))
|
|
|
|
|
if(QDELETED(owner) || !isliving(owner))
|
|
|
|
|
return
|
|
|
|
|
var/mob/living/C = owner
|
|
|
|
|
var/mob/camera/aiEye/remote/xenobio/remote_eye = C.remote_control
|
|
|
|
|
var/mob/camera/aiEye/remote/xenobio/remote_eye = owner.remote_control
|
|
|
|
|
|
|
|
|
|
if(GLOB.cameranet.checkTurfVis(remote_eye.loc))
|
|
|
|
|
for(var/mob/living/simple_animal/slime/S in remote_eye.loc)
|
|
|
|
|
slime_scan(S, C)
|
|
|
|
|
slime_scan(S, owner)
|
|
|
|
|
else
|
|
|
|
|
to_chat(owner, "<span class='warning'>Target is not near a camera. Cannot proceed.</span>")
|
|
|
|
|
to_chat(owner, span_warning("Target is not near a camera. Cannot proceed."))
|
|
|
|
|
|
|
|
|
|
/datum/action/innate/feed_potion
|
|
|
|
|
name = "Apply Potion"
|
|
|
|
@@ -265,23 +270,22 @@
|
|
|
|
|
button_icon_state = "slime_potion"
|
|
|
|
|
|
|
|
|
|
/datum/action/innate/feed_potion/Activate()
|
|
|
|
|
if(!target || !isliving(owner))
|
|
|
|
|
if(QDELETED(owner) || !isliving(owner))
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
var/mob/living/C = owner
|
|
|
|
|
var/mob/camera/aiEye/remote/xenobio/remote_eye = C.remote_control
|
|
|
|
|
var/mob/camera/aiEye/remote/xenobio/remote_eye = owner.remote_control
|
|
|
|
|
var/obj/machinery/computer/camera_advanced/xenobio/X = target
|
|
|
|
|
|
|
|
|
|
if(QDELETED(X.current_potion))
|
|
|
|
|
to_chat(owner, "<span class='notice'>No potion loaded.</span>")
|
|
|
|
|
to_chat(owner, span_notice("No potion loaded."))
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
if(GLOB.cameranet.checkTurfVis(remote_eye.loc))
|
|
|
|
|
for(var/mob/living/simple_animal/slime/S in remote_eye.loc)
|
|
|
|
|
X.current_potion.attack(S, C)
|
|
|
|
|
X.current_potion.attack(S, owner)
|
|
|
|
|
break
|
|
|
|
|
else
|
|
|
|
|
to_chat(owner, "<span class='warning'>Target is not near a camera. Cannot proceed.</span>")
|
|
|
|
|
to_chat(owner, span_warning("Target is not near a camera. Cannot proceed."))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Demodularized Code
|
|
|
|
@@ -323,11 +327,14 @@
|
|
|
|
|
/datum/action/innate/hotkey_help/Activate()
|
|
|
|
|
if(!target || !isliving(owner))
|
|
|
|
|
return
|
|
|
|
|
to_chat(owner, "<b>Click shortcuts:</b>")
|
|
|
|
|
to_chat(owner, "Shift-click a slime to pick it up, or the floor to drop all held slimes. (Requires Basic Slime Console upgrade)")
|
|
|
|
|
to_chat(owner, "Ctrl-click a slime to scan it.")
|
|
|
|
|
to_chat(owner, "Alt-click a slime to feed it a potion. (Requires Advanced Slime Console upgrade)")
|
|
|
|
|
to_chat(owner, "Ctrl-click on a dead monkey to recycle it, or the floor to place a new monkey. (Requires Monkey Console upgrade)")
|
|
|
|
|
var/static/list/help = list(
|
|
|
|
|
"<b>Click shortcuts:</b>",
|
|
|
|
|
"Shift-click a slime to pick it up, or the floor to drop all held slimes. (Requires Basic Slime Console upgrade)",
|
|
|
|
|
"Ctrl-click a slime to scan it.",
|
|
|
|
|
"Alt-click a slime to feed it a potion. (Requires Advanced Slime Console upgrade)",
|
|
|
|
|
"Ctrl-click on a dead monkey to recycle it, or the floor to place a new monkey. (Requires Monkey Console upgrade)",
|
|
|
|
|
)
|
|
|
|
|
to_chat(owner, "<blockquote class='info'>[help.Join("\n")]</blockquote>")
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
// Alternate clicks for slime, monkey and open turf if using a xenobio console
|
|
|
|
@@ -365,67 +372,67 @@
|
|
|
|
|
// Scans slime
|
|
|
|
|
/obj/machinery/computer/camera_advanced/xenobio/proc/XenoSlimeClickCtrl(mob/living/user, mob/living/simple_animal/slime/S)
|
|
|
|
|
if(!GLOB.cameranet.checkTurfVis(S.loc))
|
|
|
|
|
to_chat(user, "<span class='warning'>Target is not near a camera. Cannot proceed.</span>")
|
|
|
|
|
to_chat(user, span_warning("Target is not near a camera. Cannot proceed."))
|
|
|
|
|
return
|
|
|
|
|
var/mob/living/C = user
|
|
|
|
|
var/mob/camera/aiEye/remote/xenobio/E = C.remote_control
|
|
|
|
|
var/mob/camera/aiEye/remote/xenobio/E = user.remote_control
|
|
|
|
|
var/area/mobarea = get_area(S.loc)
|
|
|
|
|
if(mobarea.name == E.allowed_area || mobarea.xenobiology_compatible)
|
|
|
|
|
slime_scan(S, C)
|
|
|
|
|
slime_scan(S, user)
|
|
|
|
|
|
|
|
|
|
//Feeds a potion to slime
|
|
|
|
|
/obj/machinery/computer/camera_advanced/xenobio/proc/XenoSlimeClickAlt(mob/living/user, mob/living/simple_animal/slime/S)
|
|
|
|
|
if(!(upgradetier & XENOBIO_UPGRADE_SLIMEADV)) //CIT CHANGE - makes slime-related actions require XENOBIO_UPGRADE_SLIMEADV
|
|
|
|
|
to_chat(user, "<span class='warning'>This console does not have the advanced slime upgrade.</span>")
|
|
|
|
|
to_chat(user, span_warning("This console does not have the advanced slime upgrade."))
|
|
|
|
|
return
|
|
|
|
|
if(!GLOB.cameranet.checkTurfVis(S.loc))
|
|
|
|
|
to_chat(user, "<span class='warning'>Target is not near a camera. Cannot proceed.</span>")
|
|
|
|
|
to_chat(user, span_warning("Target is not near a camera. Cannot proceed."))
|
|
|
|
|
return
|
|
|
|
|
var/mob/living/C = user
|
|
|
|
|
var/mob/camera/aiEye/remote/xenobio/E = C.remote_control
|
|
|
|
|
var/turf/slime_location = S.loc
|
|
|
|
|
var/mob/camera/aiEye/remote/xenobio/E = user.remote_control
|
|
|
|
|
var/obj/machinery/computer/camera_advanced/xenobio/X = E.origin
|
|
|
|
|
var/area/mobarea = get_area(S.loc)
|
|
|
|
|
var/area/mobarea = get_area(slime_location)
|
|
|
|
|
if(QDELETED(X.current_potion))
|
|
|
|
|
to_chat(C, "<span class='warning'>No potion loaded.</span>")
|
|
|
|
|
to_chat(user, span_warning("No potion loaded."))
|
|
|
|
|
return
|
|
|
|
|
if(mobarea.name == E.allowed_area || mobarea.xenobiology_compatible)
|
|
|
|
|
X.current_potion.attack(S, C)
|
|
|
|
|
slime_location.balloon_alert(user, "applying [current_potion]")
|
|
|
|
|
X.current_potion.attack(S, user)
|
|
|
|
|
|
|
|
|
|
//Picks up slime
|
|
|
|
|
/obj/machinery/computer/camera_advanced/xenobio/proc/XenoSlimeClickShift(mob/living/user, mob/living/simple_animal/slime/S)
|
|
|
|
|
if(!(upgradetier & XENOBIO_UPGRADE_SLIMEBASIC)) //CIT CHANGE - makes slime-related actions require XENOBIO_UPGRADE_SLIMEBASIC
|
|
|
|
|
to_chat(user, "<span class='warning'>This console does not have the basic slime upgrade.</span>")
|
|
|
|
|
to_chat(user, span_warning("This console does not have the basic slime upgrade."))
|
|
|
|
|
return
|
|
|
|
|
if(!GLOB.cameranet.checkTurfVis(S.loc))
|
|
|
|
|
to_chat(user, "<span class='warning'>Target is not near a camera. Cannot proceed.</span>")
|
|
|
|
|
to_chat(user, span_warning("Target is not near a camera. Cannot proceed."))
|
|
|
|
|
return
|
|
|
|
|
var/mob/living/C = user
|
|
|
|
|
var/mob/camera/aiEye/remote/xenobio/E = C.remote_control
|
|
|
|
|
var/turf/slime_location = S.loc
|
|
|
|
|
var/mob/camera/aiEye/remote/xenobio/E = user.remote_control
|
|
|
|
|
var/obj/machinery/computer/camera_advanced/xenobio/X = E.origin
|
|
|
|
|
var/area/mobarea = get_area(S.loc)
|
|
|
|
|
var/area/mobarea = get_area(slime_location)
|
|
|
|
|
if(mobarea.name == E.allowed_area || mobarea.xenobiology_compatible)
|
|
|
|
|
if(X.stored_slimes.len >= X.max_slimes)
|
|
|
|
|
to_chat(C, "<span class='warning'>Slime storage is full.</span>")
|
|
|
|
|
to_chat(user, span_warning("Slime storage is full."))
|
|
|
|
|
return
|
|
|
|
|
if(S.ckey)
|
|
|
|
|
to_chat(C, "<span class='warning'>The slime wiggled free!</span>")
|
|
|
|
|
to_chat(user, span_warning("The slime wiggled free!"))
|
|
|
|
|
return
|
|
|
|
|
if(S.buckled)
|
|
|
|
|
S.Feedstop(silent = TRUE)
|
|
|
|
|
S.visible_message("[S] vanishes in a flash of light!")
|
|
|
|
|
S.forceMove(X)
|
|
|
|
|
X.stored_slimes += S
|
|
|
|
|
slime_location.balloon_alert(user, "[length(X.stored_slimes)]/[max_slimes] in storage")
|
|
|
|
|
|
|
|
|
|
//Place slimes
|
|
|
|
|
/obj/machinery/computer/camera_advanced/xenobio/proc/XenoTurfClickShift(mob/living/user, turf/open/T)
|
|
|
|
|
if(!(upgradetier & XENOBIO_UPGRADE_SLIMEBASIC)) //CIT CHANGE - makes slime-related actions require XENOBIO_UPGRADE_SLIMEBASIC
|
|
|
|
|
to_chat(user, "<span class='warning'>This console does not have the basic slime upgrade.</span>")
|
|
|
|
|
to_chat(user, span_warning("This console does not have the basic slime upgrade."))
|
|
|
|
|
return
|
|
|
|
|
if(!GLOB.cameranet.checkTurfVis(T))
|
|
|
|
|
to_chat(user, "<span class='warning'>Target is not near a camera. Cannot proceed.</span>")
|
|
|
|
|
to_chat(user, span_warning("Target is not near a camera. Cannot proceed."))
|
|
|
|
|
return
|
|
|
|
|
var/mob/living/C = user
|
|
|
|
|
var/mob/camera/aiEye/remote/xenobio/E = C.remote_control
|
|
|
|
|
var/mob/camera/aiEye/remote/xenobio/E = user.remote_control
|
|
|
|
|
var/obj/machinery/computer/camera_advanced/xenobio/X = E.origin
|
|
|
|
|
var/area/turfarea = get_area(T)
|
|
|
|
|
if(turfarea.name == E.allowed_area || turfarea.xenobiology_compatible)
|
|
|
|
@@ -437,38 +444,39 @@
|
|
|
|
|
//Place monkey
|
|
|
|
|
/obj/machinery/computer/camera_advanced/xenobio/proc/XenoTurfClickCtrl(mob/living/user, turf/open/T)
|
|
|
|
|
if(!(upgradetier & XENOBIO_UPGRADE_MONKEYS)) // CIT CHANGE - makes monkey-related actions require XENOBIO_UPGRADE_MONKEYS
|
|
|
|
|
to_chat(user, "<span class='warning'>This console does not have the monkey upgrade.</span>")
|
|
|
|
|
to_chat(user, span_warning("This console does not have the monkey upgrade."))
|
|
|
|
|
return
|
|
|
|
|
if(!GLOB.cameranet.checkTurfVis(T))
|
|
|
|
|
to_chat(user, "<span class='warning'>Target is not near a camera. Cannot proceed.</span>")
|
|
|
|
|
to_chat(user, span_warning("Target is not near a camera. Cannot proceed."))
|
|
|
|
|
return
|
|
|
|
|
var/mob/living/C = user
|
|
|
|
|
var/mob/camera/aiEye/remote/xenobio/E = C.remote_control
|
|
|
|
|
var/mob/camera/aiEye/remote/xenobio/E = user.remote_control
|
|
|
|
|
var/obj/machinery/computer/camera_advanced/xenobio/X = E.origin
|
|
|
|
|
var/area/turfarea = get_area(T)
|
|
|
|
|
if(turfarea.name == E.allowed_area || turfarea.xenobiology_compatible)
|
|
|
|
|
if(X.monkeys >= 1)
|
|
|
|
|
var/mob/living/carbon/monkey/food = new /mob/living/carbon/monkey(T, TRUE, C)
|
|
|
|
|
var/mob/living/carbon/monkey/food = new /mob/living/carbon/monkey(T, TRUE, user)
|
|
|
|
|
if (!QDELETED(food))
|
|
|
|
|
food.LAssailant = WEAKREF(C)
|
|
|
|
|
food.LAssailant = WEAKREF(user)
|
|
|
|
|
X.monkeys--
|
|
|
|
|
X.monkeys = round(X.monkeys, 0.1) //Prevents rounding errors
|
|
|
|
|
to_chat(C, "<span class='notice'>[X] now has [X.monkeys] monkey(s) stored.</span>")
|
|
|
|
|
to_chat(user, span_notice("[X] now has [X.monkeys] monkey(s) stored."))
|
|
|
|
|
T.balloon_alert(user, "[X.monkeys] left")
|
|
|
|
|
else
|
|
|
|
|
to_chat(C, "<span class='warning'>[X] needs to have at least 1 monkey stored. Currently has [X.monkeys] monkeys stored.</span>")
|
|
|
|
|
to_chat(user, span_warning("[X] needs to have at least 1 monkey stored. Currently has [X.monkeys] monkeys stored."))
|
|
|
|
|
T.balloon_alert(user, "no monkeys available")
|
|
|
|
|
|
|
|
|
|
//Pick up monkey
|
|
|
|
|
/obj/machinery/computer/camera_advanced/xenobio/proc/XenoMonkeyClickCtrl(mob/living/user, mob/living/carbon/monkey/M)
|
|
|
|
|
if(!(upgradetier & XENOBIO_UPGRADE_MONKEYS)) // CIT CHANGE - makes monkey-related actions require XENOBIO_UPGRADE_MONKEYS
|
|
|
|
|
to_chat(user, "<span class='warning'>This console does not have the monkey upgrade.</span>")
|
|
|
|
|
to_chat(user, span_warning("This console does not have the monkey upgrade."))
|
|
|
|
|
return
|
|
|
|
|
if(!isturf(M.loc) || !GLOB.cameranet.checkTurfVis(M.loc))
|
|
|
|
|
to_chat(user, "<span class='warning'>Target is not near a camera. Cannot proceed.</span>")
|
|
|
|
|
to_chat(user, span_warning("Target is not near a camera. Cannot proceed."))
|
|
|
|
|
return
|
|
|
|
|
var/mob/living/C = user
|
|
|
|
|
var/mob/camera/aiEye/remote/xenobio/E = C.remote_control
|
|
|
|
|
var/turf/monkey_location = M.loc
|
|
|
|
|
var/mob/camera/aiEye/remote/xenobio/E = user.remote_control
|
|
|
|
|
var/obj/machinery/computer/camera_advanced/xenobio/X = E.origin
|
|
|
|
|
var/area/mobarea = get_area(M.loc)
|
|
|
|
|
var/area/mobarea = get_area(monkey_location)
|
|
|
|
|
if(mobarea.name == E.allowed_area || mobarea.xenobiology_compatible)
|
|
|
|
|
if(!M.stat)
|
|
|
|
|
return
|
|
|
|
@@ -476,4 +484,13 @@
|
|
|
|
|
X.monkeys = round(X.monkeys + 0.2,0.1)
|
|
|
|
|
qdel(M)
|
|
|
|
|
if (X.monkeys == (round(X.monkeys,1)))
|
|
|
|
|
to_chat(C, "<span class='notice'>[X] now has [X.monkeys] monkey(s) available.</span>")
|
|
|
|
|
to_chat(user, span_notice("[X] now has [X.monkeys] monkey(s) available."))
|
|
|
|
|
monkey_location.balloon_alert(user, "[X.monkeys] available")
|
|
|
|
|
|
|
|
|
|
/obj/machinery/computer/camera_advanced/xenobio/AltClick(mob/user)
|
|
|
|
|
. = ..()
|
|
|
|
|
if(!QDELETED(current_potion) && user.canUseTopic(src, BE_CLOSE, no_tk = NO_TK))
|
|
|
|
|
to_chat(user, span_notice("You eject [current_potion] from [src]."))
|
|
|
|
|
if(!user.put_in_hands(current_potion))
|
|
|
|
|
current_potion.forceMove(drop_location())
|
|
|
|
|
current_potion = null
|