Fixing dem runtimes:

Temp-fix for mob/say.dm It's being sent null from Tcomms, so I'll leave it to somebody with experience with that.

Fix for items bein  in your inventory and on the floor

Fix to stop people pulling themselves and causing runtimes (lol)

Fixes a bunch of stuff in the flash code. EMPs will now cause flashes to flash their holder. They don't runtime when flashing cadavers. They don't runtime when being EMPed. They will (hopefully) rev those select few buggy people who weren't getting reved previously. (I can't fix that totally without playing with a bunch of mind stuff)

Fix for throwing nothing. :P

Fix for removing tanks that don't exist from transfer valves.

ummm...I think that's it

git-svn-id: http://tgstation13.googlecode.com/svn/trunk@3441 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
elly1989@rocketmail.com
2012-04-12 04:44:07 +00:00
parent fb737f3ec4
commit 7afb3f435d
6 changed files with 86 additions and 63 deletions
+58 -42
View File
@@ -15,14 +15,25 @@
var/last_used = 0 //last world.time it was used.
/obj/item/device/flash/proc/clown_check(var/mob/user)
if((user.mutations & CLUMSY) && prob(50))
if(user && (user.mutations & CLUMSY) && prob(50))
user << "\red The Flash slips out of your hand."
user.drop_item()
return 0
return 1
/obj/item/device/flash/proc/flash_recharge()
//capacitor recharges over time
for(var/i=0, i<3, i++)
if(last_used+600 > world.time)
break
last_used += 600
times_used -= 2
last_used = world.time
times_used = max(0,round(times_used)) //sanity
/obj/item/device/flash/attack(mob/living/M as mob, mob/user as mob)
if(!user || !M) return //sanity
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been flashed (attempt) with [src.name] by [user.name] ([user.ckey])</font>")
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to flash [M.name] ([M.ckey])</font>")
@@ -31,30 +42,24 @@
if(!clown_check(user)) return
if(broken)
user.show_message("\red The [src.name] is broken", 2)
user.show_message("<span class='warning'>The [src.name] is broken.</span>", 2)
return
//capacitor recharges over time
for(var/i=0, i<3, i++)
if(last_used+600 > world.time)
break
last_used += 600
times_used--
flash_recharge()
//spamming the flash before it's fully charged (60seconds) increases the chance of it breaking
//It will never break on the first use.
times_used = max(0,round(times_used)) //sanity
switch(times_used)
if(0 to 5)
last_used = world.time
if(prob(times_used)) //if you use it 5 times in a minute it has a 10% chance to break!
broken = 1
user << "\red The bulb has burnt out!"
user << "<span class='warning'>The bulb has burnt out!</span>"
icon_state = "flashburnt"
return
times_used++
else //can only use it 5 times a minute
user.show_message("\red *click* *click*", 2)
user.show_message("<span class='warning'>*click* *click*</span>", 2)
return
playsound(src.loc, 'flash.ogg', 100, 1)
var/flashfail = 0
@@ -65,22 +70,25 @@
M.Weaken(10)
flick("e_flash", M.flash)
if(ishuman(M) && ishuman(user))
if(user.mind in ticker.mode.head_revolutionaries)
if(ishuman(M) && ishuman(user) && M.stat!=DEAD)
if(user.mind && user.mind in ticker.mode.head_revolutionaries)
var/revsafe = 0
for(var/obj/item/weapon/implant/loyalty/L in M)
if(L && L.implanted)
revsafe = 1
break
if(M.mind.has_been_rev)
revsafe = 2
if(!revsafe)
M.mind.has_been_rev = 1
ticker.mode.add_revolutionary(M.mind)
else if(revsafe == 1)
user << "\red Something seems to be blocking the flash!"
else
user << "\red This mind seems resistant to the flash!"
M:update_mind() //give them a mind datum if they don't have one. won't work if they are logged out/ghosted or something.
if(M.mind)
if(M.mind.has_been_rev)
revsafe = 2
if(!revsafe)
M.mind.has_been_rev = 1
ticker.mode.add_revolutionary(M.mind)
else if(revsafe == 1)
user << "<span class='warning'>Something seems to be blocking the flash!</span>"
else
user << "<span class='warning'>This mind seems resistant to the flash!</span>"
user << "<span class='warning'>This mind is so vacant that it is not susceptible to influence!</span>"
else
flashfail = 1
@@ -101,50 +109,42 @@
sleep(5)
del(animation)
if(!flashfail)
flick("flash2", src)
for(var/mob/O in viewers(user, null))
O.show_message(text("\red [] blinds [] with the flash!", user, M))
O.show_message("<span class='disarm'>[user] blinds [M] with the flash!</span>")
else
for(var/mob/O in viewers(user, null))
O.show_message(text("\blue [] fails to blind [] with the flash!", user, M))
O.show_message("<span class='notice'>[user] fails to blind [M] with the flash!</span>")
return
/obj/item/device/flash/attack_self(mob/living/carbon/user as mob, flag = 0, emp = 0)
if(!emp)
if (!clown_check(user)) return
if(!user || !clown_check(user)) return
if(broken)
if(user)
user.show_message("\red The [src.name] is broken", 2)
user.show_message("<span class='warning'>The [src.name] is broken</span>", 2)
return
//capacitor recharges over time
for(var/i=0, i<3, i++)
if(last_used+600 > world.time)
break
last_used += 600
times_used -= 2
last_used = world.time
flash_recharge()
//spamming the flash before it's fully charged (60seconds) increases the chance of it breaking
//It will never break on the first use.
times_used = max(0,round(times_used)) //sanity
switch(times_used)
if(0 to 5)
if(prob(2*times_used)) //if you use it 5 times in a minute it has a 10% chance to break!
broken = 1
user << "\red The bulb has burnt out!"
user << "<span class='warning'>The bulb has burnt out!</span>"
icon_state = "flashburnt"
return
times_used++
else //can only use it 5 times a minute
user.show_message("\red *click* *click*", 2)
user.show_message("<span class='warning'>*click* *click*</span>", 2)
return
playsound(src.loc, 'flash.ogg', 100, 1)
flick("flash2", src)
if(isrobot(user))
if(user && isrobot(user))
spawn(0)
var/atom/movable/overlay/animation = new(user.loc)
animation.layer = user.layer + 1
@@ -168,5 +168,21 @@
return
/obj/item/device/flash/emp_act(severity)
src.attack_self(null,1,1)
if(broken) return
flash_recharge()
switch(times_used)
if(0 to 5)
if(prob(2*times_used))
broken = 1
icon_state = "flashburnt"
return
times_used++
if(istype(loc, /mob/living/carbon))
var/mob/living/carbon/M = loc
var/safety = M.eyecheck()
if(safety <= 0)
M.Weaken(10)
flick("e_flash", M.flash)
for(var/mob/O in viewers(M, null))
O.show_message("<span class='disarm'>[M] is blinded by the flash!</span>")
..()
+18 -18
View File
@@ -1,6 +1,6 @@
/obj/item/device/transfer_valve
icon = 'assemblies.dmi'
name = "Tank transfer valve" // because that's what it is exadv1 and don't you dare change it
name = "tank transfer valve"
icon_state = "valve_1"
desc = "Regulates the transfer of air between two tanks"
var/obj/item/weapon/tank/tank_one
@@ -19,34 +19,34 @@
attackby(obj/item/item, mob/user)
if(istype(item, /obj/item/weapon/tank))
if(tank_one && tank_two)
user << "\red There are already two tanks attached, remove one first!"
user << "<span class='warning'>There are already two tanks attached, remove one first.</span>"
return
if(!tank_one)
tank_one = item
user.drop_item()
item.loc = src
user << "\blue You attach the tank to the transfer valve"
user << "<span class='notice'>You attach the tank to the transfer valve.</span>"
else if(!tank_two)
tank_two = item
user.drop_item()
item.loc = src
user << "\blue You attach the tank to the transfer valve!"
user << "<span class='notice'>You attach the tank to the transfer valve.</span>"
update_icon()
//TODO: Have this take an assemblyholder
else if(isassembly(item))
var/obj/item/device/assembly/A = item
if(A.secured)
user << "\red The device is secured!"
user << "<span class='notice'>The device is secured.</span>"
return
if(attached_device)
user << "\red There is already an device attached to the valve, remove it first!"
user << "<span class='warning'>There is already an device attached to the valve, remove it first.</span>"
return
user.remove_from_mob(item)
attached_device = A
A.loc = src
user << "\blue You attach the [item] to the valve controls and secure it!"
user << "<span class='notice'>You attach the [item] to the valve controls and secure it.</span>"
A.holder = src
A.toggle_secure()
@@ -75,39 +75,39 @@
onclose(user, "trans_valve")
return
//CARN: MARKER
Topic(href, href_list)
..()
if (usr.stat|| usr.restrained())
if ( usr.stat || usr.restrained() )
return
if (src.loc == usr)
if(href_list["tankone"])
if(tank_one && href_list["tankone"])
split_gases()
valve_open = 0
tank_one.loc = get_turf(src)
tank_one = null
update_icon()
if(href_list["tanktwo"])
else if(tank_two && href_list["tanktwo"])
split_gases()
valve_open = 0
tank_two.loc = get_turf(src)
tank_two = null
update_icon()
if(href_list["open"])
else if(href_list["open"])
toggle_valve()
if(href_list["rem_device"])
if(attached_device)
else if(attached_device)
if(href_list["rem_device"])
attached_device.loc = get_turf(src)
attached_device:holder = null
attached_device = null
update_icon()
if(href_list["device"])
attached_device.attack_self(usr)
update_icon()
if(href_list["device"])
attached_device.attack_self(usr)
src.attack_self(usr)
src.add_fingerprint(usr)
return
return
process_activation(var/obj/item/device/D)
if(toggle)