Merge branch 'master' of git://github.com/tgstation/-tg-station.git

This commit is contained in:
Firecage
2014-04-02 19:15:56 +02:00
40 changed files with 10701 additions and 109 deletions
+24
View File
@@ -47,6 +47,30 @@ CREATE TABLE `erro_admin_log` (
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `erro_admin_ranks`
--
DROP TABLE IF EXISTS `erro_admin_ranks`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `erro_admin_ranks` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`rank` varchar(40) NOT NULL,
`flags` int(16) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
insert into erro_admin_ranks (rank, flags) values ('Moderator',2);
insert into erro_admin_ranks (rank, flags) values ('Admin Candidate',2);
insert into erro_admin_ranks (rank, flags) values ('Trial Admin',5638);
insert into erro_admin_ranks (rank, flags) values ('Badmin',5727);
insert into erro_admin_ranks (rank, flags) values ('Game Admin',8063);
insert into erro_admin_ranks (rank, flags) values ('Game Master',65535);
insert into erro_admin_ranks (rank, flags) values ('Host',65535);
insert into erro_admin_ranks (rank, flags) values ('Coder',5168);
--
-- Table structure for table `erro_ban`
--
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -1,8 +1,8 @@
#if !defined(MAP_FILE)
#include "map_files\tgstation.2.1.2.dmm"
#include "map_files\tgstation.2.1.3.dmm"
#define MAP_FILE "tgstation.2.1.2.dmm"
#define MAP_FILE "tgstation.2.1.3.dmm"
#define MAP_NAME "TGstation 2"
#elif !defined(MAP_OVERRIDE)
+29 -1
View File
@@ -24,9 +24,37 @@ var/list/scarySounds = list('sound/weapons/thudswoosh.ogg','sound/weapons/Taser.
// Reference list for disposal sort junctions. Set the sortType variable on disposal sort junctions to
// the index of the sort department that you want. For example, sortType set to 2 will reroute all packages
// tagged for the Cargo Bay.
/* List of sortType codes for mapping reference
0 Waste
1 Disposals
2 Cargo Bay
3 QM Office
4 Engineering
5 CE Office
6 Atmospherics
7 Security
8 HoS Office
9 Medbay
10 CMO Office
11 Chemistry
12 Research
13 RD Office
14 Robotics
15 HoP Office
16 Library
17 Chapel
18 Theatre
19 Bar
20 Kitchen
21 Hydroponics
22 Janitor
23 Genetics
*/
var/list/TAGGERLOCATIONS = list("Disposals",
"Cargo Bay", "QM Office", "Engineering", "CE Office",
"Atmospherics", "Security", "HoS Office", "Medbay",
"CMO Office", "Chemistry", "Research", "RD Office",
"Robotics", "HoP Office", "Library", "Chapel", "Theatre",
"Bar", "Kitchen", "Hydroponics", "Janitor Closet","Genetics")
"Bar", "Kitchen", "Hydroponics", "Janitor Closet","Genetics")
+6 -6
View File
@@ -101,8 +101,8 @@
if(!resolved && A && W)
W.afterattack(A,src,1,params) // 1 indicates adjacency
else
//if(ismob(A))
// changeNext_move(8)
if(ismob(A))
changeNext_move(8)
UnarmedAttack(A)
return
@@ -120,8 +120,8 @@
if(!resolved && A && W)
W.afterattack(A,src,1,params) // 1: clicking something Adjacent
else
//if(ismob(A))
// changeNext_move(8)
if(ismob(A))
changeNext_move(8)
UnarmedAttack(A, 1)
return
else // non-adjacent click
@@ -153,8 +153,8 @@
in human click code to allow glove touches only at melee range.
*/
/mob/proc/UnarmedAttack(var/atom/A, var/proximity_flag)
//if(ismob(A))
// changeNext_move(8)
if(ismob(A))
changeNext_move(8)
return
/*
+1 -1
View File
@@ -11,7 +11,7 @@
visible_message("<span class='danger'>[src] has been hit by [user] with [W].</span>")
/mob/living/attackby(obj/item/I, mob/user)
//user.changeNext_move(8)
user.changeNext_move(8)
I.attack(src, user)
/mob/living/proc/attacked_by(var/obj/item/I, var/mob/living/user, var/def_zone)
+1 -1
View File
@@ -135,7 +135,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
return
/obj/effect/proc_holder/spell/proc/start_recharge()
while(charge_counter < charge_max && !isnull(gc_destroyed))
while(charge_counter < charge_max && isnull(gc_destroyed))
sleep(1)
charge_counter++
+1 -1
View File
@@ -405,7 +405,7 @@
icon_state = "RPED"
item_state = "RPED"
w_class = 5
can_hold = list("/obj/item/weapon/stock_parts")
can_hold = list(/obj/item/weapon/stock_parts)
storage_slots = 14
use_to_pickup = 1
allow_quick_gather = 1
+10 -2
View File
@@ -610,6 +610,10 @@ proc/process_ghost_teleport_locs()
name = "Waste Disposal"
icon_state = "disposal"
/area/maintenance/electrical
name = "Electrical Maintenance"
icon_state = "yellow"
//Hallway
/area/hallway/primary/fore
@@ -1008,13 +1012,17 @@ proc/process_ghost_teleport_locs()
icon_state = "sec_prison"
/area/security/processing
name = "\improper Prisoner Processing"
name = "\improper Labor Shuttle Dock"
icon_state = "sec_prison"
/area/security/warden
name = "\improper Armory"
name = "\improper Brig Control"
icon_state = "Warden"
/area/security/armory
name = "\improper Armory"
icon_state = "armory"
/area/security/hos
name = "\improper Head of Security's Office"
icon_state = "sec_hos"
+3
View File
@@ -76,6 +76,7 @@ Radio:
1443 - Confession Intercom
1349 - Miners
1347 - Cargo techs
1447 - AI Private
Devices:
1451 - tracking implant
@@ -108,6 +109,7 @@ var/list/radiochannels = list(
"Syndicate" = 1213,
"Supply" = 1347,
"Service" = 1349,
"AI Private" = 1447,
)
//depenging helpers
var/const/SYND_FREQ = 1213 //nuke op frequency, coloured dark brown in chat window
@@ -119,6 +121,7 @@ var/const/MED_FREQ = 1355 //medical, coloured blue in chat window
var/const/ENG_FREQ = 1357 //engineering, coloured orange in chat window
var/const/SEC_FREQ = 1359 //security, coloured red in chat window
var/const/DSQUAD_FREQ = 1441 //death squad frequency, coloured grey in chat window
var/const/AIPRIV_FREQ = 1447 //AI private, colored magenta in chat window
#define TRANSMISSION_WIRE 0
#define TRANSMISSION_RADIO 1
+6
View File
@@ -271,6 +271,11 @@
icon = 'icons/obj/doors/hightechsecurity.dmi'
doortype = 33
/obj/machinery/door/airlock/shuttle
name = "shuttle airlock"
icon = 'icons/obj/doors/doorshuttle.dmi'
doortype = 34
/*
About the new airlock wires panel:
* An airlock wire dialog can be accessed by the normal way or by using wirecutters or a multitool on the door while the wire-panel is open. This would show the following wires, which you can either wirecut/mend or send a multitool pulse through. There are 9 wires.
@@ -935,6 +940,7 @@ About the new airlock wires panel:
if(31) new/obj/structure/door_assembly/door_assembly_science( src.loc )
if(32) new/obj/structure/door_assembly/door_assembly_science/glass( src.loc )
if(33) new/obj/structure/door_assembly/door_assembly_highsecurity(src.loc)
if(34) new/obj/structure/door_assembly/door_assembly_shuttle(src.loc)
if(emagged)
user << "<span class='warning'>You discard the damaged electronics.</span>"
qdel(src)
@@ -352,6 +352,8 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept
freq_text = "Service"
if(SUPP_FREQ)
freq_text = "Supply"
if(AIPRIV_FREQ)
freq_text = "AI Private"
//There's probably a way to use the list var of channels in code\game\communications.dm to make the dept channels non-hardcoded, but I wasn't in an experimentive mood. --NEO
@@ -386,6 +388,8 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept
part_a = "<span class='suppradio'><span class='name'>"
else if (display_freq==DSQUAD_FREQ)
part_a = "<span class='dsquadradio'><span class='name'>"
else if (display_freq==AIPRIV_FREQ)
part_a = "<span class='aiprivradio'><span class='name'>"
// --- Filter the message; place it in quotes apply a verb ---
@@ -647,6 +651,8 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept
freq_text = "Service"
if(SUPP_FREQ)
freq_text = "Supply"
if(AIPRIV_FREQ)
freq_text = "AI Private"
//There's probably a way to use the list var of channels in code\game\communications.dm to make the dept channels non-hardcoded, but I wasn't in an experimentive mood. --NEO
@@ -685,6 +691,8 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept
part_a = "<span class='suppradio'><span class='name'>"
else if (display_freq==DSQUAD_FREQ)
part_a = "<span class='dsquadradio'><span class='name'>"
else if (display_freq==AIPRIV_FREQ)
part_a = "<span class='aiprivradio'><span class='name'>"
// --- This following recording is intended for research and feedback in the use of department radio channels ---
+1 -1
View File
@@ -699,7 +699,7 @@
icon_deny = "sec-deny"
req_access_txt = "1"
products = list(/obj/item/weapon/handcuffs = 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/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/machinery/vending/hydronutrients
@@ -108,6 +108,15 @@
brightness_on = 2
/obj/item/device/flashlight/seclite
name = "seclite"
desc = "A robust flashlight used by security."
icon_state = "seclite"
item_state = "seclite"
force = 9 // Not as good as a stun baton.
brightness_on = 5 // A little better than the standard flashlight.
// the desk lamps are a bit special
/obj/item/device/flashlight/lamp
name = "desk lamp"
+4 -1
View File
@@ -16,6 +16,7 @@
var/power_drained = 0 // has drained this much power
var/max_power = 1e8 // maximum power that can be drained before exploding
var/mode = 0 // 0 = off, 1=clamped (off), 2=operating
var/admins_warned = 0 // stop spam, only warn the admins once that we are about to boom
var/const/DISCONNECTED = 0
var/const/CLAMPED_OFF = 1
@@ -133,7 +134,9 @@
A.charging = 1 // It's no longer full
if(power_drained > max_power * 0.95)
message_admins("Power sink at ([x],[y],[z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>) is about to explode")
if (!admins_warned)
admins_warned = 1
message_admins("Power sink at ([x],[y],[z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>) is 95% full. Explosion imminent.")
playsound(src, 'sound/effects/screech.ogg', 100, 1, 1)
if(power_drained >= max_power)
@@ -494,6 +494,8 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use
freq_text = "Service"
if(SUPP_FREQ)
freq_text = "Supply"
if(AIPRIV_FREQ)
freq_text = "AI Private"
//There's probably a way to use the list var of channels in code\game\communications.dm to make the dept channels non-hardcoded, but I wasn't in an experimentive mood. --NEO
if(!freq_text)
@@ -520,7 +522,8 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use
part_a = "<span class='suppradio'><span class='name'>"
else if (display_freq==DSQUAD_FREQ)
part_a = "<span class='dsquadradio'><span class='name'>"
else if (display_freq==AIPRIV_FREQ)
part_a = "<span class='aiprivradio'><span class='name'>"
var/quotedmsg = M.say_quote(message)
//This following recording is intended for research and feedback in the use of department radio channels.
@@ -36,7 +36,7 @@
max_w_class = 2
storage_slots = 21
can_hold = list() // any
cant_hold = list("/obj/item/weapon/disk/nuclear")
cant_hold = list(/obj/item/weapon/disk/nuclear)
/obj/item/weapon/storage/bag/trash/update_icon()
@@ -72,7 +72,7 @@
storage_slots = 50
max_combined_w_class = 200 //Doesn't matter what this is, so long as it's more or equal to storage_slots * ore.w_class
max_w_class = 3
can_hold = list("/obj/item/weapon/ore")
can_hold = list(/obj/item/weapon/ore)
// -----------------------------
@@ -87,7 +87,7 @@
max_combined_w_class = 200 //Doesn't matter what this is, so long as it's more or equal to storage_slots * plants.w_class
max_w_class = 3
w_class = 1
can_hold = list("/obj/item/weapon/reagent_containers/food/snacks/grown","/obj/item/seeds","/obj/item/weapon/grown")
can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/grown,/obj/item/seeds,/obj/item/weapon/grown)
////////
@@ -261,4 +261,4 @@
max_combined_w_class = 21
max_w_class = 3
w_class = 4 //Bigger than a book because physics
can_hold = list("/obj/item/weapon/book", "/obj/item/weapon/spellbook") //No bibles, consistent with bookcase
can_hold = list(/obj/item/weapon/book, /obj/item/weapon/spellbook) //No bibles, consistent with bookcase
+41 -37
View File
@@ -41,16 +41,16 @@
icon_state = "utilitybelt"
item_state = "utility"
can_hold = list(
"/obj/item/weapon/crowbar",
"/obj/item/weapon/screwdriver",
"/obj/item/weapon/weldingtool",
"/obj/item/weapon/wirecutters",
"/obj/item/weapon/wrench",
"/obj/item/device/multitool",
"/obj/item/device/flashlight",
"/obj/item/stack/cable_coil",
"/obj/item/device/t_scanner",
"/obj/item/device/analyzer")
/obj/item/weapon/crowbar,
/obj/item/weapon/screwdriver,
/obj/item/weapon/weldingtool,
/obj/item/weapon/wirecutters,
/obj/item/weapon/wrench,
/obj/item/device/multitool,
/obj/item/device/flashlight,
/obj/item/stack/cable_coil,
/obj/item/device/t_scanner,
/obj/item/device/analyzer)
/obj/item/weapon/storage/belt/utility/full/New()
@@ -80,19 +80,18 @@
icon_state = "medicalbelt"
item_state = "medical"
can_hold = list(
"/obj/item/device/healthanalyzer",
"/obj/item/weapon/dnainjector",
"/obj/item/weapon/reagent_containers/dropper",
"/obj/item/weapon/reagent_containers/glass/beaker",
"/obj/item/weapon/reagent_containers/glass/bottle",
"/obj/item/weapon/reagent_containers/pill",
"/obj/item/weapon/reagent_containers/syringe",
"/obj/item/weapon/reagent_containers/glass/dispenser",
"/obj/item/weapon/lighter/zippo",
"/obj/item/weapon/storage/fancy/cigarettes",
"/obj/item/weapon/storage/pill_bottle",
"/obj/item/stack/medical",
"/obj/item/device/flashlight/pen"
/obj/item/device/healthanalyzer,
/obj/item/weapon/dnainjector,
/obj/item/weapon/reagent_containers/dropper,
/obj/item/weapon/reagent_containers/glass/beaker,
/obj/item/weapon/reagent_containers/glass/bottle,
/obj/item/weapon/reagent_containers/pill,
/obj/item/weapon/reagent_containers/syringe,
/obj/item/weapon/lighter/zippo,
/obj/item/weapon/storage/fancy/cigarettes,
/obj/item/weapon/storage/pill_bottle,
/obj/item/stack/medical,
/obj/item/device/flashlight/pen
)
@@ -104,19 +103,24 @@
storage_slots = 5
max_w_class = 3 //Because the baton wouldn't fit otherwise. - Neerti
can_hold = list(
"/obj/item/weapon/melee/baton",
"/obj/item/weapon/melee/classic_baton",
"/obj/item/weapon/grenade/flashbang",
"/obj/item/weapon/reagent_containers/spray/pepper",
"/obj/item/weapon/handcuffs",
"/obj/item/device/flash",
"/obj/item/clothing/glasses",
"/obj/item/ammo_casing/shotgun",
"/obj/item/ammo_box",
"/obj/item/weapon/reagent_containers/food/snacks/donut/normal",
"/obj/item/weapon/reagent_containers/food/snacks/donut/jelly"
/obj/item/weapon/melee/baton,
/obj/item/weapon/melee/classic_baton,
/obj/item/weapon/grenade/flashbang,
/obj/item/weapon/reagent_containers/spray/pepper,
/obj/item/weapon/handcuffs,
/obj/item/device/flash,
/obj/item/clothing/glasses,
/obj/item/ammo_casing/shotgun,
/obj/item/ammo_box,
/obj/item/weapon/reagent_containers/food/snacks/donut/normal,
/obj/item/weapon/reagent_containers/food/snacks/donut/jelly,
/obj/item/device/flashlight/seclite
)
/obj/item/weapon/storage/belt/security/New()
..()
new /obj/item/device/flashlight/seclite(src)
/obj/item/weapon/storage/belt/soulstone
name = "soul stone belt"
desc = "Designed for ease of access to the shards during a fight, as to not let a single enemy spirit slip away"
@@ -124,7 +128,7 @@
item_state = "soulstonebelt"
storage_slots = 6
can_hold = list(
"/obj/item/device/soulstone"
/obj/item/device/soulstone
)
/obj/item/weapon/storage/belt/soulstone/full/New()
@@ -144,7 +148,7 @@
item_state = "champion"
storage_slots = 1
can_hold = list(
"/obj/item/clothing/mask/luchador"
/obj/item/clothing/mask/luchador
)
/obj/item/weapon/storage/belt/military
@@ -160,7 +164,7 @@
item_state = "soulstonebelt"
storage_slots = 6
can_hold = list(
"/obj/item/weapon/gun/magic/wand"
/obj/item/weapon/gun/magic/wand
)
/obj/item/weapon/storage/belt/wands/full/New()
@@ -329,7 +329,7 @@
icon = 'icons/obj/food.dmi'
icon_state = "monkeycubebox"
storage_slots = 7
can_hold = list("/obj/item/weapon/reagent_containers/food/snacks/monkeycube")
can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/monkeycube)
New()
..()
for(var/i = 1; i <= 5; i++)
@@ -483,7 +483,7 @@
item_state = "syringe_kit"
foldable = /obj/item/stack/sheet/cardboard //BubbleWrap
storage_slots=21
can_hold = list("/obj/item/weapon/light/tube", "/obj/item/weapon/light/bulb")
can_hold = list(/obj/item/weapon/light/tube, /obj/item/weapon/light/bulb)
max_combined_w_class = 21
use_to_pickup = 1 // for picking up broken bulbs, not that most people will try
@@ -48,7 +48,7 @@
icon_type = "donut"
name = "donut box"
storage_slots = 6
can_hold = list("/obj/item/weapon/reagent_containers/food/snacks/donut")
can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/donut)
/obj/item/weapon/storage/fancy/donut_box/New()
@@ -67,7 +67,7 @@
icon_type = "egg"
name = "egg box"
storage_slots = 12
can_hold = list("/obj/item/weapon/reagent_containers/food/snacks/egg")
can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/egg)
/obj/item/weapon/storage/fancy/egg_box/New()
..()
@@ -153,7 +153,7 @@
throwforce = 0
slot_flags = SLOT_BELT
storage_slots = 6
can_hold = list("/obj/item/clothing/mask/cigarette")
can_hold = list(/obj/item/clothing/mask/cigarette)
icon_type = "cigarette"
/obj/item/weapon/storage/fancy/cigarettes/New()
@@ -122,7 +122,7 @@
icon = 'icons/obj/chemical.dmi'
item_state = "contsolid"
w_class = 2.0
can_hold = list("/obj/item/weapon/reagent_containers/pill","/obj/item/weapon/dice")
can_hold = list(/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/dice)
allow_quick_gather = 1
use_to_pickup = 1
@@ -227,7 +227,7 @@
max_w_class = 8
anchored = 1.0
density = 0
cant_hold = list("/obj/item/weapon/storage/secure/briefcase")
cant_hold = list(/obj/item/weapon/storage/secure/briefcase)
New()
..()
@@ -202,7 +202,7 @@
if(can_hold.len)
var/ok = 0
for(var/A in can_hold)
if(istype(W, text2path(A) ))
if(istype(W, A))
ok = 1
break
if(!ok)
@@ -211,7 +211,7 @@
return 0
for(var/A in cant_hold) //Check for specific items which this container can't hold.
if(istype(W, text2path(A) ))
if(istype(W, A))
if(!stop_messages)
usr << "<span class='notice'>[src] cannot hold [W].</span>"
return 0
@@ -5,25 +5,25 @@
icon_state = "wallet"
w_class = 2
can_hold = list(
"/obj/item/weapon/spacecash",
"/obj/item/weapon/card",
"/obj/item/clothing/mask/cigarette",
"/obj/item/device/flashlight/pen",
"/obj/item/seeds",
"/obj/item/stack/medical",
"/obj/item/toy/crayon",
"/obj/item/weapon/coin",
"/obj/item/weapon/dice",
"/obj/item/weapon/disk",
"/obj/item/weapon/implanter",
"/obj/item/weapon/lighter",
"/obj/item/weapon/match",
"/obj/item/weapon/paper",
"/obj/item/weapon/pen",
"/obj/item/weapon/photo",
"/obj/item/weapon/reagent_containers/dropper",
"/obj/item/weapon/screwdriver",
"/obj/item/weapon/stamp")
/obj/item/weapon/spacecash,
/obj/item/weapon/card,
/obj/item/clothing/mask/cigarette,
/obj/item/device/flashlight/pen,
/obj/item/seeds,
/obj/item/stack/medical,
/obj/item/toy/crayon,
/obj/item/weapon/coin,
/obj/item/weapon/dice,
/obj/item/weapon/disk,
/obj/item/weapon/implanter,
/obj/item/weapon/lighter,
/obj/item/weapon/match,
/obj/item/weapon/paper,
/obj/item/weapon/pen,
/obj/item/weapon/photo,
/obj/item/weapon/reagent_containers/dropper,
/obj/item/weapon/screwdriver,
/obj/item/weapon/stamp)
slot_flags = SLOT_ID
var/obj/item/weapon/card/id/front_id = null
@@ -26,6 +26,7 @@
new /obj/item/device/radio/headset/heads/ce(src)
new /obj/item/weapon/storage/toolbox/mechanical(src)
new /obj/item/clothing/suit/hazardvest(src)
new /obj/item/weapon/airlock_painter(src)
new /obj/item/clothing/mask/gas(src)
new /obj/item/device/multitool(src)
new /obj/item/device/flash(src)
@@ -296,6 +296,16 @@ obj/structure/door_assembly
density = 1
state = 1
door_assembly_shuttle
name = "Shuttle Airlock Assembly"
icon_state = "door_as_shuttle1"
typetext = "shuttle"
icontext = "shuttle"
airlock_type = /obj/machinery/door/airlock/shuttle
anchored = 1
density = 1
state = 1
/obj/structure/door_assembly/attackby(obj/item/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/pen))
var/t = copytext(stripped_input(user, "Enter the name for the door.", src.name, src.created_name),1,MAX_NAME_LEN)
+22 -19
View File
@@ -3,7 +3,7 @@ var/list/admin_ranks = list() //list of all admin_rank datums
/datum/admin_rank
var/name = "NoRank"
var/rights = 0
var/list/adds
var/list/adds
var/list/subs
/datum/admin_rank/New(init_name, init_rights, list/init_adds, list/init_subs)
@@ -74,7 +74,7 @@ var/list/admin_ranks = list() //list of all admin_rank datums
next = findchar(line, "+-", prev+1, 0)
R.process_keyword(copytext(line, prev, next), previous_rights)
prev = next
previous_rights = R.rights
else
establish_db_connection()
@@ -117,7 +117,7 @@ var/list/admin_ranks = list() //list of all admin_rank datums
var/list/rank_names = list()
for(var/datum/admin_rank/R in admin_ranks)
rank_names[R.name] = R
if(config.admin_legacy_system)
//load text from file
var/list/Lines = file2list("config/admins.txt")
@@ -158,7 +158,10 @@ var/list/admin_ranks = list() //list of all admin_rank datums
while(query.NextRow())
var/ckey = ckey(query.item[1])
var/rank = ckeyEx(query.item[2])
var/datum/admins/D = new(rank, ckey) //create the admin datum and store it for later use
if(rank_names[rank] == null)
error("Admin rank ([rank]) does not exist.")
continue
var/datum/admins/D = new(rank_names[rank], ckey) //create the admin datum and store it for later use
if(!D) continue //will occur if an invalid rank is provided
D.associate(directory[ckey]) //find the client for a ckey if they are connected and associate them with the new admin datum
@@ -214,7 +217,7 @@ var/list/admin_ranks = list() //list of all admin_rank datums
return
var/datum/admins/D = admin_datums[adm_ckey]
switch(task)
if("remove")
if(alert("Are you sure you want to remove [adm_ckey]?","Message","Yes","Cancel") == "Yes")
@@ -228,57 +231,57 @@ var/list/admin_ranks = list() //list of all admin_rank datums
if("rank")
var/datum/admin_rank/R
var/list/rank_names = list("*New Rank*")
for(R in admin_ranks)
rank_names[R.name] = R
var/new_rank = input("Please select a rank", "New rank", null, null) as null|anything in rank_names
switch(new_rank)
if(null) return
if("*New Rank*")
new_rank = ckeyEx(input("Please input a new rank", "New custom rank", null, null) as null|text)
if(!new_rank) return
R = rank_names[new_rank]
if(!R) //rank with that name doesn't exist yet - make it
if(D) R = new(new_rank, D.rank.rights, D.rank.adds, D.rank.subs) //duplicate our previous admin_rank but with a new name
else R = new(new_rank) //blank new admin_rank
admin_ranks += R
if(D) //they were previously an admin
D.disassociate() //existing admin needs to be disassociated
D.rank = R //set the admin_rank as our rank
else
D = new(R,adm_ckey) //new admin
var/client/C = directory[adm_ckey] //find the client with the specified ckey (if they are logged in)
D.associate(C) //link up with the client and add verbs
message_admins("[key_name_admin(usr)] edited the admin rank of [adm_ckey] to [new_rank]")
log_admin("[key_name(usr)] edited the admin rank of [adm_ckey] to [new_rank]")
log_admin_rank_modification(adm_ckey, new_rank)
if("permissions")
if(!D) return //they're not an admin!
var/keyword = input("Input permission keyword (one at a time):\ne.g. +BAN or -FUN or +/client/proc/someverb", "Permission toggle", null, null) as null|text
if(!keyword) return
D.disassociate()
if(!findtext(D.rank.name, "([adm_ckey])")) //not a modified subrank, need to duplicate the admin_rank datum to prevent modifying others too
D.rank = new("[D.rank.name]([adm_ckey])", D.rank.rights, D.rank.adds, D.rank.subs) //duplicate our previous admin_rank but with a new name
//we don't add this clone to the admin_ranks list, as it is unique to that ckey
D.rank.process_keyword(keyword)
var/client/C = directory[adm_ckey] //find the client with the specified ckey (if they are logged in)
D.associate(C) //link up with the client and add verbs
message_admins("[key_name(usr)] added keyword [keyword] to permission of [adm_ckey]")
log_admin("[key_name(usr)] added keyword [keyword] to permission of [adm_ckey]")
log_admin_permission_modification(adm_ckey, D.rank.rights)
edit_admin_permissions()
+1 -1
View File
@@ -1,6 +1,6 @@
/obj/item/clothing/suit/armor
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs)
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/device/flashlight/seclite)
body_parts_covered = CHEST
cold_protection = CHEST|GROIN
@@ -30,6 +30,9 @@
for(var/i=0;i<7;i++) // 2 for medHUDs and 5 for secHUDs
hud_list += image('icons/mob/hud.dmi', src, "hudunknown")
if(real_name == "John McClane")
ventcrawler = 2
..()
/mob/living/carbon/human/Destroy()
@@ -331,13 +331,15 @@
name = "Ian"
real_name = "Ian" //Intended to hold the name without altering it.
gender = MALE
desc = "It's a corgi."
desc = "wow"
var/turns_since_scan = 0
var/obj/movement_target
response_help = "pets"
response_disarm = "bops"
response_harm = "kicks"
speak = list("wow", "such corgi", "much cute", "very pet")
/mob/living/simple_animal/corgi/Ian/Life()
..()
@@ -382,6 +384,9 @@
if(prob(20))
emote("stares at [movement_target.loc]'s [movement_target] with a sad puppy-face")
if(prob(2))
say(pick("wow", "such dog", "much corgi", "very cute"))
if(prob(1))
emote(pick("dances around","chases its tail"))
spawn(0)
@@ -389,6 +394,7 @@
dir = i
sleep(1)
/mob/living/simple_animal/corgi/Ian/Bump(atom/movable/AM as mob|obj, yes)
if ((!( yes ) || now_pushing))
return
@@ -417,10 +423,22 @@
now_pushing = null
//PC stuff-Sieve
/mob/living/simple_animal/corgi/Ian/Die()
say(pick("wow", "much die", "very dead", "such afterlife"))
..()
/mob/living/simple_animal/corgi/Ian/gib(animation)
say(pick("wow", "such gore", "much graphic", "very gib"))
..()
/mob/living/simple_animal/corgi/Ian/adjustBruteLoss(damage)
say(pick("wow", "much hurt", "very pain", "such damage"))
/mob/living/simple_animal/corgi/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("\blue [user] baps [name] on the nose with the rolled up [O]")
say(pick("much pain", "very hurt", "such sad"))
spawn(0)
for(var/i in list(1,2,4,8,4,2,1,2))
dir = i
+1 -1
View File
@@ -86,7 +86,7 @@
icon = 'icons/obj/items.dmi'
icon_state = "album"
item_state = "briefcase"
can_hold = list("/obj/item/weapon/photo",)
can_hold = list(/obj/item/weapon/photo)
/*
@@ -194,6 +194,7 @@
if(iscorgi(M))
if(bitecount == 0 || prob(50))
M.emote("nibbles away at the [src]")
M.say(pick("wow", "such taste", "much food", "very eat"))
bitecount++
if(bitecount >= 5)
var/sattisfaction_text = pick("burps from enjoyment", "yaps for more", "woofs twice", "looks at the area where the [src] was")
+54
View File
@@ -53,6 +53,60 @@ should be listed in the changelog upon commit tho. Thanks. -->
<!-- You can simply add changelogs using AddToChangelog.exe -->
<!-- DO NOT REMOVE OR MOVE THIS COMMENT! THIS MUST BE THE LAST NON-EMPTY LINE BEFORE THE LOGS #ADDTOCHANGELOGMARKER# -->
<div class='commit sansserif'>
<h2 class='date'>2 April 2014</h2>
<h3 class='author'>Ikarrus updated:</h3>
<ul class='changes bgimages16'>
<li class='experiment'><b>Nanotrasen Construction division is pleased to announce the unveiling of our brand now state-of-the-art Space Station 13 v2.1.3!</b></li>
<li class='rscadd'>-Scaffolding used during construction has been repurposed as an expanded maintenance around the station.</li>
<li class='tweak'>-Our new Emergency Transport Shuttle Mk III will be making its debut in times of crisis. Includes a new cargo area and extra security features.</li>
<li class='tweak'>-A redesigned brig will give security staff more peace of mind with added security features</li>
<li class='rscadd'>-The armory is now protected by a motion alarm.</li>
<li class='rscadd'>-The armory is now equipped with security hardsuits.</li>
<li class='rscadd'>-A new command EVA wing has been added to EVA Storage. Station heads of staff will be able to make use of suits stored here.</li>
<li class='rscadd'>-A new garden area will be made publicly available for everyone to enjoy some R&R during their company-endorsed break periods</li>
<li class='rscadd'>-A new Testing Lab has been added to the Science department for any field experiments that need to be run.</li>
<li class='tweak'>-The mining ore redemption machine has been relocated to the Cargo Delivery Office.</li>
</ul>
<h3 class='author'>Giacom updated:</h3>
<ul class='changes bgimages16'>
<li class='rscadd'>The syndicate suit is now black and red, because black and red is the new red.</li>
<li class='rscadd'>The Ruskie DJ Station now has a classy orange syndicate suit.</li>
<li class='rscadd'>Security officers have been equipped with the latest in flashlight technology. You can find a SecLite™ inside your security belt or you can dispense one from the security vending machine.</li>
</ul>
</div>
<div class='commit sansserif'>
<h2 class='date'>1 April 2014</h2>
<h3 class='author'>Malkevin updated:</h3>
<ul class='changes bgimages16'>
<li class='experiment'><b>Sacrifice Cult - Cult has received a massive overhaul to how it works, focusing more on cult magics and sacrificing unbelievers. The most important changes are:</b></li>
<li class='tweak'>Cult starts off with alot more cultists, 6 cultists below 30 players and 9 above. The HoP can no longer be a round start cultist but is still convertible.</li>
<li class='tweak'>Cultists start off with join, blood, self, and hell. These give the runes for the sacrifice and convert.</li>
<li class='tweak'>Conversions now require three cultists and converts no longer reward words, words must be obtained via sacrifice</li>
<li class='tweak'>Sacrificing players traps their soul in a soul stone, which can then be used on construct shells to implant the souls in them</li>
<li class='tweak'>Constructs shells can be summoned via a new rune (travel, hell, technology)</li>
<li class='bugfix'>You can no longer convert the sacrifice target, you dozzy sods</li>
<li class='experiment'>Summoning Narsie when she is not an objective leads to !!FUN!!</li>
<li class='wip'>Wrote a system to allow all mob types to be sacrificable - currently only corgis are in the new system</li>
<li class='experiment'>Holy Water will DECONVERT cultists, takes around 35 units and two minutes to succeed</li>
<li class='experiment'>Hitting a mob that contains holy water with a tome will convert that water to unholy water, conversely hitting any container that contains unholy water with a bible as chaplain will 'cleanse' the taint.</li>
<li class='experiment'>Unholy water works like a combination synaptazine and hyperzine, with a twist of branes dimarge and highly toxic to non-cultists</li>
<li class='rscadd'>Cargo can order a religious supplies crate - it contains flasks of holy water, candles, bibles, and robes </li>
<li class='experiment'>Cultists have an innate ability to communicate to the cult hive mind (BE AWARE - THIS DOES A LOT OF DAMAGE), cultists can also communicate via the new Commune option on their tomes (the Read Tome option has been shifted under the Notes option)</li>
</ul>
<h3 class='author'>MrStonedOne updated:</h3>
<ul class='changes bgimages16'>
<li class='rscadd'>Cyborgs can now use AI click shortcuts. (shift click on doors opens them, etc) (including ones added below)</li>
<li class='rscadd'>New silicon click shortcut: Control+Shift click on doors toggles access override</li>
<li class='rscadd'>New silicon click shortcut: Control click turret controls toggles them on or off</li>
<li class='rscadd'>New silicon click shortcut: Alt click turret controls toggles lethal on or off</li>
<li class='tweak'>Cyborg hotkey mode was massively improved. 1-3 selects module slot, q unloads the active module. use hotkeys-help as cyborg for more details</li>
</ul>
</div>
<div class='commit sansserif'>
<h2 class='date'>1 Aphril 2014</h2>
<h3 class='author'>Aranclanos updated:</h3>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 188 KiB

After

Width:  |  Height:  |  Size: 189 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 155 KiB

After

Width:  |  Height:  |  Size: 155 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 157 KiB

After

Width:  |  Height:  |  Size: 157 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 33 KiB

+2 -1
View File
@@ -34,6 +34,7 @@ em {font-style: normal; font-weight: bold;}
.servradio {color: #6eaa2c;}
.syndradio {color: #6D3F40;}
.dsquadradio {color: #686868;}
.aiprivradio {color: #ff00ff;}
.alert {color: #ff0000;}
h1.alert, h2.alert {color: #000000;}
@@ -63,4 +64,4 @@ h1.alert, h2.alert {color: #000000;}
BIG IMG.icon {width: 32px; height: 32px;}
</style>"}
</style>"}