Removes one source of decal/cleanable qdel failures (#33083)

* remove one source of qdel memes

* pls

* A housekeeping thing for the ignore list, also removes effectively unused var

* whoops
This commit is contained in:
vuonojenmustaturska
2017-11-27 13:29:43 +02:00
committed by CitadelStationBot
parent 952c25ff6e
commit f685f4bd1a
@@ -1,5 +1,3 @@
//Defines for bots are now found in code\__DEFINES\bots.dm
// AI (i.e. game AI, not the AI player) controlled bots
/mob/living/simple_animal/bot
icon = 'icons/mob/aibots.dmi'
@@ -85,6 +83,8 @@
"Waiting for clear path", "Calculating navigation path", "Pinging beacon network", "Unable to reach destination")
//This holds text for what the bot is mode doing, reported on the remote bot control interface.
var/ignorelistcleanuptimer = 1 // This ticks up every automated action, at 300 we clean the ignore list
hud_possible = list(DIAG_STAT_HUD, DIAG_BOT_HUD, DIAG_HUD) //Diagnostic HUD views
/mob/living/simple_animal/bot/proc/get_mode()
@@ -102,12 +102,12 @@
/mob/living/simple_animal/bot/proc/turn_on()
if(stat)
return 0
return FALSE
on = TRUE
set_light(initial(light_range))
update_icon()
diag_hud_set_botstat()
return 1
return TRUE
/mob/living/simple_animal/bot/proc/turn_off()
on = FALSE
@@ -157,7 +157,7 @@
return ..()
/mob/living/simple_animal/bot/bee_friendly()
return 1
return TRUE
/mob/living/simple_animal/bot/death(gibbed)
explode()
@@ -213,6 +213,15 @@
set background = BACKGROUND_ENABLED
diag_hud_set_botmode()
if (ignorelistcleanuptimer % 300 == 0) // Every 300 actions, clean up the ignore list from old junk
for(var/ref in ignore_list)
var/atom/referredatom = locate(ref)
if (!referredatom || !istype(referredatom) || QDELETED(referredatom))
ignore_list -= ref
ignorelistcleanuptimer = 1
else
ignorelistcleanuptimer++
if(!on || client)
return
@@ -223,7 +232,7 @@
if(BOT_SUMMON) //Called by PDA
bot_summon()
return
return 1 //Successful completion. Used to prevent child process() continuing if this one is ended early.
return TRUE //Successful completion. Used to prevent child process() continuing if this one is ended early.
/mob/living/simple_animal/bot/attack_hand(mob/living/carbon/human/H)
@@ -330,7 +339,7 @@
/mob/living/simple_animal/bot/radio(message, message_mode, list/spans, language)
. = ..()
if(. != 0)
return .
return
switch(message_mode)
if(MODE_HEADSET)
@@ -344,7 +353,6 @@
if(message_mode in GLOB.radiochannels)
Radio.talk_into(src, message, message_mode, spans, language)
return REDUCE_RANGE
return 0
//Generalized behavior code, override where needed!
@@ -386,15 +394,15 @@ Pass the desired type path itself, declaring a temporary var beforehand is not r
/mob/living/simple_animal/bot/proc/checkscan(scan, scan_type, old_target)
if(!istype(scan, scan_type)) //Check that the thing we found is the type we want!
return 0 //If not, keep searching!
if( (scan in ignore_list) || (scan == old_target) ) //Filter for blacklisted elements, usually unreachable or previously processed oness
return 0
return FALSE //If not, keep searching!
if( (REF(scan) in ignore_list) || (scan == old_target) ) //Filter for blacklisted elements, usually unreachable or previously processed oness
return FALSE
var/scan_result = process_scan(scan) //Some bots may require additional processing when a result is selected.
if(scan_result)
return scan_result
else
return 0 //The current element failed assessment, move on to the next.
return FALSE //The current element failed assessment, move on to the next.
return
/mob/living/simple_animal/bot/proc/check_bot(targ)
@@ -402,7 +410,7 @@ Pass the desired type path itself, declaring a temporary var beforehand is not r
if(T)
for(var/C in T.contents)
if(istype(C,type) && (C != src)) //Is there another bot there already? If so, let's skip it so we dont all atack on top of eachother.
return 1 //Let's abort if we find a bot so we dont have to keep rechecking
return TRUE //Let's abort if we find a bot so we dont have to keep rechecking
//When the scan finds a target, run bot specific processing to select it for the next step. Empty by default.
/mob/living/simple_animal/bot/proc/process_scan(scan_target)
@@ -411,27 +419,26 @@ Pass the desired type path itself, declaring a temporary var beforehand is not r
/mob/living/simple_animal/bot/proc/add_to_ignore(subject)
if(ignore_list.len < 50) //This will help keep track of them, so the bot is always trying to reach a blocked spot.
ignore_list |= subject
else if(ignore_list.len >= subject) //If the list is full, insert newest, delete oldest.
ignore_list -= ignore_list[1]
ignore_list |= subject
ignore_list += REF(subject)
else //If the list is full, insert newest, delete oldest.
ignore_list.Cut(1,2)
ignore_list += REF(subject)
/*
Movement proc for stepping a bot through a path generated through A-star.
Pass a positive integer as an argument to override a bot's default speed.
*/
/mob/living/simple_animal/bot/proc/bot_move(dest, move_speed)
if(!dest || !path || path.len == 0) //A-star failed or a path/destination was not set.
path = list()
return 0
return FALSE
dest = get_turf(dest) //We must always compare turfs, so get the turf of the dest var if dest was originally something else.
var/turf/last_node = get_turf(path[path.len]) //This is the turf at the end of the path, it should be equal to dest.
if(get_turf(src) == dest) //We have arrived, no need to move again.
return 1
return TRUE
else if(dest != last_node) //The path should lead us to our given destination. If this is not true, we must stop.
path = list()
return 0
return FALSE
var/step_count = move_speed ? move_speed : base_speed //If a value is passed into move_speed, use that instead of the default speed var.
if(step_count >= 1 && tries < BOT_STEP_MAX_RETRIES)
@@ -439,25 +446,25 @@ Pass a positive integer as an argument to override a bot's default speed.
spawn(BOT_STEP_DELAY*step_number)
bot_step(dest)
else
return 0
return 1
return FALSE
return TRUE
/mob/living/simple_animal/bot/proc/bot_step(dest) //Step,increase tries if failed
if(!path)
return 0
return FALSE
if(path.len > 1)
step_towards(src, path[1])
if(get_turf(src) == path[1]) //Successful move
path -= path[1]
path.Cut(1,2)
tries = 0
else
tries++
return 0
return FALSE
else if(path.len == 1)
step_to(src, dest)
path = list()
return 1
return TRUE
/mob/living/simple_animal/bot/proc/check_bot_access()
@@ -571,9 +578,8 @@ Pass a positive integer as an argument to override a bot's default speed.
return
else if(path.len > 0 && patrol_target) // valid path
var/turf/next = path[1]
if(next == loc)
path -= next
if(path[1] == loc)
path.Cut(1,2)
return
@@ -608,7 +614,7 @@ Pass a positive integer as an argument to override a bot's default speed.
destination = new_destination //We now know the name of where we want to go.
patrol_target = NB.loc //Get its location and set it as the target.
next_destination = NB.codes["next_patrol"] //Also get the name of the next beacon in line.
return 1
return TRUE
/mob/living/simple_animal/bot/proc/find_nearest_beacon()
for(var/obj/machinery/navbeacon/NB in GLOB.navbeacons["[z]"])
@@ -630,7 +636,7 @@ Pass a positive integer as an argument to override a bot's default speed.
//PDA control. Some bots, especially MULEs, may have more parameters.
/mob/living/simple_animal/bot/proc/bot_control(command, mob/user, turf/user_turf, list/user_access = list())
if(!on || emagged == 2 || remote_disabled) //Emagged bots do not respect anyone's authority! Bots with their remote controls off cannot get commands.
return 1 //ACCESS DENIED
return TRUE //ACCESS DENIED
if(client)
bot_control_message(command,user,user_turf,user_access)
// process control input
@@ -705,9 +711,8 @@ Pass a positive integer as an argument to override a bot's default speed.
return
else if(path.len > 0 && summon_target) //Proper path acquired!
var/turf/next = path[1]
if(next == loc)
path -= next
if(path[1] == loc)
path.Cut(1,2)
return
var/moved = bot_move(summon_target, 3) // Move attempt
@@ -749,11 +754,11 @@ Pass a positive integer as an argument to override a bot's default speed.
if(href_list["close"])// HUE HUE
if(usr in users)
users.Remove(usr)
return 1
return TRUE
if(topic_denied(usr))
to_chat(usr, "<span class='warning'>[src]'s interface is not responding!</span>")
return 1
return TRUE
add_fingerprint(usr)
if((href_list["power"]) && (bot_core.allowed(usr) || !locked))
@@ -804,14 +809,14 @@ Pass a positive integer as an argument to override a bot's default speed.
/mob/living/simple_animal/bot/proc/topic_denied(mob/user) //Access check proc for bot topics! Remember to place in a bot's individual Topic if desired.
if(!user.canUseTopic(src))
return 1
return TRUE
// 0 for access, 1 for denied.
if(emagged == 2) //An emagged bot cannot be controlled by humans, silicons can if one hacked it.
if(!hacked) //Manually emagged by a human - access denied to all.
return 1
return TRUE
else if(!issilicon(user) && !IsAdminGhost(user)) //Bot is hacked, so only silicons and admins are allowed access.
return 1
return 0
return TRUE
return FALSE
/mob/living/simple_animal/bot/proc/hack(mob/user)
var/hack
@@ -857,7 +862,7 @@ Pass a positive integer as an argument to override a bot's default speed.
faction = user.faction.Copy()
language_holder = paicard.pai.language_holder.copy(src)
add_logs(user, paicard.pai, "uploaded to [bot_name],")
return 1
return TRUE
else
to_chat(user, "<span class='warning'>[card] is inactive.</span>")
else