mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 10:12:45 +00:00
Mech Mini 'Revamp'. Will need playtesting. (#5480)
* Exosuits are now capable of holding more equipment, of specific types. * Tweaks regarding feedback in staffside thread, other concerns. * Tweak to be more consistent. Why did the Odysseus have two universals. Tweak to weapon restriction on Med - > Odyss * Weapons only fit in universal combat slots.
This commit is contained in:
@@ -10,6 +10,13 @@
|
|||||||
damage_absorption = list("brute"=0.7,"fire"=1,"bullet"=0.7,"laser"=0.85,"energy"=1,"bomb"=0.8)
|
damage_absorption = list("brute"=0.7,"fire"=1,"bullet"=0.7,"laser"=0.85,"energy"=1,"bomb"=0.8)
|
||||||
var/am = "d3c2fbcadca903a41161ccc9df9cf948"
|
var/am = "d3c2fbcadca903a41161ccc9df9cf948"
|
||||||
|
|
||||||
|
max_hull_equip = 2
|
||||||
|
max_weapon_equip = 2
|
||||||
|
max_utility_equip = 1
|
||||||
|
max_universal_equip = 1
|
||||||
|
max_special_equip = 1
|
||||||
|
cargo_capacity = 1
|
||||||
|
|
||||||
/*
|
/*
|
||||||
/obj/mecha/combat/range_action(target as obj|mob|turf)
|
/obj/mecha/combat/range_action(target as obj|mob|turf)
|
||||||
if(internal_damage&MECHA_INT_CONTROL_LOST)
|
if(internal_damage&MECHA_INT_CONTROL_LOST)
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
step_in = 4
|
step_in = 4
|
||||||
dir_in = 1 //Facing North.
|
dir_in = 1 //Facing North.
|
||||||
health = 400
|
health = 400
|
||||||
|
maxhealth = 400
|
||||||
deflect_chance = 20
|
deflect_chance = 20
|
||||||
damage_absorption = list("brute"=0.5,"fire"=1.1,"bullet"=0.65,"laser"=0.85,"energy"=0.9,"bomb"=0.8)
|
damage_absorption = list("brute"=0.5,"fire"=1.1,"bullet"=0.65,"laser"=0.85,"energy"=0.9,"bomb"=0.8)
|
||||||
max_temperature = 30000
|
max_temperature = 30000
|
||||||
@@ -15,6 +16,12 @@
|
|||||||
var/defence_deflect = 35
|
var/defence_deflect = 35
|
||||||
wreckage = /obj/effect/decal/mecha_wreckage/durand
|
wreckage = /obj/effect/decal/mecha_wreckage/durand
|
||||||
|
|
||||||
|
max_hull_equip = 2
|
||||||
|
max_weapon_equip = 1
|
||||||
|
max_utility_equip = 2
|
||||||
|
max_universal_equip = 1
|
||||||
|
max_special_equip = 1
|
||||||
|
|
||||||
/*
|
/*
|
||||||
/obj/mecha/combat/durand/New()
|
/obj/mecha/combat/durand/New()
|
||||||
..()
|
..()
|
||||||
|
|||||||
@@ -64,6 +64,7 @@
|
|||||||
pixel_x = -16
|
pixel_x = -16
|
||||||
step_in = 10
|
step_in = 10
|
||||||
health = 5000
|
health = 5000
|
||||||
|
maxhealth = 5000
|
||||||
opacity = 0 // Because there's big tall legs to look through. Also it looks fucky if this is set to 1.
|
opacity = 0 // Because there's big tall legs to look through. Also it looks fucky if this is set to 1.
|
||||||
deflect_chance = 50
|
deflect_chance = 50
|
||||||
damage_absorption = list("brute"=0.1,"fire"=0.8,"bullet"=0.1,"laser"=0.6,"energy"=0.7,"bomb"=0.7) //values show how much damage will pass through, not how much will be absorbed.
|
damage_absorption = list("brute"=0.1,"fire"=0.8,"bullet"=0.1,"laser"=0.6,"energy"=0.7,"bomb"=0.7) //values show how much damage will pass through, not how much will be absorbed.
|
||||||
@@ -79,6 +80,12 @@
|
|||||||
internal_damage_threshold = 25
|
internal_damage_threshold = 25
|
||||||
force = 60
|
force = 60
|
||||||
max_equip = 5
|
max_equip = 5
|
||||||
|
//This will (Should) never be in the hands of players. If it is, the one who inflicted this monster upon the server can edit these vars to not be insane.
|
||||||
|
max_hull_equip = 5
|
||||||
|
max_weapon_equip = 5
|
||||||
|
max_utility_equip = 5
|
||||||
|
max_universal_equip = 5
|
||||||
|
max_special_equip = 2
|
||||||
|
|
||||||
/obj/mecha/combat/gorilla/New()
|
/obj/mecha/combat/gorilla/New()
|
||||||
..()
|
..()
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
step_in = 3
|
step_in = 3
|
||||||
dir_in = 1 //Facing North.
|
dir_in = 1 //Facing North.
|
||||||
health = 300
|
health = 300
|
||||||
|
maxhealth = 300
|
||||||
deflect_chance = 15
|
deflect_chance = 15
|
||||||
damage_absorption = list("brute"=0.75,"fire"=1,"bullet"=0.8,"laser"=0.7,"energy"=0.85,"bomb"=1)
|
damage_absorption = list("brute"=0.75,"fire"=1,"bullet"=0.8,"laser"=0.7,"energy"=0.85,"bomb"=1)
|
||||||
max_temperature = 25000
|
max_temperature = 25000
|
||||||
@@ -16,12 +17,19 @@
|
|||||||
internal_damage_threshold = 35
|
internal_damage_threshold = 35
|
||||||
max_equip = 3
|
max_equip = 3
|
||||||
|
|
||||||
|
max_hull_equip = 1
|
||||||
|
max_weapon_equip = 2
|
||||||
|
max_utility_equip = 2
|
||||||
|
max_universal_equip = 1
|
||||||
|
max_special_equip = 1
|
||||||
|
|
||||||
/obj/mecha/combat/gygax/dark
|
/obj/mecha/combat/gygax/dark
|
||||||
desc = "A lightweight exosuit used by Heavy Asset Protection. A significantly upgraded Gygax security mech."
|
desc = "A lightweight exosuit used by Heavy Asset Protection. A significantly upgraded Gygax security mech."
|
||||||
name = "Dark Gygax"
|
name = "Dark Gygax"
|
||||||
icon_state = "darkgygax"
|
icon_state = "darkgygax"
|
||||||
initial_icon = "darkgygax"
|
initial_icon = "darkgygax"
|
||||||
health = 400
|
health = 400
|
||||||
|
maxhealth = 400
|
||||||
deflect_chance = 25
|
deflect_chance = 25
|
||||||
damage_absorption = list("brute"=0.6,"fire"=0.8,"bullet"=0.6,"laser"=0.5,"energy"=0.65,"bomb"=0.8)
|
damage_absorption = list("brute"=0.6,"fire"=0.8,"bullet"=0.6,"laser"=0.5,"energy"=0.65,"bomb"=0.8)
|
||||||
max_temperature = 45000
|
max_temperature = 45000
|
||||||
@@ -30,6 +38,12 @@
|
|||||||
max_equip = 4
|
max_equip = 4
|
||||||
step_energy_drain = 5
|
step_energy_drain = 5
|
||||||
|
|
||||||
|
max_hull_equip = 1
|
||||||
|
max_weapon_equip = 2
|
||||||
|
max_utility_equip = 2
|
||||||
|
max_universal_equip = 1
|
||||||
|
max_special_equip = 2
|
||||||
|
|
||||||
/obj/mecha/combat/gygax/dark/New()
|
/obj/mecha/combat/gygax/dark/New()
|
||||||
..()
|
..()
|
||||||
var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot
|
var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
initial_icon = "marauder"
|
initial_icon = "marauder"
|
||||||
step_in = 5
|
step_in = 5
|
||||||
health = 500
|
health = 500
|
||||||
|
maxhealth = 500
|
||||||
deflect_chance = 25
|
deflect_chance = 25
|
||||||
damage_absorption = list("brute"=0.5,"fire"=0.7,"bullet"=0.45,"laser"=0.6,"energy"=0.7,"bomb"=0.7)
|
damage_absorption = list("brute"=0.5,"fire"=0.7,"bullet"=0.45,"laser"=0.6,"energy"=0.7,"bomb"=0.7)
|
||||||
max_temperature = 60000
|
max_temperature = 60000
|
||||||
@@ -22,6 +23,12 @@
|
|||||||
force = 45
|
force = 45
|
||||||
max_equip = 4
|
max_equip = 4
|
||||||
|
|
||||||
|
max_hull_equip = 3
|
||||||
|
max_weapon_equip = 3
|
||||||
|
max_utility_equip = 3
|
||||||
|
max_universal_equip = 1
|
||||||
|
max_special_equip = 1
|
||||||
|
|
||||||
/obj/mecha/combat/marauder/seraph
|
/obj/mecha/combat/marauder/seraph
|
||||||
desc = "Heavy-duty, command-type exosuit. This is a custom model, utilized only by high-ranking military personnel."
|
desc = "Heavy-duty, command-type exosuit. This is a custom model, utilized only by high-ranking military personnel."
|
||||||
name = "Seraph"
|
name = "Seraph"
|
||||||
@@ -62,7 +69,7 @@
|
|||||||
var/obj/item/mecha_parts/mecha_equipment/ME
|
var/obj/item/mecha_parts/mecha_equipment/ME
|
||||||
if(equipment.len)//Now to remove it and equip anew.
|
if(equipment.len)//Now to remove it and equip anew.
|
||||||
for(ME in equipment)
|
for(ME in equipment)
|
||||||
equipment -= ME
|
ME.detach()
|
||||||
qdel(ME)
|
qdel(ME)
|
||||||
ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot(src)
|
ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot(src)
|
||||||
ME.attach(src)
|
ME.attach(src)
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
dir_in = 1 //Facing North.
|
dir_in = 1 //Facing North.
|
||||||
step_energy_drain = 3
|
step_energy_drain = 3
|
||||||
health = 200
|
health = 200
|
||||||
|
maxhealth = 200
|
||||||
deflect_chance = 30
|
deflect_chance = 30
|
||||||
damage_absorption = list("brute"=0.7,"fire"=0.7,"bullet"=0.7,"laser"=0.7,"energy"=0.7,"bomb"=0.7)
|
damage_absorption = list("brute"=0.7,"fire"=0.7,"bullet"=0.7,"laser"=0.7,"energy"=0.7,"bomb"=0.7)
|
||||||
max_temperature = 25000
|
max_temperature = 25000
|
||||||
@@ -20,6 +21,11 @@
|
|||||||
var/phasing_energy_drain = 200
|
var/phasing_energy_drain = 200
|
||||||
max_equip = 4
|
max_equip = 4
|
||||||
|
|
||||||
|
max_hull_equip = 3
|
||||||
|
max_weapon_equip = 3
|
||||||
|
max_utility_equip = 3
|
||||||
|
max_universal_equip = 3
|
||||||
|
max_special_equip = 4
|
||||||
|
|
||||||
/obj/mecha/combat/phazon/New()
|
/obj/mecha/combat/phazon/New()
|
||||||
..()
|
..()
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
//DO NOT ADD MECHA PARTS TO THE GAME WITH THE DEFAULT "SPRITE ME" SPRITE!
|
//DO NOT ADD MECHA PARTS TO THE GAME WITH THE DEFAULT "SPRITE ME" SPRITE!
|
||||||
//I'm annoyed I even have to tell you this! SPRITE FIRST, then commit.
|
//I'm annoyed I even have to tell you this! SPRITE FIRST, then commit.
|
||||||
|
#define EQUIP_HULL 1
|
||||||
|
#define EQUIP_WEAPON 2
|
||||||
|
#define EQUIP_UTILITY 3
|
||||||
|
#define EQUIP_SPECIAL 4
|
||||||
|
|
||||||
/obj/item/mecha_parts/mecha_equipment
|
/obj/item/mecha_parts/mecha_equipment
|
||||||
name = "mecha equipment"
|
name = "mecha equipment"
|
||||||
@@ -14,7 +18,7 @@
|
|||||||
var/range = MELEE //bitflags
|
var/range = MELEE //bitflags
|
||||||
var/salvageable = 1
|
var/salvageable = 1
|
||||||
var/required_type = /obj/mecha //may be either a type or a list of allowed types
|
var/required_type = /obj/mecha //may be either a type or a list of allowed types
|
||||||
|
var/equip_type = null //mechaequip2
|
||||||
|
|
||||||
/obj/item/mecha_parts/mecha_equipment/proc/do_after_cooldown(target=1)
|
/obj/item/mecha_parts/mecha_equipment/proc/do_after_cooldown(target=1)
|
||||||
sleep(equip_cooldown)
|
sleep(equip_cooldown)
|
||||||
@@ -43,6 +47,20 @@
|
|||||||
|
|
||||||
/obj/item/mecha_parts/mecha_equipment/proc/destroy()//missiles detonating, teleporter creating singularity?
|
/obj/item/mecha_parts/mecha_equipment/proc/destroy()//missiles detonating, teleporter creating singularity?
|
||||||
if(chassis)
|
if(chassis)
|
||||||
|
if(equip_type)
|
||||||
|
if(equip_type == EQUIP_HULL)
|
||||||
|
chassis.hull_equipment -= src
|
||||||
|
listclearnulls(chassis.hull_equipment)
|
||||||
|
if(equip_type == EQUIP_WEAPON)
|
||||||
|
chassis.weapon_equipment -= src
|
||||||
|
listclearnulls(chassis.weapon_equipment)
|
||||||
|
if(equip_type == EQUIP_UTILITY)
|
||||||
|
chassis.utility_equipment -= src
|
||||||
|
listclearnulls(chassis.utility_equipment)
|
||||||
|
if(equip_type == EQUIP_SPECIAL)
|
||||||
|
chassis.special_equipment -= src
|
||||||
|
listclearnulls(chassis.special_equipment)
|
||||||
|
chassis.universal_equipment -= src
|
||||||
chassis.equipment -= src
|
chassis.equipment -= src
|
||||||
listclearnulls(chassis.equipment)
|
listclearnulls(chassis.equipment)
|
||||||
if(chassis.selected == src)
|
if(chassis.selected == src)
|
||||||
@@ -89,19 +107,49 @@
|
|||||||
return
|
return
|
||||||
|
|
||||||
/obj/item/mecha_parts/mecha_equipment/proc/can_attach(obj/mecha/M as obj)
|
/obj/item/mecha_parts/mecha_equipment/proc/can_attach(obj/mecha/M as obj)
|
||||||
if(M.equipment.len >= M.max_equip)
|
//if(M.equipment.len >= M.max_equip)
|
||||||
return 0
|
// return 0
|
||||||
|
for(var/obj/item/mecha_parts/mecha_equipment/ME in M.equipment) //Exact duplicate components aren't allowed.
|
||||||
if (ispath(required_type))
|
if(ME.type == src.type)
|
||||||
|
return 0
|
||||||
|
if(equip_type == EQUIP_HULL && M.hull_equipment.len < M.max_hull_equip)
|
||||||
|
return 1
|
||||||
|
if(equip_type == EQUIP_WEAPON && M.weapon_equipment.len < M.max_weapon_equip)
|
||||||
|
return 1
|
||||||
|
if(equip_type == EQUIP_UTILITY && M.utility_equipment.len < M.max_utility_equip)
|
||||||
|
return 1
|
||||||
|
if(equip_type == EQUIP_SPECIAL && M.special_equipment.len < M.max_special_equip)
|
||||||
|
return 1
|
||||||
|
if(equip_type != EQUIP_SPECIAL && M.universal_equipment.len < M.max_universal_equip) //The exosuit needs to be military grade to actually have a universal slot capable of accepting a true weapon.
|
||||||
|
if(equip_type == EQUIP_WEAPON && !istype(M, /obj/mecha/combat))
|
||||||
|
return 0
|
||||||
|
return 1
|
||||||
|
/*if (ispath(required_type))
|
||||||
return istype(M, required_type)
|
return istype(M, required_type)
|
||||||
|
|
||||||
for (var/path in required_type)
|
for (var/path in required_type)
|
||||||
if (istype(M, path))
|
if (istype(M, path))
|
||||||
return 1
|
return 1
|
||||||
|
*/
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
/obj/item/mecha_parts/mecha_equipment/proc/attach(obj/mecha/M as obj)
|
/obj/item/mecha_parts/mecha_equipment/proc/attach(obj/mecha/M as obj)
|
||||||
|
//M.equipment += src
|
||||||
|
var/has_equipped = 0
|
||||||
|
if(equip_type == EQUIP_HULL && M.hull_equipment.len < M.max_hull_equip && !has_equipped)
|
||||||
|
M.hull_equipment += src
|
||||||
|
has_equipped = 1
|
||||||
|
if(equip_type == EQUIP_WEAPON && M.weapon_equipment.len < M.max_weapon_equip && !has_equipped)
|
||||||
|
M.weapon_equipment += src
|
||||||
|
has_equipped = 1
|
||||||
|
if(equip_type == EQUIP_UTILITY && M.utility_equipment.len < M.max_utility_equip && !has_equipped)
|
||||||
|
M.utility_equipment += src
|
||||||
|
has_equipped = 1
|
||||||
|
if(equip_type == EQUIP_SPECIAL && M.special_equipment.len < M.max_special_equip && !has_equipped)
|
||||||
|
M.special_equipment += src
|
||||||
|
has_equipped = 1
|
||||||
|
if(equip_type != EQUIP_SPECIAL && M.universal_equipment.len < M.max_universal_equip && !has_equipped)
|
||||||
|
M.universal_equipment += src
|
||||||
M.equipment += src
|
M.equipment += src
|
||||||
chassis = M
|
chassis = M
|
||||||
src.loc = M
|
src.loc = M
|
||||||
@@ -115,6 +163,17 @@
|
|||||||
moveto = moveto || get_turf(chassis)
|
moveto = moveto || get_turf(chassis)
|
||||||
if(src.Move(moveto))
|
if(src.Move(moveto))
|
||||||
chassis.equipment -= src
|
chassis.equipment -= src
|
||||||
|
chassis.universal_equipment -= src
|
||||||
|
if(equip_type)
|
||||||
|
switch(equip_type)
|
||||||
|
if(EQUIP_HULL)
|
||||||
|
chassis.hull_equipment -= src
|
||||||
|
if(EQUIP_WEAPON)
|
||||||
|
chassis.weapon_equipment -= src
|
||||||
|
if(EQUIP_UTILITY)
|
||||||
|
chassis.utility_equipment -= src
|
||||||
|
if(EQUIP_SPECIAL)
|
||||||
|
chassis.special_equipment -= src
|
||||||
if(chassis.selected == src)
|
if(chassis.selected == src)
|
||||||
chassis.selected = null
|
chassis.selected = null
|
||||||
update_chassis_page()
|
update_chassis_page()
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -12,6 +12,8 @@
|
|||||||
var/auto_rearm = 0 //Does the weapon reload itself after each shot?
|
var/auto_rearm = 0 //Does the weapon reload itself after each shot?
|
||||||
required_type = list(/obj/mecha/combat, /obj/mecha/working/hoverpod/combatpod)
|
required_type = list(/obj/mecha/combat, /obj/mecha/working/hoverpod/combatpod)
|
||||||
|
|
||||||
|
equip_type = EQUIP_WEAPON
|
||||||
|
|
||||||
/obj/item/mecha_parts/mecha_equipment/weapon/action_checks(atom/target)
|
/obj/item/mecha_parts/mecha_equipment/weapon/action_checks(atom/target)
|
||||||
if(projectiles <= 0)
|
if(projectiles <= 0)
|
||||||
return 0
|
return 0
|
||||||
@@ -68,12 +70,14 @@
|
|||||||
equip_cooldown = 30
|
equip_cooldown = 30
|
||||||
name = "jury-rigged welder-laser"
|
name = "jury-rigged welder-laser"
|
||||||
desc = "While not regulation, this inefficient weapon can be attached to working exo-suits in desperate, or malicious, times."
|
desc = "While not regulation, this inefficient weapon can be attached to working exo-suits in desperate, or malicious, times."
|
||||||
icon_state = "mecha_laser"
|
icon_state = "mecha_laser-rig"
|
||||||
energy_drain = 80
|
energy_drain = 80
|
||||||
projectile = /obj/item/projectile/beam
|
projectile = /obj/item/projectile/beam
|
||||||
fire_sound = 'sound/weapons/Laser.ogg'
|
fire_sound = 'sound/weapons/Laser.ogg'
|
||||||
required_type = list(/obj/mecha/combat, /obj/mecha/working)
|
required_type = list(/obj/mecha/combat, /obj/mecha/working)
|
||||||
|
|
||||||
|
equip_type = EQUIP_UTILITY
|
||||||
|
|
||||||
/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy
|
/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy
|
||||||
equip_cooldown = 15
|
equip_cooldown = 15
|
||||||
name = "\improper CH-LC \"Solaris\" laser cannon"
|
name = "\improper CH-LC \"Solaris\" laser cannon"
|
||||||
@@ -127,6 +131,8 @@
|
|||||||
equip_cooldown = 150
|
equip_cooldown = 150
|
||||||
origin_tech = list(TECH_MATERIAL = 2, TECH_COMBAT = 4, TECH_ILLEGAL = 1)
|
origin_tech = list(TECH_MATERIAL = 2, TECH_COMBAT = 4, TECH_ILLEGAL = 1)
|
||||||
|
|
||||||
|
equip_type = EQUIP_SPECIAL
|
||||||
|
|
||||||
/obj/item/mecha_parts/mecha_equipment/honker/action(target)
|
/obj/item/mecha_parts/mecha_equipment/honker/action(target)
|
||||||
if(!chassis)
|
if(!chassis)
|
||||||
return 0
|
return 0
|
||||||
@@ -198,7 +204,7 @@
|
|||||||
equip_cooldown = 10
|
equip_cooldown = 10
|
||||||
projectile = /obj/item/projectile/bullet/pistol/medium
|
projectile = /obj/item/projectile/bullet/pistol/medium
|
||||||
fire_sound = 'sound/weapons/machinegun.ogg'
|
fire_sound = 'sound/weapons/machinegun.ogg'
|
||||||
projectiles = 300
|
projectiles = 30 //10 bursts, matching the Scattershot's 10. Also, conveniently, doesn't eat your powercell when reloading like 300 bullets does.
|
||||||
projectiles_per_shot = 3
|
projectiles_per_shot = 3
|
||||||
deviation = 0.3
|
deviation = 0.3
|
||||||
projectile_energy_cost = 20
|
projectile_energy_cost = 20
|
||||||
@@ -224,6 +230,8 @@
|
|||||||
missile_range = 15
|
missile_range = 15
|
||||||
required_type = /obj/mecha //Why restrict it to just mining or combat mechs?
|
required_type = /obj/mecha //Why restrict it to just mining or combat mechs?
|
||||||
|
|
||||||
|
equip_type = EQUIP_UTILITY
|
||||||
|
|
||||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flare/Fire(atom/movable/AM, atom/target, turf/aimloc)
|
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flare/Fire(atom/movable/AM, atom/target, turf/aimloc)
|
||||||
var/obj/item/device/flashlight/flare/fired = AM
|
var/obj/item/device/flashlight/flare/fired = AM
|
||||||
fired.ignite()
|
fired.ignite()
|
||||||
@@ -249,13 +257,13 @@
|
|||||||
var/primed = null
|
var/primed = null
|
||||||
throwforce = 15
|
throwforce = 15
|
||||||
|
|
||||||
throw_impact(atom/hit_atom)
|
/obj/item/missile/throw_impact(atom/hit_atom)
|
||||||
if(primed)
|
if(primed)
|
||||||
explosion(hit_atom, 0, 1, 2, 4)
|
explosion(hit_atom, 0, 1, 2, 4)
|
||||||
qdel(src)
|
qdel(src)
|
||||||
else
|
else
|
||||||
..()
|
..()
|
||||||
return
|
return
|
||||||
|
|
||||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang
|
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang
|
||||||
name = "\improper SGL-6 grenade launcher"
|
name = "\improper SGL-6 grenade launcher"
|
||||||
@@ -320,6 +328,7 @@
|
|||||||
/obj/item/mecha_parts/mecha_equipment/weapon/energy/flamer/rigged
|
/obj/item/mecha_parts/mecha_equipment/weapon/energy/flamer/rigged
|
||||||
name = "\improper AA-CR-1 Mark 4"
|
name = "\improper AA-CR-1 Mark 4"
|
||||||
description_fluff = "A firefighting tool maintained by Aether Atmospherics, whose initial design originated from a small Earth company. This one seems to have been jury rigged."
|
description_fluff = "A firefighting tool maintained by Aether Atmospherics, whose initial design originated from a small Earth company. This one seems to have been jury rigged."
|
||||||
|
icon_state = "mecha_cremate-rig"
|
||||||
|
|
||||||
energy_drain = 50
|
energy_drain = 50
|
||||||
required_type = list(/obj/mecha/combat, /obj/mecha/working)
|
required_type = list(/obj/mecha/combat, /obj/mecha/working)
|
||||||
@@ -328,6 +337,8 @@
|
|||||||
|
|
||||||
origin_tech = list(TECH_MATERIAL = 3, TECH_COMBAT = 3, TECH_PHORON = 3, TECH_ILLEGAL = 2)
|
origin_tech = list(TECH_MATERIAL = 3, TECH_COMBAT = 3, TECH_PHORON = 3, TECH_ILLEGAL = 2)
|
||||||
|
|
||||||
|
equip_type = EQUIP_UTILITY
|
||||||
|
|
||||||
//////////////
|
//////////////
|
||||||
//Defensive//
|
//Defensive//
|
||||||
//////////////
|
//////////////
|
||||||
@@ -343,6 +354,8 @@
|
|||||||
var/shock_damage = 15
|
var/shock_damage = 15
|
||||||
var/active
|
var/active
|
||||||
|
|
||||||
|
equip_type = EQUIP_HULL
|
||||||
|
|
||||||
/obj/item/mecha_parts/mecha_equipment/shocker/can_attach(obj/mecha/M as obj)
|
/obj/item/mecha_parts/mecha_equipment/shocker/can_attach(obj/mecha/M as obj)
|
||||||
if(..())
|
if(..())
|
||||||
if(!M.proc_res["dynattackby"] && !M.proc_res["dynattackhand"] && !M.proc_res["dynattackalien"])
|
if(!M.proc_res["dynattackby"] && !M.proc_res["dynattackhand"] && !M.proc_res["dynattackalien"])
|
||||||
|
|||||||
@@ -24,6 +24,7 @@
|
|||||||
var/dir_in = 2//What direction will the mech face when entered/powered on? Defaults to South.
|
var/dir_in = 2//What direction will the mech face when entered/powered on? Defaults to South.
|
||||||
var/step_energy_drain = 10
|
var/step_energy_drain = 10
|
||||||
var/health = 300 //health is health
|
var/health = 300 //health is health
|
||||||
|
var/maxhealth = 300 //maxhealth is maxhealth.
|
||||||
var/deflect_chance = 10 //chance to deflect the incoming projectiles, hits, or lesser the effect of ex_act.
|
var/deflect_chance = 10 //chance to deflect the incoming projectiles, hits, or lesser the effect of ex_act.
|
||||||
//the values in this list show how much damage will pass through, not how much will be absorbed.
|
//the values in this list show how much damage will pass through, not how much will be absorbed.
|
||||||
var/list/damage_absorption = list("brute"=0.8,"fire"=1.2,"bullet"=0.9,"laser"=1,"energy"=1,"bomb"=1)
|
var/list/damage_absorption = list("brute"=0.8,"fire"=1.2,"bullet"=0.9,"laser"=1,"energy"=1,"bomb"=1)
|
||||||
@@ -66,8 +67,23 @@
|
|||||||
|
|
||||||
var/list/equipment = new
|
var/list/equipment = new
|
||||||
var/obj/item/mecha_parts/mecha_equipment/selected
|
var/obj/item/mecha_parts/mecha_equipment/selected
|
||||||
var/max_equip = 3
|
var/max_equip = 2
|
||||||
var/datum/events/events
|
var/datum/events/events
|
||||||
|
//mechaequipt2 stuffs
|
||||||
|
var/list/hull_equipment = new
|
||||||
|
var/list/weapon_equipment = new
|
||||||
|
var/list/utility_equipment = new
|
||||||
|
var/list/universal_equipment = new
|
||||||
|
var/list/special_equipment = new
|
||||||
|
var/max_hull_equip = 2
|
||||||
|
var/max_weapon_equip = 2
|
||||||
|
var/max_utility_equip = 2
|
||||||
|
var/max_universal_equip = 2
|
||||||
|
var/max_special_equip = 1
|
||||||
|
//Working exosuit vars
|
||||||
|
var/list/cargo = list()
|
||||||
|
var/cargo_capacity = 3
|
||||||
|
|
||||||
|
|
||||||
/obj/mecha/drain_power(var/drain_check)
|
/obj/mecha/drain_power(var/drain_check)
|
||||||
|
|
||||||
@@ -99,10 +115,24 @@
|
|||||||
mechas_list += src //global mech list
|
mechas_list += src //global mech list
|
||||||
return
|
return
|
||||||
|
|
||||||
|
/obj/mecha/Exit(atom/movable/O)
|
||||||
|
if(O in cargo)
|
||||||
|
return 0
|
||||||
|
return ..()
|
||||||
|
|
||||||
/obj/mecha/Destroy()
|
/obj/mecha/Destroy()
|
||||||
src.go_out()
|
src.go_out()
|
||||||
for(var/mob/M in src) //Let's just be ultra sure
|
for(var/mob/M in src) //Be Extra Sure
|
||||||
M.Move(loc)
|
M.forceMove(get_turf(src))
|
||||||
|
M.loc.Entered(M)
|
||||||
|
if(M != src.occupant)
|
||||||
|
step_rand(M)
|
||||||
|
for(var/atom/movable/A in src.cargo)
|
||||||
|
A.forceMove(get_turf(src))
|
||||||
|
var/turf/T = get_turf(A)
|
||||||
|
if(T)
|
||||||
|
T.Entered(A)
|
||||||
|
step_rand(A)
|
||||||
|
|
||||||
if(loc)
|
if(loc)
|
||||||
loc.Exited(src)
|
loc.Exited(src)
|
||||||
@@ -112,6 +142,11 @@
|
|||||||
|
|
||||||
if(wreckage)
|
if(wreckage)
|
||||||
var/obj/effect/decal/mecha_wreckage/WR = new wreckage(loc)
|
var/obj/effect/decal/mecha_wreckage/WR = new wreckage(loc)
|
||||||
|
hull_equipment.Cut()
|
||||||
|
weapon_equipment.Cut()
|
||||||
|
utility_equipment.Cut()
|
||||||
|
universal_equipment.Cut()
|
||||||
|
special_equipment.Cut()
|
||||||
for(var/obj/item/mecha_parts/mecha_equipment/E in equipment)
|
for(var/obj/item/mecha_parts/mecha_equipment/E in equipment)
|
||||||
if(E.salvageable && prob(30))
|
if(E.salvageable && prob(30))
|
||||||
WR.crowbar_salvage += E
|
WR.crowbar_salvage += E
|
||||||
@@ -1348,6 +1383,14 @@
|
|||||||
<b>Lights: </b>[lights?"on":"off"]<br>
|
<b>Lights: </b>[lights?"on":"off"]<br>
|
||||||
[src.dna?"<b>DNA-locked:</b><br> <span style='font-size:10px;letter-spacing:-1px;'>[src.dna]</span> \[<a href='?src=\ref[src];reset_dna=1'>Reset</a>\]<br>":null]
|
[src.dna?"<b>DNA-locked:</b><br> <span style='font-size:10px;letter-spacing:-1px;'>[src.dna]</span> \[<a href='?src=\ref[src];reset_dna=1'>Reset</a>\]<br>":null]
|
||||||
"}
|
"}
|
||||||
|
//Cargo components.
|
||||||
|
output += "<b>Cargo Compartment Contents:</b><div style=\"margin-left: 15px;\">"
|
||||||
|
if(src.cargo.len)
|
||||||
|
for(var/obj/O in src.cargo)
|
||||||
|
output += "<a href='?src=\ref[src];drop_from_cargo=\ref[O]'>Unload</a> : [O]<br>"
|
||||||
|
else
|
||||||
|
output += "Nothing"
|
||||||
|
output += "</div>"
|
||||||
return output
|
return output
|
||||||
|
|
||||||
/obj/mecha/proc/get_commands()
|
/obj/mecha/proc/get_commands()
|
||||||
@@ -1396,10 +1439,23 @@
|
|||||||
output += {"<div class='wr'>
|
output += {"<div class='wr'>
|
||||||
<div class='header'>Equipment</div>
|
<div class='header'>Equipment</div>
|
||||||
<div class='links'>"}
|
<div class='links'>"}
|
||||||
for(var/obj/item/mecha_parts/mecha_equipment/W in equipment)
|
for(var/obj/item/mecha_parts/mecha_equipment/W in hull_equipment)
|
||||||
output += "[W.name] <a href='?src=\ref[W];detach=1'>Detach</a><br>"
|
output += "Hull Module: [W.name] <a href='?src=\ref[W];detach=1'>Detach</a><br>"
|
||||||
output += "<b>Available equipment slots:</b> [max_equip-equipment.len]"
|
for(var/obj/item/mecha_parts/mecha_equipment/W in weapon_equipment)
|
||||||
output += "</div></div>"
|
output += "Weapon Module: [W.name] <a href='?src=\ref[W];detach=1'>Detach</a><br>"
|
||||||
|
for(var/obj/item/mecha_parts/mecha_equipment/W in utility_equipment)
|
||||||
|
output += "Utility Module: [W.name] <a href='?src=\ref[W];detach=1'>Detach</a><br>"
|
||||||
|
for(var/obj/item/mecha_parts/mecha_equipment/W in universal_equipment)
|
||||||
|
output += "Universal Module: [W.name] <a href='?src=\ref[W];detach=1'>Detach</a><br>"
|
||||||
|
for(var/obj/item/mecha_parts/mecha_equipment/W in special_equipment)
|
||||||
|
output += "Special Module: [W.name] <a href='?src=\ref[W];detach=1'>Detach</a><br>"
|
||||||
|
output += {"<b>Available hull slots:</b> [max_hull_equip-hull_equipment.len]<br>
|
||||||
|
<b>Available weapon slots:</b> [max_weapon_equip-weapon_equipment.len]<br>
|
||||||
|
<b>Available utility slots:</b> [max_utility_equip-utility_equipment.len]<br>
|
||||||
|
<b>Available universal slots:</b> [max_universal_equip-universal_equipment.len]<br>
|
||||||
|
<b>Available special slots:</b> [max_special_equip-special_equipment.len]<br>
|
||||||
|
</div></div>
|
||||||
|
"}
|
||||||
return output
|
return output
|
||||||
|
|
||||||
/obj/mecha/proc/get_equipment_list() //outputs mecha equipment list in html
|
/obj/mecha/proc/get_equipment_list() //outputs mecha equipment list in html
|
||||||
@@ -1673,6 +1729,17 @@
|
|||||||
else
|
else
|
||||||
src.occupant_message("<font color='red'>Recalibration failed.</font>")
|
src.occupant_message("<font color='red'>Recalibration failed.</font>")
|
||||||
src.log_message("Recalibration of coordination system failed with 1 error.",1)
|
src.log_message("Recalibration of coordination system failed with 1 error.",1)
|
||||||
|
if(href_list["drop_from_cargo"])
|
||||||
|
var/obj/O = locate(href_list["drop_from_cargo"])
|
||||||
|
if(O && O in src.cargo)
|
||||||
|
src.occupant_message("<span class='notice'>You unload [O].</span>")
|
||||||
|
O.forceMove(get_turf(src))
|
||||||
|
src.cargo -= O
|
||||||
|
var/turf/T = get_turf(O)
|
||||||
|
if(T)
|
||||||
|
T.Entered(O)
|
||||||
|
src.log_message("Unloaded [O]. Cargo compartment capacity: [cargo_capacity - src.cargo.len]")
|
||||||
|
return
|
||||||
|
|
||||||
//debug
|
//debug
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -1,3 +1,12 @@
|
|||||||
|
/obj/mecha/medical
|
||||||
|
max_hull_equip = 1
|
||||||
|
max_weapon_equip = 0
|
||||||
|
max_utility_equip = 2
|
||||||
|
max_universal_equip = 1
|
||||||
|
max_special_equip = 1
|
||||||
|
|
||||||
|
cargo_capacity = 1
|
||||||
|
|
||||||
/obj/mecha/medical/initialize()
|
/obj/mecha/medical/initialize()
|
||||||
. = ..()
|
. = ..()
|
||||||
var/turf/T = get_turf(src)
|
var/turf/T = get_turf(src)
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/obj/mecha/medical/odysseus
|
/obj/mecha/medical/odysseus/
|
||||||
desc = "These exosuits are developed and produced by Vey-Med. (© All rights reserved)."
|
desc = "These exosuits are developed and produced by Vey-Med. (© All rights reserved)."
|
||||||
name = "Odysseus"
|
name = "Odysseus"
|
||||||
icon_state = "odysseus"
|
icon_state = "odysseus"
|
||||||
@@ -6,36 +6,37 @@
|
|||||||
step_in = 2
|
step_in = 2
|
||||||
max_temperature = 15000
|
max_temperature = 15000
|
||||||
health = 120
|
health = 120
|
||||||
|
maxhealth = 120
|
||||||
wreckage = /obj/effect/decal/mecha_wreckage/odysseus
|
wreckage = /obj/effect/decal/mecha_wreckage/odysseus
|
||||||
internal_damage_threshold = 35
|
internal_damage_threshold = 35
|
||||||
deflect_chance = 15
|
deflect_chance = 15
|
||||||
step_energy_drain = 6
|
step_energy_drain = 6
|
||||||
var/obj/item/clothing/glasses/hud/health/mech/hud
|
var/obj/item/clothing/glasses/hud/health/mech/hud
|
||||||
|
|
||||||
New()
|
/obj/mecha/medical/odysseus/New()
|
||||||
..()
|
..()
|
||||||
hud = new /obj/item/clothing/glasses/hud/health/mech(src)
|
hud = new /obj/item/clothing/glasses/hud/health/mech(src)
|
||||||
return
|
return
|
||||||
|
|
||||||
moved_inside(var/mob/living/carbon/human/H as mob)
|
/obj/mecha/medical/odysseus/moved_inside(var/mob/living/carbon/human/H as mob)
|
||||||
if(..())
|
if(..())
|
||||||
if(H.glasses)
|
if(H.glasses)
|
||||||
occupant_message("<font color='red'>[H.glasses] prevent you from using [src] [hud]</font>")
|
occupant_message("<font color='red'>[H.glasses] prevent you from using [src] [hud]</font>")
|
||||||
else
|
|
||||||
H.glasses = hud
|
|
||||||
H.recalculate_vis()
|
|
||||||
return 1
|
|
||||||
else
|
else
|
||||||
return 0
|
H.glasses = hud
|
||||||
|
H.recalculate_vis()
|
||||||
|
return 1
|
||||||
|
else
|
||||||
|
return 0
|
||||||
|
|
||||||
go_out()
|
/obj/mecha/medical/odysseus/go_out()
|
||||||
if(ishuman(occupant))
|
if(ishuman(occupant))
|
||||||
var/mob/living/carbon/human/H = occupant
|
var/mob/living/carbon/human/H = occupant
|
||||||
if(H.glasses == hud)
|
if(H.glasses == hud)
|
||||||
H.glasses = null
|
H.glasses = null
|
||||||
H.recalculate_vis()
|
H.recalculate_vis()
|
||||||
..()
|
..()
|
||||||
return
|
return
|
||||||
/*
|
/*
|
||||||
verb/set_perspective()
|
verb/set_perspective()
|
||||||
set name = "Set client perspective."
|
set name = "Set client perspective."
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
step_energy_drain = 10
|
step_energy_drain = 10
|
||||||
max_temperature = 20000
|
max_temperature = 20000
|
||||||
health = 150
|
health = 150
|
||||||
|
maxhealth = 150
|
||||||
infra_luminosity = 6
|
infra_luminosity = 6
|
||||||
wreckage = /obj/effect/decal/mecha_wreckage/hoverpod
|
wreckage = /obj/effect/decal/mecha_wreckage/hoverpod
|
||||||
cargo_capacity = 5
|
cargo_capacity = 5
|
||||||
@@ -15,6 +16,12 @@
|
|||||||
var/datum/effect/effect/system/ion_trail_follow/ion_trail
|
var/datum/effect/effect/system/ion_trail_follow/ion_trail
|
||||||
var/stabilization_enabled = 1
|
var/stabilization_enabled = 1
|
||||||
|
|
||||||
|
max_hull_equip = 2
|
||||||
|
max_weapon_equip = 0
|
||||||
|
max_utility_equip = 2
|
||||||
|
max_universal_equip = 1
|
||||||
|
max_special_equip = 1
|
||||||
|
|
||||||
/obj/mecha/working/hoverpod/New()
|
/obj/mecha/working/hoverpod/New()
|
||||||
..()
|
..()
|
||||||
ion_trail = new /datum/effect/effect/system/ion_trail_follow()
|
ion_trail = new /datum/effect/effect/system/ion_trail_follow()
|
||||||
@@ -79,9 +86,15 @@
|
|||||||
desc = "An ancient, run-down combat spacecraft." // Ideally would have a seperate icon.
|
desc = "An ancient, run-down combat spacecraft." // Ideally would have a seperate icon.
|
||||||
name = "Combat Hoverpod"
|
name = "Combat Hoverpod"
|
||||||
health = 200
|
health = 200
|
||||||
|
maxhealth = 200
|
||||||
internal_damage_threshold = 35
|
internal_damage_threshold = 35
|
||||||
cargo_capacity = 2
|
cargo_capacity = 2
|
||||||
max_equip = 2
|
max_equip = 2
|
||||||
|
max_hull_equip = 2
|
||||||
|
max_weapon_equip = 2
|
||||||
|
max_utility_equip = 2
|
||||||
|
max_universal_equip = 1
|
||||||
|
max_special_equip = 1
|
||||||
|
|
||||||
/obj/mecha/working/hoverpod/combatpod/New()
|
/obj/mecha/working/hoverpod/combatpod/New()
|
||||||
..()
|
..()
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
step_in = 6
|
step_in = 6
|
||||||
max_temperature = 20000
|
max_temperature = 20000
|
||||||
health = 200
|
health = 200
|
||||||
|
maxhealth = 200
|
||||||
wreckage = /obj/effect/decal/mecha_wreckage/ripley
|
wreckage = /obj/effect/decal/mecha_wreckage/ripley
|
||||||
cargo_capacity = 10
|
cargo_capacity = 10
|
||||||
|
|
||||||
@@ -20,7 +21,7 @@
|
|||||||
..()
|
..()
|
||||||
|
|
||||||
/obj/mecha/working/ripley/firefighter
|
/obj/mecha/working/ripley/firefighter
|
||||||
desc = "Standart APLU chassis was refitted with additional thermal protection and cistern."
|
desc = "Standard APLU chassis was refitted with additional thermal protection and cistern."
|
||||||
name = "APLU \"Firefighter\""
|
name = "APLU \"Firefighter\""
|
||||||
icon_state = "firefighter"
|
icon_state = "firefighter"
|
||||||
initial_icon = "firefighter"
|
initial_icon = "firefighter"
|
||||||
@@ -29,6 +30,11 @@
|
|||||||
lights_power = 8
|
lights_power = 8
|
||||||
damage_absorption = list("fire"=0.5,"bullet"=0.8,"bomb"=0.5)
|
damage_absorption = list("fire"=0.5,"bullet"=0.8,"bomb"=0.5)
|
||||||
wreckage = /obj/effect/decal/mecha_wreckage/ripley/firefighter
|
wreckage = /obj/effect/decal/mecha_wreckage/ripley/firefighter
|
||||||
|
max_hull_equip = 2
|
||||||
|
max_weapon_equip = 0
|
||||||
|
max_utility_equip = 2
|
||||||
|
max_universal_equip = 1
|
||||||
|
max_special_equip = 1
|
||||||
|
|
||||||
/obj/mecha/working/ripley/deathripley
|
/obj/mecha/working/ripley/deathripley
|
||||||
desc = "OH SHIT IT'S THE DEATHSQUAD WE'RE ALL GONNA DIE"
|
desc = "OH SHIT IT'S THE DEATHSQUAD WE'RE ALL GONNA DIE"
|
||||||
@@ -40,6 +46,11 @@
|
|||||||
lights_power = 60
|
lights_power = 60
|
||||||
wreckage = /obj/effect/decal/mecha_wreckage/ripley/deathripley
|
wreckage = /obj/effect/decal/mecha_wreckage/ripley/deathripley
|
||||||
step_energy_drain = 0
|
step_energy_drain = 0
|
||||||
|
max_hull_equip = 1
|
||||||
|
max_weapon_equip = 1
|
||||||
|
max_utility_equip = 3
|
||||||
|
max_universal_equip = 1
|
||||||
|
max_special_equip = 1
|
||||||
|
|
||||||
/obj/mecha/working/ripley/deathripley/New()
|
/obj/mecha/working/ripley/deathripley/New()
|
||||||
..()
|
..()
|
||||||
|
|||||||
@@ -1,7 +1,10 @@
|
|||||||
/obj/mecha/working
|
/obj/mecha/working
|
||||||
internal_damage_threshold = 60
|
internal_damage_threshold = 60
|
||||||
var/list/cargo = new
|
max_hull_equip = 1
|
||||||
var/cargo_capacity = 5
|
max_weapon_equip = 0
|
||||||
|
max_utility_equip = 3
|
||||||
|
max_universal_equip = 1
|
||||||
|
max_special_equip = 1
|
||||||
|
|
||||||
/obj/mecha/working/initialize()
|
/obj/mecha/working/initialize()
|
||||||
. = ..()
|
. = ..()
|
||||||
@@ -9,6 +12,7 @@
|
|||||||
if(isPlayerLevel(T.z))
|
if(isPlayerLevel(T.z))
|
||||||
new /obj/item/mecha_parts/mecha_tracking(src)
|
new /obj/item/mecha_parts/mecha_tracking(src)
|
||||||
|
|
||||||
|
/* This stuff has been generalized!
|
||||||
/obj/mecha/working/Destroy()
|
/obj/mecha/working/Destroy()
|
||||||
for(var/mob/M in src)
|
for(var/mob/M in src)
|
||||||
if(M==src.occupant)
|
if(M==src.occupant)
|
||||||
@@ -54,6 +58,6 @@
|
|||||||
output += "Nothing"
|
output += "Nothing"
|
||||||
output += "</div>"
|
output += "</div>"
|
||||||
return output
|
return output
|
||||||
|
*/
|
||||||
/obj/mecha/working/range_action(atom/target as obj|mob|turf)
|
/obj/mecha/working/range_action(atom/target as obj|mob|turf)
|
||||||
return
|
return
|
||||||
|
|||||||
7
html/changelogs/Mechoid - Mecha.yml
Normal file
7
html/changelogs/Mechoid - Mecha.yml
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
|
||||||
|
author: Mechoid
|
||||||
|
|
||||||
|
delete-after: True
|
||||||
|
|
||||||
|
changes:
|
||||||
|
- rscadd: "Mechs now have multiple equipment slot types, and more slots in total for greater customization."
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
Reference in New Issue
Block a user