mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-10 10:21:11 +00:00
Possibly fix PDA exploit
This commit is contained in:
@@ -28,7 +28,7 @@ proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impa
|
||||
for(var/mob/M in world) if(M.z == epicenter.z) if(!(M in close))
|
||||
// check if the mob can hear
|
||||
if(M.ear_deaf <= 0 || !M.ear_deaf) if(!istype(M.loc,/turf/space))
|
||||
M << 'explosionfar.ogg'
|
||||
M << 'sound/effects/explosionfar.ogg'
|
||||
if(adminlog)
|
||||
message_admins("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range]) in area [epicenter.loc.name] ([epicenter.x],[epicenter.y],[epicenter.z]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[epicenter.x];Y=[epicenter.y];Z=[epicenter.z]'>JMP</A>)")
|
||||
log_game("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range]) in area [epicenter.loc.name] ")
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
/client/proc/kaboom()
|
||||
|
||||
set category = "Debug"
|
||||
|
||||
var/power = input(src, "power?", "power?") as num
|
||||
var/turf/T = get_turf(src.mob)
|
||||
explosion_rec(T, power)
|
||||
|
||||
@@ -5,7 +5,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
|
||||
|
||||
/obj/item/device/pda
|
||||
name = "PDA"
|
||||
name = "\improper PDA"
|
||||
desc = "A portable microcomputer by Thinktronic Systems, LTD. Functionality determined by a preprogrammed ROM cartridge."
|
||||
icon = 'icons/obj/pda.dmi'
|
||||
icon_state = "pda"
|
||||
@@ -247,9 +247,6 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
usr << browse(HTML, "window=log;size=400x444;border=1;can_resize=1;can_close=1;can_minimize=0")
|
||||
|
||||
|
||||
/obj/item/device/pda/ai/can_use()
|
||||
return 1
|
||||
|
||||
|
||||
/obj/item/device/pda/ai/attack_self(mob/user as mob)
|
||||
if ((honkamt > 0) && (prob(60)))//For clown virus.
|
||||
@@ -282,17 +279,12 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
cartridge = new default_cartridge(src)
|
||||
new /obj/item/weapon/pen(src)
|
||||
|
||||
/obj/item/device/pda/proc/can_use()
|
||||
|
||||
if(!ismob(loc))
|
||||
/obj/item/device/pda/proc/can_use(mob/user)
|
||||
if(user && ismob(user))
|
||||
if(user.stat || user.restrained() || user.paralysis || user.stunned || user.weakened)
|
||||
return 0
|
||||
|
||||
var/mob/M = loc
|
||||
if(!M.canmove)
|
||||
return 0
|
||||
if((src in M.contents) || ( istype(loc, /turf) && in_range(src, M) ))
|
||||
if(loc == user)
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
|
||||
/obj/item/device/pda/GetAccess()
|
||||
@@ -306,7 +298,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
|
||||
/obj/item/device/pda/MouseDrop(obj/over_object as obj, src_location, over_location)
|
||||
var/mob/M = usr
|
||||
if((!istype(over_object, /obj/screen)) && !M.restrained() && !M.stat && can_use())
|
||||
if((!istype(over_object, /obj/screen)) && can_use(M))
|
||||
return attack_self(M)
|
||||
return
|
||||
|
||||
@@ -339,7 +331,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
dat += "<h2>PERSONAL DATA ASSISTANT v.1.2</h2>"
|
||||
dat += "Owner: [owner], [ownjob]<br>"
|
||||
dat += text("ID: <A href='?src=\ref[src];choice=Authenticate'>[id ? "[id.registered_name], [id.assignment]" : "----------"]")
|
||||
dat += text("<br><A href='?src=\ref[src];choice=UpdateInfo'>[id ? "Update PDA Info" : ""]</A><br>")
|
||||
dat += text("<br><A href='?src=\ref[src];choice=UpdateInfo'>[id ? "Update PDA Info" : ""]</A><br><br>")
|
||||
|
||||
dat += "Station Time: [worldtime2text()]"//:[world.time / 100 % 6][world.time / 100 % 10]"
|
||||
|
||||
@@ -437,8 +429,8 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
var/count = 0
|
||||
|
||||
if (!toff)
|
||||
for (var/obj/item/device/pda/P in sortAtom(PDAs))
|
||||
if (!P.owner||P.toff||P == src||P.hidden) continue
|
||||
for (var/obj/item/device/pda/P in sortAtom(get_viewable_pdas()))
|
||||
if (P == src) continue
|
||||
dat += "<li><a href='byond://?src=\ref[src];choice=Message;target=\ref[P]'>[P]</a>"
|
||||
if (istype(cartridge, /obj/item/weapon/cartridge/syndicate) && P.detonate)
|
||||
dat += " (<a href='byond://?src=\ref[src];choice=Detonate;target=\ref[P]'><img src=pda_boom.png>*Detonate*</a>)"
|
||||
@@ -464,7 +456,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
if (3)
|
||||
dat += "<h4><img src=pda_atmos.png> Atmospheric Readings</h4>"
|
||||
|
||||
var/turf/T = get_turf_or_move(user.loc)
|
||||
var/turf/T = get_turf(user.loc)
|
||||
if (isnull(T))
|
||||
dat += "Unable to obtain a reading.<br>"
|
||||
else
|
||||
@@ -515,9 +507,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
//Looking for master was kind of pointless since PDAs don't appear to have one.
|
||||
//if ((src in U.contents) || ( istype(loc, /turf) && in_range(src, U) ) )
|
||||
|
||||
if(can_use()) //Why reinvent the wheel? There's a proc that does exactly that.
|
||||
if ( !(U.stat || U.restrained()) )
|
||||
|
||||
if(can_use(U)) //Why reinvent the wheel? There's a proc that does exactly that.
|
||||
add_fingerprint(U)
|
||||
U.set_machine(src)
|
||||
|
||||
@@ -727,7 +717,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
if("1") // Configure pAI device
|
||||
pai.attack_self(U)
|
||||
if("2") // Eject pAI device
|
||||
var/turf/T = get_turf_or_move(src.loc)
|
||||
var/turf/T = get_turf(src.loc)
|
||||
if(T)
|
||||
pai.loc = T
|
||||
|
||||
@@ -737,11 +727,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
mode = text2num(href_list["choice"])
|
||||
cartridge.mode = mode
|
||||
cartridge.unlock()
|
||||
else//If can't interact.
|
||||
U.unset_machine()
|
||||
U << browse(null, "window=pda")
|
||||
return
|
||||
else//If not in range or not using the pda.
|
||||
else//If not in range, can't interact or not using the pda.
|
||||
U.unset_machine()
|
||||
U << browse(null, "window=pda")
|
||||
return
|
||||
@@ -787,7 +773,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
if (last_text && world.time < last_text + 5)
|
||||
return
|
||||
|
||||
if(!can_use())
|
||||
if(!can_use(U))
|
||||
return
|
||||
|
||||
last_text = world.time
|
||||
@@ -862,7 +848,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
if(issilicon(usr))
|
||||
return
|
||||
|
||||
if ( !(usr.stat || usr.restrained()) )
|
||||
if ( can_use(usr) )
|
||||
if(id)
|
||||
remove_id()
|
||||
else
|
||||
@@ -879,7 +865,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
if(issilicon(usr))
|
||||
return
|
||||
|
||||
if ( !(usr.stat || usr.restrained()) )
|
||||
if ( can_use(usr) )
|
||||
var/obj/item/weapon/pen/O = locate() in src
|
||||
if(O)
|
||||
if (istype(loc, /mob))
|
||||
@@ -894,7 +880,6 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
else
|
||||
usr << "<span class='notice'>You cannot do this while restrained.</span>"
|
||||
|
||||
|
||||
/obj/item/device/pda/proc/id_check(mob/user as mob, choice as num)//To check for IDs; 1 for in-pda use, 2 for out of pda use.
|
||||
if(choice == 1)
|
||||
if (id)
|
||||
@@ -939,7 +924,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
else
|
||||
//Basic safety check. If either both objects are held by user or PDA is on ground and card is in hand.
|
||||
if(((src in user.contents) && (C in user.contents)) || (istype(loc, /turf) && in_range(src, user) && (C in user.contents)) )
|
||||
if(!(user.stat || user.restrained()) )//If they can still act.
|
||||
if( can_use(user) )//If they can still act.
|
||||
id_check(user, 2)
|
||||
user << "<span class='notice'>You put the ID into \the [src]'s slot.</span>"
|
||||
updateSelfDialog()//Update self dialog on success.
|
||||
@@ -961,9 +946,10 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
user << "<span class='notice'>You slide \the [C] into \the [src].</span>"
|
||||
return
|
||||
|
||||
/obj/item/device/pda/attack(mob/living/C as mob, mob/living/user as mob)
|
||||
if (istype(C, /mob/living/carbon))
|
||||
/obj/item/device/pda/attack(mob/living/carbon/C, mob/living/user as mob)
|
||||
if(istype(C))
|
||||
switch(scanmode)
|
||||
|
||||
if(1)
|
||||
|
||||
for (var/mob/O in viewers(C, null))
|
||||
@@ -1191,3 +1177,11 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
/obj/item/device/pda/emp_act(severity)
|
||||
for(var/atom/A in src)
|
||||
A.emp_act(severity)
|
||||
|
||||
/proc/get_viewable_pdas()
|
||||
. = list()
|
||||
// Returns a list of PDAs which can be viewed from another PDA/message monitor.
|
||||
for(var/obj/item/device/pda/P in PDAs)
|
||||
if(!P.owner || P.toff || P.hidden) continue
|
||||
. += P
|
||||
return .
|
||||
|
||||
@@ -677,10 +677,10 @@ Code:
|
||||
if("alert")
|
||||
post_status("alert", href_list["alert"])
|
||||
if("setmsg1")
|
||||
message1 = input("Line 1", "Enter Message Text", message1) as text|null
|
||||
message1 = reject_bad_text(input("Line 1", "Enter Message Text", message1) as text|null, 40)
|
||||
updateSelfDialog()
|
||||
if("setmsg2")
|
||||
message2 = input("Line 2", "Enter Message Text", message2) as text|null
|
||||
message2 = reject_bad_text(input("Line 2", "Enter Message Text", message2) as text|null, 40)
|
||||
updateSelfDialog()
|
||||
else
|
||||
post_status(href_list["statdisp"])
|
||||
|
||||
Reference in New Issue
Block a user