Fixes a bug with stationary turrets. Removes quotes in path-name to ensure type always exists. Includes code review suggestions.

This commit is contained in:
PsiOmega
2014-10-23 20:55:10 +02:00
parent 8fa9a7ab39
commit a49fd52732
6 changed files with 60 additions and 60 deletions

View File

@@ -318,9 +318,9 @@ Class Procs:
if(is_assess_emagged())
return 10 //if emagged, always return 10.
var/assess_result = on_assess_perp(perp)
if(assess_result)
return assess_result
threatcount += on_assess_perp(perp)
if(threatcount >= 10)
return threatcount
if(auth_weapons && !src.allowed(perp))
if(istype(perp.l_hand, /obj/item/weapon/gun) || istype(perp.l_hand, /obj/item/weapon/melee))
@@ -341,9 +341,6 @@ Class Procs:
&& !istype(perp.belt, /obj/item/weapon/gun/energy/laser/practice))
threatcount += 2
if(istype(perp.wear_suit, /obj/item/clothing/suit/wizrobe))
threatcount += 2
if(perp.dna && perp.dna.mutantrace && perp.dna.mutantrace != "none")
threatcount += 2

View File

@@ -3,6 +3,10 @@
This code is slightly more documented than normal, as requested by XSI on IRC.
*/
#define TURRET_PRIORITY_TARGET 2
#define TURRET_SECONDARY_TARGET 1
#define TURRET_NOT_TARGET 0
/obj/machinery/porta_turret
name = "turret"
icon = 'icons/obj/turrets.dmi'
@@ -14,9 +18,9 @@
use_power = 1 //this turret uses and requires power
idle_power_usage = 50 //when inactive, this turret takes up constant 50 Equipment power
active_power_usage = 300 //when active, this turret takes up constant 300 Equipment power
req_access = list(access_security)
req_access = null
req_one_access = list(access_security, access_heads)
power_channel = EQUIP //drains power from the EQUIPMENT channel
req_access = list(63)
var/lasercolor = "" //Something to do with lasertag turrets, blame Sieve for not adding a comment.
var/raised = 0 //if the turret cover is "open" and the turret is raised
@@ -304,6 +308,7 @@
if(allowed(user))
locked = !locked
user << "<span class='notice'>Controls are now [locked ? "locked" : "unlocked"].</span>"
updateUsrDialog()
else
user << "<span class='notice'>Access denied.</span>"
@@ -421,47 +426,38 @@
targets += C
for(var/obj/mecha/ME in view(7,src))
if(ME.occupant)
switch(assess_carbon(ME.occupant))
if(1)
targets += ME.occupant
if(2)
secondarytargets += ME.occupant
assess_and_assign_carbon(ME.occupant, targets, secondarytargets)
for(var/obj/vehicle/train/T in view(7,src))
if(T && T.load && T.is_train_head())
switch(assess_carbon(T.load))
if(1)
targets += T.load
if(2)
secondarytargets += T.load
assess_and_assign_carbon(T.load, targets, secondarytargets)
for(var/mob/living/carbon/C in view(7,src)) //loops through all living carbon-based lifeforms in view
switch(assess_carbon(C))
if(1)
targets += C
if(2)
secondarytargets += C
assess_and_assign_carbon(C, targets, secondarytargets)
if(!tryToShootAt(targets))
if(!tryToShootAt(secondarytargets)) // if no valid targets, go for secondary targets
spawn()
popDown() // no valid targets, close the cover
/obj/machinery/porta_turret/proc/assess_and_assign_carbon(var/mob/living/carbon/C, var/list/targets, var/list/secondarytargets)
switch(assess_carbon(C))
if(TURRET_PRIORITY_TARGET)
targets += C
if(TURRET_SECONDARY_TARGET)
secondarytargets += C
/obj/machinery/porta_turret/proc/assess_carbon(var/mob/living/carbon/C)
if(!C)
return 0
return TURRET_NOT_TARGET
if(istype(C, /mob/living/carbon/alien) && check_anomalies) //git those fukken xenos
if(!C.stat) //if it's dead/dying, there's no need to keep shooting at it.
return 2
else
if(emagged) //if emagged, HOLY SHIT EVERYONE IS DANGEROUS beep boop beep
return 2
return TURRET_PRIORITY_TARGET
if(isxenomorph(C) && check_anomalies)
return C.stat ? TURRET_NOT_TARGET : TURRET_PRIORITY_TARGET //if it's dead/dying, there's no need to keep shooting at it.
else
if(C.stat || C.handcuffed) //if the perp is handcuffed or dead/dying, no need to bother really
return 0 //move onto next potential victim!
return TURRET_NOT_TARGET //move onto next potential victim!
var/dst = get_dist(src, C) //if it's too far away, why bother?
if(dst > 7)
@@ -470,23 +466,23 @@
if(ai) //If it's set to attack all nonsilicons, target them!
if(C.lying)
if(lasercolor)
return 0
return TURRET_NOT_TARGET
else
return 1
return TURRET_SECONDARY_TARGET
else
return 2
return TURRET_PRIORITY_TARGET
if(istype(C, /mob/living/carbon/human)) //if the target is a human, analyze threat level
if(ishuman(C)) //if the target is a human, analyze threat level
if(assess_perp(C, auth_weapons, check_records, lasercolor) < 4)
return 0 //if threat level < 4, keep going
return TURRET_NOT_TARGET //if threat level < 4, keep going
else if(istype(C, /mob/living/carbon/monkey))
return 0 //Don't target monkeys or borgs/AIs you dumb shit
else if(ismonkey(C))
return TURRET_NOT_TARGET //Don't target monkeys or borgs/AIs
if(C.lying) //if the perp is lying down, it's still a target but a less-important target
return 1
return TURRET_SECONDARY_TARGET
return 2 //if the perp has passed all previous tests, congrats, it is now a "shoot-me!" nominee
return TURRET_PRIORITY_TARGET //if the perp has passed all previous tests, congrats, it is now a "shoot-me!" nominee
/obj/machinery/porta_turret/proc/tryToShootAt(var/list/mob/living/targets)
while(targets.len > 0)
@@ -954,5 +950,5 @@
emagged = 1
New()
installation = new/obj/item/weapon/gun/energy/laser(loc)
installation = /obj/item/weapon/gun/energy/laser
..()

View File

@@ -89,10 +89,8 @@
user.set_machine(src)
var/loc = src.loc
if (istype(loc, /turf))
loc = loc:loc
if (!istype(loc, /area))
user << text("Turret badly positioned - loc.loc is [].", loc)
return
var/turf/T = loc
loc = T.loc
var/area/area = loc
var/t = ""

View File

@@ -181,7 +181,7 @@
update_inv_wear_mask(0)
return
/mob/proc/unEquip(obj/item/I, force) //Force overrides NODROP for things like wizarditis and admin undress.
/mob/proc/unEquip(obj/item/I, force = 0) //Force overrides NODROP for things like wizarditis and admin undress.
if(!I) //If there's nothing to drop, the drop is automatically successful. If(unEquip) should generally be used to check for NODROP.
return 1

View File

@@ -10,6 +10,15 @@
return 1
return 0
/proc/isxenomorph(A)
if(isalien(A))
return 1
if(istype(A, /mob/living/carbon))
var/mob/living/carbon/C = A
var/xeno = "Xenomorph"
return findtext(C.species.name, xeno, 0, lentext(xeno))
return 0
/proc/ismonkey(A)
if(A && istype(A, /mob/living/carbon/monkey))
return 1

View File

@@ -7,12 +7,12 @@
w_class = 3.0
matter = list("metal" = 2000)
origin_tech = "combat=3;magnets=2"
projectile_type = "/obj/item/projectile/beam"
projectile_type = /obj/item/projectile/beam
/obj/item/weapon/gun/energy/laser/practice
name = "practice laser gun"
desc = "A modified version of the basic laser gun, this one fires less concentrated energy bolts designed for target practice."
projectile_type = "/obj/item/projectile/beam/practice"
projectile_type = /obj/item/projectile/beam/practice
clumsy_check = 0
obj/item/weapon/gun/energy/laser/retro