[MIRROR] Health & Damage in Mob Spawner (#6994)

Co-authored-by: Heroman3003 <31296024+Heroman3003@users.noreply.github.com>
Co-authored-by: Raeschen <rycoop29@gmail.com>
This commit is contained in:
CHOMPStation2
2023-09-18 08:53:39 -07:00
committed by GitHub
parent 37c62c53cf
commit ecd1696a26
4 changed files with 152 additions and 4 deletions

View File

@@ -59,10 +59,20 @@
data["default_flavor_text"] = M.flavor_text
if(new_path && istype(M, /mob/living))
var/mob/living/L = M
// AI Stuff
ai_type = (L.ai_holder_type ? L.ai_holder_type : /datum/ai_holder/simple_mob/inert)
faction = (L.faction ? L.faction : "neutral")
intent = (L.a_intent ? L.a_intent : I_HELP)
new_path = FALSE
data["max_health"] = L.maxHealth
data["health"] = L.health
if(istype(L, /mob/living/simple_mob))
var/mob/living/simple_mob/S = L
data["melee_damage_lower"] = S.melee_damage_lower ? S.melee_damage_lower : 0
data["melee_damage_upper"] = S.melee_damage_upper ? S.melee_damage_upper : 0
qdel(S)
qdel(L)
qdel(M)
data["ai_type"] = ai_type
@@ -133,9 +143,19 @@
M.name = sanitize(name)
M.desc = sanitize(params["desc"])
M.flavor_text = sanitize(params["flavor_text"])
if(use_custom_ai)
if(istype(M, /mob/living))
var/mob/living/L = M
if(isnum(params["max_health"]))
L.maxHealth = params["max_health"]
if(isnum(params["health"]))
L.health = params["health"]
if(istype(M, /mob/living/simple_mob))
var/mob/living/simple_mob/S = L
if(isnum(params["melee_damage_lower"]))
S.melee_damage_lower = params["melee_damage_lower"]
if(isnum(params["melee_damage_upper"]))
S.melee_damage_upper = params["melee_damage_upper"]
if(use_custom_ai)
L.ai_holder_type = ai_type
L.faction = faction
L.a_intent = intent

View File

@@ -15,6 +15,11 @@ type Data = {
faction: string;
intent: string;
max_health: number;
health: number;
melee_damage_lower: number;
melee_damage_upper: number;
default_speak_emotes: string[];
loc_lock: BooleanLike;
@@ -71,6 +76,22 @@ const GeneralMobSettings = (props, context) => {
);
const [faction] = useLocalState(context, 'setMobFaction', data.faction);
const [intent] = useLocalState(context, 'setIntent', data.intent);
const [maxHealth, setMaxHealth] = useLocalState(
context,
'maxHealth',
data.max_health
);
const [health, setHealth] = useLocalState(context, 'health', data.health);
const [meleeDamageLower, setMeleeDamageLower] = useLocalState(
context,
'meleeDamageLower',
data.melee_damage_lower
);
const [meleeDamageUpper, setMeleeDamageUpper] = useLocalState(
context,
'meleeDamageUpper',
data.melee_damage_upper
);
const [desc, setDesc] = useLocalState(context, 'desc', data.default_desc);
const [flavorText, setFlavorText] = useLocalState(
context,
@@ -207,6 +228,45 @@ const GeneralMobSettings = (props, context) => {
</LabeledList.Item>
</LabeledList>
</Section>
<Section title="Health & Damage">
<LabeledList>
{(maxHealth && (
<>
<LabeledList.Item label="Max Health">
<NumberInput
value={maxHealth}
onChange={(e, val) => setMaxHealth(val)}
/>
</LabeledList.Item>
<LabeledList.Item label="Health">
<NumberInput
value={health}
onChange={(e, val) => setHealth(val)}
/>
</LabeledList.Item>
<br />
</>
)) ||
"Note: Only available for '/mob/living'"}
{(meleeDamageLower && (
<>
<LabeledList.Item label="Melee Damage (Lower)">
<NumberInput
value={meleeDamageLower}
onChange={(e, val) => setMeleeDamageLower(val)}
/>
</LabeledList.Item>
<LabeledList.Item label="Melee Damage (Upper)">
<NumberInput
value={meleeDamageUpper}
onChange={(e, val) => setMeleeDamageUpper(val)}
/>
</LabeledList.Item>
</>
)) ||
"Note: Only available for '/mob/living/simple_mob'"}
</LabeledList>
</Section>
</Flex.Item>
</Flex>
</Section>
@@ -239,6 +299,10 @@ const GeneralMobSettings = (props, context) => {
amount: amount,
name: name || data.default_path_name,
desc: desc || data.default_desc,
max_health: maxHealth || data.max_health,
health: health || data.health,
melee_damage_lower: meleeDamageLower || data.melee_damage_lower,
melee_damage_upper: meleeDamageUpper || data.melee_damage_upper,
flavor_text: flavorText || data.default_flavor_text,
size_multiplier: sizeMultiplier * 0.01,
x: data.loc_lock ? data.loc_x : x,

View File

@@ -15,6 +15,11 @@ type Data = {
faction: string;
intent: string;
max_health: number;
health: number;
melee_damage_lower: number;
melee_damage_upper: number;
default_speak_emotes: string[];
loc_lock: BooleanLike;
@@ -71,6 +76,22 @@ const GeneralMobSettings = (props, context) => {
);
const [faction] = useLocalState(context, 'setMobFaction', data.faction);
const [intent] = useLocalState(context, 'setIntent', data.intent);
const [maxHealth, setMaxHealth] = useLocalState(
context,
'maxHealth',
data.max_health
);
const [health, setHealth] = useLocalState(context, 'health', data.health);
const [meleeDamageLower, setMeleeDamageLower] = useLocalState(
context,
'meleeDamageLower',
data.melee_damage_lower
);
const [meleeDamageUpper, setMeleeDamageUpper] = useLocalState(
context,
'meleeDamageUpper',
data.melee_damage_upper
);
const [desc, setDesc] = useLocalState(context, 'desc', data.default_desc);
const [flavorText, setFlavorText] = useLocalState(
context,
@@ -207,6 +228,45 @@ const GeneralMobSettings = (props, context) => {
</LabeledList.Item>
</LabeledList>
</Section>
<Section title="Health & Damage">
<LabeledList>
{(maxHealth && (
<>
<LabeledList.Item label="Max Health">
<NumberInput
value={maxHealth}
onChange={(e, val) => setMaxHealth(val)}
/>
</LabeledList.Item>
<LabeledList.Item label="Health">
<NumberInput
value={health}
onChange={(e, val) => setHealth(val)}
/>
</LabeledList.Item>
<br />
</>
)) ||
"Note: Only available for '/mob/living'"}
{(meleeDamageLower && (
<>
<LabeledList.Item label="Melee Damage (Lower)">
<NumberInput
value={meleeDamageLower}
onChange={(e, val) => setMeleeDamageLower(val)}
/>
</LabeledList.Item>
<LabeledList.Item label="Melee Damage (Upper)">
<NumberInput
value={meleeDamageUpper}
onChange={(e, val) => setMeleeDamageUpper(val)}
/>
</LabeledList.Item>
</>
)) ||
"Note: Only available for '/mob/living/simple_mob'"}
</LabeledList>
</Section>
</Flex.Item>
</Flex>
</Section>
@@ -239,6 +299,10 @@ const GeneralMobSettings = (props, context) => {
amount: amount,
name: name || data.default_path_name,
desc: desc || data.default_desc,
max_health: maxHealth || data.max_health,
health: health || data.health,
melee_damage_lower: meleeDamageLower || data.melee_damage_lower,
melee_damage_upper: meleeDamageUpper || data.melee_damage_upper,
flavor_text: flavorText || data.default_flavor_text,
size_multiplier: sizeMultiplier * 0.01,
x: data.loc_lock ? data.loc_x : x,

File diff suppressed because one or more lines are too long