diff --git a/bot/NanoTrasenBot.py b/bot/NanoTrasenBot.py index 40ea8325772..2e0678bbd96 100644 --- a/bot/NanoTrasenBot.py +++ b/bot/NanoTrasenBot.py @@ -1300,17 +1300,7 @@ while True: print sender+" Has now joined" users.append(sender) ##### - if ".fi" in data[0] and sender.lower() == "skibiliano": - operators.append(sender) if sender.lower() not in peopleheknows[0]: - if data[0].split("!")[1] in peopleheknows[1]: - appendion = "...you do seem familiar however" - else: - appendion = "" - if data[1][1].lower() == channel or data[1][1].lower() == channel[1:]: - conn.privmsg(data[1][1],CORE_DATA.greeting.replace("USER",sender)+" "+appendion) - else: - conn.privmsg(data[1][1],"Hello! Haven't seen you here before! Happy to meet you! %s" %(appendion)) peopleheknows[0].append(sender.lower()) peopleheknows[1].append(data[0].split("!")[1]) with open("peopleheknows.cache","w") as peoplehecache: diff --git a/code/datums/wires/wires.dm b/code/datums/wires/wires.dm index e483513c40a..89b57e6a16e 100644 --- a/code/datums/wires/wires.dm +++ b/code/datums/wires/wires.dm @@ -134,7 +134,8 @@ var/list/wireColours = list("red", "blue", "green", "black", "orange", "brown", if(istype(I, /obj/item/device/assembly)) var/obj/item/device/assembly/A = I; if(A.attachable) - L.drop_item() + if(!L.drop_item()) + return Attach(colour, A) else L << "You need a attachable assembly!" diff --git a/code/game/dna.dm b/code/game/dna.dm index 60fa4a6ca9d..614e4698f55 100644 --- a/code/game/dna.dm +++ b/code/game/dna.dm @@ -519,7 +519,8 @@ /obj/machinery/computer/scan_consolenew/attackby(obj/item/I as obj, mob/user as mob, params) if (istype(I, /obj/item/weapon/disk/data)) //INSERT SOME DISKETTES if (!src.diskette) - user.drop_item() + if(!user.drop_item()) + return I.loc = src src.diskette = I user << "You insert [I]." diff --git a/code/game/gamemodes/abduction/machinery/dispenser.dm b/code/game/gamemodes/abduction/machinery/dispenser.dm index d346e0366a5..33b4944785b 100644 --- a/code/game/gamemodes/abduction/machinery/dispenser.dm +++ b/code/game/gamemodes/abduction/machinery/dispenser.dm @@ -60,7 +60,8 @@ /obj/machinery/abductor/gland_dispenser/attackby(obj/item/weapon/W, mob/user, params) if(istype(W, /obj/item/gland)) - user.drop_item() + if(!user.drop_item()) + return W.loc = src for(var/i=1,i<=gland_colors.len,i++) if(gland_types[i] == W.type) diff --git a/code/game/gamemodes/gang/dominator.dm b/code/game/gamemodes/gang/dominator.dm index 79b65c3bc98..827f5625ef4 100644 --- a/code/game/gamemodes/gang/dominator.dm +++ b/code/game/gamemodes/gang/dominator.dm @@ -77,16 +77,17 @@ mode.A_timer = "OFFLINE" if(gang == "B") mode.B_timer = "OFFLINE" - if(!isnum(mode.A_timer) && !isnum(mode.B_timer)) - SSshuttle.emergencyNoEscape = 0 - if(SSshuttle.emergency.mode == SHUTTLE_STRANDED) - SSshuttle.emergency.mode = SHUTTLE_DOCKED - SSshuttle.emergency.timer = world.time - priority_announce("Hostile enviroment resolved. You have 3 minutes to board the Emergency Shuttle.", null, 'sound/AI/shuttledock.ogg', "Priority") - else - priority_announce("All hostile activity within station systems have ceased.","Network Alert") - if(get_security_level() == "delta") - set_security_level("red") + if(gang) + if(!isnum(mode.A_timer) && !isnum(mode.B_timer)) + SSshuttle.emergencyNoEscape = 0 + if(SSshuttle.emergency.mode == SHUTTLE_STRANDED) + SSshuttle.emergency.mode = SHUTTLE_DOCKED + SSshuttle.emergency.timer = world.time + priority_announce("Hostile enviroment resolved. You have 3 minutes to board the Emergency Shuttle.", null, 'sound/AI/shuttledock.ogg', "Priority") + else + priority_announce("All hostile activity within station systems have ceased.","Network Alert") + if(get_security_level() == "delta") + set_security_level("red") ticker.mode.message_gangtools(((gang=="A") ? ticker.mode.A_tools : ticker.mode.B_tools),"Hostile takeover cancelled: Dominator is no longer operational.",1,1) SetLuminosity(0) icon_state = "dominator-broken" diff --git a/code/game/gamemodes/gang/gang.dm b/code/game/gamemodes/gang/gang.dm index a6302fc2eea..3ed48842e72 100644 --- a/code/game/gamemodes/gang/gang.dm +++ b/code/game/gamemodes/gang/gang.dm @@ -273,7 +273,7 @@ if(check && isloyal(gangster_mind.current)) //Check to see if the potential gangster is implanted return 0 if(gangster_mind in (A_bosses | A_gang | B_bosses | B_gang)) - return 0 + return 1 if(gang == "A") A_gang += gangster_mind else @@ -290,7 +290,7 @@ gangster_mind.current.attack_log += "\[[time_stamp()]\] Has been converted to the [gang=="A" ? "[gang_name("A")] Gang (A)" : "[gang_name("B")] Gang (B)"]!" gangster_mind.special_role = "[gang=="A" ? "[gang_name("A")] Gang (A)" : "[gang_name("B")] Gang (B)"]" update_gang_icons_added(gangster_mind,gang) - return 1 + return 2 //////////////////////////////////////////////////////////////////// //Deals with players reverting to neutral (Not a gangster anymore)// //////////////////////////////////////////////////////////////////// diff --git a/code/game/gamemodes/gang/recaller.dm b/code/game/gamemodes/gang/recaller.dm index 900c32f0c3c..8459d1fc3ea 100644 --- a/code/game/gamemodes/gang/recaller.dm +++ b/code/game/gamemodes/gang/recaller.dm @@ -78,18 +78,24 @@ dat += "(10 Influence) " if(points >= 10) - dat += "10mm Ammo
" + dat += "10mm Ammo
" else dat += "10mm Ammo
" - dat += "(50 Influence) " - if(points >= 50) - dat += "Thompson SMG
" + dat += "(40 Influence) " + if(points >= 40) + dat += "Mini Uzi
" else - dat += "Thompson SMG
" + dat += "Mini Uzi
" + + dat += "(25 Influence) " + if(points >= 25) + dat += "Uzi Ammo
" + else + dat += "Uzi Magazine
" dat += "
" - dat += "Purchase Utilities:
" + dat += "Purchase Equipment:
" dat += "(5 Influence) " if(points >= 5) @@ -163,14 +169,18 @@ if(points >= 20) item_type = /obj/item/weapon/gun/projectile/automatic/pistol points = 20 - if("ammo") + if("10mmammo") if(points >= 10) item_type = /obj/item/ammo_box/magazine/m10mm points = 10 - if("SMG") - if(points >= 50) - item_type = /obj/item/weapon/gun/projectile/automatic/tommygun - points = 50 + if("uzi") + if(points >= 40) + item_type = /obj/item/weapon/gun/projectile/automatic/mini_uzi + points = 40 + if("9mmammo") + if(points >= 25) + item_type = /obj/item/ammo_box/magazine/uzim9mm + points = 25 if("vest") if(points >= 10) item_type = /obj/item/clothing/suit/armor/bulletproof @@ -357,4 +367,4 @@ /obj/item/device/gangtool/lt boss = 0 - outfits = 1 \ No newline at end of file + outfits = 1 diff --git a/code/game/gamemodes/shadowling/shadowling.dm b/code/game/gamemodes/shadowling/shadowling.dm index 7bd0a665f3f..b9f170b2a92 100644 --- a/code/game/gamemodes/shadowling/shadowling.dm +++ b/code/game/gamemodes/shadowling/shadowling.dm @@ -85,7 +85,8 @@ Made by Xhuis if(config.protect_assistant_from_antagonist) restricted_jobs += "Assistant" - var/shadowlings = 2 //How many shadowlings there are; hardcoded to 2 + var/shadowlings = max(2, round(num_players()/10)) + while(shadowlings) var/datum/mind/shadow = pick(antag_candidates) diff --git a/code/game/gamemodes/wizard/rightandwrong.dm b/code/game/gamemodes/wizard/rightandwrong.dm index 603c2ff0d88..1a0cbefdc95 100644 --- a/code/game/gamemodes/wizard/rightandwrong.dm +++ b/code/game/gamemodes/wizard/rightandwrong.dm @@ -1,7 +1,7 @@ //In this file: Summon Magic/Summon Guns/Summon Events /proc/rightandwrong(var/summon_type, var/mob/user, var/survivor_probability) //0 = Summon Guns, 1 = Summon Magic - var/list/gunslist = list("taser","egun","laser","revolver","detective","c20r","nuclear","deagle","gyrojet","pulse","suppressed","cannon","doublebarrel","shotgun","combatshotgun","bulldog","mateba","sabr","crossbow","saw","car","boltaction","speargun","arg") + var/list/gunslist = list("taser","egun","laser","revolver","detective","c20r","nuclear","deagle","gyrojet","pulse","suppressed","cannon","doublebarrel","shotgun","combatshotgun","bulldog","mateba","sabr","crossbow","saw","car","boltaction","speargun","arg","uzi") var/list/magiclist = list("fireball","smoke","blind","mindswap","forcewall","knock","horsemask","charge", "summonitem", "wandnothing", "wanddeath", "wandresurrection", "wandpolymorph", "wandteleport", "wanddoor", "wandfireball", "staffchange", "staffhealing", "armor", "scrying","staffdoor", "special") var/list/magicspeciallist = list("staffchange","staffanimation", "wandbelt", "contract", "staffchaos", "necromantic") @@ -63,6 +63,8 @@ new /obj/item/weapon/gun/projectile/shotgun/boltaction(get_turf(H)) if("speargun") new /obj/item/weapon/gun/projectile/automatic/speargun(get_turf(H)) + if("uzi") + new /obj/item/weapon/gun/projectile/automatic/mini_uzi(get_turf(H)) if("cannon") var/obj/item/weapon/gun/energy/lasercannon/gat = new(get_turf(H)) gat.pin = new /obj/item/device/firing_pin //no authentication pins for spawned guns. fun allowed. diff --git a/code/game/machinery/PDApainter.dm b/code/game/machinery/PDApainter.dm index c563482d147..ab226c94879 100644 --- a/code/game/machinery/PDApainter.dm +++ b/code/game/machinery/PDApainter.dm @@ -48,7 +48,8 @@ else var/obj/item/device/pda/P = usr.get_active_hand() if(istype(P)) - user.drop_item() + if(!user.drop_item()) + return storedpda = P P.loc = src P.add_fingerprint(usr) diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index 57819a2d177..7be7a95a65b 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -735,11 +735,11 @@ return if(0) if(istype(W, /obj/item/weapon/airalarm_electronics)) - user << "You insert the circuit." - buildstage = 1 - update_icon() - user.drop_item() - qdel(W) + if(user.unEquip(W)) + user << "You insert the circuit." + buildstage = 1 + update_icon() + qdel(W) return if(istype(W, /obj/item/weapon/wrench)) diff --git a/code/game/machinery/atmoalter/portable_atmospherics.dm b/code/game/machinery/atmoalter/portable_atmospherics.dm index 25a2aa88a2d..85b57fb7413 100644 --- a/code/game/machinery/atmoalter/portable_atmospherics.dm +++ b/code/game/machinery/atmoalter/portable_atmospherics.dm @@ -67,8 +67,10 @@ if ((istype(W, /obj/item/weapon/tank) && !( src.destroyed ))) if (src.holding) return + if(!user.drop_item()) + return + var/obj/item/weapon/tank/T = W - user.drop_item() T.loc = src src.holding = T update_icon() diff --git a/code/game/machinery/bots/cleanbot.dm b/code/game/machinery/bots/cleanbot.dm index f1dd0e405c3..f73276842c3 100644 --- a/code/game/machinery/bots/cleanbot.dm +++ b/code/game/machinery/bots/cleanbot.dm @@ -243,7 +243,8 @@ text("[on ? "On" : "Off"]")) /obj/item/weapon/bucket_sensor/attackby(var/obj/item/W, mob/user as mob, params) ..() if(istype(W, /obj/item/robot_parts/l_arm) || istype(W, /obj/item/robot_parts/r_arm)) - user.drop_item() + if(!user.unEquip(W)) + return qdel(W) var/turf/T = get_turf(loc) var/obj/machinery/bot/cleanbot/A = new /obj/machinery/bot/cleanbot(T) diff --git a/code/game/machinery/bots/ed209bot.dm b/code/game/machinery/bots/ed209bot.dm index b4ecddd72c7..ddfb3dcbcb2 100644 --- a/code/game/machinery/bots/ed209bot.dm +++ b/code/game/machinery/bots/ed209bot.dm @@ -554,7 +554,8 @@ Auto Patrol[]"}, switch(build_step) if(0,1) if(istype(W, /obj/item/robot_parts/l_leg) || istype(W, /obj/item/robot_parts/r_leg)) - user.drop_item() + if(!user.unEquip(W)) + return qdel(W) build_step++ user << "You add the robot leg to [src]." @@ -567,12 +568,15 @@ Auto Patrol[]"}, icon_state = "ed209_legs" if(2) + var/newcolor = "" if(istype(W, /obj/item/clothing/suit/redtag)) - lasercolor = "r" + newcolor = "r" else if(istype(W, /obj/item/clothing/suit/bluetag)) - lasercolor = "b" - if(lasercolor || istype(W, /obj/item/clothing/suit/armor/vest)) - user.drop_item() + newcolor = "b" + if(newcolor || istype(W, /obj/item/clothing/suit/armor/vest)) + if(!user.unEquip(W)) + return + lasercolor = newcolor qdel(W) build_step++ user << "You add the armor to [src]." @@ -601,7 +605,8 @@ Auto Patrol[]"}, if(!istype(W, /obj/item/clothing/head/helmet)) return - user.drop_item() + if(!user.unEquip(W)) + return qdel(W) build_step++ user << "You add the helmet to [src]." @@ -611,7 +616,8 @@ Auto Patrol[]"}, if(5) if(isprox(W)) - user.drop_item() + if(!user.unEquip(W)) + return qdel(W) build_step++ user << "You add the prox sensor to [src]." @@ -634,26 +640,29 @@ Auto Patrol[]"}, name = "wired ED-209 assembly" if(7) + var/newname = "" switch(lasercolor) if("b") if(!istype(W, /obj/item/weapon/gun/energy/laser/bluetag)) return - name = "bluetag ED-209 assembly" + newname = "bluetag ED-209 assembly" if("r") if(!istype(W, /obj/item/weapon/gun/energy/laser/redtag)) return - name = "redtag ED-209 assembly" + newname = "redtag ED-209 assembly" if("") if(!istype(W, /obj/item/weapon/gun/energy/gun/advtaser)) return - name = "taser ED-209 assembly" + newname = "taser ED-209 assembly" else return + if(!user.unEquip(W)) + return + name = newname build_step++ user << "You add [W] to [src]." item_state = "[lasercolor]ed209_taser" icon_state = "[lasercolor]ed209_taser" - user.drop_item() qdel(W) if(8) @@ -669,11 +678,12 @@ Auto Patrol[]"}, if(9) if(istype(W, /obj/item/weapon/stock_parts/cell)) + if(!user.unEquip(W)) + return build_step++ user << "You complete the ED-209." var/turf/T = get_turf(src) new /obj/machinery/bot/ed209(T,created_name,lasercolor) - user.drop_item() qdel(W) user.unEquip(src, 1) qdel(src) diff --git a/code/game/machinery/bots/medbot.dm b/code/game/machinery/bots/medbot.dm index 3040c71c68f..e56043b2953 100644 --- a/code/game/machinery/bots/medbot.dm +++ b/code/game/machinery/bots/medbot.dm @@ -244,8 +244,9 @@ if(!isnull(reagent_glass)) user << "There is already a beaker loaded!" return + if(!user.drop_item()) + return - user.drop_item() W.loc = src reagent_glass = W user << "You insert [W]." @@ -585,7 +586,8 @@ switch(build_step) if(0) if(istype(W, /obj/item/device/healthanalyzer)) - user.drop_item() + if(!user.unEquip(W)) + return qdel(W) build_step++ user << "You add the health sensor to [src]." @@ -594,7 +596,8 @@ if(1) if(isprox(W)) - user.drop_item() + if(!user.unEquip(W)) + return qdel(W) build_step++ user << "You complete the Medibot. Beep boop!" diff --git a/code/game/machinery/bots/mulebot.dm b/code/game/machinery/bots/mulebot.dm index 8bbce5dd7ec..f8845ab32b4 100644 --- a/code/game/machinery/bots/mulebot.dm +++ b/code/game/machinery/bots/mulebot.dm @@ -89,8 +89,9 @@ obj/machinery/bot/mulebot/bot_reset() user << "Controls [(locked ? "locked" : "unlocked")]." else if(istype(I,/obj/item/weapon/stock_parts/cell) && open && !cell) + if(!user.drop_item()) + return var/obj/item/weapon/stock_parts/cell/C = I - user.drop_item() C.loc = src cell = C updateDialog() @@ -288,7 +289,8 @@ obj/machinery/bot/mulebot/bot_reset() if(open && !cell) var/obj/item/weapon/stock_parts/cell/C = usr.get_active_hand() if(istype(C)) - usr.drop_item() + if(!usr.drop_item()) + return cell = C C.loc = src C.add_fingerprint(usr) diff --git a/code/game/machinery/bots/secbot.dm b/code/game/machinery/bots/secbot.dm index 5c19e12be61..cb6f0a8e2fa 100644 --- a/code/game/machinery/bots/secbot.dm +++ b/code/game/machinery/bots/secbot.dm @@ -429,7 +429,8 @@ Auto Patrol: []"}, user << "You weld the hole in [src] shut!" else if(isprox(I) && (build_step == 1)) - user.drop_item() + if(!user.unEquip(I)) + return build_step++ user << "You add the prox sensor to [src]!" overlays += "hs_eye" @@ -437,7 +438,8 @@ Auto Patrol: []"}, qdel(I) else if(((istype(I, /obj/item/robot_parts/l_arm)) || (istype(I, /obj/item/robot_parts/r_arm))) && (build_step == 2)) - user.drop_item() + if(!user.unEquip(I)) + return build_step++ user << "You add the robot arm to [src]!" name = "helmet/signaler/prox sensor/robot arm assembly" @@ -445,7 +447,8 @@ Auto Patrol: []"}, qdel(I) else if((istype(I, /obj/item/weapon/melee/baton)) && (build_step >= 3)) - user.drop_item() + if(!user.unEquip(I)) + return build_step++ user << "You complete the Securitron! Beep boop." var/obj/machinery/bot/secbot/S = new /obj/machinery/bot/secbot diff --git a/code/game/machinery/camera/camera_assembly.dm b/code/game/machinery/camera/camera_assembly.dm index e5544d1d410..3710f3877a5 100644 --- a/code/game/machinery/camera/camera_assembly.dm +++ b/code/game/machinery/camera/camera_assembly.dm @@ -121,9 +121,10 @@ // Upgrades! if(is_type_in_list(W, possible_upgrades) && !is_type_in_list(W, upgrades)) // Is a possible upgrade and isn't in the camera already. + if(!user.unEquip(W)) + return user << "You attach \the [W] into the assembly inner circuits." upgrades += W - user.drop_item() W.loc = src return diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm index e1b05f5c6c8..13ed9276e25 100644 --- a/code/game/machinery/cell_charger.dm +++ b/code/game/machinery/cell_charger.dm @@ -47,8 +47,9 @@ if(a.power_equip == 0) // There's no APC in this area, don't try to cheat power! user << "The [name] blinks red as you try to insert the cell!" return + if(!user.drop_item()) + return - user.drop_item() W.loc = src charging = W user.visible_message("[user] inserts a cell into the charger.", "You insert a cell into the charger.") diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm index df20505cc8d..76dca06f55e 100644 --- a/code/game/machinery/computer/buildandrepair.dm +++ b/code/game/machinery/computer/buildandrepair.dm @@ -347,11 +347,12 @@ if(istype(P, /obj/item/weapon/circuitboard) && !circuit) var/obj/item/weapon/circuitboard/B = P if(B.board_type == "computer") + if(!user.drop_item()) + return playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) user << "You place the circuit board inside the frame." icon_state = "1" circuit = P - user.drop_item() circuit.add_fingerprint(user) P.loc = null else diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm index ce14c29f850..4fc88ee1d18 100644 --- a/code/game/machinery/computer/card.dm +++ b/code/game/machinery/computer/card.dm @@ -49,16 +49,19 @@ var/time_last_changed_position = 0 var/obj/item/weapon/card/id/idcard = O if(check_access(idcard)) if(!scan) - usr.drop_item() + if(!usr.drop_item()) + return idcard.loc = src scan = idcard else if(!modify) - usr.drop_item() + if(!usr.drop_item()) + return idcard.loc = src modify = idcard else if(!modify) - usr.drop_item() + if(!usr.drop_item()) + return idcard.loc = src modify = idcard else @@ -313,7 +316,8 @@ var/time_last_changed_position = 0 else var/obj/item/I = usr.get_active_hand() if (istype(I, /obj/item/weapon/card/id)) - usr.drop_item() + if(!usr.drop_item()) + return I.loc = src modify = I authenticated = 0 @@ -326,7 +330,8 @@ var/time_last_changed_position = 0 else var/obj/item/I = usr.get_active_hand() if (istype(I, /obj/item/weapon/card/id)) - usr.drop_item() + if(!usr.drop_item()) + return I.loc = src scan = I authenticated = 0 diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm index ff893a987a0..e2078720d8c 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -76,7 +76,8 @@ /obj/machinery/computer/cloning/attackby(obj/item/W as obj, mob/user as mob, params) if (istype(W, /obj/item/weapon/disk/data)) //INSERT SOME DISKETTES if (!src.diskette) - user.drop_item() + if(!user.drop_item()) + return ..() W.loc = src src.diskette = W user << "You insert [W]." diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm index 1782bab8845..4c27c1b1552 100644 --- a/code/game/machinery/computer/medical.dm +++ b/code/game/machinery/computer/medical.dm @@ -20,9 +20,10 @@ var/sortBy = "name" var/order = 1 // -1 = Descending - 1 = Ascending -/obj/machinery/computer/med_data/attackby(obj/item/O as obj, user as mob, params) +/obj/machinery/computer/med_data/attackby(obj/item/O as obj, mob/user as mob, params) if(istype(O, /obj/item/weapon/card/id) && !scan) - usr.drop_item() + if(!user.drop_item()) + return O.loc = src scan = O user << "You insert [O]." @@ -215,7 +216,8 @@ else var/obj/item/I = usr.get_active_hand() if(istype(I, /obj/item/weapon/card/id)) - usr.drop_item() + if(!usr.drop_item()) + return I.loc = src src.scan = I else if(href_list["logout"]) diff --git a/code/game/machinery/computer/prisoner.dm b/code/game/machinery/computer/prisoner.dm index 48e12d07b80..faba05e021f 100644 --- a/code/game/machinery/computer/prisoner.dm +++ b/code/game/machinery/computer/prisoner.dm @@ -92,7 +92,8 @@ if(href_list["id"] =="insert" && !istype(inserted_id)) var/obj/item/weapon/card/id/prisoner/I = usr.get_active_hand() if(istype(I)) - usr.drop_item() + if(!usr.drop_item()) + return I.loc = src inserted_id = I else usr << "No valid ID." diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm index 8a0c5dab87a..4a0aad15867 100644 --- a/code/game/machinery/computer/security.dm +++ b/code/game/machinery/computer/security.dm @@ -24,9 +24,10 @@ var/order = 1 // -1 = Descending - 1 = Ascending -/obj/machinery/computer/secure_data/attackby(obj/item/O as obj, user as mob, params) +/obj/machinery/computer/secure_data/attackby(obj/item/O as obj, mob/user as mob, params) if(istype(O, /obj/item/weapon/card/id) && !scan) - usr.drop_item() + if(!user.drop_item()) + return O.loc = src scan = O user << "You insert [O]." @@ -299,7 +300,8 @@ What a mess.*/ else var/obj/item/I = usr.get_active_hand() if(istype(I, /obj/item/weapon/card/id)) - usr.drop_item() + if(!usr.drop_item()) + return I.loc = src scan = I diff --git a/code/game/machinery/computer/telecrystalconsoles.dm b/code/game/machinery/computer/telecrystalconsoles.dm index d20776f350c..29b07601e4f 100644 --- a/code/game/machinery/computer/telecrystalconsoles.dm +++ b/code/game/machinery/computer/telecrystalconsoles.dm @@ -39,7 +39,8 @@ var/list/possible_uplinker_IDs = list("Alfa","Bravo","Charlie","Delta","Echo","F if(O.hidden_uplink) var/obj/item/P = user.get_active_hand() - user.drop_item() + if(!user.drop_item()) + return uplinkholder = P P.loc = src P.add_fingerprint(user) diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index 5530c7cc5a1..51f432db631 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -108,10 +108,11 @@ return var/obj/item/weapon/circuitboard/B = P if(B.board_type == "machine") + if(!user.drop_item()) + return playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) user << "You add the circuit board to the frame." circuit = P - user.drop_item() P.loc = src icon_state = "box_2" state = 3 @@ -199,6 +200,8 @@ var/success for(var/I in req_components) if(istype(P, I) && (req_components[I] > 0)) + if(!user.drop_item()) + return success=1 if(istype(P, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/CP = P @@ -211,7 +214,6 @@ req_components[I]-- update_req_desc() break - user.drop_item() P.loc = src components += P req_components[I]-- diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm index f84c488f930..26eb0c3cce5 100644 --- a/code/game/machinery/cryo.dm +++ b/code/game/machinery/cryo.dm @@ -237,9 +237,10 @@ if(beaker) user << "A beaker is already loaded into [src]!" return + if(!user.drop_item()) + return beaker = I - user.drop_item() I.loc = src user.visible_message("[user] places [I] in [src].", \ "You place [I] in [src].") diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm index fdea6d8469f..1b6be79b004 100644 --- a/code/game/machinery/flasher.dm +++ b/code/game/machinery/flasher.dm @@ -50,8 +50,9 @@ else if (istype(W, /obj/item/device/flash/handheld)) if (!bulb) + if(!user.drop_item()) + return user.visible_message("[user] installs [W] into [src].", "You install [W] into [src].") - user.drop_item() W.loc = src bulb = W power_change() diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm index e5961c09fc9..0c600860d7c 100644 --- a/code/game/machinery/iv_drip.dm +++ b/code/game/machinery/iv_drip.dm @@ -77,8 +77,9 @@ if(!isnull(beaker)) user << "There is already a reagent container loaded!" return + if(!user.drop_item()) + return - user.drop_item() W.loc = src beaker = W user << "You attach \the [W] to \the [src]." diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm index f5693f0a3fa..d8c602a62c2 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -788,7 +788,8 @@ var/list/obj/machinery/newscaster/allCasters = list() photo = null if(istype(user.get_active_hand(), /obj/item/weapon/photo)) photo = user.get_active_hand() - user.drop_item() + if(!user.drop_item()) + return photo.loc = src if(istype(user,/mob/living/silicon)) var/list/nametemp = list() diff --git a/code/game/machinery/pipe/pipe_dispenser.dm b/code/game/machinery/pipe/pipe_dispenser.dm index 9d1be6f4519..96fb5716814 100644 --- a/code/game/machinery/pipe/pipe_dispenser.dm +++ b/code/game/machinery/pipe/pipe_dispenser.dm @@ -72,7 +72,8 @@ add_fingerprint(user) if (istype(W, /obj/item/pipe) || istype(W, /obj/item/pipe_meter)) usr << "You put [W] back into [src]." - user.drop_item() + if(!user.drop_item()) + return qdel(W) return else if (istype(W, /obj/item/weapon/wrench)) diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index 34c13a8bb88..aaef91bc811 100644 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -27,8 +27,9 @@ if(!gun.can_charge) user << "Your gun has no external power connector." return + if(!user.drop_item()) + return - user.drop_item() G.loc = src charging = G use_power = 2 diff --git a/code/game/machinery/slotmachine.dm b/code/game/machinery/slotmachine.dm index 5af17c44572..4d88f443d05 100644 --- a/code/game/machinery/slotmachine.dm +++ b/code/game/machinery/slotmachine.dm @@ -77,7 +77,8 @@ if(istype(I, /obj/item/weapon/coin)) var/obj/item/weapon/coin/C = I if(prob(2)) - user.drop_item() + if(!user.drop_item()) + return C.loc = loc C.throw_at(user, 3, 10) if(prob(10)) @@ -85,7 +86,8 @@ user << "[src] spits your coin back out!" else - user.drop_item() + if(!user.drop_item()) + return user << "You insert a [C.cmineral] coin into [src]'s slot!" balance += C.value qdel(C) diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm index da7f6a82c53..b1891f80539 100644 --- a/code/game/machinery/spaceheater.dm +++ b/code/game/machinery/spaceheater.dm @@ -54,7 +54,8 @@ // insert cell var/obj/item/weapon/stock_parts/cell/C = usr.get_active_hand() if(istype(C)) - user.drop_item() + if(!user.drop_item()) + return cell = C C.loc = src C.add_fingerprint(usr) @@ -134,7 +135,8 @@ if(open && !cell) var/obj/item/weapon/stock_parts/cell/C = usr.get_active_hand() if(istype(C)) - usr.drop_item() + if(!usr.drop_item()) + return cell = C C.loc = src C.add_fingerprint(usr) diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm index 35a1b38e85c..059b36f6200 100644 --- a/code/game/machinery/syndicatebomb.dm +++ b/code/game/machinery/syndicatebomb.dm @@ -90,9 +90,10 @@ user << "The cover is screwed on, it won't pry off!" else if(istype(I, /obj/item/weapon/bombcore)) if(!payload) + if(!user.drop_item()) + return payload = I user << "You place [payload] into [src]." - user.drop_item() payload.loc = src else user << "[payload] is already loaded into [src]! You'll have to remove it first." diff --git a/code/game/machinery/telecomms/computers/traffic_control.dm b/code/game/machinery/telecomms/computers/traffic_control.dm index 7dc9517abfc..9d520a5a7d8 100644 --- a/code/game/machinery/telecomms/computers/traffic_control.dm +++ b/code/game/machinery/telecomms/computers/traffic_control.dm @@ -168,7 +168,8 @@ var/obj/item/weapon/card/id/I = C.get_active_hand() if(istype(I)) if(check_access(I)) - C.drop_item() + if(!C.drop_item()) + return I.loc = src auth = I create_log("has logged in.", usr) diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 92845999c61..8b0bc6f703f 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -170,7 +170,8 @@ return if(junk_check(W)) if(!iscompartmentfull(user)) - user.drop_item() + if(!user.drop_item()) + return W.loc = src food_load(W) user << "You insert [W] into [src]'s chef compartment." @@ -250,7 +251,8 @@ attack_hand(user) return else if(istype(W, /obj/item/weapon/coin) && premium.len > 0) - user.drop_item() + if(!user.drop_item()) + return W.loc = src coin = W user << "You insert [W] into [src]." diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm index 76508f008ce..05c3b10c069 100644 --- a/code/game/machinery/washing_machine.dm +++ b/code/game/machinery/washing_machine.dm @@ -188,7 +188,8 @@ if(istype(W,/obj/item/toy/crayon) ||istype(W,/obj/item/weapon/stamp)) if( state in list( 1, 3, 6 ) ) if(!crayon) - user.drop_item() + if(!user.drop_item()) + return crayon = W crayon.loc = src else @@ -256,7 +257,8 @@ if(contents.len < 5) if ( state in list(1, 3) ) - user.drop_item() + if(!user.drop_item()) + return W.loc = src state = 3 else diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index ec69ca4c4a3..682f81e557f 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -675,7 +675,8 @@ var/obj/item/mecha_parts/mecha_equipment/E = W spawn() if(E.can_attach(src)) - user.drop_item() + if(!user.drop_item()) + return E.attach(src) user.visible_message("[user] attaches [W] to [src].", "You attach [W] to [src].") else @@ -739,9 +740,10 @@ else if(istype(W, /obj/item/weapon/stock_parts/cell)) if(state==4) if(!src.cell) + if(!user.drop_item()) + return var/obj/item/weapon/stock_parts/cell/C = W user << "You install the powercell." - user.drop_item() C.forceMove(src) C.use(C.charge * 0.8) src.cell = C diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index cdedfe0733f..f0f85603f5c 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -379,8 +379,8 @@ M << "Your eyes start to bleed profusely!" if(prob(50)) if(M.stat != 2) - M << "You drop what you're holding and clutch at your eyes!" - M.drop_item() + if(M.drop_item()) + M << "You drop what you're holding and clutch at your eyes!" M.eye_blurry += 10 M.Paralyse(1) M.Weaken(2) diff --git a/code/game/objects/items/devices/camera_bug.dm b/code/game/objects/items/devices/camera_bug.dm index f4953c98812..b91db4b5e30 100644 --- a/code/game/objects/items/devices/camera_bug.dm +++ b/code/game/objects/items/devices/camera_bug.dm @@ -349,8 +349,9 @@ for(var/entry in expandables) if(istype(W,entry)) + if(!user.unEquip(W)) + return bugtype = expandables[entry] - user.drop_item() W.loc = src expansion = W user << "You add [W] to [src]." diff --git a/code/game/objects/items/devices/laserpointer.dm b/code/game/objects/items/devices/laserpointer.dm index c66a93aa4ad..ff6d78c41ef 100644 --- a/code/game/objects/items/devices/laserpointer.dm +++ b/code/game/objects/items/devices/laserpointer.dm @@ -47,7 +47,8 @@ /obj/item/device/laser_pointer/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/weapon/stock_parts/micro_laser)) if(!diode) - user.drop_item() + if(!user.unEquip(W)) + return W.loc = src diode = W user << "You install a [diode.name] in [src]." diff --git a/code/game/objects/items/devices/lightreplacer.dm b/code/game/objects/items/devices/lightreplacer.dm index 4580e823eba..a440715d7a7 100644 --- a/code/game/objects/items/devices/lightreplacer.dm +++ b/code/game/objects/items/devices/lightreplacer.dm @@ -88,9 +88,10 @@ var/obj/item/weapon/light/L = W if(L.status == 0) // LIGHT OKAY if(uses < max_uses) + if(!user.unEquip(W)) + return AddUses(1) user << "You insert the [L.name] into the [src.name]. You have [uses] lights remaining." - user.drop_item() qdel(L) return else diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index 92ad5697dc7..31f12619e03 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -253,12 +253,14 @@ return if(!keyslot) - user.drop_item() + if(!user.unEquip(W)) + return W.loc = src keyslot = W else - user.drop_item() + if(!user.unEquip(W)) + return W.loc = src keyslot2 = W diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 8bed318c4ad..c9cf83c17e9 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -608,7 +608,8 @@ return if(!keyslot) - user.drop_item() + if(!user.unEquip(W)) + return W.loc = src keyslot = W diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm index fd5cb821462..826853d049e 100644 --- a/code/game/objects/items/devices/taperecorder.dm +++ b/code/game/objects/items/devices/taperecorder.dm @@ -33,7 +33,8 @@ /obj/item/device/taperecorder/attackby(obj/item/I, mob/user, params) if(!mytape && istype(I, /obj/item/device/tape)) - user.drop_item() + if(!user.unEquip(I)) + return I.loc = src mytape = I user << "You insert [I] into [src]." diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm index 97ffc5e6307..18e69466fa5 100644 --- a/code/game/objects/items/devices/transfer_valve.dm +++ b/code/game/objects/items/devices/transfer_valve.dm @@ -20,15 +20,17 @@ return if(!tank_one) + if(!user.unEquip(item)) + return tank_one = item - user.drop_item() item.loc = src user << "You attach the tank to the transfer valve." if(item.w_class > w_class) w_class = item.w_class else if(!tank_two) + if(!user.unEquip(item)) + return tank_two = item - user.drop_item() item.loc = src user << "You attach the tank to the transfer valve." if(item.w_class > w_class) diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm index 3b9868babac..ed337577622 100644 --- a/code/game/objects/items/robot/robot_parts.dm +++ b/code/game/objects/items/robot/robot_parts.dm @@ -102,28 +102,32 @@ return if(istype(W, /obj/item/robot_parts/l_leg)) if(src.l_leg) return - user.drop_item() + if(!user.unEquip(W)) + return W.loc = src src.l_leg = W src.updateicon() if(istype(W, /obj/item/robot_parts/r_leg)) if(src.r_leg) return - user.drop_item() + if(!user.unEquip(W)) + return W.loc = src src.r_leg = W src.updateicon() if(istype(W, /obj/item/robot_parts/l_arm)) if(src.l_arm) return - user.drop_item() + if(!user.unEquip(W)) + return W.loc = src src.l_arm = W src.updateicon() if(istype(W, /obj/item/robot_parts/r_arm)) if(src.r_arm) return - user.drop_item() + if(!user.unEquip(W)) + return W.loc = src src.r_arm = W src.updateicon() @@ -131,7 +135,8 @@ if(istype(W, /obj/item/robot_parts/chest)) if(src.chest) return if(W:wires && W:cell) - user.drop_item() + if(!user.unEquip(W)) + return W.loc = src src.chest = W src.updateicon() @@ -143,7 +148,8 @@ if(istype(W, /obj/item/robot_parts/head)) if(src.head) return if(W:flash2 && W:flash1) - user.drop_item() + if(!user.unEquip(W)) + return W.loc = src src.head = W src.updateicon() @@ -190,7 +196,8 @@ var/mob/living/silicon/robot/O = new /mob/living/silicon/robot(get_turf(loc)) if(!O) return - user.drop_item() + if(!user.unEquip(W)) + return O.invisibility = 0 //Transfer debug settings to new mob @@ -297,7 +304,8 @@ user << "You have already inserted a cell!" return else - user.drop_item() + if(!user.unEquip(W)) + return W.loc = src src.cell = W user << "You insert the cell." @@ -324,7 +332,8 @@ user << "You can't use a broken flash!" return else - user.drop_item() + if(!user.unEquip(W)) + return F.loc = src if(src.flash1) src.flash2 = F diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm index 59301721989..5e2e050242a 100644 --- a/code/game/objects/items/weapons/RCD.dm +++ b/code/game/objects/items/weapons/RCD.dm @@ -112,7 +112,8 @@ RCD if((matter + R.ammoamt) > max_matter) user << "The RCD can't hold any more matter-units!" return - user.drop_item() + if(!user.unEquip(W)) + return qdel(W) matter += R.ammoamt playsound(src.loc, 'sound/machines/click.ogg', 50, 1) diff --git a/code/game/objects/items/weapons/airlock_painter.dm b/code/game/objects/items/weapons/airlock_painter.dm index 2f595b5cba0..9ebce21ee0a 100644 --- a/code/game/objects/items/weapons/airlock_painter.dm +++ b/code/game/objects/items/weapons/airlock_painter.dm @@ -63,7 +63,8 @@ if(ink) user << "\the [name] already contains \a [ink]." return - user.drop_item() + if(!user.unEquip(W)) + return W.loc = src user << "You install \the [W] into \the [name]." ink = W diff --git a/code/game/objects/items/weapons/defib.dm b/code/game/objects/items/weapons/defib.dm index f3dcfbc4b6b..02114500111 100644 --- a/code/game/objects/items/weapons/defib.dm +++ b/code/game/objects/items/weapons/defib.dm @@ -112,7 +112,8 @@ if(C.maxcharge < paddles.revivecost) user << "[src] requires a higher capacity cell." return - user.drop_item() + if(!user.unEquip(W)) + return W.loc = src bcell = W user << "You install a cell in [src]." diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm index f1d7d6c19c4..9d5f2f0c552 100644 --- a/code/game/objects/items/weapons/explosives.dm +++ b/code/game/objects/items/weapons/explosives.dm @@ -69,7 +69,8 @@ user << "You start planting the bomb..." if(do_after(user, 50) && in_range(user, target)) - user.drop_item() + if(!user.unEquip(target)) + return src.target = target loc = null diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm index 2f89a0d979e..9d1bf16dda2 100644 --- a/code/game/objects/items/weapons/flamethrower.dm +++ b/code/game/objects/items/weapons/flamethrower.dm @@ -94,7 +94,8 @@ var/obj/item/device/assembly/igniter/I = W if(I.secured) return if(igniter) return - user.drop_item() + if(!user.unEquip(W)) + return I.loc = src igniter = I update_icon() @@ -104,7 +105,8 @@ if(ptank) user << "There appears to already be a plasma tank loaded in [src]!" return - user.drop_item() + if(!user.unEquip(W)) + return ptank = W W.loc = src update_icon() diff --git a/code/game/objects/items/weapons/grenades/chem_grenade.dm b/code/game/objects/items/weapons/grenades/chem_grenade.dm index ff1812883aa..e902d388211 100644 --- a/code/game/objects/items/weapons/grenades/chem_grenade.dm +++ b/code/game/objects/items/weapons/grenades/chem_grenade.dm @@ -68,8 +68,9 @@ return else if(I.reagents.total_volume) + if(!user.unEquip(I)) + return user << "You add [I] to the [initial(name)] assembly." - user.drop_item() I.loc = src beakers += I else @@ -79,8 +80,9 @@ var/obj/item/device/assembly_holder/A = I if(isigniter(A.a_left) == isigniter(A.a_right)) //Check if either part of the assembly has an igniter, but if both parts are igniters, then fuck it return + if(!user.unEquip(I)) + return - user.drop_item() nadeassembly = A A.master = src A.loc = src @@ -263,8 +265,9 @@ //make a special case you might as well do it explicitly. -Sayu /obj/item/weapon/grenade/chem_grenade/large/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/slime_extract) && stage == WIRED) + if(!user.unEquip(I)) + return user << "You add [I] to the [initial(name)] assembly." - user.drop_item() I.loc = src beakers += I else diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm index d43251a2e48..d5e3e66703b 100644 --- a/code/game/objects/items/weapons/handcuffs.dm +++ b/code/game/objects/items/weapons/handcuffs.dm @@ -49,7 +49,8 @@ /obj/item/weapon/restraints/handcuffs/proc/apply_cuffs(mob/living/carbon/target, mob/user) if(!target.handcuffed) - user.drop_item() + if(!user.drop_item()) + return //target.throw_alert("handcuffed", src) // Can't do this because escaping cuffs isn't standardized. Also zipties. if(trashtype) target.handcuffed = new trashtype(target) diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm index 97b0a8304ad..b22b7439eae 100644 --- a/code/game/objects/items/weapons/implants/implant.dm +++ b/code/game/objects/items/weapons/implants/implant.dm @@ -174,15 +174,15 @@ /obj/item/weapon/implant/loyalty/implanted(mob/target) ..() - if((target.mind in (ticker.mode.head_revolutionaries | ticker.mode.A_bosses | ticker.mode.B_bosses)) || is_shadow_or_thrall(target)) + if((target.mind in ticker.mode.head_revolutionaries) || is_shadow_or_thrall(target)) target.visible_message("[target] seems to resist the implant!", "You feel the corporate tendrils of Nanotrasen try to invade your mind!") return 0 - if(target.mind in (ticker.mode.A_gang | ticker.mode.B_gang)) - ticker.mode.remove_gangster(target.mind, exclude_bosses=0) - return 0 if(target.mind in ticker.mode.revolutionaries) ticker.mode.remove_revolutionary(target.mind) - target << "You feel a surge of loyalty towards Nanotrasen." + if(target.mind in (ticker.mode.cult| ticker.mode.A_bosses | ticker.mode.B_bosses | ticker.mode.A_gang | ticker.mode.B_gang)) + target << "You feel the corporate tendrils of Nanotrasen try to invade your mind!" + else + target << "You feel a surge of loyalty towards Nanotrasen." return 1 diff --git a/code/game/objects/items/weapons/implants/implantpad.dm b/code/game/objects/items/weapons/implants/implantpad.dm index 1720cb073e0..615d719fef3 100644 --- a/code/game/objects/items/weapons/implants/implantpad.dm +++ b/code/game/objects/items/weapons/implants/implantpad.dm @@ -36,7 +36,8 @@ ..() if(istype(C, /obj/item/weapon/implantcase)) if(!case) - user.drop_item() + if(!user.unEquip(C)) + return C.loc = src case = C else diff --git a/code/game/objects/items/weapons/paiwire.dm b/code/game/objects/items/weapons/paiwire.dm index 83933cbf4c3..33de9fcba06 100644 --- a/code/game/objects/items/weapons/paiwire.dm +++ b/code/game/objects/items/weapons/paiwire.dm @@ -8,8 +8,9 @@ /obj/item/weapon/pai_cable/proc/plugin(obj/machinery/M as obj, mob/user as mob) if(istype(M, /obj/machinery/door) || istype(M, /obj/machinery/camera)) + if(!user.drop_item()) + return user.visible_message("[user] inserts [src] into a data port on [M].", "You insert [src] into a data port on [M].", "You hear the satisfying click of a wire jack fastening into place.") - user.drop_item() src.loc = M src.machine = M else diff --git a/code/game/objects/items/weapons/pneumaticCannon.dm b/code/game/objects/items/weapons/pneumaticCannon.dm index 7ccd3432491..f4af87c3f10 100644 --- a/code/game/objects/items/weapons/pneumaticCannon.dm +++ b/code/game/objects/items/weapons/pneumaticCannon.dm @@ -61,8 +61,9 @@ if(IW.w_class > src.w_class) user << "\The [IW] is too large to fit into \the [src]!" return + if(!user.unEquip(W)) + return user << "You load \the [IW] into \the [src]." - user.drop_item() loadedItems.Add(IW) loadedWeightClass += IW.w_class IW.loc = src @@ -127,9 +128,10 @@ if(src.tank) user << "\The [src] already has a tank." return + if(!user.unEquip(thetank)) + return user << "You hook \the [thetank] up to \the [src]." src.tank = thetank - user.drop_item() thetank.loc = src src.update_icons() diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm index 8fc6d771551..40b1ab14670 100644 --- a/code/game/objects/items/weapons/stunbaton.dm +++ b/code/game/objects/items/weapons/stunbaton.dm @@ -71,7 +71,8 @@ if(C.maxcharge < hitcost) user << "[src] requires a higher capacity cell." return - user.drop_item() + if(!user.unEquip(W)) + return W.loc = src bcell = W user << "You install a cell in [src]." diff --git a/code/game/objects/structures/ai_core.dm b/code/game/objects/structures/ai_core.dm index 907b4db38e1..1d24b6485a6 100644 --- a/code/game/objects/structures/ai_core.dm +++ b/code/game/objects/structures/ai_core.dm @@ -41,11 +41,12 @@ anchored = 0 state = 0 if(istype(P, /obj/item/weapon/circuitboard/aicore) && !circuit) + if(!user.drop_item()) + return playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) user << "You place the circuit board inside the frame." icon_state = "1" circuit = P - user.drop_item() P.loc = src if(istype(P, /obj/item/weapon/screwdriver) && circuit) playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1) @@ -152,11 +153,13 @@ user << "This MMI is mindless!" return + if(!user.drop_item()) + return + ticker.mode.remove_cultist(M.brainmob.mind, 1) ticker.mode.remove_revolutionary(M.brainmob.mind, 1) ticker.mode.remove_gangster(M.brainmob.mind, 1) - user.drop_item() M.loc = src brain = M usr << "Added a brain." diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm index 37428c37333..073ae4e2e53 100644 --- a/code/game/objects/structures/bedsheet_bin.dm +++ b/code/game/objects/structures/bedsheet_bin.dm @@ -194,7 +194,8 @@ LINEN BINS /obj/structure/bedsheetbin/attackby(obj/item/I as obj, mob/user as mob, params) if(istype(I, /obj/item/weapon/bedsheet)) - user.drop_item() + if(!user.drop_item()) + return I.loc = src sheets.Add(I) amount++ diff --git a/code/game/objects/structures/crates_lockers/bins.dm b/code/game/objects/structures/crates_lockers/bins.dm index edabca55fb7..bbcec247b70 100644 --- a/code/game/objects/structures/crates_lockers/bins.dm +++ b/code/game/objects/structures/crates_lockers/bins.dm @@ -84,8 +84,7 @@ /obj/structure/closet/crate/bin/place(var/mob/user, var/obj/item/I) if(contents.len >= storage_capacity) return 1 - if(!opened) - user.drop_item() + if(!opened && user.drop_item()) insert(I, 0, 1) return 1 return 0 \ No newline at end of file diff --git a/code/game/objects/structures/crates_lockers/closets/fireaxe.dm b/code/game/objects/structures/crates_lockers/closets/fireaxe.dm index bf94d93a874..81e2b46d4ca 100644 --- a/code/game/objects/structures/crates_lockers/closets/fireaxe.dm +++ b/code/game/objects/structures/crates_lockers/closets/fireaxe.dm @@ -58,8 +58,9 @@ if(O:wielded) user << "Unwield the axe first." return + if(!user.drop_item()) + return fireaxe = O - user.drop_item() src.contents += O user << "You place the fire axe back in the [src.name]." update_icon() diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index abbf7e51461..14a4fe411bd 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -286,8 +286,9 @@ return else if(istype(W, /obj/item/device/electropack)) if(rigged) + if(!user.drop_item()) + return user << "You attach [W] to [src]." - user.drop_item() W.loc = src return else if(istype(W, /obj/item/weapon/wirecutters)) diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm index a0fa16da823..4b53bb0e629 100644 --- a/code/game/objects/structures/door_assembly.dm +++ b/code/game/objects/structures/door_assembly.dm @@ -532,8 +532,9 @@ if(do_after(user, 40)) if( src.state != 1 ) return + if(!user.drop_item()) + return - user.drop_item() W.loc = src user << "You install the airlock electronics." src.state = 2 diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm index 06c763ffca7..e56bcd0a4ee 100644 --- a/code/game/objects/structures/extinguisher.dm +++ b/code/game/objects/structures/extinguisher.dm @@ -29,7 +29,8 @@ return if(istype(O, /obj/item/weapon/extinguisher)) if(!has_extinguisher && opened) - user.drop_item() + if(!user.drop_item()) + return contents += O has_extinguisher = O user << "You place [O] in [src]." diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index fd324892490..23df00bef19 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -201,7 +201,8 @@ else if(istype(W, /obj/item/pipe)) var/obj/item/pipe/P = W if (P.pipe_type in list(0, 1, 5)) //simple pipes, simple bends, and simple manifolds. - user.drop_item() + if(!user.drop_item()) + return P.loc = src.loc user << "You fit the pipe into \the [src]." else diff --git a/code/game/objects/structures/guncase.dm b/code/game/objects/structures/guncase.dm index 5793006ba6f..ae8c5b4e861 100644 --- a/code/game/objects/structures/guncase.dm +++ b/code/game/objects/structures/guncase.dm @@ -39,7 +39,8 @@ return if(istype(I, gun_category)) if(contents.len < capacity && open) - user.drop_item() + if(!user.drop_item()) + return contents += I user << "You place [I] in [src]." update_icon() diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm index b5a265e2c76..58aebf4ca25 100644 --- a/code/game/objects/structures/janicart.dm +++ b/code/game/objects/structures/janicart.dm @@ -29,7 +29,8 @@ playsound(loc, 'sound/effects/slosh.ogg', 25, 1) /obj/structure/janitorialcart/proc/put_in_cart(obj/item/I, mob/user) - user.drop_item() + if(!user.drop_item()) + return I.loc = src updateUsrDialog() user << "You put [I] into [src]." @@ -199,8 +200,9 @@ user << "Hold [I] in one of your hands while you drive this [callme]." else if(istype(I, /obj/item/weapon/storage/bag/trash)) if(keytype == /obj/item/key/janitor) + if(!user.drop_item()) + return user << "You hook the trashbag onto the [callme]." - user.drop_item() I.loc = src mybag = I else if(istype(I, /obj/item/janiupgrade)) diff --git a/code/game/objects/structures/noticeboard.dm b/code/game/objects/structures/noticeboard.dm index d5997adfda9..7d8591217f6 100644 --- a/code/game/objects/structures/noticeboard.dm +++ b/code/game/objects/structures/noticeboard.dm @@ -19,9 +19,10 @@ /obj/structure/noticeboard/attackby(var/obj/item/weapon/O as obj, var/mob/user as mob, params) if(istype(O, /obj/item/weapon/paper)) if(notices < 5) + if(!user.drop_item()) + return O.add_fingerprint(user) add_fingerprint(user) - user.drop_item() O.loc = src notices++ icon_state = "nboard0[notices]" //update sprite diff --git a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm index 829d6a6dd44..915f56b9ac0 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm @@ -17,8 +17,9 @@ /obj/structure/stool/bed/chair/attackby(obj/item/weapon/W as obj, mob/user as mob, params) ..() if(istype(W, /obj/item/assembly/shock_kit)) + if(!user.drop_item()) + return var/obj/item/assembly/shock_kit/SK = W - user.drop_item() var/obj/structure/stool/bed/chair/e_chair/E = new /obj/structure/stool/bed/chair/e_chair(src.loc) playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) E.dir = dir diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index f776ab56d7e..b25fa12dd81 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -625,8 +625,9 @@ /obj/item/weapon/rack_parts/attack_self(mob/user as mob) user << "You start constructing rack..." if (do_after(user, 50)) + if(!user.drop_item()) + return var/obj/structure/rack/R = new /obj/structure/rack( user.loc ) R.add_fingerprint(user) - user.drop_item() qdel(src) return diff --git a/code/game/objects/structures/tank_dispenser.dm b/code/game/objects/structures/tank_dispenser.dm index da9c57601e3..3cc45f3ac5e 100644 --- a/code/game/objects/structures/tank_dispenser.dm +++ b/code/game/objects/structures/tank_dispenser.dm @@ -50,7 +50,8 @@ /obj/structure/dispenser/attackby(obj/item/I as obj, mob/user as mob, params) if(istype(I, /obj/item/weapon/tank/internals/oxygen) || istype(I, /obj/item/weapon/tank/internals/air) || istype(I, /obj/item/weapon/tank/internals/anesthetic)) if(oxygentanks < 10) - user.drop_item() + if(!user.drop_item()) + return I.loc = src oxytanks.Add(I) oxygentanks++ @@ -59,7 +60,8 @@ user << "[src] is full." if(istype(I, /obj/item/weapon/tank/internals/plasma)) if(plasmatanks < 10) - user.drop_item() + if(!user.drop_item()) + return I.loc = src platanks.Add(I) plasmatanks++ diff --git a/code/game/objects/structures/target_stake.dm b/code/game/objects/structures/target_stake.dm index 0048a1cdb28..5e23a7f994f 100644 --- a/code/game/objects/structures/target_stake.dm +++ b/code/game/objects/structures/target_stake.dm @@ -23,11 +23,10 @@ /obj/structure/target_stake/attackby(obj/item/target/T, mob/user) if(pinned_target) return - if(istype(T)) + if(istype(T) && user.drop_item()) pinned_target = T T.pinnedLoc = src T.density = 1 - user.drop_item() T.layer = OBJ_LAYER + 0.1 T.loc = loc user << "You slide the target into the stake." diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm index 8262201bf28..1f41f887adb 100644 --- a/code/game/objects/structures/windoor_assembly.dm +++ b/code/game/objects/structures/windoor_assembly.dm @@ -190,9 +190,10 @@ //Adding airlock electronics for access. Step 6 complete. else if(istype(W, /obj/item/weapon/airlock_electronics)) + if(!user.drop_item()) + return playsound(loc, 'sound/items/Screwdriver.ogg', 100, 1) user.visible_message("[user] installs the electronics into the airlock assembly.", "You start to install electronics into the airlock assembly...") - user.drop_item() W.loc = src if(do_after(user, 40)) diff --git a/code/game/turfs/simulated/floor/light_floor.dm b/code/game/turfs/simulated/floor/light_floor.dm index 85755fc867d..abb5c5c4fab 100644 --- a/code/game/turfs/simulated/floor/light_floor.dm +++ b/code/game/turfs/simulated/floor/light_floor.dm @@ -63,8 +63,7 @@ if(..()) return if(istype(C,/obj/item/weapon/light/bulb)) //only for light tiles - if(state) - user.drop_item() + if(state && user.drop_item()) qdel(C) state = 0 //fixing it by bashing it with a light bulb, fun eh? update_icon() diff --git a/code/modules/assembly/bomb.dm b/code/modules/assembly/bomb.dm index b63a0feefe7..f92ef7dcf84 100644 --- a/code/modules/assembly/bomb.dm +++ b/code/modules/assembly/bomb.dm @@ -89,10 +89,11 @@ var/mob/M = user if(isigniter(S.a_left) == isigniter(S.a_right)) //Check if either part of the assembly has an igniter, but if both parts are igniters, then fuck it return + if(!M.drop_item()) //Remove the assembly from your hands + return var/obj/item/device/onetankbomb/R = new /obj/item/device/onetankbomb(loc) - M.drop_item() //Remove the assembly from your hands M.remove_from_mob(src) //Remove the tank from your character,in case you were holding it M.put_in_hands(R) //Equips the bomb if possible, or puts it on the floor. diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 1fc1bb0a0c8..049e675e104 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -235,7 +235,8 @@ BLIND // can't see anything return 0 else if(user) - user.drop_item() + if(!user.drop_item()) + return hastie = I I.loc = src if(user && notifyAttach) diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 39658cc78e5..ef549cf4acb 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -196,7 +196,8 @@ var/obj/item/device/flashlight/seclite/S = A if(can_flashlight) if(!F) - user.drop_item() + if(!user.unEquip(A)) + return user << "You click [S] into place on [src]." if(S.on) SetLuminosity(0) @@ -228,7 +229,8 @@ if(helmetCam) user << "[src] already has a mounted camera." return - user.drop_item() + if(!user.unEquip(A)) + return helmetCam = new /obj/machinery/camera/portable(src) helmetCam.assembly = A A.loc = helmetCam diff --git a/code/modules/food&drinks/food/customizables.dm b/code/modules/food&drinks/food/customizables.dm index 7f9387b9865..c2aa2849c0a 100644 --- a/code/modules/food&drinks/food/customizables.dm +++ b/code/modules/food&drinks/food/customizables.dm @@ -44,7 +44,8 @@ else if((ingredients.len >= ingMax) || (reagents.total_volume >= volume)) user << "You can't add more ingredients to [src]!" else - user.drop_item() + if(!user.unEquip(I)) + return if(S.trash) new S.trash(get_turf(user)) S.trash = null //we remove the plate before adding the ingredient diff --git a/code/modules/food&drinks/kitchen machinery/food_cart.dm b/code/modules/food&drinks/kitchen machinery/food_cart.dm index fdae544a1b9..1cff6be4b82 100644 --- a/code/modules/food&drinks/kitchen machinery/food_cart.dm +++ b/code/modules/food&drinks/kitchen machinery/food_cart.dm @@ -63,7 +63,8 @@ if(istype(O, /obj/item/weapon/reagent_containers/food/drinks/drinkingglass)) var/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/DG = O if(!DG.reagents.total_volume) //glass is empty - user.drop_item() + if(!user.drop_item()) + return qdel(DG) glasses++ user << "The [src] accepts the drinking glass, sterilizing it." @@ -72,7 +73,8 @@ user << "The [src] is at full capacity." else var/obj/item/weapon/reagent_containers/food/snacks/S = O - user.drop_item() + if(!user.drop_item()) + return S.loc = src if(stored_food[sanitize(S.name)]) stored_food[sanitize(S.name)]++ diff --git a/code/modules/food&drinks/kitchen machinery/monkeyrecycler.dm b/code/modules/food&drinks/kitchen machinery/monkeyrecycler.dm index bb88e5ec867..fc6a899f5b0 100644 --- a/code/modules/food&drinks/kitchen machinery/monkeyrecycler.dm +++ b/code/modules/food&drinks/kitchen machinery/monkeyrecycler.dm @@ -60,7 +60,8 @@ if(target.stat == 0) user << "The monkey is struggling far too much to put it in the recycler." else - user.drop_item() + if(!user.drop_item()) + return qdel(target) user << "You stuff the monkey in the machine." playsound(src.loc, 'sound/machines/juicer.ogg', 50, 1) diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index 3722cdda67f..38c9be4e471 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -897,7 +897,7 @@ obj/item/weapon/reagent_containers/food/snacks/grown/shell/eggy/add_juice() /obj/item/weapon/reagent_containers/food/snacks/grown/tomato/blue/bluespace/attack_self(var/mob/user) squish(user) - user.drop_item() + user.unEquip(src) src.visible_message("[user] squashes the [src.name].","You hear a smack.") qdel(src) diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm index b22c6d40087..298ebdcf61c 100644 --- a/code/modules/library/lib_items.dm +++ b/code/modules/library/lib_items.dm @@ -63,7 +63,8 @@ if(2) if(is_type_in_list(I, allowed_books)) - user.drop_item() + if(!user.drop_item()) + return I.loc = src update_icon() else if(istype(I, /obj/item/weapon/storage/bag/books)) diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm index c9d885d8f29..f5dc638ee49 100644 --- a/code/modules/library/lib_machines.dm +++ b/code/modules/library/lib_machines.dm @@ -447,7 +447,8 @@ var/global/list/datum/cachedbook/cachedbooks // List of our cached book datums /obj/machinery/libraryscanner/attackby(var/obj/O as obj, var/mob/user as mob, params) if(istype(O, /obj/item/weapon/book)) - user.drop_item() + if(!user.drop_item()) + return O.loc = src /obj/machinery/libraryscanner/attack_hand(var/mob/user as mob) @@ -505,7 +506,8 @@ var/global/list/datum/cachedbook/cachedbooks // List of our cached book datums if(busy) user << "The book binder is busy. Please wait for completion of previous operation." return - user.drop_item() + if(!user.drop_item()) + return O.loc = src user.visible_message("[user] loads some paper into [src].", "You load some paper into [src].") src.visible_message("[src] begins to hum as it warms up its printing drums.") diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm index 1dd002229be..265238f483c 100644 --- a/code/modules/mining/equipment_locker.dm +++ b/code/modules/mining/equipment_locker.dm @@ -89,7 +89,8 @@ if(istype(W,/obj/item/weapon/card/id)) var/obj/item/weapon/card/id/I = usr.get_active_hand() if(istype(I) && !istype(inserted_id)) - usr.drop_item() + if(!user.drop_item()) + return I.loc = src inserted_id = I interact(user) @@ -184,7 +185,8 @@ else if(href_list["choice"] == "insert") var/obj/item/weapon/card/id/I = usr.get_active_hand() if(istype(I)) - usr.drop_item() + if(!usr.drop_item()) + return I.loc = src inserted_id = I else usr << "No valid ID." @@ -333,7 +335,8 @@ else if(href_list["choice"] == "insert") var/obj/item/weapon/card/id/I = usr.get_active_hand() if(istype(I)) - usr.drop_item() + if(!usr.drop_item()) + return I.loc = src inserted_id = I else usr << "No valid ID." @@ -356,7 +359,8 @@ if(istype(I,/obj/item/weapon/card/id)) var/obj/item/weapon/card/id/C = usr.get_active_hand() if(istype(C) && !istype(inserted_id)) - usr.drop_item() + if(!usr.drop_item()) + return C.loc = src inserted_id = C interact(user) diff --git a/code/modules/mining/laborcamp/laborstacker.dm b/code/modules/mining/laborcamp/laborstacker.dm index e9dc6f7d14f..366ade4a6de 100644 --- a/code/modules/mining/laborcamp/laborstacker.dm +++ b/code/modules/mining/laborcamp/laborstacker.dm @@ -86,7 +86,8 @@ else if(href_list["choice"] == "insert") var/obj/item/weapon/card/id/prisoner/I = usr.get_active_hand() if(istype(I)) - usr.drop_item() + if(!usr.drop_item()) + return I.loc = src inserted_id = I else usr << "Invalid ID." diff --git a/code/modules/mining/money_bag.dm b/code/modules/mining/money_bag.dm index 4f0e74aff4c..e9befa30d43 100644 --- a/code/modules/mining/money_bag.dm +++ b/code/modules/mining/money_bag.dm @@ -60,8 +60,9 @@ ..() if (istype(W, /obj/item/weapon/coin)) var/obj/item/weapon/coin/C = W + if(!user.drop_item()) + return user << "You add the [C.name] into the bag." - usr.drop_item() contents += C if (istype(W, /obj/item/weapon/moneybag)) var/obj/item/weapon/moneybag/C = W diff --git a/code/modules/mining/satchel_ore_boxdm.dm b/code/modules/mining/satchel_ore_boxdm.dm index 211cadcdf97..edb420703b4 100644 --- a/code/modules/mining/satchel_ore_boxdm.dm +++ b/code/modules/mining/satchel_ore_boxdm.dm @@ -11,7 +11,8 @@ /obj/structure/ore_box/attackby(obj/item/weapon/W as obj, mob/user as mob, params) if (istype(W, /obj/item/weapon/ore)) - user.drop_item() + if(!user.drop_item()) + return W.loc = src if (istype(W, /obj/item/weapon/storage)) var/obj/item/weapon/storage/S = W diff --git a/code/modules/mob/living/carbon/brain/MMI.dm b/code/modules/mob/living/carbon/brain/MMI.dm index 95838e1b90d..ffb73ef359f 100644 --- a/code/modules/mob/living/carbon/brain/MMI.dm +++ b/code/modules/mob/living/carbon/brain/MMI.dm @@ -41,6 +41,8 @@ user << "You aren't sure where this brain came from, but you're pretty sure it's a useless brain!" return + if(!user.unEquip(src)) + return var/mob/living/carbon/brain/B = newbrain.brainmob if(!B.key) var/mob/dead/observer/ghost = B.get_ghost() @@ -58,7 +60,6 @@ dead_mob_list -= brainmob //Update dem lists living_mob_list += brainmob - user.drop_item() newbrain.loc = src //P-put your brain in it brain = newbrain diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index a35b0988bca..e37ac76c526 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -450,7 +450,8 @@ else if(cell) user << "There is a power cell already installed!" else - user.drop_item() + if(!user.drop_item()) + return W.loc = src cell = W user << "You insert the power cell." @@ -525,27 +526,29 @@ else if(istype(W, /obj/item/borg/upgrade/)) var/obj/item/borg/upgrade/U = W if(!opened) - usr << "You must access the borgs internals!" + user << "You must access the borgs internals!" else if(!src.module && U.require_module) - usr << "The borg must choose a module before it can be upgraded!" + user << "The borg must choose a module before it can be upgraded!" else if(U.locked) - usr << "The upgrade is locked and cannot be used yet!" + user << "The upgrade is locked and cannot be used yet!" else + if(!user.drop_item()) + return if(U.action(src)) - usr << "You apply the upgrade to [src]." - usr.drop_item() + user << "You apply the upgrade to [src]." U.loc = src else - usr << "Upgrade error." + user << "Upgrade error." else if(istype(W, /obj/item/device/toner)) if(toner >= tonermax) - usr << "The toner level of [src] is at it's highest level possible!" + user << "The toner level of [src] is at it's highest level possible!" else + if(!user.drop_item()) + return toner = 40 - usr.drop_item() qdel(W) - usr << "You fill the toner level of [src] to its max capacity." + user << "You fill the toner level of [src] to its max capacity." else if(W.force && W.damtype != STAMINA) //only sparks if real damage is dealt. diff --git a/code/modules/paperwork/clipboard.dm b/code/modules/paperwork/clipboard.dm index ac8e32ecf63..8ae11c8f83c 100644 --- a/code/modules/paperwork/clipboard.dm +++ b/code/modules/paperwork/clipboard.dm @@ -28,7 +28,8 @@ /obj/item/weapon/clipboard/attackby(obj/item/weapon/W, mob/user, params) if(istype(W, /obj/item/weapon/paper)) - user.drop_item() + if(!user.unEquip(W)) + return W.loc = src toppaper = W user << "You clip the paper onto \the [src]." @@ -76,7 +77,8 @@ if(!haspen) if(istype(usr.get_active_hand(), /obj/item/weapon/pen)) var/obj/item/weapon/pen/W = usr.get_active_hand() - usr.drop_item() + if(!usr.unEquip(W)) + return W.loc = src haspen = W usr << "You slot [W] into [src]." diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm index 351443ec5bb..4d071708fb3 100644 --- a/code/modules/paperwork/filingcabinet.dm +++ b/code/modules/paperwork/filingcabinet.dm @@ -43,8 +43,9 @@ /obj/structure/filingcabinet/attackby(obj/item/P, mob/user, params) if(istype(P, /obj/item/weapon/paper) || istype(P, /obj/item/weapon/folder) || istype(P, /obj/item/weapon/photo) || istype(P, /obj/item/documents)) + if(!user.drop_item()) + return user << "You put [P] in [src]." - user.drop_item() P.loc = src icon_state = "[initial(icon_state)]-open" sleep(5) diff --git a/code/modules/paperwork/folders.dm b/code/modules/paperwork/folders.dm index b75140b9c43..6f725e04187 100644 --- a/code/modules/paperwork/folders.dm +++ b/code/modules/paperwork/folders.dm @@ -31,7 +31,8 @@ /obj/item/weapon/folder/attackby(obj/item/weapon/W, mob/user, params) if(istype(W, /obj/item/weapon/paper) || istype(W, /obj/item/weapon/photo) || istype(W, /obj/item/documents)) - user.drop_item() + if(!user.unEquip(W)) + return W.loc = src user << "You put [W] into [src]." update_icon() diff --git a/code/modules/paperwork/handlabeler.dm b/code/modules/paperwork/handlabeler.dm index 96c8f83e2b0..bd947c4b7a3 100644 --- a/code/modules/paperwork/handlabeler.dm +++ b/code/modules/paperwork/handlabeler.dm @@ -55,8 +55,9 @@ /obj/item/weapon/hand_labeler/attackby(obj/item/I as obj, mob/user as mob, params) ..() if(istype(I, /obj/item/hand_labeler_refill)) + if(!user.unEquip(I)) + return user << "You insert [I] into [src]." - user.drop_item() qdel(I) labels_left = initial(labels_left) return diff --git a/code/modules/paperwork/paperbin.dm b/code/modules/paperwork/paperbin.dm index fbad5ce1f85..dd672a6d11c 100644 --- a/code/modules/paperwork/paperbin.dm +++ b/code/modules/paperwork/paperbin.dm @@ -71,7 +71,8 @@ if(!istype(i)) return ..() - user.drop_item() + if(!user.unEquip(i)) + return i.loc = src user << "You put [i] in [src]." papers.Add(i) diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm index 0554c0ab656..d5efcbe8dd4 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -96,19 +96,25 @@ if(M.client) M.mind_initialize() //give them a mind datum if they don't have one. if(user.mind in ticker.mode.A_bosses) - if(ticker.mode.add_gangster(M.mind,"A")) - M.Paralyse(5) - cooldown(max(0,ticker.mode.B_gang.len - ticker.mode.A_gang.len)) - else - user << "This mind is resistant to recruitment!" + var/recruitable = ticker.mode.add_gangster(M.mind,"A") + switch(recruitable) + if(2) + M.Paralyse(5) + cooldown(max(0,ticker.mode.B_gang.len - ticker.mode.A_gang.len)) + if(1) + user << "This mind has already been recruited by another gang!" + else + user << "This mind is resistant to recruitment!" else if(user.mind in ticker.mode.B_bosses) - if(ticker.mode.add_gangster(M.mind,"B")) - M.Paralyse(5) - cooldown(max(0,ticker.mode.A_gang.len - ticker.mode.B_gang.len)) - else - user << "This mind is resistant to recruitment!" - else - user << "This mind is so vacant that it is not susceptible to influence!" + var/recruitable = ticker.mode.add_gangster(M.mind,"B") + switch(recruitable) + if(2) + M.Paralyse(5) + cooldown(max(0,ticker.mode.A_gang.len - ticker.mode.B_gang.len)) + if(1) + user << "This mind has already been recruited by another gang!" + else + user << "This mind is resistant to recruitment!" /obj/item/weapon/pen/gang/proc/cooldown(modifier) cooldown = 1 diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index 92f82705db9..35e87edada7 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -223,7 +223,8 @@ /obj/machinery/photocopier/attackby(obj/item/O, mob/user, params) if(istype(O, /obj/item/weapon/paper)) if(copier_empty()) - user.drop_item() + if(!user.drop_item()) + return copy = O O.loc = src user << "You insert [O] into [src]." @@ -234,7 +235,8 @@ else if(istype(O, /obj/item/weapon/photo)) if(copier_empty()) - user.drop_item() + if(!user.drop_item()) + return photocopy = O O.loc = src user << "You insert [O] into [src]." @@ -245,7 +247,8 @@ else if(istype(O, /obj/item/device/toner)) if(toner <= 0) - user.drop_item() + if(!user.drop_item()) + return qdel(O) toner = 40 user << "You insert [O] into [src]." diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm index 378ec945f85..0832ab226f3 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -140,8 +140,9 @@ if(pictures_left) user << "[src] still has some film in it!" return + if(!user.unEquip(I)) + return user << "You insert [I] into [src]." - user.drop_item() qdel(I) pictures_left = pictures_max return diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 7ddb67eefeb..c57cd9b9875 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -413,7 +413,8 @@ if (stat & MAINT) user << "There is no connector for your power cell!" return - user.drop_item() + if(!user.drop_item()) + return W.loc = src cell = W user.visible_message(\ diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index 00eb9f8c827..3608dde2b80 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -347,6 +347,8 @@ src.add_fingerprint(user) var/obj/item/weapon/light/L = W if(istype(L, light_type)) + if(!user.drop_item()) + return status = L.status user << "You insert the [L.name]." switchcount = L.switchcount @@ -355,7 +357,6 @@ on = has_power() update() - user.drop_item() //drop the item to update overlays and such qdel(L) if(on && rigged) diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm index 3202414ffb7..82c2955ad09 100644 --- a/code/modules/power/singularity/collector.dm +++ b/code/modules/power/singularity/collector.dm @@ -64,7 +64,8 @@ var/global/list/rad_collectors = list() if(src.P) user << "There's already a plasma tank loaded!" return 1 - user.drop_item() + if(!user.drop_item()) + return 1 src.P = W W.loc = src update_icons() diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index 1c8838e4311..38bf1d6c869 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -253,8 +253,9 @@ if(!tracker) if(istype(W, /obj/item/weapon/tracker_electronics)) + if(!user.drop_item()) + return tracker = 1 - user.drop_item() qdel(W) user.visible_message("[user] inserts the electronics into the solar assembly.", "You insert the electronics into the solar assembly.") return 1 diff --git a/code/modules/projectiles/ammunition/ammo_casings.dm b/code/modules/projectiles/ammunition/ammo_casings.dm index 3e363056825..d89eea7c8fa 100644 --- a/code/modules/projectiles/ammunition/ammo_casings.dm +++ b/code/modules/projectiles/ammunition/ammo_casings.dm @@ -232,7 +232,8 @@ desc = "Its nerf or nothing! ... Although, this one doesn't look too safe." user << "You pop the safety cap off of [src]." else if ((istype(A, /obj/item/weapon/pen)) && modified && !BB.contents.len) - user.drop_item() + if(!user.unEquip(A)) + return A.loc = BB BB.damage = 5 BB.nodamage = 0 diff --git a/code/modules/projectiles/ammunition/magazines.dm b/code/modules/projectiles/ammunition/magazines.dm index 342f7234c62..22965e03d98 100644 --- a/code/modules/projectiles/ammunition/magazines.dm +++ b/code/modules/projectiles/ammunition/magazines.dm @@ -134,6 +134,17 @@ ..() icon_state = "45-[ammo_count() ? "8" : "0"]" +/obj/item/ammo_box/magazine/uzim9mm + name = "uzi magazine (9mm)" + icon_state = "uzi9mm-32" + ammo_type = /obj/item/ammo_casing/c9mm + caliber = "9mm" + max_ammo = 32 + +/obj/item/ammo_box/magazine/uzim9mm/update_icon() + ..() + icon_state = "uzi9mm-[round(ammo_count(),4)]" + /obj/item/ammo_box/magazine/smgm9mm name = "SMG magazine (9mm)" icon_state = "smg9mm-20" @@ -157,11 +168,11 @@ ..() icon_state = "c20r45-[round(ammo_count(),2)]" -obj/item/ammo_box/magazine/tommygunm9mm - name = "drum magazine (9mm)" +obj/item/ammo_box/magazine/tommygunm45 + name = "drum magazine (.45)" icon_state = "drum45" - ammo_type = /obj/item/ammo_casing/c9mm - caliber = "9mm" + ammo_type = /obj/item/ammo_casing/c45 + caliber = ".45" max_ammo = 50 /obj/item/ammo_box/magazine/m50 diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 9b1666fd2f0..dd9c381e2d6 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -98,8 +98,8 @@ if(heavy_weapon) if(user.get_inactive_hand()) if(prob(15)) - user.visible_message("[src] flies out of [user]'s hands!", "[src] kicks out of your grip!") - user.drop_item() + if(user.drop_item()) + user.visible_message("[src] flies out of [user]'s hands!", "[src] kicks out of your grip!") /obj/item/weapon/gun/emp_act(severity) for(var/obj/O in contents) @@ -235,7 +235,8 @@ if(user.l_hand != src && user.r_hand != src) user << "You'll need [src] in your hands to do that!" return - user.drop_item() + if(!user.unEquip(A)) + return user << "You click [S] into place on [src]." if(S.on) SetLuminosity(0) diff --git a/code/modules/projectiles/guns/grenade_launcher.dm b/code/modules/projectiles/guns/grenade_launcher.dm index 9ae8b1e8c6f..2075ebeaa60 100644 --- a/code/modules/projectiles/guns/grenade_launcher.dm +++ b/code/modules/projectiles/guns/grenade_launcher.dm @@ -20,7 +20,8 @@ if((istype(I, /obj/item/weapon/grenade))) if(grenades.len < max_grenades) - user.drop_item() + if(!user.unEquip(I)) + return I.loc = src grenades += I user << "You put the grenade in the grenade launcher." diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm index 66184119b45..7bea46b2f96 100644 --- a/code/modules/projectiles/guns/projectile.dm +++ b/code/modules/projectiles/guns/projectile.dm @@ -68,7 +68,8 @@ if(user.l_hand != src && user.r_hand != src) user << "You'll need [src] in your hands to do that." return - user.drop_item() + if(!user.unEquip(A)) + return user << "You screw [S] onto [src]." suppressed = A S.oldsound = fire_sound diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm index badf178b878..19545232181 100644 --- a/code/modules/projectiles/guns/projectile/automatic.dm +++ b/code/modules/projectiles/guns/projectile/automatic.dm @@ -106,7 +106,13 @@ icon_state = "c20r[magazine ? "-[Ceiling(get_ammo(0)/4)*4]" : ""][chambered ? "" : "-e"][suppressed ? "-suppressed" : ""]" return - +/obj/item/weapon/gun/projectile/automatic/mini_uzi + name = "uzi" + desc = "A lightweight, burst-fire submachine gun, for when you really want someone dead. Uses 9mm rounds." + icon_state = "mini-uzi" + origin_tech = "combat=5;materials=2;syndicate=8" + mag_type = /obj/item/ammo_box/magazine/uzim9mm + burst_size = 2 /obj/item/weapon/gun/projectile/automatic/l6_saw name = "syndicate LMG" @@ -237,7 +243,7 @@ w_class = 5 slot_flags = 0 origin_tech = "combat=5;materials=1;syndicate=2" - mag_type = /obj/item/ammo_box/magazine/tommygunm9mm + mag_type = /obj/item/ammo_box/magazine/tommygunm45 fire_sound = 'sound/weapons/Gunshot_smg.ogg' can_suppress = 0 burst_size = 4 diff --git a/code/modules/projectiles/guns/projectile/revolver.dm b/code/modules/projectiles/guns/projectile/revolver.dm index 7178c36469f..9e1dc22e592 100644 --- a/code/modules/projectiles/guns/projectile/revolver.dm +++ b/code/modules/projectiles/guns/projectile/revolver.dm @@ -79,7 +79,7 @@ playsound(user, fire_sound, 50, 1) user << "[src] blows up in your face!" user.take_organ_damage(0,20) - user.drop_item() + user.unEquip(src) qdel(src) return 0 ..() diff --git a/code/modules/projectiles/guns/syringe_gun.dm b/code/modules/projectiles/guns/syringe_gun.dm index f0a17314848..6ed12b01b64 100644 --- a/code/modules/projectiles/guns/syringe_gun.dm +++ b/code/modules/projectiles/guns/syringe_gun.dm @@ -63,7 +63,8 @@ /obj/item/weapon/gun/syringe/attackby(var/obj/item/A as obj, mob/user as mob, params, var/show_msg = 1) if(istype(A, /obj/item/weapon/reagent_containers/syringe)) if(syringes.len < max_syringes) - user.drop_item() + if(!user.unEquip(A)) + return user << "You load [A] into \the [src]." syringes.Add(A) A.loc = src diff --git a/code/modules/projectiles/pins.dm b/code/modules/projectiles/pins.dm index acc5f311420..123e35a2fd8 100644 --- a/code/modules/projectiles/pins.dm +++ b/code/modules/projectiles/pins.dm @@ -30,7 +30,8 @@ user << "You remove [G]'s old pin." if(!G.pin) - user.drop_item() + if(!user.unEquip(src)) + return gun_insert(user, G) user << "You insert [src] into [G]." else diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index 3dab9a3442a..0fbb8ee12b3 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -155,9 +155,10 @@ if(src.beaker) user << "A beaker is already loaded into the machine!" return + if(!user.drop_item()) + return src.beaker = B - user.drop_item() B.loc = src user << "You add the beaker to the machine." SSnano.update_uis(src) // update all UIs attached to src @@ -290,8 +291,10 @@ if(src.beaker) user << "A beaker is already loaded into the machine!" return + if(!user.drop_item()) + return + src.beaker = B - user.drop_item() B.loc = src user << "You add the beaker to the machine." src.updateUsrDialog() @@ -301,8 +304,10 @@ if(src.loaded_pill_bottle) user << "A pill bottle is already loaded into the machine!" return + if(!user.drop_item()) + return + src.loaded_pill_bottle = B - user.drop_item() B.loc = src user << "You add the pill bottle into the dispenser slot." src.updateUsrDialog() @@ -619,8 +624,10 @@ if(src.beaker) user << "A beaker is already loaded into the machine!" return + if(!user.drop_item()) + return + src.beaker = B - user.drop_item() B.loc = src user << "You add the beaker to the machine." src.updateUsrDialog() @@ -630,8 +637,10 @@ if(src.loaded_pill_bottle) user << "A pill bottle is already loaded into the machine!" return + if(!user.drop_item()) + return + src.loaded_pill_bottle = B - user.drop_item() B.loc = src user << "You add the pill bottle into the dispenser slot." src.updateUsrDialog() @@ -919,9 +928,10 @@ if(src.beaker) user << "A beaker is already loaded into the machine!" return + if(!user.drop_item()) + return src.beaker = I - user.drop_item() I.loc = src user << "You add the beaker to the machine." src.updateUsrDialog() @@ -1053,8 +1063,9 @@ if (beaker) return 1 else + if(!user.drop_item()) + return 1 src.beaker = O - user.drop_item() O.loc = src update_icon() src.updateUsrDialog() @@ -1548,8 +1559,9 @@ if (beaker) return 1 else + if(!user.drop_item()) + return 1 src.beaker = O - user.drop_item() O.loc = src update_icon() src.updateUsrDialog() diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index 4ef5f0d72ed..553f6c9cfbc 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -157,7 +157,8 @@ /obj/structure/reagent_dispensers/water_cooler/attackby(var/obj/item/I, var/mob/user, params) if(istype(I, /obj/item/weapon/paper)) - user.drop_item() + if(!user.drop_item()) + return qdel(I) cups++ return diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index d3fa4a658a6..74f51bf24e2 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -123,9 +123,9 @@ stuff_mob_in(G.affecting, user) return - if(!I || I.flags & NODROP) return + if(!user.drop_item()) + return - user.drop_item() I.loc = src user.visible_message("[user.name] places \the [I] into \the [src].", \ "You place \the [I] into \the [src].") diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm index be722fe8fb0..9663bf9b2cd 100644 --- a/code/modules/research/experimentor.dm +++ b/code/modules/research/experimentor.dm @@ -152,9 +152,10 @@ if(O.reliability < 90 && O.crit_fail == 0) usr << "Item is neither reliable enough or broken enough to learn from." return + if(!user.drop_item()) + return busy = 1 loaded_item = O - user.drop_item() O.loc = src user << "You add the [O.name] to the machine." flick("h_lathe_load", src) diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index 3182c0156d0..a194ed5327f 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -157,7 +157,8 @@ won't update every console in existence) but it's more of a hassle to do. Also, else user << "Machine cannot accept disks in that format." return - user.drop_item() + if(!user.drop_item()) + return D.loc = src user << "You add the disk to the machine!" else diff --git a/code/modules/surgery/cybernetic_implants.dm b/code/modules/surgery/cybernetic_implants.dm index 3f4dcb5210c..ced4776f535 100644 --- a/code/modules/surgery/cybernetic_implants.dm +++ b/code/modules/surgery/cybernetic_implants.dm @@ -70,9 +70,10 @@ if(full) user << "You can't seem to implant anything else into the [target]'s [target_zone]!" else + if(!user.drop_item()) + return user.visible_message("[user] inserts [implant] into the [target]'s [target_zone == "head" ? "brain" : target_zone]!", "You insert [implant] into the [target]'s [target_zone == "head" ? "brain" : target_zone].") implant.owner = target implant.function() - user.drop_item() target.internal_organs |= implant implant.loc = target \ No newline at end of file diff --git a/code/modules/surgery/limb augmentation.dm b/code/modules/surgery/limb augmentation.dm index 950c4a536b0..22d168044c0 100644 --- a/code/modules/surgery/limb augmentation.dm +++ b/code/modules/surgery/limb augmentation.dm @@ -71,6 +71,8 @@ user << "That is the wrong robotic limb for this body part." return 0 + if(!user.drop_item()) + return 0 var/mob/living/carbon/human/H = target user.visible_message("[user] successfully augments [target]'s [parse_zone(target_zone)]!", "You successfully augment [target]'s [parse_zone(target_zone)].") L.loc = get_turf(target) @@ -92,7 +94,6 @@ H.organs += new /obj/item/organ/limb/robot/chest(src) for(var/datum/disease/appendicitis/A in H.viruses) //If they already have Appendicitis, Remove it A.cure(1) - user.drop_item() qdel(tool) H.update_damage_overlays(0) H.update_augments() //Gives them the Cyber limb overlay diff --git a/code/modules/telesci/bscrystal.dm b/code/modules/telesci/bscrystal.dm index c006939d876..74b9807dade 100644 --- a/code/modules/telesci/bscrystal.dm +++ b/code/modules/telesci/bscrystal.dm @@ -21,7 +21,7 @@ PoolOrNew(/obj/effect/effect/sparks, loc) playsound(src.loc, "sparks", 50, 1) blink_mob(user) - user.drop_item() + user.unEquip(src) qdel(src) /obj/item/bluespace_crystal/proc/blink_mob(var/mob/living/L) diff --git a/code/modules/telesci/telesci_computer.dm b/code/modules/telesci/telesci_computer.dm index aa0343a1641..0450b8109c1 100644 --- a/code/modules/telesci/telesci_computer.dm +++ b/code/modules/telesci/telesci_computer.dm @@ -58,7 +58,8 @@ if(crystals.len >= max_crystals) user << "There are not enough crystal slots." return - user.drop_item() + if(!user.drop_item()) + return crystals += W W.loc = null user.visible_message("[user] inserts [W] into \the [src]'s crystal slot.", "You insert [W] into \the [src]'s crystal slot.") diff --git a/html/changelog.html b/html/changelog.html index 6845a7e00f6..457de93df40 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,31 @@ -->
+

18 June 2015

+

AnturK updated:

+ +

Ikarrus updated:

+ +

Miauw updated:

+ +

Xhuis updated:

+ +

phil235 updated:

+ +

15 June 2015

Incoming5643 updated: