mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-10 02:16:05 +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
|
var/mob/living/simple_animal/hostile/humanoid/H = NM
|
||||||
H.items_to_drop = list()
|
H.items_to_drop = list()
|
||||||
NM.faction = "lazarus \ref[user]"
|
NM.faction = "lazarus \ref[user]"
|
||||||
NM.friends += user
|
NM.friends += makeweakref(user)
|
||||||
MC.contained_mob = NM
|
MC.contained_mob = NM
|
||||||
MC.name = "lazarus capsule - [NM.name]"
|
MC.name = "lazarus capsule - [NM.name]"
|
||||||
..()
|
..()
|
||||||
|
|||||||
@@ -823,7 +823,7 @@ proc/move_mining_shuttle()
|
|||||||
M.revive(refreshbutcher = refreshes_drops)
|
M.revive(refreshbutcher = refreshes_drops)
|
||||||
if(istype(target, /mob/living/simple_animal/hostile))
|
if(istype(target, /mob/living/simple_animal/hostile))
|
||||||
var/mob/living/simple_animal/hostile/H = M
|
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.")
|
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."
|
H.attack_log += "\[[time_stamp()]\] Revived by <b>[key_name(user)]</b> with a lazarus injector."
|
||||||
@@ -965,14 +965,10 @@ proc/move_mining_shuttle()
|
|||||||
update_icon()
|
update_icon()
|
||||||
|
|
||||||
/obj/item/device/mobcapsule/proc/take_contents(mob/user)
|
/obj/item/device/mobcapsule/proc/take_contents(mob/user)
|
||||||
for(var/mob/living/simple_animal/AM in src.loc)
|
for(var/mob/living/simple_animal/hostile/AM in loc)
|
||||||
if(istype(AM))
|
for(var/datum/weakref/things in AM.friends)
|
||||||
var/mob/living/simple_animal/M = AM
|
var/mob/M = things.get()
|
||||||
var/mob/living/simple_animal/hostile/H = M
|
if(capsuleowner == M)
|
||||||
if(!istype(H))
|
|
||||||
continue
|
|
||||||
for(var/things in H.friends)
|
|
||||||
if(capsuleowner in H.friends)
|
|
||||||
if(insert(AM, user) == -1) //Limit reached
|
if(insert(AM, user) == -1) //Limit reached
|
||||||
break
|
break
|
||||||
|
|
||||||
|
|||||||
@@ -151,8 +151,12 @@
|
|||||||
user.drop_item(F, force_drop = 1)
|
user.drop_item(F, force_drop = 1)
|
||||||
|
|
||||||
if(prob(25))
|
if(prob(25))
|
||||||
if(!friends.Find(user))
|
var/already_friend = FALSE
|
||||||
friends.Add(user)
|
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>")
|
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")
|
var/image/heart = image('icons/mob/animal.dmi',src,"heart-ani2")
|
||||||
heart.plane = ABOVE_HUMAN_PLANE
|
heart.plane = ABOVE_HUMAN_PLANE
|
||||||
|
|||||||
@@ -27,7 +27,8 @@
|
|||||||
D.get_spooked(new_target)
|
D.get_spooked(new_target)
|
||||||
|
|
||||||
/mob/living/simple_animal/hostile/deer/proc/is_spooked(var/mob/living/target)
|
/mob/living/simple_animal/hostile/deer/proc/is_spooked(var/mob/living/target)
|
||||||
if(friends.Find(target))
|
for(var/datum/weakref/ref in friends)
|
||||||
|
if (ref.get() == target)
|
||||||
return 0
|
return 0
|
||||||
if(ishuman(target))
|
if(ishuman(target))
|
||||||
/*
|
/*
|
||||||
@@ -104,8 +105,12 @@
|
|||||||
icon_state = "deer_flower"
|
icon_state = "deer_flower"
|
||||||
|
|
||||||
if(prob(25))
|
if(prob(25))
|
||||||
if(!friends.Find(user))
|
var/already_friend = FALSE
|
||||||
friends.Add(user)
|
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>")
|
to_chat(user, "<span class='info'>You have gained \the [src]'s trust.</span>")
|
||||||
name_mob(user)
|
name_mob(user)
|
||||||
qdel(A)
|
qdel(A)
|
||||||
|
|||||||
@@ -206,7 +206,9 @@
|
|||||||
if((istype(L,/mob/living/simple_animal/corgi/Ian) || istype(L,/mob/living/carbon/human/dummy)) && (faction == "adminbus mob"))
|
if((istype(L,/mob/living/simple_animal/corgi/Ian) || istype(L,/mob/living/carbon/human/dummy)) && (faction == "adminbus mob"))
|
||||||
return 0
|
return 0
|
||||||
//WE DON'T ATTACK OUR FRIENDS (used by lazarus injectors, and rabid slimes)
|
//WE DON'T ATTACK OUR FRIENDS (used by lazarus injectors, and rabid slimes)
|
||||||
if(friends.Find(L))
|
|
||||||
|
for(var/datum/weakref/ref in friends)
|
||||||
|
if (ref.get() == L)
|
||||||
return 0
|
return 0
|
||||||
return 1
|
return 1
|
||||||
if(isobj(the_target))
|
if(isobj(the_target))
|
||||||
@@ -346,7 +348,15 @@
|
|||||||
|
|
||||||
var/mob/living/simple_animal/hostile/H = from
|
var/mob/living/simple_animal/hostile/H = from
|
||||||
if(istype(H))
|
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)
|
/mob/living/simple_animal/hostile/proc/OpenFire(var/atom/ttarget)
|
||||||
set waitfor = 0
|
set waitfor = 0
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
key = mind.key // Force the ghost in here
|
key = mind.key // Force the ghost in here
|
||||||
if(Owner)
|
if(Owner)
|
||||||
faction = "necro"
|
faction = "necro"
|
||||||
friends.Add(Owner)
|
friends += makeweakref(Owner)
|
||||||
creator = Owner
|
creator = Owner
|
||||||
if(client)
|
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>")
|
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_original = faction
|
||||||
faction = ""
|
faction = ""
|
||||||
friends_temp = friends.Copy()
|
friends_temp = friends.Copy()
|
||||||
friends.Cut()
|
friends = list()
|
||||||
treacherous = TRUE
|
treacherous = TRUE
|
||||||
|
|
||||||
/mob/living/simple_animal/hostile/pitbull/proc/Calmdown()
|
/mob/living/simple_animal/hostile/pitbull/proc/Calmdown()
|
||||||
|
|||||||
@@ -52,7 +52,7 @@
|
|||||||
rabid.icon_dead = "[src.colour] baby slime dead"
|
rabid.icon_dead = "[src.colour] baby slime dead"
|
||||||
rabid.colour = "[src.colour]"
|
rabid.colour = "[src.colour]"
|
||||||
for(var/mob/M in friends)
|
for(var/mob/M in friends)
|
||||||
rabid.friends += M
|
rabid.friends += makeweakref(M)
|
||||||
qdel(src)
|
qdel(src)
|
||||||
|
|
||||||
/mob/living/simple_animal/hostile/slime/Life()
|
/mob/living/simple_animal/hostile/slime/Life()
|
||||||
@@ -79,8 +79,10 @@
|
|||||||
calmed_type = text2path("/mob/living/carbon/slime/" + path_end)
|
calmed_type = text2path("/mob/living/carbon/slime/" + path_end)
|
||||||
|
|
||||||
var/mob/living/carbon/slime/calmed = new calmed_type(loc)
|
var/mob/living/carbon/slime/calmed = new calmed_type(loc)
|
||||||
for(var/mob/M in friends)
|
for(var/datum/weakref/ref in friends)
|
||||||
calmed.Friends += M
|
var/mob/M = ref.get()
|
||||||
|
if (istype(M))
|
||||||
|
calmed.Friends = M
|
||||||
|
|
||||||
qdel(src)
|
qdel(src)
|
||||||
|
|
||||||
@@ -91,7 +93,9 @@
|
|||||||
calmed_type = text2path("/mob/living/carbon/slime/adult/" + path_end)
|
calmed_type = text2path("/mob/living/carbon/slime/adult/" + path_end)
|
||||||
|
|
||||||
var/mob/living/carbon/slime/calmed = new calmed_type(loc)
|
var/mob/living/carbon/slime/calmed = new calmed_type(loc)
|
||||||
for(var/mob/M in friends)
|
for(var/datum/weakref/ref in friends)
|
||||||
calmed.Friends += M
|
var/mob/M = ref.get()
|
||||||
|
if (istype(M))
|
||||||
|
calmed.Friends = M
|
||||||
|
|
||||||
qdel(src)
|
qdel(src)
|
||||||
|
|||||||
@@ -93,7 +93,8 @@ var/global/gourmonger_saturation = 0
|
|||||||
return 0
|
return 0
|
||||||
if((istype(L,/mob/living/carbon/human/dummy)) && (faction == "adminbus mob"))
|
if((istype(L,/mob/living/carbon/human/dummy)) && (faction == "adminbus mob"))
|
||||||
return 0
|
return 0
|
||||||
if(friends.Find(L))
|
for(var/datum/weakref/ref in friends)
|
||||||
|
if (ref.get() == L)
|
||||||
return 0
|
return 0
|
||||||
if(!L.stat && !hangry) //So we attack corpses but not living creatures unless we're starving
|
if(!L.stat && !hangry) //So we attack corpses but not living creatures unless we're starving
|
||||||
return 0
|
return 0
|
||||||
|
|||||||
Reference in New Issue
Block a user