Skip to content

Commit

Permalink
Merge pull request #14 from volundmush/3.1
Browse files Browse the repository at this point in the history
3.1
  • Loading branch information
volundmush authored Apr 14, 2018
2 parents ebc67c2 + 968d2ea commit f401295
Show file tree
Hide file tree
Showing 13 changed files with 106 additions and 53 deletions.
8 changes: 4 additions & 4 deletions Account Management - ACCOUNT.txt
Original file line number Diff line number Diff line change
Expand Up @@ -52,9 +52,9 @@ th u(NEWCOBJ,Account Database <ACCOUNTS>,accounts,u(cobj,account),,,WIZARD SAFE,

&OPTION`OPTIONS [u(cobj,account)]=MAIL

&CONFIG`MAIL [u(cobj,account)]=Display @mail for all alts on Login?
&CONFIG`MAIL`DEFAULT [u(cobj,account)]=1
&CONFIG`MAIL`VALID [u(cobj,account)]=BOOL
&OPTION`MAIL [u(cobj,account)]=Display @mail for all alts on Login?
&OPTION`MAIL`DEFAULT [u(cobj,account)]=1
&OPTION`MAIL`VALID [u(cobj,account)]=BOOL

@@ ****** ACCOUNT SECTION *******
&CMD`+ACCOUNT`PENNMUSH [u(cobj,account)]=$^(?\:\+)?account(?\:/(\S+)?)?(?\: +(.+?))?(?\:=(.*))?$:@attach %!/CMD`+ACCOUNT`MAIN
Expand Down Expand Up @@ -154,7 +154,7 @@ th u(NEWCOBJ,Account Database <ACCOUNTS>,accounts,u(cobj,account),,,WIZARD SAFE,

&LOOP`ACCOUNTCHECK [u(cobj,account)]=@dolist/inline/nobreak u(lwhoid)={@stop u(isguest,##);@select/inline [isdbref(get(##/D`ACCOUNT))][strmatch(get(get(##/D`ACCOUNT)/EMAIL),*@*.*)]=0*,{@select/inline t(u(conf,OPEN_ACCOUNT))=1,{@attach %!/INC`MSG=[ansi(hr,WARNING:)] This Character has no Account! This is not supported. Please use [ansi(hw,+account/new <AccountName>)] to register an account. If you already have an account then use +account/request <alt> to begin the registration process.,##},0,{@attach %!/INC`MSG=[ansi(hr,WARNING:)] This Character has no Account! This is not supported. Please contact staff with your email or existing alt/account name to be bound to an account.}},10,{@select/inline t(u(conf,ACCOUNT_RENAME))=1,{@attach %!/INC`MSG=[ansi(hr,WARNING:)] Your Account does not follow the new email Guidelines. Please use [ansi(hw,+account/email <email>)] to fix this. Accounts lacking addresses may not be eligible for password resets or future database migration.},0,{@attach %!/INC`MSG=[ansi(hr,WARNING:)] Your Account does not follow new Email Guidelines. Please ask staff to give your account an Email Address. Without one you may not be eligible for password resets or future database migration.};@select/inline strmatch(name(get(##/D`ACCOUNT)),*Account*)=1,{@select/inline t(u(conf,ACCOUNT_RENAME))=1,{@attach %!/INC`MSG=Don't you want a better Account name than '[name(get(##/D`ACCOUNT))]'? You can use +account/rename <newname> to fix this! Note: Please pick something sensible\, short\, and memorable. Generic account names might not be migrated in the future!},0,{@attach %!/INC`MSG=Don't you want a better Account name than '[name(get(##/D`ACCOUNT))]'? You can ask Admin to fix this! Note: Please pick something sensible\, short\, and memorable. Generic account names might not be migrated in the future!}}}};@wait 7200=@trigger %!/LOOP`ACCOUNTCHECK

&PLAYER`CREATE`CHANNELS [u(cobj,account)]=@select/inline %va=PennMUSH,{@dolist/inline/delimit | [u(conf,CHANNELS_PLAYERS)]={@channel/on %i0=%0}},RhostMUSH,{}
&PLAYER`CREATE`CHANNELS [u(cobj,account)]=@stop u(isguest,%0);@select/inline %va=PennMUSH,{@dolist/inline/delimit | [u(conf,CHANNELS_PLAYERS)]={@channel/on %i0=%0}},RhostMUSH,{}

&HLP`+ACCOUNT [u(cobj,account)]=The account system tracks players (and their alts) and their current status in the game (unapproved, approved, builder, admin, etc.).%R%R[ansi(hc,Player Commands)]%R[align(5 [sub(u(width,%#),6)],,[ansi(h,+account)] - Shows your account if you have one.%R[ansi(h,+account/new <name>)] - For new players. Enter this to start a new account on our game. You should preferably use your email address!%R[if(u(conf,OPEN_CREATION),[ansi(h,+account/rename <newname>)] - Renames your account.%R)][ansi(h,@password <old>=<new>)] - Change your password. If you forget your password\, staff will send a new one to your <email> on request - or if your Guest IP matches your previous logins.)]
+help/add Character/+account=[u(cobj,account)]/HLP`+ACCOUNT
Expand Down
17 changes: 7 additions & 10 deletions Bulletin Board System - BBS.txt
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ th u(NEWCOBJ,Volund's Board System <BBS>,bbs,,,,WIZARD SAFE !NO_COMMAND,INHERIT
@set [u(cobj,bbs)]/CMD`BB`PENNMUSH=regexp
&CMD`BB`RHOSTMUSH [u(cobj,bbs)]=$^(?s)\+bb(\\w+)(?\:/(\\w+)?)?(?\:/(\\d+)?)?(?\: +(.+?))?(?\:/(.+?)?)?(?\:=(.*))?$:@attach %!/CMD`BB`MAIN
@set [u(cobj,bbs)]/CMD`BB`RHOSTMUSH=regexp
&CMD`BB`MAIN [u(cobj,bbs)]=@attach %!/INIT;@attach %!/INC`CHECKPC=%#,1;@attach %!/INC`PARTIAL=%1,setunion(setunion(v(COMMANDS`PLAYER),v(COMMANDS`ADMIN),|,|),if(u(iswizard,%#),v(COMMANDS`WIZARD)),|,|),|,command;@attach %!/INC`PARTIAL=%2,v(SWITCHES`%q<command>),|,switch;th u(setq,page,u(strfirstof,%3,1));@attach %!/%q<command>`[u(strfirstof,%q<switch>,MAIN)]=trim(%4),trim(%5),%6
&CMD`BB`MAIN [u(cobj,bbs)]=@attach %!/INIT;@attach %!/INC`CHECKPC=%#,1;@attach %!/INC`PARTIAL=%1,setunion(setunion(v(COMMANDS`PLAYER),v(COMMANDS`ADMIN),|,|),if(u(iswizard,%#),v(COMMANDS`WIZARD)),|,|),|,command;th u(setq,page,u(strfirstof,%3,1));@select/inline isint(%2)=1,{th u(setq,page,%2)},0,{@attach %!/INC`PARTIAL=%2,v(SWITCHES`%q<command>),|,switch};@attach %!/%q<command>`[u(strfirstof,%q<switch>,MAIN)]=trim(%4),trim(%5),%6
@set [u(cobj,bbs)]/CMD`BB`[u(choosegame,RHOSTMUSH,PENNMUSH)]=no_command

&CMD`BBWRITE [u(cobj,bbs)]=$^(?s)\+bb(?\: +(.*))?$:th u(setq,sysname,ucstr(%1S));@attach %!/INIT;@attach %!/WRITE`MAIN=%1
Expand All @@ -36,7 +36,7 @@ th u(NEWCOBJ,Volund's Board System <BBS>,bbs,,,,WIZARD SAFE !NO_COMMAND,INHERIT

@@ ADMIN Section

&HLP`ADMIN [u(cobj,bbs)]=[ansi(hc,Board Administration)]%R[align(5 [sub(u(width,%#),6)],,[ansi(h,+bbadmin/create \[<group>/\]<boardname>=<order>)] - Creates a board\, if you have the necessary permissions.%R[ansi(h,+bbadmin/delete <board>)] - Deletes a board and all posts.%R[ansi(h,+bbadmin/rename <board>=<new name>)] - Renames a Board.%R[ansi(h,+bbadmin/order <board>=<new order>)] - Changes a board's display order.%R[ansi(h,+bbadmin/lock <board>/<locktype>=<lockstring>)] - Applies lock settings to the board. Locktype can be READ\, POST\, and ADMIN. See +help Locks for more information.%R[ansi(h,+bbadmin/rawlock <board>/<locktype>=<lockstring>)] - As above\, but using the MUSH's hardcoded lock system. see help @lock for more information.%R[ansi(h,+bbadmin/unlock <board>/<locktype>)] - Restores a lock to its default. DO NOT UNLOCK ADMIN.%R[ansi(h,+bbadmin/anonymous <board>=<anonymous name>)] - Set this name to make the board Anonymous. All posts appear to be from the given name. Only Admin can see otherwise. Useful for Rumors boards and the like.%R[ansi(h,+bbinfo)] - List locks and board ID for boards you can see.)]
&HLP`ADMIN [u(cobj,bbs)]=[ansi(hc,Board Administration)]%R[align(5 [sub(u(width,%#),6)],,[ansi(h,+bbadmin/create \[<group>/\]<boardname>=<order>)] - Creates a board\, if you have the necessary permissions.%R[ansi(h,+bbadmin/delete <board>)] - Deletes a board and all posts.%R[ansi(h,+bbadmin/rename <board>=<new name>)] - Renames a Board.%R[ansi(h,+bbadmin/order <board>=<new order>)] - Changes a board's display order.%R[ansi(h,+bbadmin/lock <board>/<locktype>=<lockstring>)] - Applies lock settings to the board. Locktype can be READ\, POST\, and ADMIN. See +help Locks for more information.%R[ansi(h,+bbadmin/rawlock <board>/<locktype>=<lockstring>)] - As above\, but using the MUSH's hardcoded lock system. see help @lock for more information.%R[ansi(h,+bbadmin/unlock <board>/<locktype>)] - Restores a lock to its default. DO NOT UNLOCK ADMIN.%R[ansi(h,+bbadmin/set <board>/<option>=<value>)] - Change Options ANONYMOUS or MANDATORY. Anonymous is used for Rumor boards or similar things. The given text becomes the 'Anonymous' name. Mandatory takes a BOOL. Mandatory boards cannot be skipped with +bbcatchup and will alert players to be read every so often if they have unread posts!%R[ansi(h,+bbinfo)] - List locks and board ID for boards you can see.)]
+help/addsub BBS/Admin=[u(cobj,bbs)]/HLP`ADMIN

&Q`SELECT`START_BOARDS [u(cobj,bbs)]=SELECT board_id,board_read_lock,IF(board_admin_lock IS NULL,'#FALSE',board_admin_lock) FROM volv_board
Expand Down Expand Up @@ -79,11 +79,8 @@ th u(NEWCOBJ,Volund's Board System <BBS>,bbs,,,,WIZARD SAFE !NO_COMMAND,INHERIT

&FUN`NEXTORDER [u(cobj,bbs)]=add(1,u(lmax,u(mysql,SELECT`EXIST_ORDERS[if(%0,`GROUP)],%0)))

&ADMIN`CREATE [u(cobj,bbs)]=@select/inline [t(strlen(%0))][t(strlen(%1))]=11,{@check isdbref(u(setr,gobjid,objid(u(u(cobj,gms)/FUN`FINDGROUP,%0,%:))))=@attach %!/INC`MSG=ERROR: Group '%0' not found.;th u(setq,gid,get(%q<gid1>/D`ID));@check cor(u(isadmin,%#),u(u(cobj,gms)/FUN`GRPPERM,%:,%q<gobjid>))=@attach %!/INC`MSG=ERROR: Permission denied.;@check strlen(get(%q<gobjid>/SET`ABBREVIATION))=@attach %!/INC`MSG=ERROR: Groups must have an Abbreviation before they can have Boards.;@attach %!/INC`VALID`BOARD=%1,%q<gid>},10,{@attach %!/INC`VALID`BOARD=%0},{@stop 1=@attach %!/INC`MSG=ERROR: Must enter a Board name!};@select/inline strlen(%2)=>0,{@attach %!/INC`VALID`ORDER=%2},{th u(setq,order,u(FUN`NEXTORDER,%q<gobjid>))};@check u(setr,bbmake,u(call`3,volp_board,0,'[sqlescape(%q<value>)]',%q<order>,'[u(strfirstof,%q<gobjid>,0)]'))=@attach %!/INC`MSG=ERROR: Board could not be created. REASON: %q<bbmake>;
&ADMIN`CREATE [u(cobj,bbs)]=@select/inline [t(strlen(%0))][t(strlen(%1))]=11,{@attach %!/INC`VALID`GROUP=%0;@check or(u(isadmin,%#),u(u(cobj,group)/FUN`GRPPERM,%:,u(setr,gobjid,%q<value>),BBADMIN))=@attach %!/INC`MSG=ERROR: Permission denied.;@check strlen(get(%q<gobjid>/SET`ABBREVIATION))=@attach %!/INC`MSG=ERROR: Groups must have an Abbreviation before they can have Boards.;@attach %!/INC`VALID`BOARD=%1,u(setr,gid,get(%q<value>/D`ID))},10,{@attach %!/INC`VALID`BOARD=%0},{@stop 1=@attach %!/INC`MSG=ERROR: Must enter a Board name!};@select/inline strlen(%2)=>0,{@attach %!/INC`VALID`ORDER=%2},{th u(setq,order,u(FUN`NEXTORDER,%q<gobjid>))};@check u(setr,bbmake,u(call`3,volp_board,0,'[sqlescape(%q<value>)]',%q<order>,'[u(strfirstof,%q<gobjid>,0)]'))=@attach %!/INC`MSG=ERROR: Board could not be created. REASON: %q<bbmake>;@select/inline isobjid(%q<gobjid>)=0,{th u(call`3,volp_lock,0,%q<bbmake>,'READ','#TRUE');th u(call`3,volp_lock,0,%q<bbmake>,'POST','#TRUE');th u(call`3,volp_lock,0,%q<bbmake>,'ADMIN','V`ADMIN:>0')},1,{th u(call`3,volp_lock,0,%q<bbmake>,'READ','[u(GROUP_LOCK,%q<gobjid>)]|V`ADMIN:>0');th u(call`3,volp_lock,0,%q<bbmake>,'POST','[u(GROUP_LOCK,%q<gobjid>)]|V`ADMIN:>0');th u(call`3,volp_lock,0,%q<bbmake>,'ADMIN','[u(GROUP_LOCK,%q<gobjid>/ADMIN)]|V`ADMIN:>0')};@attach %!/INC`MSG=Board '[if(%q<gobjid>,u(%q<gobjid>/GET`NAME)/)]%q<value>' created!;@attach %!/INC`MSG`CHAN=Created Board '[if(%q<gobjid>,u(%q<gobjid>/GET`NAME)/)]%q<value>' Created!

@select/inline isobjid(%q<gobjid>)=0,{th u(call`3,volp_lock,0,%q<bbmake>,'READ','#TRUE');th u(call`3,volp_lock,0,%q<bbmake>,'POST','#TRUE');th u(call`3,volp_lock,0,%q<bbmake>,'ADMIN','V`ADMIN:>0')},1,{};

@attach %!/INC`MSG=Board Created!

&Q`SELECT`EXIST_ORDERS [u(cobj,bbs)]=SELECT board_number FROM volv_board WHERE group_id IS NULL
&Q`SELECT`EXIST_ORDERS`GROUP [u(cobj,bbs)]=SELECT board_number FROM volv_board WHERE group_id=?
Expand Down Expand Up @@ -122,7 +119,7 @@ th u(NEWCOBJ,Volund's Board System <BBS>,bbs,,,,WIZARD SAFE !NO_COMMAND,INHERIT

&ADMIN`SET [u(cobj,bbs)]=@attach %!/INC`FINDBB=%0,ADMIN;@select/inline strlen(%1)=0,{@attach %!/ADMIN`SET`SHOW},{@attach %!/INC`PARTIAL=%1,ANONYMOUS|MANDATORY,|,parameter,parameter;@attach %!/ADMIN`SET`PARAMETER`%q<parameter>;@attach %!/INC`MSG=Parameter Set To: %q<value>;@attach %!/INC`MSG`CHAN=Board %q<bbalias>: %q<bbname> - Set %q<parameter> to: %q<value>}

&ADMIN`SET`SHOW [u(cobj,bbs)]=@pemit %#=u(FUN`NAME,%q<bbname> Settings);@pemit %#=ANONYMOUS: %q<bbanon>;@pemit %#=MANDATORY: %q<bbmandatory>;@pemit %#=u(FOOTER)
&ADMIN`SET`SHOW [u(cobj,bbs)]=@pemit %#=u(header,u(FUN`NAME,%q<bbname> Settings));@pemit %#=ANONYMOUS: %q<bbanon>;@pemit %#=MANDATORY: %q<bbmandatory>;@pemit %#=u(FOOTER)

&ADMIN`SET`PARAMETER`MANDATORY [u(cobj,bbs)]=@attach %!/INC`VALID`BOOL=%2;@attach %!/INC`DOSQL=SET`MANDATORY,%q<value>,%q<bbid>
&ADMIN`SET`PARAMETER`ANONYMOUS [u(cobj,bbs)]=@select/inline strlen(%2)=0,{th u(setq,value,NULL)},{@attach %!/INC`VALID`WORD=%2};@attach %!/INC`DOSQL=SET`ANONYMOUS,switch(%q<value>,NULL,NULL,'[sqlescape(%q<value>)]'),%q<bbid>
Expand Down Expand Up @@ -224,11 +221,11 @@ th u(NEWCOBJ,Volund's Board System <BBS>,bbs,,,,WIZARD SAFE !NO_COMMAND,INHERIT

&INFO`MAIN [u(cobj,bbs)]=@attach %!/INC`FINDBB=%0;@pemit %#=u(header,INFO: %q<bbname>);@pemit %#=u(separator,Locks);@dolist/inline read post admin={@pemit %#=[ansi(h,ucstr(%i0) LOCK:)]%B[r(bb%i0)]};@pemit %#=u(separator,Config);@pemit %#=[ansi(h,ANONYMOUS:)]%b%q<bbanon>%R[ansi(h,MANDATORY:)]%B%q<bbmandatory>;@pemit %#=u(footer)

&READ`LISTMESS [u(cobj,bbs)]=@attach %!/INC`FINDBB=%0,READ;th u(setq,pages,add(div(u(mysql,COUNT`POSTS,%q<bbid>),100),1));@select/inline gt(%q<pages>,%q<page>)=1,{th u(setq,page,%q<pages>)};@pemit %#=u(HEADER,u(fun`name,if(strlen(%q<gname>),%q<gname>%B-%B)%q<bbnum>: %q<bbname>));@pemit %#=ansi(u(color,%#,BBS,COLUMN_NAMES),align(9 2 34 11 20,ID,Rd,Title,PostDate,Author));@pemit %#=u(SEPARATOR);@dolist/inline/delimit [chr(176)] [u(setr,listposts,u(mysql3,LIST`POSTS_PAGE,%q<t1accid>,%q<bbid>,mul(100,sub(%q<page>,1))))]={th u(setq,data,u(choosegame,%i0,%d0));@pemit %#=align(9 2 34 11 20,u(pueblize,u(setr,command,%q<bbalias>/[elements(%q<data>,1,chr(177))]),+bbread %q<command>),if(elements(%q<data>,6,chr(177)),U,if(elements(%q<data>,7,chr(177)),UC)),elements(%q<data>,2,chr(177)),u(fancyday,elements(%q<data>,3,chr(177)),%q<t1tz>),u(strfirstof,%q<bbanon>,if(isobjid(u(setr,poster,elements(%q<data>,5,chr(177)))),u(moniker,%q<poster>),ansi(hx,elements(%q<data>,4,chr(177))))))};@pemit %#=u(FOOTER,[if(eq(%q<page>,1),ansi(hx,<),u(pueblize,ansi(hg,<),+bbread/[sub(%q<page>,1)] %q<bbalias>))] Page %q<page> of %q<pages> [if(eq(%q<page>,%q<pages>),ansi(hx,>),u(pueblize,ansi(hg,>),+bbread/[add(%q<page>,1)] %q<bbalias>))])
&READ`LISTMESS [u(cobj,bbs)]=@attach %!/INC`FINDBB=%0,READ;th u(setq,pages,add(div(u(mysql,COUNT`POSTS,%q<bbid>),100),1));@select/inline gt(%q<page>,%q<pages>)=1,{th u(setq,page,%q<pages>)};@pemit %#=u(HEADER,u(fun`name,if(strlen(%q<gname>),%q<gname>%B-%B)%q<bbnum>: %q<bbname>));@pemit %#=ansi(u(color,%#,BBS,COLUMN_NAMES),align(9 2 34 11 20,ID,Rd,Title,PostDate,Author));@pemit %#=u(SEPARATOR);@dolist/inline/delimit [chr(176)] [u(setr,listposts,revwords(u(mysql3,LIST`POSTS_PAGE,%q<t1accid>,%q<bbid>,mul(100,sub(%q<page>,1))),chr(176)))]={th u(setq,data,u(choosegame,%i0,%d0));@pemit %#=align(9 2 34 11 20,u(pueblize,u(setr,command,%q<bbalias>/[elements(%q<data>,1,chr(177))]),+bbread %q<command>),if(elements(%q<data>,6,chr(177)),U,if(elements(%q<data>,7,chr(177)),UC)),elements(%q<data>,2,chr(177)),u(fancyday,elements(%q<data>,3,chr(177)),%q<t1tz>),u(strfirstof,%q<bbanon>,if(isobjid(u(setr,poster,elements(%q<data>,5,chr(177)))),u(moniker,%q<poster>),ansi(hx,elements(%q<data>,4,chr(177))))))};@pemit %#=u(FOOTER,[if(eq(%q<page>,1),ansi(hx,<),u(pueblize,ansi(hg,<),+bbread/[sub(%q<page>,1)] %q<bbalias>))] Page %q<page> of %q<pages> [if(eq(%q<page>,%q<pages>),ansi(hx,>),u(pueblize,ansi(hg,>),+bbread/[add(%q<page>,1)] %q<bbalias>))])

&Q`COUNT`POSTS [u(cobj,bbs)]=SELECT COUNT(post_id) FROM vol_bbpost WHERE board_id=?

&Q`LIST`POSTS_PAGE [u(cobj,bbs)]=SELECT * FROM (SELECT p.post_display_num,p.post_title,p.post_date_created_secs,p.entity_name,p.entity_objid,r.bbread_date_checked IS NULL OR r.bbread_date_checked<p.post_unread_check,r.bbread_date_checked IS NOT NULL AND p.post_date_commented>r.bbread_date_checked FROM volv_bbpost AS p LEFT JOIN vol_bbread AS r ON p.post_id=r.post_id AND r.entity_id=? WHERE p.board_id=? ORDER BY p.post_display_num DESC LIMIT 100 OFFSET ?) as posts ORDER BY post_display_num ASC
&Q`LIST`POSTS_PAGE [u(cobj,bbs)]=SELECT p.post_display_num,p.post_title,p.post_date_created_secs,p.entity_name,p.entity_objid,r.bbread_date_checked IS NULL OR r.bbread_date_checked<p.post_unread_check,r.bbread_date_checked IS NOT NULL AND p.post_date_commented>r.bbread_date_checked FROM volv_bbpost AS p LEFT JOIN vol_bbread AS r ON p.post_id=r.post_id AND r.entity_id=? WHERE p.board_id=? ORDER BY p.post_display_num DESC LIMIT 100 OFFSET ?

&READ`CHECKPOST [u(cobj,bbs)]=@attach %!/INC`FINDBB=%0,READ;@check strlen(%1)=@attach %!/INC`MSG=ERROR: No posts entered to check.;@check words(u(setr,mes,u(mysql,POSTS`EXISTS,u(sql`in`number,u(FUN`MESSLIST,%q<t1idfallback>,%q<bbid>,%1)),%q<bbid>)))=@attach %!/INC`MSG=ERROR: Posts not found.;@stop gt(u(setr,tot,words(%q<mes>)),100)=@attach %!/INC`MSG=ERROR: Cannot display over 100 posts at once.;@dolist/inline %q<mes>={@attach/localize %!/READ`SHOWPOST=##};@pemit %#=u(footer)

Expand Down Expand Up @@ -295,4 +292,4 @@ th u(NEWCOBJ,Volund's Board System <BBS>,bbs,,,,WIZARD SAFE !NO_COMMAND,INHERIT

&FIL`MANDATORY [u(Cobj,bbs)]=cand(u(FIL`TESTLOCK,%0,%1,%2),u(mysql,COUNT`UNREAD,u(fallback,%1),elements(%0,3,chr(177))))

&Q`COUNT`UNREAD [u(Cobj,bbs)]=SELECT COUNT(r.post_id) FROM volv_bbpost AS p LEFT JOIN vol_bbread AS r ON r.post_id=p.post_id AND r.entity_id=? WHERE p.board_id=? AND (r.bbread_date_checked IS NULL OR r.bbread_date_checked<p.post_unread_check) LIMIT 1
&Q`COUNT`UNREAD [u(Cobj,bbs)]=SELECT COUNT(p.post_id) FROM volv_bbpost AS p LEFT JOIN vol_bbread AS r ON r.post_id=p.post_id AND r.entity_id=? WHERE p.board_id=? AND (r.bbread_date_checked IS NULL OR r.bbread_date_checked<p.post_unread_check) LIMIT 1
49 changes: 49 additions & 0 deletions CHANGES_31.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
CHANGELOG: 3.1

SCENESYS:
* +scene/edit now properly documented. it uses ^^^ to split before/after, just like +bbedit.
* +scene/joins are now timestamped. Timestamps older than 8h are invalidated. This is to prevent posing to the wrong scene two days later by accident.
* +scene/start and +scene/continue now link the room to the scene. To log a scene you must be in said room. This means only one scene can ever be active in a location at a time. Again, to prevent accidental cross-scene logging.
* +scene/upcoming aka +events, +Scenes, etc, now shows an empty day for today if there are no scenes today. This should make it easier to not mistake tomorrow for today, etc.
* +scene/old now displays the scene's creation date instead of its finish date, as the latter might be wildly inaccurate.
* Several fixes to the way scene data is created and handled.

ACCOUNT:
* +account/options MAIL option now works properly.

BBS:
* The Mandatory board alert system now functions properly.
* +bbadmin/create now gives output on a success.
* +bbadmin/create works properly for setting default permissions now.
* +help bbs/admin is now accurate.
* +bbread/# now works for pagifying properly.

GROUP:
* GBADMIN permission in default rank data renamed to BBADMIN. It was already supposed to be this, I just forgot.
* +help Groups/Membership now explains Group Titles.
* Group RADIO setting now processes kicks properly.
* Added +group/options with the ability to make +group <target> change focus.

GUESTS:
* Guests are no longer automatically added to 'CHANNELS_PLAYERS' list by the Account System.
* Guest creation now works properly.

GRID:
* +district/subcreate no longer gives display errors.
* +shelp +district now displays properly. Pesky commas!

JOBS:
+job/newbucket now sets default permissions properly.

MEETME:
* Displays now use the proper character (target, not enactor!) for figuring out width/color/formatting.

SCENESYS:
* Now respects @lock/speech properly.

THEME aka FCLIST:
* +Theme/status now works properly.

TECHNICAL/MISC:
* Removed the vol_game_config legacy function.
* SQL Schema no longer uses nested Stored Procedures due to incompatability with PennMUSH's sql connection. Simply re-run the Schema.sql file to fix.
Loading

0 comments on commit f401295

Please sign in to comment.