Merge pull request #1917 from Markolie/byondmembers

Add BYOND member perks
This commit is contained in:
Fox-McCloud
2015-09-01 16:42:34 -04:00
11 changed files with 178 additions and 33 deletions
+1
View File
@@ -6,6 +6,7 @@
#define SOUND_STREAMING 16
#define SOUND_HEARTBEAT 32
#define SOUND_BUZZ 64
#define MEMBER_PUBLIC 128
#define SOUND_DEFAULT (SOUND_ADMINHELP|SOUND_MIDI|SOUND_AMBIENCE|SOUND_LOBBY|SOUND_STREAMING|SOUND_HEARTBEAT|SOUND_BUZZ)
+7
View File
@@ -44,3 +44,10 @@
if(65 to 70) . += ascii2text(ascii+32) //letters A to F - translates to lowercase
else return default
return .
/proc/sanitize_ooccolor(color)
var/list/HSL = rgb2hsl(hex2num(copytext(color,2,4)),hex2num(copytext(color,4,6)),hex2num(copytext(color,6,8)))
HSL[3] = min(HSL[3],0.4)
var/list/RGB = hsl2rgb(arglist(HSL))
return "#[num2hex(RGB[1],2)][num2hex(RGB[2],2)][num2hex(RGB[3],2)]"
+51
View File
@@ -354,6 +354,57 @@ proc/tg_text2list(text, glue=",", assocglue=";")
switch(ui_style)
if("Midnight") return 'icons/mob/screen1_Midnight.dmi'
else return 'icons/mob/screen1_White.dmi'
//colour formats
/proc/rgb2hsl(red, green, blue)
red /= 255;green /= 255;blue /= 255;
var/max = max(red,green,blue)
var/min = min(red,green,blue)
var/range = max-min
var/hue=0;var/saturation=0;var/lightness=0;
lightness = (max + min)/2
if(range != 0)
if(lightness < 0.5) saturation = range/(max+min)
else saturation = range/(2-max-min)
var/dred = ((max-red)/(6*max)) + 0.5
var/dgreen = ((max-green)/(6*max)) + 0.5
var/dblue = ((max-blue)/(6*max)) + 0.5
if(max==red) hue = dblue - dgreen
else if(max==green) hue = dred - dblue + (1/3)
else hue = dgreen - dred + (2/3)
if(hue < 0) hue++
else if(hue > 1) hue--
return list(hue, saturation, lightness)
/proc/hsl2rgb(hue, saturation, lightness)
var/red;var/green;var/blue;
if(saturation == 0)
red = lightness * 255
green = red
blue = red
else
var/a;var/b;
if(lightness < 0.5) b = lightness*(1+saturation)
else b = (lightness+saturation) - (saturation*lightness)
a = 2*lightness - b
red = round(255 * hue2rgb(a, b, hue+(1/3)))
green = round(255 * hue2rgb(a, b, hue))
blue = round(255 * hue2rgb(a, b, hue-(1/3)))
return list(red, green, blue)
/proc/hue2rgb(a, b, hue)
if(hue < 0) hue++
else if(hue > 1) hue--
if(6*hue < 1) return (a+(b-a)*6*hue)
if(2*hue < 1) return b
if(3*hue < 2) return (a+(b-a)*((2/3)-hue)*6)
return a
/proc/num2septext(var/theNum, var/sigFig = 7,var/sep=",") // default sigFig (1,000,000)
var/finalNum = num2text(theNum, sigFig)
+67 -7
View File
@@ -1,5 +1,8 @@
var/global/normal_ooc_colour = "#002eb8"
var/global/member_ooc_colour = "#035417"
var/global/mentor_ooc_colour = "#0099cc"
var/global/moderator_ooc_colour = "#184880"
var/global/admin_ooc_colour = "#b82e00"
/client/verb/ooc(msg as text)
set name = "OOC" //Gave this shit a shorter name so you only have to time out "ooc" rather than "ooc message" to use it --NeoFite
@@ -36,21 +39,29 @@ var/global/normal_ooc_colour = "#002eb8"
return
log_ooc("[mob.name]/[key] : [msg]")
var/display_colour = normal_ooc_colour
if(holder && !holder.fakekey)
display_colour = "#0099cc" //light blue
display_colour = mentor_ooc_colour
if(check_rights(R_MOD,0) && !check_rights(R_ADMIN,0))
display_colour = "#184880" //dark blue
display_colour = moderator_ooc_colour
else if(check_rights(R_ADMIN,0))
if(config.allow_admin_ooccolor)
display_colour = src.prefs.ooccolor
else
display_colour = "#b82e00" //orange
display_colour = admin_ooc_colour
if(prefs.unlock_content)
if(display_colour == normal_ooc_colour)
if((prefs.toggles & MEMBER_PUBLIC))
display_colour = member_ooc_colour
for(var/client/C in clients)
if(C.prefs.toggles & CHAT_OOC)
var/display_name = src.key
if(prefs.unlock_content)
if(prefs.toggles & MEMBER_PUBLIC)
display_name = "<img style='width:9px;height:9px;' class=icon src=\ref['icons/member_content.dmi'] iconstate=blag>[display_name]"
if(holder)
if(holder.fakekey)
if(C.holder)
@@ -72,9 +83,58 @@ var/global/normal_ooc_colour = "#002eb8"
/client/proc/set_ooc(newColor as color)
set name = "Set Player OOC Colour"
set desc = "Set to yellow for eye burning goodness."
set desc = "Modifies the default player OOC color."
set category = "Server"
if(!check_rights(R_SERVER)) return
normal_ooc_colour = newColor
message_admins("[key_name_admin(usr)] has set the default player OOC color to [newColor]")
log_admin("[key_name(usr)] has set the default player OOC color to [newColor]")
feedback_add_details("admin_verb","SOOC")
/client/proc/reset_ooc()
set name = "Reset Player OOC Color"
set desc = "Returns the default player OOC color to default."
set category = "Server"
if(!check_rights(R_SERVER)) return
normal_ooc_colour = initial(normal_ooc_colour)
message_admins("[key_name_admin(usr)] has reset the default player OOC color")
log_admin("[key_name(usr)] has reset the default player OOC color")
feedback_add_details("admin_verb","ROOC")
/client/proc/colorooc()
set name = "Set Your OOC Color"
set desc = "Allows you to pick a custom OOC color."
set category = "Preferences"
if(!check_rights(R_ADMIN)) return
var/new_ooccolor = input(src, "Please select your OOC color.", "OOC color", prefs.ooccolor) as color|null
if(new_ooccolor)
prefs.ooccolor = new_ooccolor
prefs.save_preferences(src)
usr << "Your OOC color has been set to [new_ooccolor]."
feedback_add_details("admin_verb","OC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/resetcolorooc()
set name = "Reset Your OOC Color"
set desc = "Returns your OOC color to default."
set category = "Preferences"
if(!check_rights(R_ADMIN)) return
prefs.ooccolor = initial(prefs.ooccolor)
prefs.save_preferences(src)
usr << "Your OOC color has been reset."
feedback_add_details("admin_verb","ROC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/verb/looc(msg as text)
set name = "LOOC" //Gave this shit a shorter name so you only have to time out "ooc" rather than "ooc message" to use it --NeoFite
+4 -13
View File
@@ -16,7 +16,8 @@ var/list/admin_verbs_admin = list(
/datum/admins/proc/toggleenter, /*toggles whether people can join the current game*/
/datum/admins/proc/toggleguests, /*toggles whether guests can join the current game*/
/datum/admins/proc/announce, /*priority announce something to all clients.*/
/client/proc/colorooc, /*allows us to set a custom colour for everythign we say in ooc*/
/client/proc/colorooc, /*allows us to set a custom colour for everything we say in ooc*/
/client/proc/resetcolorooc, /*allows us to set a reset our ooc color*/
/client/proc/admin_ghost, /*allows us to ghost/reenter body at will*/
/client/proc/toggle_view_range, /*changes how far we can see*/
/datum/admins/proc/view_txt_log, /*shows the server log (diary) for today*/
@@ -128,7 +129,8 @@ var/list/admin_verbs_server = list(
/client/proc/delbook,
/client/proc/toggle_antagHUD_use,
/client/proc/toggle_antagHUD_restrictions,
/client/proc/set_ooc
/client/proc/set_ooc,
/client/proc/reset_ooc
)
var/list/admin_verbs_debug = list(
/client/proc/cmd_admin_list_open_jobs,
@@ -346,17 +348,6 @@ var/list/admin_verbs_mentor = list(
feedback_add_details("admin_verb","S") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
return
/client/proc/colorooc()
set category = "Admin"
set name = "Personal OOC Text Color"
if(!holder) return
var/new_ooccolor = input(src, "Please select your OOC colour.", "OOC colour") as color|null
if(new_ooccolor)
prefs.ooccolor = new_ooccolor
prefs.save_preferences(src)
feedback_add_details("admin_verb","OC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
return
/client/proc/stealth()
set category = "Admin"
set name = "Stealth Mode"
+6
View File
@@ -179,6 +179,12 @@
..() //redirect to hsrc.Topic()
/client/proc/is_content_unlocked()
if(!prefs.unlock_content)
src << "Become a BYOND member to access member-perks and features, as well as support the engine that makes this game possible. <a href='http://www.byond.com/membership'>Click here to find out more</a>."
return 0
return 1
/client/proc/handle_spam_prevention(var/message, var/mute_type)
if(config.automute_on && !holder && src.last_message == message)
src.last_message_count++
+31 -8
View File
@@ -67,18 +67,20 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
return max(0, days - C.player_age)
return 0
var/const/MAX_SAVE_SLOTS = 10
//used for alternate_option
#define GET_RANDOM_JOB 0
#define BE_CIVILIAN 1
#define RETURN_TO_LOBBY 2
#define MAX_SAVE_SLOTS 10 // Save slots for regular players
#define MAX_SAVE_SLOTS_MEMBER 10 // Save slots for BYOND members
datum/preferences
//doohickeys for savefiles
// var/path
var/default_slot = 1 //Holder so it doesn't default to slot 1, rather the last one used
// var/savefile_version = 0
var/max_save_slots = MAX_SAVE_SLOTS
//non-preference stuff
var/warns = 0
@@ -183,9 +185,17 @@ datum/preferences
// jukebox volume
var/volume = 100
// BYOND membership
var/unlock_content = 0
/datum/preferences/New(client/C)
b_type = pick(4;"O-", 36;"O+", 3;"A-", 28;"A+", 1;"B-", 20;"B+", 1;"AB-", 5;"AB+")
if(istype(C))
if(!IsGuestKey(C.key))
unlock_content = C.IsByondMember()
if(unlock_content)
max_save_slots = MAX_SAVE_SLOTS_MEMBER
var/loaded_preferences_successfully = load_preferences(C)
if(loaded_preferences_successfully)
if(load_character(C))
@@ -369,14 +379,23 @@ datum/preferences
dat += "<b>Alpha (transparency):</b> <a href='?_src_=prefs;preference=UIalpha'><b>[UI_style_alpha]</b></a><br>"
dat += "<b>Play admin midis:</b> <a href='?_src_=prefs;preference=hear_midis'><b>[(sound & SOUND_MIDI) ? "Yes" : "No"]</b></a><br>"
dat += "<b>Play lobby music:</b> <a href='?_src_=prefs;preference=lobby_music'><b>[(sound & SOUND_LOBBY) ? "Yes" : "No"]</b></a><br>"
dat += "<b>Randomized Character Slot:</b> <a href='?_src_=prefs;preference=randomslot'><b>[randomslot ? "Yes" : "No"]</b></a><br>"
dat += "<b>Randomized character slot:</b> <a href='?_src_=prefs;preference=randomslot'><b>[randomslot ? "Yes" : "No"]</b></a><br>"
dat += "<b>Ghost ears:</b> <a href='?_src_=prefs;preference=ghost_ears'><b>[(toggles & CHAT_GHOSTEARS) ? "Nearest Creatures" : "All Speech"]</b></a><br>"
dat += "<b>Ghost sight:</b> <a href='?_src_=prefs;preference=ghost_sight'><b>[(toggles & CHAT_GHOSTSIGHT) ? "Nearest Creatures" : "All Emotes"]</b></a><br>"
dat += "<b>Ghost radio:</b> <a href='?_src_=prefs;preference=ghost_radio'><b>[(toggles & CHAT_GHOSTRADIO) ? "Nearest Speakers" : "All Chatter"]</b></a><br>"
if(config.allow_Metadata)
dat += "<b>OOC Notes:</b> <a href='?_src_=prefs;preference=metadata;task=input'> Edit </a><br>"
dat += "<b>OOC notes:</b> <a href='?_src_=prefs;preference=metadata;task=input'><b>Edit</b></a><br>"
if(user.client)
if(user.client.holder)
dat += "<b>Adminhelp sound:</b> "
dat += "<a href='?_src_=prefs;preference=hear_adminhelps'><b>[(sound & SOUND_ADMINHELP)?"On":"Off"]</b></a><br>"
if(check_rights(R_ADMIN,0))
dat += "<b>OOC:</b> <span style='border: 1px solid #161616; background-color: [ooccolor ? ooccolor : normal_ooc_colour];'>&nbsp;&nbsp;&nbsp;</span> <a href='?_src_=prefs;preference=ooccolor;task=input'><b>Change</b></a><br>"
if(unlock_content)
dat += "<b>BYOND Membership Publicity:</b> <a href='?_src_=prefs;preference=publicity'><b>[(toggles & MEMBER_PUBLIC) ? "Public" : "Hidden"]</b></a><br>"
dat += "</td><td width='300px' height='300px' valign='top'>"
dat += "<h2>Special Role Settings</h2>"
@@ -1338,6 +1357,10 @@ datum/preferences
else
switch(href_list["preference"])
if("publicity")
if(unlock_content)
toggles ^= MEMBER_PUBLIC
if("gender")
if(gender == MALE)
gender = FEMALE
@@ -1545,7 +1568,7 @@ datum/preferences
dat += "<b>Select a character slot to load</b><hr>"
var/name
for(var/i=1, i<=MAX_SAVE_SLOTS, i++)
for(var/i=1, i<=max_save_slots, i++)
if(!query.Execute())
var/err = query.ErrorMsg()
log_game("SQL ERROR during character slot loading. Error : \[[err]\]\n")
+2 -2
View File
@@ -40,7 +40,7 @@
// lastchangelog = sanitize_text(lastchangelog, initial(lastchangelog))
UI_style = sanitize_inlist(UI_style, list("White", "Midnight"), initial(UI_style))
be_special = sanitize_integer(be_special, 0, 65535, initial(be_special))
default_slot = sanitize_integer(default_slot, 1, MAX_SAVE_SLOTS, initial(default_slot))
default_slot = sanitize_integer(default_slot, 1, max_save_slots, initial(default_slot))
toggles = sanitize_integer(toggles, 0, 65535, initial(toggles))
sound = sanitize_integer(sound, 0, 65535, initial(sound))
UI_style_color = sanitize_hexcolor(UI_style_color, initial(UI_style_color))
@@ -76,7 +76,7 @@
/datum/preferences/proc/load_character(client/C,slot)
if(!slot) slot = default_slot
slot = sanitize_integer(slot, 1, MAX_SAVE_SLOTS, initial(default_slot))
slot = sanitize_integer(slot, 1, max_save_slots, initial(default_slot))
if(slot != default_slot)
default_slot = slot
var/DBQuery/firstquery = dbcon.NewQuery("UPDATE [format_table_name("player")] SET default_slot=[slot] WHERE ckey='[C.ckey]'")
@@ -242,3 +242,12 @@
media.update_music()
else
media.stop_music()
/client/verb/toggle_member_publicity()
set name = "Toggle Membership Publicity"
set category = "Preferences"
set desc = "Toggles whether other players can see that you are a BYOND member (OOC blag icon/colours)."
prefs.toggles ^= MEMBER_PUBLIC
prefs.save_preferences(src)
src << "Others can[(prefs.toggles & MEMBER_PUBLIC) ? "" : " not"] see whether you are a BYOND member."
-3
View File
@@ -208,9 +208,6 @@ proc/isdeaf(A)
return (M.sdisabilities & DEAF) || M.ear_deaf
return 0
/proc/hsl2rgb(h, s, l)
return
proc/hassensorlevel(A, var/level)
var/mob/living/carbon/human/H = A
if(istype(H) && istype(H.w_uniform, /obj/item/clothing/under))
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB