From e11a913f23b9dcd8cda958cd4ce165defebbe657 Mon Sep 17 00:00:00 2001 From: xxalpha Date: Fri, 10 Apr 2015 16:30:39 +0100 Subject: [PATCH 001/143] Fixed Nutriment printing bug. Added new Reviver implant. --- .../game/objects/effects/spawners/lootdrop.dm | 21 +++++++ .../research/designs/medical_designs.dm | 28 ++++++--- .../surgery/organs/cybernetic_implants.dm | 63 ++++++++++++++++++- 3 files changed, 101 insertions(+), 11 deletions(-) diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index 538e98cb003..cd70cb2452c 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -118,3 +118,24 @@ /obj/item/weapon/relic = 3, "" = 11 ) + +/obj/effect/spawner/lootdrop/cyberimplants_op + lootdoubles = 0 + loot = list(/obj/item/cybernetic_implant/chest/reviver = 1, /obj/item/cybernetic_implant/chest/nutriment/plus = 1, + /obj/item/cybernetic_implant/eyes/thermals = 2, /obj/item/cybernetic_implant/eyes/xray = 1, + /obj/item/cybernetic_implant/brain/anti_drop = 1, /obj/item/cybernetic_implant/brain/anti_stun = 1) + +/obj/effect/spawner/lootdrop/cyberimplants_op/New() + var/probability = rand(1,100) + if(probability < 50) + lootcount = 1 + return ..() + if(probability < 75) + lootcount = 2 + return ..() + if(probability < 95) + lootcount = 3 + return ..() + else + lootcount = 4 + return ..() \ No newline at end of file diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index 14f20655f4b..b19572df0ad 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -104,7 +104,7 @@ datum/design/bluespacebodybag id = "ci-medhud" req_tech = list("materials" = 6, "programming" = 4, "biotech" = 4) build_type = PROTOLATHE | MECHFAB - materials = list("$metal" = 200, "$glass" = 200, "$silver" = 200, "$gold" = 100) + materials = list("$metal" = 200, "$glass" = 200, "$silver" = 500, "$gold" = 500) build_path = /obj/item/cybernetic_implant/eyes/hud/medical category = list("Medical Designs") @@ -114,7 +114,7 @@ datum/design/bluespacebodybag id = "ci-sechud" req_tech = list("materials" = 6, "programming" = 5, "biotech" = 4, "combat" = 2) build_type = PROTOLATHE | MECHFAB - materials = list("$metal" = 200, "$glass" = 200, "$silver" = 300, "$gold" = 300) + materials = list("$metal" = 200, "$glass" = 200, "$silver" = 750, "$gold" = 750) build_path = /obj/item/cybernetic_implant/eyes/hud/security category = list("Medical Designs") @@ -122,9 +122,9 @@ datum/design/bluespacebodybag name = "X-Ray implant" desc = "These cybernetic eyes will give you X-ray vision. Blinking is futile." id = "ci-xray" - req_tech = list("materials" = 7, "programming" = 5, "biotech" = 6, "magnets" = 5, "plasmatech" = 3) + req_tech = list("materials" = 7, "programming" = 5, "biotech" = 7, "magnets" = 5) build_type = PROTOLATHE | MECHFAB - materials = list("$metal" = 200, "$glass" = 200, "$silver" = 200, "$gold" = 200, "$plasma" = 200, "$uranium" = 500, "$diamond" = 1000) + materials = list("$metal" = 200, "$glass" = 200, "$silver" = 600, "$gold" = 600, "$plasma" = 1000, "$uranium" = 1000, "$diamond" = 2000) build_path = /obj/item/cybernetic_implant/eyes/xray category = list("Medical Designs") @@ -132,9 +132,9 @@ datum/design/bluespacebodybag name = "Thermals implant" desc = "These cybernetic eyes will give you Thermal vision. Vertical slit pupil included." id = "ci-thermals" - req_tech = list("materials" = 7, "programming" = 5, "biotech" = 5, "magnets" = 5, "plasmatech" = 3, "syndicate" = 4) + req_tech = list("materials" = 7, "programming" = 5, "biotech" = 5, "magnets" = 5, "syndicate" = 4) build_type = PROTOLATHE | MECHFAB - materials = list("$metal" = 200, "$glass" = 200, "$silver" = 200, "$gold" = 200, "$plasma" = 200, "$diamond" = 1000) + materials = list("$metal" = 200, "$glass" = 200, "$silver" = 600, "$gold" = 600, "$plasma" = 1000, "$diamond" = 2000) build_path = /obj/item/cybernetic_implant/eyes/thermals category = list("Medical Designs") @@ -158,13 +158,14 @@ datum/design/bluespacebodybag build_path = /obj/item/cybernetic_implant/brain/anti_stun category = list("Medical Designs") -/*/datum/design/cyberimp_nutriment +/datum/design/cyberimp_nutriment name = "Nutriment pump implant" desc = "This implant with synthesize and pump into your bloodstream a small amount of nutriment when you are starving." id = "ci-nutriment" req_tech = list("materials" = 6, "programming" = 4, "biotech" = 5) build_type = PROTOLATHE | MECHFAB materials = list("$metal" = 200, "$glass" = 200, "$gold" = 500, "$uranium" = 500) + build_path = /obj/item/cybernetic_implant/chest/nutriment category = list("Medical Designs") /datum/design/cyberimp_nutriment_plus @@ -174,4 +175,15 @@ datum/design/bluespacebodybag req_tech = list("materials" = 6, "programming" = 4, "biotech" = 6) build_type = PROTOLATHE | MECHFAB materials = list("$metal" = 200, "$glass" = 200, "$gold" = 500, "$uranium" = 750) - category = list("Medical Designs")*/ \ No newline at end of file + build_path = /obj/item/cybernetic_implant/chest/nutriment/plus + category = list("Medical Designs") + +/datum/design/cyberimp_reviver + name = "Reviver implant" + desc = "This implant will attempt to revive you if you lose consciousness. For the faint of heart!" + id = "ci-reviver" + req_tech = list("materials" = 6, "programming" = 4, "biotech" = 7, "syndicate" = 4) + build_type = PROTOLATHE | MECHFAB + materials = list("$metal" = 200, "$glass" = 200, "$gold" = 500, "$uranium" = 1000, "$diamond" = 2000) + build_path = /obj/item/cybernetic_implant/chest/reviver + category = list("Medical Designs") \ No newline at end of file diff --git a/code/modules/surgery/organs/cybernetic_implants.dm b/code/modules/surgery/organs/cybernetic_implants.dm index 5a6d84c3019..4b20ba531b8 100644 --- a/code/modules/surgery/organs/cybernetic_implants.dm +++ b/code/modules/surgery/organs/cybernetic_implants.dm @@ -75,7 +75,7 @@ desc = "These cybernetic eyes will give you X-ray vision. Blinking is futile." eye_color = "000" implant_color = "#000000" - origin_tech = "materials=6;programming=4;biotech=5;magnets=5;plasmatech=2" + origin_tech = "materials=6;programming=4;biotech=6;magnets=5" /obj/item/cybernetic_implant/eyes/xray/function() if(!owner) @@ -95,7 +95,7 @@ eye_color = "FC0" implant_color = "#FFCC00" flash_protect = -1 - origin_tech = "materials=6;programming=4;biotech=5;magnets=5;plasmatech=2;syndicate=4" + origin_tech = "materials=6;programming=4;biotech=5;magnets=5;syndicate=4" /obj/item/cybernetic_implant/eyes/thermals/function() if(!owner) @@ -307,4 +307,61 @@ if(!owner) return owner.reagents.add_reagent("????",poison_amount / severity) //food poisoning - owner << "You feel like your insides are burning." + owner << "You feel like your insides are burning." + + +/obj/item/cybernetic_implant/chest/reviver + name = "Reviver implant" + desc = "This implant will attempt to revive you if you lose consciousness. For the faint of heart!" + icon_state = "chest_implant" + implant_color = "#AD0000" + origin_tech = "materials=6;programming=3;biotech=6;syndicate=4" + var/revive_cost = 0 + var/reviving = 0 + +/obj/item/cybernetic_implant/chest/reviver/function() + SSobj.processing |= src + +/obj/item/cybernetic_implant/chest/reviver/process() + if(!owner) + SSobj.processing.Remove(src) + qdel(src) + return + + if(reviving) + if(owner.stat == UNCONSCIOUS) + spawn(30) + if(prob(90) && owner.getOxyLoss()) + owner.adjustOxyLoss(-3) + revive_cost += 0.2 + if(prob(75) && owner.getBruteLoss()) + owner.adjustBruteLoss(-1) + revive_cost += 0.5 + if(prob(75) && owner.getFireLoss()) + owner.adjustFireLoss(-1) + revive_cost += 0.5 + if(prob(40) && owner.getToxLoss()) + owner.adjustToxLoss(-1) + revive_cost++ + else + revive_cost = (revive_cost * 100) + world.time + reviving = 0 + return + + if(revive_cost > world.time) + return + if(owner.stat != UNCONSCIOUS) + return + if(owner.suiciding) + SSobj.processing.Remove(src) + return + + revive_cost = 0 + reviving = 1 + +/obj/item/cybernetic_implant/chest/reviver/emp_act(severity) + revive_cost = world.time + 200 + if(prob(50 / severity)) + owner.heart_attack = 1 + spawn(600 / severity) + owner.heart_attack = 0 \ No newline at end of file From 17bee43b49941313c8d3540fbe8a10d646824530 Mon Sep 17 00:00:00 2001 From: xxalpha Date: Fri, 10 Apr 2015 16:54:32 +0100 Subject: [PATCH 002/143] Added cybernetic implant spawner to nuke ops ship medbay. --- _maps/map_files/generic/z2.dmm | 6 ++++-- code/game/objects/effects/spawners/lootdrop.dm | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/_maps/map_files/generic/z2.dmm b/_maps/map_files/generic/z2.dmm index 950e7c8cb57..cc5c7984f87 100644 --- a/_maps/map_files/generic/z2.dmm +++ b/_maps/map_files/generic/z2.dmm @@ -834,6 +834,8 @@ "qb" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{name = "plating"},/area/centcom/holding) "qc" = (/obj/effect/landmark{name = "Holding Facility"},/turf/unsimulated/floor{icon_state = "engine"},/area/centcom/holding) "qd" = (/obj/docking_port/stationary/transit{dheight = 0; dir = 2; dwidth = 11; height = 22; id = "whiteship_transit"; width = 35},/turf/space/transit/horizontal,/area/space) +"qe" = (/obj/machinery/sleeper{dir = 8; icon_state = "sleeper-open"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/space) +"qf" = (/obj/structure/closet/crate/medical{desc = "A crate with a handpicked selection of cybernetic implants."; name = "cybernetic implants crate"},/obj/effect/spawner/lootdrop/cyberimplants_op,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/space) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababadaeaeaeaeaeafaeaeaeaeaeafaeaeaeaeaeafaeaeaeaeaeag @@ -1014,8 +1016,8 @@ ababababababababababaaaaaaaaaaaaaaaaaalnjsaaaajsmdmejWmfjWlnjsjsaaaaaaaaaaaaaaaa ababababababababababaaaaaaaaaaaaaakKmqmrmsmtmumtmtmqmvmsmtmtmumtmtaajsaaaaaaaaaaababababababgzgIhMhNhNhNhNhNhNmwihihhNhNhNhNhNhNhPmxmxmxmylsgzmzmzmzmzmzmzgzabababababababababababababababababababababababababababababababababmBmBmBmBmBmBmBmBmBmCmDmDmDmDmDmDmDmDmDmDmDmDmDmCmBmBmBmBmBmBmBmBmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababaaaaaaaaaaaaaamEmFjvjvmFmEmGmHjvjvjvhbmJmEmKmLlnmMjsjsaaaaaaababababababgzgIhNmNmNmOmPmQhNihihihhNmRmSmTmUmVhNgIgJgIgIgLjmmzmzmzmzmzmWgzabababababababababababababababababababababababababababababababababmBmZnanbnbnbnbnbncndmDmDmDmDmDmDmDmDmDmDmDmDmDnencnfnfnfnfnfnangmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababaaaaaaaaaaaaaanhnijvjvninhmMmMjvjvjvjvnjnhnknllSlSnmaaaaaaaaababababababgzgIhNihihihloihnnihihihnoihloihlonphNgIhcgKgJhcgznqnqnqnqnqlqgzabababababababababababababababababababababababababababababababababmBmZnanbnsnbnsnbncndmDmDmDmDmDmDmDmDmDmDmDmDmDnencnfntnfntnfnangmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaanunvjvlGjvhGlUlGjvnxjvjvnynunzhdnBnChenEaaaaaaababababababgzgIhNnFihihihihnGihihihnHihihihihihhNgIgIgIgKiGgzgzgzgzgzgzgzgzabababababababababababababababababababababababababababababababababmBmZnanbnbnInbnbncndmDmDmDmDmDnJnKnJmDmDmDmDmDnencnfnfnLnfnfnangmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaanMnijvjWlUhfjWjvjvnOjvjvjvnMnPnQnmnRlhaaaaaaaaababababababgzgIhNnFihihnSnThNnUnVnUhNnWnXihihihhNgIgKgIhciGgzababababababababababababababababababababababababababababababababababababababababmBmZnanbnbnbnbnbncndmDmDmDmDmDnJnYnJmDmDmDmDmDnencnfnfnfnfnfnangmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababaaaaaaaaaaaaaanunvjvlGjvhGlUlGjvnxjvjvnynunzhdnBnChenEaaaaaaababababababgzgIhNqenFihihihnGihihihnHihihihihihhNgIgIgIgKiGgzgzgzgzgzgzgzgzabababababababababababababababababababababababababababababababababmBmZnanbnbnInbnbncndmDmDmDmDmDnJnKnJmDmDmDmDmDnencnfnfnLnfnfnangmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababaaaaaaaaaaaaaanMnijvjWlUhfjWjvjvnOjvjvjvnMnPnQnmnRlhaaaaaaaaababababababgzgIhNqfihihnSnThNnUnVnUhNnWnXihihihhNgIgKgIhciGgzababababababababababababababababababababababababababababababababababababababababmBmZnanbnbnbnbnbncndmDmDmDmDmDnJnYnJmDmDmDmDmDnencnfnfnfnfnfnangmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababaaaaaaaaaaaaaajdnZjvjvnZjdoajvlGjWjvjvoajdobocodoeaaaaaaaaaaababababababgzgIhNihihgOhNhNhNofogihhNhNhNihihihhNgIgIgJgIiGgzababababababababababababababababababababababababababababababababababababababababmBmZnanbnsnbnsnbncndmDmDmDmDmDmDmDmDmDmDmDmDmDnencnfntnfntnfnangmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababaaaaaaaaaaaaaajwmqojmsmtokmtmqkIolkImsmtokmtmqjsjsjsaaaaaaaaababababababgzgIhNgQgPgRhNgIhNopopophNgIhNiloqorhNgIgIgIgIiGgzababababababababababababababababababababababababababababababababababababababababmBmZnanbnbnbnbnbncndmDmDmDmDmDmDmDmDmDmDmDmDmDnencnfnfnfnfnfnangmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababaaaaaaaaaaaaaaaaaamdlGaajsaajsoslmmdaaaajsaaaaaaaajsaaaaaaaaababababababgzgIhNopopophNgIjyotegoujAgIhNopopophNgIgIgIgIiGgzababababababababababababababababababababababababababababababababababababababababmBmBmBovovovovovmBmCmDmDmDmDmDmDmDmDmDmDmDmDmDmCmBovovovovovmBmBmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index cd70cb2452c..5e2a88ad6e9 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -120,6 +120,7 @@ ) /obj/effect/spawner/lootdrop/cyberimplants_op + name = "cybernetic implants spawner" lootdoubles = 0 loot = list(/obj/item/cybernetic_implant/chest/reviver = 1, /obj/item/cybernetic_implant/chest/nutriment/plus = 1, /obj/item/cybernetic_implant/eyes/thermals = 2, /obj/item/cybernetic_implant/eyes/xray = 1, From 9954ae158c9d1552dd364ca85a9db62f7c5ba20e Mon Sep 17 00:00:00 2001 From: xxalpha Date: Fri, 10 Apr 2015 17:10:56 +0100 Subject: [PATCH 003/143] Health Analyzers can now detect cybernetic implants. --- code/game/objects/items/devices/scanners.dm | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 487345421fd..73777984ad7 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -193,6 +193,13 @@ MASS SPECTROMETER else user.show_message("Blood Level Normal: [blood_percent]% [blood_volume]cl. Type: [blood_type]") + var/implant_detect + for(var/obj/item/cybernetic_implant/CI in H.internal_organs) + implant_detect += "[H.name] is modified with a [CI.name].
" + if(implant_detect) + user.show_message("Detected cybernetic modifications:") + user.show_message("[implant_detect]") + /proc/chemscan(var/mob/living/user, var/mob/living/M) if(ishuman(M)) var/mob/living/carbon/human/H = M From 5c4806fd6e1f0b5583313e133713408200ee6e06 Mon Sep 17 00:00:00 2001 From: xxalpha Date: Fri, 10 Apr 2015 17:40:49 +0100 Subject: [PATCH 004/143] Fixed merge conflict. Restored icon_states for crates. --- _maps/map_files/generic/z2.dmm | 8 +++++--- .../objects/structures/crates_lockers/crates.dm | 13 ++++++++++++- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/_maps/map_files/generic/z2.dmm b/_maps/map_files/generic/z2.dmm index 2fe61ad1702..bb84a7879a0 100644 --- a/_maps/map_files/generic/z2.dmm +++ b/_maps/map_files/generic/z2.dmm @@ -834,7 +834,9 @@ "qb" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{name = "plating"},/area/centcom/holding) "qc" = (/obj/effect/landmark{name = "Holding Facility"},/turf/unsimulated/floor{icon_state = "engine"},/area/centcom/holding) "qd" = (/obj/docking_port/stationary/transit{dheight = 0; dir = 2; dwidth = 11; height = 22; id = "whiteship_transit"; width = 35},/turf/space/transit/horizontal,/area/space) - +"qe" = (/obj/machinery/sleeper{dir = 8; icon_state = "sleeper-open"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/space) +"qf" = (/obj/structure/closet/crate/medical{desc = "A crate with a handpicked selection of cybernetic implants."; name = "cybernetic implants crate"},/obj/effect/spawner/lootdrop/cyberimplants_op,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/space) + (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababadaeaeaeaeaeafaeaeaeaeaeafaeaeaeaeaeafaeaeaeaeaeag aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababahaiaiaiaiaiajakakakakakajalalalalalajamanananaoap @@ -1014,8 +1016,8 @@ ababababababababababaaaaaaaaaaaaaaaaaalnjsaaaajsmdmejWmfjWlnjsjsaaaaaaaaaaaaaaaa ababababababababababaaaaaaaaaaaaaakKmqmrmsmtmumtmtmqmvmsmtmtmumtmtaajsaaaaaaaaaaababababababgzgIhMhNhNhNhNhNhNmwihihhNhNhNhNhNhNhPmxmxmxmylsgzmzmzmzmzmzmzgzabababababababababababababababababababababababababababababababababmBmBmBmBmBmBmBmBmBmCmDmDmDmDmDmDmDmDmDmDmDmDmDmCmBmBmBmBmBmBmBmBmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababaaaaaaaaaaaaaamEmFjvjvmFmEmGmHjvjvjvhbmJmEmKmLlnmMjsjsaaaaaaababababababgzgIhNmNmNmOmPmQhNihihihhNmRmSmTmUmVhNgIgJgIgIgLjmmzmzmzmzmzmWgzabababababababababababababababababababababababababababababababababmBmZnanbnbnbnbnbncndmDmDmDmDmDmDmDmDmDmDmDmDmDnencnfnfnfnfnfnangmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababaaaaaaaaaaaaaanhnijvjvninhmMmMjvjvjvjvnjnhnknllSlSnmaaaaaaaaababababababgzgIhNihihihloihnnihihihnoihloihlonphNgIhcgKgJhcgznqnqnqnqnqlqgzabababababababababababababababababababababababababababababababababmBmZnanbnsnbnsnbncndmDmDmDmDmDmDmDmDmDmDmDmDmDnencnfntnfntnfnangmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaanunvjvlGjvhGlUlGjvnxjvjvnynunzhdnBnChenEaaaaaaababababababgzgIhNnFihihihihnGihihihnHihihihihihhNgIgIgIgKiGgzgzgzgzgzgzgzgzabababababababababababababababababababababababababababababababababmBmZnanbnbnInbnbncndmDmDmDmDmDnJnKnJmDmDmDmDmDnencnfnfnLnfnfnangmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaanMnijvjWlUhfjWjvjvnOjvjvjvnMnPnQnmnRlhaaaaaaaaababababababgzgIhNnFihihnSnThNnUnVnUhNnWnXihihihhNgIgKgIhciGgzababababababababababababababababababababababababababababababababababababababababmBmZnanbnbnbnbnbncndmDmDmDmDmDnJnYnJmDmDmDmDmDnencnfnfnfnfnfnangmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababaaaaaaaaaaaaaanunvjvlGjvhGlUlGjvnxjvjvnynunzhdnBnChenEaaaaaaababababababgzgIhNqenFihihihnGihihihnHihihihihihhNgIgIgIgKiGgzgzgzgzgzgzgzgzabababababababababababababababababababababababababababababababababmBmZnanbnbnInbnbncndmDmDmDmDmDnJnKnJmDmDmDmDmDnencnfnfnLnfnfnangmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababaaaaaaaaaaaaaanMnijvjWlUhfjWjvjvnOjvjvjvnMnPnQnmnRlhaaaaaaaaababababababgzgIhNqfihihnSnThNnUnVnUhNnWnXihihihhNgIgKgIhciGgzababababababababababababababababababababababababababababababababababababababababmBmZnanbnbnbnbnbncndmDmDmDmDmDnJnYnJmDmDmDmDmDnencnfnfnfnfnfnangmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababaaaaaaaaaaaaaajdnZjvjvnZjdoajvlGjWjvjvoajdobocodoeaaaaaaaaaaababababababgzgIhNihihgOhNhNhNofogihhNhNhNihihihhNgIgIgJgIiGgzababababababababababababababababababababababababababababababababababababababababmBmZnanbnsnbnsnbncndmDmDmDmDmDmDmDmDmDmDmDmDmDnencnfntnfntnfnangmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababaaaaaaaaaaaaaajwmqojmsmtokmtmqkIolkImsmtokmtmqjsjsjsaaaaaaaaababababababgzgIhNgQgPgRhNgIhNopopophNgIhNiloqorhNgIgIgIgIiGgzababababababababababababababababababababababababababababababababababababababababmBmZnanbnbnbnbnbncndmDmDmDmDmDmDmDmDmDmDmDmDmDnencnfnfnfnfnfnangmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababaaaaaaaaaaaaaaaaaamdlGaajsaajsoslmmdaaaajsaaaaaaaajsaaaaaaaaababababababgzgIhNopopophNgIjyotegoujAgIhNopopophNgIgIgIgIiGgzababababababababababababababababababababababababababababababababababababababababmBmBmBovovovovovmBmCmDmDmDmDmDmDmDmDmDmDmDmDmDmCmBovovovovovmBmBmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index 5ae0237e1e9..f4e2765e435 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -5,6 +5,7 @@ desc = "A rectangular steel crate." icon = 'icons/obj/crates.dmi' var/icon_crate = "crate" + icon_state = "crate" req_access = null // mouse_drag_pointer = MOUSE_ACTIVE_POINTER //??? var/rigged = 0 @@ -25,16 +26,19 @@ desc = "A internals crate." name = "internals crate" icon_crate = "o2crate" + icon_state = "o2crate" /obj/structure/closet/crate/trashcart desc = "A heavy, metal trashcart with wheels." name = "trash cart" icon_crate = "trashcart" + icon_state = "trashcart" /obj/structure/closet/crate/medical desc = "A medical crate." name = "medical crate" icon_crate = "medicalcrate" + icon_state = "medicalcrate" /obj/structure/closet/crate/rcd desc = "A crate for the storage of the RCD." @@ -45,6 +49,7 @@ desc = "A freezer." name = "freezer" icon_crate = "freezer" + icon_state = "freezer" var/target_temp = T0C - 40 var/cooling_power = 40 @@ -71,6 +76,7 @@ desc = "A crate with a radiation sign on it." name = "radioactive gear crate" icon_crate = "radiation" + icon_state = "radiation" /obj/structure/closet/crate/radiation/New() ..() @@ -86,8 +92,8 @@ /obj/structure/closet/crate/hydroponics name = "hydroponics crate" desc = "All you need to destroy those pesky weeds and pests." - icon = 'icons/obj/storage.dmi' icon_crate = "hydrocrate" + icon_state = "hydrocrate" /obj/structure/closet/crate/hydroponics/prespawned @@ -101,6 +107,7 @@ desc = "A secure crate." name = "secure crate" icon_crate = "securecrate" + icon_state = "securecrate" var/redlight = "securecrater" var/greenlight = "securecrateg" var/sparks = "securecratesparks" @@ -112,21 +119,25 @@ desc = "A secure weapons crate." name = "weapons crate" icon_crate = "weaponcrate" + icon_state = "weaponcrate" /obj/structure/closet/crate/secure/plasma desc = "A secure plasma crate." name = "plasma crate" icon_crate = "plasmacrate" + icon_state = "plasmacrate" /obj/structure/closet/crate/secure/gear desc = "A secure gear crate." name = "gear crate" icon_crate = "secgearcrate" + icon_state = "secgearcrate" /obj/structure/closet/crate/secure/hydrosec desc = "A crate with a lock on it, painted in the scheme of the station's botanists." name = "secure hydroponics crate" icon_crate = "hydrosecurecrate" + icon_state = "hydrosecurecrate" /obj/structure/closet/crate/secure/New() ..() From de9e363a742b3a4463d3f0ec0d986cd4695971ba Mon Sep 17 00:00:00 2001 From: xxalpha Date: Fri, 10 Apr 2015 19:15:39 +0100 Subject: [PATCH 005/143] Increased Thermals Implant tech requirements (syndicate + 1). --- code/modules/research/designs/medical_designs.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index b19572df0ad..1779d6b286d 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -132,7 +132,7 @@ datum/design/bluespacebodybag name = "Thermals implant" desc = "These cybernetic eyes will give you Thermal vision. Vertical slit pupil included." id = "ci-thermals" - req_tech = list("materials" = 7, "programming" = 5, "biotech" = 5, "magnets" = 5, "syndicate" = 4) + req_tech = list("materials" = 7, "programming" = 5, "biotech" = 5, "magnets" = 5, "syndicate" = 5) build_type = PROTOLATHE | MECHFAB materials = list("$metal" = 200, "$glass" = 200, "$silver" = 600, "$gold" = 600, "$plasma" = 1000, "$diamond" = 2000) build_path = /obj/item/cybernetic_implant/eyes/thermals From 91cdab2b9ca884f3a273009a5c40acad135babf4 Mon Sep 17 00:00:00 2001 From: xxalpha Date: Sun, 12 Apr 2015 03:18:44 +0100 Subject: [PATCH 006/143] Added implants to Nuke uplink. Removed random implant spawner. --- _maps/map_files/generic/z2.dmm | 8 ++- code/datums/uplink_item.dm | 51 ++++++++++++++++++ .../game/objects/effects/spawners/lootdrop.dm | 22 -------- .../surgery/organs/cybernetic_implants.dm | 24 ++++++++- icons/obj/storage.dmi | Bin 51149 -> 50905 bytes 5 files changed, 76 insertions(+), 29 deletions(-) diff --git a/_maps/map_files/generic/z2.dmm b/_maps/map_files/generic/z2.dmm index bb84a7879a0..2fe61ad1702 100644 --- a/_maps/map_files/generic/z2.dmm +++ b/_maps/map_files/generic/z2.dmm @@ -834,9 +834,7 @@ "qb" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{name = "plating"},/area/centcom/holding) "qc" = (/obj/effect/landmark{name = "Holding Facility"},/turf/unsimulated/floor{icon_state = "engine"},/area/centcom/holding) "qd" = (/obj/docking_port/stationary/transit{dheight = 0; dir = 2; dwidth = 11; height = 22; id = "whiteship_transit"; width = 35},/turf/space/transit/horizontal,/area/space) -"qe" = (/obj/machinery/sleeper{dir = 8; icon_state = "sleeper-open"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/space) -"qf" = (/obj/structure/closet/crate/medical{desc = "A crate with a handpicked selection of cybernetic implants."; name = "cybernetic implants crate"},/obj/effect/spawner/lootdrop/cyberimplants_op,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/space) - + (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababadaeaeaeaeaeafaeaeaeaeaeafaeaeaeaeaeafaeaeaeaeaeag aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababahaiaiaiaiaiajakakakakakajalalalalalajamanananaoap @@ -1016,8 +1014,8 @@ ababababababababababaaaaaaaaaaaaaaaaaalnjsaaaajsmdmejWmfjWlnjsjsaaaaaaaaaaaaaaaa ababababababababababaaaaaaaaaaaaaakKmqmrmsmtmumtmtmqmvmsmtmtmumtmtaajsaaaaaaaaaaababababababgzgIhMhNhNhNhNhNhNmwihihhNhNhNhNhNhNhPmxmxmxmylsgzmzmzmzmzmzmzgzabababababababababababababababababababababababababababababababababmBmBmBmBmBmBmBmBmBmCmDmDmDmDmDmDmDmDmDmDmDmDmDmCmBmBmBmBmBmBmBmBmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababaaaaaaaaaaaaaamEmFjvjvmFmEmGmHjvjvjvhbmJmEmKmLlnmMjsjsaaaaaaababababababgzgIhNmNmNmOmPmQhNihihihhNmRmSmTmUmVhNgIgJgIgIgLjmmzmzmzmzmzmWgzabababababababababababababababababababababababababababababababababmBmZnanbnbnbnbnbncndmDmDmDmDmDmDmDmDmDmDmDmDmDnencnfnfnfnfnfnangmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababaaaaaaaaaaaaaanhnijvjvninhmMmMjvjvjvjvnjnhnknllSlSnmaaaaaaaaababababababgzgIhNihihihloihnnihihihnoihloihlonphNgIhcgKgJhcgznqnqnqnqnqlqgzabababababababababababababababababababababababababababababababababmBmZnanbnsnbnsnbncndmDmDmDmDmDmDmDmDmDmDmDmDmDnencnfntnfntnfnangmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaanunvjvlGjvhGlUlGjvnxjvjvnynunzhdnBnChenEaaaaaaababababababgzgIhNqenFihihihnGihihihnHihihihihihhNgIgIgIgKiGgzgzgzgzgzgzgzgzabababababababababababababababababababababababababababababababababmBmZnanbnbnInbnbncndmDmDmDmDmDnJnKnJmDmDmDmDmDnencnfnfnLnfnfnangmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaanMnijvjWlUhfjWjvjvnOjvjvjvnMnPnQnmnRlhaaaaaaaaababababababgzgIhNqfihihnSnThNnUnVnUhNnWnXihihihhNgIgKgIhciGgzababababababababababababababababababababababababababababababababababababababababmBmZnanbnbnbnbnbncndmDmDmDmDmDnJnYnJmDmDmDmDmDnencnfnfnfnfnfnangmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababaaaaaaaaaaaaaanunvjvlGjvhGlUlGjvnxjvjvnynunzhdnBnChenEaaaaaaababababababgzgIhNnFihihihihnGihihihnHihihihihihhNgIgIgIgKiGgzgzgzgzgzgzgzgzabababababababababababababababababababababababababababababababababmBmZnanbnbnInbnbncndmDmDmDmDmDnJnKnJmDmDmDmDmDnencnfnfnLnfnfnangmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababaaaaaaaaaaaaaanMnijvjWlUhfjWjvjvnOjvjvjvnMnPnQnmnRlhaaaaaaaaababababababgzgIhNnFihihnSnThNnUnVnUhNnWnXihihihhNgIgKgIhciGgzababababababababababababababababababababababababababababababababababababababababmBmZnanbnbnbnbnbncndmDmDmDmDmDnJnYnJmDmDmDmDmDnencnfnfnfnfnfnangmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababaaaaaaaaaaaaaajdnZjvjvnZjdoajvlGjWjvjvoajdobocodoeaaaaaaaaaaababababababgzgIhNihihgOhNhNhNofogihhNhNhNihihihhNgIgIgJgIiGgzababababababababababababababababababababababababababababababababababababababababmBmZnanbnsnbnsnbncndmDmDmDmDmDmDmDmDmDmDmDmDmDnencnfntnfntnfnangmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababaaaaaaaaaaaaaajwmqojmsmtokmtmqkIolkImsmtokmtmqjsjsjsaaaaaaaaababababababgzgIhNgQgPgRhNgIhNopopophNgIhNiloqorhNgIgIgIgIiGgzababababababababababababababababababababababababababababababababababababababababmBmZnanbnbnbnbnbncndmDmDmDmDmDmDmDmDmDmDmDmDmDnencnfnfnfnfnfnangmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababaaaaaaaaaaaaaaaaaamdlGaajsaajsoslmmdaaaajsaaaaaaaajsaaaaaaaaababababababgzgIhNopopophNgIjyotegoujAgIhNopopophNgIgIgIgIiGgzababababababababababababababababababababababababababababababababababababababababmBmBmBovovovovovmBmCmDmDmDmDmDmDmDmDmDmDmDmDmDmCmBovovovovovmBmBmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index 030f4890756..25bfc3699f9 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -619,11 +619,62 @@ var/list/uplink_items = list() item = /obj/item/weapon/storage/box/syndie_kit/imp_explosive cost = 6 + +//CYBERNETIC IMPLANTS + +/datum/uplink_item/cyber_implants + category = "Cybernetic Implants" + gamemodes = list(/datum/game_mode/nuclear) + surplus = 0 + +/datum/uplink_item/cyber_implants/thermals + name = "Thermal Vision Implant" + desc = "These cybernetic eyes will give you thermal vision." + item = /obj/item/cybernetic_implant/eyes/thermals + cost = 8 + +/datum/uplink_item/cyber_implants/xray + name = "X-Ray Vision Implant" + desc = "These cybernetic eyes will give you X-ray vision." + item = /obj/item/cybernetic_implant/eyes/xray + cost = 10 + +/datum/uplink_item/cyber_implants/antistun + name = "CNS Rebooter Implant" + desc = "This implant will help you get back up on your feet faster after being stunned." + item = /obj/item/cybernetic_implant/brain/anti_stun + cost = 7 + +/datum/uplink_item/cyber_implants/antidrop + name = "Anti-Drop Implant" + desc = "This cybernetic brain implant will allow you to force your hand muscles to contract, preventing item dropping." + item = /obj/item/cybernetic_implant/brain/anti_drop + cost = 7 + +/datum/uplink_item/cyber_implants/reviver + name = "Reviver Implant" + desc = "This implant will attempt to revive you if you lose consciousness." + item = /obj/item/cybernetic_implant/chest/reviver + cost = 8 + +/datum/uplink_item/cyber_implants/nutriment + name = "Nutriment Pump Implant PLUS" + desc = "This implant will pump you with nutriments and electrolytes so you don't go hungry in action." + item = /obj/item/cybernetic_implant/chest/nutriment/plus + cost = 5 + +/datum/uplink_item/cyber_implants/bundle + name = "Cybernetic Implants Bundle" + desc = "A random selection of cybernetic implants. Guaranteed 5 high quality implants." + item = /obj/item/weapon/storage/box/cyber_implants + cost = 25 + // POINTLESS BADASSERY /datum/uplink_item/badass category = "(Pointless) Badassery" surplus = 0 + last = 1 /datum/uplink_item/badass/bundle name = "Syndicate Bundle" diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index 5e2a88ad6e9..538e98cb003 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -118,25 +118,3 @@ /obj/item/weapon/relic = 3, "" = 11 ) - -/obj/effect/spawner/lootdrop/cyberimplants_op - name = "cybernetic implants spawner" - lootdoubles = 0 - loot = list(/obj/item/cybernetic_implant/chest/reviver = 1, /obj/item/cybernetic_implant/chest/nutriment/plus = 1, - /obj/item/cybernetic_implant/eyes/thermals = 2, /obj/item/cybernetic_implant/eyes/xray = 1, - /obj/item/cybernetic_implant/brain/anti_drop = 1, /obj/item/cybernetic_implant/brain/anti_stun = 1) - -/obj/effect/spawner/lootdrop/cyberimplants_op/New() - var/probability = rand(1,100) - if(probability < 50) - lootcount = 1 - return ..() - if(probability < 75) - lootcount = 2 - return ..() - if(probability < 95) - lootcount = 3 - return ..() - else - lootcount = 4 - return ..() \ No newline at end of file diff --git a/code/modules/surgery/organs/cybernetic_implants.dm b/code/modules/surgery/organs/cybernetic_implants.dm index 4b20ba531b8..1bc6e2ff69c 100644 --- a/code/modules/surgery/organs/cybernetic_implants.dm +++ b/code/modules/surgery/organs/cybernetic_implants.dm @@ -295,7 +295,7 @@ /obj/item/cybernetic_implant/chest/nutriment/plus name = "Nutriment pump implant PLUS" - desc = "This implant with synthesize and pump into your bloodstream a small amount of nutriment when you are hungry." + desc = "This implant will synthesize and pump into your bloodstream a small amount of nutriment when you are hungry." icon_state = "chest_implant" implant_color = "#006607" hunger_threshold = NUTRITION_LEVEL_HUNGRY @@ -364,4 +364,24 @@ if(prob(50 / severity)) owner.heart_attack = 1 spawn(600 / severity) - owner.heart_attack = 0 \ No newline at end of file + owner.heart_attack = 0 + + +//BOX O' IMPLANTS + +/obj/item/weapon/storage/box/cyber_implants + name = "boxed cybernetic implants" + desc = "A sleek, sturdy box." + icon_state = "cyber_implants" + var/list/boxed = list(/obj/item/cybernetic_implant/eyes/xray,/obj/item/cybernetic_implant/eyes/thermals, + /obj/item/cybernetic_implant/brain/anti_drop, /obj/item/cybernetic_implant/brain/anti_stun, + /obj/item/cybernetic_implant/chest/nutriment/plus, /obj/item/cybernetic_implant/chest/reviver) + var/amount = 5 + +/obj/item/weapon/storage/box/cyber_implants/New() + ..() + var/i + var/implant + for(i = 0, i < amount, i++) + implant = pick(boxed) + new implant(src) \ No newline at end of file diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi index b4f2c21b2234b9823432445b025cf78792f6e90f..57a775f813236a73d4d6a79438ea443d32d22745 100644 GIT binary patch literal 50905 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

pfNJVoN=4ns4w&%(Oei;QgTScf-V2`t%ogN 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 literal 51149 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

gMIGA~x9cB4-lt%z8c|nWKI`R+mh0O?FQg43 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�Ux#E9>O}wfWLRp6RBy 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 Date: Sun, 12 Apr 2015 04:01:54 +0100 Subject: [PATCH 007/143] Changelog. --- html/changelogs/xxalpha-fixfixfix.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 html/changelogs/xxalpha-fixfixfix.yml diff --git a/html/changelogs/xxalpha-fixfixfix.yml b/html/changelogs/xxalpha-fixfixfix.yml new file mode 100644 index 00000000000..8d94cfb1e84 --- /dev/null +++ b/html/changelogs/xxalpha-fixfixfix.yml @@ -0,0 +1,10 @@ +author: xxalpha + +delete-after: True + +changes: + - rscadd: "Added a new Reviver implant: now it revives you from unconsciousness rather than death." + - rscadd: "Added cybernetic implants and a cybernetic implants bundle to the Nuke Ops uplink." + - bugfix: "Fixed Nutriment pump implant printing." + - tweak: "Health Analyzers now have the ability to detect cybernetic implants." + - tweak: "X-Ray implants are now much harder to unlock." \ No newline at end of file From 0ba314552abf661922f0a70e1a3be819a8fab581 Mon Sep 17 00:00:00 2001 From: Fayrik Date: Mon, 11 May 2015 18:54:31 +0100 Subject: [PATCH 008/143] The initial tweaks are in place, ran out of time to finish it though. --- .../components/binary_devices/passive_gate.dm | 16 ++++------ .../components/binary_devices/pump.dm | 16 ++++------ .../components/binary_devices/volume_pump.dm | 16 ++++------ .../components/trinary_devices/filter.dm | 16 ++++------ .../components/trinary_devices/mixer.dm | 16 ++++------ code/game/machinery/alarm.dm | 24 ++++----------- code/game/machinery/atmoalter/canister.dm | 25 +++++++++------- code/game/machinery/cryo.dm | 22 ++++---------- .../game/objects/items/weapons/tanks/tanks.dm | 29 +++++++------------ code/modules/nano/nanoexternal.dm | 3 ++ code/modules/nano/nanomanager.dm | 29 +++++++++++++++++-- html/changelogs/Fayrik-TheNanoingFixes.yml | 7 +++++ nano/templates/air_alarm.tmpl | 2 +- 13 files changed, 98 insertions(+), 123 deletions(-) create mode 100644 html/changelogs/Fayrik-TheNanoingFixes.yml diff --git a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm index c9429803684..513c2eaa2e4 100644 --- a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm +++ b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm @@ -89,24 +89,18 @@ Passive gate is similar to the regular pump except: return 1 -/obj/machinery/atmospherics/binary/passive_gate/ui_interact(mob/user, ui_key = "main") +/obj/machinery/atmospherics/binary/passive_gate/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) if(stat & (BROKEN|NOPOWER)) return - var/data = list() + ui = SSnano.push_open_or_new_ui(user, src, ui_key, ui, "atmos_gas_pump.tmpl", name, 400, 120, 0) +/obj/machinery/atmospherics/binary/passive_gate/get_ui_data() + var/data = list() data["on"] = on data["pressure_set"] = round(target_pressure*100) //Nano UI can't handle rounded non-integers, apparently. data["max_pressure"] = MAX_OUTPUT_PRESSURE - - var/datum/nanoui/ui = SSnano.get_open_ui(user, src, ui_key) - if (!ui) - ui = new /datum/nanoui(user, src, ui_key, "atmos_gas_pump.tmpl", name, 400, 120) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - else - ui.push_data(data) + return data /obj/machinery/atmospherics/binary/passive_gate/atmosinit() ..() diff --git a/code/ATMOSPHERICS/components/binary_devices/pump.dm b/code/ATMOSPHERICS/components/binary_devices/pump.dm index 85c5f1cf903..8f25e7d242b 100644 --- a/code/ATMOSPHERICS/components/binary_devices/pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/pump.dm @@ -97,24 +97,18 @@ Thus, the two variables affect pump operation are set in New(): return 1 -/obj/machinery/atmospherics/binary/pump/ui_interact(mob/user, ui_key = "main") +/obj/machinery/atmospherics/binary/pump/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) if(stat & (BROKEN|NOPOWER)) return - var/data = list() + ui = SSnano.push_open_or_new_ui(user, src, ui_key, ui, "atmos_gas_pump.tmpl", name, 400, 120, 0) +/obj/machinery/atmospherics/binary/pump/get_ui_data() + var/data = list() data["on"] = on data["pressure_set"] = round(target_pressure*100) //Nano UI can't handle rounded non-integers, apparently. data["max_pressure"] = MAX_OUTPUT_PRESSURE - - var/datum/nanoui/ui = SSnano.get_open_ui(user, src, ui_key) - if (!ui) - ui = new /datum/nanoui(user, src, ui_key, "atmos_gas_pump.tmpl", name, 400, 120) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - else - ui.push_data(data) + return data /obj/machinery/atmospherics/binary/pump/atmosinit() ..() diff --git a/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm b/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm index be8fbdc6ab0..4b920407ce8 100644 --- a/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm @@ -93,24 +93,18 @@ Thus, the two variables affect pump operation are set in New(): return 1 -/obj/machinery/atmospherics/binary/volume_pump/ui_interact(mob/user, ui_key = "main") +/obj/machinery/atmospherics/binary/volume_pump/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) if(stat & (BROKEN|NOPOWER)) return - var/data = list() + ui = SSnano.push_open_or_new_ui(user, src, ui_key, ui, "atmos_gas_pump.tmpl", name, 400, 120, 0) +/obj/machinery/atmospherics/binary/volume_pump/get_ui_data() + var/data = list() data["on"] = on data["transfer_rate"] = round(transfer_rate*100) //Nano UI can't handle rounded non-integers, apparently. data["max_rate"] = MAX_TRANSFER_RATE - - var/datum/nanoui/ui = SSnano.get_open_ui(user, src, ui_key) - if (!ui) - ui = new /datum/nanoui(user, src, ui_key, "atmos_gas_pump.tmpl", name, 400, 120) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - else - ui.push_data(data) + return data /obj/machinery/atmospherics/binary/volume_pump/atmosinit() ..() diff --git a/code/ATMOSPHERICS/components/trinary_devices/filter.dm b/code/ATMOSPHERICS/components/trinary_devices/filter.dm index d3ddfac0a8a..1bcbd3c949b 100644 --- a/code/ATMOSPHERICS/components/trinary_devices/filter.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/filter.dm @@ -158,25 +158,19 @@ Filter types: ui_interact(user) -/obj/machinery/atmospherics/trinary/filter/ui_interact(mob/user, ui_key = "main") +/obj/machinery/atmospherics/trinary/filter/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) if(stat & (BROKEN|NOPOWER)) return - var/data = list() + ui = SSnano.push_open_or_new_ui(user, src, ui_key, ui, "atmos_filter.tmpl", name, 400, 320, 0) +/obj/machinery/atmospherics/trinary/filter/get_ui_data() + var/data = list() data["on"] = on data["pressure_set"] = round(target_pressure*100) //Nano UI can't handle rounded non-integers, apparently. data["max_pressure"] = MAX_OUTPUT_PRESSURE data["filter_type"] = filter_type - - var/datum/nanoui/ui = SSnano.get_open_ui(user, src, ui_key) - if (!ui) - ui = new /datum/nanoui(user, src, ui_key, "atmos_filter.tmpl", name, 400, 320) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - else - ui.push_data(data) + return data /obj/machinery/atmospherics/trinary/filter/Topic(href, href_list) if(..()) diff --git a/code/ATMOSPHERICS/components/trinary_devices/mixer.dm b/code/ATMOSPHERICS/components/trinary_devices/mixer.dm index e80c0c7654b..53b1d1b27f9 100644 --- a/code/ATMOSPHERICS/components/trinary_devices/mixer.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/mixer.dm @@ -108,26 +108,20 @@ ui_interact(user) -/obj/machinery/atmospherics/trinary/mixer/ui_interact(mob/user, ui_key = "main") +/obj/machinery/atmospherics/trinary/mixer/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) if(stat & (BROKEN|NOPOWER)) return - var/data = list() + ui = SSnano.push_open_or_new_ui(user, src, ui_key, ui, "atmos_mixer.tmpl", name, 400, 320, 0) +/obj/machinery/atmospherics/trinary/mixer/get_ui_data() + var/data = list() data["on"] = on data["pressure_set"] = round(target_pressure*100) //Nano UI can't handle rounded non-integers, apparently. data["max_pressure"] = MAX_OUTPUT_PRESSURE data["node1_concentration"] = round(node1_concentration*100) data["node2_concentration"] = round(node2_concentration*100) - - var/datum/nanoui/ui = SSnano.get_open_ui(user, src, ui_key) - if (!ui) - ui = new /datum/nanoui(user, src, ui_key, "atmos_mixer.tmpl", name, 400, 320) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - else - ui.push_data(data) + return data /obj/machinery/atmospherics/trinary/mixer/Topic(href,href_list) if(..()) return diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index e14e0792a84..20a0b97f01a 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -185,13 +185,6 @@ return if(!shorted) - //user << browse(return_text(),"window=air_alarm") - //onclose(user, "air_alarm") - /*var/datum/browser/popup = new(user, "air_alarm", "[alarm_area.name] Air Alarm", 500, 400) - popup.set_content(return_text()) - popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) - popup.open() - refresh_all()*/ ui_interact(user) if(panel_open && (!istype(user, /mob/living/silicon/ai))) @@ -199,29 +192,22 @@ return -/obj/machinery/alarm/ui_interact(mob/user, ui_key = "main") +/obj/machinery/alarm/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) if(stat & (BROKEN|NOPOWER)) return - var/data = list() + ui = SSnano.push_open_or_new_ui(user, src, ui_key, ui, "air_alarm.tmpl", "Air Alarm", 350, 500, 1) +/obj/machinery/alarm/get_ui_data(mob/user) + var/data = list() data["locked"] = locked data["siliconUser"] = user.has_unlimited_silicon_privilege data["screen"] = screen data["dangerous"] = emagged - populate_status(data) if (!locked || user.has_unlimited_silicon_privilege) populate_controls(data) - - var/datum/nanoui/ui = SSnano.get_open_ui(user, src, ui_key) - if (!ui) - ui = new /datum/nanoui(user, src, ui_key, "air_alarm.tmpl", "Air Alarm", 350, 500) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - else - ui.push_data(data) + return data /obj/machinery/alarm/proc/shock(mob/user, prb) if((stat & (NOPOWER))) // unpowered, no shock diff --git a/code/game/machinery/atmoalter/canister.dm b/code/game/machinery/atmoalter/canister.dm index 1ee28a02cbf..b390bc8df3e 100644 --- a/code/game/machinery/atmoalter/canister.dm +++ b/code/game/machinery/atmoalter/canister.dm @@ -176,6 +176,7 @@ update_flag can_label = 1 else can_label = 0 + /obj/machinery/portable_atmospherics/canister/process() src.updateDialog() return ..() @@ -261,10 +262,19 @@ update_flag /obj/machinery/portable_atmospherics/canister/attack_hand(var/mob/user as mob) return src.ui_interact(user) -/obj/machinery/portable_atmospherics/canister/ui_interact(mob/user, ui_key = "main") +/obj/machinery/portable_atmospherics/canister/interact(mob/user, ui_key = "main") + if (src.destroyed || !user) + return + + SSnano.try_update_ui(user, src, ui_key, null, src.get_ui_data()) + +/obj/machinery/portable_atmospherics/canister/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) if (src.destroyed) return + ui = SSnano.push_open_or_new_ui(user, src, ui_key, ui, "canister.tmpl", "Canister", 480, 400, 0) + +/obj/machinery/portable_atmospherics/canister/get_ui_data() var/data = list() data["name"] = src.name data["canLabel"] = src.can_label ? 1 : 0 @@ -278,15 +288,7 @@ update_flag data["hasHoldingTank"] = src.holding ? 1 : 0 if (holding) data["holdingTank"] = list("name" = src.holding.name, "tankPressure" = round(src.holding.air_contents.return_pressure())) - - var/datum/nanoui/ui = SSnano.get_open_ui(user, src, ui_key) - if (!ui) - ui = new /datum/nanoui(user, src, ui_key, "canister.tmpl", "Canister", 480, 400) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - else - ui.push_data(data) + return data /obj/machinery/portable_atmospherics/canister/Topic(href, href_list) @@ -324,6 +326,9 @@ update_flag if (href_list["remove_tank"]) if(holding) + if (valve_open) + investigate_log("Valve was closed automatically by [key_name(usr)] removing the [holding]
", "atmos") + valve_open = !valve_open holding.loc = loc holding = null diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm index 48a4b19a881..3b57fc286bd 100644 --- a/code/game/machinery/cryo.dm +++ b/code/game/machinery/cryo.dm @@ -137,10 +137,14 @@ * * @return nothing */ -/obj/machinery/atmospherics/unary/cryo_cell/ui_interact(mob/user, ui_key = "main") +/obj/machinery/atmospherics/unary/cryo_cell/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) if(user == occupant || user.stat || panel_open) return + ui = SSnano.push_open_or_new_ui(user, src, ui_key, ui, "cryo.tmpl", "Cryo Cell Control System", 520, 410, 1) + //user.set_machine(src) + +/obj/machinery/atmospherics/unary/cryo_cell/get_ui_data() // this is the data which will be sent to the ui var/data[0] data["isOperating"] = on @@ -185,21 +189,7 @@ for(var/datum/reagent/R in beaker:reagents.reagent_list) beakerContents.Add(list(list("name" = R.name, "volume" = R.volume))) // list in a list because Byond merges the first list... data["beakerContents"] = beakerContents - - var/datum/nanoui/ui = SSnano.get_open_ui(user, src, ui_key) - if (!ui) - // the ui does not exist, so we'll create a new one - ui = new(user, src, ui_key, "cryo.tmpl", "Cryo Cell Control System", 520, 410) - // When the UI is first opened this is the data it will use - ui.set_initial_data(data) - ui.open() - // Auto update every Master Controller tick - ui.set_auto_update(1) - else - // The UI is already open so push the new data to it - ui.push_data(data) - return - //user.set_machine(src) + return data /obj/machinery/atmospherics/unary/cryo_cell/Topic(href, href_list) if(usr == occupant || panel_open) diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm index 76ce25a17ba..08e3c4ad173 100644 --- a/code/game/objects/items/weapons/tanks/tanks.dm +++ b/code/game/objects/items/weapons/tanks/tanks.dm @@ -96,7 +96,13 @@ ui_interact(user) -/obj/item/weapon/tank/ui_interact(mob/user, ui_key = "main") +/obj/item/weapon/tank/interact(mob/user, ui_key = "main") + SSnano.try_update_ui(user, src, ui_key, null, src.get_ui_data()) + +/obj/item/weapon/tank/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) + ui = SSnano.push_open_or_new_ui(user, src, ui_key, ui, "tanks.tmpl", "Tank", 500, 300, 0) + +/obj/item/weapon/tank/get_ui_data() var/mob/living/carbon/location = null if(istype(loc, /mob/living/carbon)) @@ -104,19 +110,12 @@ else if(istype(loc.loc, /mob/living/carbon)) location = loc.loc - var/using_internal - if(istype(location)) - if(location.internal==src) - using_internal = 1 - - // this is the data which will be sent to the ui var/data = list() data["tankPressure"] = round(air_contents.return_pressure() ? air_contents.return_pressure() : 0) data["releasePressure"] = round(distribute_pressure ? distribute_pressure : 0) data["defaultReleasePressure"] = round(TANK_DEFAULT_RELEASE_PRESSURE) data["maxReleasePressure"] = round(TANK_MAX_RELEASE_PRESSURE) - data["valveOpen"] = using_internal ? 1 : 0 - + data["valveOpen"] = 0 data["maskConnected"] = 0 if(istype(location)) @@ -124,6 +123,7 @@ if(location.internal == src) // if tank is current internal mask_check = 1 + data["valveOpen"] = 1 else if(src in location) // or if tank is in the mobs possession if(!location.internal) // and they do not have any active internals mask_check = 1 @@ -131,16 +131,7 @@ if(mask_check) if(location.wear_mask && (location.wear_mask.flags & MASKINTERNALS)) data["maskConnected"] = 1 - - var/datum/nanoui/ui = SSnano.get_open_ui(user, src, ui_key) - if (!ui) - ui = new /datum/nanoui(user, src, ui_key, "tanks.tmpl", "Tank", 500, 300) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - else - ui.push_data(data) - + return data /obj/item/weapon/tank/Topic(href, href_list) ..() diff --git a/code/modules/nano/nanoexternal.dm b/code/modules/nano/nanoexternal.dm index d6d2833e1e3..41317e6e467 100644 --- a/code/modules/nano/nanoexternal.dm +++ b/code/modules/nano/nanoexternal.dm @@ -39,5 +39,8 @@ /atom/movable/proc/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) return +/atom/movable/proc/get_ui_data() + return list() + // Used by the Nano UI SubSystem (/datum/subsystem/nano) to track UIs opened by this mob /mob/var/list/open_uis = list() diff --git a/code/modules/nano/nanomanager.dm b/code/modules/nano/nanomanager.dm index 09b8a4796be..31a1e50ce6e 100644 --- a/code/modules/nano/nanomanager.dm +++ b/code/modules/nano/nanomanager.dm @@ -1,3 +1,27 @@ + /** + * Get an open /nanoui ui for the current user, or create a new one. + * + * @param user /mob The mob who opened/owns the ui + * @param src_object /obj|/mob The obj or mob which the ui belongs to + * @param ui_key string A string key used for the ui + * @param ui /datum/nanoui An existing instance of the ui (can be null) + * @param data list The data to be passed to the ui, if it exists + * + * @return /nanoui Returns the new or found ui + */ +/datum/subsystem/nano/proc/push_open_or_new_ui(var/mob/user, var/atom/movable/src_object, ui_key, var/datum/nanoui/ui, template, title, width, height, auto_update) + var/list/data = src_object.get_ui_data() + if (!data) + data = list() + + ui = try_update_ui(user, src_object, ui_key, ui, data) + + if (isnull(ui)) + ui = new /datum/nanoui(user, src_object, ui_key, template, title, width, height) + ui.set_initial_data(data) + ui.open() + ui.set_auto_update(auto_update) + /** * Get an open /nanoui ui for the current user, src_object and ui_key and try to update it with data * @@ -11,9 +35,8 @@ */ /datum/subsystem/nano/proc/try_update_ui(var/mob/user, src_object, ui_key, var/datum/nanoui/ui, data) if (isnull(ui)) // no ui has been passed, so we'll search for one - { ui = get_open_ui(user, src_object, ui_key) - } + if (!isnull(ui)) // The UI is already open so push the data to it ui.push_data(data) @@ -186,4 +209,4 @@ //Send all needed nano ui files to the client /datum/subsystem/nano/proc/send_resources(client) for(var/file in asset_files) - client << browse_rsc(file) + client << browse_rsc(file) \ No newline at end of file diff --git a/html/changelogs/Fayrik-TheNanoingFixes.yml b/html/changelogs/Fayrik-TheNanoingFixes.yml new file mode 100644 index 00000000000..1a4b812ed7a --- /dev/null +++ b/html/changelogs/Fayrik-TheNanoingFixes.yml @@ -0,0 +1,7 @@ +author: Fayrik + +delete-after: True + +changes: +- tweak: "Refactored all NanoUI interfaces to use a more universal proc." +- bugfix: "Removed automatic updates on atmospheric pumps, canisters and tanks, making them respond to button clicks much faster." \ No newline at end of file diff --git a/nano/templates/air_alarm.tmpl b/nano/templates/air_alarm.tmpl index f3a64d9efd8..a5556180308 100644 --- a/nano/templates/air_alarm.tmpl +++ b/nano/templates/air_alarm.tmpl @@ -91,7 +91,7 @@ Used In File(s): \code\game\machinery\alarm.dm


{{if mode==3}} {{:~link('PANIC SIPHON ACTIVE - Turn siphoning off', null, { 'mode' : 1}, null, 'redButton')}} - {{else}} + {{else}} {{:~link('ACTIVATE PANIC SIPHON IN AREA', null, { 'mode' : 3}, null, 'yellowButton')}} {{/if}} {{else screen == 2}} From 474bf2667cea9a78677549b826cb85c602963387 Mon Sep 17 00:00:00 2001 From: Fayrik Date: Tue, 12 May 2015 22:23:25 +0100 Subject: [PATCH 009/143] Almost like magic, it works. CODE MAGIC. --- code/game/machinery/cryo.dm | 6 ++-- code/modules/nano/nanoexternal.dm | 2 +- code/modules/nano/nanomanager.dm | 2 +- code/modules/power/apc.dm | 17 +++-------- code/modules/power/smes.dm | 18 ++++-------- code/modules/power/solar.dm | 15 +++------- code/modules/reagents/Chemistry-Machinery.dm | 31 +++++++------------- 7 files changed, 28 insertions(+), 63 deletions(-) diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm index 3b57fc286bd..f73e485eccb 100644 --- a/code/game/machinery/cryo.dm +++ b/code/game/machinery/cryo.dm @@ -146,11 +146,11 @@ /obj/machinery/atmospherics/unary/cryo_cell/get_ui_data() // this is the data which will be sent to the ui - var/data[0] + var/data = list() data["isOperating"] = on data["hasOccupant"] = occupant ? 1 : 0 - var/occupantData[0] + var/occupantData = list() if (!occupant) occupantData["name"] = null occupantData["stat"] = null @@ -173,7 +173,7 @@ occupantData["toxLoss"] = occupant.getToxLoss() occupantData["fireLoss"] = occupant.getFireLoss() occupantData["bodyTemperature"] = occupant.bodytemperature - data["occupant"] = occupantData; + data["occupant"] = occupantData data["isOpen"] = state_open data["cellTemperature"] = round(air_contents.temperature) diff --git a/code/modules/nano/nanoexternal.dm b/code/modules/nano/nanoexternal.dm index 41317e6e467..265629ec4df 100644 --- a/code/modules/nano/nanoexternal.dm +++ b/code/modules/nano/nanoexternal.dm @@ -39,7 +39,7 @@ /atom/movable/proc/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) return -/atom/movable/proc/get_ui_data() +/atom/movable/proc/get_ui_data(mob/user) return list() // Used by the Nano UI SubSystem (/datum/subsystem/nano) to track UIs opened by this mob diff --git a/code/modules/nano/nanomanager.dm b/code/modules/nano/nanomanager.dm index 31a1e50ce6e..5f47c8da5ca 100644 --- a/code/modules/nano/nanomanager.dm +++ b/code/modules/nano/nanomanager.dm @@ -10,7 +10,7 @@ * @return /nanoui Returns the new or found ui */ /datum/subsystem/nano/proc/push_open_or_new_ui(var/mob/user, var/atom/movable/src_object, ui_key, var/datum/nanoui/ui, template, title, width, height, auto_update) - var/list/data = src_object.get_ui_data() + var/list/data = src_object.get_ui_data(user) if (!data) data = list() diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 44da3f238a0..d0556c1193c 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -667,6 +667,9 @@ if(!user) return + ui = SSnano.push_open_or_new_ui(user, src, ui_key, ui, "apc.tmpl", "[area.name] - APC", 520, user.has_unlimited_silicon_privilege ? 465 : 420, 1) + +/obj/machinery/power/apc/get_ui_data(mob/user) var/list/data = list( "locked" = locked, "isOperating" = operating, @@ -712,19 +715,7 @@ ) ) ) - - // update the ui if it exists, returns null if no ui is passed/found - ui = SSnano.try_update_ui(user, src, ui_key, ui, data) - if (!ui) - // the ui does not exist, so we'll create a new() one - // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm - ui = new(user, src, ui_key, "apc.tmpl", "[area.name] - APC", 520, data["siliconUser"] ? 465 : 420) - // when the ui is first opened this is the data it will use - ui.set_initial_data(data) - // open the new ui window - ui.open() - // auto update every Master Controller tick - ui.set_auto_update(1) + return data /obj/machinery/power/apc/proc/report() return "[area.name] : [equipment]/[lighting]/[environ] ([lastused_equip+lastused_light+lastused_environ]) : [cell? cell.percent() : "N/C"] ([charging])" diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index 20efaea4d8d..e35ea0582d3 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -296,6 +296,10 @@ if(!user) return + // update the ui if it exists, create a new one if it doesn't + ui = SSnano.push_open_or_new_ui(user, src, ui_key, ui, "smes.tmpl", "SMES - [name]", 350, 560, 1) + +/obj/machinery/power/smes/get_ui_data() var/list/data = list( "capacityPercent" = round(100.0*charge/capacity, 0.1), "capacity" = capacity, @@ -313,19 +317,7 @@ "outputLevelMax" = output_level_max, "outputUsed" = output_used ) - - // update the ui if it exists, returns null if no ui is passed/found - ui = SSnano.try_update_ui(user, src, ui_key, ui, data) - if (!ui) - // the ui does not exist, so we'll create a new() one - // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm - ui = new(user, src, ui_key, "smes.tmpl", "SMES - [name]", 350, 560) - // when the ui is first opened this is the data it will use - ui.set_initial_data(data) - // open the new ui window - ui.open() - // auto update every Master Controller tick - ui.set_auto_update(1) + return data /obj/machinery/power/smes/Topic(href, href_list) // world << "[href] ; [href_list[href]]" diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index 77c4aa75751..2cc1a9e1ca9 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -369,8 +369,10 @@ if(!..()) ui_interact(user) -/obj/machinery/power/solar_control/ui_interact(mob/user, ui_key = "main") +/obj/machinery/power/solar_control/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) + ui = SSnano.push_open_or_new_ui(user, src, ui_key, ui, "solar_control.tmpl", name, 490, 420, 1) +/obj/machinery/power/solar_control/get_ui_data() var/data = list() data["generated"] = round(lastgen) @@ -383,16 +385,7 @@ data["connected_panels"] = connected_panels.len data["connected_tracker"] = (connected_tracker ? 1 : 0) - - var/datum/nanoui/ui = SSnano.get_open_ui(user, src, ui_key) - if (!ui) - ui = new(user, src, ui_key, "solar_control.tmpl", name, 490, 420) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - else - ui.push_data(data) - return + return data /obj/machinery/power/solar_control/attackby(I as obj, user as mob, params) if(istype(I, /obj/item/weapon/screwdriver)) diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index 4fd76334aab..300975cbad4 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -75,8 +75,10 @@ if(stat & (BROKEN)) return if(user.stat || user.restrained()) return - // this is the data which will be sent to the ui - var/data[0] + ui = SSnano.push_open_or_new_ui(user, src, ui_key, ui, "chem_dispenser.tmpl", "[uiname]", 490, 710, 0) + +/obj/machinery/chem_dispenser/get_ui_data() + var/data = list() data["amount"] = amount data["energy"] = energy data["maxEnergy"] = max_energy @@ -103,17 +105,7 @@ if(temp) chemicals.Add(list(list("title" = temp.name, "id" = temp.id, "commands" = list("dispense" = temp.id)))) // list in a list because Byond merges the first list... data["chemicals"] = chemicals - - // update the ui if it exists, returns null if no ui is passed/found - ui = SSnano.try_update_ui(user, src, ui_key, ui, data) - if (!ui) - // the ui does not exist, so we'll create a new() one - // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm - ui = new(user, src, ui_key, "chem_dispenser.tmpl", "[uiname]", 490, 710) - // when the ui is first opened this is the data it will use - ui.set_initial_data(data) - // open the new ui window - ui.open() + return data /obj/machinery/chem_dispenser/Topic(href, href_list) if(stat & (BROKEN)) @@ -1491,7 +1483,10 @@ obj/machinery/computer/pandemic/proc/replicator_cooldown(var/waittime) /obj/machinery/chem_heater/ui_interact(var/mob/user, ui_key = "main", var/datum/nanoui/ui = null) if(user.stat || user.restrained()) return - var/data[0] + ui = SSnano.push_open_or_new_ui(user, src, ui_key, ui, "chem_heater.tmpl", "ChemHeater", 350, 270, 0) + +/obj/machinery/chem_heater/get_ui_data() + var/data = list() data["targetTemp"] = desired_temp data["isActive"] = on data["isBeakerLoaded"] = beaker ? 1 : 0 @@ -1506,13 +1501,7 @@ obj/machinery/computer/pandemic/proc/replicator_cooldown(var/waittime) for(var/datum/reagent/R in beaker.reagents.reagent_list) beakerContents.Add(list(list("name" = R.name, "volume" = R.volume))) // list in a list because Byond merges the first list... data["beakerContents"] = beakerContents - - // update the ui if it exists, returns null if no ui is passed/found - ui = SSnano.try_update_ui(user, src, ui_key, ui, data) - if (!ui) - ui = new(user, src, ui_key, "chem_heater.tmpl", "ChemHeater", 350, 270) - ui.set_initial_data(data) - ui.open() + return data /////////////////////////////////////////////////////////////////////////// From 19ad2d5832ac96153d4a74dd9d60a8136047807e Mon Sep 17 00:00:00 2001 From: Fayrik Date: Tue, 12 May 2015 22:35:42 +0100 Subject: [PATCH 010/143] STOP TRYING TO MAKE STEALTH CHANGES, FAYRIK --- html/changelogs/Fayrik-TheNanoingFixes.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/html/changelogs/Fayrik-TheNanoingFixes.yml b/html/changelogs/Fayrik-TheNanoingFixes.yml index 1a4b812ed7a..a58d88386f6 100644 --- a/html/changelogs/Fayrik-TheNanoingFixes.yml +++ b/html/changelogs/Fayrik-TheNanoingFixes.yml @@ -3,5 +3,6 @@ author: Fayrik delete-after: True changes: +- tweak: "Canisters now automatically close their valve when air tanks are removed from them." - tweak: "Refactored all NanoUI interfaces to use a more universal proc." - bugfix: "Removed automatic updates on atmospheric pumps, canisters and tanks, making them respond to button clicks much faster." \ No newline at end of file From f0351e1890a57e3208f167172d402a64d68e8853 Mon Sep 17 00:00:00 2001 From: xxalpha Date: Wed, 22 Apr 2015 18:57:23 +0100 Subject: [PATCH 011/143] Tweaked uplink prices. Undo X-ray requirement change. --- code/datums/uplink_item.dm | 6 +++--- code/modules/research/designs/medical_designs.dm | 2 +- code/modules/surgery/organs/cybernetic_implants.dm | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index 47c456bbb48..1e95a456ebb 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -663,13 +663,13 @@ var/list/uplink_items = list() name = "CNS Rebooter Implant" desc = "This implant will help you get back up on your feet faster after being stunned." item = /obj/item/cybernetic_implant/brain/anti_stun - cost = 7 + cost = 12 /datum/uplink_item/cyber_implants/antidrop name = "Anti-Drop Implant" desc = "This cybernetic brain implant will allow you to force your hand muscles to contract, preventing item dropping." item = /obj/item/cybernetic_implant/brain/anti_drop - cost = 7 + cost = 8 /datum/uplink_item/cyber_implants/reviver name = "Reviver Implant" @@ -687,7 +687,7 @@ var/list/uplink_items = list() name = "Cybernetic Implants Bundle" desc = "A random selection of cybernetic implants. Guaranteed 5 high quality implants." item = /obj/item/weapon/storage/box/cyber_implants - cost = 25 + cost = 40 // POINTLESS BADASSERY diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index 1779d6b286d..d7eff961ebf 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -122,7 +122,7 @@ datum/design/bluespacebodybag name = "X-Ray implant" desc = "These cybernetic eyes will give you X-ray vision. Blinking is futile." id = "ci-xray" - req_tech = list("materials" = 7, "programming" = 5, "biotech" = 7, "magnets" = 5) + req_tech = list("materials" = 7, "programming" = 5, "biotech" = 6, "magnets" = 5) build_type = PROTOLATHE | MECHFAB materials = list("$metal" = 200, "$glass" = 200, "$silver" = 600, "$gold" = 600, "$plasma" = 1000, "$uranium" = 1000, "$diamond" = 2000) build_path = /obj/item/cybernetic_implant/eyes/xray diff --git a/code/modules/surgery/organs/cybernetic_implants.dm b/code/modules/surgery/organs/cybernetic_implants.dm index 1bc6e2ff69c..a54491e6f41 100644 --- a/code/modules/surgery/organs/cybernetic_implants.dm +++ b/code/modules/surgery/organs/cybernetic_implants.dm @@ -333,7 +333,7 @@ spawn(30) if(prob(90) && owner.getOxyLoss()) owner.adjustOxyLoss(-3) - revive_cost += 0.2 + revive_cost += 0.1 if(prob(75) && owner.getBruteLoss()) owner.adjustBruteLoss(-1) revive_cost += 0.5 From 9bfcf4acfbcd3658897d507619029653397928a0 Mon Sep 17 00:00:00 2001 From: Cheridan Date: Fri, 15 May 2015 17:06:22 -0500 Subject: [PATCH 012/143] COMMUNITY FEEDBACK UPDATE -Nuke Hardsuits are no longer unremovable when in combat mode, allowing for better healing/defibbing. -Explosive implants reduced to 4 TC. If you don't want to get looted, get good and don't die or buy an implant. --- code/datums/uplink_item.dm | 2 +- code/modules/clothing/spacesuits/hardsuit.dm | 12 ++++-------- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index 7f6db7d1388..c3ab1ce253e 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -637,7 +637,7 @@ var/list/uplink_items = list() name = "Explosive Implant" desc = "An implant injected into the body, and later activated either manually or automatically upon death. Creates a moderately-sized fiery explosion. For those agents who know there is no going back." item = /obj/item/weapon/storage/box/syndie_kit/imp_explosive - cost = 6 + cost = 4 // POINTLESS BADASSERY diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index e8746d637c6..6b92179511b 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -182,7 +182,7 @@ name = initial(name) desc = initial(desc) user.AddLuminosity(brightness_on) - flags |= HEADCOVERSEYES | HEADCOVERSMOUTH | STOPSPRESSUREDMAGE | THICKMATERIAL + flags |= HEADCOVERSEYES | HEADCOVERSMOUTH | STOPSPRESSUREDMAGE flags_inv |= HIDEMASK|HIDEEYES|HIDEFACE cold_protection |= HEAD else @@ -190,7 +190,7 @@ name += " (combat)" desc = alt_desc user.AddLuminosity(-brightness_on) - flags &= ~(HEADCOVERSEYES| HEADCOVERSMOUTH | STOPSPRESSUREDMAGE | THICKMATERIAL) + flags &= ~(HEADCOVERSEYES| HEADCOVERSMOUTH | STOPSPRESSUREDMAGE) flags_inv &= ~(HIDEMASK|HIDEEYES|HIDEFACE) cold_protection &= ~HEAD update_icon() @@ -204,13 +204,13 @@ linkedsuit.name = initial(linkedsuit.name) linkedsuit.desc = initial(linkedsuit.desc) linkedsuit.slowdown = 1 - linkedsuit.flags |= STOPSPRESSUREDMAGE | THICKMATERIAL + linkedsuit.flags |= STOPSPRESSUREDMAGE linkedsuit.cold_protection |= CHEST | GROIN | LEGS | FEET | ARMS | HANDS else linkedsuit.name += " (combat)" linkedsuit.desc = linkedsuit.alt_desc linkedsuit.slowdown = 0 - linkedsuit.flags &= ~(STOPSPRESSUREDMAGE | THICKMATERIAL) + linkedsuit.flags &= ~(STOPSPRESSUREDMAGE) linkedsuit.cold_protection &= ~(CHEST | GROIN | LEGS | FEET | ARMS | HANDS) linkedsuit.icon_state = "hardsuit[on]-[item_color]" @@ -233,10 +233,6 @@ allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword/saber,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank/internals) helmettype = /obj/item/clothing/head/helmet/space/hardsuit/syndi -/obj/item/clothing/suit/space/hardsuit/syndi/ToggleHelmet() - ..() - flags ^= NODROP - /obj/item/clothing/suit/space/hardsuit/syndi/New() jetpack = new /obj/item/weapon/tank/jetpack/suit(src) ..() From 4763d22f5be1050ed38a8eff0cfe096220d1521d Mon Sep 17 00:00:00 2001 From: Jordie0608 Date: Tue, 19 May 2015 03:11:18 +1000 Subject: [PATCH 013/143] Ports watchlist flagging for ckeys --- code/modules/admin/admin.dm | 3 ++- code/modules/admin/topic.dm | 35 ++++++++++++++++++++++++++++ code/modules/client/client procs.dm | 5 ++++ html/changelogs/jordie watchlist.yml | 6 +++++ 4 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 html/changelogs/jordie watchlist.yml diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 6524d509250..3fbfd53701e 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -47,7 +47,8 @@ var/global/floorIsLava = 0 body += "Ban | " body += "Jobban | " body += "Identity Ban | " - body += "Notes " + body += "Notes | " + body += "Watchlist Flag " if(M.client) body += "| Prison | " diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index ff3a5a9ebc3..9a083fdb5cc 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1076,6 +1076,41 @@ alert(usr,"This ban has already been lifted / does not exist.","Error","Ok") unjobbanpanel() + //Watchlist + else if(href_list["watchlist"]) + if(!check_rights(R_ADMIN)) return + var/mob/M = locate(href_list["watchlist"]) + if(!dbcon.IsConnected()) + usr << "Failed to establish database connection." + return + if(!ismob(M)) + usr << "This can only be used on instances of type /mob" + return + if(!M.ckey) + usr << "This mob has no ckey" + return + var/sql_ckey = sanitizeSQL(M.ckey) + var/DBQuery/query = dbcon.NewQuery("SELECT ckey FROM [format_table_name("watch")] WHERE (ckey = '[sql_ckey]')") + query.Execute() + if(query.NextRow()) + var/reason = input(usr,"Reason?","reason","Metagaming") as text|null + if(!reason) + return + log_admin("[key_name_admin(usr)] has added [key_name_admin(M)] to the watchlist - Reason: [reason]") + message_admins("[key_name_admin(usr)] has added [key_name_admin(M)] to the watchlist - Reason: [reason]", 1) + reason = sanitizeSQL(reason) + var/DBQuery/query_watchadd = dbcon.NewQuery("INSERT INTO [format_table_name("watch")] (ckey, reason) VALUES ('[sql_ckey]', '[reason]')") + if(!query_watchadd.Execute()) + var/err = query_watchadd.ErrorMsg() + log_game("SQL ERROR during adding new watch entry. Error : \[[err]\]\n") + else + log_admin("[key_name_admin(usr)] has removed [key_name_admin(M)] from the watchlist") + message_admins("[key_name_admin(usr)] has removed [key_name_admin(M)] from the watchlist", 1) + var/DBQuery/query_watchdel = dbcon.NewQuery("DELETE FROM [format_table_name("watch")] WHERE ckey = '[sql_ckey]'") + if(!query_watchdel.Execute()) + var/err = query_watchdel.ErrorMsg() + log_game("SQL ERROR during removing watch entry. Error : \[[err]\]\n") + else if(href_list["mute"]) if(!check_rights(R_ADMIN)) return cmd_admin_mute(href_list["mute"], text2num(href_list["mute_type"])) diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index 2fc40207bab..d863edeacfb 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -229,6 +229,11 @@ var/next_external_rsc = 0 while (query_cid.NextRow()) related_accounts_cid += "[query_cid.item[1]], " + var/DBQuery/query = dbcon.NewQuery("SELECT ckey, reason FROM [format_table_name("watch")] WHERE (ckey = '[sql_ckey]')") + query.Execute() + if(query.NextRow()) + message_admins("Notice: [key_name_admin(src)] is flagged for watching and has just connected - Reason: [query_cid.item[2]]") + send2irc_adminless_only("Watchlist", "[key_name_admin(src)] is flagged for watching and has just connected - Reason: [query_cid.item[2]]") var/admin_rank = "Player" if (src.holder && src.holder.rank) diff --git a/html/changelogs/jordie watchlist.yml b/html/changelogs/jordie watchlist.yml new file mode 100644 index 00000000000..34c7c4ede6a --- /dev/null +++ b/html/changelogs/jordie watchlist.yml @@ -0,0 +1,6 @@ +author: Jordie0608 + +delete-after: True + +changes: + - rscadd: "Admins can now flag ckeys to be alerted when they connect to the server." \ No newline at end of file From 3a02fca66cc6d4a0079f2a5b9acc1c5163c03df2 Mon Sep 17 00:00:00 2001 From: Jordie0608 Date: Tue, 19 May 2015 05:13:07 +1000 Subject: [PATCH 014/143] error fix, adds prompt for editing/removing entries and sql schema stuff --- SQL/database_changelog.txt | 16 ++++++++-- SQL/errofreedatabase.sql | 3 +- SQL/tgstation_schema.sql | 26 +++++++++++++++- SQL/tgstation_schema_prefixed.sql | 15 +++++++++ code/modules/admin/topic.dm | 47 +++++++++++++++++++++++------ code/modules/client/client procs.dm | 10 +++--- 6 files changed, 98 insertions(+), 19 deletions(-) diff --git a/SQL/database_changelog.txt b/SQL/database_changelog.txt index 80af03e4561..e1fc7d826f4 100644 --- a/SQL/database_changelog.txt +++ b/SQL/database_changelog.txt @@ -1,3 +1,15 @@ +19 May 2015, by Jordie0608 + +Added new table 'watch' for use in flagging ckeys. It shouldn't ever exist, but also added command to de-erroize this new table just in case someone does make it like that. + +To create this new table run the following command: + +CREATE TABLE `watch` (`id` int(11) NOT NULL AUTO_INCREMENT, `ckey` varchar(32) NOT NULL, `reason` text NOT NULL, PRIMARY KEY (`id`)) + +Remember to add prefix to the table name if you use them. + +---------------------------------------------------- + 19 September 2014, by MrStonedOne Removed erro_ from table names. dbconfig.txt has a option allowing you to change the prefix used in code, defaults to "erro_" if left out for legacy reasons. @@ -24,6 +36,4 @@ UPDATE erro_library SET deleted = 1 WHERE id = someid (Replace someid with the id of the book you want to soft delete.) ----------------------------------------------------- - - +---------------------------------------------------- \ No newline at end of file diff --git a/SQL/errofreedatabase.sql b/SQL/errofreedatabase.sql index ae5c0d7ee1c..d9590901deb 100644 --- a/SQL/errofreedatabase.sql +++ b/SQL/errofreedatabase.sql @@ -12,4 +12,5 @@ ALTER TABLE erro_poll_option RENAME TO SS13_poll_option; ALTER TABLE erro_poll_question RENAME TO SS13_poll_question; ALTER TABLE erro_poll_textreply RENAME TO SS13_poll_textreply; ALTER TABLE erro_poll_vote RENAME TO SS13_poll_vote; -ALTER TABLE erro_privacy RENAME TO SS13_privacy; \ No newline at end of file +ALTER TABLE erro_privacy RENAME TO SS13_privacy; +ALTER TABLE erro_watch RENAME TO SS13_watch; \ No newline at end of file diff --git a/SQL/tgstation_schema.sql b/SQL/tgstation_schema.sql index 30fd894e965..848e28b7f41 100644 --- a/SQL/tgstation_schema.sql +++ b/SQL/tgstation_schema.sql @@ -306,7 +306,16 @@ CREATE TABLE `poll_vote` ( ) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; --- +--var/reason = input(usr,"Reason?","reason","Metagaming") as text|null + if(!reason) + return + log_admin("[key_name_admin(usr)] has added [key_name_admin(M)] to the watchlist - Reason: [reason]") + message_admins("[key_name_admin(usr)] has added [key_name_admin(M)] to the watchlist - Reason: [reason]", 1) + reason = sanitizeSQL(reason) + var/DBQuery/query_watchadd = dbcon.NewQuery("INSERT INTO [format_table_name("watch")] (ckey, reason) VALUES ('[sql_ckey]', '[reason]')") + if(!query_watchadd.Execute()) + var/err = query_watchadd.ErrorMsg() + log_game("SQL ERROR during adding new watch entry. Error : \[[err]\]\n") -- Table structure for table `privacy` -- @@ -332,4 +341,19 @@ CREATE TABLE `privacy` ( /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; +-- +-- Table structure for table `watch` +-- + +DROP TABLE IF EXISTS `watch`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `watch` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `ckey` varchar(32) NOT NULL, + `reason` text NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + -- Dump completed on 2013-03-24 18:02:35 diff --git a/SQL/tgstation_schema_prefixed.sql b/SQL/tgstation_schema_prefixed.sql index c1b740b6874..b5b9bb0fe2d 100644 --- a/SQL/tgstation_schema_prefixed.sql +++ b/SQL/tgstation_schema_prefixed.sql @@ -327,4 +327,19 @@ CREATE TABLE `SS13_privacy` ( /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; +-- +-- Table structure for table `watch` +-- + +DROP TABLE IF EXISTS `SS13_watch`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `SS13_watch` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `ckey` varchar(32) NOT NULL, + `reason` text NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + -- Dump completed on 2013-03-24 18:02:35 \ No newline at end of file diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 9a083fdb5cc..0df0b4cf81d 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1076,6 +1076,13 @@ alert(usr,"This ban has already been lifted / does not exist.","Error","Ok") unjobbanpanel() + + + + + + + //Watchlist else if(href_list["watchlist"]) if(!check_rights(R_ADMIN)) return @@ -1093,23 +1100,45 @@ var/DBQuery/query = dbcon.NewQuery("SELECT ckey FROM [format_table_name("watch")] WHERE (ckey = '[sql_ckey]')") query.Execute() if(query.NextRow()) + switch(alert(usr, "Ckey already flagged", "[sql_ckey] is already on the watchlist, do you want to:", "Remove", "Edit reason", "Cancel")) + if("Cancel") + return + if("Remove") + var/DBQuery/query_watchdel = dbcon.NewQuery("DELETE FROM [format_table_name("watch")] WHERE ckey = '[sql_ckey]'") + if(!query_watchdel.Execute()) + var/err = query_watchdel.ErrorMsg() + log_game("SQL ERROR during removing watch entry. Error : \[[err]\]\n") + return + log_admin("[key_name_admin(usr)] has removed [key_name_admin(M)] from the watchlist") + message_admins("[key_name_admin(usr)] has removed [key_name_admin(M)] from the watchlist", 1) + if("Edit Reason") + var/DBQuery/query_reason = dbcon.NewQuery("SELECT ckey, reason FROM [format_table_name("watch")] WHERE (ckey = '[sql_ckey]')") + query_reason.Execute() + if(query_reason.NextRow()) + var/watch_reason = query_reason.item[3] + var/new_reason = input("Insert new reason", "New Reason", "[watch_reason]", null) as null|text + new_reason = sanitizeSQL(new_reason) + if(!new_reason) + return + var/DBQuery/update_query = dbcon.NewQuery("UPDATE [format_table_name("watch")] SET reason = '[new_reason]', edits = CONCAT(edits,'- [usr] changed watchlist reason from \\\"[watch_reason]\\\" to \\\"[new_reason]\\\"
') WHERE (ckey = '[sql_ckey]')") + if(!update_query.Execute()) + var/err = update_query.ErrorMsg() + log_game("SQL ERROR during edit watch entry reason. Error : \[[err]\]\n") + return + log_admin("[key_name_admin(usr)] has edited [sql_ckey]'s reason from [watch_reason] to [new_reason]",1) + message_admins("[key_name_admin(usr)] has edited [sql_ckey]'s reason from [watch_reason] to [new_reason]",1) + else var/reason = input(usr,"Reason?","reason","Metagaming") as text|null if(!reason) return - log_admin("[key_name_admin(usr)] has added [key_name_admin(M)] to the watchlist - Reason: [reason]") - message_admins("[key_name_admin(usr)] has added [key_name_admin(M)] to the watchlist - Reason: [reason]", 1) reason = sanitizeSQL(reason) var/DBQuery/query_watchadd = dbcon.NewQuery("INSERT INTO [format_table_name("watch")] (ckey, reason) VALUES ('[sql_ckey]', '[reason]')") if(!query_watchadd.Execute()) var/err = query_watchadd.ErrorMsg() log_game("SQL ERROR during adding new watch entry. Error : \[[err]\]\n") - else - log_admin("[key_name_admin(usr)] has removed [key_name_admin(M)] from the watchlist") - message_admins("[key_name_admin(usr)] has removed [key_name_admin(M)] from the watchlist", 1) - var/DBQuery/query_watchdel = dbcon.NewQuery("DELETE FROM [format_table_name("watch")] WHERE ckey = '[sql_ckey]'") - if(!query_watchdel.Execute()) - var/err = query_watchdel.ErrorMsg() - log_game("SQL ERROR during removing watch entry. Error : \[[err]\]\n") + return + log_admin("[key_name_admin(usr)] has added [key_name_admin(M)] to the watchlist - Reason: [reason]") + message_admins("[key_name_admin(usr)] has added [key_name_admin(M)] to the watchlist - Reason: [reason]", 1) else if(href_list["mute"]) if(!check_rights(R_ADMIN)) return diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index d863edeacfb..46881e3cb1f 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -229,11 +229,11 @@ var/next_external_rsc = 0 while (query_cid.NextRow()) related_accounts_cid += "[query_cid.item[1]], " - var/DBQuery/query = dbcon.NewQuery("SELECT ckey, reason FROM [format_table_name("watch")] WHERE (ckey = '[sql_ckey]')") - query.Execute() - if(query.NextRow()) - message_admins("Notice: [key_name_admin(src)] is flagged for watching and has just connected - Reason: [query_cid.item[2]]") - send2irc_adminless_only("Watchlist", "[key_name_admin(src)] is flagged for watching and has just connected - Reason: [query_cid.item[2]]") + var/DBQuery/query_watch = dbcon.NewQuery("SELECT ckey, reason FROM [format_table_name("watch")] WHERE (ckey = '[sql_ckey]')") + query_watch.Execute() + if(query_watch.NextRow()) + message_admins("Notice: [key_name_admin(src)] is flagged for watching and has just connected - Reason: [query_watch.item[2]]") + send2irc_adminless_only("Watchlist", "[key_name_admin(src)] is flagged for watching and has just connected - Reason: [query_watch.item[2]]") var/admin_rank = "Player" if (src.holder && src.holder.rank) From 585535dbe2518b23efbe3c675dc95e4e982ce365 Mon Sep 17 00:00:00 2001 From: Jordie0608 Date: Tue, 19 May 2015 05:18:14 +1000 Subject: [PATCH 015/143] case error --- code/modules/admin/topic.dm | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 0df0b4cf81d..866f6a2c350 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1076,13 +1076,6 @@ alert(usr,"This ban has already been lifted / does not exist.","Error","Ok") unjobbanpanel() - - - - - - - //Watchlist else if(href_list["watchlist"]) if(!check_rights(R_ADMIN)) return @@ -1111,7 +1104,7 @@ return log_admin("[key_name_admin(usr)] has removed [key_name_admin(M)] from the watchlist") message_admins("[key_name_admin(usr)] has removed [key_name_admin(M)] from the watchlist", 1) - if("Edit Reason") + if("Edit reason") var/DBQuery/query_reason = dbcon.NewQuery("SELECT ckey, reason FROM [format_table_name("watch")] WHERE (ckey = '[sql_ckey]')") query_reason.Execute() if(query_reason.NextRow()) From 13e23577e2b1ca2541c9f7c0c6d1c354dd8b2cd6 Mon Sep 17 00:00:00 2001 From: Iamgoofball Date: Sun, 7 Jun 2015 04:51:10 -0700 Subject: [PATCH 016/143] Adds trekchems to the Medibots. --- code/game/machinery/bots/medbot.dm | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/code/game/machinery/bots/medbot.dm b/code/game/machinery/bots/medbot.dm index 3040c71c68f..d49b84bcc26 100644 --- a/code/game/machinery/bots/medbot.dm +++ b/code/game/machinery/bots/medbot.dm @@ -32,10 +32,10 @@ var/stationary_mode = 0 //If enabled, the Medibot will not move automatically. radio_frequency = MED_FREQ //Medical frequency //Setting which reagents to use to treat what by default. By id. - var/treatment_brute = "salglu_solution" - var/treatment_oxy = "salbutamol" - var/treatment_fire = "salglu_solution" - var/treatment_tox = "charcoal" + var/treatment_brute = "bicaridine" + var/treatment_oxy = "dexalin" + var/treatment_fire = "kelotane" + var/treatment_tox = "antitoxin" var/treatment_virus = "spaceacillin" var/treat_virus = 1 //If on, the bot will attempt to treat viral infections, curing them if possible. var/shut_up = 0 //self explanatory :) @@ -46,10 +46,10 @@ name = "\improper Mysterious Medibot" desc = "International Medibot of mystery." skin = "bezerk" - treatment_oxy = "omnizine" - treatment_brute = "omnizine" - treatment_fire = "omnizine" - treatment_tox = "omnizine" + treatment_oxy = "tricordrazine" + treatment_brute = "tricordrazine" + treatment_fire = "tricordrazine" + treatment_tox = "tricordrazine" /obj/machinery/bot/medbot/derelict name = "\improper Old Medibot" From db4b36e00a19e5f27b5cbd4195f192669eb5d512 Mon Sep 17 00:00:00 2001 From: AnturK Date: Sun, 7 Jun 2015 17:09:32 +0200 Subject: [PATCH 017/143] Makes viruses varedit friendly --- code/datums/diseases/_MobProcs.dm | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/code/datums/diseases/_MobProcs.dm b/code/datums/diseases/_MobProcs.dm index 952c22982ef..3b23d38e811 100644 --- a/code/datums/diseases/_MobProcs.dm +++ b/code/datums/diseases/_MobProcs.dm @@ -38,7 +38,25 @@ DD.holder = src if(DD.disease_flags & CAN_CARRY && prob(5)) DD.carrier = 1 + + //Copy properties over. This is so edited diseases persist. + DD.visibility_flags = D.visibility_flags + DD.disease_flags = D.disease_flags + DD.spread_flags = D.spread_flags DD.strain_data = D.strain_data.Copy() + DD.form = D.form + DD.name = D.name + DD.desc = D.desc + DD.agent = D.agent + DD.spread_text = D.spread_text + DD.longevity= D.longevity + DD.cure_text = D.cure_text + DD.cures = D.cures + DD.cure_chance = D.cure_chance + DD.infectivity = D.infectivity + DD.permeability_mod = D.permeability_mod + DD.stage_prob = D.stage_prob + DD.affected_mob.med_hud_set_status() From 53d5ff4f39a837125b98552e10ee633e761bcbb6 Mon Sep 17 00:00:00 2001 From: spasticVerbalizer Date: Sun, 7 Jun 2015 17:20:38 +0200 Subject: [PATCH 018/143] Prevents 'unable to speak' spam on empty message by moving .silent check (chem mute) to can_speak_vocal --- code/modules/mob/living/carbon/say.dm | 2 +- code/modules/mob/living/say.dm | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/code/modules/mob/living/carbon/say.dm b/code/modules/mob/living/carbon/say.dm index 9f218605c01..0d8a39ee9ef 100644 --- a/code/modules/mob/living/carbon/say.dm +++ b/code/modules/mob/living/carbon/say.dm @@ -5,7 +5,7 @@ return message -/mob/living/carbon/can_speak_basic(message) +/mob/living/carbon/can_speak_vocal(message) if(silent) return 0 return ..() diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index def924f9943..f3fbffe7d22 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -70,7 +70,6 @@ var/list/department_radio_keys = list( return if(!can_speak_basic(message)) //Stat is seperate so I can handle whispers properly. - src << "You find yourself unable to speak!" return var/message_mode = get_message_mode(message) @@ -86,7 +85,7 @@ var/list/department_radio_keys = list( return if(!can_speak_vocal(message)) - src << "You find yourself unable to speak!" //repetition intended + src << "You find yourself unable to speak!" return message = treat_message(message) From 7c1498dd6cfc76940e88da2cb4da18b7abfab04e Mon Sep 17 00:00:00 2001 From: spasticVerbalizer Date: Mon, 8 Jun 2015 20:43:56 +0200 Subject: [PATCH 019/143] Removed empty message check from can_speak --- code/game/objects/items/devices/megaphone.dm | 2 +- code/modules/mob/living/carbon/human/whisper.dm | 2 ++ code/modules/mob/living/say.dm | 3 --- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/code/game/objects/items/devices/megaphone.dm b/code/game/objects/items/devices/megaphone.dm index 3b307fc00cf..5733659855e 100644 --- a/code/game/objects/items/devices/megaphone.dm +++ b/code/game/objects/items/devices/megaphone.dm @@ -27,7 +27,7 @@ return var/message = copytext(sanitize(input(user, "Shout a message?", "Megaphone", null) as text),1,MAX_MESSAGE_LEN) - if(!message) + if(!message || message == "") return message = capitalize(message) diff --git a/code/modules/mob/living/carbon/human/whisper.dm b/code/modules/mob/living/carbon/human/whisper.dm index 23bb31ead56..45cccc91331 100644 --- a/code/modules/mob/living/carbon/human/whisper.dm +++ b/code/modules/mob/living/carbon/human/whisper.dm @@ -1,6 +1,8 @@ /mob/living/carbon/human/whisper(message as text) if(!IsVocal()) return + if(!message || message == "") + return if(say_disabled) //This is here to try to identify lag problems usr << "Speech is currently admin-disabled." diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index f3fbffe7d22..967ed133fc6 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -162,9 +162,6 @@ var/list/department_radio_keys = list( return 1 /mob/living/proc/can_speak_basic(message) //Check BEFORE handling of xeno and ling channels - if(!message || message == "") - return 0 - if(client) if(client.prefs.muted & MUTE_IC) src << "You cannot speak in IC (muted)." From 1b364c0e820ddf4be31aba9b5ad3045f96252763 Mon Sep 17 00:00:00 2001 From: NullQuery Date: Mon, 8 Jun 2015 22:13:25 +0200 Subject: [PATCH 020/143] HTML interface module + playing cards (ported from Baystation12 with modifications) using the new module --- code/game/machinery/machinery.dm | 14 +- code/modules/client/client defines.dm | 3 + code/modules/client/client procs.dm | 8 + code/modules/games/cards.dm | 252 ++++++++++++++ code/modules/games/playing_cards.dmi | Bin 0 -> 611 bytes code/modules/html_interface/bootstrap.min.css | 10 + code/modules/html_interface/bootstrap.min.js | 11 + code/modules/html_interface/cards/cards.css | 112 ++++++ code/modules/html_interface/cards/cards.dm | 13 + .../modules/html_interface/html_interface.css | 11 + code/modules/html_interface/html_interface.dm | 321 ++++++++++++++++++ .../html_interface/html_interface.html | 16 + code/modules/html_interface/html_interface.js | 45 +++ .../html_interface/html_interface_client.dm | 43 +++ code/modules/html_interface/jquery.min.js | 4 + .../html_interface/nanotrasen/nanotrasen.css | 315 +++++++++++++++++ .../html_interface/nanotrasen/nanotrasen.dm | 175 ++++++++++ .../html_interface/nanotrasen/uiBg.png | Bin 0 -> 257 bytes .../html_interface/nanotrasen/uiBgcenter.png | Bin 0 -> 2843 bytes .../html_interface/nanotrasen/uiBgtop.png | Bin 0 -> 2767 bytes .../html_interface/nanotrasen/uiEyeGreen.png | Bin 0 -> 912 bytes .../html_interface/nanotrasen/uiEyeOrange.png | Bin 0 -> 985 bytes .../html_interface/nanotrasen/uiEyeRed.png | Bin 0 -> 946 bytes .../nanotrasen/uiTitleFluff.png | Bin 0 -> 946 bytes tgstation.dme | 5 + 25 files changed, 1357 insertions(+), 1 deletion(-) create mode 100644 code/modules/games/cards.dm create mode 100644 code/modules/games/playing_cards.dmi create mode 100644 code/modules/html_interface/bootstrap.min.css create mode 100644 code/modules/html_interface/bootstrap.min.js create mode 100644 code/modules/html_interface/cards/cards.css create mode 100644 code/modules/html_interface/cards/cards.dm create mode 100644 code/modules/html_interface/html_interface.css create mode 100644 code/modules/html_interface/html_interface.dm create mode 100644 code/modules/html_interface/html_interface.html create mode 100644 code/modules/html_interface/html_interface.js create mode 100644 code/modules/html_interface/html_interface_client.dm create mode 100644 code/modules/html_interface/jquery.min.js create mode 100644 code/modules/html_interface/nanotrasen/nanotrasen.css create mode 100644 code/modules/html_interface/nanotrasen/nanotrasen.dm create mode 100644 code/modules/html_interface/nanotrasen/uiBg.png create mode 100644 code/modules/html_interface/nanotrasen/uiBgcenter.png create mode 100644 code/modules/html_interface/nanotrasen/uiBgtop.png create mode 100644 code/modules/html_interface/nanotrasen/uiEyeGreen.png create mode 100644 code/modules/html_interface/nanotrasen/uiEyeOrange.png create mode 100644 code/modules/html_interface/nanotrasen/uiEyeRed.png create mode 100644 code/modules/html_interface/nanotrasen/uiTitleFluff.png diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index c616c2d6301..10e23cd43d5 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -411,4 +411,16 @@ Class Procs: return /obj/machinery/allow_drop() - return 0 \ No newline at end of file + return 0 + +// Hook for html_interface module to prevent updates to clients who don't have this as their active machine. +/obj/machinery/proc/hiIsValidClient(datum/html_interface_client/hclient) + if (hclient.client.mob && hclient.client.mob.stat == 0) + if (isAI(hclient.client.mob)) return TRUE + else return hclient.client.mob.machine == src && src.Adjacent(hclient.client.mob) + else + return FALSE + +// Hook for html_interface module to unset the active machine when the window is closed by the player. +/obj/machinery/proc/hiOnHide(datum/html_interface_client/hclient) + if (hclient.client.mob && hclient.client.mob.machine == src) hclient.client.mob.unset_machine() \ No newline at end of file diff --git a/code/modules/client/client defines.dm b/code/modules/client/client defines.dm index 7467f12ad97..06d2c036020 100644 --- a/code/modules/client/client defines.dm +++ b/code/modules/client/client defines.dm @@ -39,3 +39,6 @@ var/related_accounts_cid = "Requires database" //So admins know why it isn't working - Used to determine what other accounts previously logged in from this computer id preload_rsc = PRELOAD_RSC + + // Used by html_interface module. + var/hi_last_pos \ No newline at end of file diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index 2fc40207bab..59b76f74982 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -264,6 +264,14 @@ var/next_external_rsc = 0 //send resources to the client. It's here in its own proc so we can move it around easiliy if need be /client/proc/send_resources() + + spawn + // Preload the HTML interface. This needs to be done due to BYOND bug http://www.byond.com/forum/?post=1487244 + var/datum/html_interface/hi + for (var/type in typesof(/datum/html_interface)) + hi = new type(null) + hi.sendResources(src) + //Send nanoui files to client SSnano.send_resources(src) getFiles( diff --git a/code/modules/games/cards.dm b/code/modules/games/cards.dm new file mode 100644 index 00000000000..a39c6f54dc0 --- /dev/null +++ b/code/modules/games/cards.dm @@ -0,0 +1,252 @@ +/datum/playingcard + var/name = "playing card" + var/card_icon = "card_back" + var/suit + var/number + +/* Deck */ + +/obj/item/weapon/deck + name = "deck of cards" + desc = "A simple deck of playing cards." + icon = 'playing_cards.dmi' + icon_state = "deck" + w_class = 2 + + var/list/cards = list() + +/obj/item/weapon/deck/New() + . = ..() + + var/color + var/datum/playingcard/card + + for (var/suit in list("spades", "clubs", "diamonds", "hearts")) + if (suit == "spades" || suit == "clubs") color = "black_" + else color = "red_" + + for (var/number in list("ace", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten")) + card = new() + card.name = "[number] of [suit]" + card.card_icon = "[color]num" + card.suit = suit + card.number = number + + src.cards.Add(card) + + for (var/number in list("jack", "queen", "king")) + card = new() + card.name = "[number] of [suit]" + card.card_icon = "[color]col" + card.suit = suit + card.number = number + + src.cards.Add(card) + + for (var/i = 0, i < 2, i++) + card = new() + card.name = "joker" + card.card_icon = "joker" + card.suit = "joker" + card.number = "" + + src.cards.Add(card) + +/obj/item/weapon/deck/attackby(obj/O as obj, mob/user as mob) + if (istype(O,/obj/item/weapon/hand)) + var/obj/item/weapon/hand/H = O + + for (var/datum/playingcard/P in H.cards) src.cards.Add(P) + + qdel (O) + + user.show_message("You place your cards on the bottom of the deck.") + else return ..() + +/obj/item/weapon/deck/attack_self(var/mob/user as mob) + var/list/newcards = list() + var/datum/playingcard/card + + while (cards.len) + card = pick(cards) + newcards.Add(card) + src.cards.Remove(card) + + src.cards = newcards + + user.visible_message("\The [user] shuffles [src].") + +/obj/item/weapon/deck/afterattack(atom/A as mob|obj|turf|area, mob/living/user as mob|obj, flag, params) + if(flag) return //It's adjacent, is the user, or is on the user's person + + if (istype(A, /mob/living)) src.dealTo(A, user) + else return ..() + +/obj/item/weapon/deck/attack(mob/living/M as mob, mob/living/user as mob, def_zone) + if (istype(M)) src.dealTo(M, user) + else return ..() + +/obj/item/weapon/deck/proc/dealTo(mob/living/target, mob/living/source) + if (!src.cards.len) + source.show_message("There are no cards in the deck.") + return + + var/datum/playingcard/card = src.cards[1] + + src.cards.Remove(card) + + var/obj/item/weapon/hand/H = new(get_turf(src)) + + H.concealed = 1 + H.update_conceal() + + H.cards.Add(card) + H.update_icon() + + source.visible_message("\The [source] deals a card to \the [target].") + H.throw_at(get_step(target, target.dir), 10, 1, H) + +/* Hand */ + +/obj/item/weapon/hand + name = "hand of cards" + desc = "Some playing cards." + icon = 'playing_cards.dmi' + icon_state = "empty" + w_class = 1 + + var/concealed = 0 + var/list/cards = list() + var/datum/html_interface/hi + +/obj/item/weapon/hand/New(loc) + . = ..() + + src.hi = new/datum/html_interface/cards(src, "Your hand", 540, 302) + src.update_conceal() + +/obj/item/weapon/hand/Destroy() + if (src.hi) qdel(src.hi) + + return ..() + +/obj/item/weapon/hand/attackby(obj/O as obj, mob/user as mob) + if(istype(O,/obj/item/weapon/hand)) + var/obj/item/weapon/hand/H = O + + for(var/datum/playingcard/P in src.cards) H.cards.Add(P) + + H.update_icon() + + qdel(src) + else return ..() + +/obj/item/weapon/hand/verb/discard(datum/playingcard/card in cards) + set category = "Object" + set name = "Discard" + set desc = "Place a card from your hand in front of you." + + if (!card) return + + var/obj/item/weapon/hand/H = new(src.loc) + + H.concealed = 0 + H.update_conceal() + + H.cards.Add(card) + src.cards.Remove(card) + + H.update_icon() + + ASSERT(H) + + usr.visible_message("\The [usr] plays \the [card.name].") + H.loc = get_step(usr,usr.dir) + + src.update_icon() + +/obj/item/weapon/hand/verb/toggle_conceal() + set category = "Object" + set name = "Toggle conceal" + set desc = "Toggle concealment of your hand" + + src.concealed = !src.concealed + + src.update_conceal() + + usr.visible_message("\The [usr] [concealed ? "conceals" : "reveals"] their hand.") + + src.update_icon() + +/obj/item/weapon/hand/attack_self(var/mob/user as mob) + src.hi.show(user) + +/obj/item/weapon/hand/examine() + . = ..() + + if((!concealed || src.loc == usr) && cards.len) + usr.show_message("It contains: ") + + for (var/datum/playingcard/card in cards) + usr.show_message("The [card.name].") + +/obj/item/weapon/hand/proc/update_conceal() + if (src.concealed) src.hi.updateContent("headbar", "You are currently concealing your hand. Reveal your hand.") + else src.hi.updateContent("headbar", "You are currently revealing your hand. Conceal your hand.") + +/obj/item/weapon/hand/update_icon() + if (!cards.len) qdel (src) + else + if(cards.len > 1) + name = "hand of cards" + desc = "Some playing cards." + else + name = "a playing card" + desc = "A playing card." + + overlays.len = 0 + + if (cards.len == 1) + var/datum/playingcard/P = cards[1] + var/image/I = new(src.icon, (concealed ? "card_back" : "[P.card_icon]") ) + + I.pixel_x = I.pixel_x + (-5 + rand(10)) + I.pixel_y = I.pixel_y + (-5 + rand(10)) + + overlays.Add(I) + else + var/origin = -12 + var/offset = round(32 / cards.len) + + var/i = 0 + var/image/I + + for(var/datum/playingcard/P in cards) + I = new(src.icon, (concealed ? "card_back" : "[P.card_icon]") ) + I.pixel_x = origin + (offset * i) + + overlays.Add(I) + + i = i + 1 + + var/html = "" + + for(var/datum/playingcard/card in cards) + html = html + "" + + src.hi.updateContent("hand", html) + +/obj/item/weapon/hand/Topic(href, href_list[], datum/html_interface_client/hclient) + if (istype(hclient)) + switch (href_list["action"]) + if ("play_card") + var/datum/playingcard/card = locate(href_list["card"]) + + if (card in src.cards) + src.discard(card) + if ("toggle_conceal") + src.toggle_conceal() + +// Hook for html_interface module to prevent updates to clients who don't have this in their inventory. +/obj/item/weapon/hand/proc/hiIsValidClient(datum/html_interface_client/hclient) + return (hclient.client.mob && hclient.client.mob.stat == 0 && (src in hclient.client.mob.contents)) diff --git a/code/modules/games/playing_cards.dmi b/code/modules/games/playing_cards.dmi new file mode 100644 index 0000000000000000000000000000000000000000..47b5b3e745ad0c9f3c572e97fb7fc53888af19dd GIT binary patch literal 611 zcmV-p0-XJcP)P)t-sz`(#< zTwFRjI;N(kmX?-GOiaec#zsa)SWrEKVV=-0C=2JR&a84_w-Y6@%7{?OD!tS%+FJ>RWQ*r;NmRLOex6#a*U0*I5Sc+(=$pS zoZ^zil2jm5DJ3;ITZxM^C9|j)$Tj5ROe;#vO@*-GijotHQsR>miBOr9pPgDnP*qY6 z(5(36{2YQRi&9gFR+m?rOQg-js7%c*D5=DyN?F0x&jlRb0Fe=D(3p_hD*yliAxT6* zRA_V^OR(++LYx0y+b=JX_cy>8trfF{G`0ssKNh`F*+XDi*; z`K!Jk2FHc=R5G>pOKJm-fX@F@s_Prc!m zVDtQ#vnU`1n_pdg)!!%X6jVV-qabjdi>}rWy.caret,.dropup>.btn>.caret{border-top-color:#000 !important}.label{border:1px solid #000}.table{border-collapse:collapse !important}.table-bordered th,.table-bordered td{border:1px solid #ddd !important}}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;width:100% \9;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;width:100% \9;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:normal;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:240px){.lead{font-size:21px}}small,.small{font-size:85%}cite{font-style:normal}mark,.mark{background-color:#fcf8e3;padding:.2em}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#428bca}a.text-primary:hover{color:#3071a9}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#428bca}a.bg-primary:hover{background-color:#3071a9}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:bold}dd{margin-left:0}@media (min-width:240px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}blockquote:before,blockquote:after{content:""}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25)}kbd kbd{padding:0;font-size:100%;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;word-break:break-all;word-wrap:break-word;color:#333;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}@media (min-width:240px){.container{width:750px}}@media (min-width:600px){.container{width:970px}}@media (min-width:960px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.row{margin-left:-15px;margin-right:-15px}.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:240px){.col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:600px){.col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:960px){.col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f5f5f5}table col[class*="col-"]{position:static;float:none;display:table-column}table td[class*="col-"],table th[class*="col-"]{position:static;float:none;display:table-cell}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}@media screen and (max-width:239px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;overflow-x:auto;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd;-webkit-overflow-scrolling:touch}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:bold}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="file"]{display:block}input[type="range"]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6)}.form-control::-moz-placeholder{color:#777;opacity:1}.form-control:-ms-input-placeholder{color:#777}.form-control::-webkit-input-placeholder{color:#777}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type="search"]{-webkit-appearance:none}input[type="date"],input[type="time"],input[type="datetime-local"],input[type="month"]{line-height:34px;line-height:1.42857143 \0}input[type="date"].input-sm,input[type="time"].input-sm,input[type="datetime-local"].input-sm,input[type="month"].input-sm{line-height:30px}input[type="date"].input-lg,input[type="time"].input-lg,input[type="datetime-local"].input-lg,input[type="month"].input-lg{line-height:46px}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;min-height:20px;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{padding-left:20px;margin-bottom:0;font-weight:normal;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{position:absolute;margin-left:-20px;margin-top:4px \9}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:normal;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"].disabled,input[type="checkbox"].disabled,fieldset[disabled] input[type="radio"],fieldset[disabled] input[type="checkbox"]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-left:0;padding-right:0}.input-sm,.form-horizontal .form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm,select[multiple].input-sm{height:auto}.input-lg,.form-horizontal .form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg{height:46px;line-height:46px}textarea.input-lg,select[multiple].input-lg{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:25px;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.has-error .form-control-feedback{color:#a94442}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:240px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}@media (min-width:240px){.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:7px}}.form-horizontal .has-feedback .form-control-feedback{top:0;right:15px}@media (min-width:240px){.form-horizontal .form-group-lg .control-label{padding-top:14.3px}}@media (min-width:240px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;margin-bottom:0;font-weight:normal;text-align:center;vertical-align:middle;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn:active:focus,.btn.active:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus{color:#333;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;pointer-events:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#3071a9;border-color:#285e8e}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#428bca;border-color:#357ebd}.btn-primary .badge{color:#428bca;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{color:#428bca;font-weight:normal;cursor:pointer;border-radius:0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#428bca}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#777}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:240px){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.btn:focus{outline:0}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-bottom-left-radius:4px;border-top-right-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle="buttons"]>.btn>input[type="radio"],[data-toggle="buttons"]>.btn>input[type="checkbox"]{position:absolute;z-index:-1;opacity:0;filter:alpha(opacity=0)}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*="col-"]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:normal;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:240px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:240px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#428bca}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:240px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:240px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:240px){.navbar{border-radius:4px}}@media (min-width:240px){.navbar-header{float:left}}.navbar-collapse{overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:240px){.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block !important;height:auto !important;padding-bottom:0;overflow:visible !important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-left:0;padding-right:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-width:180px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:240px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:240px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}@media (min-width:240px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:15px 15px;font-size:18px;line-height:20px;height:50px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media (min-width:240px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:240px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:239px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:240px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}.navbar-nav.navbar-right:last-child{margin-right:-15px}}@media (min-width:240px){.navbar-left{float:left !important}.navbar-right{float:right !important}}.navbar-form{margin-left:-15px;margin-right:-15px;padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);margin-top:8px;margin-bottom:8px}@media (min-width:240px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:239px){.navbar-form .form-group{margin-bottom:5px}}@media (min-width:240px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}.navbar-form.navbar-right:last-child{margin-right:-15px}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:240px){.navbar-text{float:left;margin-left:15px;margin-right:15px}.navbar-text.navbar-right:last-child{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{background-color:#e7e7e7;color:#555}@media (max-width:239px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#333}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#777}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#777}.navbar-inverse .navbar-nav>li>a{color:#777}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{background-color:#080808;color:#fff}@media (max-width:239px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#777}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#777}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:"/\00a0";padding:0 5px;color:#ccc}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;line-height:1.42857143;text-decoration:none;color:#428bca;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{color:#2a6496;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca;cursor:default}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#777;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pager{padding-left:0;margin:20px 0;list-style:none;text-align:center}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#777;background-color:#fff;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:bold;color:#fff;line-height:1;vertical-align:baseline;white-space:nowrap;text-align:center;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:240px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-left:60px;padding-right:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-left:auto;margin-right:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#428bca}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:bold}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float:left;width:0%;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#428bca;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar[aria-valuenow="1"],.progress-bar[aria-valuenow="2"]{min-width:30px}.progress-bar[aria-valuenow="0"]{color:#777;min-width:30px;background-color:transparent;background-image:none;box-shadow:none}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.media,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{text-decoration:none;color:#555;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{background-color:#eee;color:#777}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#e1edf7}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:3px;border-top-left-radius:3px}.panel>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#428bca}.panel-primary>.panel-heading .badge{color:#428bca;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#428bca}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object{position:absolute;top:0;left:0;bottom:0;height:100%;width:100%;border:0}.embed-responsive.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:bold;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{display:none;overflow:hidden;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate3d(0, -25%, 0);transform:translate3d(0, -25%, 0);-webkit-transition:-webkit-transform 0.3s ease-out;-moz-transition:-moz-transform 0.3s ease-out;-o-transition:-o-transform 0.3s ease-out;transition:transform 0.3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);background-clip:padding-box;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5;min-height:16.42857143px}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:240px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)}.modal-sm{width:300px}}@media (min-width:600px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;visibility:visible;font-size:12px;line-height:1.4;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;right:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;text-align:left;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);white-space:normal}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,0.25)}.popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,0.25)}.popover.left>.arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px}.carousel{position:relative}.carousel-inner{position:relative;overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:.5;filter:alpha(opacity=50);font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-control.left{background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-image:linear-gradient(to right, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-image:linear-gradient(to right, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:hover,.carousel-control:focus{outline:0;color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0)}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:240px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{content:" ";display:table}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right !important}.pull-left{float:left !important}.hide{display:none !important}.show{display:block !important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none !important;visibility:hidden !important}.affix{position:fixed;-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none !important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none !important}@media (max-width:239px){.visible-xs{display:block !important}table.visible-xs{display:table}tr.visible-xs{display:table-row !important}th.visible-xs,td.visible-xs{display:table-cell !important}}@media (max-width:239px){.visible-xs-block{display:block !important}}@media (max-width:239px){.visible-xs-inline{display:inline !important}}@media (max-width:239px){.visible-xs-inline-block{display:inline-block !important}}@media (min-width:240px) and (max-width:599px){.visible-sm{display:block !important}table.visible-sm{display:table}tr.visible-sm{display:table-row !important}th.visible-sm,td.visible-sm{display:table-cell !important}}@media (min-width:240px) and (max-width:599px){.visible-sm-block{display:block !important}}@media (min-width:240px) and (max-width:599px){.visible-sm-inline{display:inline !important}}@media (min-width:240px) and (max-width:599px){.visible-sm-inline-block{display:inline-block !important}}@media (min-width:600px) and (max-width:959px){.visible-md{display:block !important}table.visible-md{display:table}tr.visible-md{display:table-row !important}th.visible-md,td.visible-md{display:table-cell !important}}@media (min-width:600px) and (max-width:959px){.visible-md-block{display:block !important}}@media (min-width:600px) and (max-width:959px){.visible-md-inline{display:inline !important}}@media (min-width:600px) and (max-width:959px){.visible-md-inline-block{display:inline-block !important}}@media (min-width:960px){.visible-lg{display:block !important}table.visible-lg{display:table}tr.visible-lg{display:table-row !important}th.visible-lg,td.visible-lg{display:table-cell !important}}@media (min-width:960px){.visible-lg-block{display:block !important}}@media (min-width:960px){.visible-lg-inline{display:inline !important}}@media (min-width:960px){.visible-lg-inline-block{display:inline-block !important}}@media (max-width:239px){.hidden-xs{display:none !important}}@media (min-width:240px) and (max-width:599px){.hidden-sm{display:none !important}}@media (min-width:600px) and (max-width:959px){.hidden-md{display:none !important}}@media (min-width:960px){.hidden-lg{display:none !important}}.visible-print{display:none !important}@media print{.visible-print{display:block !important}table.visible-print{display:table}tr.visible-print{display:table-row !important}th.visible-print,td.visible-print{display:table-cell !important}}.visible-print-block{display:none !important}@media print{.visible-print-block{display:block !important}}.visible-print-inline{display:none !important}@media print{.visible-print-inline{display:inline !important}}.visible-print-inline-block{display:none !important}@media print{.visible-print-inline-block{display:inline-block !important}}@media print{.hidden-print{display:none !important}} \ No newline at end of file diff --git a/code/modules/html_interface/bootstrap.min.js b/code/modules/html_interface/bootstrap.min.js new file mode 100644 index 00000000000..e33d8a53249 --- /dev/null +++ b/code/modules/html_interface/bootstrap.min.js @@ -0,0 +1,11 @@ +/*! + * Bootstrap v3.2.0 (http://getbootstrap.com) + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +/*! + * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=d0f6f16a67c7502ee009) + * Config saved to config.json and https://gist.github.com/d0f6f16a67c7502ee009 + */ +if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(t){"use strict";function e(e){return this.each(function(){var i=t(this),s=i.data("bs.alert");s||i.data("bs.alert",s=new o(this)),"string"==typeof e&&s[e].call(i)})}var i='[data-dismiss="alert"]',o=function(e){t(e).on("click",i,this.close)};o.VERSION="3.2.0",o.prototype.close=function(e){function i(){n.detach().trigger("closed.bs.alert").remove()}var o=t(this),s=o.attr("data-target");s||(s=o.attr("href"),s=s&&s.replace(/.*(?=#[^\s]*$)/,""));var n=t(s);e&&e.preventDefault(),n.length||(n=o.hasClass("alert")?o:o.parent()),n.trigger(e=t.Event("close.bs.alert")),e.isDefaultPrevented()||(n.removeClass("in"),t.support.transition&&n.hasClass("fade")?n.one("bsTransitionEnd",i).emulateTransitionEnd(150):i())};var s=t.fn.alert;t.fn.alert=e,t.fn.alert.Constructor=o,t.fn.alert.noConflict=function(){return t.fn.alert=s,this},t(document).on("click.bs.alert.data-api",i,o.prototype.close)}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var o=t(this),s=o.data("bs.button"),n="object"==typeof e&&e;s||o.data("bs.button",s=new i(this,n)),"toggle"==e?s.toggle():e&&s.setState(e)})}var i=function(e,o){this.$element=t(e),this.options=t.extend({},i.DEFAULTS,o),this.isLoading=!1};i.VERSION="3.2.0",i.DEFAULTS={loadingText:"loading..."},i.prototype.setState=function(e){var i="disabled",o=this.$element,s=o.is("input")?"val":"html",n=o.data();e+="Text",null==n.resetText&&o.data("resetText",o[s]()),o[s](null==n[e]?this.options[e]:n[e]),setTimeout(t.proxy(function(){"loadingText"==e?(this.isLoading=!0,o.addClass(i).attr(i,i)):this.isLoading&&(this.isLoading=!1,o.removeClass(i).removeAttr(i))},this),0)},i.prototype.toggle=function(){var t=!0,e=this.$element.closest('[data-toggle="buttons"]');if(e.length){var i=this.$element.find("input");"radio"==i.prop("type")&&(i.prop("checked")&&this.$element.hasClass("active")?t=!1:e.find(".active").removeClass("active")),t&&i.prop("checked",!this.$element.hasClass("active")).trigger("change")}t&&this.$element.toggleClass("active")};var o=t.fn.button;t.fn.button=e,t.fn.button.Constructor=i,t.fn.button.noConflict=function(){return t.fn.button=o,this},t(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(i){var o=t(i.target);o.hasClass("btn")||(o=o.closest(".btn")),e.call(o,"toggle"),i.preventDefault()})}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var o=t(this),s=o.data("bs.carousel"),n=t.extend({},i.DEFAULTS,o.data(),"object"==typeof e&&e),r="string"==typeof e?e:n.slide;s||o.data("bs.carousel",s=new i(this,n)),"number"==typeof e?s.to(e):r?s[r]():n.interval&&s.pause().cycle()})}var i=function(e,i){this.$element=t(e).on("keydown.bs.carousel",t.proxy(this.keydown,this)),this.$indicators=this.$element.find(".carousel-indicators"),this.options=i,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter.bs.carousel",t.proxy(this.pause,this)).on("mouseleave.bs.carousel",t.proxy(this.cycle,this))};i.VERSION="3.2.0",i.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},i.prototype.keydown=function(t){switch(t.which){case 37:this.prev();break;case 39:this.next();break;default:return}t.preventDefault()},i.prototype.cycle=function(e){return e||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(t.proxy(this.next,this),this.options.interval)),this},i.prototype.getItemIndex=function(t){return this.$items=t.parent().children(".item"),this.$items.index(t||this.$active)},i.prototype.to=function(e){var i=this,o=this.getItemIndex(this.$active=this.$element.find(".item.active"));return e>this.$items.length-1||0>e?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){i.to(e)}):o==e?this.pause().cycle():this.slide(e>o?"next":"prev",t(this.$items[e]))},i.prototype.pause=function(e){return e||(this.paused=!0),this.$element.find(".next, .prev").length&&t.support.transition&&(this.$element.trigger(t.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},i.prototype.next=function(){return this.sliding?void 0:this.slide("next")},i.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},i.prototype.slide=function(e,i){var o=this.$element.find(".item.active"),s=i||o[e](),n=this.interval,r="next"==e?"left":"right",a="next"==e?"first":"last",l=this;if(!s.length){if(!this.options.wrap)return;s=this.$element.find(".item")[a]()}if(s.hasClass("active"))return this.sliding=!1;var h=s[0],p=t.Event("slide.bs.carousel",{relatedTarget:h,direction:r});if(this.$element.trigger(p),!p.isDefaultPrevented()){if(this.sliding=!0,n&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var c=t(this.$indicators.children()[this.getItemIndex(s)]);c&&c.addClass("active")}var d=t.Event("slid.bs.carousel",{relatedTarget:h,direction:r});return t.support.transition&&this.$element.hasClass("slide")?(s.addClass(e),s[0].offsetWidth,o.addClass(r),s.addClass(r),o.one("bsTransitionEnd",function(){s.removeClass([e,r].join(" ")).addClass("active"),o.removeClass(["active",r].join(" ")),l.sliding=!1,setTimeout(function(){l.$element.trigger(d)},0)}).emulateTransitionEnd(1e3*o.css("transition-duration").slice(0,-1))):(o.removeClass("active"),s.addClass("active"),this.sliding=!1,this.$element.trigger(d)),n&&this.cycle(),this}};var o=t.fn.carousel;t.fn.carousel=e,t.fn.carousel.Constructor=i,t.fn.carousel.noConflict=function(){return t.fn.carousel=o,this},t(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(i){var o,s=t(this),n=t(s.attr("data-target")||(o=s.attr("href"))&&o.replace(/.*(?=#[^\s]+$)/,""));if(n.hasClass("carousel")){var r=t.extend({},n.data(),s.data()),a=s.attr("data-slide-to");a&&(r.interval=!1),e.call(n,r),a&&n.data("bs.carousel").to(a),i.preventDefault()}}),t(window).on("load",function(){t('[data-ride="carousel"]').each(function(){var i=t(this);e.call(i,i.data())})})}(jQuery),+function(t){"use strict";function e(e){e&&3===e.which||(t(s).remove(),t(n).each(function(){var o=i(t(this)),s={relatedTarget:this};o.hasClass("open")&&(o.trigger(e=t.Event("hide.bs.dropdown",s)),e.isDefaultPrevented()||o.removeClass("open").trigger("hidden.bs.dropdown",s))}))}function i(e){var i=e.attr("data-target");i||(i=e.attr("href"),i=i&&/#[A-Za-z]/.test(i)&&i.replace(/.*(?=#[^\s]*$)/,""));var o=i&&t(i);return o&&o.length?o:e.parent()}function o(e){return this.each(function(){var i=t(this),o=i.data("bs.dropdown");o||i.data("bs.dropdown",o=new r(this)),"string"==typeof e&&o[e].call(i)})}var s=".dropdown-backdrop",n='[data-toggle="dropdown"]',r=function(e){t(e).on("click.bs.dropdown",this.toggle)};r.VERSION="3.2.0",r.prototype.toggle=function(o){var s=t(this);if(!s.is(".disabled, :disabled")){var n=i(s),r=n.hasClass("open");if(e(),!r){"ontouchstart"in document.documentElement&&!n.closest(".navbar-nav").length&&t('