mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-09 16:14:13 +00:00
Reworked the Hostile mob friends list to use weakrefs (#30253)
This commit is contained in:
@@ -448,7 +448,7 @@
|
||||
var/mob/living/simple_animal/hostile/humanoid/H = NM
|
||||
H.items_to_drop = list()
|
||||
NM.faction = "lazarus \ref[user]"
|
||||
NM.friends += user
|
||||
NM.friends += makeweakref(user)
|
||||
MC.contained_mob = NM
|
||||
MC.name = "lazarus capsule - [NM.name]"
|
||||
..()
|
||||
|
||||
@@ -212,7 +212,7 @@ proc/move_mining_shuttle()
|
||||
has_slime=1
|
||||
to_chat(user, "You mold the slime extract around the tip of \the [src].")
|
||||
return TRUE
|
||||
|
||||
|
||||
/obj/item/weapon/pickaxe/hammer
|
||||
name = "sledgehammer"
|
||||
//icon_state = "sledgehammer" Waiting on sprite
|
||||
@@ -823,7 +823,7 @@ proc/move_mining_shuttle()
|
||||
M.revive(refreshbutcher = refreshes_drops)
|
||||
if(istype(target, /mob/living/simple_animal/hostile))
|
||||
var/mob/living/simple_animal/hostile/H = M
|
||||
H.friends += user
|
||||
H.friends += makeweakref(user)
|
||||
|
||||
log_attack("[key_name(user)] has revived hostile mob [H] with a lazarus injector.")
|
||||
H.attack_log += "\[[time_stamp()]\] Revived by <b>[key_name(user)]</b> with a lazarus injector."
|
||||
@@ -965,16 +965,12 @@ proc/move_mining_shuttle()
|
||||
update_icon()
|
||||
|
||||
/obj/item/device/mobcapsule/proc/take_contents(mob/user)
|
||||
for(var/mob/living/simple_animal/AM in src.loc)
|
||||
if(istype(AM))
|
||||
var/mob/living/simple_animal/M = AM
|
||||
var/mob/living/simple_animal/hostile/H = M
|
||||
if(!istype(H))
|
||||
continue
|
||||
for(var/things in H.friends)
|
||||
if(capsuleowner in H.friends)
|
||||
if(insert(AM, user) == -1) //Limit reached
|
||||
break
|
||||
for(var/mob/living/simple_animal/hostile/AM in loc)
|
||||
for(var/datum/weakref/things in AM.friends)
|
||||
var/mob/M = things.get()
|
||||
if(capsuleowner == M)
|
||||
if(insert(AM, user) == -1) //Limit reached
|
||||
break
|
||||
|
||||
/**********************Mining Scanner**********************/
|
||||
|
||||
|
||||
@@ -151,8 +151,12 @@
|
||||
user.drop_item(F, force_drop = 1)
|
||||
|
||||
if(prob(25))
|
||||
if(!friends.Find(user))
|
||||
friends.Add(user)
|
||||
var/already_friend = FALSE
|
||||
for(var/datum/weakref/ref in friends)
|
||||
if (ref.get() == user)
|
||||
already_friend = TRUE
|
||||
if (!already_friend)
|
||||
friends += makeweakref(user)
|
||||
to_chat(user, "<span class='info'>You have gained \the [src]'s trust.</span>")
|
||||
var/image/heart = image('icons/mob/animal.dmi',src,"heart-ani2")
|
||||
heart.plane = ABOVE_HUMAN_PLANE
|
||||
|
||||
@@ -27,8 +27,9 @@
|
||||
D.get_spooked(new_target)
|
||||
|
||||
/mob/living/simple_animal/hostile/deer/proc/is_spooked(var/mob/living/target)
|
||||
if(friends.Find(target))
|
||||
return 0
|
||||
for(var/datum/weakref/ref in friends)
|
||||
if (ref.get() == target)
|
||||
return 0
|
||||
if(ishuman(target))
|
||||
/*
|
||||
Making it so that there is some tactics to hunting deer
|
||||
@@ -104,8 +105,12 @@
|
||||
icon_state = "deer_flower"
|
||||
|
||||
if(prob(25))
|
||||
if(!friends.Find(user))
|
||||
friends.Add(user)
|
||||
var/already_friend = FALSE
|
||||
for(var/datum/weakref/ref in friends)
|
||||
if (ref.get() == user)
|
||||
already_friend = TRUE
|
||||
if (!already_friend)
|
||||
friends += makeweakref(user)
|
||||
to_chat(user, "<span class='info'>You have gained \the [src]'s trust.</span>")
|
||||
name_mob(user)
|
||||
qdel(A)
|
||||
|
||||
@@ -206,8 +206,10 @@
|
||||
if((istype(L,/mob/living/simple_animal/corgi/Ian) || istype(L,/mob/living/carbon/human/dummy)) && (faction == "adminbus mob"))
|
||||
return 0
|
||||
//WE DON'T ATTACK OUR FRIENDS (used by lazarus injectors, and rabid slimes)
|
||||
if(friends.Find(L))
|
||||
return 0
|
||||
|
||||
for(var/datum/weakref/ref in friends)
|
||||
if (ref.get() == L)
|
||||
return 0
|
||||
return 1
|
||||
if(isobj(the_target))
|
||||
//if(the_target.type in wanted_objects)
|
||||
@@ -346,7 +348,15 @@
|
||||
|
||||
var/mob/living/simple_animal/hostile/H = from
|
||||
if(istype(H))
|
||||
src.friends |= H.friends
|
||||
for (var/datum/weakref/ref in H.friends)
|
||||
var/not_a_friend_yet = TRUE
|
||||
var/mob/M = ref.get()
|
||||
for (var/datum/weakref/reff in H.friends)
|
||||
if (M == reff.get())
|
||||
not_a_friend_yet = FALSE
|
||||
break
|
||||
if (not_a_friend_yet)
|
||||
friends += makeweakref(M)
|
||||
|
||||
/mob/living/simple_animal/hostile/proc/OpenFire(var/atom/ttarget)
|
||||
set waitfor = 0
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
key = mind.key // Force the ghost in here
|
||||
if(Owner)
|
||||
faction = "necro"
|
||||
friends.Add(Owner)
|
||||
friends += makeweakref(Owner)
|
||||
creator = Owner
|
||||
if(client)
|
||||
to_chat(src, "<big><span class='warning'>You have been risen from the dead by your new master, [Owner]. Do his bidding so long as he lives, for when he falls so do you.</span></big>")
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
faction_original = faction
|
||||
faction = ""
|
||||
friends_temp = friends.Copy()
|
||||
friends.Cut()
|
||||
friends = list()
|
||||
treacherous = TRUE
|
||||
|
||||
/mob/living/simple_animal/hostile/pitbull/proc/Calmdown()
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
rabid.icon_dead = "[src.colour] baby slime dead"
|
||||
rabid.colour = "[src.colour]"
|
||||
for(var/mob/M in friends)
|
||||
rabid.friends += M
|
||||
rabid.friends += makeweakref(M)
|
||||
qdel(src)
|
||||
|
||||
/mob/living/simple_animal/hostile/slime/Life()
|
||||
@@ -79,8 +79,10 @@
|
||||
calmed_type = text2path("/mob/living/carbon/slime/" + path_end)
|
||||
|
||||
var/mob/living/carbon/slime/calmed = new calmed_type(loc)
|
||||
for(var/mob/M in friends)
|
||||
calmed.Friends += M
|
||||
for(var/datum/weakref/ref in friends)
|
||||
var/mob/M = ref.get()
|
||||
if (istype(M))
|
||||
calmed.Friends = M
|
||||
|
||||
qdel(src)
|
||||
|
||||
@@ -91,7 +93,9 @@
|
||||
calmed_type = text2path("/mob/living/carbon/slime/adult/" + path_end)
|
||||
|
||||
var/mob/living/carbon/slime/calmed = new calmed_type(loc)
|
||||
for(var/mob/M in friends)
|
||||
calmed.Friends += M
|
||||
for(var/datum/weakref/ref in friends)
|
||||
var/mob/M = ref.get()
|
||||
if (istype(M))
|
||||
calmed.Friends = M
|
||||
|
||||
qdel(src)
|
||||
|
||||
@@ -93,8 +93,9 @@ var/global/gourmonger_saturation = 0
|
||||
return 0
|
||||
if((istype(L,/mob/living/carbon/human/dummy)) && (faction == "adminbus mob"))
|
||||
return 0
|
||||
if(friends.Find(L))
|
||||
return 0
|
||||
for(var/datum/weakref/ref in friends)
|
||||
if (ref.get() == L)
|
||||
return 0
|
||||
if(!L.stat && !hangry) //So we attack corpses but not living creatures unless we're starving
|
||||
return 0
|
||||
if(sniffTarget) //Why are we running across the station if there's food right in front of us?
|
||||
|
||||
Reference in New Issue
Block a user