Merge remote-tracking branch 'upstream/dev-freeze' into dev

Conflicts:
	code/game/gamemodes/cult/runes.dm
	code/modules/paperwork/paper.dm
	code/modules/projectiles/projectile.dm
This commit is contained in:
PsiOmega
2015-04-08 10:55:26 +02:00
26 changed files with 179 additions and 85 deletions
+1 -1
View File
@@ -296,7 +296,7 @@ var/list/admin_verbs_mentor = list(
if(holder.rights & R_SERVER) verbs += admin_verbs_server
if(holder.rights & R_DEBUG)
verbs += admin_verbs_debug
if(config.debugparanoid && !check_rights(R_ADMIN))
if(config.debugparanoid && !(holder.rights & R_ADMIN))
verbs.Remove(admin_verbs_paranoid_debug) //Right now it's just callproc but we can easily add others later on.
if(holder.rights & R_POSSESS) verbs += admin_verbs_possess
if(holder.rights & R_PERMISSIONS) verbs += admin_verbs_permissions
+6
View File
@@ -661,6 +661,12 @@ var/global/list/gear_datums = list()
cost = 2
slot = slot_shoes
/datum/gear/toeless_jackboots
display_name = "toe-less jackboots"
path = /obj/item/clothing/shoes/jackboots/fluff/kecer_eldraran //permisson of owner of custom item was granted
cost = 2
slot = slot_shoes
/datum/gear/sandal
display_name = "sandals"
path = /obj/item/clothing/shoes/sandal
@@ -105,7 +105,14 @@
// Okay, it wasn't a terminal being touched, check for all the simple insertions.
if(input_device.type in list(/obj/item/device/paicard, /obj/item/device/mmi, /obj/item/device/mmi/digital/posibrain))
integrate_ai(input_device,user)
if(integrated_ai)
integrated_ai.attackby(input_device,user)
// If the transfer was successful, we can clear out our vars.
if(integrated_ai.loc != src)
integrated_ai = null
eject_ai()
else
integrate_ai(input_device,user)
return 1
return 0
+18 -13
View File
@@ -1,5 +1,5 @@
/obj/item/device/eftpos
name = "EFTPOS scanner"
name = "\improper EFTPOS scanner"
desc = "Swipe your ID card to make purchases electronically."
icon = 'icons/obj/device.dmi'
icon_state = "eftpos"
@@ -110,11 +110,13 @@
else
user << browse(null,"window=eftpos")
/obj/item/device/eftpos/attackby(O as obj, user as mob)
if(istype(O, /obj/item/weapon/card))
/obj/item/device/eftpos/attackby(obj/item/O as obj, user as mob)
var/obj/item/weapon/card/id/I = O.GetID()
if(I)
if(linked_account)
var/obj/item/weapon/card/I = O
scan_card(I)
scan_card(I, O)
else
usr << "\icon[src]<span class='warning'>Unable to connect to linked account.</span>"
else if (istype(O, /obj/item/weapon/spacecash/ewallet))
@@ -124,7 +126,7 @@
if(transaction_locked && !transaction_paid)
if(transaction_amount <= E.worth)
playsound(src, 'sound/machines/chime.ogg', 50, 1)
src.visible_message("\icon[src] The [src] chimes.")
src.visible_message("\icon[src] \The [src] chimes.")
transaction_paid = 1
//transfer the money
@@ -141,7 +143,7 @@
T.time = worldtime2text()
linked_account.transaction_log.Add(T)
else
usr << "\icon[src]<span class='warning'>The charge card doesn't have that much money!</span>"
usr << "\icon[src]<span class='warning'>\The [O] doesn't have that much money!</span>"
else
usr << "\icon[src]<span class='warning'>Connected account has been suspended.</span>"
else
@@ -225,10 +227,13 @@
src.attack_self(usr)
/obj/item/device/eftpos/proc/scan_card(var/obj/item/weapon/card/I)
/obj/item/device/eftpos/proc/scan_card(var/obj/item/weapon/card/I, var/obj/item/ID_container)
if (istype(I, /obj/item/weapon/card/id))
var/obj/item/weapon/card/id/C = I
visible_message("<span class='info'>[usr] swipes a card through [src].</span>")
if(I==ID_container || ID_container == null)
usr.visible_message("<span class='info'>\The [usr] swipes a card through \the [src].</span>")
else
usr.visible_message("<span class='info'>\The [usr] swipes \the [ID_container] through \the [src].</span>")
if(transaction_locked && !transaction_paid)
if(linked_account)
if(!linked_account.suspended)
@@ -242,7 +247,7 @@
if(!D.suspended)
if(transaction_amount <= D.money)
playsound(src, 'sound/machines/chime.ogg', 50, 1)
src.visible_message("\icon[src] The [src] chimes.")
src.visible_message("\icon[src] \The [src] chimes.")
transaction_paid = 1
//transfer the money
@@ -283,13 +288,13 @@
else if (istype(I, /obj/item/weapon/card/emag))
if(transaction_locked)
if(transaction_paid)
usr << "\icon[src]<span class='info'>You stealthily swipe [I] through [src].</span>"
usr << "\icon[src]<span class='info'>You stealthily swipe \the [I] through \the [src].</span>"
transaction_locked = 0
transaction_paid = 0
else
visible_message("<span class='info'>[usr] swipes a card through [src].</span>")
usr.visible_message("<span class='info'>\The [usr] swipes a card through \the [src].</span>")
playsound(src, 'sound/machines/chime.ogg', 50, 1)
src.visible_message("\icon[src] The [src] chimes.")
src.visible_message("\icon[src] \The [src] chimes.")
transaction_paid = 1
else
..()
+4 -2
View File
@@ -62,7 +62,7 @@
matter = list("metal" = 3750)
var/digspeed = 40 //moving the delay to an item var so R&D can make improved picks. --NEO
origin_tech = "materials=1;engineering=1"
attack_verb = list("hit", "pierced", "sliced", "attacked", "drilled")
attack_verb = list("hit", "pierced", "sliced", "attacked")
var/drill_sound = 'sound/weapons/Genhit.ogg'
var/drill_verb = "drilling"
sharp = 1
@@ -107,6 +107,7 @@
digspeed = 20
origin_tech = "materials=4"
desc = "This makes no metallurgic sense."
drill_verb = "picking"
/obj/item/weapon/pickaxe/plasmacutter
name = "plasma cutter"
@@ -127,7 +128,8 @@
item_state = "dpickaxe"
digspeed = 10
origin_tech = "materials=6;engineering=4"
desc = "A pickaxe with a diamond pick head, this is just like minecraft."
desc = "A pickaxe with a diamond pick head."
drill_verb = "picking"
/obj/item/weapon/pickaxe/diamonddrill //When people ask about the badass leader of the mining tools, they are talking about ME!
name = "diamond mining drill"
@@ -74,7 +74,7 @@
mutations.Add(HUSK)
status_flags |= DISFIGURED //makes them unknown without fucking up other stuff like admintools
update_body(0)
update_body(1)
return
/mob/living/carbon/human/proc/Drain()
@@ -220,14 +220,14 @@
if (istype(l_hand,/obj/item/weapon/gun))
W = l_hand
chance = hand ? 40 : 20
chance += hand ? 40 : 20
if (istype(r_hand,/obj/item/weapon/gun))
else if (istype(r_hand,/obj/item/weapon/gun))
W = r_hand
chance = !hand ? 40 : 20
chance += !hand ? 40 : 20
if (prob(chance))
visible_message("<span class='danger'>[src]'s [W] goes off during struggle!</span>")
visible_message("<span class='danger'>[src]'s [W.name] goes off during struggle!")
var/list/turfs = list()
for(var/turf/T in view())
turfs += T
@@ -41,12 +41,12 @@
if (target.l_hand)
// Disarm left hand
//Urist McAssistant dropped the macguffin with a scream just sounds odd. Plus it doesn't work with NO_PAIN
target.visible_message("<span class='danger'>\The [target.l_hand] was knocked right out of [src]'s grasp!</span>")
target.visible_message("<span class='danger'>\The [target.l_hand] was knocked right out of [target]'s grasp!</span>")
target.drop_l_hand()
if("r_arm", "r_hand")
if (target.r_hand)
// Disarm right hand
target.visible_message("<span class='danger'>\The [target.r_hand] was knocked right out of [src]'s grasp!</span>")
target.visible_message("<span class='danger'>\The [target.r_hand] was knocked right out of [target]'s grasp!</span>")
target.drop_r_hand()
if("chest")
if(!target.lying)
@@ -10,14 +10,13 @@
is_adult = 0
maxHealth = 150
revive()
regenerate_icons()
if (!client) rabid = 1
number = rand(1, 1000)
name = "[colour] [is_adult ? "adult" : "baby"] slime ([number])"
return
. = ..(gibbed, "seizes up and falls limp...")
mood = null
regenerate_icons()
return
@@ -71,6 +71,7 @@
mutation_chance = rand(25, 35)
var/sanitizedcolour = replacetext(colour, " ", "")
coretype = text2path("/obj/item/slime_extract/[sanitizedcolour]")
regenerate_icons()
..(location)
/mob/living/carbon/slime/movement_delay()
+6 -1
View File
@@ -194,7 +194,7 @@
update_icon()
/obj/item/weapon/paper/proc/get_signature(var/obj/item/weapon/pen/P, mob/user as mob)
if(P)
if(P && istype(P, /obj/item/weapon/pen))
return P.get_signature(user)
return (user && user.real_name) ? user.real_name : "Anonymous"
@@ -351,6 +351,11 @@
t = replacetext(t, "\n", "<BR>")
t = parsepencode(t, i, usr, iscrayon) // Encode everything from pencode to html
if(fields > 50)//large amount of fields creates a heavy load on the server, see updateinfolinks() and addtofield()
usr << "<span class='warning'>Too many fields. Sorry, you can't do this.</span>"
return
if(id!="end")
addtofield(text2num(id), t) // He wants to edit a field, let him.
else
@@ -8,7 +8,7 @@
load_method = MAGAZINE
/obj/item/weapon/gun/projectile/colt/detective
desc = "A cheap Martian knock-off of a Colt M1911. Uses less-than-lethal .45 rounds."
desc = "A cheap Martian knock-off of a Colt M1911. Uses .45 rounds."
magazine_type = /obj/item/ammo_magazine/c45m/rubber
/obj/item/weapon/gun/projectile/colt/detective/verb/rename_gun()
@@ -30,7 +30,7 @@
return 1
/obj/item/weapon/gun/projectile/sec
desc = "A NanoTrasen designed sidearm, found pretty much everywhere humans are. Uses less-than-lethal .45 rounds."
desc = "A NanoTrasen designed sidearm, found pretty much everywhere humans are. Uses .45 rounds."
name = "\improper NT Mk58"
icon_state = "secguncomp"
magazine_type = /obj/item/ammo_magazine/c45m/rubber
@@ -40,11 +40,10 @@
/obj/item/weapon/gun/projectile/sec/flash
name = "\improper NT Mk58 signal pistol"
desc = "A NanoTrasen designed sidearm, found pretty much everywhere humans are. Uses .45 signal flash rounds."
magazine_type = /obj/item/ammo_magazine/c45m/flash
/obj/item/weapon/gun/projectile/sec/wood
desc = "A Nanotrasen designed sidearm, this one has a sweet wooden grip. Uses less-than-lethal .45 rounds."
desc = "A Nanotrasen designed sidearm, this one has a sweet wooden grip. Uses .45 rounds."
name = "\improper Custom NT Mk58"
icon_state = "secgundark"
@@ -118,7 +117,7 @@
/obj/item/weapon/gun/projectile/pistol/flash
name = "\improper Stechtkin signal pistol"
desc = "A small, easily concealable gun. Uses 9mm signal flash rounds."
desc = "A small, easily concealable gun. Uses 9mm rounds."
magazine_type = /obj/item/ammo_magazine/mc9mm/flash
/obj/item/weapon/gun/projectile/pistol/attack_hand(mob/user as mob)
+7 -5
View File
@@ -149,11 +149,13 @@
//Called when the projectile intercepts a mob. Returns 1 if the projectile hit the mob, 0 if it missed and should keep flying.
/obj/item/projectile/proc/attack_mob(var/mob/living/target_mob, var/distance, var/miss_modifier=0)
if(!istype(target_mob))
return
//accuracy bonus from aiming
if (istype(shot_from, /obj/item/weapon/gun))
var/obj/item/weapon/gun/daddy = shot_from
miss_modifier -= round(15*daddy.accuracy)
//If you aim at someone beforehead, it'll hit more often.
//Kinda balanced by fact you need like 2 seconds to aim
//As opposed to no-delay pew pew
@@ -197,7 +199,7 @@
/obj/item/projectile/Bump(atom/A as mob|obj|turf|area, forced=0)
if(A == src)
return 0 //no
if(A == firer)
loc = A.loc
return 0 //cannot shoot yourself
@@ -218,7 +220,7 @@
visible_message("<span class='danger'>\The [M] uses [G.affecting] as a shield!</span>")
if(Bump(G.affecting, forced=1))
return //If Bump() returns 0 (keep going) then we continue on to attack M.
passthrough = !attack_mob(M, distance)
else
passthrough = 1 //so ghosts don't stop bullets
@@ -227,7 +229,7 @@
if(isturf(A))
for(var/obj/O in A)
O.bullet_act(src)
for(var/mob/M in A)
for(var/mob/living/M in A)
attack_mob(M, distance)
//penetrating projectiles can pass through things that otherwise would not let them
@@ -250,7 +252,7 @@
//stop flying
on_impact(A)
density = 0
invisibility = 101
+1 -1
View File
@@ -57,7 +57,7 @@ Also, you never added distance checking after target is selected. I've went ahea
var/mob/caster = user//The wizard/whomever doing the body transferring.
//SPELL LOSS BEGIN
admin_attack_log(caster, victim, "Used mind transfer on", "Had mind transfer used on him by", "used mind transfer on")
admin_attack_log(caster, victim, "Used mind transfer", "Was the victim of mind transfer", "used mind transfer on")
//NOTE: The caster must ALWAYS keep mind transfer, even when other spells are lost.
var/obj/effect/proc_holder/spell/targeted/mind_transfer/m_transfer = locate() in user.spell_list//Find mind transfer directly.