Merge pull request #5446 from Unfit/PIN

Fixes thrown items not dealing enough damage
This commit is contained in:
d3athrow
2015-07-23 15:09:57 -05:00
3 changed files with 45 additions and 36 deletions

View File

@@ -76,7 +76,7 @@ var/global/list/ghdel_profiling = list()
//writepanic("[__FILE__].[__LINE__] ([src.type])([usr ? usr.ckey : ""]) \\/atom/proc/throw_impact() called tick#: [world.time]")
if(istype(hit_atom,/mob/living))
var/mob/living/M = hit_atom
M.hitby(src)
M.hitby(src,speed,src.dir)
log_attack("<font color='red'>[hit_atom] ([M ? M.ckey : "what"]) was hit by [src] thrown by ([src.fingerprintslast])</font>")

View File

@@ -66,7 +66,7 @@
src.dust()
return absorb
/mob/living/hitby(atom/movable/AM as mob|obj,var/speed = 5)//Standardization and logging -Sieve
/mob/living/hitby(atom/movable/AM as mob|obj,var/speed = 5,var/dir)//Standardization and logging -Sieve
if(flags & INVULNERABLE)
return
if(istype(AM,/obj/))
@@ -81,44 +81,48 @@
if(armor < 2)
apply_damage(O.throwforce*(speed/5), dtype, zone, armor, O.is_sharp(), O)
// Begin BS12 momentum-transfer code.
var/client/assailant = directory[ckey(O.fingerprintslast)]
var/mob/M
if(assailant && assailant.mob && istype(assailant.mob,/mob))
M = assailant.mob
if(speed >= 20)
var/obj/item/weapon/W = O
var/momentum = speed/2
visible_message("<span class='warning'>[src] staggers under the impact!</span>","<span class='warning'>You stagger under the impact!</span>")
src.throw_at(get_edge_target_turf(src,dir),1,momentum)
if(istype(W.loc,/mob/living) && W.is_sharp()) //Projectile is embedded and suitable for pinning.
if(!istype(src,/mob/living/carbon/human)) //Handles embedding for non-humans and simple_animals.
O.loc = src
src.embedded += O
var/turf/T = near_wall(dir,2)
if(T)
src.loc = T
visible_message("<span class='warning'>[src] is pinned to the wall by [O]!</span>","<span class='warning'>You are pinned to the wall by [O]!</span>")
src.anchored = 1
src.pinned += O
//Log stuf!
if(!O.fingerprintslast)
return
var/client/assailant = directory[ckey(O.fingerprintslast)]
if(assailant && assailant.mob && istype(assailant.mob,/mob))
var/mob/M = assailant.mob
src.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been hit with a thrown [O], last touched by [M.name] ([assailant.ckey]) (speed: [speed])</font>")
M.attack_log += text("\[[time_stamp()]\] <font color='red'>Hit [src.name] ([src.ckey]) with a thrown [O] (speed: [speed])</font>")
msg_admin_attack("[src.name] ([src.ckey]) was hit by a thrown [O], last touched by [M.name] ([assailant.ckey]) (speed: [speed]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[src.x];Y=[src.y];Z=[src.z]'>JMP</a>)")
if(!iscarbon(M))
src.LAssailant = null
else
src.LAssailant = M
src.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been hit with a thrown [O], last touched by [M.name] ([assailant.ckey])</font>")
M.attack_log += text("\[[time_stamp()]\] <font color='red'>Hit [src.name] ([src.ckey]) with a thrown [O]</font>")
msg_admin_attack("[src.name] ([src.ckey]) was hit by a thrown [O], last touched by [M.name] ([assailant.ckey]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[src.x];Y=[src.y];Z=[src.z]'>JMP</a>)")
if(!iscarbon(M))
src.LAssailant = null
else
src.LAssailant = M
// Begin BS12 momentum-transfer code.
if(speed >= 20)
var/obj/item/weapon/W = O
var/momentum = speed/2
var/dir = get_dir(M,src)
visible_message("<span class='warning'>[src] staggers under the impact!</span>","<span class='warning'>You stagger under the impact!</span>")
src.throw_at(get_edge_target_turf(src,dir),1,momentum)
if(istype(W.loc,/mob/living) && W.is_sharp()) //Projectile is embedded and suitable for pinning.
if(!istype(src,/mob/living/carbon/human)) //Handles embedding for non-humans and simple_animals.
O.loc = src
src.embedded += O
var/turf/T = near_wall(dir,2)
if(T)
src.loc = T
visible_message("<span class='warning'>[src] is pinned to the wall by [O]!</span>","<span class='warning'>You are pinned to the wall by [O]!</span>")
src.anchored = 1
src.pinned += O
/mob/living/proc/near_wall(var/direction,var/distance=1)

View File

@@ -0,0 +1,5 @@
author: Unid
delete-after: True
changes:
- bugfix: Damage of flying items is now properly affected by speed. This means that items thrown by hand deal less damage and items shot out of a pneumatic cannon deal more damage.
- bugfix: Getting hit by a fast enough item will now properly throw you a few tiles back.