mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-15 20:52:41 +00:00
Fixes some AI bugs.
This commit is contained in:
@@ -5,6 +5,7 @@
|
|||||||
hostile = TRUE
|
hostile = TRUE
|
||||||
cooperative = TRUE
|
cooperative = TRUE
|
||||||
firing_lanes = TRUE
|
firing_lanes = TRUE
|
||||||
|
mauling = TRUE // They need it to get the most out of monkeys.
|
||||||
var/rabid = FALSE // Will attack regardless of discipline.
|
var/rabid = FALSE // Will attack regardless of discipline.
|
||||||
var/discipline = 0 // Beating slimes makes them less likely to lash out. In theory.
|
var/discipline = 0 // Beating slimes makes them less likely to lash out. In theory.
|
||||||
var/resentment = 0 // 'Unjustified' beatings make this go up, and makes it more likely for abused slimes to go rabid.
|
var/resentment = 0 // 'Unjustified' beatings make this go up, and makes it more likely for abused slimes to go rabid.
|
||||||
@@ -33,9 +34,11 @@
|
|||||||
|
|
||||||
// Checks if disciplining the slime would be 'justified' right now.
|
// Checks if disciplining the slime would be 'justified' right now.
|
||||||
/datum/ai_holder/simple_mob/xenobio_slime/proc/is_justified_to_discipline()
|
/datum/ai_holder/simple_mob/xenobio_slime/proc/is_justified_to_discipline()
|
||||||
|
if(!can_act())
|
||||||
|
return FALSE // The slime considers it abuse if they get stunned while already stunned.
|
||||||
if(rabid)
|
if(rabid)
|
||||||
return TRUE
|
return TRUE
|
||||||
if(target)
|
if(target && can_attack(target))
|
||||||
if(ishuman(target))
|
if(ishuman(target))
|
||||||
var/mob/living/carbon/human/H = target
|
var/mob/living/carbon/human/H = target
|
||||||
if(istype(H.species, /datum/species/monkey))
|
if(istype(H.species, /datum/species/monkey))
|
||||||
|
|||||||
@@ -70,7 +70,9 @@
|
|||||||
on_engagement(target)
|
on_engagement(target)
|
||||||
if(firing_lanes && !test_projectile_safety(target))
|
if(firing_lanes && !test_projectile_safety(target))
|
||||||
// Nudge them a bit, maybe they can shoot next time.
|
// Nudge them a bit, maybe they can shoot next time.
|
||||||
step_rand(holder)
|
var/turf/T = get_step(holder, pick(cardinal))
|
||||||
|
if(T)
|
||||||
|
holder.IMove(T) // IMove() will respect movement cooldown.
|
||||||
holder.face_atom(target)
|
holder.face_atom(target)
|
||||||
ai_log("engage_target() : Could not safely fire at target. Exiting.", AI_LOG_DEBUG)
|
ai_log("engage_target() : Could not safely fire at target. Exiting.", AI_LOG_DEBUG)
|
||||||
return
|
return
|
||||||
@@ -130,6 +132,9 @@
|
|||||||
|
|
||||||
// Used to make sure projectiles will probably hit the target and not the wall or a friend.
|
// Used to make sure projectiles will probably hit the target and not the wall or a friend.
|
||||||
/datum/ai_holder/proc/test_projectile_safety(atom/movable/AM)
|
/datum/ai_holder/proc/test_projectile_safety(atom/movable/AM)
|
||||||
|
if(holder.Adjacent(AM)) // If they're right next to us then lets just say yes. check_trajectory() tends to spaz out otherwise.
|
||||||
|
return TRUE
|
||||||
|
|
||||||
var/mob/living/L = check_trajectory(AM, holder) // This isn't always reliable but its better than the previous method.
|
var/mob/living/L = check_trajectory(AM, holder) // This isn't always reliable but its better than the previous method.
|
||||||
// world << "Checked trajectory, would hit [L]."
|
// world << "Checked trajectory, would hit [L]."
|
||||||
|
|
||||||
|
|||||||
@@ -105,7 +105,7 @@
|
|||||||
if(isliving(the_target))
|
if(isliving(the_target))
|
||||||
var/mob/living/L = the_target
|
var/mob/living/L = the_target
|
||||||
if(ishuman(L) || issilicon(L))
|
if(ishuman(L) || issilicon(L))
|
||||||
if(!L.client) // SSD players get a pass
|
if(L.key && !L.client) // SSD players get a pass
|
||||||
return FALSE
|
return FALSE
|
||||||
if(L.stat)
|
if(L.stat)
|
||||||
if(L.stat == DEAD) // Leave dead things alone
|
if(L.stat == DEAD) // Leave dead things alone
|
||||||
|
|||||||
@@ -50,5 +50,5 @@
|
|||||||
|
|
||||||
// Getting slimebatoned/xenotased.
|
// Getting slimebatoned/xenotased.
|
||||||
/mob/living/simple_mob/slime/xenobio/slimebatoned(mob/living/user, amount)
|
/mob/living/simple_mob/slime/xenobio/slimebatoned(mob/living/user, amount)
|
||||||
Weaken(amount)
|
|
||||||
adjust_discipline(round(amount/2))
|
adjust_discipline(round(amount/2))
|
||||||
|
Weaken(amount) // This needs to come afterwards or else it will always be considered abuse to the slime.
|
||||||
|
|||||||
Reference in New Issue
Block a user