mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-24 05:23:22 +01:00
Initial merge http://code.google.com/p/tgstation13/source/browse/trunk/ rev 4489 (I think) with BS12
Conflicts: README.txt SQL/tgstation_schema.sql baystation12.dme code/ATMOSPHERICS/components/unary/vent_pump.dm code/ATMOSPHERICS/pipes.dm code/FEA/FEA_airgroup.dm code/FEA/FEA_fire.dm code/FEA/FEA_gas_mixture.dm code/FEA/FEA_turf_tile.dm code/TriDimension/Pipes.dm code/WorkInProgress/buildmode.dm code/WorkInProgress/organs/organs.dm code/WorkInProgress/virus2/Disease2/analyser.dm code/WorkInProgress/virus2/Disease2/biohazard destroyer.dm code/WorkInProgress/virus2/Disease2/cureimplanter.dm code/WorkInProgress/virus2/Disease2/diseasesplicer.dm code/WorkInProgress/virus2/Disease2/dishincubator.dm code/WorkInProgress/virus2/Disease2/isolator.dm code/WorkInProgress/virus2/Disease2/monkeydispensor.dm code/WorkInProgress/virus2/analyser.dm code/WorkInProgress/virus2/antibodies.dm code/WorkInProgress/virus2/base.dm code/WorkInProgress/virus2/biohazard destroyer.dm code/WorkInProgress/virus2/cureimplanter.dm code/WorkInProgress/virus2/curer.dm code/WorkInProgress/virus2/diseasesplicer.dm code/WorkInProgress/virus2/dishincubator.dm code/WorkInProgress/virus2/isolator.dm code/WorkInProgress/virus2/monkeydispensor.dm code/datums/ai_laws.dm code/datums/configuration.dm code/datums/datumvars.dm code/datums/diseases/alien_embryo.dm code/datums/diseases/appendicitis.dm code/datums/diseases/robotic_transformation.dm code/datums/diseases/xeno_transformation.dm code/datums/helper_datums/getrev.dm code/datums/helper_datums/teleport.dm code/datums/helper_datums/tension.dm code/datums/mind.dm code/datums/mixed.dm code/datums/shuttle_controller.dm code/datums/spell.dm code/datums/spells/ethereal_jaunt.dm code/datums/spells/genetic.dm code/datums/spells/wizard.dm code/defines/area/Space Station 13 areas.dm code/defines/atom.dm code/defines/global.dm code/defines/mob/dead/observer.dm code/defines/mob/living/carbon/alien.dm code/defines/mob/living/carbon/alien_humanoid.dm code/defines/mob/living/carbon/carbon.dm code/defines/mob/living/carbon/metroid.dm code/defines/mob/living/carbon/monkey.dm code/defines/mob/living/living.dm code/defines/mob/living/silicon/ai.dm code/defines/mob/living/silicon/robot.dm code/defines/obj.dm code/defines/obj/closet.dm code/defines/obj/clothing.dm code/defines/obj/clothing/costume.dm code/defines/obj/computer.dm code/defines/obj/costume.dm code/defines/obj/decal.dm code/defines/obj/door.dm code/defines/obj/hydro.dm code/defines/obj/machinery.dm code/defines/obj/storage.dm code/defines/obj/supplypacks.dm code/defines/obj/toy.dm code/defines/obj/vending.dm code/defines/obj/weapon.dm code/defines/procs/AStar.dm code/defines/procs/command_name.dm code/defines/procs/dbcore.dm code/defines/procs/forum_activation.dm code/defines/procs/gamehelpers.dm code/defines/procs/helpers.dm code/defines/procs/icon_procs.dm code/defines/procs/station_name.dm code/defines/procs/statistics.dm code/defines/turf.dm code/game/algorithm.dm code/game/area/areas.dm code/game/asteroid/artifacts.dm code/game/atom_procs.dm code/game/cellautomata.dm code/game/dna.dm code/game/events/EventProcs/clang.dm code/game/events/EventProcs/dust.dm code/game/events/EventProcs/ninja_abilities.dm code/game/events/EventProcs/ninja_equipment.dm code/game/events/EventProcs/space_ninja.dm code/game/events/EventProcs/spacevines.dm code/game/gamemodes/blob/blob.dm code/game/gamemodes/blob/blob_finish.dm code/game/gamemodes/blob/blob_report.dm code/game/gamemodes/blob/theblob.dm code/game/gamemodes/changeling/changeling.dm code/game/gamemodes/changeling/changeling_powers.dm code/game/gamemodes/changeling/modularchangling.dm code/game/gamemodes/changeling/traitor_chan.dm code/game/gamemodes/cult/cult.dm code/game/gamemodes/cult/cult_items.dm code/game/gamemodes/cult/cult_structures.dm code/game/gamemodes/events.dm code/game/gamemodes/events/black_hole.dm code/game/gamemodes/events/miniblob.dm code/game/gamemodes/factions.dm code/game/gamemodes/game_mode.dm code/game/gamemodes/gameticker.dm code/game/gamemodes/malfunction/malfunction.dm code/game/gamemodes/meteor/meteor.dm code/game/gamemodes/meteor/meteors.dm code/game/gamemodes/nuclear/nuclear.dm code/game/gamemodes/nuclear/nuclearbomb.dm code/game/gamemodes/nuclear/pinpointer.dm code/game/gamemodes/objective.dm code/game/gamemodes/revolution/revolution.dm code/game/gamemodes/sandbox/h_sandbox.dm code/game/gamemodes/sandbox/sandbox.dm code/game/gamemodes/setupgame.dm code/game/gamemodes/traitor/traitor.dm code/game/gamemodes/wizard/rightandwrong.dm code/game/gamemodes/wizard/soulstone.dm code/game/gamemodes/wizard/spellbook.dm code/game/gamemodes/wizard/spells.dm code/game/gamemodes/wizard/veilrender.dm code/game/gamemodes/wizard/wizard.dm code/game/hud.dm code/game/jobs/access.dm code/game/jobs/job/captain.dm code/game/jobs/job/civilian.dm code/game/jobs/job/civilian_chaplain.dm code/game/jobs/job/engineering.dm code/game/jobs/job/job.dm code/game/jobs/job/medical.dm code/game/jobs/job/science.dm code/game/jobs/job/security.dm code/game/jobs/job/silicon.dm code/game/jobs/job_controller.dm code/game/jobs/jobs.dm code/game/machinery/Beacon.dm code/game/machinery/OpTable.dm code/game/machinery/Sleeper.dm code/game/machinery/alarm.dm code/game/machinery/atmo_control.dm code/game/machinery/atmoalter/area_atmos_computer.dm code/game/machinery/autolathe.dm code/game/machinery/biogenerator.dm code/game/machinery/bots/bots.dm code/game/machinery/bots/cleanbot.dm code/game/machinery/bots/ed209bot.dm code/game/machinery/bots/floorbot.dm code/game/machinery/bots/medbot.dm code/game/machinery/bots/mulebot.dm code/game/machinery/camera.dm code/game/machinery/cell_charger.dm code/game/machinery/cloning.dm code/game/machinery/computer/HolodeckControl.dm code/game/machinery/computer/Operating.dm code/game/machinery/computer/ai_core.dm code/game/machinery/computer/arcade.dm code/game/machinery/computer/atmos_alert.dm code/game/machinery/computer/buildandrepair.dm code/game/machinery/computer/card.dm code/game/machinery/computer/cloning.dm code/game/machinery/computer/communications.dm code/game/machinery/computer/computer.dm code/game/machinery/computer/crew.dm code/game/machinery/computer/hologram.dm code/game/machinery/computer/law.dm code/game/machinery/computer/medical.dm code/game/machinery/computer/message.dm code/game/machinery/computer/pod.dm code/game/machinery/computer/power.dm code/game/machinery/computer/prisoner.dm code/game/machinery/computer/robot.dm code/game/machinery/computer/security.dm code/game/machinery/computer/shuttle.dm code/game/machinery/constructable_frame.dm code/game/machinery/deployable.dm code/game/machinery/door_control.dm code/game/machinery/doors/airlock.dm code/game/machinery/doors/airlock_electronics.dm code/game/machinery/doors/brigdoors.dm code/game/machinery/doors/door.dm code/game/machinery/doors/firedoor.dm code/game/machinery/doors/poddoor.dm code/game/machinery/doors/unpowered.dm code/game/machinery/doors/windowdoor.dm code/game/machinery/flasher.dm code/game/machinery/gateway.dm code/game/machinery/hologram.dm code/game/machinery/hydroponics.dm code/game/machinery/kitchen/gibber.dm code/game/machinery/morgue.dm code/game/machinery/newscaster.dm code/game/machinery/pipe/construction.dm code/game/machinery/pipe/pipe_dispenser.dm code/game/machinery/portable_turret.dm code/game/machinery/recharger.dm code/game/machinery/rechargestation.dm code/game/machinery/requests_console.dm code/game/machinery/shieldgen.dm code/game/machinery/spaceheater.dm code/game/machinery/suit_storage_unit.dm code/game/machinery/syndicatebeacon.dm code/game/machinery/telecomms/broadcaster.dm code/game/machinery/telecomms/logbrowser.dm code/game/machinery/telecomms/machine_interactions.dm code/game/machinery/telecomms/telemonitor.dm code/game/machinery/telecomms/traffic_control.dm code/game/machinery/teleporter.dm code/game/machinery/turrets.dm code/game/machinery/vending.dm code/game/magic/cultist/ritual.dm code/game/magic/cultist/runes.dm code/game/magic/library.dm code/game/magic/musician.dm code/game/master_controller.dm code/game/mecha/combat/combat.dm code/game/mecha/combat/gygax.dm code/game/mecha/equipment/mecha_equipment.dm code/game/mecha/equipment/tools/tools.dm code/game/mecha/equipment/weapons/weapons.dm code/game/mecha/mech_fabricator.dm code/game/mecha/mecha.dm code/game/mecha/mecha_construction_paths.dm code/game/mecha/mecha_wreckage.dm code/game/mecha/medical/medical.dm code/game/mecha/medical/odysseus.dm code/game/mecha/working/ripley.dm code/game/objects/alien/facehugger.dm code/game/objects/alien/resin.dm code/game/objects/bodybag.dm code/game/objects/closets.dm code/game/objects/closets/emergency.dm code/game/objects/closets/extinguisher.dm code/game/objects/closets/fireaxe.dm code/game/objects/closets/firecloset.dm code/game/objects/closets/fitnesscloset.dm code/game/objects/closets/janitor.dm code/game/objects/closets/kitchen.dm code/game/objects/closets/nuclear.dm code/game/objects/closets/secure/bar.dm code/game/objects/closets/secure/cargo.dm code/game/objects/closets/secure/engineering.dm code/game/objects/closets/secure/hydroponics.dm code/game/objects/closets/secure/medical.dm code/game/objects/closets/secure/personal.dm code/game/objects/closets/secure/scientist.dm code/game/objects/closets/secure/secure_closets.dm code/game/objects/closets/secure/security.dm code/game/objects/closets/syndicate.dm code/game/objects/closets/wardrobe.dm code/game/objects/contraband.dm code/game/objects/crates.dm code/game/objects/devices/PDA/PDA.dm code/game/objects/devices/PDA/cart.dm code/game/objects/devices/PDA/chatroom.dm code/game/objects/devices/aicard.dm code/game/objects/devices/flash.dm code/game/objects/devices/flashlight.dm code/game/objects/devices/paicard.dm code/game/objects/devices/scanners.dm code/game/objects/devices/taperecorder.dm code/game/objects/devices/traitordevices.dm code/game/objects/door_assembly.dm code/game/objects/effect_system.dm code/game/objects/electricchair.dm code/game/objects/explosion.dm code/game/objects/gibs.dm code/game/objects/grille.dm code/game/objects/items.dm code/game/objects/items/blueprints.dm code/game/objects/items/candle.dm code/game/objects/items/clothing.dm code/game/objects/items/food.dm code/game/objects/items/helper_procs.dm code/game/objects/items/item.dm code/game/objects/items/robot_items.dm code/game/objects/items/robot_parts.dm code/game/objects/items/tk_grab.dm code/game/objects/items/weapons/AI_modules.dm code/game/objects/items/weapons/RCD.dm code/game/objects/items/weapons/RSF.dm code/game/objects/items/weapons/cameras.dm code/game/objects/items/weapons/cards_ids.dm code/game/objects/items/weapons/cigs_lighters.dm code/game/objects/items/weapons/clown_items.dm code/game/objects/items/weapons/dna_injector.dm code/game/objects/items/weapons/explosives.dm code/game/objects/items/weapons/flamethrower.dm code/game/objects/items/weapons/grenades.dm code/game/objects/items/weapons/hand_lablers.dm code/game/objects/items/weapons/hydroponics.dm code/game/objects/items/weapons/implants/implant.dm code/game/objects/items/weapons/implants/implantcase.dm code/game/objects/items/weapons/implants/implantchair.dm code/game/objects/items/weapons/implants/implanter.dm code/game/objects/items/weapons/implants/implantfreedom.dm code/game/objects/items/weapons/implants/implantnanoaug.dm code/game/objects/items/weapons/implants/implantpad.dm code/game/objects/items/weapons/kitchen.dm code/game/objects/items/weapons/manuals.dm code/game/objects/items/weapons/medical.dm code/game/objects/items/weapons/mops_cleaners.dm code/game/objects/items/weapons/papers_bins.dm code/game/objects/items/weapons/stunbaton.dm code/game/objects/items/weapons/surgery_tools.dm code/game/objects/items/weapons/swords_axes_etc.dm code/game/objects/items/weapons/table_rack_parts.dm code/game/objects/items/weapons/tools.dm code/game/objects/items/weapons/twohanded.dm code/game/objects/items/weapons/wrappingpaper.dm code/game/objects/mineral_doors.dm code/game/objects/radio/beacon.dm code/game/objects/radio/electropack.dm code/game/objects/radio/encryptionkey.dm code/game/objects/radio/headset.dm code/game/objects/radio/intercom.dm code/game/objects/radio/radio.dm code/game/objects/secstorage/sbriefcase.dm code/game/objects/secstorage/ssafe.dm code/game/objects/stacks/glass.dm code/game/objects/stacks/metal.dm code/game/objects/stacks/stack.dm code/game/objects/stacks/wood.dm code/game/objects/stool.dm code/game/objects/storage/backpack.dm code/game/objects/storage/belt.dm code/game/objects/storage/bible.dm code/game/objects/storage/briefcase.dm code/game/objects/storage/lockbox.dm code/game/objects/storage/storage.dm code/game/objects/storage/uplink_kits.dm code/game/objects/structures.dm code/game/objects/tables_racks.dm code/game/objects/tank.dm code/game/objects/tanks/emergency.dm code/game/objects/tanks/jetpack.dm code/game/objects/toys.dm code/game/objects/transfer_valve.dm code/game/objects/uplinks.dm code/game/objects/watercloset.dm code/game/objects/weapons.dm code/game/objects/windoor_assembly.dm code/game/objects/window.dm code/game/prisonshuttle.dm code/game/smoothwall.dm code/game/sound.dm code/game/step_triggers.dm code/game/structure/structure.dm code/game/supplyshuttle.dm code/game/throwing.dm code/game/topic.dm code/game/turf.dm code/game/vehicles/airtight/airtight.dm code/game/vehicles/airtight/land.dm code/game/vehicles/airtight/space.dm code/game/vehicles/vehicle.dm code/game/verbs/ooc.dm code/game/verbs/sound.dm code/game/verbs/suicide.dm code/game/verbs/who.dm code/game/vote.dm code/modules/admin/IsBanned.dm code/modules/admin/NewBan.dm code/modules/admin/admin.dm code/modules/admin/admin_investigate.dm code/modules/admin/admin_memo.dm code/modules/admin/admin_verbs.dm code/modules/admin/banjob.dm code/modules/admin/create_mob.dm code/modules/admin/create_object.dm code/modules/admin/create_turf.dm code/modules/admin/player_panel.dm code/modules/admin/verbs/MC.dm code/modules/admin/verbs/adminhelp.dm code/modules/admin/verbs/adminjump.dm code/modules/admin/verbs/adminpm.dm code/modules/admin/verbs/adminsay.dm code/modules/admin/verbs/atmosdebug.dm code/modules/admin/verbs/cinematic.dm code/modules/admin/verbs/deadsay.dm code/modules/admin/verbs/debug.dm code/modules/admin/verbs/diagnostics.dm code/modules/admin/verbs/getlogs.dm code/modules/admin/verbs/mapping.dm code/modules/admin/verbs/massmodvar.dm code/modules/admin/verbs/modifyvariables.dm code/modules/admin/verbs/onlyone.dm code/modules/admin/verbs/playsound.dm code/modules/admin/verbs/possess.dm code/modules/admin/verbs/pray.dm code/modules/admin/verbs/randomverbs.dm code/modules/admin/verbs/striketeam.dm code/modules/admin/verbs/striketeam_syndicate.dm code/modules/assembly/assembly.dm code/modules/assembly/signaler.dm code/modules/chemical/Chemistry-Machinery.dm code/modules/chemical/Chemistry-Tools.dm code/modules/client/client defines.dm code/modules/client/client procs.dm code/modules/clothing/costume.dm code/modules/clothing/gimmick.dm code/modules/clothing/glasses.dm code/modules/clothing/glasses/glasses.dm code/modules/clothing/glasses/hud.dm code/modules/clothing/gloves.dm code/modules/clothing/head/hardhat.dm code/modules/clothing/jumpsuit.dm code/modules/clothing/mask.dm code/modules/clothing/shoes.dm code/modules/clothing/spacesuit.dm code/modules/clothing/spacesuits/captain.dm code/modules/clothing/spacesuits/miscellaneous.dm code/modules/clothing/spacesuits/ninja.dm code/modules/clothing/spacesuits/rig.dm code/modules/clothing/spacesuits/syndi.dm code/modules/clothing/spacesuits/void.dm code/modules/clothing/suit.dm code/modules/clothing/suits/armor.dm code/modules/clothing/suits/bio.dm code/modules/clothing/suits/bomb.dm code/modules/clothing/suits/detective.dm code/modules/clothing/suits/fire.dm code/modules/clothing/suits/heavy.dm code/modules/clothing/suits/hos.dm code/modules/clothing/suits/labcoat.dm code/modules/clothing/suits/miscellaneous.dm code/modules/clothing/suits/wiz_robe.dm code/modules/clothing/uniforms/lawyer.dm code/modules/critters/critter.dm code/modules/critters/critter_AI.dm code/modules/critters/critters.dm code/modules/critters/hivebots/hivebot.dm code/modules/flufftext/Dreaming.dm code/modules/flufftext/Hallucination.dm code/modules/flufftext/TextFilters.dm code/modules/food/food.dm code/modules/food/meat.dm code/modules/food/recipes_microwave.dm code/modules/maps/SwapMaps.dm code/modules/maps/dmm_suite.dm code/modules/maps/fromdmp.dm code/modules/maps/randomZlevel.dm code/modules/maps/reader.dm code/modules/maps/writer.dm code/modules/mining/machine_processing.dm code/modules/mining/machine_stacking.dm code/modules/mining/machine_unloading.dm code/modules/mining/mine_items.dm code/modules/mining/mine_turfs.dm code/modules/mining/mint.dm code/modules/mining/ores_materials_coins.dm code/modules/mining/satchel_ore_boxdm.dm code/modules/mob/dead/death.dm code/modules/mob/dead/observer/observer.dm code/modules/mob/death.dm code/modules/mob/living/blob/blob.dm code/modules/mob/living/carbon/alien/alien.dm code/modules/mob/living/carbon/alien/death.dm code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm code/modules/mob/living/carbon/alien/humanoid/death.dm code/modules/mob/living/carbon/alien/humanoid/hud.dm code/modules/mob/living/carbon/alien/humanoid/humanoid.dm code/modules/mob/living/carbon/alien/humanoid/life.dm code/modules/mob/living/carbon/alien/humanoid/login.dm code/modules/mob/living/carbon/alien/humanoid/queen.dm code/modules/mob/living/carbon/alien/larva/death.dm code/modules/mob/living/carbon/alien/larva/hud.dm code/modules/mob/living/carbon/alien/larva/larva.dm code/modules/mob/living/carbon/alien/larva/life.dm code/modules/mob/living/carbon/alien/larva/login.dm code/modules/mob/living/carbon/alien/larva/powers.dm code/modules/mob/living/carbon/alien/special/_main.dm code/modules/mob/living/carbon/alien/special/snakeman.dm code/modules/mob/living/carbon/brain/MMI.dm code/modules/mob/living/carbon/brain/brain.dm code/modules/mob/living/carbon/brain/death.dm code/modules/mob/living/carbon/brain/hud.dm code/modules/mob/living/carbon/brain/life.dm code/modules/mob/living/carbon/brain/say.dm code/modules/mob/living/carbon/carbon.dm code/modules/mob/living/carbon/human/death.dm code/modules/mob/living/carbon/human/emote.dm code/modules/mob/living/carbon/human/examine.dm code/modules/mob/living/carbon/human/hud.dm code/modules/mob/living/carbon/human/human.dm code/modules/mob/living/carbon/human/human_attackalien.dm code/modules/mob/living/carbon/human/human_attackhand.dm code/modules/mob/living/carbon/human/human_damage.dm code/modules/mob/living/carbon/human/human_defense.dm code/modules/mob/living/carbon/human/life.dm code/modules/mob/living/carbon/human/login.dm code/modules/mob/living/carbon/human/say.dm code/modules/mob/living/carbon/human/whisper.dm code/modules/mob/living/carbon/metroid/death.dm code/modules/mob/living/carbon/metroid/examine.dm code/modules/mob/living/carbon/metroid/life.dm code/modules/mob/living/carbon/metroid/login.dm code/modules/mob/living/carbon/metroid/metroid.dm code/modules/mob/living/carbon/metroid/powers.dm code/modules/mob/living/carbon/monkey/death.dm code/modules/mob/living/carbon/monkey/examine.dm code/modules/mob/living/carbon/monkey/hud.dm code/modules/mob/living/carbon/monkey/life.dm code/modules/mob/living/carbon/monkey/login.dm code/modules/mob/living/carbon/monkey/monkey.dm code/modules/mob/living/carbon/monkey/powers.dm code/modules/mob/living/damage_procs.dm code/modules/mob/living/living.dm code/modules/mob/living/living_defense.dm code/modules/mob/living/login.dm code/modules/mob/living/say.dm code/modules/mob/living/silicon/ai/ai.dm code/modules/mob/living/silicon/ai/death.dm code/modules/mob/living/silicon/ai/examine.dm code/modules/mob/living/silicon/ai/life.dm code/modules/mob/living/silicon/ai/login.dm code/modules/mob/living/silicon/ai/move.dm code/modules/mob/living/silicon/death.dm code/modules/mob/living/silicon/decoy/death.dm code/modules/mob/living/silicon/pai/death.dm code/modules/mob/living/silicon/pai/hud.dm code/modules/mob/living/silicon/pai/pai.dm code/modules/mob/living/silicon/pai/recruit.dm code/modules/mob/living/silicon/pai/software.dm code/modules/mob/living/silicon/robot/death.dm code/modules/mob/living/silicon/robot/emote.dm code/modules/mob/living/silicon/robot/examine.dm code/modules/mob/living/silicon/robot/hud.dm code/modules/mob/living/silicon/robot/life.dm code/modules/mob/living/silicon/robot/login.dm code/modules/mob/living/silicon/robot/robot.dm code/modules/mob/living/silicon/robot/robot_modules.dm code/modules/mob/living/silicon/robot/say.dm code/modules/mob/living/silicon/robot/wires.dm code/modules/mob/living/silicon/say.dm code/modules/mob/living/simple_animal/life.dm code/modules/mob/login.dm code/modules/mob/logout.dm code/modules/mob/mob.dm code/modules/mob/mob_cleanup.dm code/modules/mob/mob_defines.dm code/modules/mob/mob_grab.dm code/modules/mob/mob_helpers.dm code/modules/mob/mob_movement.dm code/modules/mob/mob_transformation_simple.dm code/modules/mob/new_player/login.dm code/modules/mob/new_player/new_player.dm code/modules/mob/new_player/preferences.dm code/modules/mob/new_player/preferences_setup.dm code/modules/mob/new_player/savefile.dm code/modules/mob/new_player/sprite_accessories.dm code/modules/mob/organ/organ.dm code/modules/mob/organ/organ_external.dm code/modules/mob/organ/pain.dm code/modules/mob/say.dm code/modules/mob/screen.dm code/modules/mob/simple_animal/crab.dm code/modules/mob/transform_procs.dm code/modules/paperwork/clipboard.dm code/modules/paperwork/filingcabinet.dm code/modules/paperwork/folders.dm code/modules/paperwork/handlabeler.dm code/modules/paperwork/paper.dm code/modules/paperwork/paperbin.dm code/modules/paperwork/pen.dm code/modules/paperwork/photocopier.dm code/modules/paperwork/stamps.dm code/modules/power/antimatter/computer.dm code/modules/power/antimatter/engine.dm code/modules/power/antimatter/fuel.dm code/modules/power/apc.dm code/modules/power/cable.dm code/modules/power/cable_heavyduty.dm code/modules/power/cell.dm code/modules/power/generator.dm code/modules/power/generator_type2.dm code/modules/power/gravitygenerator.dm code/modules/power/lighting.dm code/modules/power/port_gen.dm code/modules/power/sd_DynamicAreaLighting.dm code/modules/power/singularity/collector.dm code/modules/power/singularity/containment_field.dm code/modules/power/singularity/emitter.dm code/modules/power/singularity/field_generator.dm code/modules/power/singularity/generator.dm code/modules/power/singularity/investigate.dm code/modules/power/singularity/particle_accelerator/particle.dm code/modules/power/singularity/particle_accelerator/particle_accelerator.dm code/modules/power/singularity/particle_accelerator/particle_chamber.dm code/modules/power/singularity/particle_accelerator/particle_control.dm code/modules/power/singularity/particle_accelerator/particle_emitter.dm code/modules/power/singularity/particle_accelerator/particle_power.dm code/modules/power/singularity/singularity.dm code/modules/power/smes.dm code/modules/power/solar.dm code/modules/power/switch.dm code/modules/power/turbine.dm code/modules/projectiles/ammunition.dm code/modules/projectiles/gun.dm code/modules/projectiles/guns/energy.dm code/modules/projectiles/guns/energy/laser.dm code/modules/projectiles/guns/energy/nuclear.dm code/modules/projectiles/guns/energy/pulse.dm code/modules/projectiles/guns/energy/special.dm code/modules/projectiles/guns/energy/stun.dm code/modules/projectiles/guns/projectile.dm code/modules/projectiles/guns/projectile/pistol.dm code/modules/projectiles/guns/projectile/revolver.dm code/modules/projectiles/guns/projectile/shotgun.dm code/modules/projectiles/projectile.dm code/modules/projectiles/projectile/beams.dm code/modules/projectiles/projectile/bullets.dm code/modules/projectiles/projectile/change.dm code/modules/projectiles/projectile/special.dm code/modules/reagents/Chemistry-Holder.dm code/modules/reagents/Chemistry-Reagents.dm code/modules/reagents/Chemistry-Recipes.dm code/modules/recycling/conveyor2.dm code/modules/recycling/disposal-construction.dm code/modules/recycling/disposal.dm code/modules/recycling/sortingmachinery.dm code/modules/research/designs.dm code/modules/research/destructive_analyzer.dm code/modules/research/message_server.dm code/modules/research/protolathe.dm code/modules/research/rdconsole.dm code/modules/research/rdmachines.dm code/modules/research/research.dm code/modules/research/server.dm code/modules/scripting/AST/Operators/Binary Operators.dm code/modules/scripting/Implementations/Telecomms.dm code/modules/scripting/Parser/Keywords.dm code/modules/scripting/Scanner/Tokens.dm code/modules/scripting/stack.dm code/modules/security levels/keycard authentication.dm code/modules/security levels/security levels.dm code/setup.dm code/stylesheet.dm code/unused/AI_Visibility.dm code/unused/Ultralight.dm code/unused/airtunnel.dm code/unused/beast/bodypart.dm code/unused/conveyor.dm code/unused/disease2/analyser.dm code/unused/disease2/base.dm code/unused/disease2/biohazard destroyer.dm code/unused/disease2/cureimplanter.dm code/unused/disease2/curer.dm code/unused/disease2/diseasesplicer.dm code/unused/disease2/dishincubator.dm code/unused/disease2/isolator.dm code/unused/disease2/monkeydispensor.dm code/unused/dna.dm code/unused/gamemodes/deathmatch.dm code/unused/jobs.dm code/unused/mining/datum_processing_recipe.dm code/unused/mining/spaceship_builder_unused.dm code/unused/new_year.dm code/unused/spacecraft/manufacturing.dm code/unused/spacecraft/shipcore.dm config/README feedback.txt config/admins.txt config/config.txt config/rules.html data/mode.txt html/add-to-changelog.html html/archivedchangelog.html html/changelog.css html/changelog.html html/changelog.js icons/effects/blood.dmi icons/effects/genetics.dmi icons/misc/fullscreen.dmi icons/mob/AI.dmi icons/mob/alien.dmi icons/mob/animal.dmi icons/mob/back.dmi icons/mob/belt.dmi icons/mob/blob.dmi icons/mob/critter.dmi icons/mob/dam_human.dmi icons/mob/eyes.dmi icons/mob/feet.dmi icons/mob/hands.dmi icons/mob/head.dmi icons/mob/human.dmi icons/mob/human_face.dmi icons/mob/items_lefthand.dmi icons/mob/items_righthand.dmi icons/mob/livestock.dmi icons/mob/mask.dmi icons/mob/mecha.dmi icons/mob/mob.dmi icons/mob/monkey.dmi icons/mob/robots.dmi icons/mob/screen1.dmi icons/mob/screen1_Midnight.dmi icons/mob/screen1_Orange.dmi icons/mob/screen1_alien.dmi icons/mob/screen1_old.dmi icons/mob/suit.dmi icons/mob/uniform.dmi icons/mob/zone_sel.dmi icons/obj/Cryogenic2.dmi icons/obj/aibots.dmi icons/obj/ammo.dmi icons/obj/atmos.dmi icons/obj/bureaucracy.dmi icons/obj/card.dmi icons/obj/cigarettes.dmi icons/obj/closet.dmi icons/obj/clothing/glasses.dmi icons/obj/clothing/gloves.dmi icons/obj/clothing/hats.dmi icons/obj/clothing/masks.dmi icons/obj/clothing/shoes.dmi icons/obj/clothing/suits.dmi icons/obj/clothing/uniforms.dmi icons/obj/computer.dmi icons/obj/contraband.dmi icons/obj/decals.dmi icons/obj/device.dmi icons/obj/doors/DoorHazard.dmi icons/obj/doors/door_assembly.dmi icons/obj/drinks.dmi icons/obj/engine.dmi icons/obj/food.dmi icons/obj/grenade.dmi icons/obj/gun.dmi icons/obj/harvest.dmi icons/obj/hydroponics.dmi icons/obj/items.dmi icons/obj/janitor.dmi icons/obj/library.dmi icons/obj/lighting.dmi icons/obj/machines/field_generator.dmi icons/obj/machines/gateway.dmi icons/obj/machines/mining_machines.dmi icons/obj/machines/particle_accelerator.dmi icons/obj/meter.dmi icons/obj/mining.dmi icons/obj/objects.dmi icons/obj/paper.dmi icons/obj/pda.dmi icons/obj/pipes/disposal.dmi icons/obj/plants.dmi icons/obj/power.dmi icons/obj/projectiles.dmi icons/obj/robotics.dmi icons/obj/seeds.dmi icons/obj/singularity.dmi icons/obj/stationobjs.dmi icons/obj/stock_parts.dmi icons/obj/storage.dmi icons/obj/structures.dmi icons/obj/surgery.dmi icons/obj/syringe.dmi icons/obj/tank.dmi icons/obj/terminals.dmi icons/obj/toy.dmi icons/obj/vending.dmi icons/obj/watercloset.dmi icons/obj/weapons.dmi icons/obj/wizard.dmi icons/turf/areas.dmi icons/turf/floors.dmi icons/turf/walls.dmi interface/interface.dm interface/skin.dmf maps/Antiqua.dmm maps/RandomZLevels/assistantChamber.dmm maps/RandomZLevels/fileList.txt maps/tgstation.2.0.9.dmm sound/AI/animes.ogg sound/AI/newroundsexy.ogg sound/AI/newroundsexy2.ogg sound/effects/adminhelp.ogg tools/UnstandardnessTestForDM/UnstandardnessTestForDM.sln tools/UnstandardnessTestForDM/UnstandardnessTestForDM/Form1.Designer.cs tools/UnstandardnessTestForDM/UnstandardnessTestForDM/Form1.cs tools/UnstandardnessTestForDM/UnstandardnessTestForDM/Form1.resx tools/UnstandardnessTestForDM/UnstandardnessTestForDM/Program.cs tools/UnstandardnessTestForDM/UnstandardnessTestForDM/Properties/AssemblyInfo.cs tools/UnstandardnessTestForDM/UnstandardnessTestForDM/Properties/Resources.Designer.cs tools/UnstandardnessTestForDM/UnstandardnessTestForDM/Properties/Resources.resx tools/UnstandardnessTestForDM/UnstandardnessTestForDM/Properties/Settings.Designer.cs tools/UnstandardnessTestForDM/UnstandardnessTestForDM/Properties/Settings.settings tools/UnstandardnessTestForDM/UnstandardnessTestForDM/UnstandardnessTestForDM.csproj tools/UnstandardnessTestForDM/UnstandardnessTestForDM/bin/Debug/UnstandardnessTestForDM.vshost.exe.manifest tools/UnstandardnessTestForDM/UnstandardnessTestForDM/obj/x86/Debug/UnstandardnessTestForDM.csproj.FileListAbsolute.txt tools/expand_filedir_paths.py tools/readme.txt Signed-off-by: Cael_Aislinn <cael_aislinn@yahoo.com.au>
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
/proc/getbrokeninhands()
|
||||
var/icon/IL = new('items_lefthand.dmi')
|
||||
var/icon/IL = new('icons/mob/items_lefthand.dmi')
|
||||
var/list/Lstates = IL.IconStates()
|
||||
var/icon/IR = new('items_righthand.dmi')
|
||||
var/icon/IR = new('icons/mob/items_righthand.dmi')
|
||||
var/list/Rstates = IR.IconStates()
|
||||
|
||||
|
||||
|
||||
@@ -10,16 +10,12 @@
|
||||
master_controller.process()
|
||||
if("No")
|
||||
return 0
|
||||
//feedback_add_details("admin_verb","RMC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
feedback_add_details("admin_verb","RMC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
return
|
||||
|
||||
/client/proc/debug_master_controller()
|
||||
set category = "Debug"
|
||||
set name = "Debug Master Controller"
|
||||
switch(alert("Debug Master Controller or Failsafe?" ,, "Master Controller" , "Failsafe"))
|
||||
if("Master Controller")
|
||||
debug_variables(master_controller)
|
||||
if("Failsafe")
|
||||
debug_variables(Failsafe)
|
||||
//feedback_add_details("admin_verb","DMC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
debug_variables(master_controller)
|
||||
feedback_add_details("admin_verb","DMC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
return
|
||||
@@ -6,11 +6,18 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an", "monkey", "ali
|
||||
/client/verb/adminhelp(msg as text)
|
||||
set category = "Admin"
|
||||
set name = "Adminhelp"
|
||||
/*
|
||||
if (muted_complete)
|
||||
src << "<font color='red'>Error: Admin-PM: You are completely muted.</font>"
|
||||
|
||||
if (muted_adminhelp)
|
||||
src << "<font color='red'>Error: Admin-PM: You cannot send adminhelps (Muted by admins).</font>"
|
||||
return
|
||||
*/
|
||||
|
||||
if (src.handle_spam_prevention(msg,MUTE_ADMINHELP))
|
||||
return
|
||||
|
||||
src.verbs -= /client/verb/adminhelp
|
||||
spawn(1200)
|
||||
src.verbs += /client/verb/adminhelp // 2 minute cool-down for adminhelps
|
||||
|
||||
if(!msg) return
|
||||
msg = sanitize(copytext(msg,1,MAX_MESSAGE_LEN))
|
||||
if (!msg) return
|
||||
@@ -18,15 +25,15 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an", "monkey", "ali
|
||||
var/original_msg = msg
|
||||
|
||||
//The symbol × (fancy multiplication sign) will be used to mark where to put replacements, so the original message must not contain it.
|
||||
msg = dd_replaceText(msg, "×", "")
|
||||
msg = dd_replaceText(msg, "HOLDERREF", "HOLDER-REF") //HOLDERREF is a key word which gets replaced with the admin's holder ref later on, so it mustn't be in the original message
|
||||
msg = dd_replaceText(msg, "ADMINREF", "ADMIN-REF") //ADMINREF is a key word which gets replaced with the admin's client's ref. So it mustn't be in the original message.
|
||||
msg = dd_replacetext(msg, "×", "")
|
||||
msg = dd_replacetext(msg, "HOLDERREF", "HOLDER-REF") //HOLDERREF is a key word which gets replaced with the admin's holder ref later on, so it mustn't be in the original message
|
||||
msg = dd_replacetext(msg, "ADMINREF", "ADMIN-REF") //ADMINREF is a key word which gets replaced with the admin's client's ref. So it mustn't be in the original message.
|
||||
|
||||
var/list/msglist = dd_text2list(msg, " ")
|
||||
|
||||
var/list/mob/mobs = list()
|
||||
|
||||
for(var/mob/M in world)
|
||||
for(var/mob/M in mob_list)
|
||||
mobs += M
|
||||
|
||||
var/list/replacement_value = list() //When a word match is found, the word matched will get replaced with an × (fancy multiplication symbol).
|
||||
@@ -34,6 +41,8 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an", "monkey", "ali
|
||||
//So if this list has the value list("John","Jane") and msg is, at the end, "This is × and he griffed ×" the text to
|
||||
//display will be "This is John and he griffe Jane". The strings in this list are a bit more complex than 'John' and 'Jane' tho.
|
||||
|
||||
var/ai_found = 0 //If an AI name or 'ai' word is found in the text, the additional (CL) = Check Laws button gets added. Not added every time so it doesn't spam.
|
||||
|
||||
//we will try to locate each word of the message in our lists of names and clients
|
||||
//for each mob that we have found
|
||||
//split the mob's info into a list. "John Arnolds" becomes list("John","Arnolds") so we can iterate through this
|
||||
@@ -41,18 +50,21 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an", "monkey", "ali
|
||||
for(var/i = 1; i <= msglist.len; i++)
|
||||
var/word = msglist[i]
|
||||
var/original_word = word
|
||||
word = dd_replaceText(word, ".", "")
|
||||
word = dd_replaceText(word, ",", "")
|
||||
word = dd_replaceText(word, "!", "")
|
||||
word = dd_replaceText(word, "?", "") //Strips some common punctuation characters so the actual word can be better compared.
|
||||
word = dd_replaceText(word, ";", "")
|
||||
word = dd_replaceText(word, ":", "")
|
||||
word = dd_replaceText(word, "(", "")
|
||||
word = dd_replaceText(word, ")", "")
|
||||
word = dd_replacetext(word, ".", "")
|
||||
word = dd_replacetext(word, ",", "")
|
||||
word = dd_replacetext(word, "!", "")
|
||||
word = dd_replacetext(word, "?", "") //Strips some common punctuation characters so the actual word can be better compared.
|
||||
word = dd_replacetext(word, ";", "")
|
||||
word = dd_replacetext(word, ":", "")
|
||||
word = dd_replacetext(word, "(", "")
|
||||
word = dd_replacetext(word, ")", "")
|
||||
if(lowertext(word) in adminhelp_ignored_words)
|
||||
continue
|
||||
if(lowertext(word) == "ai")
|
||||
ai_found = 1
|
||||
continue
|
||||
for(var/mob/M in mobs)
|
||||
var/list/namelist = dd_text2list("[M.name] [M.real_name] [M.original_name] [M.ckey] [M.key]", " ")
|
||||
var/list/namelist = dd_text2list("[M.name] [M.real_name] [(M.mind)?"[M.mind.name]":""] [M.ckey] [M.key]", " ")
|
||||
var/word_is_match = 0 //Used to break from this mob for loop if a match is found
|
||||
for(var/namepart in namelist)
|
||||
if( lowertext(word) == lowertext(namepart) )
|
||||
@@ -63,6 +75,8 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an", "monkey", "ali
|
||||
word_is_match = 1
|
||||
break
|
||||
if(word_is_match)
|
||||
if(isAI(M))
|
||||
ai_found = 1
|
||||
break //Breaks execution of the mob loop, since a match was already found.
|
||||
|
||||
var/j = 1 //index to the next element in the replacement_value list
|
||||
@@ -73,35 +87,46 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an", "monkey", "ali
|
||||
j++
|
||||
|
||||
msg = dd_list2text(msglist, " ")
|
||||
var/admin_number = 0
|
||||
var/admin_number_afk = 0
|
||||
|
||||
if(mob)
|
||||
var/ref_mob = "\ref[src.mob]"
|
||||
for (var/client/X)
|
||||
if (X.holder)
|
||||
admin_number++
|
||||
if( X.inactivity > AFK_THRESHOLD ) //When I made this, the AFK_THRESHOLD was 3000ds = 300s = 5m, see setup.dm for the new one.
|
||||
admin_number_afk++
|
||||
if(X.sound_adminhelp)
|
||||
X << 'adminhelp.ogg'
|
||||
var/msg_to_send = "\blue <b><font color=red>HELP: </font>[key_name(src, X)] (<A HREF='?src=\ref[X.holder];adminmoreinfo=[ref_mob]'>?</A>) (<A HREF='?src=\ref[X.holder];adminplayeropts=[ref_mob]'>PP</A>) (<A HREF='?src=\ref[X.holder];adminplayervars=[ref_mob]'>VV</A>) (<A HREF='?src=\ref[X.holder];adminplayersubtlemessage=[ref_mob]'>SM</A>) (<A HREF='?src=\ref[X.holder];adminplayerobservejump=[ref_mob]'>JMP</A>) (<A HREF='?src=\ref[X.holder];secretsadmin=check_antagonist'>CA</A>):</b> [msg]"
|
||||
msg_to_send = dd_replaceText(msg_to_send, "HOLDERREF", "\ref[X.holder]")
|
||||
msg_to_send = dd_replaceText(msg_to_send, "ADMINREF", "\ref[X]")
|
||||
X << 'sound/effects/adminhelp.ogg'
|
||||
var/check_laws_text = ""
|
||||
if(ai_found)
|
||||
check_laws_text = (" (<A HREF='?src=\ref[X.holder];adminchecklaws=[ref_mob]'>CL</A>)")
|
||||
|
||||
var/msg_to_send = "\blue <b><font color=red>HELP: </font>[key_name(src, X)] (<A HREF='?src=\ref[X.holder];adminmoreinfo=[ref_mob]'>?</A>) (<A HREF='?src=\ref[X.holder];adminplayeropts=[ref_mob]'>PP</A>) (<A HREF='?src=\ref[X.holder];adminplayervars=[ref_mob]'>VV</A>) (<A HREF='?src=\ref[X.holder];adminplayersubtlemessage=[ref_mob]'>SM</A>) (<A HREF='?src=\ref[X.holder];adminplayerobservejump=[ref_mob]'>JMP</A>) (<A HREF='?src=\ref[X.holder];secretsadmin=check_antagonist'>CA</A>) [check_laws_text]:</b> [msg]"
|
||||
msg_to_send = dd_replacetext(msg_to_send, "HOLDERREF", "\ref[X.holder]")
|
||||
msg_to_send = dd_replacetext(msg_to_send, "ADMINREF", "\ref[X]")
|
||||
X << msg_to_send
|
||||
else
|
||||
var/ref_client = "\ref[src]"
|
||||
for (var/client/X)
|
||||
if (X.holder)
|
||||
admin_number++
|
||||
if( X.inactivity > AFK_THRESHOLD ) //When I made this, the AFK_THRESHOLD was 3000ds = 300s = 5m, see setup.dm for the new one.
|
||||
admin_number_afk++
|
||||
if(X.sound_adminhelp)
|
||||
X << 'adminhelp.ogg'
|
||||
X << 'sound/effects/adminhelp.ogg'
|
||||
var/msg_to_send = "\blue <b><font color=red>HELP: </font>[key_name(src, X)] (<A HREF='?src=\ref[X.holder];adminplayervars=[ref_client]'>VV</A>) (<A HREF='?src=\ref[X.holder];secretsadmin=check_antagonist'>CA</A>):</b> [msg]"
|
||||
msg_to_send = dd_replaceText(msg_to_send, "HOLDERREF", "\ref[X.holder]")
|
||||
msg_to_send = dd_replaceText(msg_to_send, "ADMINREF", "\ref[X]")
|
||||
msg_to_send = dd_replacetext(msg_to_send, "HOLDERREF", "\ref[X.holder]")
|
||||
msg_to_send = dd_replacetext(msg_to_send, "ADMINREF", "\ref[X]")
|
||||
X << msg_to_send
|
||||
|
||||
src << "<font color='blue'>PM to-<b>Admins</b>: [original_msg]</font>"
|
||||
log_admin("HELP: [key_name(src)]: [original_msg]")
|
||||
var/list/replacechars = list("'" = "","\"" = "",">" = "","<" = "","(" = "",")" = "")
|
||||
msg = sanitize_simple(msg, replacechars)
|
||||
if(tension_master)
|
||||
tension_master.new_adminhelp()
|
||||
send2adminirc("#bs12admin","HELP: \"[src.key]: [original_msg]\"")
|
||||
send2adminirc("#bs12mod","HELP: \"[src.key]: [original_msg]\"")
|
||||
//feedback_add_details("admin_verb","AH") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
log_admin("HELP: [key_name(src)]: [original_msg] - heard by [admin_number] non-AFK admins.")
|
||||
if((admin_number - admin_number_afk) <= 0)
|
||||
if(!admin_number_afk)
|
||||
send2irc(ckey, "[original_msg] - No admins online")
|
||||
else
|
||||
send2irc(ckey, "[original_msg] - All admins AFK ([admin_number_afk])")
|
||||
feedback_add_details("admin_verb","AH") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
return
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
|
||||
log_admin("[key_name(usr)] jumped to [A]")
|
||||
message_admins("[key_name_admin(usr)] jumped to [A]", 1)
|
||||
feedback_add_details("admin_verb","JA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
else
|
||||
alert("Admin jumping disabled")
|
||||
|
||||
@@ -24,11 +25,12 @@
|
||||
log_admin("[key_name(usr)] jumped to [T.x],[T.y],[T.z] in [T.loc]")
|
||||
message_admins("[key_name_admin(usr)] jumped to [T.x],[T.y],[T.z] in [T.loc]", 1)
|
||||
usr.loc = T
|
||||
feedback_add_details("admin_verb","JT") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
else
|
||||
alert("Admin jumping disabled")
|
||||
return
|
||||
|
||||
/client/proc/jumptomob(var/mob/M in world)
|
||||
/client/proc/jumptomob(var/mob/M in mob_list)
|
||||
set category = "Admin"
|
||||
set name = "Jump to Mob"
|
||||
|
||||
@@ -37,21 +39,18 @@
|
||||
return
|
||||
|
||||
if(config.allow_admin_jump)
|
||||
if(!M || !istype(M))
|
||||
var/mobs = getmobs()
|
||||
var/selection = input("Please, select a player!", "Admin Jumping", null, null) as null|anything in mobs
|
||||
if(!selection)
|
||||
return
|
||||
|
||||
M = mobs[selection]
|
||||
var/mob/A = src.mob
|
||||
var/turf/T = get_turf(M)
|
||||
if(T && isturf(T))
|
||||
A.loc = T
|
||||
log_admin("[key_name(usr)] jumped to [key_name(M)]")
|
||||
message_admins("[key_name_admin(usr)] jumped to [key_name_admin(M)]", 1)
|
||||
else
|
||||
A << "This mob is not located in the game world."
|
||||
log_admin("[key_name(usr)] jumped to [key_name(M)]")
|
||||
message_admins("[key_name_admin(usr)] jumped to [key_name_admin(M)]", 1)
|
||||
if(src.mob)
|
||||
var/mob/A = src.mob
|
||||
var/turf/T = get_turf(M)
|
||||
if(T && isturf(T))
|
||||
feedback_add_details("admin_verb","JM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
A.loc = T
|
||||
else
|
||||
A << "This mob is not located in the game world."
|
||||
else
|
||||
alert("Admin jumping disabled")
|
||||
|
||||
/client/proc/jumptocoord(tx as num, ty as num, tz as num)
|
||||
set category = "Admin"
|
||||
@@ -83,7 +82,7 @@
|
||||
|
||||
if(config.allow_admin_jump)
|
||||
var/list/keys = list()
|
||||
for(var/mob/M in world)
|
||||
for(var/mob/M in player_list)
|
||||
keys += M.client
|
||||
var/selection = input("Please, select a player!", "Admin Jumping", null, null) as null|anything in keys
|
||||
if(!selection)
|
||||
@@ -92,35 +91,22 @@
|
||||
log_admin("[key_name(usr)] jumped to [key_name(M)]")
|
||||
message_admins("[key_name_admin(usr)] jumped to [key_name_admin(M)]", 1)
|
||||
usr.loc = M.loc
|
||||
feedback_add_details("admin_verb","JK") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
else
|
||||
alert("Admin jumping disabled")
|
||||
|
||||
/client/proc/Getmob(var/mob/M in world)
|
||||
/client/proc/Getmob(var/mob/M in mob_list)
|
||||
set category = "Admin"
|
||||
set name = "Get Mob"
|
||||
set desc = "Mob to teleport"
|
||||
|
||||
if(!src.holder)
|
||||
src << "Only administrators may use this command."
|
||||
return
|
||||
|
||||
if(config.allow_admin_jump)
|
||||
if(!M || !istype(M))
|
||||
var/mobs = getmobs()
|
||||
var/selection = input("Please, select a player!", "Admin Jumping", null, null) as null|anything in mobs
|
||||
if(!selection)
|
||||
return
|
||||
|
||||
M = mobs[selection]
|
||||
|
||||
var/mob/A = src.mob
|
||||
var/turf/T = get_turf(A)
|
||||
if(T && isturf(T))
|
||||
M.loc = T
|
||||
log_admin("[key_name(usr)] teleported [key_name(M)]")
|
||||
message_admins("[key_name_admin(usr)] teleported [key_name_admin(M)]", 1)
|
||||
else
|
||||
A << "You are not located in the game world."
|
||||
log_admin("[key_name(usr)] teleported [key_name(M)]")
|
||||
message_admins("[key_name_admin(usr)] teleported [key_name_admin(M)]", 1)
|
||||
M.loc = get_turf(usr)
|
||||
feedback_add_details("admin_verb","GM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
else
|
||||
alert("Admin jumping disabled")
|
||||
|
||||
@@ -135,7 +121,7 @@
|
||||
|
||||
if(config.allow_admin_jump)
|
||||
var/list/keys = list()
|
||||
for(var/mob/M in world)
|
||||
for(var/mob/M in player_list)
|
||||
keys += M.client
|
||||
var/selection = input("Please, select a player!", "Admin Jumping", null, null) as null|anything in keys
|
||||
if(!selection)
|
||||
@@ -148,10 +134,11 @@
|
||||
message_admins("[key_name_admin(usr)] teleported [key_name(M)]", 1)
|
||||
if(M)
|
||||
M.loc = get_turf(usr)
|
||||
feedback_add_details("admin_verb","GK") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
else
|
||||
alert("Admin jumping disabled")
|
||||
|
||||
/client/proc/sendmob(var/mob/M in world, var/area/A in world)
|
||||
/client/proc/sendmob(var/mob/M in mob_list, var/area/A in world)
|
||||
set category = "Admin"
|
||||
set name = "Send Mob"
|
||||
if(!src.holder)
|
||||
@@ -159,6 +146,7 @@
|
||||
return
|
||||
if(config.allow_admin_jump)
|
||||
M.loc = pick(get_area_turfs(A))
|
||||
feedback_add_details("admin_verb","SMOB") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
log_admin("[key_name(usr)] teleported [key_name(M)] to [A]")
|
||||
message_admins("[key_name_admin(usr)] teleported [key_name_admin(M)] to [A]", 1)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
//allows right clicking mobs to send an admin PM to their client, forwards the selected mob's client to cmd_admin_pm
|
||||
/client/proc/cmd_admin_pm_context(mob/M as mob in world)
|
||||
/client/proc/cmd_admin_pm_context(mob/M as mob in mob_list)
|
||||
set category = null
|
||||
set name = "Admin PM Mob"
|
||||
if(!holder)
|
||||
@@ -36,8 +36,8 @@
|
||||
//takes input from cmd_admin_pm_context, cmd_admin_pm_panel or /client/Topic and sends them a PM.
|
||||
//Fetching a message if needed. src is the sender and C is the target client
|
||||
/client/proc/cmd_admin_pm(var/client/C, var/msg)
|
||||
if(src.muted_complete)
|
||||
src << "<font color='red'>Error: Admin-PM: You are completely muted.</font>"
|
||||
if(src.muted_adminhelp)
|
||||
src << "<font color='red'>Error: Admin-PM: You are unable to use admin PM-s (muted by admins).</font>"
|
||||
return
|
||||
|
||||
if( !C || !istype(C,/client) )
|
||||
@@ -47,13 +47,17 @@
|
||||
|
||||
//get message text, limit it's length.and clean/escape html
|
||||
if(!msg)
|
||||
msg = input(src,"Message:", "Private message") as text|null // This is to stop identification of stealthmins for now -- Erthilo
|
||||
msg = input(src,"Message:", "Private message to [C.key]") as text|null
|
||||
|
||||
if(!msg) return
|
||||
if(!C)
|
||||
if(holder) src << "<font color='red'>Error: Admin-PM: Client not found.</font>"
|
||||
else adminhelp(msg) //admin we are replying to has vanished, adminhelp instead
|
||||
return
|
||||
|
||||
if (src.handle_spam_prevention(msg,MUTE_ADMINHELP))
|
||||
return
|
||||
|
||||
//clean the message if it's not sent by a GA or GM
|
||||
if( !holder || !(holder.rank in list("Game Admin", "Game Master")) )
|
||||
msg = sanitize(copytext(msg,1,MAX_MESSAGE_LEN))
|
||||
@@ -61,12 +65,8 @@
|
||||
|
||||
if(C.holder)
|
||||
if(holder) //both are admins
|
||||
if(holder.rank == "Moderator") //If moderator
|
||||
C << "<font color='maroon'>Mod PM from-<b>[key_name(src, C, 1)]</b>: [msg]</font>"
|
||||
src << "<font color='blue'>Mod PM to-<b>[key_name(C, src, 1)]</b>: [msg]</font>"
|
||||
else
|
||||
C << "<font color='red'>Admin PM from-<b>[key_name(src, C, 1)]</b>: [msg]</font>"
|
||||
src << "<font color='blue'>Admin PM to-<b>[key_name(C, src, 1)]</b>: [msg]</font>"
|
||||
C << "<font color='red'>Admin PM from-<b>[key_name(src, C, 1)]</b>: [msg]</font>"
|
||||
src << "<font color='blue'>Admin PM to-<b>[key_name(C, src, 1)]</b>: [msg]</font>"
|
||||
|
||||
else //recipient is an admin but sender is not
|
||||
C << "<font color='red'>Reply PM from-<b>[key_name(src, C, 1)]</b>: [msg]</font>"
|
||||
@@ -74,21 +74,17 @@
|
||||
|
||||
//play the recieving admin the adminhelp sound (if they have them enabled)
|
||||
if(C.sound_adminhelp)
|
||||
C << 'adminhelp.ogg'
|
||||
C << 'sound/effects/adminhelp.ogg'
|
||||
|
||||
else
|
||||
if(holder) //sender is an admin but recipient is not. Do BIG RED TEXT
|
||||
// C << "<font color='red' size='4'><b>-- Administrator private message --</b></font>"
|
||||
if(holder.rank == "Moderator")
|
||||
C << "<font color='maroon'>Mod PM from-<b>[key_name(src, C, 0)]</b>: [msg]</font>"
|
||||
C << "<font color='maroon'><i>Click on the moderators's name to reply.</i></font>"
|
||||
src << "<font color='blue'>Mod PM to-<b>[key_name(C, src, 1)]</b>: [msg]</font>"
|
||||
else
|
||||
C << "<font color='red'>Admin PM from-<b>[key_name(src, C, 0)]</b>: [msg]</font>"
|
||||
C << "<font color='red'><i>Click on the administrator's name to reply.</i></font>"
|
||||
src << "<font color='blue'>Admin PM to-<b>[key_name(C, src, 1)]</b>: [msg]</font>"
|
||||
C << "<font color='red' size='4'><b>-- Administrator private message --</b></font>"
|
||||
C << "<font color='red'>Admin PM from-<b>[key_name(src, C, 0)]</b>: [msg]</font>"
|
||||
C << "<font color='red'><i>Click on the administrator's name to reply.</i></font>"
|
||||
src << "<font color='blue'>Admin PM to-<b>[key_name(C, src, 1)]</b>: [msg]</font>"
|
||||
|
||||
//always play non-admin recipients the adminhelp sound
|
||||
C << 'adminhelp.ogg'
|
||||
C << 'sound/effects/adminhelp.ogg'
|
||||
|
||||
//AdminPM popup for ApocStation and anybody else who wants to use it. Set it with POPUP_ADMIN_PM in config.txt ~Carn
|
||||
if(config.popup_admin_pm)
|
||||
|
||||
@@ -7,8 +7,11 @@
|
||||
src << "Only administrators may use this command."
|
||||
return
|
||||
|
||||
if (src.muted || src.muted_complete)
|
||||
src << "You are muted."
|
||||
if (src.muted_adminhelp)
|
||||
src << "You cannot send ASAY messages (muted by admins)."
|
||||
return
|
||||
|
||||
if (src.handle_spam_prevention(msg,MUTE_ADMINHELP))
|
||||
return
|
||||
|
||||
msg = copytext(sanitize(msg), 1, MAX_MESSAGE_LEN)
|
||||
@@ -17,42 +20,11 @@
|
||||
|
||||
if (!msg)
|
||||
return
|
||||
//feedback_add_details("admin_verb","M") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
feedback_add_details("admin_verb","M") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
for (var/mob/M in world)
|
||||
if (M.client && M.client.holder && M.client.holder.level != 0) //Moderators cannot see it.
|
||||
if (src.holder.rank == "Admin Observer")
|
||||
M << "<span class='adminobserver'><span class='prefix'>ADMIN:</span> <EM>[key_name(usr, M)]:</EM> <span class='message'>[msg]</span></span>"
|
||||
else
|
||||
M << "<span class='admin'><span class='prefix'>ADMIN:</span> <EM>[key_name(usr, M)]</EM> (<A HREF='?src=\ref[M.client.holder];adminplayerobservejump=\ref[mob]'>JMP</A>): <span class='message'>[msg]</span></span>"
|
||||
|
||||
/client/proc/cmd_mod_say(msg as text)
|
||||
set category = "Special Verbs"
|
||||
set name = "Msay"
|
||||
set hidden = 1
|
||||
|
||||
if (!src.holder)
|
||||
src << "Only administrators may use this command."
|
||||
return
|
||||
|
||||
if (src.muted || src.muted_complete)
|
||||
src << "You are muted."
|
||||
return
|
||||
|
||||
msg = copytext(sanitize(msg), 1, MAX_MESSAGE_LEN)
|
||||
log_admin("MOD: [key_name(src)] : [msg]")
|
||||
|
||||
|
||||
if (!msg)
|
||||
return
|
||||
//feedback_add_details("admin_verb","M") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
for (var/mob/M in world)
|
||||
if (M.client && M.client.holder)
|
||||
if (src.holder.rank == "Admin Observer")
|
||||
M << "<span class='adminobserver'><span class='prefix'>MOD:</span> <EM>[key_name(usr, M)]:</EM> <span class='message'>[msg]</span></span>"
|
||||
else if (src.holder.rank == "Moderator")
|
||||
M << "<span class='mod'><span class='prefix'>MOD:</span> <EM>[key_name(usr, M)]</EM> (<A HREF='?src=\ref[M.client.holder];adminplayerobservejump=\ref[mob]'>JMP</A>): <span class='message'>[msg]</span></span>"
|
||||
else
|
||||
M << "<span class='adminmod'><span class='prefix'>MOD:</span> <EM>[key_name(usr, M)]</EM> (<A HREF='?src=\ref[M.client.holder];adminplayerobservejump=\ref[mob]'>JMP</A>): <span class='message'>[msg]</span></span>"
|
||||
for (var/client/C in admin_list)
|
||||
if (src.holder.rank == "Admin Observer")
|
||||
C << "<span class='adminobserver'><span class='prefix'>ADMIN:</span> <EM>[key_name(usr, C)]:</EM> <span class='message'>[msg]</span></span>"
|
||||
else
|
||||
C << "<span class='admin'><span class='prefix'>ADMIN:</span> <EM>[key_name(usr, C)]</EM> (<A HREF='?src=\ref[C.holder];adminplayerobservejump=\ref[mob]'>JMP</A>): <span class='message'>[msg]</span></span>"
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
if(!src.holder)
|
||||
src << "Only administrators may use this command."
|
||||
return
|
||||
//feedback_add_details("admin_verb","CP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
feedback_add_details("admin_verb","CP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
//all plumbing - yes, some things might get stated twice, doesn't matter.
|
||||
for (var/obj/machinery/atmospherics/plumbing in world)
|
||||
|
||||
@@ -7,7 +7,11 @@
|
||||
return
|
||||
if(!src.mob)
|
||||
return
|
||||
if(src.muted || src.muted_complete)
|
||||
if(src.muted_deadchat)
|
||||
src << "\red You cannot send DSAY messages (muted by admins)."
|
||||
return
|
||||
|
||||
if (src.handle_spam_prevention(msg,MUTE_DEADCHAT))
|
||||
return
|
||||
|
||||
msg = copytext(sanitize(msg), 1, MAX_MESSAGE_LEN)
|
||||
@@ -16,12 +20,12 @@
|
||||
if (!msg)
|
||||
return
|
||||
|
||||
var/rendered = "<span class='game deadsay'><span class='prefix'>DEAD:</span> <span class='name'>ADMIN([src.stealth ? pick("\[DATA EXPUNGED\]", "\[REDACTED\]", "\[O5 EYES ONLY\]") : src.key])</span> says, <span class='message'>\"[msg]\"</span></span>"
|
||||
var/rendered = "<span class='game deadsay'><span class='prefix'>DEAD:</span> <span class='name'>ADMIN([src.stealth ? pick("BADMIN", "hornigranny", "TLF", "scaredforshadows", "KSI", "Silnazi", "HerpEs", "BJ69", "SpoofedEdd", "Uhangay", "Wario90900", "Regarity", "MissPhareon", "LastFish", "unMportant", "Deurpyn", "Fatbeaver") : src.key])</span> says, <span class='message'>\"[msg]\"</span></span>"
|
||||
|
||||
for (var/mob/M in world)
|
||||
for (var/mob/M in player_list)
|
||||
if (istype(M, /mob/new_player))
|
||||
continue
|
||||
if (M.stat == 2 || (M.client && M.client.holder && M.client.deadchat)) //admins can toggle deadchat on and off. This is a proc in admin.dm and is only give to Administrators and above
|
||||
M.show_message(rendered, 2)
|
||||
|
||||
//feedback_add_details("admin_verb","D") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
feedback_add_details("admin_verb","D") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
+232
-354
@@ -17,7 +17,7 @@
|
||||
else
|
||||
alert("Coders only baby")
|
||||
return
|
||||
// feedback_add_details("admin_verb","DG2") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
feedback_add_details("admin_verb","DG2") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
|
||||
|
||||
@@ -32,7 +32,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
|
||||
/client/proc/callproc()
|
||||
set category = "Debug"
|
||||
set name = "Advanced ProcCall (TG Version)"
|
||||
set name = "Advanced ProcCall"
|
||||
|
||||
if(!holder)
|
||||
src << "Only administrators may use this command."
|
||||
@@ -98,21 +98,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
lst[i] = input("Enter type:","Type") in typesof(/obj,/mob,/area,/turf)
|
||||
|
||||
if("reference")
|
||||
switch(alert("Would you like to enter a specific object, or search for it from the world?","Choose!","Specifc UID (Hexadecimal number)", "Search"))
|
||||
if("Specifc UID (Hexadecimal number)")
|
||||
var/UID = input("Type in UID, without the leading 0x","Type in UID") as text|null
|
||||
if(!UID) return
|
||||
var/temp_variable = locate("\[0x[UID]\]")
|
||||
if(!temp_variable)
|
||||
usr << "ERROR. Could not locate referenced object."
|
||||
return
|
||||
switch(alert("You have chosen [temp_variable], in [get_area(temp_variable)]. Are you sure?","You sure?","Yes","NONOCANCEL!"))
|
||||
if("Yes")
|
||||
lst[i] = temp_variable
|
||||
if("NONOCANCEL!")
|
||||
return
|
||||
if("Search")
|
||||
lst[i] = input("Select reference:","Reference") as null|mob|obj|turf|area in world
|
||||
lst[i] = input("Select reference:","Reference",src) as mob|obj|turf|area in world
|
||||
|
||||
if("mob reference")
|
||||
lst[i] = input("Select reference:","Reference",usr) as mob in world
|
||||
@@ -148,135 +134,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
returnval = call(procname)(arglist(lst)) // Pass the lst as an argument list to the proc
|
||||
|
||||
usr << "<font color='blue'>[procname] returned: [returnval ? returnval : "null"]</font>"
|
||||
//feedback_add_details("admin_verb","APC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/callprocgen()
|
||||
set category = "Debug"
|
||||
set name = "ProcCall (BS12 Version)"
|
||||
if(!src.holder)
|
||||
src << "Only administrators may use this command."
|
||||
return
|
||||
|
||||
var/class = null
|
||||
var/returnval = null
|
||||
var/procname = input("Procpath (in full)","path", null)
|
||||
|
||||
var/argNum = input("Number of arguments:","Number",null) as num //input("Arguments","Arguments:", null)
|
||||
var/list/argL = new/list()
|
||||
|
||||
var/i
|
||||
for(i=0; i<argNum; i++)
|
||||
class = input("Type of Argument #[i]","Variable Type", "text") in list("text","num","type","reference","icon","file","marked datum","cancel")
|
||||
switch(class)
|
||||
if("cancel")
|
||||
return
|
||||
|
||||
if("text")
|
||||
argL.Add( input("Enter new text:","Text",null) as text )
|
||||
|
||||
if("num")
|
||||
argL.Add( input("Enter new number:","Num",null) as num )
|
||||
|
||||
if("type")
|
||||
argL.Add( input("Enter type:","Type",null) in typesof(/obj,/mob,/area,/turf) )
|
||||
|
||||
if("reference")
|
||||
switch(alert("Would you like to enter a specific object, or search for it from the world?","Choose!","Specifc UID (Hexadecimal number)", "Search"))
|
||||
if("Specifc UID (Hexadecimal number)")
|
||||
var/UID = input("Type in UID, without the leading 0x","Type in UID") as text|null
|
||||
if(!UID) return
|
||||
var/temp_variable = locate("\[0x[UID]\]")
|
||||
if(!temp_variable)
|
||||
usr << "ERROR. Could not locate referenced object."
|
||||
return
|
||||
switch(alert("You have chosen [temp_variable], in [get_area(temp_variable)]. Are you sure?","You sure?","Yes","NONOCANCEL!"))
|
||||
if("Yes")
|
||||
argL.Add(temp_variable)
|
||||
if("NONOCANCEL!")
|
||||
return
|
||||
if("Search")
|
||||
argL.Add(input("Select reference:","Reference") as null|mob|obj|turf|area in world)
|
||||
|
||||
if("icon")
|
||||
argL.Add( input("Pick icon:","Icon",null) as icon )
|
||||
|
||||
if("file")
|
||||
argL.Add( input("Pick file:","File",null) as file )
|
||||
|
||||
if("marked datum")
|
||||
argL.Add(holder.marked_datum)
|
||||
|
||||
usr << "\blue Calling '[procname]'"
|
||||
returnval = call(procname)(arglist(argL))
|
||||
|
||||
usr << "\blue Proc returned: [returnval ? returnval : "null"]"
|
||||
|
||||
|
||||
/client/proc/callprocobj(var/target as obj|mob|area|turf in world)
|
||||
set category = "Debug"
|
||||
set name = "Object ProcCall (BS12 Version)"
|
||||
if(!src.holder)
|
||||
src << "Only administrators may use this command."
|
||||
return
|
||||
|
||||
var/class = null
|
||||
var/returnval = null
|
||||
var/procname = input("Procpath (e.g. just \"update\" for lights)","path:", null) as null|text
|
||||
|
||||
if(!procname || procname == "") return
|
||||
|
||||
if(procname == "") return
|
||||
|
||||
var/argNum = input("Number of arguments:","Number",null) as num //input("Arguments","Arguments:", null)
|
||||
var/list/argL = new/list()
|
||||
|
||||
var/i
|
||||
for(i=0; i<argNum; i++)
|
||||
class = input("Type of Argument #[i]","Variable Type", "text") in list("text","num","type","reference","icon","file","marked datum","cancel")
|
||||
switch(class)
|
||||
if("cancel")
|
||||
return
|
||||
|
||||
if("text")
|
||||
argL.Add( input("Enter new text:","Text",null) as text )
|
||||
|
||||
if("num")
|
||||
argL.Add( input("Enter new number:","Num",null) as num )
|
||||
|
||||
if("type")
|
||||
argL.Add( input("Enter type:","Type",null) in typesof(/obj,/mob,/area,/turf) )
|
||||
|
||||
if("reference")
|
||||
switch(alert("Would you like to enter a specific object, or search for it from the world?","Choose!","Specifc UID (Hexadecimal number)", "Search"))
|
||||
if("Specifc UID (Hexadecimal number)")
|
||||
var/UID = input("Type in UID, without the leading 0x","Type in UID") as text|null
|
||||
if(!UID) return
|
||||
var/temp_variable = locate("\[0x[UID]\]")
|
||||
if(!temp_variable)
|
||||
usr << "ERROR. Could not locate referenced object."
|
||||
return
|
||||
switch(alert("You have chosen [temp_variable], in [get_area(temp_variable)]. Are you sure?","You sure?","Yes","NONOCANCEL!"))
|
||||
if("Yes")
|
||||
argL.Add(temp_variable)
|
||||
if("NONOCANCEL!")
|
||||
return
|
||||
if("Search")
|
||||
argL.Add(input("Select reference:","Reference") as null|mob|obj|turf|area in world)
|
||||
|
||||
if("icon")
|
||||
argL.Add( input("Pick icon:","Icon",null) as icon )
|
||||
|
||||
if("file")
|
||||
argL.Add( input("Pick file:","File",null) as file )
|
||||
|
||||
if("marked datum")
|
||||
argL.Add(holder.marked_datum)
|
||||
|
||||
usr << "\blue Calling '[procname]' on '[target]'"
|
||||
returnval = call(target,procname)(arglist(argL))
|
||||
|
||||
usr << "\blue Proc returned: [returnval ? returnval : "null"]"
|
||||
|
||||
feedback_add_details("admin_verb","APC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/Cell()
|
||||
set category = "Debug"
|
||||
@@ -297,9 +155,9 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
t+= "CO2: [env.carbon_dioxide]\n"
|
||||
|
||||
usr.show_message(t, 1)
|
||||
//feedback_add_details("admin_verb","ASL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
feedback_add_details("admin_verb","ASL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/cmd_admin_robotize(var/mob/M in world)
|
||||
/client/proc/cmd_admin_robotize(var/mob/M in mob_list)
|
||||
set category = "Fun"
|
||||
set name = "Make Robot"
|
||||
|
||||
@@ -314,13 +172,13 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
else
|
||||
alert("Invalid mob")
|
||||
|
||||
/client/proc/makepAI(var/turf/T in world)
|
||||
/client/proc/makepAI(var/turf/T in mob_list)
|
||||
set category = "Fun"
|
||||
set name = "Make pAI"
|
||||
set desc = "Specify a location to spawn a pAI device, then specify a key to play that pAI"
|
||||
|
||||
var/list/available = list()
|
||||
for(var/mob/C in world)
|
||||
for(var/mob/C in mob_list)
|
||||
if(C.key)
|
||||
available.Add(C)
|
||||
var/mob/choice = input("Choose a player to play the pAI", "Spawn pAI") in available
|
||||
@@ -335,13 +193,13 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
pai.name = input(choice, "Enter your pAI name:", "pAI Name", "Personal AI") as text
|
||||
pai.real_name = pai.name
|
||||
pai.key = choice.key
|
||||
card.pai = pai
|
||||
card.setPersonality(pai)
|
||||
for(var/datum/paiCandidate/candidate in paiController.pai_candidates)
|
||||
if(candidate.key == choice.key)
|
||||
paiController.pai_candidates.Remove(candidate)
|
||||
//feedback_add_details("admin_verb","MPAI") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
feedback_add_details("admin_verb","MPAI") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/cmd_admin_alienize(var/mob/M in world)
|
||||
/client/proc/cmd_admin_alienize(var/mob/M in mob_list)
|
||||
set category = "Fun"
|
||||
set name = "Make Alien"
|
||||
|
||||
@@ -352,13 +210,13 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
log_admin("[key_name(src)] has alienized [M.key].")
|
||||
spawn(10)
|
||||
M:Alienize()
|
||||
//feedback_add_details("admin_verb","MKAL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
feedback_add_details("admin_verb","MKAL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
log_admin("[key_name(usr)] made [key_name(M)] into an alien.")
|
||||
message_admins("\blue [key_name_admin(usr)] made [key_name(M)] into an alien.", 1)
|
||||
else
|
||||
alert("Invalid mob")
|
||||
|
||||
/client/proc/cmd_admin_metroidize(var/mob/M in world)
|
||||
/client/proc/cmd_admin_metroidize(var/mob/M in mob_list)
|
||||
set category = "Fun"
|
||||
set name = "Make Metroid"
|
||||
|
||||
@@ -369,7 +227,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
log_admin("[key_name(src)] has metroidized [M.key].")
|
||||
spawn(10)
|
||||
M:Metroidize()
|
||||
//feedback_add_details("admin_verb","MKMET") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
feedback_add_details("admin_verb","MKMET") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
log_admin("[key_name(usr)] made [key_name(M)] into a metroid.")
|
||||
message_admins("\blue [key_name_admin(usr)] made [key_name(M)] into a metroid.", 1)
|
||||
else
|
||||
@@ -479,7 +337,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
del(O)
|
||||
log_admin("[key_name(src)] has deleted all instances of [hsbitem].")
|
||||
message_admins("[key_name_admin(src)] has deleted all instances of [hsbitem].", 0)
|
||||
// feedback_add_details("admin_verb","DELA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
feedback_add_details("admin_verb","DELA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/cmd_debug_make_powernets()
|
||||
set category = "Debug"
|
||||
@@ -487,7 +345,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
makepowernets()
|
||||
log_admin("[key_name(src)] has remade the powernet. makepowernets() called.")
|
||||
message_admins("[key_name_admin(src)] has remade the powernets. makepowernets() called.", 0)
|
||||
// feedback_add_details("admin_verb","MPWN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
feedback_add_details("admin_verb","MPWN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/cmd_debug_tog_aliens()
|
||||
set category = "Server"
|
||||
@@ -496,9 +354,9 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
aliens_allowed = !aliens_allowed
|
||||
log_admin("[key_name(src)] has turned aliens [aliens_allowed ? "on" : "off"].")
|
||||
message_admins("[key_name_admin(src)] has turned aliens [aliens_allowed ? "on" : "off"].", 0)
|
||||
// feedback_add_details("admin_verb","TAL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
feedback_add_details("admin_verb","TAL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/cmd_admin_grantfullaccess(var/mob/M in world)
|
||||
/client/proc/cmd_admin_grantfullaccess(var/mob/M in mob_list)
|
||||
set category = "Admin"
|
||||
set name = "Grant Full Access"
|
||||
|
||||
@@ -521,15 +379,15 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
id.registered_name = H.real_name
|
||||
id.assignment = "Captain"
|
||||
id.name = "[id.registered_name]'s ID Card ([id.assignment])"
|
||||
H.equip_if_possible(id, H.slot_wear_id)
|
||||
H.update_clothing()
|
||||
H.equip_to_slot_or_del(id, slot_wear_id)
|
||||
H.update_inv_wear_id()
|
||||
else
|
||||
alert("Invalid mob")
|
||||
//feedback_add_details("admin_verb","GFA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
feedback_add_details("admin_verb","GFA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
log_admin("[key_name(src)] has granted [M.key] full access.")
|
||||
message_admins("\blue [key_name_admin(usr)] has granted [M.key] full access.", 1)
|
||||
|
||||
/client/proc/cmd_assume_direct_control(var/mob/M in world)
|
||||
/client/proc/cmd_assume_direct_control(var/mob/M in mob_list)
|
||||
set category = "Admin"
|
||||
set name = "Assume direct control"
|
||||
set desc = "Direct intervention"
|
||||
@@ -538,19 +396,32 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
if(alert("This mob is being controlled by [M.ckey]. Are you sure you wish to assume control of it? [M.ckey] will be made a ghost.",,"Yes","No") != "Yes")
|
||||
return
|
||||
else
|
||||
var/mob/dead/observer/ghost = new/mob/dead/observer()
|
||||
ghost.ckey = M.ckey;
|
||||
var/mob/dead/observer/ghost = new/mob/dead/observer(M,1)
|
||||
ghost.ckey = M.ckey
|
||||
var/mob/adminmob = src.mob
|
||||
M.ckey = src.ckey;
|
||||
M.ckey = src.ckey
|
||||
if( isobserver(adminmob) )
|
||||
del(adminmob)
|
||||
//feedback_add_details("admin_verb","ADC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
feedback_add_details("admin_verb","ADC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
log_admin("[key_name(usr)] assumed direct control of [M].")
|
||||
message_admins("\blue [key_name_admin(usr)] assumed direct control of [M].", 1)
|
||||
|
||||
|
||||
|
||||
/client/proc/cmd_admin_dress(var/mob/living/carbon/human/M in world)
|
||||
|
||||
|
||||
/client/proc/cmd_switch_radio()
|
||||
set category = "Debug"
|
||||
set name = "Switch Radio Mode"
|
||||
set desc = "Toggle between normal radios and experimental radios. Have a coder present if you do this."
|
||||
|
||||
GLOBAL_RADIO_TYPE = !GLOBAL_RADIO_TYPE // toggle
|
||||
log_admin("[key_name(src)] has turned the experimental radio system [GLOBAL_RADIO_TYPE ? "on" : "off"].")
|
||||
message_admins("[key_name_admin(src)] has turned the experimental radio system [GLOBAL_RADIO_TYPE ? "on" : "off"].", 0)
|
||||
feedback_add_details("admin_verb","SRM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
|
||||
/client/proc/cmd_admin_dress(var/mob/living/carbon/human/M in mob_list)
|
||||
set category = "Fun"
|
||||
set name = "Select equipment"
|
||||
if(!ishuman(M))
|
||||
@@ -573,7 +444,6 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
"assassin",
|
||||
"death commando",
|
||||
"syndicate commando",
|
||||
"response team",
|
||||
"centcom official",
|
||||
"centcom commander",
|
||||
"special ops officer",
|
||||
@@ -584,7 +454,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
var/dresscode = input("Select dress for [M]", "Robust quick dress shop") as null|anything in dresspacks
|
||||
if (isnull(dresscode))
|
||||
return
|
||||
//feedback_add_details("admin_verb","SEQ") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
feedback_add_details("admin_verb","SEQ") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
for (var/obj/item/I in M)
|
||||
if (istype(I, /obj/item/weapon/implant))
|
||||
continue
|
||||
@@ -593,176 +463,174 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
if ("strip")
|
||||
//do nothing
|
||||
if ("standard space gear")
|
||||
M.equip_if_possible(new /obj/item/clothing/shoes/black(M), M.slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes)
|
||||
|
||||
M.equip_if_possible(new /obj/item/clothing/under/color/grey(M), M.slot_w_uniform)
|
||||
M.equip_if_possible(new /obj/item/clothing/suit/space(M), M.slot_wear_suit)
|
||||
M.equip_if_possible(new /obj/item/clothing/head/helmet/space(M), M.slot_head)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/color/grey(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/suit/space(M), slot_wear_suit)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space(M), slot_head)
|
||||
var /obj/item/weapon/tank/jetpack/J = new /obj/item/weapon/tank/jetpack/oxygen(M)
|
||||
M.equip_if_possible(J, M.slot_back)
|
||||
M.equip_to_slot_or_del(J, slot_back)
|
||||
J.toggle()
|
||||
M.equip_if_possible(new /obj/item/clothing/mask/breath(M), M.slot_wear_mask)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/mask/breath(M), slot_wear_mask)
|
||||
J.Topic(null, list("stat" = 1))
|
||||
if ("tournament standard red","tournament standard green") //we think stunning weapon is too overpowered to use it on tournaments. --rastaf0
|
||||
if (dresscode=="tournament standard red")
|
||||
M.equip_if_possible(new /obj/item/clothing/under/color/red(M), M.slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/color/red(M), slot_w_uniform)
|
||||
else
|
||||
M.equip_if_possible(new /obj/item/clothing/under/color/green(M), M.slot_w_uniform)
|
||||
M.equip_if_possible(new /obj/item/clothing/shoes/black(M), M.slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/color/green(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes)
|
||||
|
||||
M.equip_if_possible(new /obj/item/clothing/suit/armor/vest(M), M.slot_wear_suit)
|
||||
M.equip_if_possible(new /obj/item/clothing/head/helmet/thunderdome(M), M.slot_head)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest(M), slot_wear_suit)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/thunderdome(M), slot_head)
|
||||
|
||||
M.equip_if_possible(new /obj/item/weapon/gun/energy/pulse_rifle/destroyer(M), M.slot_r_hand)
|
||||
M.equip_if_possible(new /obj/item/weapon/kitchenknife(M), M.slot_l_hand)
|
||||
M.equip_if_possible(new /obj/item/weapon/smokebomb(M), M.slot_r_store)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse_rifle/destroyer(M), slot_r_hand)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/kitchenknife(M), slot_l_hand)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/grenade/smokebomb(M), slot_r_store)
|
||||
|
||||
|
||||
if ("tournament gangster") //gangster are supposed to fight each other. --rastaf0
|
||||
M.equip_if_possible(new /obj/item/clothing/under/det(M), M.slot_w_uniform)
|
||||
M.equip_if_possible(new /obj/item/clothing/shoes/black(M), M.slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/det(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes)
|
||||
|
||||
M.equip_if_possible(new /obj/item/clothing/suit/storage/det_suit(M), M.slot_wear_suit)
|
||||
M.equip_if_possible(new /obj/item/clothing/glasses/thermal/monocle(M), M.slot_glasses)
|
||||
M.equip_if_possible(new /obj/item/clothing/head/det_hat(M), M.slot_head)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/suit/det_suit(M), slot_wear_suit)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/monocle(M), slot_glasses)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/head/det_hat(M), slot_head)
|
||||
|
||||
M.equip_if_possible(new /obj/item/weapon/cloaking_device(M), M.slot_r_store)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/cloaking_device(M), slot_r_store)
|
||||
|
||||
M.equip_if_possible(new /obj/item/weapon/gun/projectile(M), M.slot_r_hand)
|
||||
M.equip_if_possible(new /obj/item/ammo_magazine/a357(M), M.slot_l_store)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile(M), slot_r_hand)
|
||||
M.equip_to_slot_or_del(new /obj/item/ammo_magazine/a357(M), slot_l_store)
|
||||
|
||||
if ("tournament chef") //Steven Seagal FTW
|
||||
M.equip_if_possible(new /obj/item/clothing/under/rank/chef(M), M.slot_w_uniform)
|
||||
M.equip_if_possible(new /obj/item/clothing/suit/storage/chef(M), M.slot_wear_suit)
|
||||
M.equip_if_possible(new /obj/item/clothing/shoes/black(M), M.slot_shoes)
|
||||
M.equip_if_possible(new /obj/item/clothing/head/chefhat(M), M.slot_head)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chef(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/suit/chef(M), slot_wear_suit)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/head/chefhat(M), slot_head)
|
||||
|
||||
M.equip_if_possible(new /obj/item/weapon/kitchen/rollingpin(M), M.slot_r_hand)
|
||||
M.equip_if_possible(new /obj/item/weapon/kitchenknife(M), M.slot_l_hand)
|
||||
M.equip_if_possible(new /obj/item/weapon/kitchenknife(M), M.slot_r_store)
|
||||
M.equip_if_possible(new /obj/item/weapon/kitchenknife(M), M.slot_s_store)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/kitchen/rollingpin(M), slot_r_hand)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/kitchenknife(M), slot_l_hand)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/kitchenknife(M), slot_r_store)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/kitchenknife(M), slot_s_store)
|
||||
|
||||
if ("tournament janitor")
|
||||
M.equip_if_possible(new /obj/item/clothing/under/rank/janitor(M), M.slot_w_uniform)
|
||||
M.equip_if_possible(new /obj/item/clothing/shoes/black(M), M.slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/janitor(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes)
|
||||
var/obj/item/weapon/storage/backpack/backpack = new(M)
|
||||
for(var/obj/item/I in backpack)
|
||||
del(I)
|
||||
M.equip_if_possible(backpack, M.slot_back)
|
||||
M.equip_to_slot_or_del(backpack, slot_back)
|
||||
|
||||
M.equip_if_possible(new /obj/item/weapon/mop(M), M.slot_r_hand)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/mop(M), slot_r_hand)
|
||||
var/obj/item/weapon/reagent_containers/glass/bucket/bucket = new(M)
|
||||
bucket.reagents.add_reagent("water", 70)
|
||||
M.equip_if_possible(bucket, M.slot_l_hand)
|
||||
M.equip_to_slot_or_del(bucket, slot_l_hand)
|
||||
|
||||
M.equip_if_possible(new /obj/item/weapon/chem_grenade/cleaner(M), M.slot_r_store)
|
||||
M.equip_if_possible(new /obj/item/weapon/chem_grenade/cleaner(M), M.slot_l_store)
|
||||
M.equip_if_possible(new /obj/item/stack/tile/plasteel(M), M.slot_in_backpack)
|
||||
M.equip_if_possible(new /obj/item/stack/tile/plasteel(M), M.slot_in_backpack)
|
||||
M.equip_if_possible(new /obj/item/stack/tile/plasteel(M), M.slot_in_backpack)
|
||||
M.equip_if_possible(new /obj/item/stack/tile/plasteel(M), M.slot_in_backpack)
|
||||
M.equip_if_possible(new /obj/item/stack/tile/plasteel(M), M.slot_in_backpack)
|
||||
M.equip_if_possible(new /obj/item/stack/tile/plasteel(M), M.slot_in_backpack)
|
||||
M.equip_if_possible(new /obj/item/stack/tile/plasteel(M), M.slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/grenade/chem_grenade/cleaner(M), slot_r_store)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/grenade/chem_grenade/cleaner(M), slot_l_store)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/plasteel(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/plasteel(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/plasteel(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/plasteel(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/plasteel(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/plasteel(M), slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/stack/tile/plasteel(M), slot_in_backpack)
|
||||
|
||||
if ("pirate")
|
||||
M.equip_if_possible(new /obj/item/clothing/under/pirate(M), M.slot_w_uniform)
|
||||
M.equip_if_possible(new /obj/item/clothing/shoes/brown(M), M.slot_shoes)
|
||||
M.equip_if_possible(new /obj/item/clothing/head/bandana(M), M.slot_head)
|
||||
M.equip_if_possible(new /obj/item/clothing/glasses/eyepatch(M), M.slot_glasses)
|
||||
M.equip_if_possible(new /obj/item/weapon/melee/energy/sword/pirate(M), M.slot_r_hand)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/pirate(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/head/bandana(M), slot_head)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/eyepatch(M), slot_glasses)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword/pirate(M), slot_r_hand)
|
||||
|
||||
if ("space pirate")
|
||||
M.equip_if_possible(new /obj/item/clothing/under/pirate(M), M.slot_w_uniform)
|
||||
M.equip_if_possible(new /obj/item/clothing/shoes/brown(M), M.slot_shoes)
|
||||
M.equip_if_possible(new /obj/item/clothing/suit/space/pirate(M), M.slot_wear_suit)
|
||||
M.equip_if_possible(new /obj/item/clothing/head/helmet/space/pirate(M), M.slot_head)
|
||||
M.equip_if_possible(new /obj/item/clothing/glasses/eyepatch(M), M.slot_glasses)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/pirate(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/pirate(M), slot_wear_suit)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/pirate(M), slot_head)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/eyepatch(M), slot_glasses)
|
||||
|
||||
M.equip_if_possible(new /obj/item/weapon/melee/energy/sword/pirate(M), M.slot_r_hand)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword/pirate(M), slot_r_hand)
|
||||
|
||||
/*
|
||||
if ("soviet soldier")
|
||||
M.equip_if_possible(new /obj/item/clothing/under/soviet(M), M.slot_w_uniform)
|
||||
M.equip_if_possible(new /obj/item/clothing/shoes/black(M), M.slot_shoes)
|
||||
M.equip_if_possible(new /obj/item/clothing/head/ushanka(M), M.slot_head)
|
||||
*/
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/soviet(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/head/ushanka(M), slot_head)
|
||||
|
||||
if("tunnel clown")//Tunnel clowns rule!
|
||||
M.equip_if_possible(new /obj/item/clothing/under/rank/clown(M), M.slot_w_uniform)
|
||||
M.equip_if_possible(new /obj/item/clothing/shoes/clown_shoes(M), M.slot_shoes)
|
||||
M.equip_if_possible(new /obj/item/clothing/gloves/black(M), M.slot_gloves)
|
||||
M.equip_if_possible(new /obj/item/clothing/mask/gas/clown_hat(M), M.slot_wear_mask)
|
||||
M.equip_if_possible(new /obj/item/clothing/head/chaplain_hood(M), M.slot_head)
|
||||
M.equip_if_possible(new /obj/item/device/radio/headset(M), M.slot_ears)
|
||||
M.equip_if_possible(new /obj/item/clothing/glasses/thermal/monocle(M), M.slot_glasses)
|
||||
M.equip_if_possible(new /obj/item/clothing/suit/storage/chaplain_hoodie(M), M.slot_wear_suit)
|
||||
M.equip_if_possible(new /obj/item/weapon/reagent_containers/food/snacks/grown/banana(M), M.slot_l_store)
|
||||
M.equip_if_possible(new /obj/item/weapon/bikehorn(M), M.slot_r_store)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/clown(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/clown_shoes(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(M), slot_gloves)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/clown_hat(M), slot_wear_mask)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/head/chaplain_hood(M), slot_head)
|
||||
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/monocle(M), slot_glasses)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/suit/chaplain_hoodie(M), slot_wear_suit)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/food/snacks/grown/banana(M), slot_l_store)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/bikehorn(M), slot_r_store)
|
||||
|
||||
var/obj/item/weapon/card/id/W = new(M)
|
||||
W.name = "[M.real_name]'s ID Card"
|
||||
W.access = get_all_accesses()
|
||||
W.assignment = "Tunnel Clown!"
|
||||
W.registered_name = M.real_name
|
||||
M.equip_if_possible(W, M.slot_wear_id)
|
||||
M.equip_to_slot_or_del(W, slot_wear_id)
|
||||
|
||||
var/obj/item/weapon/twohanded/fireaxe/fire_axe = new(M)
|
||||
M.equip_if_possible(fire_axe, M.slot_r_hand)
|
||||
M.equip_to_slot_or_del(fire_axe, slot_r_hand)
|
||||
|
||||
if("masked killer")
|
||||
M.equip_if_possible(new /obj/item/clothing/under/overalls(M), M.slot_w_uniform)
|
||||
M.equip_if_possible(new /obj/item/clothing/shoes/white(M), M.slot_shoes)
|
||||
M.equip_if_possible(new /obj/item/clothing/gloves/latex(M), M.slot_gloves)
|
||||
M.equip_if_possible(new /obj/item/clothing/mask/surgical(M), M.slot_wear_mask)
|
||||
M.equip_if_possible(new /obj/item/clothing/head/helmet/welding(M), M.slot_head)
|
||||
M.equip_if_possible(new /obj/item/device/radio/headset(M), M.slot_ears)
|
||||
M.equip_if_possible(new /obj/item/clothing/glasses/thermal/monocle(M), M.slot_glasses)
|
||||
M.equip_if_possible(new /obj/item/clothing/suit/storage/apron(M), M.slot_wear_suit)
|
||||
M.equip_if_possible(new /obj/item/weapon/kitchenknife(M), M.slot_l_store)
|
||||
M.equip_if_possible(new /obj/item/weapon/scalpel(M), M.slot_r_store)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/overalls(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/latex(M), slot_gloves)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/mask/surgical(M), slot_wear_mask)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/head/welding(M), slot_head)
|
||||
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/monocle(M), slot_glasses)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/suit/apron(M), slot_wear_suit)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/kitchenknife(M), slot_l_store)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/scalpel(M), slot_r_store)
|
||||
|
||||
var/obj/item/weapon/twohanded/fireaxe/fire_axe = new(M)
|
||||
M.equip_if_possible(fire_axe, M.slot_r_hand)
|
||||
M.equip_to_slot_or_del(fire_axe, slot_r_hand)
|
||||
|
||||
for(var/obj/item/carried_item in M.contents)
|
||||
if(!istype(carried_item, /obj/item/weapon/implant))//If it's not an implant.
|
||||
carried_item.add_blood(M)//Oh yes, there will be blood...
|
||||
|
||||
if("assassin")
|
||||
M.equip_if_possible(new /obj/item/clothing/under/suit_jacket(M), M.slot_w_uniform)
|
||||
M.equip_if_possible(new /obj/item/clothing/shoes/black(M), M.slot_shoes)
|
||||
M.equip_if_possible(new /obj/item/clothing/gloves/black(M), M.slot_gloves)
|
||||
M.equip_if_possible(new /obj/item/device/radio/headset(M), M.slot_ears)
|
||||
M.equip_if_possible(new /obj/item/clothing/glasses/sunglasses(M), M.slot_glasses)
|
||||
M.equip_if_possible(new /obj/item/clothing/suit/storage/wcoat(M), M.slot_wear_suit)
|
||||
M.equip_if_possible(new /obj/item/weapon/melee/energy/sword(M), M.slot_l_store)
|
||||
M.equip_if_possible(new /obj/item/weapon/cloaking_device(M), M.slot_r_store)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/suit_jacket(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(M), slot_gloves)
|
||||
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(M), slot_glasses)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/suit/wcoat(M), slot_wear_suit)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword(M), slot_l_store)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/cloaking_device(M), slot_r_store)
|
||||
|
||||
var/obj/item/weapon/secstorage/sbriefcase/sec_briefcase = new(M)
|
||||
for(var/obj/item/briefcase_item in sec_briefcase)
|
||||
del(briefcase_item)
|
||||
for(var/i=3, i>0, i--)
|
||||
sec_briefcase.contents += new /obj/item/weapon/money/c1000
|
||||
sec_briefcase.contents += new /obj/item/weapon/spacecash/c1000
|
||||
sec_briefcase.contents += new /obj/item/weapon/gun/energy/crossbow
|
||||
sec_briefcase.contents += new /obj/item/weapon/gun/projectile/mateba
|
||||
sec_briefcase.contents += new /obj/item/ammo_magazine/a357
|
||||
sec_briefcase.contents += new /obj/item/weapon/plastique
|
||||
M.equip_if_possible(sec_briefcase, M.slot_l_hand)
|
||||
M.equip_to_slot_or_del(sec_briefcase, slot_l_hand)
|
||||
|
||||
var/obj/item/device/pda/heads/pda = new(M)
|
||||
pda.owner = M.real_name
|
||||
pda.ownjob = "Reaper"
|
||||
pda.name = "PDA-[M.real_name] ([pda.ownjob])"
|
||||
|
||||
M.equip_if_possible(pda, M.slot_belt)
|
||||
M.equip_to_slot_or_del(pda, slot_belt)
|
||||
|
||||
var/obj/item/weapon/card/id/syndicate/W = new(M)
|
||||
W.name = "[M.real_name]'s ID Card"
|
||||
W.access = get_all_accesses()
|
||||
W.assignment = "Reaper"
|
||||
W.registered_name = M.real_name
|
||||
M.equip_if_possible(W, M.slot_wear_id)
|
||||
M.equip_to_slot_or_del(W, slot_wear_id)
|
||||
|
||||
if("death commando")//Was looking to add this for a while.
|
||||
M.equip_death_commando()
|
||||
@@ -770,53 +638,45 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
if("syndicate commando")
|
||||
M.equip_syndicate_commando()
|
||||
|
||||
if("response team")
|
||||
M.equip_strike_team()
|
||||
|
||||
if("centcom official")
|
||||
M.equip_if_possible(new /obj/item/clothing/under/rank/centcom_officer(M), M.slot_w_uniform)
|
||||
M.equip_if_possible(new /obj/item/clothing/shoes/black(M), M.slot_shoes)
|
||||
M.equip_if_possible(new /obj/item/clothing/gloves/white(M), M.slot_gloves)
|
||||
M.equip_if_possible(new /obj/item/device/radio/headset/heads/hop(M), M.slot_ears)
|
||||
var/obj/item/clothing/suit/storage/armoredundersuit/K = new(M)
|
||||
var/obj/item/clothing/glasses/sunglasses/V = new(M)
|
||||
V.loc = K
|
||||
M.equip_if_possible(K, M.slot_wear_suit)
|
||||
M.equip_if_possible(new /obj/item/weapon/gun/energy/gun(M), M.slot_s_store)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_officer(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(M), slot_gloves)
|
||||
M.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/hop(M), slot_ears)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(M), slot_glasses)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy(M), slot_belt)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/pen(M), slot_l_store)
|
||||
|
||||
var/obj/item/device/pda/heads/pda = new(M)
|
||||
pda.owner = M.real_name
|
||||
pda.ownjob = "CentCom Review Official"
|
||||
pda.name = "PDA-[M.real_name] ([pda.ownjob])"
|
||||
|
||||
M.equip_if_possible(pda, M.slot_r_store)
|
||||
M.equip_if_possible(new /obj/item/weapon/clipboard(M), M.slot_l_store)
|
||||
M.equip_to_slot_or_del(pda, slot_r_store)
|
||||
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/clipboard(M), slot_l_hand)
|
||||
|
||||
var/obj/item/weapon/card/id/W = new(M)
|
||||
W.name = "[M.real_name]'s ID Card"
|
||||
W.icon_state = "centcom"
|
||||
W.item_state = "id_inv"
|
||||
W.access = get_all_accesses()
|
||||
W.access += list("VIP Guest","Custodian","Thunderdome Overseer","Intel Officer","Medical Officer","Death Commando","Research Officer")
|
||||
W.assignment = "CentCom Review Official"
|
||||
W.registered_name = M.real_name
|
||||
W.over_jumpsuit = 0
|
||||
M.equip_if_possible(W, M.slot_wear_id)
|
||||
M.equip_to_slot_or_del(W, slot_wear_id)
|
||||
|
||||
if("centcom commander")
|
||||
M.equip_if_possible(new /obj/item/clothing/under/rank/centcom_commander(M), M.slot_w_uniform)
|
||||
var/obj/item/clothing/suit/storage/armoredundersuit/K = new(M)
|
||||
var/obj/item/clothing/glasses/eyepatch/G = new(M)
|
||||
G.loc = K
|
||||
M.equip_if_possible(K, M.slot_wear_suit)
|
||||
M.equip_if_possible(new /obj/item/clothing/shoes/swat(M), M.slot_shoes)
|
||||
M.equip_if_possible(new /obj/item/clothing/gloves/white(M), M.slot_gloves)
|
||||
M.equip_if_possible(new /obj/item/device/radio/headset/heads/captain(M), M.slot_ears)
|
||||
M.equip_if_possible(new /obj/item/clothing/mask/cigarette/cigar/cohiba(M), M.slot_wear_mask)
|
||||
M.equip_if_possible(new /obj/item/clothing/head/centhat(M), M.slot_head)
|
||||
M.equip_if_possible(new /obj/item/weapon/gun/projectile/mateba(M), M.slot_s_store)
|
||||
M.equip_if_possible(new /obj/item/weapon/lighter/zippo(M), M.slot_r_store)
|
||||
M.equip_if_possible(new /obj/item/ammo_magazine/a357(M), M.slot_l_store)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_commander(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/bulletproof(M), slot_wear_suit)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/swat(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/swat(M), slot_gloves)
|
||||
M.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/captain(M), slot_ears)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/eyepatch(M), slot_glasses)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/mask/cigarette/cigar/cohiba(M), slot_wear_mask)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/head/centhat(M), slot_head)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/mateba(M), slot_belt)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/lighter/zippo(M), slot_r_store)
|
||||
M.equip_to_slot_or_del(new /obj/item/ammo_magazine/a357(M), slot_l_store)
|
||||
|
||||
var/obj/item/weapon/card/id/W = new(M)
|
||||
W.name = "[M.real_name]'s ID Card"
|
||||
@@ -825,21 +685,20 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
W.access += get_all_centcom_access()
|
||||
W.assignment = "CentCom Commanding Officer"
|
||||
W.registered_name = M.real_name
|
||||
W.over_jumpsuit = 0
|
||||
M.equip_if_possible(W, M.slot_wear_id)
|
||||
M.equip_to_slot_or_del(W, slot_wear_id)
|
||||
|
||||
if("special ops officer")
|
||||
M.equip_if_possible(new /obj/item/clothing/under/syndicate/combat(M), M.slot_w_uniform)
|
||||
M.equip_if_possible(new /obj/item/clothing/suit/storage/officer(M), M.slot_wear_suit)
|
||||
M.equip_if_possible(new /obj/item/clothing/shoes/combat(M), M.slot_shoes)
|
||||
M.equip_if_possible(new /obj/item/clothing/gloves/combat(M), M.slot_gloves)
|
||||
M.equip_if_possible(new /obj/item/device/radio/headset/heads/captain(M), M.slot_ears)
|
||||
M.equip_if_possible(new /obj/item/clothing/glasses/thermal/eyepatch(M), M.slot_glasses)
|
||||
M.equip_if_possible(new /obj/item/clothing/mask/cigarette/cigar/havana(M), M.slot_wear_mask)
|
||||
M.equip_if_possible(new /obj/item/clothing/head/deathsquad/beret(M), M.slot_head)
|
||||
M.equip_if_possible(new /obj/item/weapon/gun/energy/pulse_rifle/M1911(M), M.slot_belt)
|
||||
M.equip_if_possible(new /obj/item/weapon/lighter/zippo(M), M.slot_r_store)
|
||||
M.equip_if_possible(new /obj/item/weapon/storage/backpack/satchel(M), M.slot_back)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/syndicate/combat(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/swat/officer(M), slot_wear_suit)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves)
|
||||
M.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/captain(M), slot_ears)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/eyepatch(M), slot_glasses)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/mask/cigarette/cigar/havana(M), slot_wear_mask)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/deathsquad/beret(M), slot_head)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse_rifle/M1911(M), slot_belt)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/lighter/zippo(M), slot_r_store)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(M), slot_back)
|
||||
|
||||
var/obj/item/weapon/card/id/W = new(M)
|
||||
W.name = "[M.real_name]'s ID Card"
|
||||
@@ -848,53 +707,53 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
W.access += get_all_centcom_access()
|
||||
W.assignment = "Special Operations Officer"
|
||||
W.registered_name = M.real_name
|
||||
M.equip_if_possible(W, M.slot_wear_id)
|
||||
M.equip_to_slot_or_del(W, slot_wear_id)
|
||||
|
||||
if("blue wizard")
|
||||
M.equip_if_possible(new /obj/item/clothing/under/lightpurple(M), M.slot_w_uniform)
|
||||
M.equip_if_possible(new /obj/item/clothing/suit/wizrobe(M), M.slot_wear_suit)
|
||||
M.equip_if_possible(new /obj/item/clothing/shoes/sandal(M), M.slot_shoes)
|
||||
M.equip_if_possible(new /obj/item/device/radio/headset(M), M.slot_ears)
|
||||
M.equip_if_possible(new /obj/item/clothing/head/wizard(M), M.slot_head)
|
||||
M.equip_if_possible(new /obj/item/weapon/teleportation_scroll(M), M.slot_r_store)
|
||||
M.equip_if_possible(new /obj/item/weapon/spellbook(M), M.slot_r_hand)
|
||||
M.equip_if_possible(new /obj/item/weapon/staff(M), M.slot_l_hand)
|
||||
M.equip_if_possible(new /obj/item/weapon/storage/backpack(M), M.slot_back)
|
||||
M.equip_if_possible(new /obj/item/weapon/storage/box(M), M.slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/lightpurple(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe(M), slot_wear_suit)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/head/wizard(M), slot_head)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/teleportation_scroll(M), slot_r_store)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/spellbook(M), slot_r_hand)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/staff(M), slot_l_hand)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/storage/box(M), slot_in_backpack)
|
||||
|
||||
if("red wizard")
|
||||
M.equip_if_possible(new /obj/item/clothing/under/lightpurple(M), M.slot_w_uniform)
|
||||
M.equip_if_possible(new /obj/item/clothing/suit/wizrobe/red(M), M.slot_wear_suit)
|
||||
M.equip_if_possible(new /obj/item/clothing/shoes/sandal(M), M.slot_shoes)
|
||||
M.equip_if_possible(new /obj/item/device/radio/headset(M), M.slot_ears)
|
||||
M.equip_if_possible(new /obj/item/clothing/head/wizard/red(M), M.slot_head)
|
||||
M.equip_if_possible(new /obj/item/weapon/teleportation_scroll(M), M.slot_r_store)
|
||||
M.equip_if_possible(new /obj/item/weapon/spellbook(M), M.slot_r_hand)
|
||||
M.equip_if_possible(new /obj/item/weapon/staff(M), M.slot_l_hand)
|
||||
M.equip_if_possible(new /obj/item/weapon/storage/backpack(M), M.slot_back)
|
||||
M.equip_if_possible(new /obj/item/weapon/storage/box(M), M.slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/lightpurple(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe/red(M), slot_wear_suit)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/head/wizard/red(M), slot_head)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/teleportation_scroll(M), slot_r_store)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/spellbook(M), slot_r_hand)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/staff(M), slot_l_hand)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/storage/box(M), slot_in_backpack)
|
||||
|
||||
if("marisa wizard")
|
||||
M.equip_if_possible(new /obj/item/clothing/under/lightpurple(M), M.slot_w_uniform)
|
||||
M.equip_if_possible(new /obj/item/clothing/suit/wizrobe/marisa(M), M.slot_wear_suit)
|
||||
M.equip_if_possible(new /obj/item/clothing/shoes/sandal/marisa(M), M.slot_shoes)
|
||||
M.equip_if_possible(new /obj/item/device/radio/headset(M), M.slot_ears)
|
||||
M.equip_if_possible(new /obj/item/clothing/head/wizard/marisa(M), M.slot_head)
|
||||
M.equip_if_possible(new /obj/item/weapon/teleportation_scroll(M), M.slot_r_store)
|
||||
M.equip_if_possible(new /obj/item/weapon/spellbook(M), M.slot_r_hand)
|
||||
M.equip_if_possible(new /obj/item/weapon/staff(M), M.slot_l_hand)
|
||||
M.equip_if_possible(new /obj/item/weapon/storage/backpack(M), M.slot_back)
|
||||
M.equip_if_possible(new /obj/item/weapon/storage/box(M), M.slot_in_backpack)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/lightpurple(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe/marisa(M), slot_wear_suit)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal/marisa(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/head/wizard/marisa(M), slot_head)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/teleportation_scroll(M), slot_r_store)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/spellbook(M), slot_r_hand)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/staff(M), slot_l_hand)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/storage/box(M), slot_in_backpack)
|
||||
if("soviet admiral")
|
||||
M.equip_if_possible(new /obj/item/clothing/head/hgpiratecap(M), M.slot_head)
|
||||
M.equip_if_possible(new /obj/item/clothing/shoes/combat(M), M.slot_shoes)
|
||||
M.equip_if_possible(new /obj/item/clothing/gloves/combat(M), M.slot_gloves)
|
||||
M.equip_if_possible(new /obj/item/device/radio/headset/heads/captain(M), M.slot_ears)
|
||||
M.equip_if_possible(new /obj/item/clothing/glasses/thermal/eyepatch(M), M.slot_glasses)
|
||||
M.equip_if_possible(new /obj/item/clothing/suit/hgpirate(M), M.slot_wear_suit)
|
||||
M.equip_if_possible(new /obj/item/weapon/storage/backpack/bandolier(M), M.slot_back)
|
||||
M.equip_if_possible(new /obj/item/weapon/gun/projectile/mateba(M), M.slot_belt)
|
||||
M.equip_if_possible(new /obj/item/clothing/under/soviet(M), M.slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/head/hgpiratecap(M), slot_head)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves)
|
||||
M.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/captain(M), slot_ears)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/eyepatch(M), slot_glasses)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/suit/hgpirate(M), slot_wear_suit)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/bandolier(M), slot_back)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/mateba(M), slot_belt)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/soviet(M), slot_w_uniform)
|
||||
var/obj/item/weapon/card/id/W = new(M)
|
||||
W.name = "[M.real_name]'s ID Card"
|
||||
W.icon_state = "centcom"
|
||||
@@ -902,12 +761,12 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
W.access += get_all_centcom_access()
|
||||
W.assignment = "Admiral"
|
||||
W.registered_name = M.real_name
|
||||
M.equip_if_possible(W, M.slot_wear_id)
|
||||
M.equip_to_slot_or_del(W, slot_wear_id)
|
||||
|
||||
M.update_clothing()
|
||||
M.regenerate_icons()
|
||||
|
||||
log_admin("[key_name(usr)] changed the equipment of [key_name(M)] to [dresscode].")
|
||||
message_admins("\blue [key_name_admin(usr)] changed the equipment of [key_name_admin(M)] to [dresscode].", 1)
|
||||
message_admins("\blue [key_name_admin(usr)] changed the equipment of [key_name_admin(M)] to [dresscode]..", 1)
|
||||
return
|
||||
|
||||
/client/proc/startSinglo()
|
||||
@@ -934,7 +793,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
del(G)
|
||||
S.energy = 1750
|
||||
S.current_size = 7
|
||||
S.icon = '224x224.dmi'
|
||||
S.icon = 'icons/effects/224x224.dmi'
|
||||
S.icon_state = "singularity_s7"
|
||||
S.pixel_x = -96
|
||||
S.pixel_y = -96
|
||||
@@ -959,4 +818,23 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
|
||||
for(var/obj/machinery/power/smes/SMES in world)
|
||||
if(SMES.anchored)
|
||||
SMES.chargemode = 1
|
||||
SMES.chargemode = 1
|
||||
|
||||
/client/proc/cmd_debug_mob_lists()
|
||||
set category = "Debug"
|
||||
set name = "Debug Mob Lists"
|
||||
set desc = "For when you just gotta know"
|
||||
|
||||
switch(input("Which list?") in list("Players","Admins","Mobs","Living Mobs","Dead Mobs", "Clients"))
|
||||
if("Players")
|
||||
usr << dd_list2text(player_list,",")
|
||||
if("Admins")
|
||||
usr << dd_list2text(admin_list,",")
|
||||
if("Mobs")
|
||||
usr << dd_list2text(mob_list,",")
|
||||
if("Living Mobs")
|
||||
usr << dd_list2text(living_mob_list,",")
|
||||
if("Dead Mobs")
|
||||
usr << dd_list2text(dead_mob_list,",")
|
||||
if("Clients")
|
||||
usr << dd_list2text(client_list,",")
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
usr << alert("Master_controller not found.")
|
||||
|
||||
var/mobs = 0
|
||||
for(var/mob/M in world)
|
||||
for(var/mob/M in mob_list)
|
||||
mobs++
|
||||
|
||||
var/output = {"<B>GENERAL SYSTEMS REPORT</B><HR>
|
||||
@@ -20,12 +20,15 @@
|
||||
"}
|
||||
|
||||
usr << browse(output,"window=generalreport")
|
||||
//feedback_add_details("admin_verb","SGR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
feedback_add_details("admin_verb","SGR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/* air_report()
|
||||
//todo:
|
||||
air_report()
|
||||
set category = "Debug"
|
||||
set name = "Show Air Report"
|
||||
|
||||
usr << "\red This proc is unavailable."
|
||||
/*
|
||||
if(!master_controller || !air_master)
|
||||
alert(usr,"Master_controller or air_master not found.","Air Report")
|
||||
return 0
|
||||
@@ -63,12 +66,16 @@
|
||||
"}
|
||||
|
||||
usr << browse(output,"window=airreport")
|
||||
//feedback_add_details("admin_verb","SAR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
feedback_add_details("admin_verb","SAR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
*/
|
||||
|
||||
//todo:
|
||||
air_status(turf/target as turf)
|
||||
set category = "Debug"
|
||||
set name = "Display Air Status"
|
||||
|
||||
usr << "\red This proc is unavailable."
|
||||
/*
|
||||
if(!isturf(target))
|
||||
return
|
||||
|
||||
@@ -82,8 +89,9 @@
|
||||
usr << "\blue @[target.x],[target.y] ([GM.group_multiplier]): O:[GM.oxygen] T:[GM.toxins] N:[GM.nitrogen] C:[GM.carbon_dioxide] w [GM.temperature] Kelvin, [GM.return_pressure()] kPa [(burning)?("\red BURNING"):(null)]"
|
||||
for(var/datum/gas/trace_gas in GM.trace_gases)
|
||||
usr << "[trace_gas.type]: [trace_gas.moles]"
|
||||
//feedback_add_details("admin_verb","DAST") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
*/
|
||||
feedback_add_details("admin_verb","DAST") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
*/
|
||||
|
||||
fix_next_move()
|
||||
set category = "Debug"
|
||||
set name = "Unfreeze Everyone"
|
||||
@@ -112,7 +120,7 @@
|
||||
message_admins("[key_name_admin(largest_move_mob)] had the largest move delay with [largest_move_time] frames / [largest_move_time/10] seconds!", 1)
|
||||
message_admins("[key_name_admin(largest_click_mob)] had the largest click delay with [largest_click_time] frames / [largest_click_time/10] seconds!", 1)
|
||||
message_admins("world.time = [world.time]", 1)
|
||||
//feedback_add_details("admin_verb","UFE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
feedback_add_details("admin_verb","UFE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
return
|
||||
|
||||
radio_report()
|
||||
@@ -150,7 +158,7 @@
|
||||
output += " [device]<br>"
|
||||
|
||||
usr << browse(output,"window=radioreport")
|
||||
//feedback_add_details("admin_verb","RR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
feedback_add_details("admin_verb","RR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
reload_admins()
|
||||
set name = "Reload Admins"
|
||||
@@ -180,12 +188,15 @@
|
||||
var/a_lev = copytext(line, pos + 3, length(line) + 1)
|
||||
admins[m_key] = a_lev
|
||||
diary << ("ADMIN: [m_key] = [a_lev]")
|
||||
//feedback_add_details("admin_verb","RLDA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
feedback_add_details("admin_verb","RLDA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
|
||||
/*jump_to_dead_group()
|
||||
//todo:
|
||||
jump_to_dead_group()
|
||||
set name = "Jump to dead group"
|
||||
set category = "Debug"
|
||||
|
||||
usr << "\red This proc is unavailable."
|
||||
/*
|
||||
if(!holder)
|
||||
src << "Only administrators may use this command."
|
||||
return
|
||||
@@ -199,13 +210,16 @@
|
||||
dead_groups += group
|
||||
var/datum/air_group/dest_group = pick(dead_groups)
|
||||
usr.loc = pick(dest_group.members)
|
||||
//feedback_add_details("admin_verb","JDAG") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
feedback_add_details("admin_verb","JDAG") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
return
|
||||
*/
|
||||
|
||||
kill_airgroup()
|
||||
set name = "Kill Local Airgroup"
|
||||
set desc = "Use this to allow manual manipulation of atmospherics."
|
||||
set desc = "Use this to allow manual manupliation of atmospherics."
|
||||
set category = "Debug"
|
||||
usr << "\red This proc is unavailable."
|
||||
/*
|
||||
if(!holder)
|
||||
src << "Only administrators may use this command."
|
||||
return
|
||||
@@ -217,65 +231,9 @@
|
||||
var/turf/T = get_turf(usr)
|
||||
if(istype(T, /turf/simulated))
|
||||
var/datum/air_group/AG = T:parent
|
||||
AG.next_check = 30
|
||||
AG.group_processing = 0
|
||||
else
|
||||
usr << "Local airgroup is unsimulated!"
|
||||
//feedback_add_details("admin_verb","KLAG") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
*/
|
||||
|
||||
tension_report()
|
||||
set category = "Debug"
|
||||
set name = "Show Tension Report"
|
||||
|
||||
if(!master_controller || !tension_master)
|
||||
alert(usr,"Master_controller or tension_master not found.","Tension Report")
|
||||
return 0
|
||||
|
||||
if (!tension_master.get_num_players())
|
||||
alert(usr,"No players found. How the fuck are you calling this?","Tension Report")
|
||||
return 0
|
||||
|
||||
var/numghosts = 0
|
||||
|
||||
for(var/mob/dead/observer/theghost in world)
|
||||
numghosts ++
|
||||
|
||||
|
||||
var/output = {"<B>TENSION REPORT</B><HR>
|
||||
<B>General Statistics</B><BR>
|
||||
<B>Deaths:</B> [tension_master.deaths]<BR>
|
||||
---- <I>Humans:</I> [tension_master.human_deaths]<BR>
|
||||
<B>Explosions:</B> [tension_master.explosions]<BR>
|
||||
<B>Air alarms:</B> [tension_master.air_alarms]<BR>
|
||||
<B>Adminhelps:</B> [tension_master.adminhelps]<BR>
|
||||
<B>Ghosts:</B> [numghosts]<BR>
|
||||
<BR>
|
||||
<B>Current Status</B><BR>
|
||||
<B>Tension:</B> [tension_master.score]<BR>
|
||||
<a href='?src=\ref[tension_master];addScore=1'>Increase Tension by 50000</a><br>
|
||||
<B>Tension per player:</B> [tension_master.score/tension_master.get_num_players()]<BR>
|
||||
<B>Tensioner Debug Data:</B> R1:[tension_master.round1] R2:[tension_master.round2] R3:[tension_master.round3] R4:[tension_master.round4] ES: [tension_master.eversupressed] CD: [tension_master.cooldown]<br>
|
||||
<B>Current Tensioner Status:</B> [config.Tensioner_Active]. <a href='?src=\ref[tension_master];ToggleStatus=1'>Toggle?</a><br>
|
||||
<B>Recommendations:</B> All the modes. All of them. Press all of them.<BR>
|
||||
<BR>
|
||||
|
||||
<a href='?src=\ref[tension_master];makeTratior=1'>Make Tratiors</a><br>
|
||||
<a href='?src=\ref[tension_master];makeChanglings=1'>Make Changlings</a><br>
|
||||
<a href='?src=\ref[tension_master];makeRevs=1'>Make Revs</a><br>
|
||||
<a href='?src=\ref[tension_master];makeWizard=1'>Make Wizard (Requires Ghosts)</a><br>
|
||||
<a href='?src=\ref[tension_master];makeCult=1'>Make Cult</a><br>
|
||||
<a href='?src=\ref[tension_master];makeNukeTeam=1'>Make Nuke Team (Requires Ghosts)</a><br>
|
||||
<a href='?src=\ref[tension_master];makeMalf=1'>Make Malf AI</a><br>
|
||||
<a href='?src=\ref[tension_master];makeSpaceNinja=1'>Make Space Ninja (Requires Ghosts)</a><br>
|
||||
<a href='?src=\ref[tension_master];makeAliens=1'>Make Aliens (Requires Ghosts)</a><br>
|
||||
<a href='?src=\ref[tension_master];makeDeathsquad=1'>Make Deathsquad (Syndicate) (Requires Ghosts)</a><br>
|
||||
<a href='?src=\ref[tension_master];makeBorgDeathsquad=1'>Make Deathsquad (Borg) (Requires Ghosts)</a><br>
|
||||
|
||||
<br>
|
||||
|
||||
"}
|
||||
|
||||
for(var/game in tension_master.antagonistmodes)
|
||||
output += "<font size = 2>Points required/Probability for [game]: [tension_master.antagonistmodes[game]]<br></font>"
|
||||
usr << browse(output,"window=tensionreport;size=480x480")
|
||||
feedback_add_details("admin_verb","STR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
feedback_add_detail("admin_verb","KLAG") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
*/
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
set desc = "Give somebody access to any session logfiles saved to the /log/runtime/ folder."
|
||||
set category = null
|
||||
|
||||
if( !src.holder || holder.rank != "Game Master" )
|
||||
if( !src.holder )
|
||||
src << "<font color='red'>Only Game Masters may use this command.</font>"
|
||||
return
|
||||
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
var/global/gimmick_hat = null
|
||||
|
||||
// irreversable, for now
|
||||
/client/proc/cmd_admin_christmas()
|
||||
set category = "Fun"
|
||||
set name = "Christmas Time"
|
||||
|
||||
if(!holder)
|
||||
src << "Only administrators may use this command."
|
||||
return
|
||||
|
||||
if(!gimmick_hat)
|
||||
log_admin("[usr.key] has started Christmas!")
|
||||
message_admins("<font color='blue'>[usr.key] has started Christmas!</font>")
|
||||
|
||||
// handle pre-existing hats
|
||||
gimmick_hat = "santahat"
|
||||
else
|
||||
log_admin("[usr.key] has stopped Christmas!")
|
||||
message_admins("<font color='blue'>[usr.key] has stopped Christmas!</font>")
|
||||
|
||||
// handle pre-existing hats
|
||||
gimmick_hat = null
|
||||
+146
-139
@@ -23,7 +23,7 @@ var/camera_range_display_status = 0
|
||||
var/intercom_range_display_status = 0
|
||||
|
||||
/obj/effect/debugging/camera_range
|
||||
icon = '480x480.dmi'
|
||||
icon = 'icons/480x480.dmi'
|
||||
icon_state = "25percent"
|
||||
|
||||
New()
|
||||
@@ -31,180 +31,187 @@ var/intercom_range_display_status = 0
|
||||
src.pixel_y = -224
|
||||
|
||||
/obj/effect/debugging/marker
|
||||
icon = 'areas.dmi'
|
||||
icon = 'icons/turf/areas.dmi'
|
||||
icon_state = "yellow"
|
||||
|
||||
/client/proc
|
||||
/obj/effect/debugging/marker/Move()
|
||||
return 0
|
||||
|
||||
do_not_use_these()
|
||||
set category = "Mapping"
|
||||
set name = "-None of these are for ingame use!!"
|
||||
/client/proc/do_not_use_these()
|
||||
set category = "Mapping"
|
||||
set name = "-None of these are for ingame use!!"
|
||||
|
||||
..()
|
||||
..()
|
||||
|
||||
camera_view()
|
||||
set category = "Mapping"
|
||||
set name = "Camera Range Display"
|
||||
/client/proc/camera_view()
|
||||
set category = "Mapping"
|
||||
set name = "Camera Range Display"
|
||||
|
||||
if(camera_range_display_status)
|
||||
camera_range_display_status = 0
|
||||
else
|
||||
camera_range_display_status = 1
|
||||
if(camera_range_display_status)
|
||||
camera_range_display_status = 0
|
||||
else
|
||||
camera_range_display_status = 1
|
||||
|
||||
|
||||
|
||||
for(var/obj/effect/debugging/camera_range/C in world)
|
||||
del(C)
|
||||
for(var/obj/effect/debugging/camera_range/C in world)
|
||||
del(C)
|
||||
|
||||
if(camera_range_display_status)
|
||||
for(var/obj/machinery/camera/C in world)
|
||||
new/obj/effect/debugging/camera_range(C.loc)
|
||||
//feedback_add_details("admin_verb","mCRD") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
if(camera_range_display_status)
|
||||
for(var/obj/machinery/camera/C in Cameras)
|
||||
new/obj/effect/debugging/camera_range(C.loc)
|
||||
feedback_add_details("admin_verb","mCRD") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
|
||||
|
||||
sec_camera_report()
|
||||
set category = "Mapping"
|
||||
set name = "Camera Report"
|
||||
/client/proc/sec_camera_report()
|
||||
set category = "Mapping"
|
||||
set name = "Camera Report"
|
||||
|
||||
if(!master_controller)
|
||||
alert(usr,"Master_controller not found.","Sec Camera Report")
|
||||
return 0
|
||||
if(!master_controller)
|
||||
alert(usr,"Master_controller not found.","Sec Camera Report")
|
||||
return 0
|
||||
|
||||
var/list/obj/machinery/camera/CL = list()
|
||||
var/list/obj/machinery/camera/CL = list()
|
||||
|
||||
for(var/obj/machinery/camera/C in world)
|
||||
CL += C
|
||||
for(var/obj/machinery/camera/C in Cameras)
|
||||
CL += C
|
||||
|
||||
var/output = {"<B>CAMERA ANNOMALITIES REPORT</B><HR>
|
||||
var/output = {"<B>CAMERA ANNOMALITIES REPORT</B><HR>
|
||||
<B>The following annomalities have been detected. The ones in red need immediate attention: Some of those in black may be intentional.</B><BR><ul>"}
|
||||
|
||||
for(var/obj/machinery/camera/C1 in CL)
|
||||
for(var/obj/machinery/camera/C2 in CL)
|
||||
if(C1 != C2)
|
||||
if(C1.c_tag == C2.c_tag)
|
||||
output += "<li><font color='red'>c_tag match for sec. cameras at \[[C1.x], [C1.y], [C1.z]\] ([C1.loc.loc]) and \[[C2.x], [C2.y], [C2.z]\] ([C2.loc.loc]) - c_tag is [C1.c_tag]</font></li>"
|
||||
if(C1.loc == C2.loc && C1.dir == C2.dir && C1.pixel_x == C2.pixel_x && C1.pixel_y == C2.pixel_y)
|
||||
output += "<li><font color='red'>FULLY overlapping sec. cameras at \[[C1.x], [C1.y], [C1.z]\] ([C1.loc.loc]) Networks: [C1.network] and [C2.network]</font></li>"
|
||||
if(C1.loc == C2.loc)
|
||||
output += "<li>overlapping sec. cameras at \[[C1.x], [C1.y], [C1.z]\] ([C1.loc.loc]) Networks: [C1.network] and [C2.network]</font></li>"
|
||||
var/turf/T = get_step(C1,turn(C1.dir,180))
|
||||
if(!T || !isturf(T) || !T.density )
|
||||
if(!(locate(/obj/structure/grille,T)))
|
||||
var/window_check = 0
|
||||
for(var/obj/structure/window/W in T)
|
||||
if (W.dir == turn(C1.dir,180) || W.dir in list(5,6,9,10) )
|
||||
window_check = 1
|
||||
break
|
||||
if(!window_check)
|
||||
output += "<li><font color='red'>Camera not connected to wall at \[[C1.x], [C1.y], [C1.z]\] ([C1.loc.loc]) Network: [C1.network]</color></li>"
|
||||
for(var/obj/machinery/camera/C1 in CL)
|
||||
for(var/obj/machinery/camera/C2 in CL)
|
||||
if(C1 != C2)
|
||||
if(C1.c_tag == C2.c_tag)
|
||||
output += "<li><font color='red'>c_tag match for sec. cameras at \[[C1.x], [C1.y], [C1.z]\] ([C1.loc.loc]) and \[[C2.x], [C2.y], [C2.z]\] ([C2.loc.loc]) - c_tag is [C1.c_tag]</font></li>"
|
||||
if(C1.loc == C2.loc && C1.dir == C2.dir && C1.pixel_x == C2.pixel_x && C1.pixel_y == C2.pixel_y)
|
||||
output += "<li><font color='red'>FULLY overlapping sec. cameras at \[[C1.x], [C1.y], [C1.z]\] ([C1.loc.loc]) Networks: [C1.network] and [C2.network]</font></li>"
|
||||
if(C1.loc == C2.loc)
|
||||
output += "<li>overlapping sec. cameras at \[[C1.x], [C1.y], [C1.z]\] ([C1.loc.loc]) Networks: [C1.network] and [C2.network]</font></li>"
|
||||
var/turf/T = get_step(C1,turn(C1.dir,180))
|
||||
if(!T || !isturf(T) || !T.density )
|
||||
if(!(locate(/obj/structure/grille,T)))
|
||||
var/window_check = 0
|
||||
for(var/obj/structure/window/W in T)
|
||||
if (W.dir == turn(C1.dir,180) || W.dir in list(5,6,9,10) )
|
||||
window_check = 1
|
||||
break
|
||||
if(!window_check)
|
||||
output += "<li><font color='red'>Camera not connected to wall at \[[C1.x], [C1.y], [C1.z]\] ([C1.loc.loc]) Network: [C1.network]</color></li>"
|
||||
|
||||
output += "</ul>"
|
||||
usr << browse(output,"window=airreport;size=1000x500")
|
||||
//feedback_add_details("admin_verb","mCRP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
output += "</ul>"
|
||||
usr << browse(output,"window=airreport;size=1000x500")
|
||||
feedback_add_details("admin_verb","mCRP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
intercom_view()
|
||||
set category = "Mapping"
|
||||
set name = "Intercom Range Display"
|
||||
/client/proc/intercom_view()
|
||||
set category = "Mapping"
|
||||
set name = "Intercom Range Display"
|
||||
|
||||
if(intercom_range_display_status)
|
||||
intercom_range_display_status = 0
|
||||
else
|
||||
intercom_range_display_status = 1
|
||||
if(intercom_range_display_status)
|
||||
intercom_range_display_status = 0
|
||||
else
|
||||
intercom_range_display_status = 1
|
||||
|
||||
for(var/obj/effect/debugging/marker/M in world)
|
||||
del(M)
|
||||
for(var/obj/effect/debugging/marker/M in world)
|
||||
del(M)
|
||||
|
||||
if(intercom_range_display_status)
|
||||
for(var/obj/item/device/radio/intercom/I in world)
|
||||
for(var/turf/T in orange(7,I))
|
||||
var/obj/effect/debugging/marker/F = new/obj/effect/debugging/marker(T)
|
||||
if (!(F in view(7,I.loc)))
|
||||
del(F)
|
||||
//feedback_add_details("admin_verb","mIRD") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
if(intercom_range_display_status)
|
||||
for(var/obj/item/device/radio/intercom/I in world)
|
||||
for(var/turf/T in orange(7,I))
|
||||
var/obj/effect/debugging/marker/F = new/obj/effect/debugging/marker(T)
|
||||
if (!(F in view(7,I.loc)))
|
||||
del(F)
|
||||
feedback_add_details("admin_verb","mIRD") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
enable_debug_verbs()
|
||||
set category = "Debug"
|
||||
set name = "Debug verbs"
|
||||
src.verbs += /client/proc/do_not_use_these //-errorage
|
||||
src.verbs += /client/proc/camera_view //-errorage
|
||||
src.verbs += /client/proc/sec_camera_report //-errorage
|
||||
src.verbs += /client/proc/intercom_view //-errorage
|
||||
//src.verbs += /client/proc/air_status //Air things
|
||||
src.verbs += /client/proc/Cell //More air things
|
||||
src.verbs += /client/proc/atmosscan //check plumbing
|
||||
src.verbs += /client/proc/powerdebug //check power
|
||||
src.verbs += /client/proc/count_objects_on_z_level
|
||||
src.verbs += /client/proc/count_objects_all
|
||||
src.verbs += /client/proc/cmd_assume_direct_control //-errorage
|
||||
//src.verbs += /client/proc/jump_to_dead_group
|
||||
src.verbs += /client/proc/startSinglo
|
||||
src.verbs += /client/proc/ticklag //allows you to set the ticklag.
|
||||
src.verbs += /client/proc/cmd_admin_grantfullaccess
|
||||
//src.verbs += /client/proc/cmd_admin_rejuvenate
|
||||
/client/proc/enable_debug_verbs()
|
||||
set category = "Debug"
|
||||
set name = "Debug verbs"
|
||||
src.verbs += /client/proc/do_not_use_these //-errorage
|
||||
src.verbs += /client/proc/camera_view //-errorage
|
||||
src.verbs += /client/proc/sec_camera_report //-errorage
|
||||
src.verbs += /client/proc/intercom_view //-errorage
|
||||
src.verbs += /client/proc/air_status //Air things
|
||||
src.verbs += /client/proc/Cell //More air things
|
||||
src.verbs += /client/proc/atmosscan //check plumbing
|
||||
src.verbs += /client/proc/powerdebug //check power
|
||||
src.verbs += /client/proc/count_objects_on_z_level
|
||||
src.verbs += /client/proc/count_objects_all
|
||||
src.verbs += /client/proc/cmd_assume_direct_control //-errorage
|
||||
src.verbs += /client/proc/jump_to_dead_group
|
||||
src.verbs += /client/proc/startSinglo
|
||||
src.verbs += /client/proc/ticklag //allows you to set the ticklag.
|
||||
src.verbs += /client/proc/cmd_admin_grantfullaccess
|
||||
//src.verbs += /client/proc/cmd_admin_rejuvenate
|
||||
|
||||
//feedback_add_details("admin_verb","mDV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
feedback_add_details("admin_verb","mDV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
count_objects_on_z_level()
|
||||
set category = "Mapping"
|
||||
set name = "Count Objects On Level"
|
||||
var/level = input("Which z-level?","Level?") as text
|
||||
if(!level) return
|
||||
var/num_level = text2num(level)
|
||||
if(!num_level) return
|
||||
if(!isnum(num_level)) return
|
||||
/client/proc/count_objects_on_z_level()
|
||||
set category = "Mapping"
|
||||
set name = "Count Objects On Level"
|
||||
var/level = input("Which z-level?","Level?") as text
|
||||
if(!level) return
|
||||
var/num_level = text2num(level)
|
||||
if(!num_level) return
|
||||
if(!isnum(num_level)) return
|
||||
|
||||
var/type_text = input("Which type path?","Path?") as text
|
||||
if(!type_text) return
|
||||
var/type_path = text2path(type_text)
|
||||
if(!type_path) return
|
||||
var/type_text = input("Which type path?","Path?") as text
|
||||
if(!type_text) return
|
||||
var/type_path = text2path(type_text)
|
||||
if(!type_path) return
|
||||
|
||||
var/count = 0
|
||||
var/count = 0
|
||||
|
||||
var/list/atom/atom_list = list()
|
||||
var/list/atom/atom_list = list()
|
||||
|
||||
for(var/atom/A in world)
|
||||
if(istype(A,type_path))
|
||||
var/turf/B = get_turf(A)
|
||||
if(istype(B) && B.z == num_level)
|
||||
for(var/atom/A in world)
|
||||
if(istype(A,type_path))
|
||||
var/atom/B = A
|
||||
while(!(isturf(B.loc)))
|
||||
if(B && B.loc)
|
||||
B = B.loc
|
||||
else
|
||||
break
|
||||
if(B)
|
||||
if(B.z == num_level)
|
||||
count++
|
||||
atom_list += A
|
||||
/*
|
||||
var/atom/temp_atom
|
||||
for(var/i = 0; i <= (atom_list.len/10); i++)
|
||||
var/line = ""
|
||||
for(var/j = 1; j <= 10; j++)
|
||||
if(i*10+j <= atom_list.len)
|
||||
temp_atom = atom_list[i*10+j]
|
||||
line += " no.[i+10+j]@\[[temp_atom.x], [temp_atom.y], [temp_atom.z]\]; "
|
||||
world << line*/
|
||||
/*
|
||||
var/atom/temp_atom
|
||||
for(var/i = 0; i <= (atom_list.len/10); i++)
|
||||
var/line = ""
|
||||
for(var/j = 1; j <= 10; j++)
|
||||
if(i*10+j <= atom_list.len)
|
||||
temp_atom = atom_list[i*10+j]
|
||||
line += " no.[i+10+j]@\[[temp_atom.x], [temp_atom.y], [temp_atom.z]\]; "
|
||||
world << line*/
|
||||
|
||||
world << "There are [count] objects of type [type_path] on z-level [num_level]"
|
||||
//feedback_add_details("admin_verb","mOBJZ") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
world << "There are [count] objects of type [type_path] on z-level [num_level]"
|
||||
feedback_add_details("admin_verb","mOBJZ") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
count_objects_all()
|
||||
set category = "Mapping"
|
||||
set name = "Count Objects All"
|
||||
/client/proc/count_objects_all()
|
||||
set category = "Mapping"
|
||||
set name = "Count Objects All"
|
||||
|
||||
var/type_text = input("Which type path?","") as text
|
||||
if(!type_text) return
|
||||
var/type_path = text2path(type_text)
|
||||
if(!type_path) return
|
||||
var/type_text = input("Which type path?","") as text
|
||||
if(!type_text) return
|
||||
var/type_path = text2path(type_text)
|
||||
if(!type_path) return
|
||||
|
||||
var/count = 0
|
||||
var/count = 0
|
||||
|
||||
for(var/atom/A in world)
|
||||
if(istype(A,type_path))
|
||||
count++
|
||||
/*
|
||||
var/atom/temp_atom
|
||||
for(var/i = 0; i <= (atom_list.len/10); i++)
|
||||
var/line = ""
|
||||
for(var/j = 1; j <= 10; j++)
|
||||
if(i*10+j <= atom_list.len)
|
||||
temp_atom = atom_list[i*10+j]
|
||||
line += " no.[i+10+j]@\[[temp_atom.x], [temp_atom.y], [temp_atom.z]\]; "
|
||||
world << line*/
|
||||
for(var/atom/A in world)
|
||||
if(istype(A,type_path))
|
||||
count++
|
||||
/*
|
||||
var/atom/temp_atom
|
||||
for(var/i = 0; i <= (atom_list.len/10); i++)
|
||||
var/line = ""
|
||||
for(var/j = 1; j <= 10; j++)
|
||||
if(i*10+j <= atom_list.len)
|
||||
temp_atom = atom_list[i*10+j]
|
||||
line += " no.[i+10+j]@\[[temp_atom.x], [temp_atom.y], [temp_atom.z]\]; "
|
||||
world << line*/
|
||||
|
||||
world << "There are [count] objects of type [type_path] in the game world"
|
||||
//feedback_add_details("admin_verb","mOBJ") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
world << "There are [count] objects of type [type_path] in the game world"
|
||||
feedback_add_details("admin_verb","mOBJ") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
@@ -18,7 +18,7 @@
|
||||
return
|
||||
|
||||
src.massmodify_variables(A, var_name, method)
|
||||
//feedback_add_details("admin_verb","MEV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
feedback_add_details("admin_verb","MEV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
|
||||
/client/proc/massmodify_variables(var/atom/O, var/var_name = "", var/method = 0)
|
||||
@@ -138,7 +138,7 @@
|
||||
O.vars[variable] = initial(O.vars[variable])
|
||||
if(method)
|
||||
if(istype(O, /mob))
|
||||
for(var/mob/M in world)
|
||||
for(var/mob/M in mob_list)
|
||||
if ( istype(M , O.type) )
|
||||
M.vars[variable] = O.vars[variable]
|
||||
|
||||
@@ -154,7 +154,7 @@
|
||||
|
||||
else
|
||||
if(istype(O, /mob))
|
||||
for(var/mob/M in world)
|
||||
for(var/mob/M in mob_list)
|
||||
if (M.type == O.type)
|
||||
M.vars[variable] = O.vars[variable]
|
||||
|
||||
@@ -178,7 +178,7 @@
|
||||
|
||||
if(method)
|
||||
if(istype(O, /mob))
|
||||
for(var/mob/M in world)
|
||||
for(var/mob/M in mob_list)
|
||||
if ( istype(M , O.type) )
|
||||
M.vars[variable] = O.vars[variable]
|
||||
|
||||
@@ -193,7 +193,7 @@
|
||||
A.vars[variable] = O.vars[variable]
|
||||
else
|
||||
if(istype(O, /mob))
|
||||
for(var/mob/M in world)
|
||||
for(var/mob/M in mob_list)
|
||||
if (M.type == O.type)
|
||||
M.vars[variable] = O.vars[variable]
|
||||
|
||||
@@ -213,16 +213,16 @@
|
||||
if(new_value == null) return
|
||||
|
||||
if(variable=="luminosity")
|
||||
O.ul_SetLuminosity(new_value)
|
||||
O.sd_SetLuminosity(new_value)
|
||||
else
|
||||
O.vars[variable] = new_value
|
||||
|
||||
if(method)
|
||||
if(istype(O, /mob))
|
||||
for(var/mob/M in world)
|
||||
for(var/mob/M in mob_list)
|
||||
if ( istype(M , O.type) )
|
||||
if(variable=="luminosity")
|
||||
M.ul_SetLuminosity(new_value)
|
||||
M.sd_SetLuminosity(new_value)
|
||||
else
|
||||
M.vars[variable] = O.vars[variable]
|
||||
|
||||
@@ -230,7 +230,7 @@
|
||||
for(var/obj/A in world)
|
||||
if ( istype(A , O.type) )
|
||||
if(variable=="luminosity")
|
||||
A.ul_SetLuminosity(new_value)
|
||||
A.sd_SetLuminosity(new_value)
|
||||
else
|
||||
A.vars[variable] = O.vars[variable]
|
||||
|
||||
@@ -238,16 +238,16 @@
|
||||
for(var/turf/A in world)
|
||||
if ( istype(A , O.type) )
|
||||
if(variable=="luminosity")
|
||||
A.ul_SetLuminosity(new_value)
|
||||
A.sd_SetLuminosity(new_value)
|
||||
else
|
||||
A.vars[variable] = O.vars[variable]
|
||||
|
||||
else
|
||||
if(istype(O, /mob))
|
||||
for(var/mob/M in world)
|
||||
for(var/mob/M in mob_list)
|
||||
if (M.type == O.type)
|
||||
if(variable=="luminosity")
|
||||
M.ul_SetLuminosity(new_value)
|
||||
M.sd_SetLuminosity(new_value)
|
||||
else
|
||||
M.vars[variable] = O.vars[variable]
|
||||
|
||||
@@ -255,7 +255,7 @@
|
||||
for(var/obj/A in world)
|
||||
if (A.type == O.type)
|
||||
if(variable=="luminosity")
|
||||
A.ul_SetLuminosity(new_value)
|
||||
A.sd_SetLuminosity(new_value)
|
||||
else
|
||||
A.vars[variable] = O.vars[variable]
|
||||
|
||||
@@ -263,7 +263,7 @@
|
||||
for(var/turf/A in world)
|
||||
if (A.type == O.type)
|
||||
if(variable=="luminosity")
|
||||
A.ul_SetLuminosity(new_value)
|
||||
A.sd_SetLuminosity(new_value)
|
||||
else
|
||||
A.vars[variable] = O.vars[variable]
|
||||
|
||||
@@ -274,7 +274,7 @@
|
||||
O.vars[variable] = new_value
|
||||
if(method)
|
||||
if(istype(O, /mob))
|
||||
for(var/mob/M in world)
|
||||
for(var/mob/M in mob_list)
|
||||
if ( istype(M , O.type) )
|
||||
M.vars[variable] = O.vars[variable]
|
||||
|
||||
@@ -289,7 +289,7 @@
|
||||
A.vars[variable] = O.vars[variable]
|
||||
else
|
||||
if(istype(O, /mob))
|
||||
for(var/mob/M in world)
|
||||
for(var/mob/M in mob_list)
|
||||
if (M.type == O.type)
|
||||
M.vars[variable] = O.vars[variable]
|
||||
|
||||
@@ -310,7 +310,7 @@
|
||||
|
||||
if(method)
|
||||
if(istype(O, /mob))
|
||||
for(var/mob/M in world)
|
||||
for(var/mob/M in mob_list)
|
||||
if ( istype(M , O.type) )
|
||||
M.vars[variable] = O.vars[variable]
|
||||
|
||||
@@ -325,7 +325,7 @@
|
||||
A.vars[variable] = O.vars[variable]
|
||||
else
|
||||
if(istype(O, /mob))
|
||||
for(var/mob/M in world)
|
||||
for(var/mob/M in mob_list)
|
||||
if (M.type == O.type)
|
||||
M.vars[variable] = O.vars[variable]
|
||||
|
||||
@@ -345,7 +345,7 @@
|
||||
O.vars[variable] = new_value
|
||||
if(method)
|
||||
if(istype(O, /mob))
|
||||
for(var/mob/M in world)
|
||||
for(var/mob/M in mob_list)
|
||||
if ( istype(M , O.type) )
|
||||
M.vars[variable] = O.vars[variable]
|
||||
|
||||
@@ -361,7 +361,7 @@
|
||||
|
||||
else
|
||||
if(istype(O, /mob))
|
||||
for(var/mob/M in world)
|
||||
for(var/mob/M in mob_list)
|
||||
if (M.type == O.type)
|
||||
M.vars[variable] = O.vars[variable]
|
||||
|
||||
|
||||
@@ -9,18 +9,7 @@ var/list/forbidden_varedit_object_types = list(
|
||||
set name = "Edit Variables"
|
||||
set desc="(target) Edit a target item's variables"
|
||||
src.modify_variables(O)
|
||||
//feedback_add_details("admin_verb","EDITV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/cmd_modify_ref_variables(var/target as text)
|
||||
set category = "Debug"
|
||||
set name = "Edit Variables (Reference)"
|
||||
set desc="(target) Edit a target item's variables"
|
||||
var/obj/I = locate(target)
|
||||
if(!I)
|
||||
usr << "ERROR: Object could not be located!"
|
||||
return
|
||||
src.modify_variables(I)
|
||||
//feedback_add_details("admin_verb","EDITV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
feedback_add_details("admin_verb","EDITV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/cmd_modify_ticker_variables()
|
||||
set category = "Debug"
|
||||
@@ -30,7 +19,7 @@ var/list/forbidden_varedit_object_types = list(
|
||||
src << "Game hasn't started yet."
|
||||
else
|
||||
src.modify_variables(ticker)
|
||||
// feedback_add_details("admin_verb","ETV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
feedback_add_details("admin_verb","ETV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/mod_list_add_ass() //haha
|
||||
|
||||
@@ -62,24 +51,10 @@ var/list/forbidden_varedit_object_types = list(
|
||||
var_value = input("Enter type:","Type") as null|anything in typesof(/obj,/mob,/area,/turf)
|
||||
|
||||
if("reference")
|
||||
switch(alert("Would you like to enter a specific object, or search for it from the world?","Choose!","Specifc UID (Hexadecimal number)", "Search"))
|
||||
if("Specifc UID (Hexadecimal number)")
|
||||
var/UID = input("Type in UID, without the leading 0x","Type in UID") as text|null
|
||||
if(!UID) return
|
||||
var/temp_variable = locate("\[0x[UID]\]")
|
||||
if(!temp_variable)
|
||||
usr << "ERROR. Could not locate referenced object."
|
||||
return
|
||||
switch(alert("You have chosen [temp_variable], in [get_area(temp_variable)]. Are you sure?","You sure?","Yes","NONOCANCEL!"))
|
||||
if("Yes")
|
||||
var_value = temp_variable
|
||||
if("NONOCANCEL!")
|
||||
return
|
||||
if("Search")
|
||||
var_value = input("Select reference:","Reference") as null|mob|obj|turf|area in world
|
||||
var_value = input("Select reference:","Reference") as null|mob|obj|turf|area in world
|
||||
|
||||
if("mob reference")
|
||||
var_value = input("Select reference:","Reference") as null|mob in get_sorted_mobs()
|
||||
var_value = input("Select reference:","Reference") as null|mob in world
|
||||
|
||||
if("file")
|
||||
var_value = input("Pick file:","File") as null|file
|
||||
@@ -116,39 +91,25 @@ var/list/forbidden_varedit_object_types = list(
|
||||
switch(class)
|
||||
|
||||
if("text")
|
||||
var_value = input("Enter new text:","Text") as null|text
|
||||
var_value = input("Enter new text:","Text") as text
|
||||
|
||||
if("num")
|
||||
var_value = input("Enter new number:","Num") as null|num
|
||||
var_value = input("Enter new number:","Num") as num
|
||||
|
||||
if("type")
|
||||
var_value = input("Enter type:","Type") in typesof(/obj,/mob,/area,/turf)
|
||||
|
||||
if("reference")
|
||||
switch(alert("Would you like to enter a specific object, or search for it from the world?","Choose!","Specifc UID (Hexadecimal number)", "Search"))
|
||||
if("Specifc UID (Hexadecimal number)")
|
||||
var/UID = input("Type in UID, without the leading 0x","Type in UID") as text|null
|
||||
if(!UID) return
|
||||
var/temp_variable = locate("\[0x[UID]\]")
|
||||
if(!temp_variable)
|
||||
usr << "ERROR. Could not locate referenced object."
|
||||
return
|
||||
switch(alert("You have chosen [temp_variable], in [get_area(temp_variable)]. Are you sure?","You sure?","Yes","NONOCANCEL!"))
|
||||
if("Yes")
|
||||
var_value = temp_variable
|
||||
if("NONOCANCEL!")
|
||||
return
|
||||
if("Search")
|
||||
var_value = input("Select reference:","Reference") as null|mob|obj|turf|area in world
|
||||
var_value = input("Select reference:","Reference") as mob|obj|turf|area in world
|
||||
|
||||
if("mob reference")
|
||||
var_value = input("Select reference:","Reference") as null|mob in get_sorted_mobs()
|
||||
var_value = input("Select reference:","Reference") as mob in world
|
||||
|
||||
if("file")
|
||||
var_value = input("Pick file:","File") as null|file
|
||||
var_value = input("Pick file:","File") as file
|
||||
|
||||
if("icon")
|
||||
var_value = input("Pick icon:","Icon") as null|icon
|
||||
var_value = input("Pick icon:","Icon") as icon
|
||||
|
||||
if("marked datum")
|
||||
var_value = holder.marked_datum
|
||||
@@ -166,7 +127,6 @@ var/list/forbidden_varedit_object_types = list(
|
||||
if(!istype(L,/list)) src << "Not a List."
|
||||
|
||||
var/list/locked = list("vars", "key", "ckey", "client", "firemut", "ishulk", "telekinesis", "xray", "virus", "viruses", "cuffed", "ka", "last_eaten", "urine", "poo", "icon", "icon_state")
|
||||
|
||||
var/list/names = sortList(L)
|
||||
|
||||
var/variable = input("Which var?","Var") as null|anything in names + "(ADD VAR)"
|
||||
@@ -178,11 +138,6 @@ var/list/forbidden_varedit_object_types = list(
|
||||
if(!variable)
|
||||
return
|
||||
|
||||
var/associative
|
||||
if(istext(variable) && !isnull(L[variable]))
|
||||
associative = variable
|
||||
variable = L[variable]
|
||||
|
||||
var/default
|
||||
|
||||
var/dir
|
||||
@@ -255,10 +210,10 @@ var/list/forbidden_varedit_object_types = list(
|
||||
var/class = "text"
|
||||
if(src.holder && src.holder.marked_datum)
|
||||
class = input("What kind of variable?","Variable Type",default) as null|anything in list("text",
|
||||
"num","type","reference","mob reference", "icon","file","list","edit referenced object","restore to default","marked datum ([holder.marked_datum.type])")
|
||||
"num","type","reference","mob reference", "icon","file","list","edit referenced object","restore to default","marked datum ([holder.marked_datum.type])", "DELETE FROM LIST")
|
||||
else
|
||||
class = input("What kind of variable?","Variable Type",default) as null|anything in list("text",
|
||||
"num","type","reference","mob reference", "icon","file","list","edit referenced object","restore to default")
|
||||
"num","type","reference","mob reference", "icon","file","list","edit referenced object","restore to default", "DELETE FROM LIST")
|
||||
|
||||
if(!class)
|
||||
return
|
||||
@@ -266,76 +221,48 @@ var/list/forbidden_varedit_object_types = list(
|
||||
if(holder.marked_datum && class == "marked datum ([holder.marked_datum.type])")
|
||||
class = "marked datum"
|
||||
|
||||
switch(class)
|
||||
switch(class) //Spits a runtime error if you try to modify an entry in the contents list. Dunno how to fix it, yet.
|
||||
|
||||
if("list")
|
||||
mod_list(variable)
|
||||
|
||||
if("restore to default")
|
||||
if(associative)
|
||||
L[associative] = initial(L[associative])
|
||||
else
|
||||
variable = initial(variable)
|
||||
L[L.Find(variable)]=initial(variable)
|
||||
|
||||
if("edit referenced object")
|
||||
modify_variables(variable)
|
||||
|
||||
if("(DELETE FROM LIST)")
|
||||
if(associative)
|
||||
L.Remove(associative)
|
||||
return
|
||||
L.Remove(variable)
|
||||
if("DELETE FROM LIST")
|
||||
L -= variable
|
||||
return
|
||||
|
||||
if("text")
|
||||
variable = input("Enter new text:","Text",\
|
||||
variable) as null|text
|
||||
L[L.Find(variable)] = input("Enter new text:","Text") as text
|
||||
|
||||
if("num")
|
||||
variable = input("Enter new number:","Num",\
|
||||
variable) as null|num
|
||||
L[L.Find(variable)] = input("Enter new number:","Num") as num
|
||||
|
||||
if("type")
|
||||
variable = input("Enter type:","Type",variable) \
|
||||
in typesof(/obj,/mob,/area,/turf)
|
||||
L[L.Find(variable)] = input("Enter type:","Type") in typesof(/obj,/mob,/area,/turf)
|
||||
|
||||
if("reference")
|
||||
switch(alert("Would you like to enter a specific object, or search for it from the world?","Choose!","Specifc UID (Hexadecimal number)", "Search"))
|
||||
if("Specifc UID (Hexadecimal number)")
|
||||
var/UID = input("Type in UID, without the leading 0x","Type in UID") as null|text
|
||||
if(!UID) return
|
||||
var/temp_variable = locate("\[0x[UID]\]")
|
||||
if(!temp_variable)
|
||||
usr << "ERROR. Could not locate referenced object."
|
||||
return
|
||||
switch(alert("You have chosen [temp_variable], in [get_area(temp_variable)]. Are you sure?","You sure?","Yes","NONOCANCEL!"))
|
||||
if("Yes")
|
||||
variable = temp_variable
|
||||
if("NONOCANCEL!")
|
||||
return
|
||||
if("Search")
|
||||
variable = input("Select reference:","Reference") as null|mob|obj|turf|area in world
|
||||
L[L.Find(variable)] = input("Select reference:","Reference") as mob|obj|turf|area in world
|
||||
|
||||
if("mob reference")
|
||||
variable = input("Select reference:","Reference",\
|
||||
variable) as null|mob in get_sorted_mobs()
|
||||
L[L.Find(variable)] = input("Select reference:","Reference") as mob in world
|
||||
|
||||
if("file")
|
||||
variable = input("Pick file:","File",variable) \
|
||||
as null|file
|
||||
L[L.Find(variable)] = input("Pick file:","File") as file
|
||||
|
||||
if("icon")
|
||||
variable = input("Pick icon:","Icon",variable) \
|
||||
as null|icon
|
||||
L[L.Find(variable)] = input("Pick icon:","Icon") as icon
|
||||
|
||||
if("marked datum")
|
||||
variable = holder.marked_datum
|
||||
L[L.Find(variable)] = holder.marked_datum
|
||||
|
||||
if(associative)
|
||||
L[associative] = variable
|
||||
|
||||
/client/proc/modify_variables(var/atom/O, var/param_var_name = null, var/autodetect_class = 0)
|
||||
var/list/locked = list("vars", "key", "ckey", "client", "firemut", "ishulk", "telekinesis", "xray", "virus", "cuffed", "ka", "last_eaten", "urine", "poo", "icon", "icon_state")
|
||||
var/list/locked = list("vars", "key", "ckey", "client", "firemut", "ishulk", "telekinesis", "xray", "virus", "cuffed", "ka", "last_eaten", "icon", "icon_state", "mutantrace")
|
||||
|
||||
if(!src.holder)
|
||||
src << "Only administrators may use this command."
|
||||
@@ -531,7 +458,17 @@ var/list/forbidden_varedit_object_types = list(
|
||||
if(variable=="luminosity")
|
||||
var/var_new = input("Enter new number:","Num",O.vars[variable]) as null|num
|
||||
if(var_new == null) return
|
||||
O.ul_SetLuminosity(var_new)
|
||||
O.sd_SetLuminosity(var_new)
|
||||
else if(variable=="stat")
|
||||
var/var_new = input("Enter new number:","Num",O.vars[variable]) as null|num
|
||||
if(var_new == null) return
|
||||
if((O.vars[variable] == 2) && (var_new < 2))//Bringing the dead back to life
|
||||
dead_mob_list -= O
|
||||
living_mob_list += O
|
||||
if((O.vars[variable] < 2) && (var_new == 2))//Kill he
|
||||
living_mob_list -= O
|
||||
dead_mob_list += O
|
||||
O.vars[variable] = var_new
|
||||
else
|
||||
var/var_new = input("Enter new number:","Num",O.vars[variable]) as null|num
|
||||
if(var_new==null) return
|
||||
@@ -543,27 +480,12 @@ var/list/forbidden_varedit_object_types = list(
|
||||
O.vars[variable] = var_new
|
||||
|
||||
if("reference")
|
||||
var/var_new
|
||||
switch(alert("Would you like to enter a specific object, or search for it from the world?","Choose!","Specifc UID (Hexadecimal number)", "Search"))
|
||||
if("Specifc UID (Hexadecimal number)")
|
||||
var/UID = input("Type in UID, without the leading 0x","Type in UID") as text|null
|
||||
if(!UID) return
|
||||
var/temp_variable = locate("\[0x[UID]\]")
|
||||
if(!temp_variable)
|
||||
usr << "ERROR. Could not locate referenced object."
|
||||
return
|
||||
switch(alert("You have chosen [temp_variable], in [get_area(temp_variable)]. Are you sure?","You sure?","Yes","NONOCANCEL!"))
|
||||
if("Yes")
|
||||
var_new = temp_variable
|
||||
if("NONOCANCEL!")
|
||||
return
|
||||
if("Search")
|
||||
var_new = input("Select reference:","Reference") as null|mob|obj|turf|area in world
|
||||
var/var_new = input("Select reference:","Reference",O.vars[variable]) as null|mob|obj|turf|area in world
|
||||
if(var_new==null) return
|
||||
O.vars[variable] = var_new
|
||||
|
||||
if("mob reference")
|
||||
var/var_new = input("Select reference:","Reference",O.vars[variable]) as null|mob in get_sorted_mobs()
|
||||
var/var_new = input("Select reference:","Reference",O.vars[variable]) as null|mob in world
|
||||
if(var_new==null) return
|
||||
O.vars[variable] = var_new
|
||||
|
||||
@@ -580,6 +502,7 @@ var/list/forbidden_varedit_object_types = list(
|
||||
if("marked datum")
|
||||
O.vars[variable] = holder.marked_datum
|
||||
|
||||
world.log << "### VarEdit by [src]: [O.type] [variable]=[html_encode("[O.vars[variable]]")]"
|
||||
log_admin("[key_name(src)] modified [original_name]'s [variable] to [O.vars[variable]]")
|
||||
message_admins("[key_name_admin(src)] modified [original_name]'s [variable] to [O.vars[variable]]", 1)
|
||||
|
||||
|
||||
@@ -8,16 +8,17 @@
|
||||
if(alert("BEGIN THE TOURNAMENT?",,"Yes","No")=="No")
|
||||
return
|
||||
|
||||
//feedback_add_details("admin_verb","TCBOO") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
for(var/mob/living/carbon/human/H in world)
|
||||
feedback_add_details("admin_verb","TCBOO") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
for(var/mob/living/carbon/human/H in player_list)
|
||||
if(H.stat == 2 || !(H.client)) continue
|
||||
if(is_special_character(H)) continue
|
||||
|
||||
ticker.mode.traitors += H.mind
|
||||
H.mind.special_role = "traitor"
|
||||
|
||||
var/datum/objective/steal/nuke_disk/steal_objective = new
|
||||
var/datum/objective/steal/steal_objective = new
|
||||
steal_objective.owner = H.mind
|
||||
steal_objective.set_target("nuclear authentication disk")
|
||||
H.mind.objectives += steal_objective
|
||||
|
||||
var/datum/objective/hijack/hijack_objective = new
|
||||
@@ -35,12 +36,12 @@
|
||||
continue
|
||||
del(I)
|
||||
|
||||
H.equip_if_possible(new /obj/item/clothing/under/kilt(H), H.slot_w_uniform)
|
||||
H.equip_if_possible(new /obj/item/device/radio/headset/heads/captain(H), H.slot_ears)
|
||||
H.equip_if_possible(new /obj/item/clothing/head/beret(H), H.slot_head)
|
||||
H.equip_if_possible(new /obj/item/weapon/claymore(H), H.slot_l_hand)
|
||||
H.equip_if_possible(new /obj/item/clothing/shoes/combat(H), H.slot_shoes)
|
||||
H.equip_if_possible(new /obj/item/weapon/pinpointer(H.loc), H.slot_l_store)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/kilt(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/captain(H), slot_ears)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/head/beret(H), slot_head)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/claymore(H), slot_l_hand)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/pinpointer(H.loc), slot_l_store)
|
||||
|
||||
var/obj/item/weapon/card/id/W = new(H)
|
||||
W.name = "[H.real_name]'s ID Card"
|
||||
@@ -49,7 +50,7 @@
|
||||
W.access += get_all_centcom_access()
|
||||
W.assignment = "Highlander"
|
||||
W.registered_name = H.real_name
|
||||
H.equip_if_possible(W, H.slot_wear_id)
|
||||
H.equip_to_slot_or_del(W, slot_wear_id)
|
||||
|
||||
message_admins("\blue [key_name_admin(usr)] used THERE CAN BE ONLY ONE!", 1)
|
||||
log_admin("[key_name(usr)] used there can be only one.")
|
||||
@@ -2,7 +2,6 @@
|
||||
set category = "Fun"
|
||||
set name = "Play Global Sound"
|
||||
|
||||
//if(Debug2)
|
||||
if(!src.holder)
|
||||
src << "Only administrators may use this command."
|
||||
return
|
||||
@@ -15,23 +14,21 @@
|
||||
if(src.holder.rank == "Game Master" || src.holder.rank == "Game Admin" || src.holder.rank == "Badmin")
|
||||
log_admin("[key_name(src)] played sound [S]")
|
||||
message_admins("[key_name_admin(src)] played sound [S]", 1)
|
||||
for(var/mob/M in world)
|
||||
if(M.client)
|
||||
if(M.client.midis)
|
||||
M << uploaded_sound
|
||||
for(var/mob/M in player_list)
|
||||
if(M.client.midis)
|
||||
M << uploaded_sound
|
||||
else
|
||||
if(usr.client.canplaysound)
|
||||
usr.client.canplaysound = 0
|
||||
log_admin("[key_name(src)] played sound [S]")
|
||||
message_admins("[key_name_admin(src)] played sound [S]", 1)
|
||||
for(var/mob/M in world)
|
||||
if(M.client)
|
||||
if(M.client.midis)
|
||||
M << uploaded_sound
|
||||
for(var/mob/M in player_list)
|
||||
if(M.client.midis)
|
||||
M << uploaded_sound
|
||||
else
|
||||
usr << "You already used up your jukebox monies this round!"
|
||||
del(uploaded_sound)
|
||||
//feedback_add_details("admin_verb","PGS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
feedback_add_details("admin_verb","PGS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
|
||||
/client/proc/play_local_sound(S as sound)
|
||||
@@ -45,9 +42,9 @@
|
||||
if(src.holder.rank == "Game Master" || src.holder.rank == "Game Admin")
|
||||
log_admin("[key_name(src)] played a local sound [S]")
|
||||
message_admins("[key_name_admin(src)] played a local sound [S]", 1)
|
||||
playsound(get_turf(src.mob), S, 50, 0, 0)
|
||||
playsound(get_turf_loc(src.mob), S, 50, 0, 0)
|
||||
return
|
||||
//feedback_add_details("admin_verb","PLS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
feedback_add_details("admin_verb","PLS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
|
||||
/*
|
||||
|
||||
@@ -34,14 +34,17 @@
|
||||
if(usr.control_object && usr.name_archive) //if you have a name archived and if you are actually relassing an object
|
||||
usr.real_name = usr.name_archive
|
||||
usr.name = usr.real_name
|
||||
usr.update_clothing() //So the name is updated properly
|
||||
if(ishuman(usr))
|
||||
var/mob/living/carbon/human/H = usr
|
||||
H.name = H.get_visible_name()
|
||||
// usr.regenerate_icons() //So the name is updated properly
|
||||
|
||||
usr.loc = O.loc // Appear where the object you were controlling is -- TLE
|
||||
usr.client.eye = usr
|
||||
usr.control_object = null
|
||||
feedback_add_details("admin_verb","RO") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/proc/givetestverbs(mob/M as mob in world)
|
||||
/proc/givetestverbs(mob/M as mob in mob_list)
|
||||
set desc = "Give this guy possess/release verbs"
|
||||
set category = "Debug"
|
||||
set name = "Give Possessing Verbs"
|
||||
|
||||
@@ -7,17 +7,21 @@
|
||||
if (!msg)
|
||||
return
|
||||
|
||||
if (usr.client && (usr.client.muted || usr.client.muted_complete))
|
||||
return
|
||||
if (usr.client)
|
||||
if(usr.client.muted_pray)
|
||||
return
|
||||
|
||||
var/icon/cross = icon('storage.dmi',"bible")
|
||||
if (src.client.handle_spam_prevention(msg,MUTE_PRAY))
|
||||
return
|
||||
|
||||
for (var/mob/M in world)
|
||||
if (M.client && M.client.holder && M.client.seeprayers)
|
||||
M << "\blue \icon[cross] <b><font color=purple>PRAY: </font>[key_name(src, M)] (<A HREF='?src=\ref[M.client.holder];adminplayeropts=\ref[src]'>PP</A>) (<A HREF='?src=\ref[M.client.holder];adminplayervars=\ref[src]'>VV</A>) (<A HREF='?src=\ref[M.client.holder];adminplayersubtlemessage=\ref[src]'>SM</A>) (<A HREF='?src=\ref[M.client.holder];adminplayerobservejump=\ref[src]'>JMP</A>) (<A HREF='?src=\ref[M.client.holder];secretsadmin=check_antagonist'>CA</A>) (<A HREF='?src=\ref[M.client.holder];adminspawncookie=\ref[src]'>SC</a>):</b> [msg]"
|
||||
var/icon/cross = icon('icons/obj/storage.dmi',"bible")
|
||||
|
||||
for (var/client/C in admin_list)
|
||||
if (C.seeprayers)
|
||||
C << "\blue \icon[cross] <b><font color=purple>PRAY: </font>[key_name(src, C)] (<A HREF='?src=\ref[C.holder];adminmoreinfo=\ref[src]'>?</A>) (<A HREF='?src=\ref[C.holder];adminplayeropts=\ref[src]'>PP</A>) (<A HREF='?src=\ref[C.holder];adminplayervars=\ref[src]'>VV</A>) (<A HREF='?src=\ref[C.holder];adminplayersubtlemessage=\ref[src]'>SM</A>) (<A HREF='?src=\ref[C.holder];adminplayerobservejump=\ref[src]'>JMP</A>) (<A HREF='?src=\ref[C.holder];secretsadmin=check_antagonist'>CA</A>) (<A HREF='?src=\ref[C.holder];adminspawncookie=\ref[src]'>SC</a>):</b> [msg]"
|
||||
|
||||
usr << "Your prayers have been received by the gods."
|
||||
//feedback_add_details("admin_verb","PR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
feedback_add_details("admin_verb","PR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
//log_admin("HELP: [key_name(src)]: [msg]")
|
||||
|
||||
|
||||
@@ -27,9 +31,8 @@
|
||||
|
||||
// log_admin("[key_name(Sender)] sent a message to Centcomm! The message was [msg]") // Handled somewhere else
|
||||
|
||||
for (var/mob/M in world)
|
||||
if (M.client && M.client.holder && M.client.holder.level != 0)
|
||||
M << "\blue <b><font color=orange>CENTCOMM:</font>[key_name(Sender, M)] (<A HREF='?src=\ref[M.client.holder];adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?src=\ref[M.client.holder];adminplayervars=\ref[Sender]'>VV</A>) (<A HREF='?src=\ref[M.client.holder];adminplayersubtlemessage=\ref[Sender]'>SM</A>) (<A HREF='?src=\ref[M.client.holder];adminplayerobservejump=\ref[Sender]'>JMP</A>) (<A HREF='?src=\ref[M.client.holder];secretsadmin=check_antagonist'>CA</A>) (<A HREF='?src=\ref[M.client.holder];BlueSpaceArtillery=\ref[Sender]'>BSA</A>) (<A HREF='?src=\ref[M.client.holder];CentcommReply=\ref[Sender]'>RPLY</A>):</b> [msg]"
|
||||
for (var/client/C in admin_list)
|
||||
C << "\blue <b><font color=orange>CENTCOMM:</font>[key_name(Sender, C)] (<A HREF='?src=\ref[C.holder];adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?src=\ref[C.holder];adminplayervars=\ref[Sender]'>VV</A>) (<A HREF='?src=\ref[C.holder];adminplayersubtlemessage=\ref[Sender]'>SM</A>) (<A HREF='?src=\ref[C.holder];adminplayerobservejump=\ref[Sender]'>JMP</A>) (<A HREF='?src=\ref[C.holder];secretsadmin=check_antagonist'>CA</A>) (<A HREF='?src=\ref[C.holder];BlueSpaceArtillery=\ref[Sender]'>BSA</A>) (<A HREF='?src=\ref[C.holder];CentcommReply=\ref[Sender]'>RPLY</A>):</b> [msg]"
|
||||
//
|
||||
/proc/Syndicate_announce(var/text , var/mob/Sender)
|
||||
|
||||
@@ -37,7 +40,6 @@
|
||||
|
||||
// log_admin("[key_name(Sender)] sent a message to the Syndicate! The message was [msg]") // Handled somewhere else
|
||||
|
||||
for (var/mob/M in world)
|
||||
if (M.client && M.client.holder && M.client.holder.level != 0)
|
||||
M << "\blue <b><font color=crimson>SYNDICATE:</font>[key_name(Sender, M)] (<A HREF='?src=\ref[M.client.holder];adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?src=\ref[M.client.holder];adminplayervars=\ref[Sender]'>VV</A>) (<A HREF='?src=\ref[M.client.holder];adminplayersubtlemessage=\ref[Sender]'>SM</A>) (<A HREF='?src=\ref[M.client.holder];adminplayerobservejump=\ref[Sender]'>JMP</A>) (<A HREF='?src=\ref[M.client.holder];secretsadmin=check_antagonist'>CA</A>) (<A HREF='?src=\ref[M.client.holder];BlueSpaceArtillery=\ref[Sender]'>BSA</A>) (<A HREF='?src=\ref[M.client.holder];SyndicateReply=\ref[Sender]'>RPLY</A>):</b> [msg]"
|
||||
for (var/client/C in admin_list)
|
||||
C << "\blue <b><font color=crimson>SYNDICATE:</font>[key_name(Sender, C)] (<A HREF='?src=\ref[C.holder];adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?src=\ref[C.holder];adminplayervars=\ref[Sender]'>VV</A>) (<A HREF='?src=\ref[C.holder];adminplayersubtlemessage=\ref[Sender]'>SM</A>) (<A HREF='?src=\ref[C.holder];adminplayerobservejump=\ref[Sender]'>JMP</A>) (<A HREF='?src=\ref[C.holder];secretsadmin=check_antagonist'>CA</A>) (<A HREF='?src=\ref[C.holder];BlueSpaceArtillery=\ref[Sender]'>BSA</A>) (<A HREF='?src=\ref[C.holder];SyndicateReply=\ref[Sender]'>RPLY</A>):</b> [msg]"
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/client/proc/cmd_admin_drop_everything(mob/M as mob in world)
|
||||
/client/proc/cmd_admin_drop_everything(mob/M as mob in mob_list)
|
||||
set category = null
|
||||
set name = "Drop Everything"
|
||||
if(!holder)
|
||||
@@ -10,13 +10,13 @@
|
||||
return
|
||||
|
||||
for(var/obj/item/W in M)
|
||||
M.drop_from_slot(W)
|
||||
M.drop_from_inventory(W)
|
||||
|
||||
log_admin("[key_name(usr)] made [key_name(M)] drop everything!")
|
||||
message_admins("[key_name_admin(usr)] made [key_name_admin(M)] drop everything!", 1)
|
||||
//feedback_add_details("admin_verb","DEVR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
feedback_add_details("admin_verb","DEVR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/cmd_admin_prison(mob/M as mob in world)
|
||||
/client/proc/cmd_admin_prison(mob/M as mob in mob_list)
|
||||
set category = "Admin"
|
||||
set name = "Prison"
|
||||
if(!holder)
|
||||
@@ -28,22 +28,22 @@
|
||||
return
|
||||
//strip their stuff before they teleport into a cell :downs:
|
||||
for(var/obj/item/W in M)
|
||||
M.drop_from_slot(W)
|
||||
M.drop_from_inventory(W)
|
||||
//teleport person to cell
|
||||
M.Paralyse(5)
|
||||
sleep(5) //so they black out before warping
|
||||
M.loc = pick(prisonwarp)
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/prisoner = M
|
||||
prisoner.equip_if_possible(new /obj/item/clothing/under/color/orange(prisoner), prisoner.slot_w_uniform)
|
||||
prisoner.equip_if_possible(new /obj/item/clothing/shoes/orange(prisoner), prisoner.slot_shoes)
|
||||
prisoner.equip_to_slot_or_del(new /obj/item/clothing/under/color/orange(prisoner), slot_w_uniform)
|
||||
prisoner.equip_to_slot_or_del(new /obj/item/clothing/shoes/orange(prisoner), slot_shoes)
|
||||
spawn(50)
|
||||
M << "\red You have been sent to the prison station!"
|
||||
log_admin("[key_name(usr)] sent [key_name(M)] to the prison station.")
|
||||
message_admins("\blue [key_name_admin(usr)] sent [key_name_admin(M)] to the prison station.", 1)
|
||||
//feedback_add_details("admin_verb","PRISON") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
feedback_add_details("admin_verb","PRISON") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/cmd_admin_subtle_message(mob/M as mob in world)
|
||||
/client/proc/cmd_admin_subtle_message(mob/M as mob in mob_list)
|
||||
set category = "Special Verbs"
|
||||
set name = "Subtle Message"
|
||||
|
||||
@@ -59,11 +59,11 @@
|
||||
if(usr)
|
||||
if (usr.client)
|
||||
if(usr.client.holder)
|
||||
M << "\bold You think... \italic [msg]"
|
||||
M << "\bold You hear a voice in your head... \italic [msg]"
|
||||
|
||||
log_admin("SubtlePM: [key_name(usr)] -> [key_name(M)] : [msg]")
|
||||
message_admins("\blue \bold SubtleMessage: [key_name_admin(usr)] -> [key_name_admin(M)] : [msg]", 1)
|
||||
//feedback_add_details("admin_verb","SMS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
feedback_add_details("admin_verb","SMS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/cmd_admin_world_narrate() // Allows administrators to fluff events a little easier -- TLE
|
||||
set category = "Special Verbs"
|
||||
@@ -80,7 +80,7 @@
|
||||
world << "[msg]"
|
||||
log_admin("GlobalNarrate: [key_name(usr)] : [msg]")
|
||||
message_admins("\blue \bold GlobalNarrate: [key_name_admin(usr)] : [msg]<BR>", 1)
|
||||
//feedback_add_details("admin_verb","GLN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
feedback_add_details("admin_verb","GLN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/cmd_admin_direct_narrate(var/mob/M) // Targetted narrate -- TLE
|
||||
set category = "Special Verbs"
|
||||
@@ -104,27 +104,92 @@
|
||||
M << msg
|
||||
log_admin("DirectNarrate: [key_name(usr)] to ([M.name]/[M.key]): [msg]")
|
||||
message_admins("\blue \bold DirectNarrate: [key_name(usr)] to ([M.name]/[M.key]): [msg]<BR>", 1)
|
||||
//feedback_add_details("admin_verb","DIRN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
feedback_add_details("admin_verb","DIRN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/cmd_admin_mute(mob/M as mob in world)
|
||||
/client/proc/cmd_admin_godmode(mob/M as mob in mob_list)
|
||||
set category = "Special Verbs"
|
||||
set name = "Admin Mute"
|
||||
set name = "Godmode"
|
||||
if(!holder)
|
||||
src << "Only administrators may use this command."
|
||||
return
|
||||
if (M.client && M.client.holder && (M.client.holder.level >= holder.level))
|
||||
alert("You cannot perform this action. You must be of a higher administrative rank!", null, null, null, null, null)
|
||||
return
|
||||
if (M.nodamage == 1)
|
||||
M.nodamage = 0
|
||||
usr << "\blue Toggled OFF"
|
||||
else
|
||||
M.nodamage = 1
|
||||
usr << "\blue Toggled ON"
|
||||
|
||||
log_admin("[key_name(usr)] has toggled [key_name(M)]'s nodamage to [(M.nodamage ? "On" : "Off")]")
|
||||
message_admins("[key_name_admin(usr)] has toggled [key_name_admin(M)]'s nodamage to [(M.nodamage ? "On" : "Off")]", 1)
|
||||
feedback_add_details("admin_verb","GOD") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
proc/cmd_admin_mute(mob/M as mob, mute_type, automute = 0)
|
||||
if(!automute)
|
||||
if(usr && usr.client)
|
||||
if(!usr.client.holder)
|
||||
src << "Only administrators may use this command."
|
||||
return
|
||||
if (M.client && M.client.holder && (M.client.holder.level >= usr.client.holder.level))
|
||||
alert("You cannot perform this action. You must be of a higher administrative rank!", null, null, null, null, null)
|
||||
return
|
||||
if(!M.client)
|
||||
src << "This mob doesn't have a client tied to it."
|
||||
return
|
||||
M.client.muted = !M.client.muted
|
||||
|
||||
log_admin("[key_name(src)] has [(M.client.muted ? "muted" : "voiced")] [key_name(M)].")
|
||||
message_admins("[key_name_admin(src)] has [(M.client.muted ? "muted" : "voiced")] [key_name_admin(M)].", 1)
|
||||
var/muteunmute = 0 //0 = unmuted; 1 = muted
|
||||
var/mute_string = "unknown"
|
||||
|
||||
M << "You have been [(M.client.muted ? "muted" : "voiced")]."
|
||||
//feedback_add_details("admin_verb","MUTE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
//The '| automute' thing ensures that if an automute is being applied by code, it always mutes to prevent any potential for automute to unmute someone who was muted.
|
||||
switch(mute_type)
|
||||
if(MUTE_IC)
|
||||
M.client.muted_ic = !M.client.muted_ic | automute
|
||||
muteunmute = M.client.muted_ic
|
||||
mute_string = "IC (say and emote)"
|
||||
if(MUTE_OOC)
|
||||
M.client.muted_ooc = !M.client.muted_ooc | automute
|
||||
muteunmute = M.client.muted_ooc
|
||||
mute_string = "OOC"
|
||||
if(MUTE_PRAY)
|
||||
M.client.muted_pray = !M.client.muted_pray | automute
|
||||
muteunmute = M.client.muted_pray
|
||||
mute_string = "pray"
|
||||
if(MUTE_ADMINHELP)
|
||||
M.client.muted_adminhelp = !M.client.muted_adminhelp | automute
|
||||
muteunmute = M.client.muted_adminhelp
|
||||
mute_string = "adminhelp, admin PM and ASAY"
|
||||
if(MUTE_DEADCHAT)
|
||||
M.client.muted_deadchat = !M.client.muted_deadchat | automute
|
||||
muteunmute = M.client.muted_deadchat
|
||||
mute_string = "deadchat and DSAY"
|
||||
if(MUTE_ALL)
|
||||
mute_string = "everything"
|
||||
if( M.client.muted_ic )
|
||||
M.client.muted_ic = 1
|
||||
M.client.muted_ooc = 1
|
||||
M.client.muted_pray = 1
|
||||
M.client.muted_adminhelp = 1
|
||||
M.client.muted_deadchat = 1
|
||||
muteunmute = 1
|
||||
else
|
||||
M.client.muted_ic = 0
|
||||
M.client.muted_ooc = 0
|
||||
M.client.muted_pray = 0
|
||||
M.client.muted_adminhelp = 0
|
||||
M.client.muted_deadchat = 0
|
||||
muteunmute = 0
|
||||
|
||||
if(!automute)
|
||||
log_admin("[key_name(usr)] has [(muteunmute ? "muted" : "voiced")] [key_name(M)] from [mute_string]")
|
||||
message_admins("[key_name_admin(usr)] has [(muteunmute ? "muted" : "voiced")] [key_name_admin(M)] from [mute_string].", 1)
|
||||
|
||||
M << "You have been [(muteunmute ? "muted" : "voiced")] from [mute_string] by [(usr.client.stealth)?"an admin":"[usr.client]"]."
|
||||
feedback_add_details("admin_verb","MUTE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
else
|
||||
log_admin("SPAM AUTOMUTE: [(muteunmute ? "muted" : "voiced")] [key_name(M)] from [mute_string]")
|
||||
message_admins("SPAM AUTOMUTE: [(muteunmute ? "muted" : "voiced")] [key_name_admin(M)] from [mute_string].", 1)
|
||||
|
||||
M << "You have been [(muteunmute ? "muted" : "voiced")] from [mute_string] by the SPAM AUTOMUTE system. Contact an admin."
|
||||
feedback_add_details("admin_verb","AUTOMUTE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
|
||||
/client/proc/cmd_admin_add_random_ai_law()
|
||||
@@ -139,10 +204,10 @@
|
||||
var/show_log = alert(src, "Show ion message?", "Message", "Yes", "No")
|
||||
if(show_log == "Yes")
|
||||
command_alert("Ion storm detected near the station. Please check all AI-controlled equipment for errors.", "Anomaly Alert")
|
||||
world << sound('ionstorm.ogg')
|
||||
world << sound('sound/AI/ionstorm.ogg')
|
||||
|
||||
//IonStorm(0)
|
||||
//feedback_add_details("admin_verb","ION") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
IonStorm(0)
|
||||
feedback_add_details("admin_verb","ION") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/*
|
||||
Stealth spawns xenos
|
||||
@@ -158,10 +223,10 @@
|
||||
src << "Only administrators may use this command."
|
||||
return
|
||||
|
||||
create_xeno()
|
||||
//feedback_add_details("admin_verb","X") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
log_admin("[key_name(usr)] spawned a xeno.")
|
||||
message_admins("\blue [key_name_admin(usr)] spawned a xeno.", 1)
|
||||
if(create_xeno())
|
||||
feedback_add_details("admin_verb","X") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
log_admin("[key_name(usr)] spawned a xeno.")
|
||||
message_admins("\blue [key_name_admin(usr)] spawned a xeno.", 1)
|
||||
return
|
||||
|
||||
//I use this proc for respawn character too. /N
|
||||
@@ -173,40 +238,36 @@
|
||||
var/mob/living/carbon/alien/humanoid/new_xeno
|
||||
switch(alien_caste)
|
||||
if("Hunter")
|
||||
new_xeno = new /mob/living/carbon/alien/humanoid/hunter (spawn_here)
|
||||
new_xeno = new /mob/living/carbon/alien/humanoid/hunter(spawn_here)
|
||||
if("Sentinel")
|
||||
new_xeno = new /mob/living/carbon/alien/humanoid/sentinel (spawn_here)
|
||||
new_xeno = new /mob/living/carbon/alien/humanoid/sentinel(spawn_here)
|
||||
if("Drone")
|
||||
new_xeno = new /mob/living/carbon/alien/humanoid/drone (spawn_here)
|
||||
new_xeno = new /mob/living/carbon/alien/humanoid/drone(spawn_here)
|
||||
else
|
||||
return 0
|
||||
|
||||
// Picks a random ghost for the role if none is specified. Mostly a copy of alien burst code.
|
||||
var/candidates_list[] = list()
|
||||
if(G)//If G exists through a passed argument.
|
||||
candidates_list += G.client
|
||||
else//Else we need to find them.
|
||||
for(G in world)
|
||||
if(G.client)
|
||||
if(!G.client.holder && ((G.client.inactivity/10)/60) <= 5)
|
||||
candidates_list += G.client//We want their client, not their ghost.
|
||||
if(candidates_list.len)//If there are people to spawn.
|
||||
if(!G)//If G was not passed through an argument.
|
||||
var/client/G_client = input("Pick the client you want to respawn as a xeno.", "Active Players") as null|anything in candidates_list//It will auto-pick a person when there is only one candidate.
|
||||
if(G_client)//They may have logged out when the admin was choosing people. Or were not chosen. Would run time error otherwise.
|
||||
G = G_client.mob
|
||||
var/selected_key
|
||||
if(G && G.key)
|
||||
selected_key = G.key
|
||||
else
|
||||
var/list/candidates = list() //List of candidate KEYS to assume control of the new larva ~Carn
|
||||
for(G in player_list)
|
||||
if(G.client.be_alien)
|
||||
if(((G.client.inactivity/10)/60) <= 5)
|
||||
if(!(G.mind && G.mind.current && G.mind.current.stat != DEAD))
|
||||
candidates += G.key
|
||||
if(candidates.len)
|
||||
selected_key = input("Pick the client you want to respawn as a xeno.", "Suitable Candidates") as null|anything in candidates
|
||||
|
||||
if(G)//If G exists.
|
||||
message_admins("\blue [key_name_admin(usr)] has spawned [G.key] as a filthy xeno.", 1)
|
||||
new_xeno.mind_initialize(G, alien_caste)
|
||||
new_xeno.key = G.key
|
||||
else//We won't be reporting duds.
|
||||
del(new_xeno)
|
||||
|
||||
del(G)
|
||||
return
|
||||
|
||||
alert("There are no available ghosts to throw into the xeno. Aborting command.")
|
||||
del(new_xeno)
|
||||
return
|
||||
if(selected_key)
|
||||
new_xeno.key = selected_key
|
||||
message_admins("\blue [key_name_admin(usr)] has spawned [selected_key] as a filthy xeno.", 1)
|
||||
return 1
|
||||
else
|
||||
//we couldn't find a candidate
|
||||
usr << "<font color='red'>Error: create_xeno(): no suitable players.</font>"
|
||||
del(new_xeno)
|
||||
return 0
|
||||
|
||||
/*
|
||||
If a guy was gibbed and you want to revive him, this is a good way to do so.
|
||||
@@ -220,131 +281,95 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
if(!holder)
|
||||
src << "Only administrators may use this command."
|
||||
return
|
||||
var/input = input(src, "Please specify which key will be respawned.", "Key", "")
|
||||
var/input = ckey(input(src, "Please specify which key will be respawned.", "Key", ""))
|
||||
if(!input)
|
||||
return
|
||||
|
||||
var/mob/dead/observer/G_found
|
||||
for(var/mob/dead/observer/G in world)
|
||||
if(G.client&&ckey(G.key)==ckey(input))
|
||||
for(var/mob/dead/observer/G in player_list)
|
||||
if(G.ckey == input)
|
||||
G_found = G
|
||||
break
|
||||
|
||||
if(!G_found)//If a ghost was not found.
|
||||
alert("There is no active key like that in the game or the person is not currently a ghost. Aborting command.")
|
||||
usr << "<font color='red'>There is no active key like that in the game or the person is not currently a ghost.</font>"
|
||||
return
|
||||
|
||||
//First we spawn a dude.
|
||||
var/mob/living/carbon/human/new_character = new(src)//The mob being spawned.
|
||||
if(G_found.mind && !G_found.mind.active) //mind isn't currently in use by someone/something
|
||||
//Check if they were an alien
|
||||
if(G_found.mind.assigned_role=="Alien")
|
||||
if(alert("This character appears to have been an alien. Would you like to respawn them as such?",,"Yes","No")=="Yes")
|
||||
var/turf/T
|
||||
if(xeno_spawn.len) T = pick(xeno_spawn)
|
||||
else T = pick(latejoin)
|
||||
|
||||
//Second, we check if they are an alien or monkey.
|
||||
var/adj_name = copytext(G_found.real_name,1,7)//What is their name?
|
||||
if(G_found.mind&&G_found.mind.special_role=="Alien")//If they have a mind, are they an alien?
|
||||
adj_name="alien "
|
||||
if( adj_name==("alien "||"monkey"))
|
||||
if(alert("This character appears to either be an an alien or monkey. Would you like to respawn them as such?",,"Yes","No")=="Yes")//If you do.
|
||||
switch(adj_name)//Let's check based on adjusted name.
|
||||
if("monkey")//A monkey. Monkeys don't have a mind, so we can safely spawn them here if needed.
|
||||
//TO DO: Monkeys may have a mind now. May need retooling.
|
||||
var/mob/living/carbon/monkey/M = new(pick(latejoin))//Spawn a monkey at latejoin.
|
||||
M.mind = G_found.mind
|
||||
if(M.mind)//If the mind is not null.
|
||||
M.mind.current = M
|
||||
M.key = G_found.key//They are now a monkey. Nothing else needs doing.
|
||||
if("alien ")//An alien. Aliens can have a mind which can be used to determine a few things.
|
||||
if(G_found.mind)
|
||||
var/turf/location = xeno_spawn.len ? pick(xeno_spawn) : pick(latejoin)//Location where they will be spawned.
|
||||
var/mob/living/carbon/alien/new_xeno//Null alien mob first.
|
||||
switch(G_found.mind.special_role)//If they have a mind, we can determine which caste they were.
|
||||
if("Hunter")
|
||||
new_xeno = new/mob/living/carbon/alien/humanoid/hunter(location)
|
||||
if("Sentinel")
|
||||
new_xeno = new/mob/living/carbon/alien/humanoid/sentinel(location)
|
||||
if("Drone")
|
||||
new_xeno = new/mob/living/carbon/alien/humanoid/drone(location)
|
||||
if("Queen")
|
||||
new_xeno = new/mob/living/carbon/alien/humanoid/queen(location)
|
||||
else//If we don't know what special role they have, for whatever reason, or they're a larva.
|
||||
create_xeno(G_found)
|
||||
return
|
||||
//Now to give them a new mind.
|
||||
new_xeno.mind = new
|
||||
new_xeno.mind.assigned_role = "Alien"
|
||||
new_xeno.mind.special_role = G_found.mind.special_role
|
||||
new_xeno.mind.key = G_found.key
|
||||
new_xeno.mind.current = new_xeno
|
||||
new_xeno.key = G_found.key
|
||||
new_xeno << "You have been fully respawned. Enjoy the game."
|
||||
message_admins("\blue [key_name_admin(usr)] has respawned [new_xeno.key] as a filthy xeno.", 1)
|
||||
//And we're done. Announcing other stuff is handled by spawn_xeno.
|
||||
else
|
||||
create_xeno(G_found)//Else we default to the standard command for spawning a xenomorph.
|
||||
var/mob/living/carbon/alien/new_xeno
|
||||
switch(G_found.mind.special_role)//If they have a mind, we can determine which caste they were.
|
||||
if("Hunter") new_xeno = new /mob/living/carbon/alien/humanoid/hunter(T)
|
||||
if("Sentinel") new_xeno = new /mob/living/carbon/alien/humanoid/sentinel(T)
|
||||
if("Drone") new_xeno = new /mob/living/carbon/alien/humanoid/drone(T)
|
||||
if("Queen") new_xeno = new /mob/living/carbon/alien/humanoid/queen(T)
|
||||
else//If we don't know what special role they have, for whatever reason, or they're a larva.
|
||||
create_xeno(G_found)
|
||||
return
|
||||
del(G_found)
|
||||
return
|
||||
//Monkeys aren't terribly important so we won't be announcing them. The proc basically ends here.
|
||||
else//Or not.
|
||||
G_found.mind=null//Null their mind so we don't screw things up ahead.
|
||||
G_found.real_name="[pick(pick(first_names_male,first_names_female))] [pick(last_names)]"//Give them a random real name.
|
||||
|
||||
/*Third, we try and locate a record for the person being respawned through data_core.
|
||||
This isn't an exact science but it does the trick more often than not.*/
|
||||
var/datum/data/record/record_found//Referenced to later to either randomize or not randomize the character.
|
||||
if(G_found.mind)//They must have a mind to reference the record. Here we also double check for aliens.
|
||||
//Now to give them their mind back.
|
||||
G_found.mind.transfer_to(new_xeno) //be careful when doing stuff like this! I've already checked the mind isn't in use
|
||||
new_xeno.key = G_found.key
|
||||
new_xeno << "You have been fully respawned. Enjoy the game."
|
||||
message_admins("\blue [key_name_admin(usr)] has respawned [new_xeno.key] as a filthy xeno.", 1)
|
||||
return //all done. The ghost is auto-deleted
|
||||
|
||||
//check if they were a monkey
|
||||
else if(findtext(G_found.real_name,"monkey"))
|
||||
if(alert("This character appears to have been a monkey. Would you like to respawn them as such?",,"Yes","No")=="Yes")
|
||||
var/mob/living/carbon/monkey/new_monkey = new(pick(latejoin))
|
||||
G_found.mind.transfer_to(new_monkey) //be careful when doing stuff like this! I've already checked the mind isn't in use
|
||||
new_monkey.key = G_found.key
|
||||
new_monkey << "You have been fully respawned. Enjoy the game."
|
||||
message_admins("\blue [key_name_admin(usr)] has respawned [new_monkey.key] as a filthy xeno.", 1)
|
||||
return //all done. The ghost is auto-deleted
|
||||
|
||||
|
||||
//Ok, it's not a xeno or a monkey. So, spawn a human.
|
||||
var/mob/living/carbon/human/new_character = new(pick(latejoin))//The mob being spawned.
|
||||
|
||||
var/datum/data/record/record_found //Referenced to later to either randomize or not randomize the character.
|
||||
if(G_found.mind && !G_found.mind.active) //mind isn't currently in use by someone/something
|
||||
/*Try and locate a record for the person being respawned through data_core.
|
||||
This isn't an exact science but it does the trick more often than not.*/
|
||||
var/id = md5("[G_found.real_name][G_found.mind.assigned_role]")
|
||||
for(var/datum/data/record/t in data_core.locked)
|
||||
if(t.fields["id"]==id)
|
||||
record_found = t//We shall now reference the record.
|
||||
break
|
||||
|
||||
//Now we do some mind locating to see how to set up the rest of the character.
|
||||
if(G_found.mind)//If they had a previous mind.
|
||||
new_character.mind = G_found.mind
|
||||
new_character.mind.special_verbs = list()//New list because they will receive them again.
|
||||
if(record_found)//If they have a record we can determine a few things.
|
||||
new_character.real_name = record_found.fields["name"]
|
||||
new_character.gender = record_found.fields["sex"]
|
||||
new_character.age = record_found.fields["age"]
|
||||
new_character.b_type = record_found.fields["b_type"]
|
||||
else
|
||||
new_character.mind = new()
|
||||
ticker.minds += new_character.mind//And we'll add it to the minds database.
|
||||
new_character.mind.original = new_character//If they are respawning with a new character.
|
||||
if(!record_found)//We have to pick their role if they have no record.
|
||||
if(G_found.mind&&G_found.mind.assigned_role)//But they may have an assigned role already.
|
||||
new_character.mind.assigned_role = G_found.mind.assigned_role//Also makes sure our MODE people are equipped right later on.
|
||||
new_character.mind.role_alt_title = G_found.mind.role_alt_title
|
||||
else
|
||||
var/assigned_role = input("Please specify which job the character will be respawned as.", "Assigned role") as null|anything in get_all_jobs()
|
||||
if(!assigned_role) new_character.mind.assigned_role = "Assistant"//Defaults to assistant.
|
||||
else new_character.mind.assigned_role = assigned_role
|
||||
new_character.gender = pick(MALE,FEMALE)
|
||||
var/datum/preferences/A = new()
|
||||
A.randomize_appearance_for(new_character)
|
||||
new_character.real_name = G_found.real_name
|
||||
|
||||
if(!new_character.real_name)
|
||||
if(new_character.gender == MALE)
|
||||
new_character.real_name = capitalize(pick(first_names_male)) + " " + capitalize(pick(last_names))
|
||||
else
|
||||
new_character.real_name = capitalize(pick(first_names_female)) + " " + capitalize(pick(last_names))
|
||||
new_character.name = new_character.real_name
|
||||
|
||||
if(G_found.mind && !G_found.mind.active)
|
||||
G_found.mind.transfer_to(new_character) //be careful when doing stuff like this! I've already checked the mind isn't in use
|
||||
new_character.mind.special_verbs = list()
|
||||
else
|
||||
new_character.mind_initialize()
|
||||
if(!new_character.mind.assigned_role) new_character.mind.assigned_role = "Assistant"//If they somehow got a null assigned role.
|
||||
new_character.mind.key = G_found.key//In case it's someone else playing as that character.
|
||||
new_character.mind.current = new_character//So that it can properly reference later if needed.
|
||||
new_character.mind.memory = ""//Memory erased so it doesn't get clunkered up with useless info. This means they may forget their previous mission--this is usually handled through objective code and recalling memory.
|
||||
|
||||
//Here we either load their saved appearance or randomize it.
|
||||
var/datum/preferences/A = new()
|
||||
if(A.savefile_load(G_found))//If they have a save file. This will automatically load their parameters.
|
||||
//Note: savefile appearances are overwritten later on if the character has a data_core entry. By appearance, I mean the physical appearance.
|
||||
var/name_safety = G_found.real_name//Their saved parameters may include a random name. Also a safety in case they are playing a character that got their name after round start.
|
||||
A.copy_to(new_character)
|
||||
new_character.real_name = name_safety
|
||||
new_character.name = name_safety
|
||||
else
|
||||
if(record_found)//If they have a record we can determine a few things.
|
||||
new_character.real_name = record_found.fields["name"]//Not necessary to reference the record but I like to keep things uniform.
|
||||
new_character.name = record_found.fields["name"]
|
||||
new_character.gender = record_found.fields["sex"]//Sex
|
||||
new_character.age = record_found.fields["age"]//Age
|
||||
new_character.dna.b_type = record_found.fields["b_type"]//Blood type
|
||||
//We will update their appearance when determining DNA.
|
||||
else
|
||||
new_character.gender = MALE
|
||||
if(alert("Save file not detected. Record data not detected. Please specify [G_found.real_name]'s gender.",,"Male","Female")=="Female")
|
||||
new_character.gender = FEMALE
|
||||
var/name_safety = G_found.real_name//Default is a random name so we want to save this.
|
||||
A.randomize_appearance_for(new_character)//Now we will randomize their appearance since we have no way of knowing what they look/looked like.
|
||||
new_character.real_name = name_safety
|
||||
new_character.name = name_safety
|
||||
|
||||
//After everything above, it's time to initialize their DNA.
|
||||
//DNA
|
||||
if(record_found)//Pull up their name from database records if they did have a mind.
|
||||
new_character.dna = new()//Let's first give them a new DNA.
|
||||
new_character.dna.unique_enzymes = record_found.fields["b_dna"]//Enzymes are based on real name but we'll use the record for conformity.
|
||||
@@ -354,10 +379,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
else//If they have no records, we just do a random DNA for them, based on their random appearance/savefile.
|
||||
new_character.dna.ready_dna(new_character)
|
||||
|
||||
//Here we need to find where to spawn them.
|
||||
var/spawn_here = pick(latejoin)//"JoinLate" is a landmark which is deleted on round start. So, latejoin has to be used instead.
|
||||
new_character.loc = spawn_here
|
||||
//If they need to spawn elsewhere, they will be transferred there momentarily.
|
||||
new_character.key = G_found.key
|
||||
|
||||
/*
|
||||
The code below functions with the assumption that the mob is already a traitor if they have a special role.
|
||||
@@ -369,13 +391,8 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
var/admin = key_name_admin(src)
|
||||
var/player_key = G_found.key
|
||||
|
||||
new_character.key = player_key//Throw them into the mob.
|
||||
|
||||
//Now for special roles and equipment.
|
||||
switch(new_character.mind.special_role)
|
||||
if("Changeling")
|
||||
job_master.EquipRank(new_character, new_character.mind.assigned_role, 1)
|
||||
new_character.make_changeling()
|
||||
if("traitor")
|
||||
job_master.EquipRank(new_character, new_character.mind.assigned_role, 1)
|
||||
ticker.mode.equip_traitor(new_character)
|
||||
@@ -422,7 +439,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
if(!record_found&&new_character.mind.assigned_role!="MODE")//If there are no records for them. If they have a record, this info is already in there. MODE people are not announced anyway.
|
||||
//Power to the user!
|
||||
if(alert(new_character,"Warning: No data core entry detected. Would you like to announce the arrival of this character by adding them to various databases, such as medical records?",,"No","Yes")=="Yes")
|
||||
call(/mob/new_player/proc/ManifestLateSpawn)(new_character)
|
||||
data_core.manifest_inject(new_character)
|
||||
|
||||
if(alert(new_character,"Would you like an active AI to announce this character?",,"No","Yes")=="Yes")
|
||||
call(/mob/new_player/proc/AnnounceArrival)(new_character, new_character.mind.assigned_role)
|
||||
@@ -431,8 +448,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
|
||||
new_character << "You have been fully respawned. Enjoy the game."
|
||||
|
||||
del(G_found)//Don't want to leave ghosts around.
|
||||
//feedback_add_details("admin_verb","RSPCH") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
feedback_add_details("admin_verb","RSPCH") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
return new_character
|
||||
|
||||
/client/proc/cmd_admin_add_freeform_ai_law()
|
||||
@@ -444,14 +460,14 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
var/input = input(usr, "Please enter anything you want the AI to do. Anything. Serious.", "What?", "") as text|null
|
||||
if(!input)
|
||||
return
|
||||
for(var/mob/living/silicon/ai/M in world)
|
||||
for(var/mob/living/silicon/ai/M in mob_list)
|
||||
if (M.stat == 2)
|
||||
usr << "Upload failed. No signal is being detected from the AI."
|
||||
else if (M.see_in_dark == 0)
|
||||
usr << "Upload failed. Only a faint signal is being detected from the AI, and it is not responding to our requests. It may be low on power."
|
||||
else
|
||||
M.add_ion_law(input)
|
||||
for(var/mob/living/silicon/ai/O in world)
|
||||
for(var/mob/living/silicon/ai/O in mob_list)
|
||||
O << "\red " + input
|
||||
|
||||
log_admin("Admin [key_name(usr)] has added a new AI law - [input]")
|
||||
@@ -460,10 +476,10 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
var/show_log = alert(src, "Show ion message?", "Message", "Yes", "No")
|
||||
if(show_log == "Yes")
|
||||
command_alert("Ion storm detected near the station. Please check all AI-controlled equipment for errors.", "Anomaly Alert")
|
||||
world << sound('ionstorm.ogg')
|
||||
//feedback_add_details("admin_verb","IONC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
world << sound('sound/AI/ionstorm.ogg')
|
||||
feedback_add_details("admin_verb","IONC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/cmd_admin_rejuvenate(mob/living/M as mob in world)
|
||||
/client/proc/cmd_admin_rejuvenate(mob/living/M as mob in mob_list)
|
||||
set category = "Special Verbs"
|
||||
set name = "Rejuvenate"
|
||||
if(!holder)
|
||||
@@ -481,7 +497,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
message_admins("\red Admin [key_name_admin(usr)] healed / revived [key_name_admin(M)]!", 1)
|
||||
else
|
||||
alert("Admin revive disabled")
|
||||
//feedback_add_details("admin_verb","REJU") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
feedback_add_details("admin_verb","REJU") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/cmd_admin_create_centcom_report()
|
||||
set category = "Special Verbs"
|
||||
@@ -490,30 +506,33 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
src << "Only administrators may use this command."
|
||||
return
|
||||
var/input = input(usr, "Please enter anything you want. Anything. Serious.", "What?", "") as message|null
|
||||
var/customname = input(usr, "Pick a title for the report.", "Title") as text|null
|
||||
if(!input)
|
||||
return
|
||||
if(!customname)
|
||||
customname = "NanoTrasen Update"
|
||||
for (var/obj/machinery/computer/communications/C in machines)
|
||||
if(! (C.stat & (BROKEN|NOPOWER) ) )
|
||||
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( C.loc )
|
||||
P.name = "'[command_name()] Update.'"
|
||||
P.info = input
|
||||
P.update_icon()
|
||||
C.messagetitle.Add("[command_name()] Update")
|
||||
C.messagetext.Add(P.info)
|
||||
|
||||
switch(alert("Should this be announced to the general population?",,"Yes","No"))
|
||||
if("Yes")
|
||||
command_alert(input, maintitle=customname);
|
||||
if("No")
|
||||
world << "\red New NanoTrasen Update available at all communication consoles."
|
||||
var/confirm = alert(src, "Do you want to announce the contents of the report to the crew?", "Announce", "Yes", "No")
|
||||
if(confirm == "Yes")
|
||||
command_alert(input);
|
||||
for (var/obj/machinery/computer/communications/C in machines)
|
||||
if(! (C.stat & (BROKEN|NOPOWER) ) )
|
||||
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( C.loc )
|
||||
P.name = "paper- '[command_name()] Update.'"
|
||||
P.info = input
|
||||
C.messagetitle.Add("[command_name()] Update")
|
||||
C.messagetext.Add(P.info)
|
||||
else
|
||||
command_alert("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message");
|
||||
for (var/obj/machinery/computer/communications/C in machines)
|
||||
if(! (C.stat & (BROKEN|NOPOWER) ) )
|
||||
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( C.loc )
|
||||
P.name = "paper- 'Classified [command_name()] Update.'"
|
||||
P.info = input
|
||||
C.messagetitle.Add("Classified [command_name()] Update")
|
||||
C.messagetext.Add(P.info)
|
||||
|
||||
world << sound('commandreport.ogg')
|
||||
world << sound('sound/AI/commandreport.ogg')
|
||||
log_admin("[key_name(src)] has created a command report: [input]")
|
||||
message_admins("[key_name_admin(src)] has created a command report", 1)
|
||||
//feedback_add_details("admin_verb","CCR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
feedback_add_details("admin_verb","CCR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/cmd_admin_delete(atom/O as obj|mob|turf in world)
|
||||
set category = "Admin"
|
||||
@@ -526,7 +545,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
if (alert(src, "Are you sure you want to delete:\n[O]\nat ([O.x], [O.y], [O.z])?", "Confirmation", "Yes", "No") == "Yes")
|
||||
log_admin("[key_name(usr)] deleted [O] at ([O.x],[O.y],[O.z])")
|
||||
message_admins("[key_name_admin(usr)] deleted [O] at ([O.x],[O.y],[O.z])", 1)
|
||||
//feedback_add_details("admin_verb","DEL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
feedback_add_details("admin_verb","DEL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
del(O)
|
||||
|
||||
/client/proc/cmd_admin_list_open_jobs()
|
||||
@@ -539,7 +558,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
if(job_master)
|
||||
for(var/datum/job/job in job_master.occupations)
|
||||
src << "[job.title]: [job.total_positions]"
|
||||
//feedback_add_details("admin_verb","LFS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
feedback_add_details("admin_verb","LFS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/cmd_admin_explosion(atom/O as obj|mob|turf in world)
|
||||
set category = "Special Verbs"
|
||||
@@ -563,10 +582,10 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
if (alert(src, "Are you sure you want to do this? It will laaag.", "Confirmation", "Yes", "No") == "No")
|
||||
return
|
||||
|
||||
explosion (O, devastation, heavy, light, flash)
|
||||
explosion(O, devastation, heavy, light, flash)
|
||||
log_admin("[key_name(usr)] created an explosion ([devastation],[heavy],[light],[flash]) at ([O.x],[O.y],[O.z])")
|
||||
message_admins("[key_name_admin(usr)] created an explosion ([devastation],[heavy],[light],[flash]) at ([O.x],[O.y],[O.z])", 1)
|
||||
//feedback_add_details("admin_verb","EXPL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
feedback_add_details("admin_verb","EXPL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
return
|
||||
else
|
||||
return
|
||||
@@ -589,13 +608,13 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
empulse(O, heavy, light)
|
||||
log_admin("[key_name(usr)] created an EM Pulse ([heavy],[light]) at ([O.x],[O.y],[O.z])")
|
||||
message_admins("[key_name_admin(usr)] created an EM PUlse ([heavy],[light]) at ([O.x],[O.y],[O.z])", 1)
|
||||
//feedback_add_details("admin_verb","EMP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
feedback_add_details("admin_verb","EMP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
return
|
||||
else
|
||||
return
|
||||
|
||||
/client/proc/cmd_admin_gib(mob/M as mob in world)
|
||||
/client/proc/cmd_admin_gib(mob/M as mob in mob_list)
|
||||
set category = "Special Verbs"
|
||||
set name = "Gib"
|
||||
|
||||
@@ -616,7 +635,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
return
|
||||
|
||||
M.gib()
|
||||
//feedback_add_details("admin_verb","GIB") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
feedback_add_details("admin_verb","GIB") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/cmd_admin_gib_self()
|
||||
set name = "Gibself"
|
||||
@@ -631,12 +650,12 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
|
||||
log_admin("[key_name(usr)] used gibself.")
|
||||
message_admins("\blue [key_name_admin(usr)] used gibself.", 1)
|
||||
//feedback_add_details("admin_verb","GIBS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
feedback_add_details("admin_verb","GIBS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
/*
|
||||
/client/proc/cmd_manual_ban()
|
||||
set name = "Manual Ban"
|
||||
set category = "Special Verbs"
|
||||
if(!holder)
|
||||
if(!authenticated || !holder)
|
||||
src << "Only administrators may use this command."
|
||||
return
|
||||
var/mob/M = null
|
||||
@@ -664,7 +683,6 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
return
|
||||
if(M)
|
||||
AddBan(M.ckey, M.computer_id, reason, usr.ckey, 1, mins)
|
||||
M.unlock_medal("Banned", 1)
|
||||
M << "\red<BIG><B>You have been banned by [usr.client.ckey].\nReason: [reason].</B></BIG>"
|
||||
M << "\red This is a temporary ban, it will be removed in [mins] minutes."
|
||||
M << "\red To try to resolve this matter head to http://ss13.donglabs.com/forum/"
|
||||
@@ -680,7 +698,6 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
if(!reason)
|
||||
return
|
||||
AddBan(M.ckey, M.computer_id, reason, usr.ckey, 0, 0)
|
||||
M.unlock_medal("Banned", 1)
|
||||
M << "\red<BIG><B>You have been banned by [usr.client.ckey].\nReason: [reason].</B></BIG>"
|
||||
M << "\red This is a permanent ban."
|
||||
M << "\red To try to resolve this matter head to http://ss13.donglabs.com/forum/"
|
||||
@@ -696,36 +713,44 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
// I will both remove their SVN access and permanently ban them from my servers.
|
||||
return
|
||||
|
||||
/client/proc/cmd_admin_check_contents(mob/living/M as mob in world)
|
||||
/client/proc/cmd_admin_check_contents(mob/living/M as mob in mob_list)
|
||||
set category = "Special Verbs"
|
||||
set name = "Check Contents"
|
||||
|
||||
var/list/L = M.get_contents()
|
||||
for(var/t in L)
|
||||
usr << "[t]"
|
||||
//feedback_add_details("admin_verb","CC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
feedback_add_details("admin_verb","CC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/* This proc is DEFERRED. Does not do anything.
|
||||
/client/proc/cmd_admin_remove_plasma(area/A as area)
|
||||
/client/proc/cmd_admin_remove_plasma()
|
||||
set category = "Debug"
|
||||
set name = "Stabilize Atmos."
|
||||
set desc = "Stabilize atmos in selected area."
|
||||
if(!holder)
|
||||
src << "Only administrators may use this command."
|
||||
return
|
||||
//feedback_add_details("admin_verb","STATM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
spawn(1)
|
||||
for(var/turf/simulated/T in A)
|
||||
if(T.air)
|
||||
T.air.oxygen = T.oxygen
|
||||
T.air.carbon_dioxide = T.carbon_dioxide
|
||||
T.air.nitrogen = T.nitrogen
|
||||
T.air.toxins = T.toxins
|
||||
T.air.temperature = T.temperature
|
||||
T.air.update_values()
|
||||
|
||||
// make things update properly
|
||||
T.assume_air(new /datum/gas_mixture())
|
||||
feedback_add_details("admin_verb","STATM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
// DEFERRED
|
||||
spawn(0)
|
||||
for(var/turf/T in view())
|
||||
T.poison = 0
|
||||
T.oldpoison = 0
|
||||
T.tmppoison = 0
|
||||
T.oxygen = 755985
|
||||
T.oldoxy = 755985
|
||||
T.tmpoxy = 755985
|
||||
T.co2 = 14.8176
|
||||
T.oldco2 = 14.8176
|
||||
T.tmpco2 = 14.8176
|
||||
T.n2 = 2.844e+006
|
||||
T.on2 = 2.844e+006
|
||||
T.tn2 = 2.844e+006
|
||||
T.tsl_gas = 0
|
||||
T.osl_gas = 0
|
||||
T.sl_gas = 0
|
||||
T.temp = 293.15
|
||||
T.otemp = 293.15
|
||||
T.ttemp = 293.15
|
||||
*/
|
||||
|
||||
/client/proc/toggle_view_range()
|
||||
@@ -741,7 +766,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
log_admin("[key_name(usr)] changed their view range to [view].")
|
||||
//message_admins("\blue [key_name_admin(usr)] changed their view range to [view].", 1) //why? removed by order of XSI
|
||||
|
||||
//feedback_add_details("admin_verb","CVRA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
feedback_add_details("admin_verb","CVRA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/admin_call_shuttle()
|
||||
|
||||
@@ -767,8 +792,8 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
|
||||
emergency_shuttle.incall()
|
||||
captain_announce("The emergency shuttle has been called. It will arrive in [round(emergency_shuttle.timeleft()/60)] minutes.")
|
||||
world << sound('shuttlecalled.ogg')
|
||||
//feedback_add_details("admin_verb","CSHUT") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
world << sound('sound/AI/shuttlecalled.ogg')
|
||||
feedback_add_details("admin_verb","CSHUT") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
log_admin("[key_name(usr)] admin-called the emergency shuttle.")
|
||||
message_admins("\blue [key_name_admin(usr)] admin-called the emergency shuttle.", 1)
|
||||
return
|
||||
@@ -789,36 +814,20 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
if(confirm != "Yes") return
|
||||
|
||||
emergency_shuttle.recall()
|
||||
//feedback_add_details("admin_verb","CCSHUT") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
feedback_add_details("admin_verb","CCSHUT") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
log_admin("[key_name(usr)] admin-recalled the emergency shuttle.")
|
||||
message_admins("\blue [key_name_admin(usr)] admin-recalled the emergency shuttle.", 1)
|
||||
|
||||
return
|
||||
|
||||
/client/proc/admin_deny_shuttle()
|
||||
set category = "Admin"
|
||||
set name = "Toggle Deny Shuttle"
|
||||
|
||||
if (!ticker)
|
||||
return
|
||||
|
||||
if (!holder)
|
||||
src << "Only administrators may use this command."
|
||||
return
|
||||
|
||||
emergency_shuttle.deny_shuttle = !emergency_shuttle.deny_shuttle
|
||||
|
||||
log_admin("[key_name(src)] has [emergency_shuttle.deny_shuttle ? "denied" : "allowed"] the shuttle to be called.")
|
||||
message_admins("[key_name_admin(usr)] has [emergency_shuttle.deny_shuttle ? "denied" : "allowed"] the shuttle to be called.")
|
||||
|
||||
/client/proc/cmd_admin_attack_log(mob/M as mob in world)
|
||||
/client/proc/cmd_admin_attack_log(mob/M as mob in mob_list)
|
||||
set category = "Special Verbs"
|
||||
set name = "Attack Log"
|
||||
|
||||
usr << text("\red <b>Attack Log for []</b>", mob)
|
||||
for(var/t in M.attack_log)
|
||||
usr << t
|
||||
//feedback_add_details("admin_verb","ATTL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
feedback_add_details("admin_verb","ATTL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
|
||||
/client/proc/everyone_random()
|
||||
@@ -850,7 +859,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
usr << "<i>Remember: you can always disable the randomness by using the verb again, assuming the round hasn't started yet</i>."
|
||||
|
||||
ticker.random_players = 1
|
||||
//feedback_add_details("admin_verb","MER") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
feedback_add_details("admin_verb","MER") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/toggle_gravity_on()
|
||||
set category = "Debug"
|
||||
@@ -865,8 +874,8 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
for(var/area/A in world)
|
||||
A.gravitychange(1,A)
|
||||
|
||||
command_alert("CentComm is now beaming gravitons to your station. We apologize for any inconvience.")
|
||||
//feedback_add_details("admin_verb","TSGON") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
command_alert("CentComm is now beaming gravitons to your station. We appoligize for any inconvience.")
|
||||
feedback_add_details("admin_verb","TSGON") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/toggle_gravity_off()
|
||||
set category = "Debug"
|
||||
@@ -881,8 +890,8 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
for(var/area/A in world)
|
||||
A.gravitychange(0,A)
|
||||
|
||||
command_alert("For budget reasons, Centcomm is no longer beaming gravitons to your station. We apologize for any inconvience.")
|
||||
//feedback_add_details("admin_verb","TSGOFF") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
command_alert("For budget reasons, Centcomm is no longer beaming gravitons to your station. We appoligize for any inconvience.")
|
||||
feedback_add_details("admin_verb","TSGOFF") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
|
||||
/client/proc/toggle_random_events()
|
||||
@@ -897,33 +906,4 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
config.allow_random_events = 0
|
||||
usr << "Random events disabled"
|
||||
message_admins("Admin [key_name_admin(usr)] has disabled random events.", 1)
|
||||
//feedback_add_details("admin_verb","TRE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/rnd_check_designs()
|
||||
set category = "Debug"
|
||||
set name = "Check RnD Designs"
|
||||
set desc = "Check validity of RnD data of the consoles and server."
|
||||
|
||||
if (!holder)
|
||||
src << "Only administrators may use this command."
|
||||
return
|
||||
|
||||
var/dat = "<head><title>RnD Check</title></head>"
|
||||
|
||||
for(var/obj/machinery/computer/rdconsole/C in world)
|
||||
dat += "<b>[C.name] - RnD Console</b><br>"
|
||||
for(var/datum/design/D in C.files.known_designs)
|
||||
if(!text2path(D.build_path))
|
||||
dat += "[D.name]'s has invalid build path [D.build_path]<br>"
|
||||
dat += "<br>"
|
||||
|
||||
for(var/obj/machinery/r_n_d/server/C in world)
|
||||
dat += "<b>[C.name] - Server</b><br>"
|
||||
for(var/datum/design/D in C.files.known_designs)
|
||||
if(!text2path(D.build_path))
|
||||
dat += "[D.name]'s has invalid build path [D.build_path]<br>"
|
||||
dat += "<br>"
|
||||
|
||||
dat += "<hr><a href='?src=\ref[holder];rnd_max=1'>Max out tech levels.</a>"
|
||||
|
||||
usr << browse(dat, "window=chk_design")
|
||||
feedback_add_details("admin_verb","TRE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
@@ -51,36 +51,30 @@ var/global/sent_strike_team = 0
|
||||
break
|
||||
|
||||
//Generates a list of commandos from active ghosts. Then the user picks which characters to respawn as the commandos.
|
||||
var/mob/dead/observer/G//Basic variable to search for later.
|
||||
var/candidates_list[] = list()//candidates for being a commando out of all the active ghosts in world.
|
||||
var/commandos_list[] = list()//actual commando ghosts as picked by the user.
|
||||
for(G in world)
|
||||
if(G.client)
|
||||
if(!G.client.holder && ((G.client.inactivity/10)/60) <= 5) //Whoever called/has the proc won't be added to the list.
|
||||
// if(((G.client.inactivity/10)/60) <= 5) //Removing it allows even the caller to jump in. Good for testing.
|
||||
candidates_list += G.client//Add their client to list.
|
||||
for(var/i=commandos_possible,(i>0&&candidates_list.len),i--)//Decrease with every commando selected.
|
||||
var/client/G_client = input("Pick characters to spawn as the commandos. This will go on until there either no more ghosts to pick from or the slots are full.", "Active Players") as null|anything in candidates_list//It will auto-pick a person when there is only one candidate.
|
||||
if(G_client)//They may have logged out when the admin was choosing people. Or were not chosen. Would run time error otherwise.
|
||||
candidates_list -= G_client//Subtract from candidates.
|
||||
commandos_list += G_client.mob//Add their ghost to commandos.
|
||||
var/list/candidates = list() //candidates for being a commando out of all the active ghosts in world.
|
||||
var/list/commandos = list() //actual commando ghosts as picked by the user.
|
||||
for(var/mob/dead/observer/G in player_list)
|
||||
if(!G.client.holder && ((G.client.inactivity/10)/60) <= 5) //Whoever called/has the proc won't be added to the list.
|
||||
if(!(G.mind && G.mind.current && G.mind.current.stat != DEAD))
|
||||
candidates += G.key
|
||||
for(var/i=commandos_possible,(i>0&&candidates.len),i--)//Decrease with every commando selected.
|
||||
var/candidate = input("Pick characters to spawn as the commandos. This will go on until there either no more ghosts to pick from or the slots are full.", "Active Players") as null|anything in candidates //It will auto-pick a person when there is only one candidate.
|
||||
candidates -= candidate //Subtract from candidates.
|
||||
commandos += candidate//Add their ghost to commandos.
|
||||
|
||||
//Spawns commandos and equips them.
|
||||
for (var/obj/effect/landmark/L in world)
|
||||
for(var/obj/effect/landmark/L in world)
|
||||
if(commando_number<=0) break
|
||||
if (L.name == "Commando")
|
||||
leader_selected = commando_number == 1?1:0
|
||||
|
||||
var/mob/living/carbon/human/new_commando = create_death_commando(L, leader_selected)
|
||||
|
||||
if(commandos_list.len)
|
||||
G = pick(commandos_list)
|
||||
new_commando.mind.key = G.key//For mind stuff.
|
||||
new_commando.key = G.key
|
||||
if(commandos.len)
|
||||
new_commando.key = pick(commandos)
|
||||
commandos -= new_commando.key
|
||||
new_commando.internal = new_commando.s_store
|
||||
new_commando.internals.icon_state = "internal1"
|
||||
commandos_list -= G
|
||||
del(G)
|
||||
|
||||
//So they don't forget their code or mission.
|
||||
if(nuke_code)
|
||||
@@ -96,7 +90,7 @@ var/global/sent_strike_team = 0
|
||||
if (L.name == "Commando_Manual")
|
||||
//new /obj/item/weapon/gun/energy/pulse_rifle(L.loc)
|
||||
var/obj/item/weapon/paper/P = new(L.loc)
|
||||
P.info = "<p><b>Good morning soldier!</b>. This compact guide will familiarize you with standard operating procedure. There are three basic rules to follow:<br>#1 Work as a team.<br>#2 Accomplish your objective at all costs.<br>#3 Leave no witnesses.<br>You are fully equipped and stocked for your mission--before departing on the Spec. Ops. Shuttle due South, make sure that all operatives are ready. Actual mission objective will be relayed to you by Central Command through your headsets.<br>If deemed appropriate, Central Command will also allow members of your team to equip assault power-armor for the mission. You will find the armor storage due West of your position. Once you are ready to leave, utilize the Special Operations shuttle console and toggle the hull doors via the other console.</p><p>In the event that the team does not accomplish their assigned objective in a timely manner, or finds no other way to do so, attached below are instructions on how to operate a NanoTrasen Nuclear Device. Your operations <b>LEADER</b> is provided with a nuclear authentication disk and a pin-pointer for this reason. You may easily recognize them by their rank: Lieutenant, Captain, or Major. The nuclear device itself will be present somewhere on your destination.</p><p>Hello and thank you for choosing NanoTrasen for your nuclear information needs. Today's crash course will deal with the operation of a Fission Class NanoTrasen made Nuclear Device.<br>First and foremost, <b>DO NOT TOUCH ANYTHING UNTIL THE BOMB IS IN PLACE.</b> Pressing any button on the compacted bomb will cause it to extend and bolt itself into place. If this is done to unbolt it one must completely log in which at this time may not be possible.<br>To make the device functional:<br>#1 Place bomb in designated detonation zone<br> #2 Extend and anchor bomb (attack with hand).<br>#3 Insert Nuclear Auth. Disk into slot.<br>#4 Type numeric code into keypad ([nuke_code]).<br>Note: If you make a mistake press R to reset the device.<br>#5 Press the E button to log onto the device.<br>You now have activated the device. To deactivate the buttons at anytime, for example when you have already prepped the bomb for detonation, remove the authentication disk OR press the R on the keypad. Now the bomb CAN ONLY be detonated using the timer. A manual detonation is not an option.<br>Note: Toggle off the <b>SAFETY</b>.<br>Use the - - and + + to set a detonation time between 5 seconds and 10 minutes. Then press the timer toggle button to start the countdown. Now remove the authentication disk so that the buttons deactivate.<br>Note: <b>THE BOMB IS STILL SET AND WILL DETONATE</b><br>Now before you remove the disk if you need to move the bomb you can: Toggle off the anchor, move it, and re-anchor.</p><p>The nuclear authorization code is: <b>[nuke_code ? nuke_code : "None provided"]</b></p><p><b>Good luck, soldier!</b></p>"
|
||||
P.info = "<p><b>Good morning soldier!</b>. This compact guide will familiarize you with standard operating procedure. There are three basic rules to follow:<br>#1 Work as a team.<br>#2 Accomplish your objective at all costs.<br>#3 Leave no witnesses.<br>You are fully equipped and stocked for your mission--before departing on the Spec. Ops. Shuttle due South, make sure that all operatives are ready. Actual mission objective will be relayed to you by Central Command through your headsets.<br>If deemed appropriate, Central Command will also allow members of your team to equip assault power-armor for the mission. You will find the armor storage due West of your position. Once you are ready to leave, utilize the Special Operations shuttle console and toggle the hull doors via the other console.</p><p>In the event that the team does not accomplish their assigned objective in a timely manner, or finds no other way to do so, attached below are instructions on how to operate a Nanotrasen Nuclear Device. Your operations <b>LEADER</b> is provided with a nuclear authentication disk and a pin-pointer for this reason. You may easily recognize them by their rank: Lieutenant, Captain, or Major. The nuclear device itself will be present somewhere on your destination.</p><p>Hello and thank you for choosing Nanotrasen for your nuclear information needs. Today's crash course will deal with the operation of a Fission Class Nanotrasen made Nuclear Device.<br>First and foremost, <b>DO NOT TOUCH ANYTHING UNTIL THE BOMB IS IN PLACE.</b> Pressing any button on the compacted bomb will cause it to extend and bolt itself into place. If this is done to unbolt it one must completely log in which at this time may not be possible.<br>To make the device functional:<br>#1 Place bomb in designated detonation zone<br> #2 Extend and anchor bomb (attack with hand).<br>#3 Insert Nuclear Auth. Disk into slot.<br>#4 Type numeric code into keypad ([nuke_code]).<br>Note: If you make a mistake press R to reset the device.<br>#5 Press the E button to log onto the device.<br>You now have activated the device. To deactivate the buttons at anytime, for example when you have already prepped the bomb for detonation, remove the authentication disk OR press the R on the keypad. Now the bomb CAN ONLY be detonated using the timer. A manual detonation is not an option.<br>Note: Toggle off the <b>SAFETY</b>.<br>Use the - - and + + to set a detonation time between 5 seconds and 10 minutes. Then press the timer toggle button to start the countdown. Now remove the authentication disk so that the buttons deactivate.<br>Note: <b>THE BOMB IS STILL SET AND WILL DETONATE</b><br>Now before you remove the disk if you need to move the bomb you can: Toggle off the anchor, move it, and re-anchor.</p><p>The nuclear authorization code is: <b>[nuke_code ? nuke_code : "None provided"]</b></p><p><b>Good luck, soldier!</b></p>"
|
||||
P.name = "Spec. Ops. Manual"
|
||||
|
||||
for (var/obj/effect/landmark/L in world)
|
||||
@@ -106,7 +100,7 @@ var/global/sent_strike_team = 0
|
||||
|
||||
message_admins("\blue [key_name_admin(usr)] has spawned a CentCom strike squad.", 1)
|
||||
log_admin("[key_name(usr)] used Spawn Death Squad.")
|
||||
//feedback_add_details("admin_verb","DTHS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
feedback_add_details("admin_verb","DTHS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/create_death_commando(obj/spawn_location, leader_selected = 0)
|
||||
var/mob/living/carbon/human/new_commando = new(spawn_location.loc)
|
||||
@@ -125,17 +119,11 @@ var/global/sent_strike_team = 0
|
||||
new_commando.dna.ready_dna(new_commando)//Creates DNA.
|
||||
|
||||
//Creates mind stuff.
|
||||
new_commando.mind = new
|
||||
new_commando.mind.current = new_commando
|
||||
new_commando.mind.original = new_commando
|
||||
new_commando.mind_initialize()
|
||||
new_commando.mind.assigned_role = "MODE"
|
||||
new_commando.mind.special_role = "Death Commando"
|
||||
if(!(new_commando.mind in ticker.minds))
|
||||
ticker.minds += new_commando.mind//Adds them to regular mind list.
|
||||
if(!(new_commando.mind in ticker.mode.traitors))//If they weren't already an extra traitor.
|
||||
ticker.mode.traitors += new_commando.mind//Adds them to current traitor list. Which is really the extra antagonist list.
|
||||
ticker.mode.traitors |= new_commando.mind//Adds them to current traitor list. Which is really the extra antagonist list.
|
||||
new_commando.equip_death_commando(leader_selected)
|
||||
// del(spawn_location)
|
||||
return new_commando
|
||||
|
||||
/mob/living/carbon/human/proc/equip_death_commando(leader_selected = 0)
|
||||
@@ -145,42 +133,40 @@ var/global/sent_strike_team = 0
|
||||
|
||||
var/obj/item/device/radio/R = new /obj/item/device/radio/headset(src)
|
||||
R.set_frequency(1441)
|
||||
equip_if_possible(R, slot_ears)
|
||||
equip_to_slot_or_del(R, slot_ears)
|
||||
if (leader_selected == 0)
|
||||
equip_if_possible(new /obj/item/clothing/under/color/green(src), slot_w_uniform)
|
||||
equip_to_slot_or_del(new /obj/item/clothing/under/color/green(src), slot_w_uniform)
|
||||
else
|
||||
equip_if_possible(new /obj/item/clothing/under/rank/centcom_officer(src), slot_w_uniform)
|
||||
equip_if_possible(new /obj/item/clothing/shoes/swat(src), slot_shoes)
|
||||
equip_if_possible(new /obj/item/clothing/suit/armor/swat(src), slot_wear_suit)
|
||||
equip_if_possible(new /obj/item/clothing/gloves/swat(src), slot_gloves)
|
||||
equip_if_possible(new /obj/item/clothing/head/helmet/space/deathsquad(src), slot_head)
|
||||
equip_if_possible(new /obj/item/clothing/mask/gas/swat(src), slot_wear_mask)
|
||||
equip_if_possible(new /obj/item/clothing/glasses/thermal(src), slot_glasses)
|
||||
equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_officer(src), slot_w_uniform)
|
||||
equip_to_slot_or_del(new /obj/item/clothing/shoes/swat(src), slot_shoes)
|
||||
equip_to_slot_or_del(new /obj/item/clothing/suit/armor/swat(src), slot_wear_suit)
|
||||
equip_to_slot_or_del(new /obj/item/clothing/gloves/swat(src), slot_gloves)
|
||||
equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/deathsquad(src), slot_head)
|
||||
equip_to_slot_or_del(new /obj/item/clothing/mask/gas/swat(src), slot_wear_mask)
|
||||
equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal(src), slot_glasses)
|
||||
|
||||
equip_if_possible(new /obj/item/weapon/storage/backpack/security(src), slot_back)
|
||||
equip_if_possible(new /obj/item/weapon/storage/box(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/security(src), slot_back)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/storage/box(src), slot_in_backpack)
|
||||
|
||||
equip_if_possible(new /obj/item/ammo_magazine/a357(src), slot_in_backpack)
|
||||
equip_if_possible(new /obj/item/weapon/storage/firstaid/adv(src), slot_in_backpack)
|
||||
equip_if_possible(new /obj/item/weapon/storage/flashbang_kit(src), slot_in_backpack)
|
||||
equip_if_possible(new /obj/item/device/flashlight(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/ammo_magazine/a357(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/regular(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/storage/flashbang_kit(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/device/flashlight(src), slot_in_backpack)
|
||||
if (!leader_selected)
|
||||
equip_if_possible(new /obj/item/weapon/plastique(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/plastique(src), slot_in_backpack)
|
||||
else
|
||||
equip_if_possible(new /obj/item/weapon/pinpointer(src), slot_in_backpack)
|
||||
equip_if_possible(new /obj/item/weapon/disk/nuclear(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/pinpointer(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/disk/nuclear(src), slot_in_backpack)
|
||||
|
||||
equip_if_possible(new /obj/item/weapon/melee/energy/sword(src), slot_l_store)
|
||||
equip_if_possible(new /obj/item/weapon/flashbang(src), slot_r_store)
|
||||
equip_if_possible(new /obj/item/weapon/tank/emergency_oxygen(src), slot_s_store)
|
||||
equip_if_possible(new /obj/item/weapon/gun/projectile/mateba(src), slot_belt)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword(src), slot_l_store)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/grenade/flashbang(src), slot_r_store)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/tank/emergency_oxygen(src), slot_s_store)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/mateba(src), slot_belt)
|
||||
|
||||
equip_if_possible(new /obj/item/weapon/gun/energy/pulse_rifle(src), slot_r_hand)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse_rifle(src), slot_r_hand)
|
||||
|
||||
|
||||
var/datum/organ/external/O = src.organs[pick(src.organs)]
|
||||
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(O)
|
||||
O.implant += L
|
||||
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(src)//Here you go Deuryn
|
||||
L.imp_in = src
|
||||
L.implanted = 1
|
||||
|
||||
@@ -190,10 +176,10 @@ var/global/sent_strike_team = 0
|
||||
W.name = "[real_name]'s ID Card"
|
||||
W.icon_state = "centcom"
|
||||
W.access = get_all_accesses()//They get full station access.
|
||||
W.access += list(ACCESS_CENT_GENERAL, ACCESS_CENT_SPECOPS, ACCESS_CENT_LIVING, ACCESS_CENT_STORAGE)//Let's add their alloted CentCom access.
|
||||
W.access += list(access_cent_general, access_cent_specops, access_cent_living, access_cent_storage)//Let's add their alloted CentCom access.
|
||||
W.assignment = "Death Commando"
|
||||
W.registered_name = real_name
|
||||
equip_if_possible(W, slot_wear_id)
|
||||
equip_to_slot_or_del(W, slot_wear_id)
|
||||
|
||||
resistances += "alien_embryo"
|
||||
return 1
|
||||
@@ -51,36 +51,30 @@ var/global/sent_syndicate_strike_team = 0
|
||||
break
|
||||
|
||||
//Generates a list of commandos from active ghosts. Then the user picks which characters to respawn as the commandos.
|
||||
var/mob/dead/observer/G//Basic variable to search for later.
|
||||
var/candidates_list[] = list()//candidates for being a commando out of all the active ghosts in world.
|
||||
var/syndicate_commandos_list[] = list()//actual commando ghosts as picked by the user.
|
||||
for(G in world)
|
||||
if(G.client)
|
||||
if(!G.client.holder && ((G.client.inactivity/10)/60) <= 5) //Whoever called/has the proc won't be added to the list.
|
||||
// if(((G.client.inactivity/10)/60) <= 5) //Removing it allows even the caller to jump in. Good for testing.
|
||||
candidates_list += G.client//Add their client to list.
|
||||
for(var/i=syndicate_commandos_possible,(i>0&&candidates_list.len),i--)//Decrease with every commando selected.
|
||||
var/client/G_client = input("Pick characters to spawn as the commandos. This will go on until there either no more ghosts to pick from or the slots are full.", "Active Players") as null|anything in candidates_list//It will auto-pick a person when there is only one candidate.
|
||||
if(G_client)//They may have logged out when the admin was choosing people. Or were not chosen. Would run time error otherwise.
|
||||
candidates_list -= G_client//Subtract from candidates.
|
||||
syndicate_commandos_list += G_client.mob//Add their ghost to commandos.
|
||||
var/list/candidates = list() //candidates for being a commando out of all the active ghosts in world.
|
||||
var/list/commandos = list() //actual commando ghosts as picked by the user.
|
||||
for(var/mob/dead/observer/G in player_list)
|
||||
if(!G.client.holder && ((G.client.inactivity/10)/60) <= 5) //Whoever called/has the proc won't be added to the list.
|
||||
if(!(G.mind && G.mind.current && G.mind.current.stat != DEAD))
|
||||
candidates += G.key
|
||||
for(var/i=commandos_possible,(i>0&&candidates.len),i--)//Decrease with every commando selected.
|
||||
var/candidate = input("Pick characters to spawn as the commandos. This will go on until there either no more ghosts to pick from or the slots are full.", "Active Players") as null|anything in candidates //It will auto-pick a person when there is only one candidate.
|
||||
candidates -= candidate //Subtract from candidates.
|
||||
commandos += candidate//Add their ghost to commandos.
|
||||
|
||||
//Spawns commandos and equips them.
|
||||
for (var/obj/effect/landmark/L in world)
|
||||
for(var/obj/effect/landmark/L in world)
|
||||
if(syndicate_commando_number<=0) break
|
||||
if (L.name == "Syndicate-Commando")
|
||||
syndicate_leader_selected = syndicate_commando_number == 1?1:0
|
||||
|
||||
var/mob/living/carbon/human/new_syndicate_commando = create_syndicate_death_commando(L, syndicate_leader_selected)
|
||||
|
||||
if(syndicate_commandos_list.len)
|
||||
G = pick(syndicate_commandos_list)
|
||||
new_syndicate_commando.mind.key = G.key//For mind stuff.
|
||||
new_syndicate_commando.key = G.key
|
||||
if(commandos.len)
|
||||
new_syndicate_commando.key = pick(commandos)
|
||||
commandos -= new_syndicate_commando.key
|
||||
new_syndicate_commando.internal = new_syndicate_commando.s_store
|
||||
new_syndicate_commando.internals.icon_state = "internal1"
|
||||
syndicate_commandos_list -= G
|
||||
del(G)
|
||||
|
||||
//So they don't forget their code or mission.
|
||||
if(nuke_code)
|
||||
@@ -96,7 +90,7 @@ var/global/sent_syndicate_strike_team = 0
|
||||
// if (L.name == "Commando_Manual")
|
||||
//new /obj/item/weapon/gun/energy/pulse_rifle(L.loc)
|
||||
// var/obj/item/weapon/paper/P = new(L.loc)
|
||||
// P.info = "<p><b>Good morning soldier!</b>. This compact guide will familiarize you with standard operating procedure. There are three basic rules to follow:<br>#1 Work as a team.<br>#2 Accomplish your objective at all costs.<br>#3 Leave no witnesses.<br>You are fully equipped and stocked for your mission--before departing on the Spec. Ops. Shuttle due South, make sure that all operatives are ready. Actual mission objective will be relayed to you by Central Command through your headsets.<br>If deemed appropriate, Central Command will also allow members of your team to equip assault power-armor for the mission. You will find the armor storage due West of your position. Once you are ready to leave, utilize the Special Operations shuttle console and toggle the hull doors via the other console.</p><p>In the event that the team does not accomplish their assigned objective in a timely manner, or finds no other way to do so, attached below are instructions on how to operate a NanoTrasen Nuclear Device. Your operations <b>LEADER</b> is provided with a nuclear authentication disk and a pin-pointer for this reason. You may easily recognize them by their rank: Lieutenant, Captain, or Major. The nuclear device itself will be present somewhere on your destination.</p><p>Hello and thank you for choosing NanoTrasen for your nuclear information needs. Today's crash course will deal with the operation of a Fission Class NanoTrasen made Nuclear Device.<br>First and foremost, <b>DO NOT TOUCH ANYTHING UNTIL THE BOMB IS IN PLACE.</b> Pressing any button on the compacted bomb will cause it to extend and bolt itself into place. If this is done to unbolt it one must completely log in which at this time may not be possible.<br>To make the device functional:<br>#1 Place bomb in designated detonation zone<br> #2 Extend and anchor bomb (attack with hand).<br>#3 Insert Nuclear Auth. Disk into slot.<br>#4 Type numeric code into keypad ([nuke_code]).<br>Note: If you make a mistake press R to reset the device.<br>#5 Press the E button to log onto the device.<br>You now have activated the device. To deactivate the buttons at anytime, for example when you have already prepped the bomb for detonation, remove the authentication disk OR press the R on the keypad. Now the bomb CAN ONLY be detonated using the timer. A manual detonation is not an option.<br>Note: Toggle off the <b>SAFETY</b>.<br>Use the - - and + + to set a detonation time between 5 seconds and 10 minutes. Then press the timer toggle button to start the countdown. Now remove the authentication disk so that the buttons deactivate.<br>Note: <b>THE BOMB IS STILL SET AND WILL DETONATE</b><br>Now before you remove the disk if you need to move the bomb you can: Toggle off the anchor, move it, and re-anchor.</p><p>The nuclear authorization code is: <b>[nuke_code ? nuke_code : "None provided"]</b></p><p><b>Good luck, soldier!</b></p>"
|
||||
// P.info = "<p><b>Good morning soldier!</b>. This compact guide will familiarize you with standard operating procedure. There are three basic rules to follow:<br>#1 Work as a team.<br>#2 Accomplish your objective at all costs.<br>#3 Leave no witnesses.<br>You are fully equipped and stocked for your mission--before departing on the Spec. Ops. Shuttle due South, make sure that all operatives are ready. Actual mission objective will be relayed to you by Central Command through your headsets.<br>If deemed appropriate, Central Command will also allow members of your team to equip assault power-armor for the mission. You will find the armor storage due West of your position. Once you are ready to leave, utilize the Special Operations shuttle console and toggle the hull doors via the other console.</p><p>In the event that the team does not accomplish their assigned objective in a timely manner, or finds no other way to do so, attached below are instructions on how to operate a Nanotrasen Nuclear Device. Your operations <b>LEADER</b> is provided with a nuclear authentication disk and a pin-pointer for this reason. You may easily recognize them by their rank: Lieutenant, Captain, or Major. The nuclear device itself will be present somewhere on your destination.</p><p>Hello and thank you for choosing Nanotrasen for your nuclear information needs. Today's crash course will deal with the operation of a Fission Class Nanotrasen made Nuclear Device.<br>First and foremost, <b>DO NOT TOUCH ANYTHING UNTIL THE BOMB IS IN PLACE.</b> Pressing any button on the compacted bomb will cause it to extend and bolt itself into place. If this is done to unbolt it one must completely log in which at this time may not be possible.<br>To make the device functional:<br>#1 Place bomb in designated detonation zone<br> #2 Extend and anchor bomb (attack with hand).<br>#3 Insert Nuclear Auth. Disk into slot.<br>#4 Type numeric code into keypad ([nuke_code]).<br>Note: If you make a mistake press R to reset the device.<br>#5 Press the E button to log onto the device.<br>You now have activated the device. To deactivate the buttons at anytime, for example when you have already prepped the bomb for detonation, remove the authentication disk OR press the R on the keypad. Now the bomb CAN ONLY be detonated using the timer. A manual detonation is not an option.<br>Note: Toggle off the <b>SAFETY</b>.<br>Use the - - and + + to set a detonation time between 5 seconds and 10 minutes. Then press the timer toggle button to start the countdown. Now remove the authentication disk so that the buttons deactivate.<br>Note: <b>THE BOMB IS STILL SET AND WILL DETONATE</b><br>Now before you remove the disk if you need to move the bomb you can: Toggle off the anchor, move it, and re-anchor.</p><p>The nuclear authorization code is: <b>[nuke_code ? nuke_code : "None provided"]</b></p><p><b>Good luck, soldier!</b></p>"
|
||||
// P.name = "Spec. Ops. Manual"
|
||||
|
||||
for (var/obj/effect/landmark/L in world)
|
||||
@@ -106,7 +100,7 @@ var/global/sent_syndicate_strike_team = 0
|
||||
|
||||
message_admins("\blue [key_name_admin(usr)] has spawned a Syndicate strike squad.", 1)
|
||||
log_admin("[key_name(usr)] used Spawn Syndicate Squad.")
|
||||
//feedback_add_details("admin_verb","SDTHS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
feedback_add_details("admin_verb","SDTHS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/create_syndicate_death_commando(obj/spawn_location, syndicate_leader_selected = 0)
|
||||
var/mob/living/carbon/human/new_syndicate_commando = new(spawn_location.loc)
|
||||
@@ -125,15 +119,10 @@ var/global/sent_syndicate_strike_team = 0
|
||||
new_syndicate_commando.dna.ready_dna(new_syndicate_commando)//Creates DNA.
|
||||
|
||||
//Creates mind stuff.
|
||||
new_syndicate_commando.mind = new
|
||||
new_syndicate_commando.mind.current = new_syndicate_commando
|
||||
new_syndicate_commando.mind.original = new_syndicate_commando
|
||||
new_syndicate_commando.mind_initialize()
|
||||
new_syndicate_commando.mind.assigned_role = "MODE"
|
||||
new_syndicate_commando.mind.special_role = "Syndicate Commando"
|
||||
if(!(new_syndicate_commando.mind in ticker.minds))
|
||||
ticker.minds += new_syndicate_commando.mind//Adds them to regular mind list.
|
||||
if(!(new_syndicate_commando.mind in ticker.mode.traitors))//If they weren't already an extra traitor.
|
||||
ticker.mode.traitors += new_syndicate_commando.mind//Adds them to current traitor list. Which is really the extra antagonist list.
|
||||
ticker.mode.traitors |= new_syndicate_commando.mind //Adds them to current traitor list. Which is really the extra antagonist list.
|
||||
new_syndicate_commando.equip_syndicate_commando(syndicate_leader_selected)
|
||||
del(spawn_location)
|
||||
return new_syndicate_commando
|
||||
@@ -143,51 +132,51 @@ var/global/sent_syndicate_strike_team = 0
|
||||
camera.network = "Syndicate"
|
||||
camera.c_tag = real_name
|
||||
|
||||
var/obj/item/device/radio/R = new /obj/item/device/radio/headset(src)
|
||||
R.set_frequency(NUKE_FREQ) //Same frequency as the syndicate team in Nuke mode. DMTG
|
||||
equip_if_possible(R, slot_ears)
|
||||
equip_if_possible(new /obj/item/clothing/under/syndicate(src), slot_w_uniform)
|
||||
equip_if_possible(new /obj/item/clothing/shoes/swat(src), slot_shoes)
|
||||
var/obj/item/device/radio/R = new /obj/item/device/radio/headset/syndicate(src)
|
||||
R.set_frequency(SYND_FREQ) //Same frequency as the syndicate team in Nuke mode.
|
||||
equip_to_slot_or_del(R, slot_ears)
|
||||
equip_to_slot_or_del(new /obj/item/clothing/under/syndicate(src), slot_w_uniform)
|
||||
equip_to_slot_or_del(new /obj/item/clothing/shoes/swat(src), slot_shoes)
|
||||
if (!syndicate_leader_selected)
|
||||
equip_if_possible(new /obj/item/clothing/suit/space/syndicate/elite(src), slot_wear_suit)
|
||||
equip_to_slot_or_del(new /obj/item/clothing/suit/space/syndicate/black(src), slot_wear_suit)
|
||||
else
|
||||
equip_if_possible(new /obj/item/clothing/suit/space/syndicate/elite/leader(src), slot_wear_suit)
|
||||
equip_if_possible(new /obj/item/clothing/gloves/swat(src), slot_gloves)
|
||||
equip_to_slot_or_del(new /obj/item/clothing/suit/space/syndicate/black/red(src), slot_wear_suit)
|
||||
equip_to_slot_or_del(new /obj/item/clothing/gloves/swat(src), slot_gloves)
|
||||
if (!syndicate_leader_selected)
|
||||
equip_if_possible(new /obj/item/clothing/head/helmet/space/syndicate/elite(src), slot_head)
|
||||
equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/syndicate/black(src), slot_head)
|
||||
else
|
||||
equip_if_possible(new /obj/item/clothing/head/helmet/space/syndicate/elite/leader(src), slot_head)
|
||||
equip_if_possible(new /obj/item/clothing/mask/gas/syndicate(src), slot_wear_mask)
|
||||
equip_if_possible(new /obj/item/clothing/glasses/thermal(src), slot_glasses)
|
||||
equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/syndicate/black/red(src), slot_head)
|
||||
equip_to_slot_or_del(new /obj/item/clothing/mask/gas/syndicate(src), slot_wear_mask)
|
||||
equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal(src), slot_glasses)
|
||||
|
||||
equip_if_possible(new /obj/item/weapon/storage/backpack/security(src), slot_back)
|
||||
equip_if_possible(new /obj/item/weapon/storage/box(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/security(src), slot_back)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/storage/box(src), slot_in_backpack)
|
||||
|
||||
equip_if_possible(new /obj/item/ammo_magazine/c45(src), slot_in_backpack)
|
||||
equip_if_possible(new /obj/item/weapon/storage/firstaid/adv(src), slot_in_backpack)
|
||||
equip_if_possible(new /obj/item/weapon/plastique(src), slot_in_backpack)
|
||||
equip_if_possible(new /obj/item/device/flashlight(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/ammo_magazine/c45(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/regular(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/plastique(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/device/flashlight(src), slot_in_backpack)
|
||||
if (!syndicate_leader_selected)
|
||||
equip_if_possible(new /obj/item/weapon/plastique(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/plastique(src), slot_in_backpack)
|
||||
else
|
||||
equip_if_possible(new /obj/item/weapon/pinpointer(src), slot_in_backpack)
|
||||
equip_if_possible(new /obj/item/weapon/disk/nuclear(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/pinpointer(src), slot_in_backpack)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/disk/nuclear(src), slot_in_backpack)
|
||||
|
||||
equip_if_possible(new /obj/item/weapon/melee/energy/sword(src), slot_l_store)
|
||||
equip_if_possible(new /obj/item/weapon/empgrenade(src), slot_r_store)
|
||||
equip_if_possible(new /obj/item/weapon/tank/emergency_oxygen(src), slot_s_store)
|
||||
equip_if_possible(new /obj/item/weapon/gun/projectile/silenced(src), slot_belt)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword(src), slot_l_store)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/grenade/empgrenade(src), slot_r_store)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/tank/emergency_oxygen(src), slot_s_store)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/silenced(src), slot_belt)
|
||||
|
||||
equip_if_possible(new /obj/item/weapon/gun/energy/pulse_rifle(src), slot_r_hand) //Will change to something different at a later time -- Superxpdude
|
||||
equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse_rifle(src), slot_r_hand) //Will change to something different at a later time -- Superxpdude
|
||||
|
||||
var/obj/item/weapon/card/id/syndicate/W = new(src) //Untrackable by AI
|
||||
W.name = "[real_name]'s ID Card"
|
||||
W.icon_state = "id"
|
||||
W.access = get_all_accesses()//They get full station access because obviously the syndicate has HAAAX, and can make special IDs for their most elite members.
|
||||
W.access += list(ACCESS_CENT_GENERAL, ACCESS_CENT_SPECOPS, ACCESS_CENT_LIVING, ACCESS_CENT_STORAGE, ACCESS_SYNDICATE)//Let's add their forged CentCom access and syndicate access.
|
||||
W.access += list(access_cent_general, access_cent_specops, access_cent_living, access_cent_storage, access_syndicate)//Let's add their forged CentCom access and syndicate access.
|
||||
W.assignment = "Syndicate Commando"
|
||||
W.registered_name = real_name
|
||||
equip_if_possible(W, slot_wear_id)
|
||||
equip_to_slot_or_del(W, slot_wear_id)
|
||||
|
||||
resistances += "alien_embryo"
|
||||
return 1
|
||||
@@ -5,18 +5,18 @@
|
||||
if(ticker.current_state > GAME_STATE_PREGAME)
|
||||
usr << "This option is currently only usable during pregame. This may change at a later date."
|
||||
return
|
||||
if(job_master)
|
||||
if(job_master && ticker)
|
||||
var/datum/job/job = job_master.GetJob("AI")
|
||||
if(!job)
|
||||
usr << "Unable to locate the AI job"
|
||||
return
|
||||
|
||||
if(job.spawn_positions >= 3)
|
||||
job.spawn_positions -= 2
|
||||
if(ticker.triai)
|
||||
ticker.triai = 0
|
||||
usr << "Only one AI will be spawned at round start."
|
||||
message_admins("\blue [key_name_admin(usr)] has toggled off triple AIs at round start.", 1)
|
||||
else
|
||||
job.spawn_positions += 2
|
||||
ticker.triai = 1
|
||||
usr << "There will be an AI Triumvirate at round start."
|
||||
message_admins("\blue [key_name_admin(usr)] has toggled on triple AIs at round start.", 1)
|
||||
feedback_add_details("admin_verb","CAIT") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user