@@ -157,3 +157,15 @@ CREATE TABLE `ss13_connection_log` (
|
||||
`computerid` VARCHAR(32) NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = latin1;
|
||||
|
||||
-- ------------------------------
|
||||
-- The missing connection log table
|
||||
-- tgstation.ss13_ipc_tracking
|
||||
-- ------------------------------
|
||||
CREATE TABLE `ss13_ipc_tracking` (
|
||||
`id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`player_ckey` VARCHAR(32) NOT NULL,
|
||||
`character_name` VARCHAR(255) NOT NULL,
|
||||
`tag_status` TINYINT(1) NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = latin1;
|
||||
|
||||
@@ -959,6 +959,7 @@
|
||||
#include "code\modules\events\spontaneous_appendicitis.dm"
|
||||
#include "code\modules\events\viral_infection.dm"
|
||||
#include "code\modules\events\wallrot.dm"
|
||||
#include "code\modules\ext_scripts\discord.dm"
|
||||
#include "code\modules\ext_scripts\irc.dm"
|
||||
#include "code\modules\ext_scripts\python.dm"
|
||||
#include "code\modules\flufftext\Dreaming.dm"
|
||||
|
||||
@@ -1,6 +1,48 @@
|
||||
var/list/obj/machinery/faxmachine/allfaxes = list()
|
||||
var/list/alldepartments = list("Central Command")
|
||||
|
||||
/datum/fax_repository
|
||||
var/list/received_faxes = list()
|
||||
var/list/sent_faxes = list()
|
||||
|
||||
/datum/fax_repository/proc/add_fax(var/data, var/subject, var/sender, var/received = 1)
|
||||
if (!data || !subject || !sender)
|
||||
return
|
||||
|
||||
var/list/new_fax = list("data" = data, "subject" = subject, "sender" = sender)
|
||||
switch (received)
|
||||
if (1)
|
||||
received_faxes.Add(list(new_fax))
|
||||
return received_faxes.len
|
||||
if (0)
|
||||
sent_faxes.Add(list(new_fax))
|
||||
return sent_faxes.len
|
||||
|
||||
/datum/fax_repository/proc/get_fax(var/id, var/received = 1)
|
||||
if (!id)
|
||||
return
|
||||
|
||||
switch (received)
|
||||
if (1)
|
||||
return received_faxes[id]
|
||||
if (0)
|
||||
return sent_faxes[id]
|
||||
|
||||
/datum/fax_repository/proc/get_subjects(var/received = 1)
|
||||
var/list/target_list = null
|
||||
switch (received)
|
||||
if (1)
|
||||
target_list = received_faxes
|
||||
if (0)
|
||||
target_list = sent_faxes
|
||||
|
||||
var/list/return_list = list()
|
||||
for (var/i = 1, i <= target_list.len, i++)
|
||||
return_list.Add(target_list[i]["subject"])
|
||||
return_list[target_list[i]["subject"]] = i
|
||||
|
||||
return return_list
|
||||
|
||||
/obj/machinery/faxmachine
|
||||
name = "fax machine"
|
||||
icon = 'icons/obj/library.dmi'
|
||||
@@ -179,6 +221,11 @@ var/list/alldepartments = list("Central Command")
|
||||
|
||||
/proc/Centcomm_fax(var/sent, var/sentname, var/mob/Sender)
|
||||
|
||||
if (!ticker)
|
||||
return
|
||||
|
||||
var/fax_id = ticker.fax_repository.add_fax(sent, sentname, Sender.name)
|
||||
|
||||
for(var/client/C in admins)
|
||||
var/msg = "\blue <b><font color='orange'>CENTCOMM FAX: </font>"
|
||||
if(C.holder.rights & (R_ADMIN|R_FUN|R_MOD))
|
||||
@@ -186,12 +233,14 @@ var/list/alldepartments = list("Central Command")
|
||||
else
|
||||
msg += "[key_name(Sender,0,1,0)]"
|
||||
|
||||
msg += " (<a href='?_src_=holder;CentcommFaxReply=\ref[Sender]'>RPLY</a>)</b>: Receiving '[sentname]' via secure connection ... <a href='?_src_=holder;CentcommFaxView=\ref[sent]'>view message</a>"
|
||||
msg += " (<a href='?_src_=holder;CentcommFaxReply=1'>RPLY</a>)</b>: Receiving '[sentname]' via secure connection ... <a href='?_src_=holder;CentcommFaxView=[fax_id];CentcommFaxReceived=1'>view message</a>"
|
||||
|
||||
if(C.holder.rights & (R_ADMIN|R_DUTYOFF|R_FUN))
|
||||
C << msg
|
||||
|
||||
proc/SendFax(var/sent, var/sentname, var/mob/Sender, var/dpt)
|
||||
send_to_discord("cciaa_channel", "@everyone Received fax from [Sender]. Subject: [sentname].")
|
||||
|
||||
/proc/SendFax(var/sent, var/sentname, var/mob/Sender, var/dpt)
|
||||
|
||||
for(var/obj/machinery/faxmachine/F in allfaxes)
|
||||
if( F.department == dpt )
|
||||
@@ -249,4 +298,4 @@ proc/SendFax(var/sent, var/sentname, var/mob/Sender, var/dpt)
|
||||
L = get(PDA, /mob/living/silicon)
|
||||
|
||||
if(L)
|
||||
L << "\icon[PDA] <b>Message from [sender], </b>\"[message]\" (Unable to Reply)"
|
||||
L << "\icon[PDA] <b>Message from [sender], </b>\"[message]\" (Unable to Reply)"
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
//Returns the world time in english
|
||||
proc/worldtime2text(time = world.time)
|
||||
//return "[round(time / 36000)+12]:[(time / 600 % 60) < 10 ? add_zero(time / 600 % 60, 1) : time / 600 % 60]"
|
||||
return time2text(time + world_timeofday_at_start, "hh:mm:ss")
|
||||
return time2text(time + world_timeofday_at_start, "hh:mm")
|
||||
|
||||
proc/time_stamp()
|
||||
return time2text(world.timeofday, "hh:mm:ss")
|
||||
|
||||
@@ -161,6 +161,13 @@
|
||||
|
||||
var/list/age_restrictions = list() // Holds all of the age restrictions for jobs and antag roles in a single associated list
|
||||
|
||||
var/use_discord_bot = 0
|
||||
var/discord_login = ""
|
||||
var/discord_password = ""
|
||||
var/discord_mention_everyone = 1
|
||||
var/discord_admin_url = ""
|
||||
var/discord_cciaa_url = ""
|
||||
|
||||
/datum/configuration/New()
|
||||
var/list/L = typesof(/datum/game_mode) - /datum/game_mode
|
||||
for (var/T in L)
|
||||
@@ -533,6 +540,24 @@
|
||||
if ("whitelists_on_sql")
|
||||
config.whitelists_on_sql = 1
|
||||
|
||||
if ("use_discord_bot")
|
||||
config.use_discord_bot = 1
|
||||
|
||||
if ("discord_login")
|
||||
config.discord_login = value
|
||||
|
||||
if ("discord_password")
|
||||
config.discord_password = value
|
||||
|
||||
if ("discord_mention_everyone")
|
||||
config.discord_mention_everyone = text2num(value)
|
||||
|
||||
if ("discord_admin_url")
|
||||
config.discord_admin_url = value
|
||||
|
||||
if ("discord_cciaa_url")
|
||||
config.discord_cciaa_url = value
|
||||
|
||||
else
|
||||
log_misc("Unknown setting in configuration: '[name]'")
|
||||
|
||||
|
||||
@@ -1365,3 +1365,12 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "security magnetic locks"
|
||||
group = "Security"
|
||||
|
||||
/datum/supply_packs/ipc_tag_pack
|
||||
name = "IPC/Shell Tag Implanter Crate"
|
||||
contains = list(/obj/item/weapon/implanter/ipc_tag,
|
||||
/obj/item/weapon/implanter/ipc_tag)
|
||||
cost = 40
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "IPC/Shell tag implanters"
|
||||
group = "Medical / Science"
|
||||
|
||||
@@ -162,11 +162,14 @@ Implants;
|
||||
if(M.client)
|
||||
clients++
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(!M.stat)
|
||||
surviving_humans++
|
||||
if(M.loc && M.loc.loc && M.loc.loc.type in escape_locations)
|
||||
escaped_humans++
|
||||
var/mob/living/carbon/human/H = M
|
||||
if (istype(H.species, /datum/species/machine))
|
||||
var/datum/species/machine/machine = H.species
|
||||
machine.update_tag(H, H.client)
|
||||
if (H.species)
|
||||
switch (H.species.name)
|
||||
if ("Human")
|
||||
|
||||
@@ -39,6 +39,8 @@ var/global/datum/controller/gameticker/ticker
|
||||
|
||||
var/round_end_announced = 0 // Spam Prevention. Announce round end only once.
|
||||
|
||||
var/datum/fax_repository/fax_repository
|
||||
|
||||
/datum/controller/gameticker/proc/pregame()
|
||||
login_music = pick(\
|
||||
/*'sound/music/halloween/skeletons.ogg',\
|
||||
@@ -135,6 +137,8 @@ var/global/datum/controller/gameticker/ticker
|
||||
//here to initialize the random events nicely at round start
|
||||
setup_economy()
|
||||
|
||||
fax_repository = new()
|
||||
|
||||
shuttle_controller.setup_shuttle_docks()
|
||||
|
||||
spawn(0)//Forking here so we dont have to wait for this to finish
|
||||
@@ -158,6 +162,7 @@ var/global/datum/controller/gameticker/ticker
|
||||
admins_number++
|
||||
if(admins_number == 0)
|
||||
send2adminirc("Round has started with no admins online.")
|
||||
send_to_discord("admin_channel", "@everyone Round has started with no staff online.")
|
||||
|
||||
supply_controller.process() //Start the supply shuttle regenerating points -- TLE
|
||||
master_controller.process() //Start master_controller.process()
|
||||
|
||||
@@ -326,6 +326,8 @@
|
||||
toggle_filter()
|
||||
if(!src.occupant)
|
||||
return
|
||||
for(var/obj/O in src) //why was this never here?
|
||||
O.loc = src.loc
|
||||
if(src.occupant.client)
|
||||
src.occupant.client.eye = src.occupant.client.mob
|
||||
src.occupant.client.perspective = MOB_PERSPECTIVE
|
||||
@@ -465,4 +467,4 @@
|
||||
if(user.pulling == L)
|
||||
user.pulling = null
|
||||
return
|
||||
return
|
||||
return
|
||||
|
||||
@@ -54,7 +54,8 @@
|
||||
/obj/item/robot_parts/robot_component/law_computer,
|
||||
/obj/item/robot_parts/robot_component/armour,
|
||||
/obj/item/robot_parts/robot_component/radiator,
|
||||
/obj/item/robot_parts/robot_component/bladder
|
||||
/obj/item/robot_parts/robot_component/bladder,
|
||||
/obj/item/robot_parts/robot_component/ipc_tag
|
||||
),
|
||||
"Ripley"=list(
|
||||
/obj/item/mecha_parts/chassis/ripley,
|
||||
|
||||
@@ -115,7 +115,11 @@
|
||||
return
|
||||
if (istype(I, /obj/item/weapon/crowbar))
|
||||
user << "<span class='notice'>You remove \the [powercell] from \the [src].</span>"
|
||||
powercell.loc = loc
|
||||
if (ismob(loc))
|
||||
var/mob/M = loc
|
||||
M.put_in_hands(powercell)
|
||||
else
|
||||
powercell.loc = loc
|
||||
powercell = null
|
||||
return
|
||||
if (istype(I, /obj/item/weapon/weldingtool))
|
||||
@@ -149,6 +153,20 @@
|
||||
visible_message("<span class='danger'>[src] beeps loudly and falls off \the [target]; its powercell having run out of power.</span>")
|
||||
setstatus(STATUS_INACTIVE)
|
||||
|
||||
/obj/item/device/magnetic_lock/update_icon()
|
||||
if (constructionstate && status != STATUS_BROKEN)
|
||||
icon_state = "deconstruct_[constructionstate]"
|
||||
return
|
||||
else
|
||||
switch (status)
|
||||
if (STATUS_INACTIVE)
|
||||
icon_state = "inactive"
|
||||
if (STATUS_ACTIVE)
|
||||
icon_state = "active"
|
||||
if (STATUS_BROKEN)
|
||||
icon_state = "broken"
|
||||
return
|
||||
|
||||
/obj/item/device/magnetic_lock/proc/attachto(var/obj/machinery/door/airlock/newtarget, var/mob/user as mob)
|
||||
if (status == STATUS_BROKEN)
|
||||
user << "<span class='danger'>[src] is damaged beyond repair! It cannot be used!</span>"
|
||||
@@ -191,7 +209,6 @@
|
||||
return
|
||||
|
||||
detach()
|
||||
icon_state = "inactive"
|
||||
status = newstatus
|
||||
|
||||
if (STATUS_ACTIVE)
|
||||
@@ -201,7 +218,6 @@
|
||||
return
|
||||
|
||||
attach(newtarget)
|
||||
icon_state = "active"
|
||||
status = newstatus
|
||||
|
||||
if (STATUS_BROKEN)
|
||||
@@ -214,22 +230,19 @@
|
||||
|
||||
detach(playflick)
|
||||
|
||||
icon_state = "broken"
|
||||
status = newstatus
|
||||
|
||||
update_icon()
|
||||
|
||||
/obj/item/device/magnetic_lock/proc/setconstructionstate(var/newstate)
|
||||
constructionstate = newstate
|
||||
if (newstate == 0)
|
||||
if (status == STATUS_ACTIVE)
|
||||
icon_state = "active"
|
||||
else
|
||||
icon_state = "inactive"
|
||||
else if (newstate == 2)
|
||||
if (newstate == 2)
|
||||
flick("deconstruct_2_anim", src)
|
||||
else if (newstate == 4)
|
||||
|
||||
if (newstate == 4)
|
||||
setstatus(STATUS_BROKEN)
|
||||
else
|
||||
icon_state = "deconstruct_[constructionstate]"
|
||||
|
||||
update_icon()
|
||||
|
||||
/obj/item/device/magnetic_lock/proc/detach(var/playflick = 1)
|
||||
if (target)
|
||||
@@ -241,6 +254,7 @@
|
||||
layer = LAYER_NORMAL
|
||||
|
||||
target.bracer = null
|
||||
target = null
|
||||
|
||||
processing_objects.Remove(src)
|
||||
|
||||
|
||||
@@ -114,6 +114,10 @@
|
||||
assembly.head = src
|
||||
move_into_robot(user,assembly)
|
||||
|
||||
/obj/item/robot_parts/head/New()
|
||||
..()
|
||||
|
||||
law_computer = new()
|
||||
|
||||
/obj/item/robot_parts/robot_suit
|
||||
name = "robot endoskeleton"
|
||||
|
||||
@@ -483,6 +483,22 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
icon_on = "zippoon"
|
||||
icon_off = "zippo"
|
||||
|
||||
/obj/item/weapon/lighter/green
|
||||
icon_on = "lighter-g-on"
|
||||
icon_off = "lighter-g"
|
||||
|
||||
/obj/item/weapon/lighter/red
|
||||
icon_on = "lighter-r-on"
|
||||
icon_off = "lighter-r"
|
||||
|
||||
/obj/item/weapon/lighter/yellow
|
||||
icon_on = "lighter-y-on"
|
||||
icon_off = "lighter-y"
|
||||
|
||||
/obj/item/weapon/lighter/cyan
|
||||
icon_on = "lighter-c-on"
|
||||
icon_off = "lighter-c"
|
||||
|
||||
/obj/item/weapon/lighter/random
|
||||
New()
|
||||
var/color = pick("r","c","y","g")
|
||||
@@ -508,7 +524,6 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
else
|
||||
user.apply_damage(2,BURN,"r_hand")
|
||||
user.visible_message("<span class='notice'>After a few attempts, [user] manages to light the [src], they however burn their finger in the process.</span>")
|
||||
|
||||
user.SetLuminosity(user.luminosity + 2)
|
||||
processing_objects.Add(src)
|
||||
else
|
||||
@@ -554,7 +569,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
|
||||
|
||||
/obj/item/weapon/lighter/pickup(mob/user)
|
||||
if(lit)
|
||||
if(lit && !(user.resting))
|
||||
SetLuminosity(0)
|
||||
user.SetLuminosity(user.luminosity+2)
|
||||
return
|
||||
|
||||
@@ -44,6 +44,8 @@
|
||||
I.reagents.trans_to(src.imp, 5)
|
||||
user << "\blue You inject 5 units of the solution. The syringe now contains [I.reagents.total_volume] units."
|
||||
else if (istype(I, /obj/item/weapon/implanter))
|
||||
if (istype(I, /obj/item/weapon/implanter/ipc_tag))
|
||||
return
|
||||
if (I:imp)
|
||||
if ((src.imp || I:imp.implanted))
|
||||
return
|
||||
@@ -172,4 +174,3 @@
|
||||
src.imp = new /obj/item/weapon/implant/compressed( src )
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
@@ -129,3 +129,68 @@
|
||||
S.remove_from_storage(A)
|
||||
A.loc.contents.Remove(A)
|
||||
update()
|
||||
|
||||
/obj/item/weapon/implanter/ipc_tag
|
||||
name = "IPC/Shell tag implanter"
|
||||
desc = "A special implanter used for implanting synthetics with a special tag."
|
||||
var/obj/item/robot_parts/robot_component/ipc_tag/ipc_tag = null
|
||||
|
||||
/obj/item/weapon/implanter/ipc_tag/New()
|
||||
ipc_tag = new(src)
|
||||
..()
|
||||
update()
|
||||
|
||||
/obj/item/weapon/implanter/ipc_tag/update()
|
||||
if (ipc_tag)
|
||||
icon_state = "cimplanter1"
|
||||
else
|
||||
icon_state = "cimplanter0"
|
||||
return
|
||||
|
||||
/obj/item/weapon/implanter/ipc_tag/attack(mob/M as mob, mob/user as mob)
|
||||
if (!ishuman(M))
|
||||
return
|
||||
|
||||
if (!ipc_tag)
|
||||
user << "\red [src] is empty!"
|
||||
return
|
||||
|
||||
var/mob/living/carbon/human/H = M
|
||||
if (!H.species || !istype(H.species, /datum/species/machine) || !H.organs_by_name["head"])
|
||||
user << "\red You cannot use this on a non-synthetic organism!"
|
||||
return
|
||||
|
||||
if (H.internal_organs_by_name["ipc tag"])
|
||||
user << "\red [H] is already tagged!"
|
||||
return
|
||||
|
||||
for (var/mob/O in viewers(M, null))
|
||||
O.show_message("\red [M] has been implanted by [user].", 1)
|
||||
|
||||
M.attack_log += text("\[[time_stamp()]\] <font color='orange'> Implanted with [src.name] ([src.ipc_tag.name]) by [user.name] ([user.ckey])</font>")
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] ([src.ipc_tag.name]) to implant [M.name] ([M.ckey])</font>")
|
||||
msg_admin_attack("[key_name_admin(user)] implanted [key_name_admin(M)] with [src.name] (INTENT: [uppertext(user.a_intent)]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
|
||||
|
||||
user.show_message("\red You implanted the implant into [M].")
|
||||
|
||||
ipc_tag.organ_type.replaced(H, H.organs_by_name["head"])
|
||||
|
||||
del(ipc_tag)
|
||||
update()
|
||||
|
||||
var/datum/species/machine/machine = H.species
|
||||
machine.update_tag(H, H.client)
|
||||
|
||||
/obj/item/weapon/implanter/ipc_tag/attackby(var/obj/item/robot_parts/robot_component/ipc_tag/new_tag, mob/user as mob)
|
||||
..()
|
||||
|
||||
if (!istype(new_tag))
|
||||
return
|
||||
|
||||
if (ipc_tag)
|
||||
return
|
||||
|
||||
ipc_tag = new_tag
|
||||
user.drop_item()
|
||||
new_tag.loc = src
|
||||
update()
|
||||
|
||||
@@ -31,12 +31,7 @@ var/global/normal_ooc_colour = "#002eb8"
|
||||
if(prefs.muted & MUTE_OOC)
|
||||
src << "\red You cannot use OOC (muted)."
|
||||
return
|
||||
if(handle_spam_prevention(msg,MUTE_OOC))
|
||||
return
|
||||
if(findtext(msg, "byond://"))
|
||||
src << "<B>Advertising other servers is not allowed.</B>"
|
||||
log_admin("[key_name(src)] has attempted to advertise in OOC: [msg]")
|
||||
message_admins("[key_name_admin(src)] has attempted to advertise in OOC: [msg]")
|
||||
if(handle_spam_prevention(msg,MUTE_OOC,0))
|
||||
return
|
||||
|
||||
if(holder)
|
||||
@@ -148,12 +143,7 @@ var/global/normal_ooc_colour = "#002eb8"
|
||||
if(prefs.muted & MUTE_OOC)
|
||||
src << "\red You cannot use OOC (muted)."
|
||||
return
|
||||
if(handle_spam_prevention(msg,MUTE_OOC))
|
||||
return
|
||||
if(findtext(msg, "byond://"))
|
||||
src << "<B>Advertising other servers is not allowed.</B>"
|
||||
log_admin("[key_name(src)] has attempted to advertise in OOC: [msg]")
|
||||
message_admins("[key_name_admin(src)] has attempted to advertise in OOC: [msg]")
|
||||
if(handle_spam_prevention(msg,MUTE_OOC,0))
|
||||
return
|
||||
|
||||
if(holder)
|
||||
@@ -206,4 +196,4 @@ var/global/normal_ooc_colour = "#002eb8"
|
||||
var/prefix = "(R)LOOC"
|
||||
if (C.mob in heard)
|
||||
prefix = "LOOC"
|
||||
C << "<font color='#6699CC'><span class='ooc'><span class='prefix'>[stealth][prefix]:</span> <EM>[src.key]:</EM> <span class='message'>[msg]</span></span></font>"
|
||||
C << "<font color='#6699CC'><span class='ooc'><span class='prefix'>[stealth][prefix]:</span> <EM>[src.key]:</EM> <span class='message'>[msg]</span></span></font>"
|
||||
|
||||
@@ -89,7 +89,9 @@ var/list/admin_verbs_admin = list(
|
||||
/client/proc/toggle_view_range, /*changes how far we can see*/
|
||||
/client/proc/toggle_visibily,
|
||||
/client/proc/secrets,
|
||||
/client/proc/set_ooc
|
||||
/client/proc/set_ooc,
|
||||
/client/proc/send_admin_fax,
|
||||
/client/proc/check_fax_history
|
||||
)
|
||||
|
||||
var/list/admin_verbs_ban = list(
|
||||
@@ -145,7 +147,9 @@ var/list/admin_verbs_fun = list(
|
||||
/client/proc/player_panel,
|
||||
/client/proc/secrets,
|
||||
/client/proc/send_space_ninja,
|
||||
/client/proc/toggle_view_range
|
||||
/client/proc/toggle_view_range,
|
||||
/client/proc/send_admin_fax,
|
||||
/client/proc/check_fax_history
|
||||
)
|
||||
|
||||
var/list/admin_verbs_dev = list(
|
||||
@@ -403,7 +407,9 @@ var/list/admin_verbs_duty = list(
|
||||
/client/proc/cmd_admin_create_centcom_report,
|
||||
/client/proc/cmd_duty_say,
|
||||
/client/proc/returntobody,
|
||||
/client/proc/view_duty_log
|
||||
/client/proc/view_duty_log,
|
||||
/client/proc/send_admin_fax,
|
||||
/client/proc/check_fax_history
|
||||
)
|
||||
|
||||
/client/proc/add_admin_verbs()
|
||||
|
||||
@@ -1531,49 +1531,18 @@
|
||||
H << "An encripted connection was made and a file was uploaded to your systems. \"Please stand by for a message from Central Command. Message as follows. <b>\"[input]\"</b> Message ends.\""
|
||||
|
||||
else if(href_list["CentcommFaxView"])
|
||||
var/info = locate(href_list["CentcommFaxView"])
|
||||
if (!href_list["CentcommFaxReceived"] || !ticker)
|
||||
return
|
||||
|
||||
usr << browse("<HTML><HEAD><TITLE>Centcomm Fax Message</TITLE></HEAD><BODY>[info]</BODY></HTML>", "window=Centcomm Fax Message")
|
||||
var/list/fax = ticker.fax_repository.get_fax(text2num(href_list["CentcommFaxView"]), text2num(href_list["CentcommFaxReceived"]))
|
||||
|
||||
usr << browse("<HTML><HEAD><TITLE>Centcomm Fax Message</TITLE></HEAD><BODY>[fax["data"]]</BODY></HTML>", "window=Centcomm Fax Message")
|
||||
|
||||
else if(href_list["CentcommFaxReply"])
|
||||
var/mob/living/carbon/human/H = locate(href_list["CentcommFaxReply"])
|
||||
|
||||
var/input = input(src.owner, "Please enter a message to reply to [key_name(H)] via secure connection. NOTE: BBCode does not work, but HTML tags do! Use <br> for line breaks.", "Outgoing message from Centcomm", "") as message|null
|
||||
if(!input) return
|
||||
|
||||
var/customname = input(src.owner, "Pick a title for the report", "Title") as text|null
|
||||
|
||||
//so that we alert people with certain cartidges with a PDA message.
|
||||
alertFaxes()
|
||||
|
||||
for(var/obj/machinery/faxmachine/F in machines)
|
||||
if(! (F.stat & (BROKEN|NOPOWER) ) )
|
||||
|
||||
// animate! it's alive!
|
||||
flick("faxreceive", F)
|
||||
|
||||
// give the sprite some time to flick
|
||||
spawn(20)
|
||||
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( F.loc )
|
||||
P.name = "[command_name()]- [customname]"
|
||||
P.info = input
|
||||
P.update_icon()
|
||||
|
||||
playsound(F.loc, "sound/items/polaroid1.ogg", 50, 1)
|
||||
|
||||
// Stamps
|
||||
var/image/stampoverlay = image('icons/obj/bureaucracy.dmi')
|
||||
stampoverlay.icon_state = "paper_stamp-cent"
|
||||
if(!P.stamped)
|
||||
P.stamped = new
|
||||
P.stamped += /obj/item/weapon/stamp
|
||||
P.overlays += stampoverlay
|
||||
P.stamps += "<HR><i>This paper has been stamped by the Central Command Quantum Relay.</i>"
|
||||
|
||||
src.owner << "Message reply to transmitted successfully."
|
||||
log_admin("[key_name(src.owner)] replied to a fax message from [key_name(H)]: [input]")
|
||||
message_admins("[key_name_admin(src.owner)] replied to a fax message from [key_name_admin(H)] <a href='?_src_=holder;CentcommFaxView=\ref[input]'>view message</a>", 1)
|
||||
usr.client.send_admin_fax()
|
||||
|
||||
else if (href_list["CentcommFaxHistory"])
|
||||
usr.client.check_fax_history(text2num(href_list["CentcommFaxHistory"]))
|
||||
|
||||
else if(href_list["jumpto"])
|
||||
if(!check_rights(R_ADMIN|R_FUN)) return
|
||||
|
||||
@@ -15,7 +15,7 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
|
||||
if(prefs.muted & MUTE_ADMINHELP)
|
||||
src << "<font color='red'>Error: Admin-PM: You cannot send adminhelps (Muted).</font>"
|
||||
return
|
||||
if(src.handle_spam_prevention(msg,MUTE_ADMINHELP))
|
||||
if(src.handle_spam_prevention(msg,MUTE_ADMINHELP,0))
|
||||
return
|
||||
|
||||
adminhelped = 2 //Determines if they get the message to reply by clicking the name.
|
||||
@@ -124,8 +124,10 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
|
||||
if(admin_number_present <= 0)
|
||||
if(!admin_number_afk)
|
||||
send2adminirc("ADMINHELP from [key_name(src)]: [html_decode(original_msg)] - !!No admins online!!")
|
||||
send_to_discord("admin_channel", "@everyone ADMINHELP from [key_name(src)]: [html_decode(original_msg)] - !!No admins online!!")
|
||||
else
|
||||
send2adminirc("ADMINHELP from [key_name(src)]: [html_decode(original_msg)] - !!All admins AFK ([admin_number_afk])!!")
|
||||
send_to_discord("admin_channel", "@everyone ADMINHELP from [key_name(src)]: [html_decode(original_msg)] - !!All admins AFK ([admin_number_afk])!!")
|
||||
else
|
||||
send2adminirc("ADMINHELP from [key_name(src)]: [html_decode(original_msg)]")
|
||||
feedback_add_details("admin_verb","AH") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
else adminhelp(msg) //admin we are replying to has vanished, adminhelp instead
|
||||
return
|
||||
|
||||
if (src.handle_spam_prevention(msg,MUTE_ADMINHELP))
|
||||
if (src.handle_spam_prevention(msg,MUTE_ADMINHELP,0))
|
||||
return
|
||||
|
||||
//clean the message if it's not sent by a high-rank admin
|
||||
@@ -161,4 +161,3 @@
|
||||
continue
|
||||
if(X.holder.rights & (R_ADMIN|R_MOD))
|
||||
X << "<B><font color='blue'>PM: [key_name(src, X, 0)]->IRC-Admins:</B> \blue [msg]</font>"
|
||||
|
||||
|
||||
@@ -15,9 +15,6 @@
|
||||
src << "\red You have deadchat muted."
|
||||
return
|
||||
|
||||
if (src.handle_spam_prevention(msg,MUTE_DEADCHAT))
|
||||
return
|
||||
|
||||
var/stafftype = null
|
||||
|
||||
if (src.holder.rights & R_MOD)
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
if(usr.client.prefs.muted & MUTE_PRAY)
|
||||
usr << "\red You cannot pray (muted)."
|
||||
return
|
||||
if(src.client.handle_spam_prevention(msg,MUTE_PRAY))
|
||||
if(src.client.handle_spam_prevention(msg,MUTE_PRAY,0))
|
||||
return
|
||||
|
||||
var/image/cross = image('icons/obj/storage.dmi',"bible")
|
||||
@@ -53,9 +53,11 @@
|
||||
else
|
||||
C << "[msg_start][key_name(Sender, 0, 1, 0)][msg_end]"
|
||||
|
||||
send_to_discord("cciaa_channel", "@everyone **Emergency Message** from [Sender]: [text]!")
|
||||
|
||||
/proc/Syndicate_announce(var/text , var/mob/Sender)
|
||||
var/msg = copytext(sanitize(text), 1, MAX_MESSAGE_LEN)
|
||||
msg = "\blue <b><font color=crimson>SYNDICATE:</font>[key_name(Sender, 1)] (<A HREF='?_src_=holder;adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[Sender]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[Sender]'>SM</A>) (<A HREF='?_src_=holder;adminplayerobservejump=\ref[Sender]'>JMP</A>) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;BlueSpaceArtillery=\ref[Sender]'>BSA</A>) (<A HREF='?_src_=holder;SyndicateReply=\ref[Sender]'>RPLY</A>):</b> [msg]"
|
||||
for(var/client/C in admins)
|
||||
if(C.holder.rights & (R_ADMIN|R_MOD|R_FUN))
|
||||
C << msg
|
||||
C << msg
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
feedback_inc("ban_warn",1)
|
||||
else
|
||||
if(C)
|
||||
C << "<font color='red'><BIG><B>You have been formally warned by an administrator.</B></BIG><br>Further warnings will result in an autoban.</font>"
|
||||
C << "<font color='red'><BIG><B>You have been warned by an administrator.</B></BIG><br>Further warnings will result in an autoban.</font>"
|
||||
message_admins("[key_name_admin(src)] has warned [key_name_admin(C)]. They have [MAX_WARNS-D.warns] strikes remaining.")
|
||||
message_mods("[key_name_admin(src)] has warned [key_name_admin(C)]. They have [MAX_WARNS-D.warns] strikes remaining.")
|
||||
else
|
||||
@@ -122,7 +122,7 @@
|
||||
|
||||
feedback_add_details("admin_verb","WARN-DB")
|
||||
if(C)
|
||||
C << "<font color='red'><BIG><B>You have been formally warned by an administrator.</B></BIG><br>Click <a href='byond://?src=\ref[src];warnview=1'>here</a> to review and acknowledge them!</font>"
|
||||
C << "<font color='red'><BIG><B>You have been warned by an administrator.</B></BIG><br>Click <a href='byond://?src=\ref[src];warnview=1'>here</a> to review and acknowledge them!</font>"
|
||||
message_admins("[key_name_admin(src)] has warned [warned_ckey] for: [reason].")
|
||||
message_mods("[key_name_admin(src)] has warned [warned_ckey].")
|
||||
|
||||
|
||||
@@ -246,3 +246,99 @@
|
||||
var/oldjob = M.mind.assigned_role
|
||||
job_master.FreeRole(oldjob)
|
||||
return
|
||||
|
||||
/client/proc/send_admin_fax()
|
||||
set name = "Send admin fax"
|
||||
set desc = "Send a fax from Central Command"
|
||||
set category = "Special Verbs"
|
||||
|
||||
if (!check_rights(R_ADMIN|R_DUTYOFF|R_FUN))
|
||||
usr << "\red You do not have enough powers to do this."
|
||||
return
|
||||
|
||||
if (!ticker)
|
||||
usr << "\red No ticker! Bad!"
|
||||
return
|
||||
|
||||
if (ticker.current_state < GAME_STATE_PLAYING)
|
||||
usr << "\red The game hasn't started yet!"
|
||||
return
|
||||
|
||||
var/input = input(usr, "Please enter a message to send to [station_name()] via secure connection. NOTE: BBCode does not work, but HTML tags do! Use <br> for line breaks.", "Outgoing message from Centcomm", "") as message|null
|
||||
|
||||
if (!input)
|
||||
usr << "\red Cancelled."
|
||||
return
|
||||
|
||||
var/customsender = input(usr, "Pick a Duty Officer name to use", "Name") as text|null
|
||||
if (!customsender)
|
||||
usr << "\red Name required! Cancelled."
|
||||
return
|
||||
|
||||
var/customname = input(usr, "Pick a title for the report", "Title") as text|null
|
||||
|
||||
//so that we alert people with certain cartidges with a PDA message.
|
||||
alertFaxes()
|
||||
|
||||
for (var/obj/machinery/faxmachine/F in machines)
|
||||
if (!(F.stat & (BROKEN|NOPOWER)))
|
||||
|
||||
// animate! it's alive!
|
||||
flick("faxreceive", F)
|
||||
|
||||
// give the sprite some time to flick
|
||||
spawn(20)
|
||||
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(F.loc)
|
||||
P.name = "[command_name()]- [customname]"
|
||||
P.info = input
|
||||
P.update_icon()
|
||||
|
||||
playsound(F.loc, "sound/items/polaroid1.ogg", 50, 1)
|
||||
|
||||
// Stamps
|
||||
var/image/stampoverlay = image('icons/obj/bureaucracy.dmi')
|
||||
stampoverlay.icon_state = "paper_stamp-cent"
|
||||
if (!P.stamped)
|
||||
P.stamped = new
|
||||
P.stamped += /obj/item/weapon/stamp
|
||||
P.overlays += stampoverlay
|
||||
P.stamps += "<HR><i>This paper has been stamped by the Central Command Quantum Relay.</i>"
|
||||
|
||||
var/fax_id = ticker.fax_repository.add_fax(input, customname, customsender, 0)
|
||||
|
||||
usr << "Message reply to transmitted successfully."
|
||||
log_admin("[key_name(usr)] sent a Central Command fax message: [input]")
|
||||
message_admins("[key_name_admin(usr)] sent a Central Command fax message: <a href='?_src_=holder;CentcommFaxView=[fax_id];CentcommFaxReceived=0'>view message</a>", 1)
|
||||
|
||||
/client/proc/check_fax_history()
|
||||
set name = "Check fax history"
|
||||
set desc = "Look up the faxes sent this round."
|
||||
set category = "Special Verbs"
|
||||
|
||||
if (!check_rights(R_ADMIN|R_DUTYOFF|R_FUN))
|
||||
usr << "\red You do not have enough powers to do this."
|
||||
return
|
||||
|
||||
if (!ticker)
|
||||
usr << "\red No ticker! Bad!"
|
||||
return
|
||||
|
||||
if (ticker.current_state < GAME_STATE_PLAYING)
|
||||
usr << "\red The game hasn't started yet!"
|
||||
return
|
||||
|
||||
var/data = "<center><a href='?_src_=holder;CentcommFaxReply=1'>Send New Fax</a></center>"
|
||||
data += "<hr>"
|
||||
data += "<center><b>Received Faxes:</b></center><br>"
|
||||
var/list/faxes = ticker.fax_repository.get_subjects(1)
|
||||
|
||||
for (var/i in faxes)
|
||||
data += "<a href='?_src_=holder;CentcommFaxView=[faxes[i]];CentcommFaxReceived=1'>[i]</a><br>"
|
||||
|
||||
faxes = ticker.fax_repository.get_subjects(0)
|
||||
|
||||
data += "<hr><center><b>Sent Faxes:</b></center><br>"
|
||||
for (var/i in faxes)
|
||||
data += "<a href='?_src_=holder;CentcommFaxView=[faxes[i]];CentcommFaxReceived=0'>[i]</a><br>"
|
||||
|
||||
usr << browse("<HTML><HEAD><TITLE>Centcomm Fax History</TITLE></HEAD><BODY>[data]</BODY></HTML>", "window=Centcomm Fax History")
|
||||
|
||||
@@ -87,9 +87,17 @@
|
||||
if(href_list["warnview"])
|
||||
warnings_check()
|
||||
|
||||
if(href_list["preference"])
|
||||
if(istype(mob, /mob/new_player))
|
||||
var/mob/new_player/P = mob
|
||||
if(P.ready)
|
||||
return
|
||||
prefs.process_link(src, href_list)
|
||||
..() //redirect to hsrc.Topic()
|
||||
|
||||
/client/proc/handle_spam_prevention(var/message, var/mute_type)
|
||||
/client/proc/handle_spam_prevention(var/message, var/mute_type, var/pass = 1)
|
||||
if (pass)
|
||||
return 0
|
||||
if(config.automute_on && !holder)
|
||||
if(src.last_message_time > world.time - SPAM_TIMER * 10)
|
||||
if(src.last_message_timer > SPAM_TRIGGER_AUTOMUTE)
|
||||
@@ -333,3 +341,9 @@
|
||||
'icons/spideros_icons/sos_13.png',
|
||||
'icons/spideros_icons/sos_14.png'
|
||||
)
|
||||
|
||||
/client/verb/edit_character()
|
||||
set name = "Edit Character"
|
||||
set category = "Preferences"
|
||||
set desc = "Allows you to edit your character and preferences"
|
||||
prefs.ShowChoices(src)
|
||||
|
||||
@@ -203,7 +203,7 @@ datum/preferences
|
||||
if(24 to 1000)
|
||||
return "God"
|
||||
|
||||
/datum/preferences/proc/SetSkills(mob/user)
|
||||
/datum/preferences/proc/SetSkills(client/user)
|
||||
if(SKILLS == null)
|
||||
setup_skills()
|
||||
|
||||
@@ -239,8 +239,8 @@ datum/preferences
|
||||
user << browse(HTML, "window=show_skills;size=600x800")
|
||||
return
|
||||
|
||||
/datum/preferences/proc/ShowChoices(mob/user)
|
||||
if(!user || !user.client) return
|
||||
/datum/preferences/proc/ShowChoices(client/user)
|
||||
if(!user) return
|
||||
update_preview_icon()
|
||||
user << browse_rsc(preview_icon_side, "previewicon2.png")
|
||||
user << browse_rsc(preview_icon_front, "previewicon1.png")
|
||||
@@ -437,7 +437,7 @@ datum/preferences
|
||||
banned = jobban_isbanned(user, "pAI")
|
||||
|
||||
if (banned == "Age Restricted")
|
||||
var/time = config.age_restrictions[i] - user.client.player_age
|
||||
var/time = config.age_restrictions[i] - user.player_age
|
||||
dat += "<b>Be [i]:</b> <font color=black>\[IN [time] DAYS]</font><br>"
|
||||
else if (banned)
|
||||
dat += "<b>Be [i]:</b> <font color=red><b>\[BANNED]</b></font><br>"
|
||||
@@ -455,7 +455,7 @@ datum/preferences
|
||||
|
||||
user << browse(dat, "window=preferences;size=560x736")
|
||||
|
||||
/datum/preferences/proc/SetChoices(mob/user, limit = 16, list/splitJobs = list("Chief Medical Officer"), width = 550, height = 660)
|
||||
/datum/preferences/proc/SetChoices(client/user, limit = 16, list/splitJobs = list("Chief Medical Officer"), width = 550, height = 660)
|
||||
if(!job_master)
|
||||
return
|
||||
|
||||
@@ -497,8 +497,8 @@ datum/preferences
|
||||
else if(jobban_isbanned(user, rank))
|
||||
HTML += "<del>[rank]</del></td><td><b> \[BANNED]</b></td></tr>"
|
||||
continue
|
||||
if(!job.player_old_enough(user.client))
|
||||
var/available_in_days = job.available_in_days(user.client)
|
||||
if(!job.player_old_enough(user))
|
||||
var/available_in_days = job.available_in_days(user)
|
||||
HTML += "<del>[rank]</del></td><td> \[IN [(available_in_days)] DAYS]</td></tr>"
|
||||
continue
|
||||
if((job_civilian_low & ASSISTANT) && (rank != "Assistant"))
|
||||
@@ -552,7 +552,7 @@ datum/preferences
|
||||
user << browse(HTML, "window=mob_occupation;size=[width]x[height]")
|
||||
return
|
||||
|
||||
/datum/preferences/proc/SetDisabilities(mob/user)
|
||||
/datum/preferences/proc/SetDisabilities(client/user)
|
||||
var/HTML = "<body>"
|
||||
HTML += "<tt><center>"
|
||||
HTML += "<b>Choose disabilities</b><br>"
|
||||
@@ -572,7 +572,7 @@ datum/preferences
|
||||
user << browse(HTML, "window=disabil;size=350x300")
|
||||
return
|
||||
|
||||
/datum/preferences/proc/SetRecords(mob/user)
|
||||
/datum/preferences/proc/SetRecords(client/user)
|
||||
var/HTML = "<body>"
|
||||
HTML += "<tt><center>"
|
||||
HTML += "<b>Set Character Records</b><br>"
|
||||
@@ -597,7 +597,7 @@ datum/preferences
|
||||
user << browse(HTML, "window=records;size=350x300")
|
||||
return
|
||||
|
||||
/datum/preferences/proc/SetAntagoptions(mob/user)
|
||||
/datum/preferences/proc/SetAntagoptions(client/user)
|
||||
if(uplinklocation == "" || !uplinklocation)
|
||||
uplinklocation = "PDA"
|
||||
var/HTML = "<body>"
|
||||
@@ -615,7 +615,7 @@ datum/preferences
|
||||
user << browse(HTML, "window=antagoptions")
|
||||
return
|
||||
|
||||
/datum/preferences/proc/SetFlavorText(mob/user)
|
||||
/datum/preferences/proc/SetFlavorText(client/user)
|
||||
var/HTML = "<body>"
|
||||
HTML += "<tt><center>"
|
||||
HTML += "<b>Set Flavour Text</b> <hr />"
|
||||
@@ -667,7 +667,7 @@ datum/preferences
|
||||
if(job.title != new_title)
|
||||
player_alt_titles[job.title] = new_title
|
||||
|
||||
/datum/preferences/proc/SetJob(mob/user, role)
|
||||
/datum/preferences/proc/SetJob(client/user, role)
|
||||
var/datum/job/job = job_master.GetJob(role)
|
||||
if(!job)
|
||||
user << browse(null, "window=mob_occupation")
|
||||
@@ -786,10 +786,10 @@ datum/preferences
|
||||
job_engsec_low |= job.flag
|
||||
return 1
|
||||
|
||||
/datum/preferences/proc/process_link(mob/user, list/href_list)
|
||||
/datum/preferences/proc/process_link(client/user, list/href_list)
|
||||
if(!user) return
|
||||
|
||||
if(!istype(user, /mob/new_player)) return
|
||||
//if(!istype(user, /mob/new_player)) return //WE CAN EDIT CHARACTER WHENEVER
|
||||
if(href_list["preference"] == "job")
|
||||
switch(href_list["task"])
|
||||
if("close")
|
||||
@@ -1554,7 +1554,7 @@ datum/preferences
|
||||
message_admins("[character] ([character.ckey]) has spawned with their gender as plural or neuter. Please notify coders.")
|
||||
character.gender = MALE
|
||||
|
||||
/datum/preferences/proc/open_load_dialog(mob/user)
|
||||
/datum/preferences/proc/open_load_dialog(client/user)
|
||||
var/dat = "<body>"
|
||||
dat += "<tt><center>"
|
||||
|
||||
@@ -1576,7 +1576,7 @@ datum/preferences
|
||||
user << browse(dat, "window=saves;size=300x390")
|
||||
|
||||
|
||||
/datum/preferences/proc/close_load_dialog(mob/user)
|
||||
/datum/preferences/proc/close_load_dialog(client/user)
|
||||
user << browse(null, "window=saves")
|
||||
|
||||
|
||||
@@ -1596,7 +1596,7 @@ datum/preferences
|
||||
return temp.hair_species
|
||||
|
||||
|
||||
/datum/preferences/proc/custom_robot_limb(mob/user,)
|
||||
/datum/preferences/proc/custom_robot_limb(client/user,)
|
||||
var/covering_name = input(user, "What kind of covering do you want?") as null|anything in get_limb_covering_names()
|
||||
if (!covering_name)
|
||||
return
|
||||
@@ -1637,7 +1637,7 @@ var/list/limb_connection_data
|
||||
return limb_connection_data
|
||||
|
||||
|
||||
/datum/preferences/proc/pick_organ_to_customize(mob/user,var/is_organic_species)
|
||||
/datum/preferences/proc/pick_organ_to_customize(client/user,var/is_organic_species)
|
||||
var/list/valid_targets = list("Left Leg","Right Leg","Left Arm","Right Arm","Left Foot","Right Foot","Left Hand","Right Hand")
|
||||
if (!is_organic_species)
|
||||
valid_targets.Add(list("Head","Chest","Groin"))
|
||||
@@ -1648,7 +1648,7 @@ var/list/limb_connection_data
|
||||
return limb_info[limb_name]
|
||||
|
||||
|
||||
/datum/preferences/proc/customize_limbs(mob/user,var/is_organic_species)
|
||||
/datum/preferences/proc/customize_limbs(client/user,var/is_organic_species)
|
||||
var/list/limb_info = pick_organ_to_customize(user,is_organic_species)
|
||||
if (!limb_info)
|
||||
return
|
||||
|
||||
@@ -232,23 +232,63 @@ proc/populate_gear_list()
|
||||
cost = 1
|
||||
// slot = slot_gloves
|
||||
|
||||
/datum/gear/black_gloves_unathi
|
||||
display_name = "black gloves, unathi"
|
||||
path = /obj/item/clothing/gloves/black/unathi
|
||||
cost = 1
|
||||
|
||||
/datum/gear/black_gloves_tajara
|
||||
display_name = "black gloves, tajaran"
|
||||
path = /obj/item/clothing/gloves/black/tajara
|
||||
cost = 1
|
||||
|
||||
/datum/gear/red_gloves
|
||||
display_name = "red gloves"
|
||||
path = /obj/item/clothing/gloves/red
|
||||
cost = 1
|
||||
// slot = slot_gloves
|
||||
|
||||
/datum/gear/red_gloves_unathi
|
||||
display_name = "red gloves, unathi"
|
||||
path = /obj/item/clothing/gloves/red/unathi
|
||||
cost = 1
|
||||
|
||||
/datum/gear/red_gloves_tajaran
|
||||
display_name = "red gloves, tajaran"
|
||||
path = /obj/item/clothing/gloves/red/tajara
|
||||
cost = 1
|
||||
|
||||
/datum/gear/blue_gloves
|
||||
display_name = "blue gloves"
|
||||
path = /obj/item/clothing/gloves/blue
|
||||
cost = 1
|
||||
// slot = slot_gloves
|
||||
|
||||
/datum/gear/blue_gloves_unathi
|
||||
display_name = "blue gloves, unathi"
|
||||
path = /obj/item/clothing/gloves/blue/unathi
|
||||
cost = 1
|
||||
|
||||
/datum/gear/blue_gloves_tajaran
|
||||
display_name = "blue gloves, tajaran"
|
||||
path = /obj/item/clothing/gloves/blue/tajara
|
||||
cost = 1
|
||||
|
||||
/datum/gear/orange_gloves
|
||||
display_name = "orange gloves"
|
||||
path = /obj/item/clothing/gloves/orange
|
||||
cost = 1
|
||||
// slot = slot_gloves
|
||||
// slot = slot_gloves
|
||||
|
||||
/datum/gear/orange_gloves_unathi
|
||||
display_name = "orange gloves, unathi"
|
||||
path = /obj/item/clothing/gloves/orange/unathi
|
||||
cost = 1
|
||||
|
||||
/datum/gear/orange_gloves_tajaran
|
||||
display_name = "orange gloves, tajaran"
|
||||
path = /obj/item/clothing/gloves/orange/tajara
|
||||
cost = 1
|
||||
|
||||
/datum/gear/purple_gloves
|
||||
display_name = "purple gloves"
|
||||
@@ -256,24 +296,64 @@ proc/populate_gear_list()
|
||||
cost = 1
|
||||
// slot = slot_gloves
|
||||
|
||||
/datum/gear/purple_gloves_unathi
|
||||
display_name = "purple gloves, unathi"
|
||||
path = /obj/item/clothing/gloves/purple/unathi
|
||||
cost = 1
|
||||
|
||||
/datum/gear/purple_gloves_tajaran
|
||||
display_name = "purple gloves, tajaran"
|
||||
path = /obj/item/clothing/gloves/purple/tajara
|
||||
cost = 1
|
||||
|
||||
/datum/gear/brown_gloves
|
||||
display_name = "brown gloves"
|
||||
path = /obj/item/clothing/gloves/brown
|
||||
cost = 1
|
||||
// slot = slot_gloves
|
||||
|
||||
/datum/gear/brown_gloves_unathi
|
||||
display_name = "brown gloves, unathi"
|
||||
path = /obj/item/clothing/gloves/brown/unathi
|
||||
cost = 1
|
||||
|
||||
/datum/gear/brown_gloves_tajaran
|
||||
display_name = "brown gloves, tajaran"
|
||||
path = /obj/item/clothing/gloves/brown/tajara
|
||||
cost = 1
|
||||
|
||||
/datum/gear/green_gloves
|
||||
display_name = "green gloves"
|
||||
path = /obj/item/clothing/gloves/green
|
||||
cost = 1
|
||||
// slot = slot_gloves
|
||||
|
||||
/datum/gear/green_gloves_unathi
|
||||
display_name = "green gloves, unathi"
|
||||
path = /obj/item/clothing/gloves/green/unathi
|
||||
cost = 1
|
||||
|
||||
/datum/gear/green_gloves_tajaran
|
||||
display_name = "green gloves, tajaran"
|
||||
path = /obj/item/clothing/gloves/green/tajara
|
||||
cost = 1
|
||||
|
||||
/datum/gear/white_gloves
|
||||
display_name = "white gloves"
|
||||
path = /obj/item/clothing/gloves/white
|
||||
cost = 1
|
||||
// slot = slot_gloves
|
||||
|
||||
/datum/gear/white_gloves_unathi
|
||||
display_name = "white gloves, unathi"
|
||||
path = /obj/item/clothing/gloves/white/unathi
|
||||
cost = 1
|
||||
|
||||
/datum/gear/white_gloves_tajaran
|
||||
display_name = "white gloves, tajaran"
|
||||
path = /obj/item/clothing/gloves/white/tajara
|
||||
cost = 1
|
||||
|
||||
/datum/gear/black_shoes
|
||||
display_name = "black shoes"
|
||||
path = /obj/item/clothing/shoes/black
|
||||
@@ -374,6 +454,11 @@ proc/populate_gear_list()
|
||||
path = /obj/item/clothing/tie/armband/medgreen
|
||||
cost = 1
|
||||
|
||||
/datum/gear/armband_iac
|
||||
display_name = "IAC armband"
|
||||
path = /obj/item/clothing/tie/armband/iac_armband
|
||||
cost = 1
|
||||
|
||||
/datum/gear/skirt_blue
|
||||
display_name = "blue plaid skirt"
|
||||
path = /obj/item/clothing/under/dress/plaid_blue
|
||||
@@ -592,4 +677,66 @@ proc/populate_gear_list()
|
||||
/datum/gear/cigar_case
|
||||
display_name = "cigar case"
|
||||
path = /obj/item/weapon/storage/fancy/cigars
|
||||
cost = 3
|
||||
cost = 2
|
||||
|
||||
/datum/gear/smoking_pipe
|
||||
display_name = "smoking pipe"
|
||||
path = /obj/item/clothing/mask/cigarette/pipe
|
||||
cost = 2
|
||||
|
||||
/datum/gear/cigarettes
|
||||
display_name = "pack of DromedaryCo cigarettes"
|
||||
path = /obj/item/weapon/storage/fancy/cigarettes/dromedaryco
|
||||
cost = 2
|
||||
|
||||
/datum/gear/red_lipstick
|
||||
display_name = "lipstick, red"
|
||||
path = /obj/item/weapon/lipstick
|
||||
cost = 1
|
||||
|
||||
/datum/gear/purple_lipstick
|
||||
display_name = "lipstick, purple"
|
||||
path = /obj/item/weapon/lipstick/purple
|
||||
cost = 1
|
||||
|
||||
/datum/gear/jade_lipstick
|
||||
display_name = "lipstick, jade"
|
||||
path = /obj/item/weapon/lipstick/jade
|
||||
cost = 1
|
||||
|
||||
/datum/gear/black_lipstick
|
||||
display_name = "lipstick, black"
|
||||
path = /obj/item/weapon/lipstick/black
|
||||
cost = 1
|
||||
|
||||
/datum/gear/cigarettes
|
||||
display_name = "pack of cigarettes"
|
||||
path = /obj/item/weapon/storage/fancy/cigarettes
|
||||
cost = 1
|
||||
|
||||
datum/gear/lighterg
|
||||
display_name = "lighter, green"
|
||||
path = /obj/item/weapon/lighter/green
|
||||
cost = 1
|
||||
|
||||
/datum/gear/lighterr
|
||||
display_name = "lighter, red"
|
||||
path = /obj/item/weapon/lighter/red
|
||||
cost = 1
|
||||
|
||||
/datum/gear/lightery
|
||||
display_name = "lighter, yellow"
|
||||
path = /obj/item/weapon/lighter/yellow
|
||||
cost = 1
|
||||
|
||||
/datum/gear/lighterc
|
||||
display_name = "lighter, cyan"
|
||||
path = /obj/item/weapon/lighter/cyan
|
||||
cost = 1
|
||||
|
||||
datum/gear/matches
|
||||
display_name = "matchbook"
|
||||
path = /obj/item/weapon/storage/box/matches
|
||||
cost = 1
|
||||
|
||||
|
||||
|
||||
@@ -48,9 +48,10 @@
|
||||
|
||||
/obj/item/clothing/glasses/science
|
||||
name = "Science Goggles"
|
||||
desc = "The goggles do nothing!"
|
||||
desc = "Protects against harmful chemicals!"
|
||||
icon_state = "purple"
|
||||
item_state = "glasses"
|
||||
unacidable = 1
|
||||
|
||||
/obj/item/clothing/glasses/night
|
||||
name = "Night Vision Goggles"
|
||||
|
||||
@@ -136,10 +136,80 @@
|
||||
|
||||
/obj/item/clothing/gloves/black/unathi
|
||||
name = "black gloves"
|
||||
desc = "black gloves made for Unathi use."
|
||||
desc = "Black gloves made for Unathi use."
|
||||
species_restricted = list("Unathi")
|
||||
|
||||
/obj/item/clothing/gloves/black/tajara
|
||||
name = "black gloves"
|
||||
desc = "black gloves made for Tajara use."
|
||||
desc = "Black gloves made for Tajaran use."
|
||||
species_restricted = list("Tajaran")
|
||||
|
||||
/obj/item/clothing/gloves/red/unathi
|
||||
name = "red gloves"
|
||||
desc = "Red gloves made for Unathi use."
|
||||
species_restricted = list("Unathi")
|
||||
|
||||
/obj/item/clothing/gloves/red/tajara
|
||||
name = "red gloves"
|
||||
desc = "Red gloves made for Tajaran use."
|
||||
species_restricted = list("Tajaran")
|
||||
|
||||
/obj/item/clothing/gloves/blue/unathi
|
||||
name = "blue gloves"
|
||||
desc = "Blue gloves made for Unathi use."
|
||||
species_restricted = list("Unathi")
|
||||
|
||||
/obj/item/clothing/gloves/blue/tajara
|
||||
name = "blue gloves"
|
||||
desc = "Blue gloves made for Tajaran use."
|
||||
species_restricted = list("Tajaran")
|
||||
|
||||
/obj/item/clothing/gloves/orange/unathi
|
||||
name = "orange gloves"
|
||||
desc = "Orange gloves made for Unathi use."
|
||||
species_restricted = list("Unathi")
|
||||
|
||||
/obj/item/clothing/gloves/orange/tajara
|
||||
name = "orange gloves"
|
||||
desc = "Orange gloves made for Tajaran use."
|
||||
species_restricted = list("Tajaran")
|
||||
|
||||
/obj/item/clothing/gloves/purple/unathi
|
||||
name = "purple gloves"
|
||||
desc = "Purple gloves made for Unathi use."
|
||||
species_restricted = list("Unathi")
|
||||
|
||||
/obj/item/clothing/gloves/purple/tajara
|
||||
name = "purple gloves"
|
||||
desc = "Purple gloves made for Tajaran use."
|
||||
species_restricted = list("Tajaran")
|
||||
|
||||
/obj/item/clothing/gloves/brown/unathi
|
||||
name = "brown gloves"
|
||||
desc = "Brown gloves made for Unathi use."
|
||||
species_restricted = list("Unathi")
|
||||
|
||||
/obj/item/clothing/gloves/brown/tajara
|
||||
name = "brown gloves"
|
||||
desc = "Brown gloves made for Tajaran use."
|
||||
species_restricted = list("Tajaran")
|
||||
|
||||
/obj/item/clothing/gloves/green/unathi
|
||||
name = "green gloves"
|
||||
desc = "Green gloves made for Unathi use."
|
||||
species_restricted = list("Unathi")
|
||||
|
||||
/obj/item/clothing/gloves/green/tajara
|
||||
name = "green gloves"
|
||||
desc = "Green gloves made for Tajaran use."
|
||||
species_restricted = list("Tajaran")
|
||||
|
||||
/obj/item/clothing/gloves/white/unathi
|
||||
name = "white gloves"
|
||||
desc = "White gloves made for Unathi use."
|
||||
species_restricted = list("Unathi")
|
||||
|
||||
/obj/item/clothing/gloves/white/tajara
|
||||
name = "white gloves"
|
||||
desc = "White gloves made for Tajaran use."
|
||||
species_restricted = list("Tajaran")
|
||||
@@ -0,0 +1,14 @@
|
||||
/proc/send_to_discord(var/channel, var/message)
|
||||
if (!config.use_discord_bot)
|
||||
return
|
||||
|
||||
if (channel == "admin_channel")
|
||||
channel = config.discord_admin_url
|
||||
else if (channel == "cciaa_channel")
|
||||
channel = config.discord_cciaa_url
|
||||
|
||||
if (!config.discord_mention_everyone && findtext(message, "@everyone"))
|
||||
replacetextEx(message, "@everyone", "")
|
||||
|
||||
ext_python("discordbot_message.py", "[config.discord_login] [config.discord_password] [channel] [message]")
|
||||
return
|
||||
@@ -11,9 +11,6 @@
|
||||
src << "\red You cannot talk in deadchat (muted)."
|
||||
return
|
||||
|
||||
if (src.client.handle_spam_prevention(message,MUTE_DEADCHAT))
|
||||
return
|
||||
|
||||
. = src.say_dead(message)
|
||||
|
||||
|
||||
@@ -33,9 +30,6 @@
|
||||
src << "\red You cannot emote in deadchat (muted)."
|
||||
return
|
||||
|
||||
if(src.client.handle_spam_prevention(message, MUTE_DEADCHAT))
|
||||
return
|
||||
|
||||
. = src.emote_dead(message)
|
||||
|
||||
/*
|
||||
|
||||
@@ -18,8 +18,6 @@
|
||||
if (client.prefs.muted & MUTE_IC)
|
||||
src << "\red You cannot send IC messages (muted)."
|
||||
return
|
||||
if (src.client.handle_spam_prevention(message,MUTE_IC))
|
||||
return
|
||||
if (stat)
|
||||
return
|
||||
if(!(message))
|
||||
@@ -124,4 +122,4 @@
|
||||
for(var/mob/O in hearers(src, null))
|
||||
O.show_message(message, m_type)
|
||||
//Foreach goto(746)
|
||||
return
|
||||
return
|
||||
|
||||
@@ -18,8 +18,6 @@
|
||||
if (client.prefs.muted & MUTE_IC)
|
||||
src << "\red You cannot send IC messages (muted)."
|
||||
return
|
||||
if (src.client.handle_spam_prevention(message,MUTE_IC))
|
||||
return
|
||||
if (stat)
|
||||
return
|
||||
if(!(message))
|
||||
@@ -132,4 +130,4 @@
|
||||
for(var/mob/O in hearers(src, null))
|
||||
O.show_message(message, m_type)
|
||||
//Foreach goto(746)
|
||||
return
|
||||
return
|
||||
|
||||
@@ -18,8 +18,6 @@
|
||||
if (client.prefs.muted & MUTE_IC)
|
||||
src << "\red You cannot send IC messages (muted)."
|
||||
return
|
||||
if (src.client.handle_spam_prevention(message,MUTE_IC))
|
||||
return
|
||||
if (stat)
|
||||
return
|
||||
if(!(message))
|
||||
@@ -124,4 +122,4 @@
|
||||
for(var/mob/O in hearers(src, null))
|
||||
O.show_message(message, m_type)
|
||||
//Foreach goto(746)
|
||||
return
|
||||
return
|
||||
|
||||
@@ -19,8 +19,6 @@
|
||||
if (client.prefs.muted & MUTE_IC)
|
||||
src << "\red You cannot send IC messages (muted)."
|
||||
return
|
||||
if (src.client.handle_spam_prevention(message,MUTE_IC))
|
||||
return
|
||||
if (stat)
|
||||
return
|
||||
if(!(message))
|
||||
@@ -79,4 +77,4 @@
|
||||
O.show_message(message, m_type)
|
||||
else if (m_type & 2)
|
||||
for (var/mob/O in hearers(src.loc, null))
|
||||
O.show_message(message, m_type)
|
||||
O.show_message(message, m_type)
|
||||
|
||||
@@ -74,8 +74,6 @@
|
||||
if (client.prefs.muted & MUTE_IC)
|
||||
src << "\red You cannot send IC messages (muted)."
|
||||
return
|
||||
if (src.client.handle_spam_prevention(message,MUTE_IC))
|
||||
return
|
||||
if (stat)
|
||||
return
|
||||
if(!(message))
|
||||
@@ -618,4 +616,4 @@
|
||||
HTML += "<hr />"
|
||||
HTML +="<a href='?src=\ref[src];flavor_change=done'>\[Done\]</a>"
|
||||
HTML += "<tt>"
|
||||
src << browse(HTML, "window=flavor_changes;size=430x300")
|
||||
src << browse(HTML, "window=flavor_changes;size=430x300")
|
||||
|
||||
@@ -61,6 +61,9 @@
|
||||
|
||||
msg += "<EM>[src.name]</EM>!\n"
|
||||
|
||||
if (species && species.has_organ["ipc tag"] && internal_organs_by_name["ipc tag"])
|
||||
msg += "[t_He] [t_is] wearing a tag designating them as an Integrated Positronic Chassis/Shell.\n"
|
||||
|
||||
//uniform
|
||||
if(w_uniform && !skipjumpsuit)
|
||||
//Ties
|
||||
|
||||
@@ -610,6 +610,7 @@ See code\modules\mob\new_player\preferences_setup.dm for where it's used.
|
||||
"radiator" = /datum/organ/internal/machine/radiator,
|
||||
"chemical containment" = /datum/organ/internal/machine/bladder,
|
||||
"diagnosis unit" = /datum/organ/internal/machine/diagnosis_unit,
|
||||
"ipc tag" = /datum/organ/internal/machine/ipc_tag
|
||||
)
|
||||
/datum/species/machine/create_organs(var/mob/living/carbon/human/H)
|
||||
..()
|
||||
@@ -618,6 +619,56 @@ See code\modules\mob\new_player\preferences_setup.dm for where it's used.
|
||||
if (isnull(brain_datum.machine_brain_type))
|
||||
brain_datum.machine_brain_type="Posibrain"
|
||||
|
||||
/datum/species/machine/proc/check_tag(var/mob/living/carbon/human/new_machine, var/client/player)
|
||||
if (!new_machine || !player)
|
||||
return
|
||||
|
||||
establish_db_connection()
|
||||
|
||||
if (dbcon.IsConnected())
|
||||
var/datum/organ/internal/machine/ipc_tag/tag = new_machine.internal_organs_by_name["ipc tag"]
|
||||
|
||||
var/status = 0
|
||||
var/list/query_details = list(":ckey" = player.ckey, ":character_name" = player.prefs.real_name)
|
||||
var/DBQuery/query = dbcon.NewQuery("SELECT tag_status FROM ss13_ipc_tracking WHERE player_ckey = :ckey AND character_name = :character_name")
|
||||
query.Execute(query_details)
|
||||
|
||||
if (query.NextRow())
|
||||
status = text2num(query.item[1])
|
||||
else
|
||||
var/DBQuery/log_query = dbcon.NewQuery("INSERT INTO ss13_ipc_tracking (player_ckey, character_name) VALUES (:ckey, :character_name)")
|
||||
log_query.Execute(query_details)
|
||||
|
||||
if (!status)
|
||||
new_machine.internal_organs_by_name.Remove("ipc tag")
|
||||
new_machine.internal_organs.Remove(tag)
|
||||
del(tag)
|
||||
|
||||
/datum/species/machine/proc/update_tag(var/mob/living/carbon/human/target, var/client/player)
|
||||
if (!target || !player)
|
||||
return
|
||||
|
||||
establish_db_connection()
|
||||
|
||||
if (dbcon.IsConnected())
|
||||
var/status = 0
|
||||
var/sql_status = 0
|
||||
if (target.internal_organs_by_name["ipc tag"])
|
||||
status = 1
|
||||
|
||||
var/list/query_details = list(":ckey" = player.ckey, ":character_name" = target.real_name)
|
||||
var/DBQuery/query = dbcon.NewQuery("SELECT tag_status FROM ss13_ipc_tracking WHERE player_ckey = :ckey AND character_name = :character_name")
|
||||
query.Execute(query_details)
|
||||
|
||||
if (query.NextRow())
|
||||
sql_status = text2num(query.item[1])
|
||||
if (sql_status == status)
|
||||
return
|
||||
|
||||
query_details.Add(":status")
|
||||
query_details[":status"] = status
|
||||
var/DBQuery/update_query = dbcon.NewQuery("UPDATE ss13_ipc_tracking SET tag_status = :status WHERE player_ckey = :ckey AND character_name = :character_name")
|
||||
update_query.Execute(query_details)
|
||||
|
||||
/datum/species/bug
|
||||
name = "Vaurca"
|
||||
|
||||
@@ -12,8 +12,7 @@
|
||||
if (src.client.prefs.muted & MUTE_IC)
|
||||
src << "\red You cannot whisper (muted)."
|
||||
return
|
||||
|
||||
if (src.client.handle_spam_prevention(message,MUTE_IC))
|
||||
if (client.handle_spam_prevention(message, MUTE_IC, 0))
|
||||
return
|
||||
|
||||
if (src.stat == 2)
|
||||
@@ -78,12 +77,12 @@
|
||||
temp_message[H] = ninjaspeak(temp_message[H])
|
||||
pick_list -= H
|
||||
message = list2text(temp_message, " ")
|
||||
message = replacetext(message, "o", "¤")
|
||||
message = replacetext(message, "p", "þ")
|
||||
message = replacetext(message, "l", "£")
|
||||
message = replacetext(message, "s", "§")
|
||||
message = replacetext(message, "u", "µ")
|
||||
message = replacetext(message, "b", "ß")
|
||||
message = replacetext(message, "o", "�")
|
||||
message = replacetext(message, "p", "�")
|
||||
message = replacetext(message, "l", "�")
|
||||
message = replacetext(message, "s", "�")
|
||||
message = replacetext(message, "u", "�")
|
||||
message = replacetext(message, "b", "�")
|
||||
|
||||
//TODO: handle_speech_problems
|
||||
if (src.stuttering)
|
||||
|
||||
@@ -17,8 +17,6 @@
|
||||
if (client.prefs.muted & MUTE_IC)
|
||||
src << "\red You cannot send IC messages (muted)."
|
||||
return
|
||||
if (src.client.handle_spam_prevention(message,MUTE_IC))
|
||||
return
|
||||
if (stat)
|
||||
return
|
||||
if(!(message))
|
||||
@@ -73,4 +71,4 @@
|
||||
for(var/mob/O in hearers(src, null))
|
||||
O.show_message(message, m_type)
|
||||
//Foreach goto(746)
|
||||
return
|
||||
return
|
||||
|
||||
@@ -19,8 +19,6 @@
|
||||
if (client.prefs.muted & MUTE_IC)
|
||||
src << "\red You cannot send IC messages (muted)."
|
||||
return
|
||||
if (src.client.handle_spam_prevention(message,MUTE_IC))
|
||||
return
|
||||
if (stat)
|
||||
return
|
||||
if(!(message))
|
||||
@@ -137,4 +135,4 @@
|
||||
for(var/mob/O in hearers(src, null))
|
||||
O.show_message(message, m_type)
|
||||
//Foreach goto(746)
|
||||
return
|
||||
return
|
||||
|
||||
@@ -13,8 +13,6 @@
|
||||
if(client.prefs.muted & MUTE_IC)
|
||||
src << "You cannot send IC messages (muted)."
|
||||
return
|
||||
if (src.client.handle_spam_prevention(message,MUTE_IC))
|
||||
return
|
||||
if (stat)
|
||||
return
|
||||
if(!(message))
|
||||
@@ -99,4 +97,4 @@
|
||||
else
|
||||
for(var/mob/O in hearers(src, null))
|
||||
O.show_message(message, m_type)
|
||||
return
|
||||
return
|
||||
|
||||
@@ -206,6 +206,10 @@
|
||||
icon_state_broken = "bladder_broken"
|
||||
organ_type = new /obj/item/organ/machine/bladder()
|
||||
|
||||
/obj/item/robot_parts/robot_component/ipc_tag
|
||||
name = "IPC tag"
|
||||
organ_type = new /obj/item/organ/machine/ipc_tag()
|
||||
|
||||
//
|
||||
//Robotic Component Analyser, basically a health analyser for robots
|
||||
//
|
||||
|
||||
@@ -14,8 +14,6 @@
|
||||
if(client.prefs.muted & MUTE_IC)
|
||||
src << "You cannot send IC messages (muted)."
|
||||
return
|
||||
if (src.client.handle_spam_prevention(message,MUTE_IC))
|
||||
return
|
||||
if (stat)
|
||||
return
|
||||
if(!(message))
|
||||
@@ -217,4 +215,4 @@
|
||||
else
|
||||
for(var/mob/O in hearers(src, null))
|
||||
O.show_message(message, m_type)
|
||||
return
|
||||
return
|
||||
|
||||
@@ -31,8 +31,6 @@
|
||||
if(client.prefs.muted & MUTE_IC)
|
||||
src << "You cannot send IC messages (muted)."
|
||||
return
|
||||
if (src.client.handle_spam_prevention(message,MUTE_IC))
|
||||
return
|
||||
|
||||
message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN))
|
||||
|
||||
|
||||
@@ -11,8 +11,6 @@
|
||||
if(client.prefs.muted & MUTE_IC)
|
||||
src << "\red You cannot speak in IC (muted)."
|
||||
return
|
||||
if (src.client.handle_spam_prevention(message,MUTE_IC))
|
||||
return
|
||||
|
||||
if(istype(src.loc,/mob/living/simple_animal/borer))
|
||||
|
||||
@@ -135,8 +133,6 @@
|
||||
if(client.prefs.muted & MUTE_IC)
|
||||
src << "\red You cannot speak in IC (muted)."
|
||||
return
|
||||
if (src.client.handle_spam_prevention(message,MUTE_IC))
|
||||
return
|
||||
|
||||
if (copytext(message, 1, 2) == "*")
|
||||
return emote(copytext(message, 2))
|
||||
|
||||
@@ -9,8 +9,6 @@
|
||||
if(client.prefs.muted & MUTE_IC)
|
||||
src << "\red You cannot speak in IC (muted)."
|
||||
return
|
||||
if (src.client.handle_spam_prevention(message,MUTE_IC))
|
||||
return
|
||||
|
||||
if(istype(src.loc,/mob/living/simple_animal/borer))
|
||||
|
||||
|
||||
@@ -16,8 +16,6 @@
|
||||
if(client.prefs.muted & MUTE_IC)
|
||||
src << "\red You cannot speak in IC (muted)."
|
||||
return
|
||||
if (src.client.handle_spam_prevention(message,MUTE_IC))
|
||||
return
|
||||
|
||||
if (copytext(message, 1, 2) == "*")
|
||||
return emote(copytext(message, 2))
|
||||
@@ -39,4 +37,4 @@
|
||||
if (istype(M, /mob/new_player))
|
||||
continue
|
||||
else if(M.stat == 2 && M.client.prefs.toggles & CHAT_GHOSTEARS)
|
||||
M << "[src.truename] whispers to [host], \"[message]\""
|
||||
M << "[src.truename] whispers to [host], \"[message]\""
|
||||
|
||||
@@ -219,10 +219,7 @@
|
||||
usr << "<b>Thank you for your vote!</b>"
|
||||
usr << browse(null,"window=privacypoll")
|
||||
|
||||
if(!ready && href_list["preference"])
|
||||
if(client)
|
||||
client.prefs.process_link(src, href_list)
|
||||
else if(!href_list["late_join"])
|
||||
if(!href_list["late_join"])
|
||||
new_player_panel()
|
||||
|
||||
if(href_list["showpoll"])
|
||||
@@ -404,6 +401,10 @@
|
||||
if(is_species_whitelisted(chosen_species) || has_admin_rights())
|
||||
new_character = new(loc, client.prefs.species)
|
||||
|
||||
if (istype(chosen_species, /datum/species/machine))
|
||||
var/datum/species/machine/chose_machine = chosen_species
|
||||
chose_machine.check_tag(new_character, client)
|
||||
|
||||
if(!new_character)
|
||||
new_character = new(loc)
|
||||
|
||||
|
||||
@@ -12,6 +12,15 @@
|
||||
if(say_disabled) //This is here to try to identify lag problems
|
||||
usr << "\red Speech is currently admin-disabled."
|
||||
return
|
||||
|
||||
if (client)
|
||||
if (istype(src, /mob/dead/observer))
|
||||
if (client.handle_spam_prevention(message, MUTE_DEADCHAT, 0))
|
||||
return
|
||||
else
|
||||
if (client.handle_spam_prevention(message, MUTE_IC, 0))
|
||||
return
|
||||
|
||||
//Let's try to make users fix their errors - we try to detect single, out-of-place letters and 'unintended' words
|
||||
/*
|
||||
var/first_letter = copytext(message,1,2)
|
||||
@@ -37,6 +46,14 @@
|
||||
usr << "\red Speech is currently admin-disabled."
|
||||
return
|
||||
|
||||
if (client)
|
||||
if (istype(src, /mob/dead/observer))
|
||||
if (client.handle_spam_prevention(message, MUTE_DEADCHAT, 0))
|
||||
return
|
||||
else
|
||||
if (client.handle_spam_prevention(message, MUTE_IC, 0))
|
||||
return
|
||||
|
||||
message = strip_html_properly(message)
|
||||
//We do not have typing indicator code yet - Waiting for the okay from Skull before considering adding - Jamini
|
||||
// set_typing_indicator(0)
|
||||
|
||||
@@ -228,36 +228,53 @@
|
||||
|
||||
/datum/organ/internal/machine
|
||||
removed_type = /obj/item/organ/machine
|
||||
robotic = 2
|
||||
|
||||
/datum/organ/internal/machine/process()
|
||||
return
|
||||
|
||||
/obj/item/organ/machine
|
||||
robotic = 2
|
||||
|
||||
/datum/organ/internal/machine/radiator
|
||||
name = "internal cooling unit"
|
||||
parent_organ = "chest"
|
||||
robotic = 2
|
||||
min_bruised_damage = 15
|
||||
min_broken_damage = 40
|
||||
removed_type = /obj/item/organ/machine/radiator
|
||||
var/seized = 0
|
||||
|
||||
/datum/organ/internal/machine/radiator/process()
|
||||
if (seized && owner.internal_organs_by_name["diagnosis_unit"])
|
||||
var/datum/organ/internal/machine/diagnosis_unit/diagnosis_unit = owner.internal_organs_by_name["diagnosis_unit"]
|
||||
seized = diagnosis_unit.overload
|
||||
|
||||
/datum/organ/internal/machine/radiator/is_broken()
|
||||
if (seized)
|
||||
return 1
|
||||
|
||||
..()
|
||||
|
||||
/obj/item/organ/machine/radiator
|
||||
name = "internal cooling unit"
|
||||
icon_state = "radiator"
|
||||
organ_tag = "radiator"
|
||||
organ_type = /datum/organ/internal/machine/radiator
|
||||
robotic = 2
|
||||
|
||||
/obj/item/organ/machine/radiator/exposed_to_the_world()
|
||||
var/obj/item/robot_parts/robot_component/radiator/Radiator = new(src.loc)
|
||||
if(organ_data.damage)
|
||||
Radiator.brute = organ_data.damage
|
||||
if (organ_data)
|
||||
var/datum/organ/internal/machine/radiator/old_radiator = organ_data
|
||||
if (old_radiator.seized)
|
||||
Radiator.desc += "<font color='blue'>It looks seized.</font>"
|
||||
del(src)
|
||||
return Radiator
|
||||
|
||||
/datum/organ/internal/machine/bladder
|
||||
name = "chemical containment"
|
||||
parent_organ = "groin"
|
||||
robotic = 2
|
||||
removed_type = /obj/item/organ/machine/bladder
|
||||
|
||||
/datum/organ/internal/machine/bladder/process()
|
||||
@@ -290,7 +307,6 @@
|
||||
icon_state = "bladder"
|
||||
organ_tag = "chemical containment"
|
||||
organ_type = /datum/organ/internal/machine/bladder
|
||||
robotic = 2
|
||||
|
||||
/obj/item/organ/machine/bladder/replaced(var/mob/living/carbon/human/target)
|
||||
if(istype(target) && (target.species.flags & IS_SYNTHETIC))
|
||||
@@ -318,15 +334,25 @@
|
||||
/datum/organ/internal/machine/diagnosis_unit
|
||||
name = "diagnosis unit"
|
||||
parent_organ = "head"
|
||||
robotic = 2
|
||||
removed_type = /obj/item/organ/machine/diagnosis_unit
|
||||
var/overload = 0
|
||||
|
||||
/datum/organ/internal/machine/diagnosis_unit/process()
|
||||
if (!overload)
|
||||
return
|
||||
|
||||
if (owner.internal_organs_by_name["radiator"])
|
||||
var/datum/organ/internal/machine/radiator/radiator = owner.internal_organs_by_name["radiator"]
|
||||
radiator.seized = 1
|
||||
|
||||
var/list/pain_messages = list("ERROR: damage detected!", "System failure detected!", "Runtime errors present! System failure imminent!", "Software integrity compromised!", "Hardware malfunction detected!")
|
||||
owner.custom_pain(pick(pain_messages), 1, 1)
|
||||
|
||||
/obj/item/organ/machine/diagnosis_unit
|
||||
name = "diagnosis unit"
|
||||
icon_state = "diagnosis_unit"
|
||||
organ_tag = "diagnosis unit"
|
||||
organ_type = /datum/organ/internal/machine/diagnosis_unit
|
||||
robotic = 2
|
||||
|
||||
/obj/item/organ/machine/diagnosis_unit/exposed_to_the_world()
|
||||
var/obj/item/robot_parts/robot_component/diagnosis_unit/Diagnosis_unit = new(src.loc)
|
||||
@@ -348,6 +374,30 @@
|
||||
del(src)
|
||||
return Eyes
|
||||
|
||||
/datum/organ/internal/machine/ipc_tag
|
||||
name = "IPC tag"
|
||||
parent_organ = "head"
|
||||
removed_type = /obj/item/organ/machine/ipc_tag
|
||||
|
||||
/obj/item/organ/machine/ipc_tag
|
||||
name = "IPC tag"
|
||||
organ_tag = "ipc tag"
|
||||
organ_type = /datum/organ/internal/machine/ipc_tag
|
||||
|
||||
/obj/item/organ/machine/ipc_tag/removed(var/mob/living/carbon/human/target, var/mob/living/user)
|
||||
..()
|
||||
|
||||
if (istype(target) && target.internal_organs_by_name["diagnosis unit"])
|
||||
var/datum/organ/internal/machine/diagnosis_unit/diagnosis_unit = target.internal_organs_by_name["diagnosis unit"]
|
||||
diagnosis_unit.overload = 1
|
||||
|
||||
/obj/item/organ/machine/ipc_tag/exposed_to_the_world()
|
||||
var/obj/item/robot_parts/robot_component/ipc_tag/tag = new(src.loc)
|
||||
if (organ_data.damage)
|
||||
tag.brute = organ_data.damage
|
||||
del(src)
|
||||
return tag
|
||||
|
||||
/obj/item/organ/vaurca/neuralsocket
|
||||
name = "neural socket"
|
||||
organ_tag = "neural socket"
|
||||
@@ -371,5 +421,6 @@
|
||||
organ_tag = "tracheae"
|
||||
icon = 'icons/mob/alien_organs.dmi'
|
||||
icon_state = "tracheae"
|
||||
|
||||
/obj/item/organ/vaurca/tracheae/removed()
|
||||
return
|
||||
|
||||
@@ -53,10 +53,10 @@ mob/living/carbon/proc/pain(var/partname, var/amount, var/force, var/burning = 0
|
||||
|
||||
// message is the custom message to be displayed
|
||||
// flash_strength is 0 for weak pain flash, 1 for strong pain flash
|
||||
mob/living/carbon/human/proc/custom_pain(var/message, var/flash_strength)
|
||||
mob/living/carbon/human/proc/custom_pain(var/message, var/flash_strength, var/override_no_pain = 0)
|
||||
if(stat >= 1) return
|
||||
|
||||
if(species && species.flags & NO_PAIN) return
|
||||
if(species && species.flags & NO_PAIN && !override_no_pain) return
|
||||
|
||||
if(reagents.has_reagent("tramadol"))
|
||||
return
|
||||
@@ -72,7 +72,7 @@ mob/living/carbon/human/proc/custom_pain(var/message, var/flash_strength)
|
||||
if(msg && ((msg != last_pain_message) || (world.time >= next_pain_time)))
|
||||
last_pain_message = msg
|
||||
src << msg
|
||||
next_pain_time = world.time + 100
|
||||
next_pain_time = world.time + 200
|
||||
|
||||
mob/living/carbon/human/proc/handle_pain()
|
||||
// not when sleeping
|
||||
@@ -127,4 +127,4 @@ mob/living/carbon/human/proc/handle_pain()
|
||||
toxDamageMessage = "Your body aches all over, it's driving you mad."
|
||||
|
||||
if(toxDamageMessage && prob(toxMessageProb))
|
||||
src.custom_pain(toxDamageMessage, getToxLoss() >= 15)
|
||||
src.custom_pain(toxDamageMessage, getToxLoss() >= 15)
|
||||
|
||||
@@ -2102,11 +2102,14 @@ datum
|
||||
H << "<span class='warning'>Your mask protects you from the acid.</span>"
|
||||
return
|
||||
|
||||
if(H.glasses) //Doesn't protect you from the acid but can melt anyways!
|
||||
if(H.glasses) //Doesn't protect you from the acid but can melt anyways, unless SCIENCE!
|
||||
if(prob(meltprob) && !H.glasses.unacidable)
|
||||
H << "<span class='danger'>Your glasses melts away!</span>"
|
||||
del (H.glasses)
|
||||
H.update_inv_glasses(0)
|
||||
else
|
||||
H << "<span class='danger'>Your glasses protect you from the acid!</span>"
|
||||
return
|
||||
|
||||
else if(ismonkey(M))
|
||||
var/mob/living/carbon/monkey/MK = M
|
||||
|
||||
@@ -22,7 +22,6 @@
|
||||
world.log << "Your server's byond version does not meet the recommended requirements for this server. Please update BYOND"
|
||||
|
||||
load_configuration()
|
||||
load_visibility()
|
||||
|
||||
if(config && config.server_name != null && config.server_suffix && world.port > 0)
|
||||
// dumb and hardcoded but I don't care~
|
||||
@@ -254,24 +253,28 @@ var/master_server_password
|
||||
fdel(F)
|
||||
F << the_mode
|
||||
|
||||
/world/proc/load_visibility()
|
||||
var/list/Lines = file2list("data/hubsetting.txt")
|
||||
if (Lines.len)
|
||||
if (Lines[1] && Lines[2])
|
||||
log_misc("Saved visibility is: [Lines[1]]; saved override is: [Lines[2]].")
|
||||
if (text2num(Lines[2]) == 1)
|
||||
visibility = text2num(Lines[1])
|
||||
else
|
||||
if (time2text(realtime, "Day") == ("Saturday" || "Sunday"))
|
||||
visibility = 0
|
||||
else
|
||||
visibility = 1
|
||||
save_visibility(visibility, 0)
|
||||
/hook/startup/proc/loadVisibility()
|
||||
world.load_visibility()
|
||||
return 1
|
||||
|
||||
/world/proc/save_visibility(var/the_visibility, var/override = 0)
|
||||
/world/proc/load_visibility()
|
||||
var/list/saved_settings = file2list("data/hubsetting.txt")
|
||||
var/list/invisible_days = list("Saturday", "Sunday")
|
||||
if (saved_settings.len == 2)
|
||||
log_misc("Saved visibility is: [saved_settings[1]]; saved override is: [saved_settings[2]].")
|
||||
if (text2num(saved_settings[2]) == 1)
|
||||
world.visibility = text2num(saved_settings[1])
|
||||
else
|
||||
if (time2text(realtime, "Day") in invisible_days)
|
||||
world.visibility = 0
|
||||
else
|
||||
world.visibility = 1
|
||||
save_visibility(world.visibility, 0)
|
||||
|
||||
/world/proc/save_visibility(var/visibility, var/override = 0)
|
||||
var/F = file("data/hubsetting.txt")
|
||||
fdel(F)
|
||||
F << the_visibility
|
||||
F << visibility
|
||||
F << override
|
||||
|
||||
/hook/startup/proc/loadMOTD()
|
||||
@@ -442,4 +445,4 @@ var/world_timeofday_at_start
|
||||
|
||||
hook/startup/proc/store_timeofday_at_start()
|
||||
world_timeofday_at_start = world.timeofday
|
||||
return 1
|
||||
return 1
|
||||
|
||||
|
Before Width: | Height: | Size: 122 KiB After Width: | Height: | Size: 122 KiB |
|
Before Width: | Height: | Size: 152 KiB After Width: | Height: | Size: 153 KiB |
|
Before Width: | Height: | Size: 152 KiB After Width: | Height: | Size: 151 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 6.2 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 250 KiB After Width: | Height: | Size: 250 KiB |
|
Before Width: | Height: | Size: 59 KiB After Width: | Height: | Size: 59 KiB |
|
Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 7.4 KiB |
|
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 5.1 KiB |
|
Before Width: | Height: | Size: 6.2 KiB After Width: | Height: | Size: 6.1 KiB |
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 6.9 KiB After Width: | Height: | Size: 6.8 KiB |
|
Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 5.9 KiB |
|
Before Width: | Height: | Size: 86 KiB After Width: | Height: | Size: 86 KiB |
@@ -1157,7 +1157,7 @@
|
||||
"awm" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (EAST)"; icon_state = "intact-scrubbers"; dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor{icon_state = "dark"},/area/security/cell_block)
|
||||
"awn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (EAST)"; icon_state = "intact-scrubbers"; dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/security/cell_block)
|
||||
"awo" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{tag = "icon-map-scrubbers (NORTH)"; icon_state = "map-scrubbers"; dir = 1},/turf/simulated/floor{icon_state = "dark"},/area/security/cell_block)
|
||||
"awp" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/security{name = "Evidence Lockup"; req_access_txt = "2;4;66"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (EAST)"; icon_state = "intact-scrubbers"; dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/security/cell_block)
|
||||
"awp" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/security{name = "Evidence Lockup"; req_access_txt = "0"; req_one_access_txt = "2;4;66"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (EAST)"; icon_state = "intact-scrubbers"; dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/security/cell_block)
|
||||
"awq" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (EAST)"; icon_state = "intact-scrubbers"; dir = 4},/turf/simulated/floor{icon_state = "blue"; dir = 8},/area/security/brig)
|
||||
"awr" = (/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{tag = "icon-map-scrubbers (EAST)"; icon_state = "map-scrubbers"; dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "blue"; dir = 4},/area/security/brig)
|
||||
"aws" = (/turf/simulated/wall/r_wall,/area/security/warden)
|
||||
@@ -13559,4 +13559,3 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
"}
|
||||
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
import discord
|
||||
import sys
|
||||
|
||||
client = discord.Client()
|
||||
|
||||
def run_bot():
|
||||
global invite
|
||||
global message
|
||||
global client
|
||||
|
||||
login = sys.argv[1]
|
||||
password = sys.argv[2]
|
||||
invite_url = sys.argv[3]
|
||||
|
||||
message = sys.argv[4]
|
||||
if len(sys.argv) > 5:
|
||||
for in_data in sys.argv[5:]:
|
||||
message += " " + in_data
|
||||
|
||||
client.login(login, password)
|
||||
invite = client.get_invite(invite_url)
|
||||
|
||||
client.run()
|
||||
|
||||
@client.event
|
||||
def on_ready():
|
||||
client.accept_invite(invite)
|
||||
client.send_message(invite.channel, message)
|
||||
|
||||
client.logout()
|
||||
sys.exit()
|
||||
|
||||
if __name__ == "__main__" and len(sys.argv) > 3:
|
||||
run_bot()
|
||||