Merge pull request #11 from Citadel-Station-13/master

Updating
This commit is contained in:
Neri
2017-10-08 15:17:40 -07:00
committed by GitHub
219 changed files with 2688 additions and 2688 deletions
-1
View File
@@ -93,7 +93,6 @@
#define BANTYPE_ADMIN_TEMP 8 #define BANTYPE_ADMIN_TEMP 8
#define BANTYPE_ANY_JOB 9 //used to remove jobbans #define BANTYPE_ANY_JOB 9 //used to remove jobbans
//Please don't edit these values without speaking to Errorage first ~Carn
//Admin Permissions //Admin Permissions
#define R_BUILDMODE 1 #define R_BUILDMODE 1
#define R_ADMIN 2 #define R_ADMIN 2
+10 -2
View File
@@ -118,8 +118,8 @@
#define PRESSURE_DAMAGE_COEFFICIENT 4 //The amount of pressure damage someone takes is equal to (pressure / HAZARD_HIGH_PRESSURE)*PRESSURE_DAMAGE_COEFFICIENT, with the maximum of MAX_PRESSURE_DAMAGE #define PRESSURE_DAMAGE_COEFFICIENT 4 //The amount of pressure damage someone takes is equal to (pressure / HAZARD_HIGH_PRESSURE)*PRESSURE_DAMAGE_COEFFICIENT, with the maximum of MAX_PRESSURE_DAMAGE
#define MAX_HIGH_PRESSURE_DAMAGE 4 //This used to be 20... I got this much random rage for some retarded decision by polymorph?! Polymorph now lies in a pool of blood with a katana jammed in his spleen. ~Errorage --PS: The katana did less than 20 damage to him :( #define MAX_HIGH_PRESSURE_DAMAGE 4
#define LOW_PRESSURE_DAMAGE 2 //The amounb of damage someone takes when in a low pressure area (The pressure threshold is so low that it doesn't make sense to do any calculations, so it just applies this flat value). #define LOW_PRESSURE_DAMAGE 2 //The amount of damage someone takes when in a low pressure area (The pressure threshold is so low that it doesn't make sense to do any calculations, so it just applies this flat value).
#define COLD_SLOWDOWN_FACTOR 20 //Humans are slowed by the difference between bodytemp and BODYTEMP_COLD_DAMAGE_LIMIT divided by this #define COLD_SLOWDOWN_FACTOR 20 //Humans are slowed by the difference between bodytemp and BODYTEMP_COLD_DAMAGE_LIMIT divided by this
@@ -176,3 +176,11 @@
#define LAVALAND_DEFAULT_ATMOS "o2=14;n2=23;TEMP=300" #define LAVALAND_DEFAULT_ATMOS "o2=14;n2=23;TEMP=300"
#define THERMAL_ENERGY(gas) (gas.temperature * gas.heat_capacity()) #define THERMAL_ENERGY(gas) (gas.temperature * gas.heat_capacity())
#define ADD_GAS(gas_id, out_list)\
var/list/tmp_gaslist = GLOB.gaslist_cache[gas_id];\
out_list[gas_id] = tmp_gaslist.Copy();
//ASSERT_GAS(gas_id, gas_mixture) - used to guarantee that the gas list for this id exists in gas_mixture.gases.
//Must be used before adding to a gas. May be used before reading from a gas.
#define ASSERT_GAS(gas_id, gas_mixture) if (!gas_mixture.gases[gas_id]) { ADD_GAS(gas_id, gas_mixture.gases) };
+1
View File
@@ -2,6 +2,7 @@
#define CONFIG_DEF(X) /datum/config_entry/##X { resident_file = CURRENT_RESIDENT_FILE }; /datum/config_entry/##X #define CONFIG_DEF(X) /datum/config_entry/##X { resident_file = CURRENT_RESIDENT_FILE }; /datum/config_entry/##X
#define CONFIG_GET(X) global.config.Get(/datum/config_entry/##X) #define CONFIG_GET(X) global.config.Get(/datum/config_entry/##X)
#define CONFIG_SET(X, Y) global.config.Set(/datum/config_entry/##X, ##Y) #define CONFIG_SET(X, Y) global.config.Set(/datum/config_entry/##X, ##Y)
#define CONFIG_TWEAK(X) /datum/config_entry/##X
#define CONFIG_MAPS_FILE "maps.txt" #define CONFIG_MAPS_FILE "maps.txt"
+2
View File
@@ -133,6 +133,8 @@
#define isovermind(A) (istype(A, /mob/camera/blob)) #define isovermind(A) (istype(A, /mob/camera/blob))
#define iscameramob(A) (istype(A, /mob/camera))
//Objects //Objects
#define isobj(A) istype(A, /obj) //override the byond proc because it returns true on children of /atom/movable that aren't objs #define isobj(A) istype(A, /obj) //override the byond proc because it returns true on children of /atom/movable that aren't objs
+3 -1
View File
@@ -24,6 +24,7 @@
#define ROLE_SERVANT_OF_RATVAR "servant of Ratvar" #define ROLE_SERVANT_OF_RATVAR "servant of Ratvar"
#define ROLE_BORER "borer" #define ROLE_BORER "borer"
#define ROLE_BROTHER "blood brother" #define ROLE_BROTHER "blood brother"
#define ROLE_MISCREANT "miscreant"
//Missing assignment means it's not a gamemode specific role, IT'S NOT A BUG OR ERROR. //Missing assignment means it's not a gamemode specific role, IT'S NOT A BUG OR ERROR.
//The gamemode specific ones are just so the gamemodes can query whether a player is old enough //The gamemode specific ones are just so the gamemodes can query whether a player is old enough
@@ -46,7 +47,8 @@ GLOBAL_LIST_INIT(special_roles, list(
ROLE_ABDUCTOR = /datum/game_mode/abduction, ROLE_ABDUCTOR = /datum/game_mode/abduction,
ROLE_DEVIL = /datum/game_mode/devil, ROLE_DEVIL = /datum/game_mode/devil,
ROLE_BORER, ROLE_BORER,
ROLE_SERVANT_OF_RATVAR = /datum/game_mode/clockwork_cult ROLE_SERVANT_OF_RATVAR = /datum/game_mode/clockwork_cult,
ROLE_MISCREANT
)) ))
//Job defines for what happens when you fail to qualify for any job during job selection //Job defines for what happens when you fail to qualify for any job during job selection
+1 -1
View File
@@ -289,7 +289,7 @@ Turf and target are separate in case you want to teleport some distance from a t
var/list/pois = list() var/list/pois = list()
for(var/mob/M in mobs) for(var/mob/M in mobs)
if(skip_mindless && (!M.mind && !M.ckey)) if(skip_mindless && (!M.mind && !M.ckey))
if(!isbot(M) && !istype(M, /mob/camera) && !ismegafauna(M)) if(!isbot(M) && !iscameramob(M) && !ismegafauna(M))
continue continue
if(M.client && M.client.holder && M.client.holder.fakekey) //stealthmins if(M.client && M.client.holder && M.client.holder.fakekey) //stealthmins
continue continue
-7
View File
@@ -7,13 +7,6 @@ GLOBAL_LIST_INIT(cardinals, list(NORTH, SOUTH, EAST, WEST))
GLOBAL_LIST_INIT(alldirs, list(NORTH, SOUTH, EAST, WEST, NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST)) GLOBAL_LIST_INIT(alldirs, list(NORTH, SOUTH, EAST, WEST, NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST))
GLOBAL_LIST_INIT(diagonals, list(NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST)) GLOBAL_LIST_INIT(diagonals, list(NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST))
//This list contains the z-level numbers which can be accessed via space travel and the percentile chances to get there.
//(Exceptions: extended, sandbox and nuke) -Errorage
//Was list("3" = 30, "4" = 70).
//Spacing should be a reliable method of getting rid of a body -- Urist.
//Go away Urist, I'm restoring this to the longer list. ~Errorage
GLOBAL_LIST_INIT(accessable_z_levels, list(1,3,4,5,6,7)) //Keep this to six maps, repeating z-levels is ok if needed
GLOBAL_LIST_INIT(station_z_levels, list(ZLEVEL_STATION_PRIMARY)) GLOBAL_LIST_INIT(station_z_levels, list(ZLEVEL_STATION_PRIMARY))
GLOBAL_LIST(global_map) GLOBAL_LIST(global_map)
+2 -1
View File
@@ -196,7 +196,8 @@
plane = HUD_PLANE plane = HUD_PLANE
/obj/screen/drop/Click() /obj/screen/drop/Click()
usr.drop_item_v() if(usr.stat == CONSCIOUS)
usr.dropItemToGround(usr.get_active_held_item())
/obj/screen/act_intent /obj/screen/act_intent
name = "intent" name = "intent"
+3 -2
View File
@@ -1,6 +1,6 @@
/datum/controller/subsystem/ticker/proc/generate_crew_objectives() /datum/controller/subsystem/ticker/proc/generate_crew_objectives()
for(var/datum/mind/crewMind in SSticker.minds) for(var/datum/mind/crewMind in SSticker.minds)
if(prob(2) && !issilicon(crewMind.current) && !jobban_isbanned(crewMind, "Syndicate") && GLOB.miscreants_allowed) if(prob(2) && !issilicon(crewMind.current) && !jobban_isbanned(crewMind, "Syndicate") && GLOB.miscreants_allowed && ROLE_MISCREANT in crewMind.current.client.prefs.be_special)
generate_miscreant_objectives(crewMind) generate_miscreant_objectives(crewMind)
else else
if(CONFIG_GET(flag/allow_crew_objectives)) if(CONFIG_GET(flag/allow_crew_objectives))
@@ -25,7 +25,8 @@
return return
newObjective.owner = crewMind newObjective.owner = crewMind
crewMind.objectives += newObjective crewMind.objectives += newObjective
to_chat(crewMind, "<B>Your objective:</B> [newObjective.explanation_text]") to_chat(crewMind, "<B>As a part of Nanotrasen's anti-tide efforts, you have been assigned an optional objective. It will be checked at the end of the shift. <font color=red>Performing traitorous acts in pursuit of your objective may result in termination of your employment.</font></B>")
to_chat(crewMind, "<B>Your optional objective:</B> [newObjective.explanation_text]")
/datum/controller/subsystem/ticker/proc/get_valid_crew_objs(var/job = "")//taken from old hippie with adjustments /datum/controller/subsystem/ticker/proc/get_valid_crew_objs(var/job = "")//taken from old hippie with adjustments
var/list/objpaths = typesof(/datum/objective/crew) var/list/objpaths = typesof(/datum/objective/crew)
+6 -1
View File
@@ -7,6 +7,8 @@
return return
if(!crewMind.assigned_role) if(!crewMind.assigned_role)
return return
if(ROLE_MISCREANT in crewMind.current.client.prefs.be_special)
return
if(jobban_isbanned(crewMind, "Syndicate")) if(jobban_isbanned(crewMind, "Syndicate"))
return return
var/list/objectiveTypes = typesof(/datum/objective/miscreant) - /datum/objective/miscreant var/list/objectiveTypes = typesof(/datum/objective/miscreant) - /datum/objective/miscreant
@@ -58,4 +60,7 @@
explanation_text = "Act as out of character as you possibly can." explanation_text = "Act as out of character as you possibly can."
/datum/objective/miscreant/racism /datum/objective/miscreant/racism
explanation_text = "Attempt to establish superiority of your race." explanation_text = "Attempt to establish superiority of your species."
/datum/objective/miscreant/cargonia
explanation_text = "Attempt to establish independence of your department."
@@ -185,29 +185,6 @@
else else
return FALSE return FALSE
/datum/objective/crew/departmentclothes
var/obj/item/clothing/under/rank/targetuniform
explanation_text = "Be wearing a (Yo, this objective broke. report this to citadels discord via the development channel) at the end of the shift."
jobs = "assistant"
/datum/objective/crew/departmentclothes/New()
. = ..()
var/list/blacklist = list(/obj/item/clothing/under/rank, /obj/item/clothing/under/rank/miner, /obj/item/clothing/under/rank/medical/blue, /obj/item/clothing/under/rank/medical/green, /obj/item/clothing/under/rank/medical/purple, /obj/item/clothing/under/rank/security/grey, /obj/item/clothing/under/rank/warden/grey, /obj/item/clothing/under/rank/head_of_security/grey, /obj/item/clothing/under/rank/mailman, /obj/item/clothing/under/rank/psyche, /obj/item/clothing/under/rank/clown/sexy, /obj/item/clothing/under/rank/centcom_officer, /obj/item/clothing/under/rank/centcom_commander, /obj/item/clothing/under/rank/security/navyblue/russian, /obj/item/clothing/under/rank/security/blueshirt)
var/list/validclothes = typesof(/obj/item/clothing/under/rank) - blacklist
targetuniform = pick(validclothes)
update_explanation_text()
/datum/objective/crew/departmentclothes/update_explanation_text()
. = ..()
explanation_text = "Be wearing a [initial(targetuniform.name)] at the end of the shift."
/datum/objective/crew/departmentclothes/check_completion()
if(owner && owner.current)
var/mob/living/carbon/human/H = owner.current
if(istype(H.w_uniform, targetuniform))
return TRUE
return FALSE
/datum/objective/crew/pwrgame //ported from Goon with adjustments /datum/objective/crew/pwrgame //ported from Goon with adjustments
var/obj/item/clothing/targettidegarb var/obj/item/clothing/targettidegarb
explanation_text = "Get your grubby hands on a (Dear god something broke. Report this to Citadel's development dicussion channel)." explanation_text = "Get your grubby hands on a (Dear god something broke. Report this to Citadel's development dicussion channel)."
@@ -215,7 +192,9 @@
/datum/objective/crew/pwrgame/New() /datum/objective/crew/pwrgame/New()
. = ..() . = ..()
var/list/muhvalids = list(/obj/item/clothing/mask/gas, /obj/item/clothing/head/welding, /obj/item/clothing/head/ushanka, /obj/item/clothing/gloves/color/yellow, /obj/item/clothing/mask/gas/owl_mask, /obj/item/clothing/suit/space) var/list/muhvalids = list(/obj/item/clothing/mask/gas, /obj/item/clothing/head/welding, /obj/item/clothing/head/ushanka, /obj/item/clothing/gloves/color/yellow, /obj/item/clothing/mask/gas/owl_mask)
if(prob(10))
muhvalids += list(/obj/item/clothing/suit/space)
targettidegarb = pick(muhvalids) targettidegarb = pick(muhvalids)
update_explanation_text() update_explanation_text()
@@ -74,7 +74,7 @@
return FALSE return FALSE
/datum/objective/crew/noinfections /datum/objective/crew/noinfections
explanation_text = "Ensure no living crew members are infected with harmful viruses at the end of the shift" explanation_text = "Make sure there are no crew members with harmful diseases at the end of the shift."
jobs = "virologist" jobs = "virologist"
/datum/objective/crew/noinfections/check_completion() /datum/objective/crew/noinfections/check_completion()
@@ -56,7 +56,6 @@ CONFIG_DEF(flag/log_twitter) // log certain expliotable parrots and other such f
CONFIG_DEF(flag/log_world_topic) // log all world.Topic() calls CONFIG_DEF(flag/log_world_topic) // log all world.Topic() calls
CONFIG_DEF(flag/allow_admin_ooccolor) // Allows admins with relevant permissions to have their own ooc colour CONFIG_DEF(flag/allow_admin_ooccolor) // Allows admins with relevant permissions to have their own ooc colour
protection = CONFIG_ENTRY_LOCKED
CONFIG_DEF(flag/allow_vote_restart) // allow votes to restart CONFIG_DEF(flag/allow_vote_restart) // allow votes to restart
@@ -352,3 +351,25 @@ CONFIG_DEF(number/error_msg_delay) // How long to wait between messaging admins
CONFIG_DEF(flag/irc_announce_new_game) CONFIG_DEF(flag/irc_announce_new_game)
CONFIG_DEF(flag/debug_admin_hrefs) CONFIG_DEF(flag/debug_admin_hrefs)
CONFIG_DEF(number/mc_tick_rate/base_mc_tick_rate)
integer = FALSE
value = 1
CONFIG_DEF(number/mc_tick_rate/high_pop_mc_tick_rate)
integer = FALSE
value = 1.1
CONFIG_DEF(number/mc_tick_rate/high_pop_mc_mode_amount)
value = 65
CONFIG_DEF(number/mc_tick_rate/disable_high_pop_mc_mode_amount)
value = 60
CONFIG_TWEAK(number/mc_tick_rate)
abstract_type = /datum/config_entry/number/mc_tick_rate
CONFIG_TWEAK(number/mc_tick_rate/ValidateAndSet(str_val))
. = ..()
if (.)
Master.UpdateTickRate()
+10
View File
@@ -573,3 +573,13 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
for(var/S in subsystems) for(var/S in subsystems)
var/datum/controller/subsystem/SS = S var/datum/controller/subsystem/SS = S
SS.StopLoadingMap() SS.StopLoadingMap()
/datum/controller/master/proc/UpdateTickRate()
if (!processing)
return
var/client_count = length(GLOB.clients)
if (client_count < CONFIG_GET(number/mc_tick_rate/disable_high_pop_mc_mode_amount))
processing = CONFIG_GET(number/mc_tick_rate/base_mc_tick_rate)
else if (client_count > CONFIG_GET(number/mc_tick_rate/high_pop_mc_mode_amount))
processing = CONFIG_GET(number/mc_tick_rate/high_pop_mc_tick_rate)
+52 -5
View File
@@ -68,10 +68,57 @@ SUBSYSTEM_DEF(ticker)
/datum/controller/subsystem/ticker/Initialize(timeofday) /datum/controller/subsystem/ticker/Initialize(timeofday)
load_mode() load_mode()
var/list/music = world.file2list(ROUND_START_MUSIC_LIST, "\n")
var/list/byond_sound_formats = list(
"mid" = TRUE,
"midi" = TRUE,
"mod" = TRUE,
"it" = TRUE,
"s3m" = TRUE,
"xm" = TRUE,
"oxm" = TRUE,
"wav" = TRUE,
"ogg" = TRUE,
"raw" = TRUE,
"wma" = TRUE,
"aiff" = TRUE
)
var/list/provisional_title_music = flist("config/title_music/sounds/")
var/list/music = list()
var/use_rare_music = prob(1)
for(var/S in provisional_title_music)
var/lower = lowertext(S)
var/list/L = splittext(lower,"+")
switch(L.len)
if(3) //rare+MAP+sound.ogg or MAP+rare.sound.ogg -- Rare Map-specific sounds
if(use_rare_music)
if(L[1] == "rare" && L[2] == SSmapping.config.map_name)
music += S
else if(L[2] == "rare" && L[1] == SSmapping.config.map_name)
music += S
if(2) //rare+sound.ogg or MAP+sound.ogg -- Rare sounds or Map-specific sounds
if((use_rare_music && L[1] == "rare") || (L[1] == SSmapping.config.map_name))
music += S
if(1) //sound.ogg -- common sound
music += S
var/old_login_music = trim(file2text("data/last_round_lobby_music.txt")) var/old_login_music = trim(file2text("data/last_round_lobby_music.txt"))
if(music.len > 1) if(music.len > 1)
music -= old_login_music music -= old_login_music
for(var/S in music)
var/list/L = splittext(S,".")
if(L.len >= 2)
var/ext = lowertext(L[L.len]) //pick the real extension, no 'honk.ogg.exe' nonsense here
if(byond_sound_formats[ext])
continue
music -= S
if(isemptylist(music))
music = world.file2list(ROUND_START_MUSIC_LIST, "\n")
login_music = pick(music) login_music = pick(music)
if(!GLOB.syndicate_code_phrase) if(!GLOB.syndicate_code_phrase)
@@ -472,13 +519,13 @@ SUBSYSTEM_DEF(ticker)
if(!crewMind.current || !crewMind.objectives.len) if(!crewMind.current || !crewMind.objectives.len)
continue continue
for(var/datum/objective/miscreant/MO in crewMind.objectives) for(var/datum/objective/miscreant/MO in crewMind.objectives)
miscreants += "<B>[crewMind.current.real_name]</B> (Played by: <B>[crewMind.key]</B>). <B>Objective</B>: [MO.explanation_text]" miscreants += "<B>[crewMind.current.real_name]</B> (Played by: <B>[crewMind.key]</B>)<BR><B>Objective</B>: [MO.explanation_text] <font color='grey'>(Optional)</font><BR>"
for(var/datum/objective/crew/CO in crewMind.objectives) for(var/datum/objective/crew/CO in crewMind.objectives)
if(CO.check_completion()) if(CO.check_completion())
to_chat(crewMind.current, "<br><B>Your objective</B>: [CO.explanation_text] <font color='green'><B>Success!</B></font>") to_chat(crewMind.current, "<br><B>Your optional objective</B>: [CO.explanation_text] <font color='green'><B>Success!</B></font>")
successfulCrew += "<B>[crewMind.current.real_name]</B> (Played by: <B>[crewMind.key]</B>). <B>Objective</B>: [CO.explanation_text]" successfulCrew += "<B>[crewMind.current.real_name]</B> (Played by: <B>[crewMind.key]</B>)<BR><B>Objective</B>: [CO.explanation_text] <font color='green'><B>Success!</B></font> <font color='grey'>(Optional)</font><BR>"
else else
to_chat(crewMind.current, "<br><B>Your objective</B>: [CO.explanation_text] <font color='red'><B>Failed.</B></font>") to_chat(crewMind.current, "<br><B>Your optional objective</B>: [CO.explanation_text] <font color='red'><B>Failed.</B></font>")
if (successfulCrew.len) if (successfulCrew.len)
var/completedObjectives = "<B>The following crew members completed their Crew Objectives:</B><BR>" var/completedObjectives = "<B>The following crew members completed their Crew Objectives:</B><BR>"
+3 -2
View File
@@ -290,9 +290,10 @@
if(!id) if(!id)
var/list/L = list() var/list/L = list()
for(var/datum/symptom/S in symptoms) for(var/datum/symptom/S in symptoms)
L += S.id
if(S.neutered) if(S.neutered)
L += "N" L += "[S.id]N"
else
L += S.id
L = sortList(L) // Sort the list so it doesn't matter which order the symptoms are in. L = sortList(L) // Sort the list so it doesn't matter which order the symptoms are in.
var/result = jointext(L, ":") var/result = jointext(L, ":")
id = result id = result
@@ -61,7 +61,7 @@ BONUS
if(power >= 1.5) if(power >= 1.5)
var/obj/item/I = M.get_active_held_item() var/obj/item/I = M.get_active_held_item()
if(I && I.w_class == WEIGHT_CLASS_TINY) if(I && I.w_class == WEIGHT_CLASS_TINY)
M.drop_item() M.dropItemToGround(I)
if(power >= 2 && prob(10)) if(power >= 2 && prob(10))
to_chat(M, "<span notice='userdanger'>[pick("You have a coughing fit!", "You can't stop coughing!")]</span>") to_chat(M, "<span notice='userdanger'>[pick("You have a coughing fit!", "You can't stop coughing!")]</span>")
M.Stun(20) M.Stun(20)
+3 -4
View File
@@ -85,7 +85,7 @@
"<span class='userdanger'>[A] strikes your abdomen, neck and back consecutively!</span>") "<span class='userdanger'>[A] strikes your abdomen, neck and back consecutively!</span>")
playsound(get_turf(D), 'sound/weapons/cqchit2.ogg', 50, 1, -1) playsound(get_turf(D), 'sound/weapons/cqchit2.ogg', 50, 1, -1)
var/obj/item/I = D.get_active_held_item() var/obj/item/I = D.get_active_held_item()
if(I && D.drop_item()) if(I && D.temporarilyRemoveItemFromInventory(I))
A.put_in_hands(I) A.put_in_hands(I)
D.adjustStaminaLoss(50) D.adjustStaminaLoss(50)
D.apply_damage(25, BRUTE) D.apply_damage(25, BRUTE)
@@ -145,7 +145,7 @@
D.visible_message("<span class='warning'>[A] strikes [D]'s jaw with their hand!</span>", \ D.visible_message("<span class='warning'>[A] strikes [D]'s jaw with their hand!</span>", \
"<span class='userdanger'>[A] strikes your jaw, disorienting you!</span>") "<span class='userdanger'>[A] strikes your jaw, disorienting you!</span>")
playsound(get_turf(D), 'sound/weapons/cqchit1.ogg', 50, 1, -1) playsound(get_turf(D), 'sound/weapons/cqchit1.ogg', 50, 1, -1)
if(I && D.drop_item()) if(I && D.temporarilyRemoveItemFromInventory(I))
A.put_in_hands(I) A.put_in_hands(I)
D.Jitter(2) D.Jitter(2)
D.apply_damage(5, BRUTE) D.apply_damage(5, BRUTE)
@@ -193,7 +193,6 @@
to_chat(user, "<span class='boldannounce'>You remember the basics of CQC.</span>") to_chat(user, "<span class='boldannounce'>You remember the basics of CQC.</span>")
var/datum/martial_art/cqc/D = new(null) var/datum/martial_art/cqc/D = new(null)
D.teach(user) D.teach(user)
user.drop_item()
visible_message("<span class='warning'>[src] beeps ominously, and a moment later it bursts up in flames.</span>") visible_message("<span class='warning'>[src] beeps ominously, and a moment later it bursts up in flames.</span>")
new /obj/effect/decal/cleanable/ash(get_turf(src))
qdel(src) qdel(src)
new /obj/effect/decal/cleanable/ash(user.drop_location())
+1 -1
View File
@@ -150,7 +150,7 @@
if(prob(60)) if(prob(60))
I = D.get_active_held_item() I = D.get_active_held_item()
if(I) if(I)
if(D.drop_item()) if(D.temporarilyRemoveItemFromInventory(I))
A.put_in_hands(I) A.put_in_hands(I)
D.visible_message("<span class='danger'>[A] has disarmed [D]!</span>", \ D.visible_message("<span class='danger'>[A] has disarmed [D]!</span>", \
"<span class='userdanger'>[A] has disarmed [D]!</span>") "<span class='userdanger'>[A] has disarmed [D]!</span>")
+4 -5
View File
@@ -41,7 +41,7 @@
"<span class='userdanger'>[A] grabs your wrist and violently wrenches it to the side!</span>") "<span class='userdanger'>[A] grabs your wrist and violently wrenches it to the side!</span>")
playsound(get_turf(A), 'sound/weapons/thudswoosh.ogg', 50, 1, -1) playsound(get_turf(A), 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
D.emote("scream") D.emote("scream")
D.drop_item() D.dropItemToGround(D.get_active_held_item())
D.apply_damage(5, BRUTE, pick("l_arm", "r_arm")) D.apply_damage(5, BRUTE, pick("l_arm", "r_arm"))
D.Stun(60) D.Stun(60)
return 1 return 1
@@ -79,7 +79,7 @@
D.visible_message("<span class='warning'>[A] kicks [D] in the head!</span>", \ D.visible_message("<span class='warning'>[A] kicks [D] in the head!</span>", \
"<span class='userdanger'>[A] kicks you in the jaw!</span>") "<span class='userdanger'>[A] kicks you in the jaw!</span>")
D.apply_damage(20, BRUTE, "head") D.apply_damage(20, BRUTE, "head")
D.drop_item() D.drop_all_held_items()
playsound(get_turf(D), 'sound/weapons/punch1.ogg', 50, 1, -1) playsound(get_turf(D), 'sound/weapons/punch1.ogg', 50, 1, -1)
D.Stun(80) D.Stun(80)
return 1 return 1
@@ -168,10 +168,9 @@
to_chat(user, message) to_chat(user, message)
var/datum/martial_art/the_sleeping_carp/theSleepingCarp = new(null) var/datum/martial_art/the_sleeping_carp/theSleepingCarp = new(null)
theSleepingCarp.teach(user) theSleepingCarp.teach(user)
user.drop_item()
visible_message("<span class='warning'>[src] lights up in fire and quickly burns to ash.</span>")
new /obj/effect/decal/cleanable/ash(get_turf(src))
qdel(src) qdel(src)
visible_message("<span class='warning'>[src] lights up in fire and quickly burns to ash.</span>")
new /obj/effect/decal/cleanable/ash(user.drop_location())
/obj/item/twohanded/bostaff /obj/item/twohanded/bostaff
name = "bo staff" name = "bo staff"
+1 -1
View File
@@ -270,7 +270,7 @@ GLOBAL_LIST_EMPTY(mutations_list)
/datum/mutation/human/cough/on_life(mob/living/carbon/human/owner) /datum/mutation/human/cough/on_life(mob/living/carbon/human/owner)
if(prob(5) && owner.stat == CONSCIOUS) if(prob(5) && owner.stat == CONSCIOUS)
owner.drop_item() owner.drop_all_held_items()
owner.emote("cough") owner.emote("cough")
/datum/mutation/human/dwarfism /datum/mutation/human/dwarfism
+3 -2
View File
@@ -250,9 +250,10 @@
if(istype(I, /obj/item/device/assembly)) if(istype(I, /obj/item/device/assembly))
var/obj/item/device/assembly/A = I var/obj/item/device/assembly/A = I
if(A.attachable) if(A.attachable)
if(!L.drop_item()) if(!L.temporarilyRemoveItemFromInventory(A))
return return
attach_assembly(target_wire, A) if(!attach_assembly(target_wire, A))
A.forceMove(L.drop_location())
. = TRUE . = TRUE
else else
to_chat(L, "<span class='warning'>You need an attachable assembly!</span>") to_chat(L, "<span class='warning'>You need an attachable assembly!</span>")
-2
View File
@@ -36,8 +36,6 @@
if(GLOB.use_preloader && (src.type == GLOB._preloader.target_path))//in case the instanciated atom is creating other atoms in New() if(GLOB.use_preloader && (src.type == GLOB._preloader.target_path))//in case the instanciated atom is creating other atoms in New()
GLOB._preloader.load(src) GLOB._preloader.load(src)
//. = ..() //uncomment if you are dumb enough to add a /datum/New() proc
var/do_initialize = SSatoms.initialized var/do_initialize = SSatoms.initialized
if(do_initialize > INITIALIZATION_INSSATOMS) if(do_initialize > INITIALIZATION_INSSATOMS)
args[1] = do_initialize == INITIALIZATION_INNEW_MAPLOAD args[1] = do_initialize == INITIALIZATION_INNEW_MAPLOAD
+1 -1
View File
@@ -90,7 +90,7 @@
if("healing") if("healing")
M.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/charge(null)) M.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/charge(null))
M.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/forcewall(null)) M.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/forcewall(null))
M.put_in_hands_or_del(new /obj/item/gun/magic/staff/healing(M)) M.put_in_hands(new /obj/item/gun/magic/staff/healing(M), TRUE)
to_chat(M, "<B>Your service has not gone unrewarded, however. Studying under [wizard_name], you have learned livesaving survival spells. You are able to cast charge and forcewall.") to_chat(M, "<B>Your service has not gone unrewarded, however. Studying under [wizard_name], you have learned livesaving survival spells. You are able to cast charge and forcewall.")
if("robeless") if("robeless")
M.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/knock(null)) M.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/knock(null))
@@ -37,8 +37,9 @@
return 1 return 1
/obj/effect/proc_holder/changeling/weapon/sting_action(mob/living/user) /obj/effect/proc_holder/changeling/weapon/sting_action(mob/living/user)
if(!user.drop_item()) var/obj/item/held = user.get_active_held_item()
to_chat(user, "<span class='warning'>The [user.get_active_held_item()] is stuck to your hand, you cannot grow a [weapon_name_simple] over it!</span>") if(held && !user.dropItemToGround(held))
to_chat(user, "<span class='warning'>[held] is stuck to your hand, you cannot grow a [weapon_name_simple] over it!</span>")
return return
var/limb_regen = 0 var/limb_regen = 0
if(user.active_hand_index % 2 == 0) //we regen the arm before changing it into the weapon if(user.active_hand_index % 2 == 0) //we regen the arm before changing it into the weapon
@@ -338,7 +339,7 @@
if(INTENT_DISARM) if(INTENT_DISARM)
var/obj/item/I = C.get_active_held_item() var/obj/item/I = C.get_active_held_item()
if(I) if(I)
if(C.drop_item()) if(C.dropItemToGround(I))
C.visible_message("<span class='danger'>[I] is yanked off [C]'s hand by [src]!</span>","<span class='userdanger'>A tentacle pulls [I] away from you!</span>") C.visible_message("<span class='danger'>[I] is yanked off [C]'s hand by [src]!</span>","<span class='userdanger'>A tentacle pulls [I] away from you!</span>")
on_hit(I) //grab the item as if you had hit it directly with the tentacle on_hit(I) //grab the item as if you had hit it directly with the tentacle
return 1 return 1
@@ -127,8 +127,9 @@
/obj/effect/proc_holder/changeling/sting/false_armblade/sting_action(mob/user, mob/target) /obj/effect/proc_holder/changeling/sting/false_armblade/sting_action(mob/user, mob/target)
add_logs(user, target, "stung", object="falso armblade sting") add_logs(user, target, "stung", object="falso armblade sting")
if(!target.drop_item()) var/obj/item/held = target.get_active_held_item()
to_chat(user, "<span class='warning'>The [target.get_active_held_item()] is stuck to their hand, you cannot grow a false armblade over it!</span>") if(held && !target.dropItemToGround(held))
to_chat(user, "<span class='warning'>[held] is stuck to their hand, you cannot grow a false armblade over it!</span>")
return return
if(ismonkey(target)) if(ismonkey(target))
@@ -88,7 +88,7 @@
if(istype(I, /obj/item/clockwork/slab)) if(istype(I, /obj/item/clockwork/slab))
to_chat(user, "<span class='heavy_brass'>\"I don't think you want to drop your slab into that.\"\n\"If you really want to, try throwing it.\"</span>") to_chat(user, "<span class='heavy_brass'>\"I don't think you want to drop your slab into that.\"\n\"If you really want to, try throwing it.\"</span>")
return TRUE return TRUE
if(user.drop_item() && uses) if(uses && user.dropItemToGround(I))
user.visible_message("<span class='warning'>[user] drops [I] into [src]!</span>", "<span class='danger'>You drop [I] into [src]!</span>") user.visible_message("<span class='warning'>[user] drops [I] into [src]!</span>", "<span class='danger'>You drop [I] into [src]!</span>")
pass_through_gateway(I, TRUE) pass_through_gateway(I, TRUE)
return TRUE return TRUE
@@ -20,7 +20,6 @@
"<span class='alloy'>You crush [src], capturing its escaping energy for use as power.</span>") "<span class='alloy'>You crush [src], capturing its escaping energy for use as power.</span>")
playsound(user, 'sound/effects/pop_expl.ogg', 50, TRUE) playsound(user, 'sound/effects/pop_expl.ogg', 50, TRUE)
adjust_clockwork_power(POWER_WALL_TOTAL) adjust_clockwork_power(POWER_WALL_TOTAL)
user.drop_item()
qdel(src) qdel(src)
/obj/item/clockwork/component/pickup(mob/living/user) /obj/item/clockwork/component/pickup(mob/living/user)
@@ -28,7 +28,6 @@
if(weapon.loc == owner) if(weapon.loc == owner)
owner.visible_message("<span class='danger'>[owner]'s [weapon.name] flickers and disappears!</span>") owner.visible_message("<span class='danger'>[owner]'s [weapon.name] flickers and disappears!</span>")
to_chat(owner, "<span class='brass'>You dismiss [weapon].</span>") to_chat(owner, "<span class='brass'>You dismiss [weapon].</span>")
owner.drop_item()
QDEL_NULL(weapon) QDEL_NULL(weapon)
weapon_reset(RATVARIAN_SPEAR_COOLDOWN * 0.5) weapon_reset(RATVARIAN_SPEAR_COOLDOWN * 0.5)
return return
@@ -136,7 +136,7 @@
to_chat(user, "<span class='heavy_brass'>\"You reek of blood. You've got a lot of nerve to even look at that slab.\"</span>") to_chat(user, "<span class='heavy_brass'>\"You reek of blood. You've got a lot of nerve to even look at that slab.\"</span>")
user.visible_message("<span class='warning'>A sizzling sound comes from [user]'s hands!</span>", "<span class='userdanger'>[src] suddenly grows extremely hot in your hands!</span>") user.visible_message("<span class='warning'>A sizzling sound comes from [user]'s hands!</span>", "<span class='userdanger'>[src] suddenly grows extremely hot in your hands!</span>")
playsound(get_turf(user), 'sound/weapons/sear.ogg', 50, 1) playsound(get_turf(user), 'sound/weapons/sear.ogg', 50, 1)
user.drop_item() user.dropItemToGround(src)
user.emote("scream") user.emote("scream")
user.apply_damage(5, BURN, "l_arm") user.apply_damage(5, BURN, "l_arm")
user.apply_damage(5, BURN, "r_arm") user.apply_damage(5, BURN, "r_arm")
@@ -12,6 +12,7 @@ Applications: 8 servants, 3 caches, and 100 CV
var/name = "scripture" var/name = "scripture"
var/desc = "Ancient Ratvarian lore. This piece seems particularly mundane." var/desc = "Ancient Ratvarian lore. This piece seems particularly mundane."
var/list/invocations = list() //Spoken over time in the ancient language of Ratvar. See clock_unsorted.dm for more details on the language and how to make it. var/list/invocations = list() //Spoken over time in the ancient language of Ratvar. See clock_unsorted.dm for more details on the language and how to make it.
var/chanting = FALSE //If the invocation's words are being spoken
var/channel_time = 10 //In deciseconds, how long a ritual takes to chant var/channel_time = 10 //In deciseconds, how long a ritual takes to chant
var/power_cost = 5 //In watts, how much a scripture takes to invoke var/power_cost = 5 //In watts, how much a scripture takes to invoke
var/special_power_text //If the scripture can use additional power to have a unique function, use this; put POWERCOST here to display the special power cost. var/special_power_text //If the scripture can use additional power to have a unique function, use this; put POWERCOST here to display the special power cost.
@@ -145,18 +146,29 @@ Applications: 8 servants, 3 caches, and 100 CV
to_chat(invoker, "<span class='brass'>You [channel_time <= 0 ? "recite" : "begin reciting"] a piece of scripture entitled \"[name]\".</span>") to_chat(invoker, "<span class='brass'>You [channel_time <= 0 ? "recite" : "begin reciting"] a piece of scripture entitled \"[name]\".</span>")
if(!channel_time) if(!channel_time)
return TRUE return TRUE
chant()
if(!do_after(invoker, channel_time, target = invoker, extra_checks = CALLBACK(src, .proc/check_special_requirements)))
slab.busy = null
chanting = FALSE
scripture_fail()
chanting = FALSE
return
chanting = FALSE
return TRUE
/datum/clockwork_scripture/proc/chant()
set waitfor = FALSE
chanting = TRUE
for(var/invocation in invocations) for(var/invocation in invocations)
if(!do_after(invoker, channel_time / invocations.len, target = invoker, extra_checks = CALLBACK(src, .proc/check_special_requirements))) sleep(channel_time / invocations.len)
slab.busy = null if(QDELETED(src) || QDELETED(slab) || !chanting)
scripture_fail() return
return FALSE
if(multiple_invokers_used) if(multiple_invokers_used)
for(var/mob/living/L in range(1, get_turf(invoker))) for(var/mob/living/L in range(1, get_turf(invoker)))
if(can_recite_scripture(L)) if(can_recite_scripture(L))
clockwork_say(L, text2ratvar(invocation), whispered) clockwork_say(L, text2ratvar(invocation), whispered)
else else
clockwork_say(invoker, text2ratvar(invocation), whispered) clockwork_say(invoker, text2ratvar(invocation), whispered)
return TRUE
/datum/clockwork_scripture/proc/scripture_effects() //The actual effects of the recital after its conclusion /datum/clockwork_scripture/proc/scripture_effects() //The actual effects of the recital after its conclusion
+2 -5
View File
@@ -21,7 +21,6 @@
if(invoke(user)) if(invoke(user))
uses-- uses--
if(uses <= 0) if(uses <= 0)
user.drop_item()
qdel(src) qdel(src)
/obj/item/paper/talisman/proc/invoke(mob/living/user, successfuluse = 1) /obj/item/paper/talisman/proc/invoke(mob/living/user, successfuluse = 1)
@@ -182,7 +181,6 @@
C.Jitter(15) C.Jitter(15)
if(is_servant_of_ratvar(target)) if(is_servant_of_ratvar(target))
target.adjustBruteLoss(15) target.adjustBruteLoss(15)
user.drop_item()
qdel(src) qdel(src)
return return
..() ..()
@@ -204,13 +202,13 @@
user.equip_to_slot_or_del(new /obj/item/clothing/suit/cultrobes/alt(user), slot_wear_suit) user.equip_to_slot_or_del(new /obj/item/clothing/suit/cultrobes/alt(user), slot_wear_suit)
user.equip_to_slot_or_del(new /obj/item/clothing/shoes/cult/alt(user), slot_shoes) user.equip_to_slot_or_del(new /obj/item/clothing/shoes/cult/alt(user), slot_shoes)
user.equip_to_slot_or_del(new /obj/item/storage/backpack/cultpack(user), slot_back) user.equip_to_slot_or_del(new /obj/item/storage/backpack/cultpack(user), slot_back)
user.drop_item() user.dropItemToGround(src)
user.put_in_hands(new /obj/item/melee/cultblade(user)) user.put_in_hands(new /obj/item/melee/cultblade(user))
user.put_in_hands(new /obj/item/restraints/legcuffs/bola/cult(user)) user.put_in_hands(new /obj/item/restraints/legcuffs/bola/cult(user))
/obj/item/paper/talisman/armor/attack(mob/living/target, mob/living/user) /obj/item/paper/talisman/armor/attack(mob/living/target, mob/living/user)
if(iscultist(user) && iscultist(target)) if(iscultist(user) && iscultist(target))
user.drop_item() user.temporarilyRemoveItemFromInventory(src)
invoke(target) invoke(target)
qdel(src) qdel(src)
return return
@@ -335,7 +333,6 @@
else else
to_chat(user, "<span class='warning'>[C] is already bound.</span>") to_chat(user, "<span class='warning'>[C] is already bound.</span>")
if(uses <= 0) if(uses <= 0)
user.drop_item()
qdel(src) qdel(src)
/obj/item/restraints/handcuffs/energy/cult //For the talisman of shackling /obj/item/restraints/handcuffs/energy/cult //For the talisman of shackling
@@ -184,7 +184,7 @@
"<span class='userdanger'>[M] has pushed down [src]!</span>") "<span class='userdanger'>[M] has pushed down [src]!</span>")
else else
if (prob(25)) if (prob(25))
drop_item() dropItemToGround(get_active_held_item())
playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
visible_message("<span class='danger'>[M] has disarmed [src]!</span>", \ visible_message("<span class='danger'>[M] has disarmed [src]!</span>", \
"<span class='userdanger'>[M] has disarmed [src]!</span>") "<span class='userdanger'>[M] has disarmed [src]!</span>")
@@ -49,7 +49,7 @@
/datum/surgery_step/gland_insert/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) /datum/surgery_step/gland_insert/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
user.visible_message("[user] inserts [tool] into [target].", "<span class ='notice'>You insert [tool] into [target].</span>") user.visible_message("[user] inserts [tool] into [target].", "<span class ='notice'>You insert [tool] into [target].</span>")
user.drop_item() user.temporarilyRemoveItemFromInventory(tool, TRUE)
var/obj/item/organ/heart/gland/gland = tool var/obj/item/organ/heart/gland/gland = tool
gland.Insert(target, 2) gland.Insert(target, 2)
return 1 return 1
@@ -353,7 +353,7 @@
return ..() return ..()
user.visible_message("<span class='notice'>[user] scatters [src] in all directions.</span>", \ user.visible_message("<span class='notice'>[user] scatters [src] in all directions.</span>", \
"<span class='notice'>You scatter [src] across the area. The particles slowly fade away.</span>") "<span class='notice'>You scatter [src] across the area. The particles slowly fade away.</span>")
user.drop_item() user.dropItemToGround(src)
scatter() scatter()
/obj/item/ectoplasm/revenant/throw_impact(atom/hit_atom) /obj/item/ectoplasm/revenant/throw_impact(atom/hit_atom)
@@ -97,7 +97,7 @@
return return
user.visible_message("<span class='warning'>[user]'s eyes flare a deep crimson!</span>", \ user.visible_message("<span class='warning'>[user]'s eyes flare a deep crimson!</span>", \
"<span class='userdanger'>You feel a strange power seep into your body... you have absorbed the demon's blood-travelling powers!</span>") "<span class='userdanger'>You feel a strange power seep into your body... you have absorbed the demon's blood-travelling powers!</span>")
user.drop_item() user.temporarilyRemoveItemFromInventory(src, TRUE)
src.Insert(user) //Consuming the heart literally replaces your heart with a demon heart. H A R D C O R E src.Insert(user) //Consuming the heart literally replaces your heart with a demon heart. H A R D C O R E
/obj/item/organ/heart/demon/Insert(mob/living/carbon/M, special = 0) /obj/item/organ/heart/demon/Insert(mob/living/carbon/M, special = 0)
+2 -3
View File
@@ -91,7 +91,7 @@
to_chat(synd_mind.current, "<B>In your hand you will find a special item capable of triggering a greater challenge for your team. Examine it carefully and consult with your fellow operatives before activating it.</B>") to_chat(synd_mind.current, "<B>In your hand you will find a special item capable of triggering a greater challenge for your team. Examine it carefully and consult with your fellow operatives before activating it.</B>")
var/obj/item/device/nuclear_challenge/challenge = new /obj/item/device/nuclear_challenge var/obj/item/device/nuclear_challenge/challenge = new /obj/item/device/nuclear_challenge
synd_mind.current.put_in_hands_or_del(challenge) synd_mind.current.put_in_hands(challenge, TRUE)
var/list/foundIDs = synd_mind.current.search_contents_for(/obj/item/card/id) var/list/foundIDs = synd_mind.current.search_contents_for(/obj/item/card/id)
if(foundIDs.len) if(foundIDs.len)
@@ -110,8 +110,7 @@
P.info = "The nuclear authorization code is: <b>[nuke_code]</b>" P.info = "The nuclear authorization code is: <b>[nuke_code]</b>"
P.name = "nuclear bomb code" P.name = "nuclear bomb code"
var/mob/living/carbon/human/H = synd_mind.current var/mob/living/carbon/human/H = synd_mind.current
P.forceMove(H.drop_location()) H.put_in_hands(P, TRUE)
H.put_in_hands_or_del(P)
H.update_icons() H.update_icons()
else else
nuke_code = "code will be provided later" nuke_code = "code will be provided later"
+3 -6
View File
@@ -105,9 +105,8 @@
/obj/machinery/nuclearbomb/attackby(obj/item/I, mob/user, params) /obj/machinery/nuclearbomb/attackby(obj/item/I, mob/user, params)
if (istype(I, /obj/item/disk/nuclear)) if (istype(I, /obj/item/disk/nuclear))
if(!user.drop_item()) if(!user.transferItemToLoc(I, src))
return return
I.forceMove(src)
auth = I auth = I
add_fingerprint(user) add_fingerprint(user)
return return
@@ -309,10 +308,8 @@
. = TRUE . = TRUE
if("insert_disk") if("insert_disk")
if(!auth) if(!auth)
var/obj/item/I = usr.get_active_held_item() var/obj/item/I = usr.is_holding_item_of_type(/obj/item/disk/nuclear)
if(istype(I, /obj/item/disk/nuclear)) if(I && usr.transferItemToLoc(I, src))
usr.drop_item()
I.forceMove(src)
auth = I auth = I
. = TRUE . = TRUE
if("keypad") if("keypad")
+2 -2
View File
@@ -193,8 +193,8 @@
H.equip_to_slot_or_del(new hat(H), slot_head) H.equip_to_slot_or_del(new hat(H), slot_head)
H.equip_to_slot_or_del(new /obj/item/clothing/under/roman(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/clothing/under/roman(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/roman(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/roman(H), slot_shoes)
H.put_in_hands_or_del(new /obj/item/shield/riot/roman(H)) H.put_in_hands(new /obj/item/shield/riot/roman(H), TRUE)
H.put_in_hands_or_del(new /obj/item/claymore(H)) H.put_in_hands(new /obj/item/claymore(H), TRUE)
H.equip_to_slot_or_del(new /obj/item/twohanded/spear(H), slot_back) H.equip_to_slot_or_del(new /obj/item/twohanded/spear(H), slot_back)
+1 -1
View File
@@ -159,7 +159,7 @@
wizard_mob.equip_to_slot_or_del(new /obj/item/teleportation_scroll(wizard_mob), slot_r_store) wizard_mob.equip_to_slot_or_del(new /obj/item/teleportation_scroll(wizard_mob), slot_r_store)
var/obj/item/spellbook/spellbook = new /obj/item/spellbook(wizard_mob) var/obj/item/spellbook/spellbook = new /obj/item/spellbook(wizard_mob)
spellbook.owner = wizard_mob spellbook.owner = wizard_mob
wizard_mob.put_in_hands_or_del(spellbook) wizard_mob.put_in_hands(spellbook, TRUE)
to_chat(wizard_mob, "You will find a list of available spells in your spell book. Choose your magic arsenal carefully.") to_chat(wizard_mob, "You will find a list of available spells in your spell book. Choose your magic arsenal carefully.")
to_chat(wizard_mob, "The spellbook is bound to you, and others cannot use it.") to_chat(wizard_mob, "The spellbook is bound to you, and others cannot use it.")
+5 -9
View File
@@ -71,15 +71,11 @@
if(storedpda) if(storedpda)
to_chat(user, "<span class='warning'>There is already a PDA inside!</span>") to_chat(user, "<span class='warning'>There is already a PDA inside!</span>")
return return
else else if(!user.transferItemToLoc(O, src))
var/obj/item/device/pda/P = user.get_active_held_item() return
if(istype(P)) storedpda = O
if(!user.drop_item()) O.add_fingerprint(user)
return update_icon()
storedpda = P
P.loc = src
P.add_fingerprint(user)
update_icon()
else if(istype(O, /obj/item/weldingtool) && user.a_intent != INTENT_HARM) else if(istype(O, /obj/item/weldingtool) && user.a_intent != INTENT_HARM)
var/obj/item/weldingtool/WT = O var/obj/item/weldingtool/WT = O
+2 -2
View File
@@ -149,10 +149,10 @@
else if(istype(W, /obj/item/device/analyzer)) else if(istype(W, /obj/item/device/analyzer))
if(!isXRay()) if(!isXRay())
if(!user.drop_item(W)) if(!user.temporarilyRemoveItemFromInventory(W))
return return
upgradeXRay()
qdel(W) qdel(W)
upgradeXRay()
to_chat(user, "[msg]") to_chat(user, "[msg]")
else else
to_chat(user, "[msg2]") to_chat(user, "[msg2]")
@@ -109,11 +109,10 @@
// Upgrades! // Upgrades!
if(is_type_in_typecache(W, possible_upgrades) && !is_type_in_list(W, upgrades)) // Is a possible upgrade and isn't in the camera already. if(is_type_in_typecache(W, possible_upgrades) && !is_type_in_list(W, upgrades)) // Is a possible upgrade and isn't in the camera already.
if(!user.drop_item(W)) if(!user.transferItemToLoc(W, src))
return return
to_chat(user, "<span class='notice'>You attach \the [W] into the assembly inner circuits.</span>") to_chat(user, "<span class='notice'>You attach \the [W] into the assembly inner circuits.</span>")
upgrades += W upgrades += W
W.forceMove(src)
return return
// Taking out upgrades // Taking out upgrades
@@ -92,18 +92,13 @@
beacon = findbeacon() beacon = findbeacon()
if("handle_id") if("handle_id")
if(id) if(id)
if(!usr.get_active_held_item()) usr.put_in_hands(id)
usr.put_in_hands(id) id = null
id = null
else
id.forceMove(get_turf(src))
id = null
else else
var/obj/item/I = usr.get_active_held_item() var/obj/item/I = usr.is_holding_item_of_type(/obj/item/card/id/prisoner)
if(istype(I, /obj/item/card/id/prisoner)) if(I)
if(!usr.drop_item()) if(!usr.transferItemToLoc(I, src))
return return
I.forceMove(src)
id = I id = I
if("set_goal") if("set_goal")
var/new_goal = input("Set the amount of points:", "Points", id.goal) as num|null var/new_goal = input("Set the amount of points:", "Points", id.goal) as num|null
+6 -11
View File
@@ -27,9 +27,8 @@
/obj/machinery/computer/med_data/attackby(obj/item/O, mob/user, params) /obj/machinery/computer/med_data/attackby(obj/item/O, mob/user, params)
if(istype(O, /obj/item/card/id) && !scan) if(istype(O, /obj/item/card/id) && !scan)
if(!user.drop_item()) if(!user.transferItemToLoc(O, src))
return return
O.loc = src
scan = O scan = O
to_chat(user, "<span class='notice'>You insert [O].</span>") to_chat(user, "<span class='notice'>You insert [O].</span>")
else else
@@ -215,17 +214,13 @@
src.temp = null src.temp = null
if(href_list["scan"]) if(href_list["scan"])
if(src.scan) if(src.scan)
if(ishuman(usr) && !usr.get_active_held_item()) usr.put_in_hands(scan)
usr.put_in_hands(scan) scan = null
else
scan.loc = get_turf(src)
src.scan = null
else else
var/obj/item/I = usr.get_active_held_item() var/obj/item/I = usr.is_holding_item_of_type(/obj/item/card/id)
if(istype(I, /obj/item/card/id)) if(I)
if(!usr.drop_item()) if(!usr.transferItemToLoc(I, src))
return return
I.loc = src
src.scan = I src.scan = I
else if(href_list["logout"]) else if(href_list["logout"])
src.authenticated = null src.authenticated = null
+3 -4
View File
@@ -90,11 +90,10 @@
if(href_list["id"]) if(href_list["id"])
if(href_list["id"] =="insert" && !inserted_id) if(href_list["id"] =="insert" && !inserted_id)
var/obj/item/card/id/prisoner/I = usr.get_active_held_item() var/obj/item/card/id/prisoner/I = usr.is_holding_item_of_type(/obj/item/card/id/prisoner)
if(istype(I)) if(I)
if(!usr.drop_item()) if(!usr.transferItemToLoc(I, src))
return return
I.loc = src
inserted_id = I inserted_id = I
else to_chat(usr, "<span class='danger'>No valid ID.</span>") else to_chat(usr, "<span class='danger'>No valid ID.</span>")
else if(inserted_id) else if(inserted_id)
+5 -10
View File
@@ -37,9 +37,8 @@
/obj/machinery/computer/secure_data/attackby(obj/item/O, mob/user, params) /obj/machinery/computer/secure_data/attackby(obj/item/O, mob/user, params)
if(istype(O, /obj/item/card/id)) if(istype(O, /obj/item/card/id))
if(!scan) if(!scan)
if(!user.drop_item()) if(!user.transferItemToLoc(O, src))
return return
O.loc = src
scan = O scan = O
to_chat(user, "<span class='notice'>You insert [O].</span>") to_chat(user, "<span class='notice'>You insert [O].</span>")
else else
@@ -303,17 +302,13 @@ What a mess.*/
if("Confirm Identity") if("Confirm Identity")
if(scan) if(scan)
if(ishuman(usr) && !usr.get_active_held_item()) usr.put_in_hands(scan)
usr.put_in_hands(scan)
else
scan.loc = get_turf(src)
scan = null scan = null
else else
var/obj/item/I = usr.get_active_held_item() var/obj/item/I = usr.is_holding_item_of_type(/obj/item/card/id)
if(istype(I, /obj/item/card/id)) if(I)
if(!usr.drop_item()) if(!usr.transferItemToLoc(I, src))
return return
I.loc = src
scan = I scan = I
if("Log Out") if("Log Out")
@@ -29,21 +29,19 @@ GLOBAL_LIST_INIT(possible_uplinker_IDs, list("Alfa","Bravo","Charlie","Delta","E
ID = rand(1,999) ID = rand(1,999)
name = "[name] [ID]" name = "[name] [ID]"
/obj/machinery/computer/telecrystals/uplinker/attackby(obj/item/O, mob/user, params) /obj/machinery/computer/telecrystals/uplinker/attackby(obj/item/I, mob/user, params)
if(uplinkholder) if(uplinkholder)
to_chat(user, "<span class='notice'>The [src] already has an uplink in it.</span>") to_chat(user, "<span class='notice'>The [src] already has an uplink in it.</span>")
return return
if(O.hidden_uplink) if(I.hidden_uplink)
var/obj/item/I = user.get_active_held_item() if(!user.transferItemToLoc(I, src))
if(!user.drop_item())
return return
uplinkholder = I uplinkholder = I
I.loc = src
I.add_fingerprint(user) I.add_fingerprint(user)
update_icon() update_icon()
updateUsrDialog() updateUsrDialog()
else else
to_chat(user, "<span class='notice'>The [O] doesn't appear to be an uplink...</span>") to_chat(user, "<span class='notice'>[I] doesn't appear to be an uplink...</span>")
/obj/machinery/computer/telecrystals/uplinker/update_icon() /obj/machinery/computer/telecrystals/uplinker/update_icon()
..() ..()
+2 -4
View File
@@ -128,12 +128,11 @@
to_chat(user, "<span class='warning'>The frame needs to be secured first!</span>") to_chat(user, "<span class='warning'>The frame needs to be secured first!</span>")
return return
var/obj/item/circuitboard/machine/B = P var/obj/item/circuitboard/machine/B = P
if(!user.drop_item()) if(!user.transferItemToLoc(B, src))
return return
playsound(src.loc, 'sound/items/deconstruct.ogg', 50, 1) playsound(src.loc, 'sound/items/deconstruct.ogg', 50, 1)
to_chat(user, "<span class='notice'>You add the circuit board to the frame.</span>") to_chat(user, "<span class='notice'>You add the circuit board to the frame.</span>")
circuit = B circuit = B
B.loc = src
icon_state = "box_2" icon_state = "box_2"
state = 3 state = 3
components = list() components = list()
@@ -239,10 +238,9 @@
req_components[I] -= used_amt req_components[I] -= used_amt
to_chat(user, "<span class='notice'>You add [P] to [src].</span>") to_chat(user, "<span class='notice'>You add [P] to [src].</span>")
return return
if(!user.drop_item()) if(!user.transferItemToLoc(P, src))
break break
to_chat(user, "<span class='notice'>You add [P] to [src].</span>") to_chat(user, "<span class='notice'>You add [P] to [src].</span>")
P.forceMove(src)
components += P components += P
req_components[I]-- req_components[I]--
return 1 return 1
+1 -3
View File
@@ -127,7 +127,6 @@
here.ChangeTurf(T.type) here.ChangeTurf(T.type)
return INITIALIZE_HINT_QDEL return INITIALIZE_HINT_QDEL
here.ChangeTurf(/turf/closed/wall) here.ChangeTurf(/turf/closed/wall)
return INITIALIZE_HINT_QDEL
if(9 to 11) if(9 to 11)
lights = FALSE lights = FALSE
locked = TRUE locked = TRUE
@@ -1170,10 +1169,9 @@
to_chat(user, "<span class='warning'>The maintenance panel is destroyed!</span>") to_chat(user, "<span class='warning'>The maintenance panel is destroyed!</span>")
return return
to_chat(user, "<span class='warning'>You apply [C]. Next time someone opens the door, it will explode.</span>") to_chat(user, "<span class='warning'>You apply [C]. Next time someone opens the door, it will explode.</span>")
user.drop_item()
panel_open = FALSE panel_open = FALSE
update_icon() update_icon()
C.forceMove(src) user.transferItemToLoc(C, src, TRUE)
charge = C charge = C
else if(istype(C, /obj/item/paper) || istype(C, /obj/item/photo)) else if(istype(C, /obj/item/paper) || istype(C, /obj/item/photo))
if(note) if(note)
-1
View File
@@ -426,7 +426,6 @@
return return
if(constructionStep != CONSTRUCTION_NOCIRCUIT) if(constructionStep != CONSTRUCTION_NOCIRCUIT)
return return
user.drop_item()
qdel(C) qdel(C)
user.visible_message("<span class='notice'>[user] adds a circuit to [src].</span>", \ user.visible_message("<span class='notice'>[user] adds a circuit to [src].</span>", \
"<span class='notice'>You insert and secure [C].</span>") "<span class='notice'>You insert and secure [C].</span>")
+1 -2
View File
@@ -63,10 +63,9 @@
else if (istype(W, /obj/item/device/assembly/flash/handheld)) else if (istype(W, /obj/item/device/assembly/flash/handheld))
if (!bulb) if (!bulb)
if(!user.drop_item()) if(!user.transferItemToLoc(W, src))
return return
user.visible_message("[user] installs [W] into [src].", "<span class='notice'>You install [W] into [src].</span>") user.visible_message("[user] installs [W] into [src].", "<span class='notice'>You install [W] into [src].</span>")
W.forceMove(src)
bulb = W bulb = W
power_change() power_change()
else else
+6 -12
View File
@@ -33,9 +33,8 @@
/obj/machinery/gulag_item_reclaimer/attackby(obj/item/I, mob/user) /obj/machinery/gulag_item_reclaimer/attackby(obj/item/I, mob/user)
if(istype(I, /obj/item/card/id/prisoner)) if(istype(I, /obj/item/card/id/prisoner))
if(!inserted_id) if(!inserted_id)
if(!user.drop_item()) if(!user.transferItemToLoc(I, src))
return return
I.forceMove(src)
inserted_id = I inserted_id = I
to_chat(user, "<span class='notice'>You insert [I].</span>") to_chat(user, "<span class='notice'>You insert [I].</span>")
return return
@@ -82,18 +81,13 @@
switch(action) switch(action)
if("handle_id") if("handle_id")
if(inserted_id) if(inserted_id)
if(!usr.get_active_held_item()) usr.put_in_hands(inserted_id)
usr.put_in_hands(inserted_id) inserted_id = null
inserted_id = null
else
inserted_id.forceMove(get_turf(src))
inserted_id = null
else else
var/obj/item/I = usr.get_active_held_item() var/obj/item/I = usr.is_holding_item_of_type(/obj/item/card/id/prisoner)
if(istype(I, /obj/item/card/id/prisoner)) if(I)
if(!usr.drop_item()) if(!usr.transferItemToLoc(I, src))
return return
I.forceMove(src)
inserted_id = I inserted_id = I
if("release_items") if("release_items")
var/mob/M = locate(params["mobref"]) var/mob/M = locate(params["mobref"])
+1 -3
View File
@@ -95,10 +95,8 @@
if(beaker) if(beaker)
to_chat(user, "<span class='warning'>There is already a reagent container loaded!</span>") to_chat(user, "<span class='warning'>There is already a reagent container loaded!</span>")
return return
if(!user.drop_item()) if(!user.transferItemToLoc(W, src))
return return
W.forceMove(src)
beaker = W beaker = W
to_chat(user, "<span class='notice'>You attach [W] to [src].</span>") to_chat(user, "<span class='notice'>You attach [W] to [src].</span>")
update_icon() update_icon()
+3 -5
View File
@@ -786,11 +786,9 @@ GLOBAL_LIST_EMPTY(allCasters)
else else
qdel(photo) qdel(photo)
photo = null photo = null
if(istype(user.get_active_held_item(), /obj/item/photo)) photo = user.is_holding_item_of_type(/obj/item/photo)
photo = user.get_active_held_item() if(photo && !user.transferItemToLoc(photo, src))
if(!user.drop_item()) photo = null
return
photo.loc = src
if(issilicon(user)) if(issilicon(user))
var/list/nametemp = list() var/list/nametemp = list()
var/find var/find
@@ -71,8 +71,6 @@
add_fingerprint(user) add_fingerprint(user)
if (istype(W, /obj/item/pipe) || istype(W, /obj/item/pipe_meter)) if (istype(W, /obj/item/pipe) || istype(W, /obj/item/pipe_meter))
to_chat(usr, "<span class='notice'>You put [W] back into [src].</span>") to_chat(usr, "<span class='notice'>You put [W] back into [src].</span>")
if(!user.drop_item())
return
qdel(W) qdel(W)
return return
else if (istype(W, /obj/item/wrench)) else if (istype(W, /obj/item/wrench))
@@ -84,9 +84,8 @@
if(PTURRET_INTERNAL_ARMOUR_ON) if(PTURRET_INTERNAL_ARMOUR_ON)
if(istype(I, /obj/item/gun/energy)) //the gun installation part if(istype(I, /obj/item/gun/energy)) //the gun installation part
var/obj/item/gun/energy/E = I var/obj/item/gun/energy/E = I
if(!user.drop_item()) if(!user.transferItemToLoc(E, src))
return return
E.forceMove(src)
installed_gun = E installed_gun = E
to_chat(user, "<span class='notice'>You add [I] to the turret.</span>") to_chat(user, "<span class='notice'>You add [I] to the turret.</span>")
build_step = PTURRET_GUN_EQUIPPED build_step = PTURRET_GUN_EQUIPPED
@@ -101,7 +100,7 @@
if(PTURRET_GUN_EQUIPPED) if(PTURRET_GUN_EQUIPPED)
if(isprox(I)) if(isprox(I))
build_step = PTURRET_SENSORS_ON build_step = PTURRET_SENSORS_ON
if(!user.drop_item()) if(!user.temporarilyRemoveItemFromInventory(I))
return return
to_chat(user, "<span class='notice'>You add the proximity sensor to the turret.</span>") to_chat(user, "<span class='notice'>You add the proximity sensor to the turret.</span>")
qdel(I) qdel(I)
+1 -2
View File
@@ -50,9 +50,8 @@
to_chat(user, "<span class='notice'>Your gun has no external power connector.</span>") to_chat(user, "<span class='notice'>Your gun has no external power connector.</span>")
return 1 return 1
if(!user.drop_item()) if(!user.transferItemToLoc(G, src))
return 1 return 1
G.loc = src
charging = G charging = G
use_power = ACTIVE_POWER_USE use_power = ACTIVE_POWER_USE
update_icon(scan = TRUE) update_icon(scan = TRUE)
+2 -3
View File
@@ -83,16 +83,15 @@
if(istype(I, /obj/item/coin)) if(istype(I, /obj/item/coin))
var/obj/item/coin/C = I var/obj/item/coin/C = I
if(prob(2)) if(prob(2))
if(!user.drop_item()) if(!user.transferItemToLoc(C, drop_location()))
return return
C.loc = loc
C.throw_at(user, 3, 10) C.throw_at(user, 3, 10)
if(prob(10)) if(prob(10))
balance = max(balance - SPIN_PRICE, 0) balance = max(balance - SPIN_PRICE, 0)
to_chat(user, "<span class='warning'>[src] spits your coin back out!</span>") to_chat(user, "<span class='warning'>[src] spits your coin back out!</span>")
else else
if(!user.drop_item()) if(!user.temporarilyRemoveItemFromInventory(C))
return return
to_chat(user, "<span class='notice'>You insert a [C.cmineral] coin into [src]'s slot!</span>") to_chat(user, "<span class='notice'>You insert a [C.cmineral] coin into [src]'s slot!</span>")
balance += C.value balance += C.value
+6 -11
View File
@@ -140,18 +140,13 @@
if(cell) if(cell)
to_chat(user, "<span class='warning'>There is already a power cell inside!</span>") to_chat(user, "<span class='warning'>There is already a power cell inside!</span>")
return return
else else if(!user.transferItemToLoc(I, src))
// insert cell return
var/obj/item/stock_parts/cell/C = usr.get_active_held_item() cell = I
if(istype(C)) I.add_fingerprint(usr)
if(!user.drop_item())
return
cell = C
C.loc = src
C.add_fingerprint(usr)
user.visible_message("\The [user] inserts a power cell into \the [src].", "<span class='notice'>You insert the power cell into \the [src].</span>") user.visible_message("\The [user] inserts a power cell into \the [src].", "<span class='notice'>You insert the power cell into \the [src].</span>")
SStgui.update_uis(src) SStgui.update_uis(src)
else else
to_chat(user, "<span class='warning'>The hatch must be open to insert a power cell!</span>") to_chat(user, "<span class='warning'>The hatch must be open to insert a power cell!</span>")
return return
+4 -5
View File
@@ -298,32 +298,31 @@
if(suit) if(suit)
to_chat(user, "<span class='warning'>The unit already contains a suit!.</span>") to_chat(user, "<span class='warning'>The unit already contains a suit!.</span>")
return return
if(!user.drop_item()) if(!user.transferItemToLoc(I, src))
return return
suit = I suit = I
else if(istype(I, /obj/item/clothing/head/helmet)) else if(istype(I, /obj/item/clothing/head/helmet))
if(helmet) if(helmet)
to_chat(user, "<span class='warning'>The unit already contains a helmet!</span>") to_chat(user, "<span class='warning'>The unit already contains a helmet!</span>")
return return
if(!user.drop_item()) if(!user.transferItemToLoc(I, src))
return return
helmet = I helmet = I
else if(istype(I, /obj/item/clothing/mask)) else if(istype(I, /obj/item/clothing/mask))
if(mask) if(mask)
to_chat(user, "<span class='warning'>The unit already contains a mask!</span>") to_chat(user, "<span class='warning'>The unit already contains a mask!</span>")
return return
if(!user.drop_item()) if(!user.transferItemToLoc(I, src))
return return
mask = I mask = I
else else
if(storage) if(storage)
to_chat(user, "<span class='warning'>The auxiliary storage compartment is full!</span>") to_chat(user, "<span class='warning'>The auxiliary storage compartment is full!</span>")
return return
if(!user.drop_item()) if(!user.transferItemToLoc(I, src))
return return
storage = I storage = I
I.loc = src
visible_message("<span class='notice'>[user] inserts [I] into [src]</span>", "<span class='notice'>You load [I] into [src].</span>") visible_message("<span class='notice'>[user] inserts [I] into [src]</span>", "<span class='notice'>You load [I] into [src].</span>")
update_icon() update_icon()
return return
+2 -4
View File
@@ -150,11 +150,10 @@
to_chat(user, "<span class='warning'>The cover is screwed on, it won't pry off!</span>") to_chat(user, "<span class='warning'>The cover is screwed on, it won't pry off!</span>")
else if(istype(I, /obj/item/bombcore)) else if(istype(I, /obj/item/bombcore))
if(!payload) if(!payload)
if(!user.drop_item()) if(!user.transferItemToLoc(I, src))
return return
payload = I payload = I
to_chat(user, "<span class='notice'>You place [payload] into [src].</span>") to_chat(user, "<span class='notice'>You place [payload] into [src].</span>")
payload.loc = src
else else
to_chat(user, "<span class='warning'>[payload] is already loaded into [src]! You'll have to remove it first.</span>") to_chat(user, "<span class='warning'>[payload] is already loaded into [src]! You'll have to remove it first.</span>")
else if(istype(I, /obj/item/weldingtool)) else if(istype(I, /obj/item/weldingtool))
@@ -463,11 +462,10 @@
return return
else if(istype(I, /obj/item/reagent_containers/glass/beaker) || istype(I, /obj/item/reagent_containers/glass/bottle)) else if(istype(I, /obj/item/reagent_containers/glass/beaker) || istype(I, /obj/item/reagent_containers/glass/bottle))
if(beakers.len < max_beakers) if(beakers.len < max_beakers)
if(!user.drop_item()) if(!user.transferItemToLoc(I, src))
return return
beakers += I beakers += I
to_chat(user, "<span class='notice'>You load [src] with [I].</span>") to_chat(user, "<span class='notice'>You load [src] with [I].</span>")
I.loc = src
else else
to_chat(user, "<span class='warning'>The [I] wont fit! The [src] can only hold up to [max_beakers] containers.</span>") to_chat(user, "<span class='warning'>The [I] wont fit! The [src] can only hold up to [max_beakers] containers.</span>")
return return
+2 -4
View File
@@ -189,9 +189,8 @@
var/obj/item/reagent_containers/food/snacks/S = W var/obj/item/reagent_containers/food/snacks/S = W
if(!S.junkiness) if(!S.junkiness)
if(!iscompartmentfull(user)) if(!iscompartmentfull(user))
if(!user.drop_item()) if(!user.transferItemToLoc(W, src))
return return
W.loc = src
food_load(W) food_load(W)
to_chat(user, "<span class='notice'>You insert [W] into [src]'s chef compartment.</span>") to_chat(user, "<span class='notice'>You insert [W] into [src]'s chef compartment.</span>")
else else
@@ -279,9 +278,8 @@
if(!premium.len) if(!premium.len)
to_chat(user, "<span class='warning'>[src] doesn't have a coin slot.</span>") to_chat(user, "<span class='warning'>[src] doesn't have a coin slot.</span>")
return return
if(!user.drop_item()) if(!user.transferItemToLoc(W, src))
return return
W.loc = src
coin = W coin = W
to_chat(user, "<span class='notice'>You insert [W] into [src].</span>") to_chat(user, "<span class='notice'>You insert [W] into [src].</span>")
return return
@@ -426,7 +426,7 @@
if(!istype(T)) if(!istype(T))
return return
var/datum/gas_mixture/GM = new var/datum/gas_mixture/GM = new
GM.assert_gas("plasma") ASSERT_GAS("plasma", GM)
if(prob(10)) if(prob(10))
GM.gases["plasma"][MOLES] += 100 GM.gases["plasma"][MOLES] += 100
GM.temperature = 1500+T0C //should be enough to start a fire GM.temperature = 1500+T0C //should be enough to start a fire
+2 -3
View File
@@ -161,7 +161,7 @@
var/obj/item/mecha_parts/mecha_equipment/E = W var/obj/item/mecha_parts/mecha_equipment/E = W
spawn() spawn()
if(E.can_attach(src)) if(E.can_attach(src))
if(!user.drop_item()) if(!user.temporarilyRemoveItemFromInventory(W))
return return
E.attach(src) E.attach(src)
user.visible_message("[user] attaches [W] to [src].", "<span class='notice'>You attach [W] to [src].</span>") user.visible_message("[user] attaches [W] to [src].", "<span class='notice'>You attach [W] to [src].</span>")
@@ -226,11 +226,10 @@
else if(istype(W, /obj/item/stock_parts/cell)) else if(istype(W, /obj/item/stock_parts/cell))
if(state==4) if(state==4)
if(!cell) if(!cell)
if(!user.drop_item()) if(!user.transferItemToLoc(W, src))
return return
var/obj/item/stock_parts/cell/C = W var/obj/item/stock_parts/cell/C = W
to_chat(user, "<span class='notice'>You install the powercell.</span>") to_chat(user, "<span class='notice'>You install the powercell.</span>")
C.forceMove(src)
cell = C cell = C
log_message("Powercell installed") log_message("Powercell installed")
else else
@@ -128,7 +128,7 @@
/obj/effect/particle_effect/smoke/bad/smoke_mob(mob/living/carbon/M) /obj/effect/particle_effect/smoke/bad/smoke_mob(mob/living/carbon/M)
if(..()) if(..())
M.drop_item() M.drop_all_held_items()
M.adjustOxyLoss(1) M.adjustOxyLoss(1)
M.emote("cough") M.emote("cough")
return 1 return 1
@@ -169,7 +169,7 @@
qdel(H) qdel(H)
var/list/G_gases = G.gases var/list/G_gases = G.gases
if(G_gases["plasma"]) if(G_gases["plasma"])
G.assert_gas("n2") ASSERT_GAS("n2", G)
G_gases["n2"][MOLES] += (G_gases["plasma"][MOLES]) G_gases["n2"][MOLES] += (G_gases["plasma"][MOLES])
G_gases["plasma"][MOLES] = 0 G_gases["plasma"][MOLES] = 0
G.garbage_collect() G.garbage_collect()
@@ -205,7 +205,6 @@
/obj/effect/particle_effect/smoke/sleeping/smoke_mob(mob/living/carbon/M) /obj/effect/particle_effect/smoke/sleeping/smoke_mob(mob/living/carbon/M)
if(..()) if(..())
M.drop_item()
M.Sleeping(200) M.Sleeping(200)
M.emote("cough") M.emote("cough")
return 1 return 1
+1 -1
View File
@@ -531,7 +531,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
to_chat(M, "<span class='danger'>You become nearsighted!</span>") to_chat(M, "<span class='danger'>You become nearsighted!</span>")
if(prob(50)) if(prob(50))
if(M.stat != DEAD) if(M.stat != DEAD)
if(M.drop_item()) if(M.drop_all_held_items())
to_chat(M, "<span class='danger'>You drop what you're holding and clutch at your eyes!</span>") to_chat(M, "<span class='danger'>You drop what you're holding and clutch at your eyes!</span>")
M.adjust_blurriness(10) M.adjust_blurriness(10)
M.Unconscious(20) M.Unconscious(20)
@@ -15,7 +15,7 @@
origin_tech = "materials=1;engineering=1" origin_tech = "materials=1;engineering=1"
/obj/item/device/transfer_valve/IsAssemblyHolder() /obj/item/device/transfer_valve/IsAssemblyHolder()
return 1 return TRUE
/obj/item/device/transfer_valve/attackby(obj/item/item, mob/user, params) /obj/item/device/transfer_valve/attackby(obj/item/item, mob/user, params)
if(istype(item, /obj/item/tank)) if(istype(item, /obj/item/tank))
@@ -76,47 +76,46 @@
/obj/item/device/transfer_valve/Topic(href, href_list) /obj/item/device/transfer_valve/Topic(href, href_list)
..() ..()
if ( usr.stat || usr.restrained() ) if(!usr.canUseTopic(src))
return return
if (src.loc == usr) if(tank_one && href_list["tankone"])
if(tank_one && href_list["tankone"]) split_gases()
split_gases() valve_open = FALSE
valve_open = FALSE tank_one.forceMove(drop_location())
tank_one.loc = get_turf(src) tank_one = null
tank_one = null update_icon()
if((!tank_two || tank_two.w_class < WEIGHT_CLASS_BULKY) && (w_class > WEIGHT_CLASS_NORMAL))
w_class = WEIGHT_CLASS_NORMAL
else if(tank_two && href_list["tanktwo"])
split_gases()
valve_open = FALSE
tank_two.forceMove(drop_location())
tank_two = null
update_icon()
if((!tank_one || tank_one.w_class < WEIGHT_CLASS_BULKY) && (w_class > WEIGHT_CLASS_NORMAL))
w_class = WEIGHT_CLASS_NORMAL
else if(href_list["open"])
toggle_valve()
else if(attached_device)
if(href_list["rem_device"])
attached_device.forceMove(drop_location())
attached_device.holder = null
attached_device = null
update_icon() update_icon()
if((!tank_two || tank_two.w_class < WEIGHT_CLASS_BULKY) && (w_class > WEIGHT_CLASS_NORMAL)) if(href_list["device"])
w_class = WEIGHT_CLASS_NORMAL attached_device.attack_self(usr)
else if(tank_two && href_list["tanktwo"])
split_gases()
valve_open = FALSE
tank_two.loc = get_turf(src)
tank_two = null
update_icon()
if((!tank_one || tank_one.w_class < WEIGHT_CLASS_BULKY) && (w_class > WEIGHT_CLASS_NORMAL))
w_class = WEIGHT_CLASS_NORMAL
else if(href_list["open"])
toggle_valve()
else if(attached_device)
if(href_list["rem_device"])
attached_device.forceMove(get_turf(src))
attached_device.holder = null
attached_device = null
update_icon()
if(href_list["device"])
attached_device.attack_self(usr)
src.attack_self(usr) attack_self(usr)
src.add_fingerprint(usr) add_fingerprint(usr)
return
return
/obj/item/device/transfer_valve/proc/process_activation(obj/item/device/D) /obj/item/device/transfer_valve/proc/process_activation(obj/item/device/D)
if(toggle) if(toggle)
toggle = 0 toggle = FALSE
toggle_valve() toggle_valve()
spawn(50) // To stop a signal being spammed from a proxy sensor constantly going off or whatever addtimer(CALLBACK(src, .proc/toggle_off), 5) //To stop a signal being spammed from a proxy sensor constantly going off or whatever
toggle = 1
/obj/item/device/transfer_valve/proc/toggle_off()
toggle = TRUE
/obj/item/device/transfer_valve/update_icon() /obj/item/device/transfer_valve/update_icon()
cut_overlays() cut_overlays()
@@ -196,16 +195,13 @@
message_admins(bomb_message, 0, 1) message_admins(bomb_message, 0, 1)
log_game("[log_str1] [A.name][COORD(bombturf)] [log_str2] [log_str3]") log_game("[log_str1] [A.name][COORD(bombturf)] [log_str2] [log_str3]")
merge_gases() merge_gases()
spawn(20) // In case one tank bursts for(var/i in 1 to 6)
for (var/i=0,i<5,i++) addtimer(CALLBACK(src, .proc/update_icon), 20 + (i - 1) * 10)
src.update_icon()
sleep(10)
src.update_icon()
else if(valve_open && tank_one && tank_two) else if(valve_open && tank_one && tank_two)
split_gases() split_gases()
valve_open = FALSE valve_open = FALSE
src.update_icon() update_icon()
// this doesn't do anything but the timer etc. expects it to be here // this doesn't do anything but the timer etc. expects it to be here
// eventually maybe have it update icon to show state (timer, prox etc.) like old bombs // eventually maybe have it update icon to show state (timer, prox etc.) like old bombs
+3 -2
View File
@@ -59,7 +59,7 @@
if(target.handcuffed) if(target.handcuffed)
return return
if(!user.drop_item() && !dispense) if(!user.temporarilyRemoveItemFromInventory(src) && !dispense)
return return
var/obj/item/restraints/handcuffs/cuffs = src var/obj/item/restraints/handcuffs/cuffs = src
@@ -68,7 +68,7 @@
else if(dispense) else if(dispense)
cuffs = new type() cuffs = new type()
cuffs.loc = target cuffs.forceMove(target)
target.handcuffed = cuffs target.handcuffed = cuffs
target.update_handcuffed() target.update_handcuffed()
@@ -370,3 +370,4 @@
B.Crossed(hit_atom) B.Crossed(hit_atom)
qdel(src) qdel(src)
..() ..()
+3 -3
View File
@@ -233,7 +233,7 @@
/obj/item/melee/supermatter_sword/afterattack(target, mob/user, proximity_flag) /obj/item/melee/supermatter_sword/afterattack(target, mob/user, proximity_flag)
if(user && target == user) if(user && target == user)
user.drop_item() user.dropItemToGround(src)
if(proximity_flag) if(proximity_flag)
consume_everything(target) consume_everything(target)
..() ..()
@@ -243,7 +243,7 @@
if(ismob(target)) if(ismob(target))
var/mob/M var/mob/M
if(src.loc == M) if(src.loc == M)
M.drop_item() M.dropItemToGround(src)
consume_everything(target) consume_everything(target)
/obj/item/melee/supermatter_sword/pickup(user) /obj/item/melee/supermatter_sword/pickup(user)
@@ -267,7 +267,7 @@
/obj/item/melee/supermatter_sword/suicide_act(mob/user) /obj/item/melee/supermatter_sword/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] touches [src]'s blade. It looks like [user.p_theyre()] tired of waiting for the radiation to kill [user.p_them()]!</span>") user.visible_message("<span class='suicide'>[user] touches [src]'s blade. It looks like [user.p_theyre()] tired of waiting for the radiation to kill [user.p_them()]!</span>")
user.drop_item() user.dropItemToGround(src, TRUE)
shard.CollidedWith(user) shard.CollidedWith(user)
/obj/item/melee/supermatter_sword/proc/consume_everything(target) /obj/item/melee/supermatter_sword/proc/consume_everything(target)
+1 -2
View File
@@ -7,8 +7,7 @@
var/obj/machinery/machine var/obj/machinery/machine
/obj/item/pai_cable/proc/plugin(obj/machinery/M, mob/living/user) /obj/item/pai_cable/proc/plugin(obj/machinery/M, mob/living/user)
if(!user.drop_item()) if(!user.transferItemToLoc(src, M))
return return
user.visible_message("[user] inserts [src] into a data port on [M].", "<span class='notice'>You insert [src] into a data port on [M].</span>", "<span class='italics'>You hear the satisfying click of a wire jack fastening into place.</span>") user.visible_message("[user] inserts [src] into a data port on [M].", "<span class='notice'>You insert [src] into a data port on [M].</span>", "<span class='italics'>You hear the satisfying click of a wire jack fastening into place.</span>")
src.loc = M
machine = M machine = M
+1 -1
View File
@@ -122,7 +122,7 @@
return return
if(user.disabilities & CLUMSY && prob(75) && clumsyCheck) if(user.disabilities & CLUMSY && prob(75) && clumsyCheck)
user.visible_message("<span class='warning'>[user] loses their grip on [src], causing it to go off!</span>", "<span class='userdanger'>[src] slips out of your hands and goes off!</span>") user.visible_message("<span class='warning'>[user] loses their grip on [src], causing it to go off!</span>", "<span class='userdanger'>[src] slips out of your hands and goes off!</span>")
user.drop_item() user.dropItemToGround(src, TRUE)
if(prob(10)) if(prob(10))
target = get_turf(user) target = get_turf(user)
else else
+1 -1
View File
@@ -254,7 +254,7 @@
if(!isturf(loc)) if(!isturf(loc))
to_chat(user, "<span class='warning'>You cannot install[M], the frame has to be standing on the ground to be perfectly precise!</span>") to_chat(user, "<span class='warning'>You cannot install[M], the frame has to be standing on the ground to be perfectly precise!</span>")
return return
if(!user.drop_item()) if(!user.temporarilyRemoveItemFromInventory(M))
to_chat(user, "<span class='warning'>[M] is stuck to your hand!</span>") to_chat(user, "<span class='warning'>[M] is stuck to your hand!</span>")
return return
qdel(M) qdel(M)
+3 -3
View File
@@ -7,7 +7,7 @@
/obj/item/stack/wrapping_paper /obj/item/stack/wrapping_paper
name = "wrapping paper" name = "wrapping paper"
desc = "Wrap packages with this festive paper to make gifts." desc = "Wrap packages with this festive paper to make gifts."
icon = 'icons/obj/items_and_weapons.dmi' icon = 'icons/obj/stack_objects.dmi'
icon_state = "wrap_paper" icon_state = "wrap_paper"
flags_1 = NOBLUDGEON_1 flags_1 = NOBLUDGEON_1
amount = 25 amount = 25
@@ -28,7 +28,7 @@
/obj/item/stack/packageWrap /obj/item/stack/packageWrap
name = "package wrapper" name = "package wrapper"
desc = "You can use this to wrap items in." desc = "You can use this to wrap items in."
icon = 'icons/obj/items_and_weapons.dmi' icon = 'icons/obj/stack_objects.dmi'
icon_state = "deliveryPaper" icon_state = "deliveryPaper"
flags_1 = NOBLUDGEON_1 flags_1 = NOBLUDGEON_1
amount = 25 amount = 25
@@ -109,7 +109,7 @@
/obj/item/c_tube /obj/item/c_tube
name = "cardboard tube" name = "cardboard tube"
desc = "A tube... of cardboard." desc = "A tube... of cardboard."
icon = 'icons/obj/items_and_weapons.dmi' icon = 'icons/obj/stack_objects.dmi'
icon_state = "c_tube" icon_state = "c_tube"
throwforce = 0 throwforce = 0
w_class = WEIGHT_CLASS_TINY w_class = WEIGHT_CLASS_TINY
+1 -1
View File
@@ -48,7 +48,7 @@
/obj/item/storage/backpack/holding/suicide_act(mob/living/user) /obj/item/storage/backpack/holding/suicide_act(mob/living/user)
user.visible_message("<span class='suicide'>[user] is jumping into [src]! It looks like [user.p_theyre()] trying to commit suicide.</span>") user.visible_message("<span class='suicide'>[user] is jumping into [src]! It looks like [user.p_theyre()] trying to commit suicide.</span>")
user.drop_item() user.dropItemToGround(src, TRUE)
user.Stun(100, ignore_canstun = TRUE) user.Stun(100, ignore_canstun = TRUE)
sleep(20) sleep(20)
playsound(src, "rustle", 50, 1, -5) playsound(src, "rustle", 50, 1, -5)
+2 -4
View File
@@ -57,11 +57,9 @@
close_all() close_all()
to_chat(user, "<span class='notice'>You fold [src] flat.</span>") to_chat(user, "<span class='notice'>You fold [src] flat.</span>")
var/obj/item/I = new foldable(get_turf(src)) var/obj/item/I = new foldable
user.drop_item()
user.put_in_hands(I)
user.update_inv_hands()
qdel(src) qdel(src)
user.put_in_hands(I)
/obj/item/storage/box/attackby(obj/item/W, mob/user, params) /obj/item/storage/box/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/stack/packageWrap)) if(istype(W, /obj/item/stack/packageWrap))
+3 -1
View File
@@ -58,7 +58,9 @@
/obj/item/storage/fancy/remove_from_storage(obj/item/W, atom/new_location, burn = 0) /obj/item/storage/fancy/remove_from_storage(obj/item/W, atom/new_location, burn = 0)
fancy_open = TRUE fancy_open = TRUE
return ..() . = ..()
//Recall update icon with the fancy item snowflake arg (ugh)
update_icon(1)
/* /*
* Donut Box * Donut Box
+24 -16
View File
@@ -359,35 +359,43 @@
return 1 return 1
//Call this proc to handle the removal of an item from the storage item. The item will be moved to the atom sent as new_target //Call this proc to handle the removal of an item from the storage item. The item will be moved to the new_location target, if that is null it's being deleted
/obj/item/storage/proc/remove_from_storage(obj/item/W, atom/new_location) /obj/item/storage/proc/remove_from_storage(obj/item/W, atom/new_location)
if(!istype(W)) if(!istype(W))
return 0 return 0
if(istype(src, /obj/item/storage/fancy)) //Cache this as it should be reusable down the bottom, will not apply if anyone adds a sleep to dropped
var/obj/item/storage/fancy/F = src //or moving objects, things that should never happen
F.update_icon(1) var/list/seeing_mobs = can_see_contents()
for(var/mob/M in seeing_mobs)
for(var/mob/M in can_see_contents()) M.client.screen -= W
if(M.client)
M.client.screen -= W
if(ismob(loc)) if(ismob(loc))
var/mob/M = loc var/mob/M = loc
W.dropped(M) W.dropped(M)
W.layer = initial(W.layer)
W.plane = initial(W.plane)
W.forceMove(new_location)
for(var/mob/M in can_see_contents())
if(new_location)
W.forceMove(new_location)
//Reset the items values
W.layer = initial(W.layer)
W.plane = initial(W.plane)
W.mouse_opacity = initial(W.mouse_opacity)
if(W.maptext)
W.maptext = ""
//We don't want to call this if the item is being destroyed
W.on_exit_storage(src)
else
//Being destroyed, just move to nullspace now (so it's not in contents for the icon update)
W.moveToNullspace()
for(var/mob/M in seeing_mobs)
orient2hud(M) orient2hud(M)
show_to(M) show_to(M)
if(W.maptext)
W.maptext = ""
W.on_exit_storage(src)
update_icon() update_icon()
W.mouse_opacity = initial(W.mouse_opacity)
return 1 return 1
/obj/item/storage/deconstruct(disassembled = TRUE) /obj/item/storage/deconstruct(disassembled = TRUE)
+1 -1
View File
@@ -17,7 +17,7 @@
/obj/item/tank/jetpack/New() /obj/item/tank/jetpack/New()
..() ..()
if(gas_type) if(gas_type)
air_contents.assert_gas(gas_type) ASSERT_GAS(gas_type,air_contents)
air_contents.gases[gas_type][MOLES] = (6 * ONE_ATMOSPHERE) * volume / (R_IDEAL_GAS_EQUATION * T20C) air_contents.gases[gas_type][MOLES] = (6 * ONE_ATMOSPHERE) * volume / (R_IDEAL_GAS_EQUATION * T20C)
ion_trail = new ion_trail = new
+7 -10
View File
@@ -21,7 +21,7 @@
/obj/item/tank/internals/oxygen/New() /obj/item/tank/internals/oxygen/New()
..() ..()
air_contents.assert_gas("o2") ASSERT_GAS("o2", air_contents)
air_contents.gases["o2"][MOLES] = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) air_contents.gases["o2"][MOLES] = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
return return
@@ -87,7 +87,7 @@
/obj/item/tank/internals/plasma/New() /obj/item/tank/internals/plasma/New()
..() ..()
air_contents.assert_gas("plasma") ASSERT_GAS("plasma", air_contents)
air_contents.gases["plasma"][MOLES] = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) air_contents.gases["plasma"][MOLES] = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
return return
@@ -105,8 +105,7 @@
return ..() return ..()
/obj/item/tank/internals/plasma/full/New() /obj/item/tank/internals/plasma/full/New()
..() ..() // Plasma asserted in parent
air_contents.assert_gas("plasma")
air_contents.gases["plasma"][MOLES] = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) air_contents.gases["plasma"][MOLES] = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
return return
@@ -125,13 +124,12 @@
/obj/item/tank/internals/plasmaman/New() /obj/item/tank/internals/plasmaman/New()
..() ..()
air_contents.assert_gas("plasma") ASSERT_GAS("plasma", air_contents)
air_contents.gases["plasma"][MOLES] = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) air_contents.gases["plasma"][MOLES] = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
return return
/obj/item/tank/internals/plasmaman/full/New() /obj/item/tank/internals/plasmaman/full/New()
..() ..() // Plasma asserted in parent
air_contents.assert_gas("plasma")
air_contents.gases["plasma"][MOLES] = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) air_contents.gases["plasma"][MOLES] = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
return return
@@ -145,8 +143,7 @@
w_class = WEIGHT_CLASS_SMALL //thanks i forgot this w_class = WEIGHT_CLASS_SMALL //thanks i forgot this
/obj/item/tank/internals/plasmaman/belt/full/New() /obj/item/tank/internals/plasmaman/belt/full/New()
..() ..() // Plasma asserted in parent
air_contents.assert_gas("plasma")
air_contents.gases["plasma"][MOLES] = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) air_contents.gases["plasma"][MOLES] = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
return return
@@ -169,7 +166,7 @@
/obj/item/tank/internals/emergency_oxygen/New() /obj/item/tank/internals/emergency_oxygen/New()
..() ..()
air_contents.assert_gas("o2") ASSERT_GAS("o2", air_contents)
air_contents.gases["o2"][MOLES] = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) air_contents.gases["o2"][MOLES] = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
return return
+4 -4
View File
@@ -1022,8 +1022,8 @@
throwforce = 12 //pelt your enemies to death with lumps of snow throwforce = 12 //pelt your enemies to death with lumps of snow
/obj/item/toy/snowball/afterattack(atom/target as mob|obj|turf|area, mob/user) /obj/item/toy/snowball/afterattack(atom/target as mob|obj|turf|area, mob/user)
user.drop_item() if(user.dropItemToGround(src))
src.throw_at(target, throw_range, throw_speed) throw_at(target, throw_range, throw_speed)
/obj/item/toy/snowball/throw_impact(atom/hit_atom) /obj/item/toy/snowball/throw_impact(atom/hit_atom)
if(!..()) if(!..())
@@ -1041,8 +1041,8 @@
w_class = WEIGHT_CLASS_BULKY //Stops people from hiding it in their bags/pockets w_class = WEIGHT_CLASS_BULKY //Stops people from hiding it in their bags/pockets
/obj/item/toy/beach_ball/afterattack(atom/target as mob|obj|turf|area, mob/user) /obj/item/toy/beach_ball/afterattack(atom/target as mob|obj|turf|area, mob/user)
user.drop_item() if(user.dropItemToGround(src))
src.throw_at(target, throw_range, throw_speed) throw_at(target, throw_range, throw_speed)
/* /*
* Xenomorph action figure * Xenomorph action figure
+2 -2
View File
@@ -49,11 +49,11 @@
if(user.canmove) if(user.canmove)
climb_structure(user) climb_structure(user)
return return
if ((!( istype(O, /obj/item/weapon) ) || user.get_active_held_item() != O)) if ((!( istype(O, /obj/item) ) || user.get_active_held_item() != O))
return return
if(iscyborg(user)) if(iscyborg(user))
return return
if(!user.drop_item()) if(!user.drop_all_held_items())
return return
if (O.loc != src.loc) if (O.loc != src.loc)
step(O, get_dir(O, src)) step(O, get_dir(O, src))
@@ -58,14 +58,14 @@
playsound(src.loc, W.usesound, 50, 1) playsound(src.loc, W.usesound, 50, 1)
deconstruct() deconstruct()
else if(istype(W, /obj/item/assembly/shock_kit)) else if(istype(W, /obj/item/assembly/shock_kit))
if(!user.drop_item()) if(!user.temporarilyRemoveItemFromInventory(W))
return return
var/obj/item/assembly/shock_kit/SK = W var/obj/item/assembly/shock_kit/SK = W
var/obj/structure/chair/e_chair/E = new /obj/structure/chair/e_chair(src.loc) var/obj/structure/chair/e_chair/E = new /obj/structure/chair/e_chair(src.loc)
playsound(src.loc, 'sound/items/deconstruct.ogg', 50, 1) playsound(src.loc, 'sound/items/deconstruct.ogg', 50, 1)
E.setDir(dir) E.setDir(dir)
E.part = SK E.part = SK
SK.loc = E SK.forceMove(E)
SK.master = E SK.master = E
qdel(src) qdel(src)
else else
+4 -5
View File
@@ -27,7 +27,8 @@ LINEN BINS
..() ..()
/obj/item/bedsheet/attack_self(mob/user) /obj/item/bedsheet/attack_self(mob/user)
user.drop_item() if(!user.dropItemToGround(src))
return
if(layer == initial(layer)) if(layer == initial(layer))
layer = ABOVE_MOB_LAYER layer = ABOVE_MOB_LAYER
to_chat(user, "<span class='notice'>You cover yourself with [src].</span>") to_chat(user, "<span class='notice'>You cover yourself with [src].</span>")
@@ -275,18 +276,16 @@ LINEN BINS
/obj/structure/bedsheetbin/attackby(obj/item/I, mob/user, params) /obj/structure/bedsheetbin/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/bedsheet)) if(istype(I, /obj/item/bedsheet))
if(!user.drop_item()) if(!user.transferItemToLoc(I, src))
return return
I.loc = src
sheets.Add(I) sheets.Add(I)
amount++ amount++
to_chat(user, "<span class='notice'>You put [I] in [src].</span>") to_chat(user, "<span class='notice'>You put [I] in [src].</span>")
update_icon() update_icon()
else if(amount && !hidden && I.w_class < WEIGHT_CLASS_BULKY) //make sure there's sheets to hide it among, make sure nothing else is hidden in there. else if(amount && !hidden && I.w_class < WEIGHT_CLASS_BULKY) //make sure there's sheets to hide it among, make sure nothing else is hidden in there.
if(!user.drop_item()) if(!user.transferItemToLoc(I, src))
to_chat(user, "<span class='warning'>\The [I] is stuck to your hand, you cannot hide it among the sheets!</span>") to_chat(user, "<span class='warning'>\The [I] is stuck to your hand, you cannot hide it among the sheets!</span>")
return return
I.loc = src
hidden = I hidden = I
to_chat(user, "<span class='notice'>You hide [I] among the sheets.</span>") to_chat(user, "<span class='notice'>You hide [I] among the sheets.</span>")
@@ -229,8 +229,7 @@
"<span class='notice'>You cut \the [src] apart with \the [W].</span>") "<span class='notice'>You cut \the [src] apart with \the [W].</span>")
deconstruct(TRUE) deconstruct(TRUE)
return 0 return 0
if(user.drop_item()) // so we put in unlit welder too if(user.transferItemToLoc(W, drop_location())) // so we put in unlit welder too
W.forceMove(loc)
return 1 return 1
else if(istype(W, /obj/item/weldingtool) && can_weld_shut) else if(istype(W, /obj/item/weldingtool) && can_weld_shut)
var/obj/item/weldingtool/WT = W var/obj/item/weldingtool/WT = W
@@ -602,10 +602,9 @@
if(do_after(user, 40, target = src)) if(do_after(user, 40, target = src))
if( src.state != 1 ) if( src.state != 1 )
return return
if(!user.drop_item()) if(!user.transferItemToLoc(W, src))
return return
W.loc = src
to_chat(user, "<span class='notice'>You install the airlock electronics.</span>") to_chat(user, "<span class='notice'>You install the airlock electronics.</span>")
src.state = 2 src.state = 2
src.name = "near finished airlock assembly" src.name = "near finished airlock assembly"
+1 -2
View File
@@ -54,9 +54,8 @@
return return
if(istype(I, /obj/item/extinguisher)) if(istype(I, /obj/item/extinguisher))
if(!stored_extinguisher && opened) if(!stored_extinguisher && opened)
if(!user.drop_item()) if(!user.transferItemToLoc(I, src))
return return
contents += I
stored_extinguisher = I stored_extinguisher = I
to_chat(user, "<span class='notice'>You place [I] in [src].</span>") to_chat(user, "<span class='notice'>You place [I] in [src].</span>")
update_icon() update_icon()
+1 -2
View File
@@ -53,10 +53,9 @@
if(F.wielded) if(F.wielded)
to_chat(user, "<span class='warning'>Unwield the [F.name] first.</span>") to_chat(user, "<span class='warning'>Unwield the [F.name] first.</span>")
return return
if(!user.drop_item()) if(!user.transferItemToLoc(F, src))
return return
fireaxe = F fireaxe = F
F.forceMove(src)
to_chat(user, "<span class='caution'>You place the [F.name] back in the [name].</span>") to_chat(user, "<span class='caution'>You place the [F.name] back in the [name].</span>")
update_icon() update_icon()
return return
+1 -2
View File
@@ -259,9 +259,8 @@
else if(istype(W, /obj/item/pipe)) else if(istype(W, /obj/item/pipe))
var/obj/item/pipe/P = W var/obj/item/pipe/P = W
if (P.pipe_type in list(0, 1, 5)) //simple pipes, simple bends, and simple manifolds. if (P.pipe_type in list(0, 1, 5)) //simple pipes, simple bends, and simple manifolds.
if(!user.drop_item()) if(!user.transferItemToLoc(P, drop_location()))
return return
P.loc = src.loc
to_chat(user, "<span class='notice'>You fit the pipe into \the [src].</span>") to_chat(user, "<span class='notice'>You fit the pipe into \the [src].</span>")
else else
return ..() return ..()
+1 -2
View File
@@ -39,9 +39,8 @@
return return
if(istype(I, gun_category) && open) if(istype(I, gun_category) && open)
if(LAZYLEN(contents) < capacity) if(LAZYLEN(contents) < capacity)
if(!user.drop_item()) if(!user.transferItemToLoc(I, src))
return return
I.forceMove(src)
to_chat(user, "<span class='notice'>You place [I] in [src].</span>") to_chat(user, "<span class='notice'>You place [I] in [src].</span>")
update_icon() update_icon()
else else
+1 -2
View File
@@ -32,9 +32,8 @@
return 1 return 1
/obj/structure/janitorialcart/proc/put_in_cart(obj/item/I, mob/user) /obj/structure/janitorialcart/proc/put_in_cart(obj/item/I, mob/user)
if(!user.drop_item()) if(!user.transferItemToLoc(I, src))
return return
I.loc = src
updateUsrDialog() updateUsrDialog()
to_chat(user, "<span class='notice'>You put [I] into [src].</span>") to_chat(user, "<span class='notice'>You put [I] into [src].</span>")
return return
+1 -2
View File
@@ -159,10 +159,9 @@ FLOOR SAFES
. = 1 //no afterattack . = 1 //no afterattack
if(I.w_class + space <= maxspace) if(I.w_class + space <= maxspace)
space += I.w_class space += I.w_class
if(!user.drop_item()) if(!user.transferItemToLoc(I, src))
to_chat(user, "<span class='warning'>\The [I] is stuck to your hand, you cannot put it in the safe!</span>") to_chat(user, "<span class='warning'>\The [I] is stuck to your hand, you cannot put it in the safe!</span>")
return return
I.forceMove(src)
to_chat(user, "<span class='notice'>You put [I] in [src].</span>") to_chat(user, "<span class='notice'>You put [I] in [src].</span>")
updateUsrDialog() updateUsrDialog()
return return
-1
View File
@@ -104,7 +104,6 @@
"<span class='notice'>You attach the sign to [T].</span>") "<span class='notice'>You attach the sign to [T].</span>")
playsound(T, 'sound/items/deconstruct.ogg', 50, 1) playsound(T, 'sound/items/deconstruct.ogg', 50, 1)
new sign_path(T) new sign_path(T)
user.drop_item()
qdel(src) qdel(src)
else else
return ..() return ..()
+4 -6
View File
@@ -131,8 +131,7 @@
// If the tray IS empty, continue on (tray will be placed on the table like other items) // If the tray IS empty, continue on (tray will be placed on the table like other items)
if(user.a_intent != INTENT_HARM && !(I.flags_1 & ABSTRACT_1)) if(user.a_intent != INTENT_HARM && !(I.flags_1 & ABSTRACT_1))
if(user.drop_item()) if(user.transferItemToLoc(I, drop_location()))
I.Move(loc)
var/list/click_params = params2list(params) var/list/click_params = params2list(params)
//Center the icon where the user clicked. //Center the icon where the user clicked.
if(!click_params || !click_params["icon-x"] || !click_params["icon-y"]) if(!click_params || !click_params["icon-x"] || !click_params["icon-y"])
@@ -439,7 +438,7 @@
/obj/structure/rack/MouseDrop_T(obj/O, mob/user) /obj/structure/rack/MouseDrop_T(obj/O, mob/user)
if ((!( istype(O, /obj/item) ) || user.get_active_held_item() != O)) if ((!( istype(O, /obj/item) ) || user.get_active_held_item() != O))
return return
if(!user.drop_item()) if(!user.dropItemToGround(O))
return return
if(O.loc != src.loc) if(O.loc != src.loc)
step(O, get_dir(O, src)) step(O, get_dir(O, src))
@@ -452,8 +451,7 @@
return return
if(user.a_intent == INTENT_HARM) if(user.a_intent == INTENT_HARM)
return ..() return ..()
if(user.drop_item()) if(user.transferItemToLoc(W, drop_location()))
W.Move(loc)
return 1 return 1
/obj/structure/rack/attack_paw(mob/living/user) /obj/structure/rack/attack_paw(mob/living/user)
@@ -516,7 +514,7 @@
building = TRUE building = TRUE
to_chat(user, "<span class='notice'>You start constructing a rack...</span>") to_chat(user, "<span class='notice'>You start constructing a rack...</span>")
if(do_after(user, 50, target = user, progress=TRUE)) if(do_after(user, 50, target = user, progress=TRUE))
if(!user.drop_item()) if(!user.temporarilyRemoveItemFromInventory(src))
return return
var/obj/structure/rack/R = new /obj/structure/rack(user.loc) var/obj/structure/rack/R = new /obj/structure/rack(user.loc)
user.visible_message("<span class='notice'>[user] assembles \a [R].\ user.visible_message("<span class='notice'>[user] assembles \a [R].\
@@ -62,9 +62,8 @@
to_chat(user, "<span class='notice'>[src] can't hold any more of [I].</span>") to_chat(user, "<span class='notice'>[src] can't hold any more of [I].</span>")
return return
if(!user.drop_item()) if(!user.transferItemToLoc(I, src))
return return
I.loc = src
to_chat(user, "<span class='notice'>You put [I] in [src].</span>") to_chat(user, "<span class='notice'>You put [I] in [src].</span>")
update_icon() update_icon()
+1 -2
View File
@@ -23,12 +23,11 @@
/obj/structure/target_stake/attackby(obj/item/target/T, mob/user) /obj/structure/target_stake/attackby(obj/item/target/T, mob/user)
if(pinned_target) if(pinned_target)
return return
if(istype(T) && user.drop_item()) if(istype(T) && user.transferItemToLoc(T, drop_location()))
pinned_target = T pinned_target = T
T.pinnedLoc = src T.pinnedLoc = src
T.density = TRUE T.density = TRUE
T.layer = OBJ_LAYER + 0.01 T.layer = OBJ_LAYER + 0.01
T.loc = loc
to_chat(user, "<span class='notice'>You slide the target into the stake.</span>") to_chat(user, "<span class='notice'>You slide the target into the stake.</span>")
/obj/structure/target_stake/attack_hand(mob/user) /obj/structure/target_stake/attack_hand(mob/user)
+2 -4
View File
@@ -88,10 +88,9 @@
if(w_items + I.w_class > WEIGHT_CLASS_HUGE) if(w_items + I.w_class > WEIGHT_CLASS_HUGE)
to_chat(user, "<span class='warning'>The cistern is full!</span>") to_chat(user, "<span class='warning'>The cistern is full!</span>")
return return
if(!user.drop_item()) if(!user.transferItemToLoc(I, src))
to_chat(user, "<span class='warning'>\The [I] is stuck to your hand, you cannot put it in the cistern!</span>") to_chat(user, "<span class='warning'>\The [I] is stuck to your hand, you cannot put it in the cistern!</span>")
return return
I.loc = src
w_items += I.w_class w_items += I.w_class
to_chat(user, "<span class='notice'>You carefully place [I] into the cistern.</span>") to_chat(user, "<span class='notice'>You carefully place [I] into the cistern.</span>")
@@ -173,10 +172,9 @@
if(I.w_class > 1) if(I.w_class > 1)
to_chat(user, "<span class='warning'>[I] is too large for the drain enclosure.</span>") to_chat(user, "<span class='warning'>[I] is too large for the drain enclosure.</span>")
return return
if(!user.drop_item()) if(!user.transferItemToLoc(I, src))
to_chat(user, "<span class='warning'>\[I] is stuck to your hand, you cannot put it in the drain enclosure!</span>") to_chat(user, "<span class='warning'>\[I] is stuck to your hand, you cannot put it in the drain enclosure!</span>")
return return
I.forceMove(src)
hiddenitem = I hiddenitem = I
to_chat(user, "<span class='notice'>You place [I] into the drain enclosure.</span>") to_chat(user, "<span class='notice'>You place [I] into the drain enclosure.</span>")
@@ -208,11 +208,10 @@
//Adding airlock electronics for access. Step 6 complete. //Adding airlock electronics for access. Step 6 complete.
else if(istype(W, /obj/item/electronics/airlock)) else if(istype(W, /obj/item/electronics/airlock))
if(!user.drop_item()) if(!user.transferItemToLoc(W, src))
return return
playsound(loc, W.usesound, 100, 1) playsound(loc, W.usesound, 100, 1)
user.visible_message("[user] installs the electronics into the airlock assembly.", "<span class='notice'>You start to install electronics into the airlock assembly...</span>") user.visible_message("[user] installs the electronics into the airlock assembly.", "<span class='notice'>You start to install electronics into the airlock assembly...</span>")
W.loc = src
if(do_after(user, 40, target = src)) if(do_after(user, 40, target = src))
if(!src || electronics) if(!src || electronics)
@@ -72,7 +72,7 @@
if(..()) if(..())
return return
if(istype(C, /obj/item/light/bulb)) //only for light tiles if(istype(C, /obj/item/light/bulb)) //only for light tiles
if(state && user.drop_item()) if(state && user.temporarilyRemoveItemFromInventory(C))
qdel(C) qdel(C)
state = 0 //fixing it by bashing it with a light bulb, fun eh? state = 0 //fixing it by bashing it with a light bulb, fun eh?
update_icon() update_icon()
+1 -1
View File
@@ -289,7 +289,7 @@
continue continue
var/list/S_gases = S.air.gases var/list/S_gases = S.air.gases
for(var/id in S_gases) for(var/id in S_gases)
total.assert_gas(id) ASSERT_GAS(id, total)
total_gases[id][MOLES] += S_gases[id][MOLES] total_gases[id][MOLES] += S_gases[id][MOLES]
total.temperature += S.air.temperature total.temperature += S.air.temperature

Some files were not shown because too many files have changed in this diff Show More