mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 02:34:00 +00:00
Merge remote-tracking branch 'upstream/dev-freeze' into dev
This commit is contained in:
@@ -62,8 +62,13 @@ var/list/gamemode_cache = list()
|
|||||||
var/respawn = 1
|
var/respawn = 1
|
||||||
var/guest_jobban = 1
|
var/guest_jobban = 1
|
||||||
var/usewhitelist = 0
|
var/usewhitelist = 0
|
||||||
var/mods_are_mentors = 0
|
|
||||||
var/kick_inactive = 0 //force disconnect for inactive players after this many minutes, if non-0
|
var/kick_inactive = 0 //force disconnect for inactive players after this many minutes, if non-0
|
||||||
|
var/show_mods = 0
|
||||||
|
var/show_mentors = 0
|
||||||
|
var/mods_can_tempban = 0
|
||||||
|
var/mods_can_job_tempban = 0
|
||||||
|
var/mod_tempban_max = 1440
|
||||||
|
var/mod_job_tempban_max = 1440
|
||||||
var/load_jobs_from_txt = 0
|
var/load_jobs_from_txt = 0
|
||||||
var/ToRban = 0
|
var/ToRban = 0
|
||||||
var/automute_on = 0 //enables automuting/spam prevention
|
var/automute_on = 0 //enables automuting/spam prevention
|
||||||
@@ -318,9 +323,6 @@ var/list/gamemode_cache = list()
|
|||||||
if ("log_runtime")
|
if ("log_runtime")
|
||||||
config.log_runtime = 1
|
config.log_runtime = 1
|
||||||
|
|
||||||
if ("mentors")
|
|
||||||
config.mods_are_mentors = 1
|
|
||||||
|
|
||||||
if ("generate_asteroid")
|
if ("generate_asteroid")
|
||||||
config.generate_asteroid = 1
|
config.generate_asteroid = 1
|
||||||
|
|
||||||
@@ -472,6 +474,24 @@ var/list/gamemode_cache = list()
|
|||||||
if("kick_inactive")
|
if("kick_inactive")
|
||||||
config.kick_inactive = text2num(value)
|
config.kick_inactive = text2num(value)
|
||||||
|
|
||||||
|
if("show_mods")
|
||||||
|
config.show_mods = 1
|
||||||
|
|
||||||
|
if("show_mentors")
|
||||||
|
config.show_mentors = 1
|
||||||
|
|
||||||
|
if("mods_can_tempban")
|
||||||
|
config.mods_can_tempban = 1
|
||||||
|
|
||||||
|
if("mods_can_job_tempban")
|
||||||
|
config.mods_can_job_tempban = 1
|
||||||
|
|
||||||
|
if("mod_tempban_max")
|
||||||
|
config.mod_tempban_max = text2num(value)
|
||||||
|
|
||||||
|
if("mod_job_tempban_max")
|
||||||
|
config.mod_job_tempban_max = text2num(value)
|
||||||
|
|
||||||
if("load_jobs_from_txt")
|
if("load_jobs_from_txt")
|
||||||
load_jobs_from_txt = 1
|
load_jobs_from_txt = 1
|
||||||
|
|
||||||
|
|||||||
@@ -225,12 +225,12 @@
|
|||||||
if(M.back)
|
if(M.back)
|
||||||
if(M.back.clean_blood())
|
if(M.back.clean_blood())
|
||||||
M.update_inv_back(0)
|
M.update_inv_back(0)
|
||||||
|
|
||||||
//flush away reagents on the skin
|
//flush away reagents on the skin
|
||||||
if(M.touching)
|
if(M.touching)
|
||||||
var/remove_amount = M.touching.maximum_volume * M.reagent_permeability() //take off your suit first
|
var/remove_amount = M.touching.maximum_volume * M.reagent_permeability() //take off your suit first
|
||||||
M.touching.remove_any(remove_amount)
|
M.touching.remove_any(remove_amount)
|
||||||
|
|
||||||
if(ishuman(M))
|
if(ishuman(M))
|
||||||
var/mob/living/carbon/human/H = M
|
var/mob/living/carbon/human/H = M
|
||||||
var/washgloves = 1
|
var/washgloves = 1
|
||||||
@@ -414,6 +414,9 @@
|
|||||||
"<span class='danger'>[user] was stunned by \his wet [O]!</span>", \
|
"<span class='danger'>[user] was stunned by \his wet [O]!</span>", \
|
||||||
"<span class='userdanger'>[user] was stunned by \his wet [O]!</span>")
|
"<span class='userdanger'>[user] was stunned by \his wet [O]!</span>")
|
||||||
return
|
return
|
||||||
|
// Short of a rewrite, this is necessary to stop monkeycubes being washed.
|
||||||
|
else if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/monkeycube))
|
||||||
|
return
|
||||||
|
|
||||||
var/turf/location = user.loc
|
var/turf/location = user.loc
|
||||||
if(!isturf(location)) return
|
if(!isturf(location)) return
|
||||||
|
|||||||
@@ -62,8 +62,10 @@
|
|||||||
|
|
||||||
var/msg = ""
|
var/msg = ""
|
||||||
var/modmsg = ""
|
var/modmsg = ""
|
||||||
|
var/mentmsg = ""
|
||||||
var/num_mods_online = 0
|
var/num_mods_online = 0
|
||||||
var/num_admins_online = 0
|
var/num_admins_online = 0
|
||||||
|
var/num_mentors_online = 0
|
||||||
if(holder)
|
if(holder)
|
||||||
for(var/client/C in admins)
|
for(var/client/C in admins)
|
||||||
if(R_ADMIN & C.holder.rights || (!R_MOD & C.holder.rights && !R_MENTOR & C.holder.rights)) //Used to determine who shows up in admin rows
|
if(R_ADMIN & C.holder.rights || (!R_MOD & C.holder.rights && !R_MENTOR & C.holder.rights)) //Used to determine who shows up in admin rows
|
||||||
@@ -88,7 +90,7 @@
|
|||||||
msg += "\n"
|
msg += "\n"
|
||||||
|
|
||||||
num_admins_online++
|
num_admins_online++
|
||||||
else if(R_MOD & C.holder.rights || R_MENTOR & C.holder.rights) //Who shows up in mod/mentor rows.
|
else if(R_MOD & C.holder.rights) //Who shows up in mod/mentor rows.
|
||||||
modmsg += "\t[C] is a [C.holder.rank]"
|
modmsg += "\t[C] is a [C.holder.rank]"
|
||||||
|
|
||||||
if(isobserver(C.mob))
|
if(isobserver(C.mob))
|
||||||
@@ -103,17 +105,41 @@
|
|||||||
modmsg += "\n"
|
modmsg += "\n"
|
||||||
num_mods_online++
|
num_mods_online++
|
||||||
|
|
||||||
|
else if(R_MENTOR & C.holder.rights)
|
||||||
|
mentmsg += "\t[C] is a [C.holder.rank]"
|
||||||
|
if(isobserver(C.mob))
|
||||||
|
mentmsg += " - Observing"
|
||||||
|
else if(istype(C.mob,/mob/new_player))
|
||||||
|
mentmsg += " - Lobby"
|
||||||
|
else
|
||||||
|
mentmsg += " - Playing"
|
||||||
|
|
||||||
|
if(C.is_afk())
|
||||||
|
mentmsg += " (AFK)"
|
||||||
|
mentmsg += "\n"
|
||||||
|
num_mentors_online++
|
||||||
|
|
||||||
else
|
else
|
||||||
for(var/client/C in admins)
|
for(var/client/C in admins)
|
||||||
if(R_ADMIN & C.holder.rights || (!R_MOD & C.holder.rights && !R_MENTOR & C.holder.rights))
|
if(R_ADMIN & C.holder.rights || (!R_MOD & C.holder.rights && !R_MENTOR & C.holder.rights))
|
||||||
if(!C.holder.fakekey)
|
if(!C.holder.fakekey)
|
||||||
msg += "\t[C] is a [C.holder.rank]\n"
|
msg += "\t[C] is a [C.holder.rank]\n"
|
||||||
num_admins_online++
|
num_admins_online++
|
||||||
else if (R_MOD & C.holder.rights || R_MENTOR & C.holder.rights)
|
else if (R_MOD & C.holder.rights)
|
||||||
modmsg += "\t[C] is a [C.holder.rank]\n"
|
modmsg += "\t[C] is a [C.holder.rank]\n"
|
||||||
num_mods_online++
|
num_mods_online++
|
||||||
|
else if (R_MENTOR & C.holder.rights)
|
||||||
|
mentmsg += "\t[C] is a [C.holder.rank]\n"
|
||||||
|
num_mentors_online++
|
||||||
|
|
||||||
if(config.admin_irc)
|
if(config.admin_irc)
|
||||||
src << "<span class='info'>Adminhelps are also sent to IRC. If no admins are available in game try anyway and an admin on IRC may see it and respond.</span>"
|
src << "<span class='info'>Adminhelps are also sent to IRC. If no admins are available in game try anyway and an admin on IRC may see it and respond.</span>"
|
||||||
msg = "<b>Current Admins ([num_admins_online]):</b>\n" + msg + "\n<b> Current [config.mods_are_mentors ? "Mentors" : "Moderators"]([num_mods_online]):</b>\n" + modmsg
|
msg = "<b>Current Admins ([num_admins_online]):</b>\n" + msg
|
||||||
|
|
||||||
|
if(config.show_mods)
|
||||||
|
msg += "\n<b> Current Moderators ([num_mods_online]):</b>\n" + modmsg
|
||||||
|
|
||||||
|
if(config.show_mentors)
|
||||||
|
msg += "\n<b> Current Mentors ([num_mentors_online]):</b>\n" + mentmsg
|
||||||
|
|
||||||
src << msg
|
src << msg
|
||||||
|
|||||||
@@ -574,7 +574,13 @@
|
|||||||
|
|
||||||
//JOBBAN'S INNARDS
|
//JOBBAN'S INNARDS
|
||||||
else if(href_list["jobban3"])
|
else if(href_list["jobban3"])
|
||||||
if(!check_rights(R_MOD,0) && !check_rights(R_ADMIN)) return
|
if(!check_rights(R_MOD,0) && !check_rights(R_ADMIN,0))
|
||||||
|
usr << "<span class='warning'>You do not have the appropriate permissions to add job bans!</span>"
|
||||||
|
return
|
||||||
|
|
||||||
|
if(check_rights(R_MOD,0) && !check_rights(R_ADMIN,0) && !config.mods_can_job_tempban) // If mod and tempban disabled
|
||||||
|
usr << "<span class='warning'>Mod jobbanning is disabled!</span>"
|
||||||
|
return
|
||||||
|
|
||||||
var/mob/M = locate(href_list["jobban4"])
|
var/mob/M = locate(href_list["jobban4"])
|
||||||
if(!ismob(M))
|
if(!ismob(M))
|
||||||
@@ -649,13 +655,18 @@
|
|||||||
if(notbannedlist.len) //at least 1 unbanned job exists in joblist so we have stuff to ban.
|
if(notbannedlist.len) //at least 1 unbanned job exists in joblist so we have stuff to ban.
|
||||||
switch(alert("Temporary Ban?",,"Yes","No", "Cancel"))
|
switch(alert("Temporary Ban?",,"Yes","No", "Cancel"))
|
||||||
if("Yes")
|
if("Yes")
|
||||||
if(!check_rights(R_MOD,0) && !check_rights(R_BAN)) return
|
if(!check_rights(R_MOD,0) && !check_rights(R_BAN, 0))
|
||||||
|
usr << "<span class='warning'> You Cannot issue temporary job-bans!</span>"
|
||||||
|
return
|
||||||
if(config.ban_legacy_system)
|
if(config.ban_legacy_system)
|
||||||
usr << "\red Your server is using the legacy banning system, which does not support temporary job bans. Consider upgrading. Aborting ban."
|
usr << "\red Your server is using the legacy banning system, which does not support temporary job bans. Consider upgrading. Aborting ban."
|
||||||
return
|
return
|
||||||
var/mins = input(usr,"How long (in minutes)?","Ban time",1440) as num|null
|
var/mins = input(usr,"How long (in minutes)?","Ban time",1440) as num|null
|
||||||
if(!mins)
|
if(!mins)
|
||||||
return
|
return
|
||||||
|
if(check_rights(R_MOD, 0) && !check_rights(R_BAN, 0) && mins > config.mod_job_tempban_max)
|
||||||
|
usr << "<span class='warning'> Moderators can only job tempban up to [config.mod_job_tempban_max] minutes!</span>"
|
||||||
|
return
|
||||||
var/reason = sanitize(input(usr,"Reason?","Please State Reason","") as text|null)
|
var/reason = sanitize(input(usr,"Reason?","Please State Reason","") as text|null)
|
||||||
if(!reason)
|
if(!reason)
|
||||||
return
|
return
|
||||||
@@ -764,7 +775,13 @@
|
|||||||
DB_ban_unban(ckey(key), BANTYPE_JOB_PERMA, job)
|
DB_ban_unban(ckey(key), BANTYPE_JOB_PERMA, job)
|
||||||
|
|
||||||
else if(href_list["newban"])
|
else if(href_list["newban"])
|
||||||
if(!check_rights(R_MOD,0) && !check_rights(R_BAN)) return
|
if(!check_rights(R_MOD,0) && !check_rights(R_BAN, 0))
|
||||||
|
usr << "<span class='warning'>You do not have the appropriate permissions to add bans!</span>"
|
||||||
|
return
|
||||||
|
|
||||||
|
if(check_rights(R_MOD,0) && !check_rights(R_ADMIN, 0) && !config.mods_can_job_tempban) // If mod and tempban disabled
|
||||||
|
usr << "<span class='warning'>Mod jobbanning is disabled!</span>"
|
||||||
|
return
|
||||||
|
|
||||||
var/mob/M = locate(href_list["newban"])
|
var/mob/M = locate(href_list["newban"])
|
||||||
if(!ismob(M)) return
|
if(!ismob(M)) return
|
||||||
@@ -776,6 +793,9 @@
|
|||||||
var/mins = input(usr,"How long (in minutes)?","Ban time",1440) as num|null
|
var/mins = input(usr,"How long (in minutes)?","Ban time",1440) as num|null
|
||||||
if(!mins)
|
if(!mins)
|
||||||
return
|
return
|
||||||
|
if(check_rights(R_MOD, 0) && !check_rights(R_BAN, 0) && mins > config.mod_tempban_max)
|
||||||
|
usr << "<span class='warning'>Moderators can only job tempban up to [config.mod_tempban_max] minutes!</span>"
|
||||||
|
return
|
||||||
if(mins >= 525600) mins = 525599
|
if(mins >= 525600) mins = 525599
|
||||||
var/reason = sanitize(input(usr,"Reason?","reason","Griefer") as text|null)
|
var/reason = sanitize(input(usr,"Reason?","reason","Griefer") as text|null)
|
||||||
if(!reason)
|
if(!reason)
|
||||||
|
|||||||
@@ -119,6 +119,11 @@
|
|||||||
H << "<span class='warning'>You cannot use your teleporter on this Z-level.</span>"
|
H << "<span class='warning'>You cannot use your teleporter on this Z-level.</span>"
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
for(var/atom/A in T)
|
||||||
|
if(A.density && !(A.flags & ON_BORDER))
|
||||||
|
H << "<span class='warning'>You cannot teleport to a location with solid objects.</span>"
|
||||||
|
return 0
|
||||||
|
|
||||||
phase_out(H,get_turf(H))
|
phase_out(H,get_turf(H))
|
||||||
H.loc = T
|
H.loc = T
|
||||||
phase_in(H,get_turf(H))
|
phase_in(H,get_turf(H))
|
||||||
|
|||||||
@@ -1525,11 +1525,13 @@
|
|||||||
..()
|
..()
|
||||||
reagents.add_reagent("protein", 10)
|
reagents.add_reagent("protein", 10)
|
||||||
|
|
||||||
afterattack(obj/O as obj, mob/user as mob, proximity)
|
afterattack(obj/O as obj, var/mob/living/carbon/human/user as mob, proximity)
|
||||||
if(!proximity) return
|
if(!proximity) return
|
||||||
if(istype(O,/obj/structure/sink) && !wrapped)
|
if(istype(O,/obj/structure/sink) && !wrapped)
|
||||||
user << "You place \the [name] under a stream of water..."
|
user << "You place \the [name] under a stream of water..."
|
||||||
loc = get_turf(O)
|
if(istype(user))
|
||||||
|
user.unEquip(src)
|
||||||
|
src.loc = get_turf(src)
|
||||||
return Expand()
|
return Expand()
|
||||||
..()
|
..()
|
||||||
|
|
||||||
@@ -1574,11 +1576,14 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
proc/Expand()
|
proc/Expand()
|
||||||
for(var/mob/M in viewers(src,7))
|
src.visible_message("<span class='notice'>\The [src] expands!</span>")
|
||||||
M << "\red \The [src] expands!"
|
var/mob/living/carbon/human/H = new(src.loc)
|
||||||
var/mob/living/carbon/human/H = new (src)
|
|
||||||
H.set_species(monkey_type)
|
H.set_species(monkey_type)
|
||||||
|
H.real_name = H.species.get_random_name()
|
||||||
|
H.name = H.real_name
|
||||||
|
src.loc = null
|
||||||
qdel(src)
|
qdel(src)
|
||||||
|
return 1
|
||||||
|
|
||||||
proc/Unwrap(mob/user as mob)
|
proc/Unwrap(mob/user as mob)
|
||||||
icon_state = "monkeycube"
|
icon_state = "monkeycube"
|
||||||
|
|||||||
@@ -399,7 +399,7 @@
|
|||||||
|
|
||||||
var/list/connection_dirs = list()
|
var/list/connection_dirs = list()
|
||||||
|
|
||||||
for(var/obj/structure/table/T in oview(src, 1))
|
for(var/obj/structure/table/T in orange(src, 1))
|
||||||
var/T_dir = get_dir(src, T)
|
var/T_dir = get_dir(src, T)
|
||||||
if(T_dir in blocked_dirs) continue
|
if(T_dir in blocked_dirs) continue
|
||||||
if(material && T.material && material.name == T.material.name && flipped == T.flipped)
|
if(material && T.material && material.name == T.material.name && flipped == T.flipped)
|
||||||
|
|||||||
@@ -294,6 +294,7 @@ var/world_topic_spam_protect_time = world.timeofday
|
|||||||
|
|
||||||
/hook/startup/proc/loadMods()
|
/hook/startup/proc/loadMods()
|
||||||
world.load_mods()
|
world.load_mods()
|
||||||
|
world.load_mentors() // no need to write another hook.
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
/world/proc/load_mods()
|
/world/proc/load_mods()
|
||||||
@@ -311,7 +312,26 @@ var/world_topic_spam_protect_time = world.timeofday
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
var/title = "Moderator"
|
var/title = "Moderator"
|
||||||
if(config.mods_are_mentors) title = "Mentor"
|
var/rights = admin_ranks[title]
|
||||||
|
|
||||||
|
var/ckey = copytext(line, 1, length(line)+1)
|
||||||
|
var/datum/admins/D = new /datum/admins(title, rights, ckey)
|
||||||
|
D.associate(directory[ckey])
|
||||||
|
|
||||||
|
/world/proc/load_mentors()
|
||||||
|
if(config.admin_legacy_system)
|
||||||
|
var/text = file2text("config/mentors.txt")
|
||||||
|
if (!text)
|
||||||
|
error("Failed to load config/mentors.txt")
|
||||||
|
else
|
||||||
|
var/list/lines = text2list(text, "\n")
|
||||||
|
for(var/line in lines)
|
||||||
|
if (!line)
|
||||||
|
continue
|
||||||
|
if (copytext(line, 1, 2) == ";")
|
||||||
|
continue
|
||||||
|
|
||||||
|
var/title = "Mentor"
|
||||||
var/rights = admin_ranks[title]
|
var/rights = admin_ranks[title]
|
||||||
|
|
||||||
var/ckey = copytext(line, 1, length(line)+1)
|
var/ckey = copytext(line, 1, length(line)+1)
|
||||||
|
|||||||
@@ -73,12 +73,25 @@ LOG_PDA
|
|||||||
## disconnect players who did nothing during the set amount of minutes
|
## disconnect players who did nothing during the set amount of minutes
|
||||||
# KICK_INACTIVE 10
|
# KICK_INACTIVE 10
|
||||||
|
|
||||||
## Use Mentors instead of Moderators. Mentors are designed with the idea that
|
##Show mods on staffwho
|
||||||
###they help in pushing new people to be better at roleplay. If you uncomment
|
SHOW_MODS
|
||||||
###this it will reduce the rights that your mods have.
|
|
||||||
#MENTORS
|
|
||||||
|
|
||||||
|
##Show mentors on staffwho
|
||||||
|
SHOW_MENTORS
|
||||||
|
|
||||||
|
## Chooses whether mods have the ability to tempban or not
|
||||||
|
MODS_CAN_TEMPBAN
|
||||||
|
|
||||||
|
## Chooses whether mods have the ability to issue tempbans for jobs or not
|
||||||
|
MODS_CAN_JOB_TEMPBAN
|
||||||
|
|
||||||
|
## Maximum mod tempban duration (in minutes)
|
||||||
|
MOD_TEMPBAN_MAX 1440
|
||||||
|
|
||||||
|
## Maximum mod job tempban duration (in minutes)
|
||||||
|
MOD_JOB_TEMPBAN_MAX 1440
|
||||||
|
|
||||||
|
|
||||||
## probablities for game modes chosen in "secret" and "random" modes
|
## probablities for game modes chosen in "secret" and "random" modes
|
||||||
##
|
##
|
||||||
## default probablity is 1, increase to make that mode more likely to be picked
|
## default probablity is 1, increase to make that mode more likely to be picked
|
||||||
|
|||||||
3
config/example/mentors.txt
Normal file
3
config/example/mentors.txt
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
; just add the ckey (lowercase) of every mentor on a separate line
|
||||||
|
; lines starting with ; are comments and will be ignored
|
||||||
|
|
||||||
4
html/changelogs/PsiOmegaDelta-SolidTeleportation.yml
Normal file
4
html/changelogs/PsiOmegaDelta-SolidTeleportation.yml
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
author: PsiOmegaDelta
|
||||||
|
changes:
|
||||||
|
- tweak: "Ninjas can no longer teleport unto turfs that contain solid objects."
|
||||||
|
delete-after: true
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user