@@ -456,6 +456,13 @@ Implants;
|
||||
heads += player.mind
|
||||
return heads
|
||||
|
||||
/datum/game_mode/proc/get_extra_living_heads()
|
||||
var/list/heads = list()
|
||||
var/list/alt_positions = list("Warden", "Magistrate", "Blueshield", "Nanotrasen Representative")
|
||||
for(var/mob/living/carbon/human/player in mob_list)
|
||||
if(player.stat!=2 && player.mind && (player.mind.assigned_role in alt_positions))
|
||||
heads += player.mind
|
||||
return heads
|
||||
|
||||
////////////////////////////
|
||||
//Keeps track of all heads//
|
||||
@@ -467,6 +474,14 @@ Implants;
|
||||
heads += player.mind
|
||||
return heads
|
||||
|
||||
/datum/game_mode/proc/get_extra_heads()
|
||||
var/list/heads = list()
|
||||
var/list/alt_positions = list("Warden", "Magistrate", "Blueshield", "Nanotrasen Representative")
|
||||
for(var/mob/player in mob_list)
|
||||
if(player.mind && (player.mind.assigned_role in alt_positions))
|
||||
heads += player.mind
|
||||
return heads
|
||||
|
||||
/datum/game_mode/proc/check_antagonists_topic(href, href_list[])
|
||||
return 0
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
/datum/game_mode
|
||||
var/list/datum/mind/head_revolutionaries = list()
|
||||
var/list/datum/mind/revolutionaries = list()
|
||||
var/extra_heads = 0
|
||||
|
||||
/datum/game_mode/revolution
|
||||
name = "revolution"
|
||||
@@ -74,6 +75,9 @@
|
||||
|
||||
/datum/game_mode/revolution/post_setup()
|
||||
var/list/heads = get_living_heads()
|
||||
if(num_players() >= 40)
|
||||
heads += get_extra_living_heads()
|
||||
extra_heads = 1
|
||||
|
||||
for(var/datum/mind/rev_mind in head_revolutionaries)
|
||||
for(var/datum/mind/head_mind in heads)
|
||||
@@ -109,6 +113,9 @@
|
||||
|
||||
/datum/game_mode/proc/forge_revolutionary_objectives(var/datum/mind/rev_mind)
|
||||
var/list/heads = get_living_heads()
|
||||
if(num_players() >= 40)
|
||||
heads += get_extra_living_heads()
|
||||
extra_heads = 1
|
||||
for(var/datum/mind/head_mind in heads)
|
||||
var/datum/objective/mutiny/rev_obj = new
|
||||
rev_obj.owner = rev_mind
|
||||
@@ -409,6 +416,8 @@
|
||||
var/text = "<FONT size = 2><B>The heads of staff were:</B></FONT>"
|
||||
|
||||
var/list/heads = get_all_heads()
|
||||
if(extra_heads)
|
||||
heads += get_extra_heads()
|
||||
for(var/datum/mind/head in heads)
|
||||
var/target = (head in targets)
|
||||
if(target)
|
||||
@@ -435,4 +444,4 @@
|
||||
return istype(mind) && \
|
||||
istype(mind.current, /mob/living/carbon/human) && \
|
||||
!(mind.assigned_role in command_positions) && \
|
||||
!(mind.assigned_role in list("Security Officer", "Detective", "Warden"))
|
||||
!(mind.assigned_role in list("Security Officer", "Detective", "Warden", "Nanotrasen Representative"))
|
||||
|
||||
@@ -529,6 +529,8 @@ update_flag
|
||||
..()
|
||||
|
||||
_color["prim"] = "orange"
|
||||
decals = list("plasma")
|
||||
possibledecals[3]["active"] = 1
|
||||
src.air_contents.toxins = (src.maximum_pressure*filled)*air_contents.volume/(R_IDEAL_GAS_EQUATION*air_contents.temperature)
|
||||
air_contents.update_values()
|
||||
|
||||
@@ -576,8 +578,6 @@ update_flag
|
||||
..()
|
||||
|
||||
_color["prim"] = "red"
|
||||
decals = list("plasma")
|
||||
possibledecals[3]["active"] = 1
|
||||
src.air_contents.nitrogen = (src.maximum_pressure*filled)*air_contents.volume/(R_IDEAL_GAS_EQUATION*air_contents.temperature)
|
||||
air_contents.update_values()
|
||||
|
||||
|
||||
@@ -230,9 +230,21 @@
|
||||
return // don't smack that machine with your 2 thalers
|
||||
|
||||
if(default_unfasten_wrench(user, W, time = 60))
|
||||
return
|
||||
|
||||
if(istype(W, /obj/item/weapon/screwdriver) && anchored)
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
panel_open = !panel_open
|
||||
user << "You [panel_open ? "open" : "close"] the maintenance panel."
|
||||
overlays.Cut()
|
||||
if(panel_open)
|
||||
overlays += image(icon, "[initial(icon_state)]-panel")
|
||||
nanomanager.update_uis(src) // Speaker switch is on the main UI, not wires UI
|
||||
return
|
||||
|
||||
if(panel_open)
|
||||
if(istype(W, /obj/item/device/multitool)||istype(W, /obj/item/weapon/wirecutters))
|
||||
return attack_hand(user)
|
||||
if(component_parts && istype(W, /obj/item/weapon/crowbar))
|
||||
var/datum/data/vending_product/machine = product_records
|
||||
for(var/datum/data/vending_product/machine_content in machine)
|
||||
@@ -243,21 +255,7 @@
|
||||
if(!machine_content.amount)
|
||||
break
|
||||
default_deconstruction_crowbar(W)
|
||||
|
||||
else if(istype(W, /obj/item/weapon/screwdriver) && anchored)
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
panel_open = !panel_open
|
||||
user << "You [panel_open ? "open" : "close"] the maintenance panel."
|
||||
overlays.Cut()
|
||||
if(panel_open)
|
||||
overlays += image(icon, "[initial(icon_state)]-panel")
|
||||
nanomanager.update_uis(src) // Speaker switch is on the main UI, not wires UI
|
||||
return
|
||||
else if(istype(W, /obj/item/device/multitool)||istype(W, /obj/item/weapon/wirecutters))
|
||||
if(panel_open)
|
||||
attack_hand(user)
|
||||
return
|
||||
else if(istype(W, /obj/item/weapon/coin) && premium.len > 0)
|
||||
if(istype(W, /obj/item/weapon/coin) && premium.len > 0)
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
coin = W
|
||||
@@ -477,7 +475,29 @@
|
||||
usr << "\blue You remove the [coin] from the [src]"
|
||||
coin = null
|
||||
categories &= ~CAT_COIN
|
||||
|
||||
|
||||
if (href_list["pay"])
|
||||
if(currently_vending && vendor_account && !vendor_account.suspended)
|
||||
if(istype(usr, /mob/living/carbon/human))
|
||||
var/paid = 0
|
||||
var/handled = 0
|
||||
var/mob/living/carbon/human/H = usr
|
||||
var/obj/item/weapon/card/card = null
|
||||
if(istype(H.wear_id,/obj/item/weapon/card))
|
||||
card = H.wear_id
|
||||
paid = pay_with_card(card)
|
||||
handled = 1
|
||||
else if(istype(H.get_active_hand(), /obj/item/weapon/card))
|
||||
card = H.get_active_hand()
|
||||
paid = pay_with_card(card)
|
||||
handled = 1
|
||||
if(paid)
|
||||
src.vend(currently_vending, usr)
|
||||
return
|
||||
else if(handled)
|
||||
nanomanager.update_uis(src)
|
||||
return // don't smack that machine with your 2 credits
|
||||
|
||||
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))))
|
||||
if ((href_list["vend"]) && (src.vend_ready) && (!currently_vending))
|
||||
|
||||
@@ -916,7 +936,7 @@
|
||||
icon_state = "sec"
|
||||
icon_deny = "sec-deny"
|
||||
req_access_txt = "1"
|
||||
products = list(/obj/item/weapon/restraints/handcuffs = 8,/obj/item/weapon/grenade/flashbang = 4,/obj/item/device/flash = 5,
|
||||
products = list(/obj/item/weapon/restraints/handcuffs = 8,/obj/item/weapon/restraints/handcuffs/cable/zipties = 8,/obj/item/weapon/grenade/flashbang = 4,/obj/item/device/flash = 5,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/donut/normal = 12,/obj/item/weapon/storage/box/evidence = 6,/obj/item/device/flashlight/seclite = 4)
|
||||
contraband = list(/obj/item/clothing/glasses/sunglasses = 2,/obj/item/weapon/storage/fancy/donut_box = 2,/obj/item/device/hailer = 5)
|
||||
|
||||
|
||||
@@ -183,6 +183,20 @@
|
||||
new /obj/item/weapon/grenade/flashbang(src)
|
||||
new /obj/item/weapon/grenade/flashbang(src)
|
||||
|
||||
/obj/item/weapon/storage/box/flashes
|
||||
name = "box of flashbulbs"
|
||||
desc = "<B>WARNING: Flashes can cause serious eye damage, protective eyewear is required.</B>"
|
||||
icon_state = "flashbang"
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/device/flash(src)
|
||||
|
||||
/obj/item/weapon/storage/box/teargas
|
||||
name = "box of tear gas grenades (WARNING)"
|
||||
desc = "<B>WARNING: These devices are extremely dangerous and can cause blindness and skin irritation.</B>"
|
||||
@@ -242,6 +256,20 @@
|
||||
new /obj/item/weapon/implanter(src)
|
||||
new /obj/item/weapon/implantpad(src)
|
||||
|
||||
/obj/item/weapon/storage/box/exileimp
|
||||
name = "boxed exile implant kit"
|
||||
desc = "Box of exile implants. It has a picture of a clown being booted through the Gateway."
|
||||
icon_state = "implant"
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/weapon/implantcase/exile(src)
|
||||
new /obj/item/weapon/implantcase/exile(src)
|
||||
new /obj/item/weapon/implantcase/exile(src)
|
||||
new /obj/item/weapon/implantcase/exile(src)
|
||||
new /obj/item/weapon/implantcase/exile(src)
|
||||
new /obj/item/weapon/implanter(src)
|
||||
|
||||
/obj/item/weapon/storage/box/deathimp
|
||||
name = "death alarm implant kit"
|
||||
desc = "Box of life sign monitoring implants."
|
||||
|
||||
@@ -150,7 +150,7 @@
|
||||
new /obj/item/clothing/glasses/sunglasses/sechud(src)
|
||||
new /obj/item/clothing/mask/gas/sechailer/warden(src)
|
||||
new /obj/item/taperoll/police(src)
|
||||
new /obj/item/weapon/storage/box/handcuffs(src)
|
||||
new /obj/item/weapon/storage/box/zipties(src)
|
||||
new /obj/item/weapon/storage/box/flashbangs(src)
|
||||
new /obj/item/weapon/reagent_containers/spray/pepper(src)
|
||||
new /obj/item/weapon/melee/baton/loaded(src)
|
||||
|
||||
@@ -381,6 +381,10 @@
|
||||
new /obj/item/clothing/head/soft/grey(src)
|
||||
if(prob(50))
|
||||
new /obj/item/weapon/storage/backpack/duffel(src)
|
||||
if(prob(40))
|
||||
new /obj/item/clothing/under/assistantformal(src)
|
||||
if(prob(40))
|
||||
new /obj/item/clothing/under/assistantformal(src)
|
||||
return
|
||||
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
icon_closed = "critter"
|
||||
var/already_opened = 0
|
||||
var/content_mob = null
|
||||
var/amount = 1
|
||||
|
||||
/obj/structure/closet/critter/can_open()
|
||||
if(welded)
|
||||
@@ -21,19 +22,7 @@
|
||||
return ..()
|
||||
|
||||
if(content_mob != null && already_opened == 0)
|
||||
if(content_mob == /mob/living/simple_animal/chick)
|
||||
var/num = rand(4, 6)
|
||||
for(var/i = 0, i < num, i++)
|
||||
new content_mob(loc)
|
||||
else if(content_mob == /mob/living/simple_animal/corgi)
|
||||
var/num = rand(0, 1)
|
||||
if(num) //No more matriarchy for cargo
|
||||
content_mob = /mob/living/simple_animal/corgi/Lisa
|
||||
new content_mob(loc)
|
||||
else if(content_mob == /mob/living/simple_animal/cat)
|
||||
if(prob(50))
|
||||
content_mob = /mob/living/simple_animal/cat/Proc
|
||||
else
|
||||
for(var/i = 1, i <= amount, i++)
|
||||
new content_mob(loc)
|
||||
already_opened = 1
|
||||
..()
|
||||
@@ -53,7 +42,12 @@
|
||||
|
||||
/obj/structure/closet/critter/corgi
|
||||
name = "corgi crate"
|
||||
content_mob = /mob/living/simple_animal/corgi //This statement is (not) false. See above.
|
||||
content_mob = /mob/living/simple_animal/corgi
|
||||
|
||||
/obj/structure/closet/critter/corgi/New()
|
||||
if(prob(50))
|
||||
content_mob = /mob/living/simple_animal/corgi/Lisa
|
||||
..()
|
||||
|
||||
/obj/structure/closet/critter/cow
|
||||
name = "cow crate"
|
||||
@@ -67,10 +61,28 @@
|
||||
name = "chicken crate"
|
||||
content_mob = /mob/living/simple_animal/chick
|
||||
|
||||
/obj/structure/closet/critter/chick/New()
|
||||
amount = rand(1, 3)
|
||||
..()
|
||||
|
||||
/obj/structure/closet/critter/cat
|
||||
name = "cat crate"
|
||||
content_mob = /mob/living/simple_animal/cat
|
||||
|
||||
/obj/structure/closet/critter/cat/New()
|
||||
if(prob(50))
|
||||
content_mob = /mob/living/simple_animal/cat/Proc
|
||||
..()
|
||||
|
||||
/obj/structure/closet/critter/pug
|
||||
name = "pug crate"
|
||||
content_mob = /mob/living/simple_animal/pug
|
||||
|
||||
/obj/structure/closet/critter/fox
|
||||
name = "fox crate"
|
||||
content_mob = /mob/living/simple_animal/fox
|
||||
content_mob = /mob/living/simple_animal/fox
|
||||
|
||||
/obj/structure/closet/critter/butterfly
|
||||
name = "butterflies crate"
|
||||
content_mob = /mob/living/simple_animal/butterfly
|
||||
amount = 50
|
||||
@@ -93,6 +93,7 @@ var/list/mechtoys = list(
|
||||
|
||||
/obj/machinery/computer/supplycomp
|
||||
name = "Supply Shuttle Console"
|
||||
desc = "Used to order supplies."
|
||||
icon = 'icons/obj/computer.dmi'
|
||||
icon_state = "supply"
|
||||
req_access = list(access_cargo)
|
||||
@@ -105,6 +106,7 @@ var/list/mechtoys = list(
|
||||
|
||||
/obj/machinery/computer/ordercomp
|
||||
name = "Supply Ordering Console"
|
||||
desc = "Used to order supplies from cargo staff."
|
||||
icon = 'icons/obj/computer.dmi'
|
||||
icon_state = "request"
|
||||
circuit = "/obj/item/weapon/circuitboard/ordercomp"
|
||||
@@ -271,8 +273,8 @@ var/list/mechtoys = list(
|
||||
A:req_access += text2num(SP.access)
|
||||
|
||||
var/list/contains
|
||||
if(istype(SP,/datum/supply_packs/randomised))
|
||||
var/datum/supply_packs/randomised/SPR = SP
|
||||
if(istype(SP,/datum/supply_packs/misc/randomised))
|
||||
var/datum/supply_packs/misc/randomised/SPR = SP
|
||||
contains = list()
|
||||
if(SPR.contains.len)
|
||||
for(var/j=1,j<=SPR.num_contained,j++)
|
||||
@@ -347,17 +349,18 @@ var/list/mechtoys = list(
|
||||
temp = "<b>Supply points: [supply_controller.points]</b><BR>"
|
||||
temp += "<A href='?src=\ref[src];mainmenu=1'>Main Menu</A><HR><BR><BR>"
|
||||
temp += "<b>Select a category</b><BR><BR>"
|
||||
for(var/supply_group_name in all_supply_groups )
|
||||
temp += "<A href='?src=\ref[src];order=[supply_group_name]'>[supply_group_name]</A><BR>"
|
||||
for(var/cat in all_supply_groups )
|
||||
temp += "<A href='?src=\ref[src];order=[cat]'>[get_supply_group_name(cat)]</A><BR>"
|
||||
else
|
||||
last_viewed_group = href_list["order"]
|
||||
var/cat = text2num(last_viewed_group)
|
||||
temp = "<b>Supply points: [supply_controller.points]</b><BR>"
|
||||
temp += "<A href='?src=\ref[src];order=categories'>Back to all categories</A><HR><BR><BR>"
|
||||
temp += "<b>Request from: [last_viewed_group]</b><BR><BR>"
|
||||
for(var/supply_name in supply_controller.supply_packs )
|
||||
var/datum/supply_packs/N = supply_controller.supply_packs[supply_name]
|
||||
if(N.hidden || N.contraband || N.group != last_viewed_group) continue //Have to send the type instead of a reference to
|
||||
temp += "<A href='?src=\ref[src];doorder=[supply_name]'>[supply_name]</A> Cost: [N.cost]<BR>" //the obj because it would get caught by the garbage
|
||||
temp += "<b>Request from: [get_supply_group_name(cat)]</b><BR><BR>"
|
||||
for(var/supply_type in supply_controller.supply_packs )
|
||||
var/datum/supply_packs/N = supply_controller.supply_packs[supply_type]
|
||||
if(N.hidden || N.contraband || N.group != cat) continue //Have to send the type instead of a reference to
|
||||
temp += "<A href='?src=\ref[src];doorder=[supply_type]'>[N.name]</A> Cost: [N.cost]<BR>" //the obj because it would get caught by the garbage
|
||||
|
||||
else if (href_list["doorder"])
|
||||
if(world.time < reqtime)
|
||||
@@ -542,17 +545,18 @@ var/list/mechtoys = list(
|
||||
temp = "<b>Supply points: [supply_controller.points]</b><BR>"
|
||||
temp += "<A href='?src=\ref[src];mainmenu=1'>Main Menu</A><HR><BR><BR>"
|
||||
temp += "<b>Select a category</b><BR><BR>"
|
||||
for(var/supply_group_name in all_supply_groups )
|
||||
temp += "<A href='?src=\ref[src];order=[supply_group_name]'>[supply_group_name]</A><BR>"
|
||||
for(var/cat in all_supply_groups )
|
||||
temp += "<A href='?src=\ref[src];order=[cat]'>[get_supply_group_name(cat)]</A><BR>"
|
||||
else
|
||||
last_viewed_group = href_list["order"]
|
||||
var/cat = text2num(last_viewed_group)
|
||||
temp = "<b>Supply points: [supply_controller.points]</b><BR>"
|
||||
temp += "<A href='?src=\ref[src];order=categories'>Back to all categories</A><HR><BR><BR>"
|
||||
temp += "<b>Request from: [last_viewed_group]</b><BR><BR>"
|
||||
for(var/supply_name in supply_controller.supply_packs )
|
||||
var/datum/supply_packs/N = supply_controller.supply_packs[supply_name]
|
||||
if((N.hidden && !hacked) || (N.contraband && !can_order_contraband) || N.group != last_viewed_group) continue //Have to send the type instead of a reference to
|
||||
temp += "<A href='?src=\ref[src];doorder=[supply_name]'>[supply_name]</A> Cost: [N.cost]<BR>" //the obj because it would get caught by the garbage
|
||||
temp += "<b>Request from: [get_supply_group_name(cat)]</b><BR><BR>"
|
||||
for(var/supply_type in supply_controller.supply_packs )
|
||||
var/datum/supply_packs/N = supply_controller.supply_packs[supply_type]
|
||||
if((N.hidden && !hacked) || (N.contraband && !can_order_contraband) || N.group != cat) continue //Have to send the type instead of a reference to
|
||||
temp += "<A href='?src=\ref[src];doorder=[supply_type]'>[N.name]</A> Cost: [N.cost]<BR>" //the obj because it would get caught by the garbage
|
||||
|
||||
/*temp = "Supply points: [supply_controller.points]<BR><HR><BR>Request what?<BR><BR>"
|
||||
|
||||
|
||||
@@ -638,6 +638,7 @@ var/list/admin_verbs_mod = list(
|
||||
set category = "Preferences"
|
||||
|
||||
prefs.toggles ^= CHAT_ATTACKLOGS
|
||||
prefs.save_preferences(src)
|
||||
if (prefs.toggles & CHAT_ATTACKLOGS)
|
||||
usr << "You now will get attack log messages"
|
||||
else
|
||||
|
||||
@@ -1727,6 +1727,8 @@
|
||||
input = P.parsepencode(input) // Encode everything from pencode to html
|
||||
|
||||
var/customname = input(src.owner, "Pick a title for the fax.", "Fax Title") as text|null
|
||||
if(!customname)
|
||||
customname = "paper"
|
||||
|
||||
var/stampname
|
||||
var/stamptype
|
||||
|
||||
@@ -175,6 +175,14 @@
|
||||
)
|
||||
|
||||
//Lawyer
|
||||
/obj/item/clothing/suit/storage/lawyer/blackjacket
|
||||
name = "Black Suit Jacket"
|
||||
desc = "A snappy dress jacket."
|
||||
icon_state = "suitjacket_black_open"
|
||||
item_state = "suitjacket_black_open"
|
||||
blood_overlay_type = "coat"
|
||||
body_parts_covered = UPPER_TORSO|ARMS
|
||||
|
||||
/obj/item/clothing/suit/storage/lawyer/bluejacket
|
||||
name = "Blue Suit Jacket"
|
||||
desc = "A snappy dress jacket."
|
||||
|
||||
@@ -228,6 +228,27 @@
|
||||
item_state = "navy_suit"
|
||||
_color = "navy_suit"
|
||||
|
||||
/obj/item/clothing/under/suit_jacket/tan
|
||||
name = "tan suit"
|
||||
desc = "A tan suit with a yellow tie. Smart, but casual."
|
||||
icon_state = "tan_suit"
|
||||
item_state = "tan_suit"
|
||||
_color = "tan_suit"
|
||||
|
||||
/obj/item/clothing/under/suit_jacket/burgundy
|
||||
name = "burgundy suit"
|
||||
desc = "A burgundy suit and black tie. Somewhat formal."
|
||||
icon_state = "burgundy_suit"
|
||||
item_state = "burgundy_suit"
|
||||
_color = "burgundy_suit"
|
||||
|
||||
/obj/item/clothing/under/suit_jacket/charcoal
|
||||
name = "charcoal suit"
|
||||
desc = "A charcoal suit and red tie. Very professional."
|
||||
icon_state = "charcoal_suit"
|
||||
item_state = "charcoal_suit"
|
||||
_color = "charcoal_suit"
|
||||
|
||||
/obj/item/clothing/under/blackskirt
|
||||
name = "black skirt"
|
||||
desc = "A black skirt, very fancy!"
|
||||
@@ -587,6 +608,13 @@
|
||||
_color = "pennywise"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO
|
||||
|
||||
/obj/item/clothing/under/assistantformal
|
||||
name = "assistant's formal uniform"
|
||||
desc = "An assistant's formal-wear. Why an assistant needs formal-wear is still unknown."
|
||||
icon_state = "assistant_formal"
|
||||
item_state = "gy_suit"
|
||||
_color = "assistant_formal"
|
||||
|
||||
/obj/item/clothing/under/blacktango
|
||||
name = "black tango dress"
|
||||
desc = "Filled with Latin fire."
|
||||
|
||||
@@ -52,42 +52,42 @@ var/list/karma_spenders = list()
|
||||
set name = "Award Karma"
|
||||
set desc = "Let the gods know whether someone's been nice. Can only be used once per round."
|
||||
set category = "Special Verbs"
|
||||
|
||||
|
||||
if(!ticker || !player_list.len)
|
||||
usr << "\red You can't award karma until the game has started."
|
||||
return
|
||||
|
||||
|
||||
if(ticker.current_state == GAME_STATE_PREGAME)
|
||||
usr << "\red You can't award karma until the game has started."
|
||||
return
|
||||
return
|
||||
|
||||
var/list/karma_list = list("Cancel")
|
||||
for(var/mob/M in player_list) if(M.client && M.mind)
|
||||
for(var/mob/M in player_list) if(M.client && M.mind)
|
||||
var/special_role = M.mind.special_role
|
||||
if (special_role == "Wizard" || special_role == "Ninja" || special_role == "Syndicate" || special_role == "Syndicate Commando" || special_role == "Vox Raider" || special_role == "Alien") // Don't include special roles, because players use it to meta
|
||||
continue
|
||||
karma_list += M
|
||||
|
||||
|
||||
if(!karma_list.len || karma_list.len == 1)
|
||||
usr << "\red There's no-one to spend your karma on."
|
||||
return
|
||||
|
||||
|
||||
var/pickedmob = input("Who would you like to award Karma to?", "Award Karma", "Cancel") as null|mob in karma_list
|
||||
|
||||
|
||||
if(isnull(pickedmob))
|
||||
return
|
||||
|
||||
|
||||
if(!istype(pickedmob, /mob))
|
||||
usr << "\red That's not a mob."
|
||||
return
|
||||
|
||||
return
|
||||
|
||||
spend_karma(pickedmob)
|
||||
|
||||
/mob/verb/spend_karma(var/mob/M)
|
||||
|
||||
/mob/verb/spend_karma(var/mob/M)
|
||||
set name = "Award Karma to Player"
|
||||
set desc = "Let the gods know whether someone's been nice. Can only be used once per round."
|
||||
set category = "Special Verbs"
|
||||
|
||||
|
||||
if(!M)
|
||||
usr << "Please right click a mob to award karma directly, or use the 'Award Karma' verb to select a player from the player listing."
|
||||
return
|
||||
@@ -115,6 +115,9 @@ var/list/karma_spenders = list()
|
||||
if(!choice || choice == "Cancel")
|
||||
return
|
||||
if(choice == "Good" && !(src.client.karma_spent))
|
||||
if(src.client.karma_spent)
|
||||
usr << "\red You've already spent your karma for the round."
|
||||
return
|
||||
M.client.karma += 1
|
||||
usr << "[choice] karma spent on [M.name]."
|
||||
src.client.karma_spent = 1
|
||||
@@ -199,7 +202,7 @@ You've gained <b>[totalkarma]</b> total karma in your time here.<br>"}
|
||||
<a href='?src=\ref[src];karmashop=shop;KarmaBuy2=4'>Unlock Vox -- 45KP</a><br>
|
||||
<a href='?src=\ref[src];karmashop=shop;KarmaBuy2=5'>Unlock Slime People -- 45KP</a><br>
|
||||
"}
|
||||
|
||||
|
||||
if (2) // Karma Refunds
|
||||
var/list/refundable = list()
|
||||
var/list/purchased = checkpurchased()
|
||||
@@ -208,31 +211,31 @@ You've gained <b>[totalkarma]</b> total karma in your time here.<br>"}
|
||||
dat += "<a href='?src=\ref[src];karmashop=shop;KarmaRefund=Tajaran Ambassador;KarmaRefundType=job;KarmaRefundCost=30'>Refund Tajaran Ambassador -- 30KP</a><br>"
|
||||
if("Unathi Ambassador" in purchased)
|
||||
refundable += "Unathi Ambassador"
|
||||
dat += "<a href='?src=\ref[src];karmashop=shop;KarmaRefund=Unathi Ambassador;KarmaRefundType=job;KarmaRefundCost=30'>Refund Unathi Ambassador -- 30KP</a><br>"
|
||||
dat += "<a href='?src=\ref[src];karmashop=shop;KarmaRefund=Unathi Ambassador;KarmaRefundType=job;KarmaRefundCost=30'>Refund Unathi Ambassador -- 30KP</a><br>"
|
||||
if("Skrell Ambassador" in purchased)
|
||||
refundable += "Skrell Ambassador"
|
||||
dat += "<a href='?src=\ref[src];karmashop=shop;KarmaRefund=Skrell Ambassador;KarmaRefundType=job;KarmaRefundCost=30'>Refund Skrell Ambassador -- 30KP</a><br>"
|
||||
dat += "<a href='?src=\ref[src];karmashop=shop;KarmaRefund=Skrell Ambassador;KarmaRefundType=job;KarmaRefundCost=30'>Refund Skrell Ambassador -- 30KP</a><br>"
|
||||
if("Diona Ambassador" in purchased)
|
||||
refundable += "Diona Ambassador"
|
||||
dat += "<a href='?src=\ref[src];karmashop=shop;KarmaRefund=Diona Ambassador;KarmaRefundType=job;KarmaRefundCost=30'>Refund Diona Ambassador -- 30KP</a><br>"
|
||||
dat += "<a href='?src=\ref[src];karmashop=shop;KarmaRefund=Diona Ambassador;KarmaRefundType=job;KarmaRefundCost=30'>Refund Diona Ambassador -- 30KP</a><br>"
|
||||
if("Kidan Ambassador" in purchased)
|
||||
refundable += "Kidan Ambassador"
|
||||
dat += "<a href='?src=\ref[src];karmashop=shop;KarmaRefund=Kidan Ambassador;KarmaRefundType=job;KarmaRefundCost=30'>Refund Kidan Ambassador -- 30KP</a><br>"
|
||||
dat += "<a href='?src=\ref[src];karmashop=shop;KarmaRefund=Kidan Ambassador;KarmaRefundType=job;KarmaRefundCost=30'>Refund Kidan Ambassador -- 30KP</a><br>"
|
||||
if("Slime People Ambassador" in purchased)
|
||||
refundable += "Slime People Ambassador"
|
||||
dat += "<a href='?src=\ref[src];karmashop=shop;KarmaRefund=Slime People Ambassador;KarmaRefundType=job;KarmaRefundCost=30'>Refund Slime People Ambassador -- 30KP</a><br>"
|
||||
dat += "<a href='?src=\ref[src];karmashop=shop;KarmaRefund=Slime People Ambassador;KarmaRefundType=job;KarmaRefundCost=30'>Refund Slime People Ambassador -- 30KP</a><br>"
|
||||
if("Grey Ambassador" in purchased)
|
||||
refundable += "Grey Ambassador"
|
||||
dat += "<a href='?src=\ref[src];karmashop=shop;KarmaRefund=Grey Ambassador;KarmaRefundType=job;KarmaRefundCost=30'>Refund Grey Ambassador -- 30KP</a><br>"
|
||||
dat += "<a href='?src=\ref[src];karmashop=shop;KarmaRefund=Grey Ambassador;KarmaRefundType=job;KarmaRefundCost=30'>Refund Grey Ambassador -- 30KP</a><br>"
|
||||
if("Vox Ambassador" in purchased)
|
||||
refundable += "Vox Ambassador"
|
||||
dat += "<a href='?src=\ref[src];karmashop=shop;KarmaRefund=Vox Ambassador;KarmaRefundType=job;KarmaRefundCost=30'>Refund Vox Ambassador -- 30KP</a><br>"
|
||||
if("Customs Officer" in purchased)
|
||||
refundable += "Customs Officer"
|
||||
dat += "<a href='?src=\ref[src];karmashop=shop;KarmaRefund=Customs Officer;KarmaRefundType=job;KarmaRefundCost=30'>Refund Customs Officer -- 30KP</a><br>"
|
||||
dat += "<a href='?src=\ref[src];karmashop=shop;KarmaRefund=Customs Officer;KarmaRefundType=job;KarmaRefundCost=30'>Refund Customs Officer -- 30KP</a><br>"
|
||||
if("Nanotrasen Recruiter" in purchased)
|
||||
refundable += "Nanotrasen Recruiter"
|
||||
dat += "<a href='?src=\ref[src];karmashop=shop;KarmaRefund=Nanotrasen Recruiter;KarmaRefundType=job;KarmaRefundCost=10'>Refund Nanotrasen Recruiter -- 10KP</a><br>"
|
||||
dat += "<a href='?src=\ref[src];karmashop=shop;KarmaRefund=Nanotrasen Recruiter;KarmaRefundType=job;KarmaRefundCost=10'>Refund Nanotrasen Recruiter -- 10KP</a><br>"
|
||||
|
||||
if(!refundable.len)
|
||||
dat += "You do not have any refundable karma purchases.<br>"
|
||||
@@ -345,7 +348,7 @@ You've gained <b>[totalkarma]</b> total karma in your time here.<br>"}
|
||||
usr << "You have been charged [cost] karma."
|
||||
message_admins("[key_name(usr)] has been charged [cost] karma.")
|
||||
return
|
||||
|
||||
|
||||
/client/proc/karmarefund(var/type,var/name,var/cost)
|
||||
if(name == "Tajaran Ambassador")
|
||||
cost = 30
|
||||
@@ -368,12 +371,12 @@ You've gained <b>[totalkarma]</b> total karma in your time here.<br>"}
|
||||
else if(name == "Nanotrasen Recruiter")
|
||||
cost = 10
|
||||
else
|
||||
usr << "\red That job is not refundable."
|
||||
usr << "\red That job is not refundable."
|
||||
return
|
||||
|
||||
|
||||
var/DBQuery/query = dbcon.NewQuery("SELECT * FROM whitelist WHERE ckey='[usr.key]'")
|
||||
query.Execute()
|
||||
|
||||
|
||||
var/dbjob
|
||||
var/dbspecies
|
||||
var/dbckey
|
||||
@@ -381,7 +384,7 @@ You've gained <b>[totalkarma]</b> total karma in your time here.<br>"}
|
||||
dbckey = query.item[2]
|
||||
dbjob = query.item[3]
|
||||
dbspecies = query.item[4]
|
||||
|
||||
|
||||
if(dbckey)
|
||||
var/list/typelist = list()
|
||||
if(type == "job")
|
||||
@@ -389,8 +392,8 @@ You've gained <b>[totalkarma]</b> total karma in your time here.<br>"}
|
||||
else if(type == "species")
|
||||
typelist = text2list(dbspecies,",")
|
||||
else
|
||||
usr << "\red Type [type] is not a valid column."
|
||||
|
||||
usr << "\red Type [type] is not a valid column."
|
||||
|
||||
if(name in typelist)
|
||||
typelist -= name
|
||||
var/newtypelist = list2text(typelist,",")
|
||||
@@ -406,14 +409,14 @@ You've gained <b>[totalkarma]</b> total karma in your time here.<br>"}
|
||||
karmacharge(text2num(cost),1)
|
||||
else
|
||||
usr << "\red You have not bought [name]."
|
||||
|
||||
|
||||
else
|
||||
usr << "\red Your ckey ([dbckey]) was not found."
|
||||
|
||||
usr << "\red Your ckey ([dbckey]) was not found."
|
||||
|
||||
/client/proc/checkpurchased(var/name = null) // If the first parameter is null, return a full list of purchases
|
||||
var/DBQuery/query = dbcon.NewQuery("SELECT * FROM whitelist WHERE ckey='[usr.key]'")
|
||||
query.Execute()
|
||||
|
||||
query.Execute()
|
||||
|
||||
var/dbjob
|
||||
var/dbspecies
|
||||
var/dbckey
|
||||
@@ -421,7 +424,7 @@ You've gained <b>[totalkarma]</b> total karma in your time here.<br>"}
|
||||
dbckey = query.item[2]
|
||||
dbjob = query.item[3]
|
||||
dbspecies = query.item[4]
|
||||
|
||||
|
||||
if(dbckey)
|
||||
var/list/joblist = text2list(dbjob,",")
|
||||
var/list/specieslist = text2list(dbspecies,",")
|
||||
@@ -434,4 +437,4 @@ You've gained <b>[totalkarma]</b> total karma in your time here.<br>"}
|
||||
else
|
||||
return combinedlist
|
||||
else
|
||||
return 0
|
||||
return 0
|
||||
|
||||
@@ -130,7 +130,9 @@
|
||||
|
||||
//handcuffed?
|
||||
if(handcuffed)
|
||||
if(istype(handcuffed, /obj/item/weapon/restraints/handcuffs/cable))
|
||||
if(istype(handcuffed, /obj/item/weapon/restraints/handcuffs/cable/zipties))
|
||||
msg += "<span class='warning'>[t_He] [t_is] \icon[handcuffed] restrained with zipties!</span>\n"
|
||||
else if(istype(handcuffed, /obj/item/weapon/restraints/handcuffs/cable))
|
||||
msg += "<span class='warning'>[t_He] [t_is] \icon[handcuffed] restrained with cable!</span>\n"
|
||||
else
|
||||
msg += "<span class='warning'>[t_He] [t_is] \icon[handcuffed] handcuffed!</span>\n"
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
/mob/living/simple_animal/butterfly
|
||||
name = "butterfly"
|
||||
desc = "A colorful butterfly, how'd it get up here?"
|
||||
icon_state = "butterfly"
|
||||
icon_living = "butterfly"
|
||||
icon_dead = "butterfly_dead"
|
||||
turns_per_move = 1
|
||||
emote_see = list("flutters")
|
||||
response_help = "shoos"
|
||||
response_disarm = "brushes aside"
|
||||
response_harm = "aquashes"
|
||||
speak_chance = 0
|
||||
maxHealth = 2
|
||||
health = 2
|
||||
harm_intent_damage = 1
|
||||
friendly = "nudges"
|
||||
pass_flags = PASSTABLE
|
||||
|
||||
/mob/living/simple_animal/butterfly/New()
|
||||
..()
|
||||
color = rgb(rand(0, 255), rand(0, 255), rand(0, 255))
|
||||
@@ -0,0 +1,42 @@
|
||||
//Corgi //best comment 2014
|
||||
/mob/living/simple_animal/pug
|
||||
name = "\improper pug"
|
||||
real_name = "pug"
|
||||
desc = "It's a pug."
|
||||
icon_state = "pug"
|
||||
icon_living = "pug"
|
||||
icon_dead = "pug_dead"
|
||||
speak = list("YAP", "Woof!", "Bark!", "AUUUUUU")
|
||||
speak_emote = list("barks", "woofs")
|
||||
emote_hear = list("barks!", "woofs!", "yaps.","pants.")
|
||||
emote_see = list("shakes its head.", "chases its tail.","shivers.")
|
||||
speak_chance = 1
|
||||
turns_per_move = 10
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/pug
|
||||
meat_amount = 3
|
||||
response_help = "pets"
|
||||
response_disarm = "bops"
|
||||
response_harm = "kicks"
|
||||
see_in_dark = 5
|
||||
|
||||
/mob/living/simple_animal/pug/Life()
|
||||
..()
|
||||
|
||||
if(!stat && !resting && !buckled)
|
||||
if(prob(1))
|
||||
emote("me", 1, pick("chases its tail."))
|
||||
spawn(0)
|
||||
for(var/i in list(1,2,4,8,4,2,1,2,4,8,4,2,1,2,4,8,4,2))
|
||||
dir = i
|
||||
sleep(1)
|
||||
|
||||
/mob/living/simple_animal/pug/attackby(var/obj/item/O as obj, var/mob/user as mob) //Marker -Agouri
|
||||
if(istype(O, /obj/item/weapon/newspaper))
|
||||
if(!stat)
|
||||
user.visible_message("<span class='notice'>[user] baps [name] on the nose with the rolled up [O]</span>")
|
||||
spawn(0)
|
||||
for(var/i in list(1,2,4,8,4,2,1,2))
|
||||
dir = i
|
||||
sleep(1)
|
||||
else
|
||||
..()
|
||||
@@ -53,7 +53,7 @@ var/list/adminfaxes = list()
|
||||
if(A.from_department == "Administrator")
|
||||
html += "<td>N/A</td>"
|
||||
else
|
||||
html += "<td><A align='right' href='?src=\ref[src];AdminFaxCreate=\ref[usr];originfax=\ref[A.origin];faxtype=[A.to_department];replyto=[A.message]'>Reply</A></td>"
|
||||
html += "<td><A align='right' href='?src=\ref[src];AdminFaxCreate=\ref[A.sent_by];originfax=\ref[A.origin];faxtype=[A.to_department];replyto=\ref[A.message]'>Reply</A></td>"
|
||||
html += "<td>N/A</td>"
|
||||
else
|
||||
html += "<td>N/A</td>"
|
||||
@@ -61,7 +61,7 @@ var/list/adminfaxes = list()
|
||||
html += "</tr>"
|
||||
html += "</table>"
|
||||
html += "</div>"
|
||||
|
||||
|
||||
html += "<div class='block'>"
|
||||
html += "<h2>Departmental Faxes</h2>"
|
||||
html += "<table>"
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
var/list/broken_requirements = list()
|
||||
var/broken_on_spawn = 0
|
||||
var/recharge_delay = 15
|
||||
var/image/icon_beaker = null //cached overlay
|
||||
|
||||
|
||||
/obj/machinery/chem_dispenser/proc/recharge()
|
||||
@@ -59,6 +60,7 @@
|
||||
dispensable_reagents = sortList(dispensable_reagents)
|
||||
|
||||
if(broken_on_spawn)
|
||||
overlays.Cut()
|
||||
var/amount = pick(3,3,4)
|
||||
var/list/options = list()
|
||||
options[/obj/item/weapon/stock_parts/capacitor/adv] = "Add an advanced capacitor to fix it."
|
||||
@@ -181,8 +183,7 @@
|
||||
var/obj/item/weapon/reagent_containers/glass/B = beaker
|
||||
B.loc = loc
|
||||
beaker = null
|
||||
if(!panel_open)
|
||||
icon_state = initial(icon_state)
|
||||
overlays.Cut()
|
||||
add_fingerprint(usr)
|
||||
return 1 // update UIs attached to this object
|
||||
|
||||
@@ -211,7 +212,10 @@
|
||||
B.loc = src
|
||||
user << "You set [B] on the machine."
|
||||
nanomanager.update_uis(src) // update all UIs attached to src
|
||||
icon_state = "[initial(icon_state)]2"
|
||||
if(!icon_beaker)
|
||||
icon_beaker = image('icons/obj/chemical.dmi', src, "disp_beaker") //randomize beaker overlay position.
|
||||
icon_beaker.pixel_x = rand(-10,5)
|
||||
overlays += icon_beaker
|
||||
return
|
||||
|
||||
/obj/machinery/chem_dispenser/attackby(var/obj/item/weapon/B as obj, var/mob/user as mob)
|
||||
|
||||
@@ -35,3 +35,7 @@
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meat/corgi
|
||||
name = "Corgi meat"
|
||||
desc = "Tastes like... well you know..."
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meat/pug
|
||||
name = "Pug meat"
|
||||
desc = "Tastes like... well you know..."
|
||||
|
Before Width: | Height: | Size: 269 KiB After Width: | Height: | Size: 266 KiB |
|
Before Width: | Height: | Size: 299 KiB After Width: | Height: | Size: 300 KiB |
|
Before Width: | Height: | Size: 269 KiB After Width: | Height: | Size: 272 KiB |
|
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 104 KiB After Width: | Height: | Size: 104 KiB |
|
Before Width: | Height: | Size: 66 KiB After Width: | Height: | Size: 67 KiB |
@@ -4148,7 +4148,7 @@
|
||||
"bBN" = (/obj/structure/table,/obj/structure/window/reinforced/tinted{dir = 4; icon_state = "twindow"; tag = ""},/obj/item/device/mmi/posibrain,/obj/item/device/robotanalyzer,/turf/simulated/floor{dir = 8; icon_state = "whitecorner"},/area/assembly/robotics)
|
||||
"bBO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics)
|
||||
"bBP" = (/obj/machinery/door_control{id = "robotics2"; name = "Robotics Lab Shutters Control"; pixel_x = 24; pixel_y = -24; req_access_txt = "29"},/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics)
|
||||
"bBQ" = (/obj/structure/table/reinforced,/obj/item/weapon/folder/white,/obj/item/weapon/pen,/obj/machinery/door/firedoor/border_only{dir = 1; name = "hazard door north"},/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "robotics2"; name = "Robotics Lab Shutters"; opacity = 0},/obj/machinery/door/window/eastright{base_state = "left"; dir = 8; icon_state = "left"; name = "Robotics Desk"; req_access_txt = "47"},/turf/simulated/floor/plating,/area/assembly/robotics)
|
||||
"bBQ" = (/obj/structure/table/reinforced,/obj/item/weapon/folder/white,/obj/item/weapon/pen,/obj/machinery/door/firedoor/border_only{dir = 1; name = "hazard door north"},/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "shutter0"; id = "robotics2"; name = "Robotics Lab Shutters"; opacity = 0},/obj/machinery/door/window/eastright{base_state = "left"; dir = 8; icon_state = "left"; name = "Robotics Desk"; req_access_txt = "47"},/turf/simulated/floor/plating,/area/assembly/robotics)
|
||||
"bBR" = (/obj/machinery/light{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor{dir = 2; icon_state = "whitecorner"},/area/medical/research{name = "Research Division"})
|
||||
"bBS" = (/obj/effect/landmark{name = "lightsout"},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor{icon_state = "whitehall"; dir = 2},/area/medical/research{name = "Research Division"})
|
||||
"bBT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor{dir = 8; icon_state = "whitecorner"},/area/medical/research{name = "Research Division"})
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
{{if data.message_err}} <span class='uiIcon16 icon-alert' ></span>{{/if}} {{:data.message}}
|
||||
</div>
|
||||
<div class='item'>
|
||||
{{:helper.link('Pay', 'cart', {'pay' : 1})}}
|
||||
{{:helper.link('Cancel', 'arrowreturn-1-w', {'cancelpurchase' : 1})}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1331,6 +1331,7 @@
|
||||
#include "code\modules\mob\living\simple_animal\tribbles.dm"
|
||||
#include "code\modules\mob\living\simple_animal\vox.dm"
|
||||
#include "code\modules\mob\living\simple_animal\worm.dm"
|
||||
#include "code\modules\mob\living\simple_animal\friendly\butterfly.dm"
|
||||
#include "code\modules\mob\living\simple_animal\friendly\cat.dm"
|
||||
#include "code\modules\mob\living\simple_animal\friendly\corgi.dm"
|
||||
#include "code\modules\mob\living\simple_animal\friendly\crab.dm"
|
||||
@@ -1338,6 +1339,7 @@
|
||||
#include "code\modules\mob\living\simple_animal\friendly\fox.dm"
|
||||
#include "code\modules\mob\living\simple_animal\friendly\lizard.dm"
|
||||
#include "code\modules\mob\living\simple_animal\friendly\mouse.dm"
|
||||
#include "code\modules\mob\living\simple_animal\friendly\pug.dm"
|
||||
#include "code\modules\mob\living\simple_animal\friendly\slime.dm"
|
||||
#include "code\modules\mob\living\simple_animal\friendly\spiderbot.dm"
|
||||
#include "code\modules\mob\living\simple_animal\friendly\tomato.dm"
|
||||
|
||||