From 2d21c13417ae3d8919cae9667c6b0d88d7bd84bc Mon Sep 17 00:00:00 2001 From: Ren Erthilo Date: Wed, 25 Apr 2012 22:08:30 +0100 Subject: [PATCH] TG: Fixes for NTSL. NTSL now has a fixed statement-processing cap: scripts will crash when more than 1000 statements are called, and alert admins (scripts over 1000 statements are assumed to be buggy or malicious). You can now properly sleep without waking up every half a second. Work on footprints. There are now different kinds of footprints, and different blood makes different colored prints. Animals leave pawprints, humans leave footprints, aliens leave big claw prints. --- code/game/machinery/telecomms/broadcaster.dm | 3 + code/game/machinery/telecomms/logbrowser.dm | 13 +- .../machinery/telecomms/traffic_control.dm | 10 +- code/modules/DetectiveWork/detective_work.dm | 130 ++++++++++++------ code/modules/mob/living/carbon/human/life.dm | 3 +- icons/effects/footprints.dmi | Bin 1697 -> 2391 bytes 6 files changed, 107 insertions(+), 52 deletions(-) diff --git a/code/game/machinery/telecomms/broadcaster.dm b/code/game/machinery/telecomms/broadcaster.dm index 5b32f3a1f78..707e68225c4 100644 --- a/code/game/machinery/telecomms/broadcaster.dm +++ b/code/game/machinery/telecomms/broadcaster.dm @@ -288,6 +288,9 @@ var if (R.client && R.client.STFU_radio) //Adminning with 80 people on can be fun when you're trying to talk and all you can hear is radios. continue + if(istype(M, /mob/new_player)) // we don't want new players to hear messages. rare but generates runtimes. + continue + // --- Check for compression --- if(compression > 0) diff --git a/code/game/machinery/telecomms/logbrowser.dm b/code/game/machinery/telecomms/logbrowser.dm index a9934dd7b78..9e4bf23ab9c 100644 --- a/code/game/machinery/telecomms/logbrowser.dm +++ b/code/game/machinery/telecomms/logbrowser.dm @@ -58,10 +58,12 @@ for(var/datum/comm_log_entry/C in SelectedServer.log_entries) i++ - dat += "
  • [C.name] \[X\]
    " // If the log is a speech file if(C.input_type == "Speech File") + + dat += "
  • [C.name] \[X\]
    " + // -- Determine race of orator -- var/race // The actual race of the mob @@ -113,9 +115,10 @@ dat += "

  • " else if(C.input_type == "Execution Error") - dat += "Data type: [C.input_type]
    " - dat += "Source: Internal server code
    " - dat += "Contents: \"[C.parameters["message"]]\"
    " + + dat += "
  • [C.name] \[X\]
    " + dat += "Output: \"[C.parameters["message"]]\"
    " + dat += "

  • " dat += "" @@ -192,7 +195,7 @@ var/newnet = input(usr, "Which network do you want to view?", "Comm Monitor", network) as null|text - if(newnet && usr in range(1, src)) + if(newnet && ((usr in range(1, src) || issilicon(usr)))) if(length(newnet) > 15) temp = "- FAILED: NETWORK TAG STRING TOO LENGHTLY -" diff --git a/code/game/machinery/telecomms/traffic_control.dm b/code/game/machinery/telecomms/traffic_control.dm index 1014a2b62ea..972c36e9110 100644 --- a/code/game/machinery/telecomms/traffic_control.dm +++ b/code/game/machinery/telecomms/traffic_control.dm @@ -10,6 +10,7 @@ screen = 0 // the screen number: list/servers = list() // the servers located by the computer mob/editingcode + mob/lasteditor list/viewingcode = list() obj/machinery/telecomms/server/SelectedServer @@ -49,13 +50,13 @@ showcode = dd_replacetext(storedcode, "\"", "\\\"") for(var/mob/M in viewingcode) - if(M.machine == src && M in view(1, src)) + + if( (M.machine == src && M in view(1, src) ) || issilicon(M)) winset(M, "tcscode", "is-disabled=true") winset(M, "tcscode", "text=\"[showcode]\"") else - if(!issilicon(M)) - viewingcode.Remove(M) - winshow(M, "Telecomms IDE", 0) // hide the window! + viewingcode.Remove(M) + winshow(M, "Telecomms IDE", 0) // hide the window! sleep(5) @@ -164,6 +165,7 @@ if(usr in viewingcode) return if(!editingcode) + lasteditor = usr editingcode = usr winshow(editingcode, "Telecomms IDE", 1) // show the IDE winset(editingcode, "tcscode", "is-disabled=false") diff --git a/code/modules/DetectiveWork/detective_work.dm b/code/modules/DetectiveWork/detective_work.dm index 7e5b2bcdfb7..b2c22c4ccc9 100644 --- a/code/modules/DetectiveWork/detective_work.dm +++ b/code/modules/DetectiveWork/detective_work.dm @@ -219,7 +219,7 @@ obj/machinery/computer/forensic_scanning temp += "Consolidated data points:
    " for(var/i = 1, i <= files.len, i++) temp += "{Dossier [i]}
    " - temp += "
    {Insert Finger Print Card}


    " + temp += "
    {Insert Finger Print Card (To complete a Dossier)}


    " else temp = "" if(misc && misc.len) @@ -700,63 +700,89 @@ obj/machinery/computer/forensic_scanning obj/item/clothing/shoes/var track_blood = 0 mob/living/carbon/human/track_blood_mob + track_blood_type mob/var bloody_hands = 0 mob/living/carbon/human/bloody_hands_mob track_blood mob/living/carbon/human/track_blood_mob + track_blood_type obj/item/clothing/gloves/var transfer_blood = 0 mob/living/carbon/human/bloody_hands_mob -obj/effect/decal/cleanable/blood/var - track_amt = 2 +obj/effect/decal/cleanable/var + track_amt = 3 mob/blood_owner turf/Exited(mob/living/carbon/human/M) if(istype(M,/mob/living) && !istype(M,/mob/living/carbon/metroid)) - if(!istype(src, /turf/space)) // Bloody tracks code starts here - if(M.track_blood > 0) - M.track_blood-- - src.add_bloody_footprints(M.track_blood_mob,1,M.dir,get_tracks(M)) - else if(istype(M,/mob/living/carbon/human)) - if(M.shoes) - if(M.shoes.track_blood > 0) - M.shoes.track_blood-- - src.add_bloody_footprints(M.shoes.track_blood_mob,1,M.dir,M.shoes.name) // And bloody tracks end here + var/dofoot = 1 + if(istype(M,/mob/living/simple_animal)) + if(!(istype(M,/mob/living/simple_animal/cat) || istype(M,/mob/living/simple_animal/corgi) || istype(M,/mob/living/simple_animal/constructwraith))) + dofoot = 0 + + if(dofoot) + + if(!istype(src, /turf/space)) // Bloody tracks code starts here + if(M.track_blood > 0) + M.track_blood-- + src.add_bloody_footprints(M.track_blood_mob,1,M.dir,get_tracks(M),M.track_blood_type) + else if(istype(M,/mob/living/carbon/human)) + if(M.shoes) + if(M.shoes.track_blood > 0) + M.shoes.track_blood-- + src.add_bloody_footprints(M.shoes.track_blood_mob,1,M.dir,M.shoes.name,M.shoes.track_blood_type) // And bloody tracks end here . = ..() turf/Entered(mob/living/carbon/human/M) if(istype(M,/mob/living) && !istype(M,/mob/living/carbon/metroid)) - if(M.track_blood > 0) - M.track_blood-- - src.add_bloody_footprints(M.track_blood_mob,0,M.dir,get_tracks(M)) - else if(istype(M,/mob/living/carbon/human)) - if(M.shoes && !istype(src,/turf/space)) - if(M.shoes.track_blood > 0) - M.shoes.track_blood-- - src.add_bloody_footprints(M.shoes.track_blood_mob,0,M.dir,M.shoes.name) + var/dofoot = 1 + if(istype(M,/mob/living/simple_animal)) + if(!(istype(M,/mob/living/simple_animal/cat) || istype(M,/mob/living/simple_animal/corgi) || istype(M,/mob/living/simple_animal/constructwraith))) + dofoot = 0 + + if(dofoot) + + if(M.track_blood > 0) + M.track_blood-- + src.add_bloody_footprints(M.track_blood_mob,0,M.dir,get_tracks(M),M.track_blood_type) + else if(istype(M,/mob/living/carbon/human)) + if(M.shoes && !istype(src,/turf/space)) + if(M.shoes.track_blood > 0) + M.shoes.track_blood-- + src.add_bloody_footprints(M.shoes.track_blood_mob,0,M.dir,M.shoes.name,M.shoes.track_blood_type) - for(var/obj/effect/decal/cleanable/blood/B in src) - if(B.track_amt <= 0) continue - if(B.type != /obj/effect/decal/cleanable/blood/tracks) - if(istype(M,/mob/living/carbon/human)) - if(M.shoes) - M.shoes.add_blood(B.blood_owner) - M.shoes.track_blood_mob = B.blood_owner - M.shoes.track_blood = max(M.shoes.track_blood,8) - else - M.add_blood(B.blood_owner) - M.track_blood_mob = B.blood_owner - M.track_blood = max(M.track_blood,rand(4,8)) - B.track_amt-- - break + for(var/obj/effect/decal/cleanable/B in src) + if(B:track_amt <= 0) continue + if(B.type != /obj/effect/decal/cleanable/blood/tracks) + if(istype(B, /obj/effect/decal/cleanable/xenoblood) || istype(B, /obj/effect/decal/cleanable/blood) || istype(B, /obj/effect/decal/cleanable/oil) || istype(B, /obj/effect/decal/cleanable/robot_debris)) + + var/track_type = "blood" + if(istype(B, /obj/effect/decal/cleanable/xenoblood)) + track_type = "xeno" + else if(istype(B, /obj/effect/decal/cleanable/oil) || istype(B, /obj/effect/decal/cleanable/robot_debris)) + track_type = "oil" + + if(istype(M,/mob/living/carbon/human)) + if(M.shoes) + M.shoes.add_blood(B.blood_owner) + M.shoes.track_blood_mob = B.blood_owner + M.shoes.track_blood = max(M.shoes.track_blood,8) + M.shoes.track_blood_type = track_type + else + M.add_blood(B.blood_owner) + M.track_blood_mob = B.blood_owner + M.track_blood = max(M.track_blood,rand(4,8)) + M.track_blood_type = track_type + B.track_amt-- + break . = ..() -turf/proc/add_bloody_footprints(mob/living/carbon/human/M,leaving,d,info) +turf/proc/add_bloody_footprints(mob/living/carbon/human/M,leaving,d,info,bloodcolor) for(var/obj/effect/decal/cleanable/blood/tracks/T in src) - if(T.dir == d) + if(T.dir == d && findtext(T.icon, bloodcolor)) if((leaving && T.icon_state == "steps2") || (!leaving && T.icon_state == "steps1")) T.desc = "These bloody footprints appear to have been made by [info]." if(T.blood_DNA) @@ -770,12 +796,29 @@ turf/proc/add_bloody_footprints(mob/living/carbon/human/M,leaving,d,info) return var/obj/effect/decal/cleanable/blood/tracks/this = new(src) this.icon = 'footprints.dmi' + + var/preiconstate = "" + + if(info == "animal paws") + preiconstate = "paw" + else if(info == "alien claws") + preiconstate = "claw" + else if(info == "small alien feet") + preiconstate = "paw" + if(leaving) - this.icon_state = "blood2" + this.icon_state = "[bloodcolor][preiconstate]2" else - this.icon_state = "blood1" + this.icon_state = "[bloodcolor][preiconstate]1" this.dir = d - this.desc = "These bloody footprints appear to have been made by [info]." + + if(bloodcolor == "blood") + this.desc = "These bloody footprints appear to have been made by [info]." + else if(bloodcolor == "xeno") + this.desc = "These acidic bloody footprints appear to have been made by [info]." + else if(bloodcolor == "oil") + this.desc = "These oil footprints appear to have been made by [info]." + if(istype(M,/mob/living/carbon/human)) if(this.blood_DNA.len) this.blood_DNA.len++ @@ -787,15 +830,18 @@ proc/get_tracks(mob/M) if(istype(M,/mob/living)) if(istype(M,/mob/living/carbon/human)) . = "human feet" - else if(istype(M,/mob/living/carbon/monkey)) - . = "monkey paws" + else if(istype(M,/mob/living/carbon/monkey) || istype(M,/mob/living/simple_animal/cat) || istype(M,/mob/living/simple_animal/corgi) || istype(M,/mob/living/simple_animal/crab)) + . = "animal paws" else if(istype(M,/mob/living/silicon/robot)) . = "robot feet" - else if(istype(M,/mob/living/carbon/alien)) + else if(istype(M,/mob/living/carbon/alien/humanoid)) . = "alien claws" + else if(istype(M,/mob/living/carbon/alien/larva)) + . = "small alien feet" else . = "an unknown creature" + proc/blood_incompatible(donor,receiver) var donor_antigen = copytext(donor,1,lentext(donor)) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 4279085a460..6fbfe0db907 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -962,7 +962,8 @@ lying = 1 stat = 0 if (paralysis > 0) - handle_dreams() + if(sleeping > 0) + handle_dreams() AdjustParalysis(-1) blinded = 1 lying = 1 diff --git a/icons/effects/footprints.dmi b/icons/effects/footprints.dmi index 61d86aaa16b3ab10ec59569b5482215e106cc3fa..ede9c8e17d65338ff60e108aeefb62c6e011c179 100644 GIT binary patch literal 2391 zcmV-d38?moP)XL9LW0ErvHko)TNe|<-QG(MC!FDx?A%_uo;BBwex&o- z4(!B^yFDeN7D2`3P*b9$eyXr8KJXypSlo=YqADm6+WGW~l856jnda&TtFzc72b-5A zD(|w|Z0%v<+UPYMgfHz5ZbyatD+1(oERu+b&`s=T&zOFK3Cd;C2Ts`WbZMpYfpVk3~ zSfI`E|6(LfXc!H)w80p~#z-;~qj<|h+---^E1oYG^v?K|`ry6d$Q=5?2RuJmchIl% z!F$t_mr*)UG9#Q&U}OWO$4CH@P0E@OqjWPdQue4YjY(T2c>)E*L(M0!LoERDO}@O2d&Er2xtXLt~ zGtzi>&-4zqD(Elmp$4<$b4IotZALeMI3o#Y>^j{E z)Nhqhd-QgHjDjUM{y8kMc8eA+aKRSbTSUo?e8w1xQ3O!zQ%^A1u|UDrJs6|N7zKgE zAWq}(!DM|T0?CZ(RU(kI_EbhvTGy#KQZ|MHDzZ8eM+$Z-qi;xm7-*5vJlQ}M5)^f` z%KUdsuybe;y{#=q6W`#U?LkQpe)&@l4CP?IwTBPLFnX$95XedYd+`qka*P6z%Qhnl z1U6bM#9Ftgs!F;CHd(D!Hy!dkA4&HnlL;UEN7aYO`*-x8Ig=F&`k(dNZJ?*>sp3E? z=i0kN1plm->)}qrNYTe(S{vePT#ChZd+GKqs0?CXT&vVF4 zAZhKXjHI+~Q*oqh3{LeIkp9PjY9uJ?=sEM>F~KgZ7O}M$&4j@gi4~p~ z>jD_c!TxBEn~c`=I|4cB|1AGa0wR}fMieN91h zCMy>7zZw-HlT{aJU9W2nq=Nq09wLxiJ~|)|$(|7f0yBd3Ep5ej-qzhJpiQ{Wf>E@G z&$^js?crnU1(HnIyZ{vcK<5WS<;OCT_8eZ1d!Um`uBf9#MzW4lfj~!MV-#n0CJ=QL zn%M=?pWmPUkRb19$+p3_VObw}l>{U+8b^Ke-tWPUl?Sk8)JtBkFJ?Zelg0rp4;7qB zj1C9khGk>)5`glTpOycP03-!F|M7zWiGOs=Apnu-U*f5g%su!?jP?{LCxLf!;0J1e zU~c(SO)V)?8UhpSlD3Gkm9ymmksP67QmBr~ZMh8qjonvajZ6%qZS#phL})e(24sXw zf$+AGe*e)%%m~2UgWetR+%%0Izo$TL`i%gVmAVAkVw<}xOWKbCM*)s8i?3P$0N^b* zAEi-)c7rA2yn8JGaZ_)bZ9{-yAv)+>05^g7RgeJ}z|HFL%yu3CF#*Wcp==Ls5M;V# zdQiJML>O#dvj0`EBbx)^qy~_R^hzg)$KgxpSC;(#uMpI6R7JPUpXNJ&{KB)V!vjF1 zF~*v|bz`fJHX+SJy@Nj-&@t#y)B^!c!!8}pG3d65ddchbJ`m96T!&oF=a5Hd)1X)J z{uZ1|0J0TP{Q5vTZ(8yaX=A`(KUbTj%d}c3123X zaU>fIDEyjJ*$f0Uk9wu*atXTaqF(a)`Wy&ocWpv0*K5e5vw6^~{QL;c6$kYDHvtlV z!YVNUG+6X|l$HJ+o;tz3fM56G9R3Nq<_^xhnVSRf+co5UPONvOH|qx%(=tmPrqE1yv!CEi}S{0fBIPLS~d%nvs70(XQPj z#NC4c)W+^&mR6iV0A@3)j~xnN*QiU7EdVYr?eV4Oo7P4EfTIBCn2#?l00RK4x$K&G zqXjTU0bJ}Q;({((0DMzl+x2?{pckUU#|6NEBmw9_R{(Scz^a2J02_!2z*8Lr0qAMI z>`wz~R|mzq$uc4U=PqpCoio7G9J>8)CglI8rU#IU^hGDICMElyJ=uAd(63CW=<<*F zLdgx6SZ4kva0igTEk(4UIG~8e=$gNEN3?3!gfA1xIFj82`VWTFz~c=go(}*3002ov JPDHLkV1jStReS&d literal 1697 zcmV;S244AzP)005u}1^@s6i_d2*0001sdQ@0+L}hbh za%pgMX>V=-0C=2*%&`i>Fce1NIeChob{AW_W|5SVp?!x+uI56_g(PSn-@#3gj0X;1 zkL$d+4R&?;Hu8IvLk;kyGtE_1AulwXZ$fA%s2=DY6BSSs_v|hKbNubHyq@ zwB}mYP7erE^nfsxbqrH7bc*8-jFadAIpEk^uU1|EmhP261=PeG5ZR=R z!FW6yvPsDW4<{1QJZ!rD&3Y|4x#F$kaldO(=+Tmc!wi0~A;O$5*p#aUtW7TjN);xp*B*Q~VmShe?wL-~n%N&dcz zsr_G?^4bqk^Rr?0{R}vSz!U*=LiMB^6~O*t6fbgU%?fKjM9n?mzWi`orXz}{V8$?x zsDy44Js?a`0V64HZwhWJAcN-ppMT%`NYBrrZCmMK?R~AC3OH=a&ww5<0u`_v0tiz_ zAuwphG*j}!AUYB~U>S^IA`!YW2w+B3$-{97$%K<~8UmP!;sLG(1TYgSU>X7lQv?vE z2w*1kfN2=RWJKr=ClkP?*_g4l{Gh#%*n&61x9ffAk_g~-#iIiHArU|-pkERJgkJ;@ zrX&JL59k*!NQJ4WIpFr|+?t0?SL4vt^Q^FGnyzizh2k}CueraL5F#p|$}O9_PR1%f zpfUSS{k31?*xDs}z!>z2n%o4CS)r!U0CL--y}p_&R{5bdNB4j#JokW}x!Hmhs{+xNlyelqJbsZ&?fOtRP1E&n)@zEjz2-yKz6ieri9xfa(gz&RgXXcn z&lVhk15P;vFakYbIY$hd$Ca*to(Iii7{kDn%x#$pm=zw59xxO7#54pDrU)QR5x`6o zPp~y0fSJ$(rXhftPyy302ZSk^IUqAOpCqvMU1)BW}LKa)R?#3`6tF8!hc!jwb>gdf-6et7=0Ug0di(y_ z+1dYgm-F-U+ui5&o44WP`d!ox6dgdew|RU0=4}Wegcr}AhO4WqJN@

    FJ%1IYiVJ z%!>iWP5DJK`+kv&chNl{6>!*;XXGhA8!(5cF-*-P4ovgg4