Adminspawn-only proc call gun (#31732)

* Adminspawn-only proc call gun

* Can't forget this

* Let there be gunk

* Here too

* Here too

* This is nicer

* Less messy in some cases

* Should be this permission to be consistent

Co-authored-by: kanef <kanef9x@protonmail.com>
This commit is contained in:
kane-f
2022-01-11 01:01:55 +00:00
committed by GitHub
parent 97c678ea1b
commit 5d9af4cc30
8 changed files with 96 additions and 17 deletions

View File

@@ -37,6 +37,7 @@ var/list/fuckup_step = list('sound/effects/fuckupstep1.ogg', 'sound/effects/fuck
var/list/jingle_sound = list('sound/items/jinglebell1.ogg', 'sound/items/jinglebell2.ogg', 'sound/items/jinglebell3.ogg')
var/list/disappear_sound = list('sound/effects/disappear_1.ogg', 'sound/effects/disappear_2.ogg', 'sound/effects/disappear_3.ogg')
var/list/pd_wail_sound = list('sound/voice/pdwail1.ogg', 'sound/voice/pdwail2.ogg', 'sound/voice/pdwail3.ogg')
var/list/procgun_sound = list('sound/weapons/procgun1.ogg', 'sound/weapons/procgun2.ogg')
//var/list/gun_sound = list('sound/weapons/Gunshot.ogg', 'sound/weapons/Gunshot2.ogg','sound/weapons/Gunshot3.ogg','sound/weapons/Gunshot4.ogg')
//gas_modified controls if a sound is affected by how much gas there is in the atmosphere of the source
@@ -239,5 +240,7 @@ var/const/SURROUND_CAP = 7
soundin = pick(disappear_sound)
if ("pd_wail_sound")
soundin = pick(pd_wail_sound)
if ("procgun_sound")
soundin = pick(procgun_sound)
//if ("gunshot") soundin = pick(gun_sound)
return soundin

View File

@@ -1332,24 +1332,36 @@ var/global/floorIsLava = 0
var/chosen = filter_list_input("Select an atom type", "Spawn Atom", get_matching_types(object, /atom))
if(!chosen)
return
//preloader is hooked to atom/New(), and is automatically disabled once it 'loads' an object
_preloader.setup(varchanges, chosen)
if(ispath(chosen,/turf))
var/turf/T = get_turf(usr.loc)
T.ChangeTurf(chosen)
else if(ispath(chosen, /area))
var/area/A = locate(chosen)
var/turf/T = get_turf(usr.loc)
T.set_area(A)
else
new chosen(usr.loc)
var/atom/location = usr.loc
location.spawn_at(chosen, varchanges)
log_admin("[key_name(usr)] spawned [chosen] at ([usr.x],[usr.y],[usr.z])")
feedback_add_details("admin_verb","SA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
// Helper functions for proc call madness
/atom/proc/spawn_at(var/type, var/list/varchanges = list())
if(!ispath(type))
return
//preloader is hooked to atom/New(), and is automatically disabled once it 'loads' an object
_preloader.setup(varchanges, type)
if(ispath(type,/turf))
var/turf/T = get_turf(src)
T.ChangeTurf(type)
else if(ispath(type, /area))
var/area/A = locate(type)
var/turf/T = get_turf(src)
T.set_area(A)
else
new type(src)
/atom/proc/spawn_at_turf(var/type, var/list/varchanges = list())
if(isarea(src))
return
var/turf/T = get_turf(src)
T.spawn_at(type,varchanges)
/datum/admins/proc/show_role_panel(var/mob/M in mob_list)
set category = "Admin"
set desc = "Edit mobs's Job, Roles, and Factions"

View File

@@ -0,0 +1,62 @@
/obj/item/weapon/gun/procgun
desc = "Oh no..."
name = "proc gun"
icon = 'icons/obj/device.dmi'
icon_state = "eftpos" // We gmod now (looks like toolgun)
w_class = W_CLASS_SMALL
recoil = 0
fire_delay = 0
fire_sound = "procgun_sound"
var/procname
var/list/procargs = list()
var/static/list/bad_procs = list("gib","ex_act","singularity_act","death")
/obj/item/weapon/gun/procgun/attack_self(mob/user)
if(!user.check_rights(R_DEBUG))
to_chat(user,"<span class='warning'>You do not have the divine authority to modify what this gun does.</span>")
return
procname = input("Proc path to call on target hit, eg: /proc/fake_blood","Path:", null) as text|null
if(!procname)
return
var/argnum = input("Number of arguments","Number:",0) as num|null
if(!argnum && (argnum!=0))
return
procargs.len = argnum // Expand to right length
var/i
for(i = 1, i < argnum + 1, i++) // Lists indexed from 1 forwards in byond
procargs[i] = variable_set(user.client)
if(procname in bad_procs)
desc = "RUN!!!"
else
desc = "Oh no..."
process_chambered()
/obj/item/weapon/gun/procgun/process_chambered()
if(!in_chamber)
in_chamber = new/obj/item/projectile/beam/procjectile(src)
var/obj/item/projectile/beam/procjectile/P = in_chamber
P.procname = procname
P.procargs = procargs.Copy()
return 1
/obj/item/projectile/beam/procjectile
name = "proc beam"
icon = 'icons/obj/projectiles_experimental.dmi'
icon_state = "procg"
damage = 0
nodamage = TRUE
fire_sound = "procgun_sound"
var/procname
var/list/procargs = list()
/obj/item/projectile/beam/procjectile/to_bump(atom/A)
if(procname)
spawn(1)
call(A,procname)(arglist(procargs))
return ..()

View File

@@ -25,6 +25,7 @@
/obj/item/projectile/hookshot,
/obj/item/projectile/bullet/blastwave,
/obj/item/projectile/beam/lightning,
/obj/item/projectile/beam/procjectile,
/obj/item/projectile/beam/lightning/spell,
/obj/item/projectile/rocket/nikita,
/obj/item/projectile/test,

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 28 KiB

BIN
sound/weapons/procgun1.ogg Normal file

Binary file not shown.

BIN
sound/weapons/procgun2.ogg Normal file

Binary file not shown.

View File

@@ -2059,9 +2059,6 @@
#include "code\modules\mob\living\simple_animal\hostile\necro.dm"
#include "code\modules\mob\living\simple_animal\hostile\necromorph.dm"
#include "code\modules\mob\living\simple_animal\hostile\pitbull.dm"
#include "code\modules\mob\living\simple_animal\hostile\pulse_demon\pulsedemon.dm"
#include "code\modules\mob\living\simple_animal\hostile\pulse_demon\pulsedemon_attack.dm"
#include "code\modules\mob\living\simple_animal\hostile\pulse_demon\pulsedemon_powers.dm"
#include "code\modules\mob\living\simple_animal\hostile\rattlemebones.dm"
#include "code\modules\mob\living\simple_animal\hostile\scp_173.dm"
#include "code\modules\mob\living\simple_animal\hostile\shade.dm"
@@ -2094,6 +2091,9 @@
#include "code\modules\mob\living\simple_animal\hostile\human\tajaran.dm"
#include "code\modules\mob\living\simple_animal\hostile\human\vox.dm"
#include "code\modules\mob\living\simple_animal\hostile\human\wizard.dm"
#include "code\modules\mob\living\simple_animal\hostile\pulse_demon\pulsedemon.dm"
#include "code\modules\mob\living\simple_animal\hostile\pulse_demon\pulsedemon_attack.dm"
#include "code\modules\mob\living\simple_animal\hostile\pulse_demon\pulsedemon_powers.dm"
#include "code\modules\mob\living\simple_animal\hostile\retaliate\clown.dm"
#include "code\modules\mob\living\simple_animal\hostile\retaliate\cluwne.dm"
#include "code\modules\mob\living\simple_animal\hostile\retaliate\cockatrice.dm"
@@ -2263,6 +2263,7 @@
#include "code\modules\projectiles\guns\hookshot.dm"
#include "code\modules\projectiles\guns\lawgiver.dm"
#include "code\modules\projectiles\guns\portalgun.dm"
#include "code\modules\projectiles\guns\procgun.dm"
#include "code\modules\projectiles\guns\projectile.dm"
#include "code\modules\projectiles\guns\energy\disintegrator.dm"
#include "code\modules\projectiles\guns\energy\gravitywell.dm"