Mining Drone Update

This commit is contained in:
Fox-McCloud
2016-08-20 20:51:04 -04:00
parent ce58dc1366
commit 458b029833
2 changed files with 117 additions and 21 deletions
+117 -21
View File
@@ -693,6 +693,8 @@
qdel(src)
/**********************Mining drone**********************/
#define MINEDRONE_COLLECT 1
#define MINEDRONE_ATTACK 2
/mob/living/simple_animal/hostile/mining_drone
name = "nanotrasen minebot"
@@ -701,7 +703,6 @@
icon_state = "mining_drone"
icon_living = "mining_drone"
status_flags = CANSTUN|CANWEAKEN|CANPUSH
stop_automated_movement_when_pulled = 1
mouse_opacity = 1
faction = list("neutral")
a_intent = I_HARM
@@ -718,6 +719,7 @@
melee_damage_upper = 15
environment_smash = 0
check_friendly_fire = 1
stop_automated_movement_when_pulled = 1
attacktext = "drills"
attack_sound = 'sound/weapons/circsawhit.ogg'
ranged = 1
@@ -730,18 +732,43 @@
wanted_objects = list(/obj/item/weapon/ore/diamond, /obj/item/weapon/ore/gold, /obj/item/weapon/ore/silver,
/obj/item/weapon/ore/plasma, /obj/item/weapon/ore/uranium, /obj/item/weapon/ore/iron,
/obj/item/weapon/ore/bananium, /obj/item/weapon/ore/tranquillite, /obj/item/weapon/ore/glass)
healable = 0
var/mode = MINEDRONE_COLLECT
var/light_on = 0
/mob/living/simple_animal/hostile/mining_drone/attackby(obj/item/I as obj, mob/user as mob, params)
var/datum/action/innate/minedrone/toggle_light/toggle_light_action
var/datum/action/innate/minedrone/toggle_meson_vision/toggle_meson_vision_action
var/datum/action/innate/minedrone/toggle_mode/toggle_mode_action
var/datum/action/innate/minedrone/dump_ore/dump_ore_action
/mob/living/simple_animal/hostile/mining_drone/New()
..()
toggle_light_action = new()
toggle_light_action.Grant(src)
toggle_meson_vision_action = new()
toggle_meson_vision_action.Grant(src)
toggle_mode_action = new()
toggle_mode_action.Grant(src)
dump_ore_action = new()
dump_ore_action.Grant(src)
SetCollectBehavior()
/mob/living/simple_animal/hostile/mining_drone/sentience_act()
AIStatus = AI_OFF
check_friendly_fire = 0
/mob/living/simple_animal/hostile/mining_drone/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/weldingtool))
var/obj/item/weapon/weldingtool/W = I
if(W.welding && !stat)
if(FindTarget())//if the bot has anything to shoot at, to prevent combat repair cheesing
if(AIStatus != AI_OFF && AIStatus != AI_IDLE)
to_chat(user, "<span class='info'>[src] is moving around too much to repair!</span>")
return
if(maxHealth == health)
to_chat(user, "<span class='info'>[src] is at full integrity.</span>")
else
adjustHealth(-10)//actually repairs the bot, not damages it
adjustBruteLoss(-10)
to_chat(user, "<span class='info'>You repair some of the armor on [src].</span>")
return
if(istype(I, /obj/item/device/mining_scanner) || istype(I, /obj/item/device/t_scanner/adv_mining_scanner))
@@ -754,27 +781,23 @@
..()
visible_message("<span class='danger'>[src] is destroyed!</span>")
new /obj/effect/decal/cleanable/blood/gibs/robot(src.loc)
DropOre()
DropOre(0)
qdel(src)
return
/mob/living/simple_animal/hostile/mining_drone/New()
..()
SetCollectBehavior()
/mob/living/simple_animal/hostile/mining_drone/attack_hand(mob/living/carbon/human/M)
if(M.a_intent == I_HELP)
switch(search_objects)
if(0)
SetCollectBehavior()
toggle_mode()
switch(mode)
if(MINEDRONE_COLLECT)
to_chat(M, "<span class='info'>[src] has been set to search and store loose ore.</span>")
if(2)
SetOffenseBehavior()
if(MINEDRONE_ATTACK)
to_chat(M, "<span class='info'>[src] has been set to attack hostile wildlife.</span>")
return
..()
/mob/living/simple_animal/hostile/mining_drone/proc/SetCollectBehavior()
mode = MINEDRONE_COLLECT
idle_vision_range = 9
search_objects = 2
wander = 1
@@ -782,8 +805,10 @@
minimum_distance = 1
retreat_distance = null
icon_state = "mining_drone"
to_chat(src, "<span class='info'>You are set to collect mode. You can now collect loose ore.</span>")
/mob/living/simple_animal/hostile/mining_drone/proc/SetOffenseBehavior()
mode = MINEDRONE_ATTACK
idle_vision_range = 7
search_objects = 0
wander = 0
@@ -791,9 +816,10 @@
retreat_distance = 1
minimum_distance = 2
icon_state = "mining_drone_offense"
to_chat(src, "<span class='info'>You are set to attack mode. You can now attack from range.</span>")
/mob/living/simple_animal/hostile/mining_drone/AttackingTarget()
if(istype(target, /obj/item/weapon/ore))
if(istype(target, /obj/item/weapon/ore) && mode == MINEDRONE_COLLECT)
CollectOre()
return
..()
@@ -808,18 +834,84 @@
O.forceMove(src)
return
/mob/living/simple_animal/hostile/mining_drone/proc/DropOre()
/mob/living/simple_animal/hostile/mining_drone/proc/DropOre(message = 1)
if(!contents.len)
if(message)
to_chat(src, "<span class='notice'>You attempt to dump your stored ore, but you have none.</span>")
return
if(message)
to_chat(src, "<span class='notice'>You dump your stored ore.</span>")
for(var/obj/item/weapon/ore/O in contents)
contents -= O
O.forceMove(loc)
return
/mob/living/simple_animal/hostile/mining_drone/adjustHealth()
if(search_objects)
/mob/living/simple_animal/hostile/mining_drone/adjustHealth(amount)
if(mode != MINEDRONE_ATTACK && amount > 0)
SetOffenseBehavior()
..()
. = ..()
/mob/living/simple_animal/hostile/mining_drone/proc/toggle_mode()
switch(mode)
if(MINEDRONE_COLLECT)
SetOffenseBehavior()
if(MINEDRONE_ATTACK)
SetCollectBehavior()
else //This should never happen.
mode = MINEDRONE_COLLECT
SetCollectBehavior()
//Actions for sentient minebots
/datum/action/innate/minedrone
check_flags = AB_CHECK_CONSCIOUS
background_icon_state = "bg_default"
/datum/action/innate/minedrone/toggle_light
name = "Toggle Light"
button_icon_state = "mech_lights_off"
/datum/action/innate/minedrone/toggle_light/Activate()
var/mob/living/simple_animal/hostile/mining_drone/user = owner
if(user.light_on)
user.set_light(0)
else
user.set_light(6)
user.light_on = !user.light_on
to_chat(user, "<span class='notice'>You toggle your light [user.light_on ? "on" : "off"].</span>")
/datum/action/innate/minedrone/toggle_meson_vision
name = "Toggle Meson Vision"
button_icon_state = "meson"
/datum/action/innate/minedrone/toggle_meson_vision/Activate()
var/mob/living/simple_animal/hostile/mining_drone/user = owner
if(user.sight & SEE_TURFS)
user.sight &= ~SEE_TURFS
user.see_invisible = SEE_INVISIBLE_LIVING
else
user.sight |= SEE_TURFS
user.see_invisible = SEE_INVISIBLE_MINIMUM
to_chat(user, "<span class='notice'>You toggle your meson vision [(user.sight & SEE_TURFS) ? "on" : "off"].</span>")
/datum/action/innate/minedrone/toggle_mode
name = "Toggle Mode"
button_icon_state = "mech_cycle_equip_off"
/datum/action/innate/minedrone/toggle_mode/Activate()
var/mob/living/simple_animal/hostile/mining_drone/user = owner
user.toggle_mode()
/datum/action/innate/minedrone/dump_ore
name = "Dump Ore"
button_icon_state = "mech_eject"
/datum/action/innate/minedrone/dump_ore/Activate()
var/mob/living/simple_animal/hostile/mining_drone/user = owner
user.DropOre()
/**********************Minebot Upgrades**********************/
@@ -832,8 +924,8 @@
icon_state = "door_electronics"
icon = 'icons/obj/doors/door_assembly.dmi'
/obj/item/device/mine_bot_ugprade/afterattack(mob/living/simple_animal/hostile/mining_drone/M, mob/user)
if(!istype(M))
/obj/item/device/mine_bot_ugprade/afterattack(mob/living/simple_animal/hostile/mining_drone/M, mob/user, proximity)
if(!istype(M) || !proximity)
return
upgrade_bot(M, user)
@@ -881,6 +973,10 @@
icon_state = "door_electronics"
icon = 'icons/obj/doors/door_assembly.dmi'
sentience_type = SENTIENCE_MINEBOT
origin_tech = "programming=6"
#undef MINEDRONE_COLLECT
#undef MINEDRONE_ATTACK
/**********************Mining drone kit**********************/