mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-07-12 07:35:31 +01:00
First commit for testing
This commit is contained in:
@@ -161,6 +161,7 @@ var/list/admin_verbs_fun = list(
|
||||
/datum/admins/proc/call_supply_drop,
|
||||
/datum/admins/proc/call_drop_pod,
|
||||
/client/proc/smite,
|
||||
/client/proc/player_effects,
|
||||
/client/proc/admin_lightning_strike,
|
||||
/client/proc/resize, //VOREStation Add,
|
||||
/client/proc/cmd_admin_droppod_deploy,
|
||||
|
||||
@@ -0,0 +1,215 @@
|
||||
/client/proc/player_effects(var/mob/target in player_list)
|
||||
set name = "Player Effects"
|
||||
set desc = "Modify a player character with various 'special treatments' from a list."
|
||||
set category = "Fun"
|
||||
if(!check_rights(R_FUN))
|
||||
return
|
||||
|
||||
var/datum/eventkit/player_effects/spawner = new()
|
||||
spawner.tgui_interact(usr, target)
|
||||
|
||||
/datum/eventkit/player_effects
|
||||
var/mob/target //The target of the effects
|
||||
|
||||
/datum/eventkit/player_effects/New()
|
||||
. = ..()
|
||||
|
||||
/datum/eventkit/player_effects/tgui_interact(mob/user, mob/targetx, datum/tgui/ui)
|
||||
target = targetx
|
||||
ui = SStgui.try_update_ui(user, src, ui)
|
||||
if(!ui)
|
||||
ui = new(user, src, "PlayerEffects", "Player Effects")
|
||||
ui.open()
|
||||
|
||||
/datum/eventkit/player_effects/Destroy()
|
||||
. = ..()
|
||||
|
||||
/datum/eventkit/player_effects/tgui_static_data(mob/user)
|
||||
var/list/data = list()
|
||||
|
||||
data["real_name"] = target.name;
|
||||
data["player_ckey"] = target.ckey;
|
||||
data["target_mob"] = target;
|
||||
|
||||
|
||||
return data
|
||||
|
||||
/datum/eventkit/player_effects/tgui_state(mob/user)
|
||||
return GLOB.tgui_admin_state
|
||||
|
||||
/datum/eventkit/player_effects/tgui_act(action, mob/target)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
if(!check_rights_for(usr.client, R_SPAWN))
|
||||
return
|
||||
|
||||
var/ckey = target.ckey
|
||||
var/mob/living/carbon/human/Tar = target
|
||||
|
||||
switch(action)
|
||||
|
||||
////////////SMITES/////////////
|
||||
if("break_legs")
|
||||
if(!istype(Tar))
|
||||
return
|
||||
var/broken_legs = 0
|
||||
var/obj/item/organ/external/left_leg = Tar.get_organ(BP_L_LEG)
|
||||
if(left_leg && left_leg.fracture())
|
||||
broken_legs++
|
||||
var/obj/item/organ/external/right_leg = Tar.get_organ(BP_R_LEG)
|
||||
if(right_leg && right_leg.fracture())
|
||||
broken_legs++
|
||||
if(!broken_legs)
|
||||
to_chat(src,"[target] didn't have any breakable legs, sorry.")
|
||||
|
||||
if("bluespace_artillery")
|
||||
bluespace_artillery(target,src)
|
||||
|
||||
if("spont_combustion")
|
||||
if(!istype(Tar))
|
||||
return
|
||||
Tar.adjust_fire_stacks(10)
|
||||
Tar.IgniteMob()
|
||||
Tar.visible_message("<span class='danger'>[target] bursts into flames!</span>")
|
||||
|
||||
if("lightning_strike")
|
||||
var/turf/T = get_step(get_step(target, NORTH), NORTH)
|
||||
T.Beam(target, icon_state="lightning[rand(1,12)]", time = 5)
|
||||
Tar.electrocute_act(75,def_zone = BP_HEAD)
|
||||
target.visible_message("<span class='danger'>[target] is struck by lightning!</span>")
|
||||
|
||||
if("shadekin_attack")
|
||||
var/turf/Tt = get_turf(target) //Turf for target
|
||||
|
||||
if(target.loc != Tt)
|
||||
return //Too hard to attack someone in something
|
||||
|
||||
var/turf/Ts //Turf for shadekin
|
||||
|
||||
//Try to find nondense turf
|
||||
for(var/direction in cardinal)
|
||||
var/turf/T = get_step(target,direction)
|
||||
if(T && !T.density)
|
||||
Ts = T //Found shadekin spawn turf
|
||||
if(!Ts)
|
||||
return //Didn't find shadekin spawn turf
|
||||
|
||||
var/mob/living/simple_mob/shadekin/red/shadekin = new(Ts)
|
||||
//Abuse of shadekin
|
||||
shadekin.real_name = shadekin.name
|
||||
shadekin.init_vore()
|
||||
shadekin.ability_flags |= 0x1
|
||||
shadekin.phase_shift()
|
||||
shadekin.ai_holder.give_target(target)
|
||||
shadekin.ai_holder.hostile = FALSE
|
||||
shadekin.ai_holder.mauling = TRUE
|
||||
shadekin.Life()
|
||||
//Remove when done
|
||||
spawn(10 SECONDS)
|
||||
if(shadekin)
|
||||
shadekin.death()
|
||||
|
||||
if("shadekin_vore")
|
||||
var/static/list/kin_types = list(
|
||||
"Red Eyes (Dark)" = /mob/living/simple_mob/shadekin/red/dark,
|
||||
"Red Eyes (Light)" = /mob/living/simple_mob/shadekin/red/white,
|
||||
"Red Eyes (Brown)" = /mob/living/simple_mob/shadekin/red/brown,
|
||||
"Blue Eyes (Dark)" = /mob/living/simple_mob/shadekin/blue/dark,
|
||||
"Blue Eyes (Light)" = /mob/living/simple_mob/shadekin/blue/white,
|
||||
"Blue Eyes (Brown)" = /mob/living/simple_mob/shadekin/blue/brown,
|
||||
"Purple Eyes (Dark)" = /mob/living/simple_mob/shadekin/purple/dark,
|
||||
"Purple Eyes (Light)" = /mob/living/simple_mob/shadekin/purple/white,
|
||||
"Purple Eyes (Brown)" = /mob/living/simple_mob/shadekin/purple/brown,
|
||||
"Yellow Eyes (Dark)" = /mob/living/simple_mob/shadekin/yellow/dark,
|
||||
"Yellow Eyes (Light)" = /mob/living/simple_mob/shadekin/yellow/white,
|
||||
"Yellow Eyes (Brown)" = /mob/living/simple_mob/shadekin/yellow/brown,
|
||||
"Green Eyes (Dark)" = /mob/living/simple_mob/shadekin/green/dark,
|
||||
"Green Eyes (Light)" = /mob/living/simple_mob/shadekin/green/white,
|
||||
"Green Eyes (Brown)" = /mob/living/simple_mob/shadekin/green/brown,
|
||||
"Orange Eyes (Dark)" = /mob/living/simple_mob/shadekin/orange/dark,
|
||||
"Orange Eyes (Light)" = /mob/living/simple_mob/shadekin/orange/white,
|
||||
"Orange Eyes (Brown)" = /mob/living/simple_mob/shadekin/orange/brown,
|
||||
"Rivyr (Unique)" = /mob/living/simple_mob/shadekin/blue/rivyr)
|
||||
var/kin_type = tgui_input_list(usr, "Select the type of shadekin for [target] nomf","Shadekin Type Choice", kin_types)
|
||||
if(!kin_type || !target)
|
||||
return
|
||||
|
||||
|
||||
kin_type = kin_types[kin_type]
|
||||
|
||||
var/myself = tgui_alert(usr, "Control the shadekin yourself or delete pred and prey after?","Control Shadekin?",list("Control","Cancel","Delete"))
|
||||
if(!myself || myself == "Cancel" || !target)
|
||||
return
|
||||
|
||||
var/turf/Tt = get_turf(target)
|
||||
|
||||
if(target.loc != Tt)
|
||||
return //Can't nom when not exposed
|
||||
|
||||
//Begin abuse
|
||||
target.transforming = TRUE //Cheap hack to stop them from moving
|
||||
var/mob/living/simple_mob/shadekin/shadekin = new kin_type(Tt)
|
||||
shadekin.real_name = shadekin.name
|
||||
shadekin.init_vore()
|
||||
shadekin.can_be_drop_pred = TRUE
|
||||
shadekin.dir = SOUTH
|
||||
shadekin.ability_flags |= 0x1
|
||||
shadekin.phase_shift() //Homf
|
||||
shadekin.energy = initial(shadekin.energy)
|
||||
//For fun
|
||||
sleep(1 SECOND)
|
||||
shadekin.dir = WEST
|
||||
sleep(1 SECOND)
|
||||
shadekin.dir = EAST
|
||||
sleep(1 SECOND)
|
||||
shadekin.dir = SOUTH
|
||||
sleep(1 SECOND)
|
||||
shadekin.audible_message("<b>[shadekin]</b> belches loudly!", runemessage = "URRRRRP")
|
||||
sleep(2 SECONDS)
|
||||
shadekin.phase_shift()
|
||||
target.transforming = FALSE //Undo cheap hack
|
||||
|
||||
if(myself == "Control") //Put admin in mob
|
||||
shadekin.ckey = ckey
|
||||
|
||||
else //Permakin'd
|
||||
to_chat(target,"<span class='danger'>You're carried off into The Dark by the [shadekin]. Who knows if you'll find your way back?</span>")
|
||||
target.ghostize()
|
||||
qdel(target)
|
||||
qdel(shadekin)
|
||||
|
||||
|
||||
if("redspace_abduct")
|
||||
redspace_abduction(target, src)
|
||||
|
||||
if("autosave")
|
||||
fake_autosave(target, src)
|
||||
|
||||
if("autosave2")
|
||||
fake_autosave(target, src, TRUE)
|
||||
|
||||
if("adspam")
|
||||
if(target.client)
|
||||
target.client.create_fake_ad_popup_multiple(/obj/screen/popup/default, 15)
|
||||
|
||||
if("peppernade")
|
||||
var/obj/item/weapon/grenade/chem_grenade/teargas/grenade = new /obj/item/weapon/grenade/chem_grenade/teargas
|
||||
grenade.loc = target.loc
|
||||
to_chat(target,"<span class='warning'>GRENADE?!</span>")
|
||||
grenade.detonate()
|
||||
|
||||
if("spicerequest")
|
||||
var/obj/item/weapon/reagent_containers/food/condiment/spacespice/spice = new /obj/item/weapon/reagent_containers/food/condiment/spacespice
|
||||
spice.loc = target.loc
|
||||
to_chat(target,"A bottle of spices appears at your feet... be careful what you wish for!")
|
||||
|
||||
if("terror")
|
||||
if(ishuman(Tar))
|
||||
Tar.fear = 200
|
||||
|
||||
////////MEDICAL//////////////
|
||||
|
||||
if("appendicitis")
|
||||
if(istype(Tar))
|
||||
Tar.appendicitis()
|
||||
@@ -0,0 +1,165 @@
|
||||
import { useState } from 'react';
|
||||
|
||||
import { useBackend } from '../backend';
|
||||
import { Button, NoticeBox, Section, Tabs } from '../components';
|
||||
import { Window } from '../layouts';
|
||||
|
||||
export type Data = {
|
||||
real_name: string;
|
||||
player_ckey: string;
|
||||
target_mob: string;
|
||||
};
|
||||
|
||||
export const PlayerEffects = (props) => {
|
||||
const { data } = useBackend<Data>();
|
||||
|
||||
const { real_name, player_ckey } = data;
|
||||
|
||||
const [tab, setTab] = useState(0);
|
||||
|
||||
const tabs: React.JSX.Element[] = [];
|
||||
|
||||
tabs[0] = <ControlSmites />;
|
||||
tabs[1] = <ControlMedical />;
|
||||
tabs[2] = <ControlAbilities />;
|
||||
tabs[3] = <ControlInventory />;
|
||||
tabs[4] = <ControlAdmin />;
|
||||
tabs[5] = <ControlFixes />;
|
||||
|
||||
return (
|
||||
<Window width={400} height={600}>
|
||||
<Window.Content scrollable>
|
||||
<Tabs>
|
||||
<Tabs.Tab selected={tab === 0} onClick={() => setTab(0)}>
|
||||
Smites
|
||||
</Tabs.Tab>
|
||||
<Tabs.Tab selected={tab === 1} onClick={() => setTab(1)}>
|
||||
Medical
|
||||
</Tabs.Tab>
|
||||
<Tabs.Tab selected={tab === 2} onClick={() => setTab(1)}>
|
||||
Abilities
|
||||
</Tabs.Tab>
|
||||
<Tabs.Tab selected={tab === 3} onClick={() => setTab(1)}>
|
||||
Inventory
|
||||
</Tabs.Tab>
|
||||
<Tabs.Tab selected={tab === 4} onClick={() => setTab(1)}>
|
||||
Admin
|
||||
</Tabs.Tab>
|
||||
<Tabs.Tab selected={tab === 5} onClick={() => setTab(1)}>
|
||||
Fixes
|
||||
</Tabs.Tab>
|
||||
</Tabs>
|
||||
<NoticeBox info>
|
||||
{real_name} played by {player_ckey}.
|
||||
</NoticeBox>
|
||||
{tabs[tab]}
|
||||
</Window.Content>
|
||||
</Window>
|
||||
);
|
||||
};
|
||||
|
||||
export const ControlSmites = (props) => {
|
||||
const { act, data } = useBackend<Data>();
|
||||
|
||||
return (
|
||||
<Section title="Smites">
|
||||
<Button onClick={() => act('break_legs')}>Break Legs</Button>
|
||||
<Button onClick={() => act('bluespace_artillery')}>
|
||||
Bluespace Artillery
|
||||
</Button>
|
||||
<Button onClick={() => act('spont_combustion')}>
|
||||
Spontaneous Combustion
|
||||
</Button>
|
||||
<Button onClick={() => act('lightning_strike')}>Lightning Bolt</Button>
|
||||
<Button onClick={() => act('shadekin_attack')}>Shadekin Attack</Button>
|
||||
<Button onClick={() => act('shadekin_vore')}>Shadekin Vore</Button>
|
||||
<Button onClick={() => act('redspace_abduct')}>Redspace Abduction</Button>
|
||||
<Button onClick={() => act('autosave')}>Autosave</Button>
|
||||
<Button onClick={() => act('autosave2')}>Autosave Long</Button>
|
||||
<Button onClick={() => act('adspam')}>Ad Spam</Button>
|
||||
<Button onClick={() => act('peppernade')}>Peppernade</Button>
|
||||
<Button onClick={() => act('spicerequest')}>Spawn Spice</Button>
|
||||
<Button onClick={() => act('terror')}>Terrify</Button>
|
||||
</Section>
|
||||
);
|
||||
};
|
||||
|
||||
export const ControlMedical = (props) => {
|
||||
const { act, data } = useBackend<Data>();
|
||||
|
||||
return (
|
||||
<Section title="Medical Effects">
|
||||
<Button onClick={() => act('appendicitis')}>Appendicitis</Button>
|
||||
</Section>
|
||||
);
|
||||
};
|
||||
|
||||
export const ControlAbilities = (props) => {
|
||||
const { act, data } = useBackend<Data>();
|
||||
|
||||
return (
|
||||
<Section title="Medical Effects">
|
||||
<Button onClick={() => act('appendicitis')}>Appendicitis</Button>
|
||||
</Section>
|
||||
);
|
||||
};
|
||||
|
||||
export const ControlInventory = (props) => {
|
||||
const { act, data } = useBackend<Data>();
|
||||
|
||||
return (
|
||||
<Section title="Medical Effects">
|
||||
<Button onClick={() => act('appendicitis')}>Appendicitis</Button>
|
||||
</Section>
|
||||
);
|
||||
};
|
||||
|
||||
export const ControlAdmin = (props) => {
|
||||
const { act, data } = useBackend<Data>();
|
||||
|
||||
return (
|
||||
<Section title="Medical Effects">
|
||||
<Button onClick={() => act('appendicitis')}>Appendicitis</Button>
|
||||
</Section>
|
||||
);
|
||||
};
|
||||
|
||||
export const ControlFixes = (props) => {
|
||||
const { act, data } = useBackend<Data>();
|
||||
|
||||
return (
|
||||
<Section title="Medical Effects">
|
||||
<Button onClick={() => act('appendicitis')}>Appendicitis</Button>
|
||||
</Section>
|
||||
);
|
||||
};
|
||||
|
||||
/* Unused here
|
||||
export const CryoStorageItems = (props) => {
|
||||
const { act, data } = useBackend<Data>();
|
||||
|
||||
const { items } = data;
|
||||
|
||||
return (
|
||||
<Section
|
||||
title="Stored Items"
|
||||
buttons={
|
||||
<Button icon="hand-rock" onClick={() => act('allitems')}>
|
||||
Claim All
|
||||
</Button>
|
||||
}
|
||||
>
|
||||
{(items.length &&
|
||||
items.map((item) => (
|
||||
<Button
|
||||
key={item.ref}
|
||||
icon="hand-rock"
|
||||
onClick={() => act('item', { ref: item.ref })}
|
||||
>
|
||||
{item.name}
|
||||
</Button>
|
||||
))) || <Box color="average">No items stored.</Box>}
|
||||
</Section>
|
||||
);
|
||||
};
|
||||
*/
|
||||
@@ -1738,6 +1738,7 @@
|
||||
#include "code\modules\admin\NewBan.dm"
|
||||
#include "code\modules\admin\news.dm"
|
||||
#include "code\modules\admin\persistence.dm"
|
||||
#include "code\modules\admin\player_effects.dm"
|
||||
#include "code\modules\admin\player_notes.dm"
|
||||
#include "code\modules\admin\player_panel.dm"
|
||||
#include "code\modules\admin\topic.dm"
|
||||
|
||||
Reference in New Issue
Block a user