Skip to content

Commit

Permalink
2.0 Beta - Cleanups
Browse files Browse the repository at this point in the history
We're still fixing things, but it's pretty much ready!
  • Loading branch information
volundmush committed Sep 14, 2015
1 parent 8c37abc commit 093d936
Show file tree
Hide file tree
Showing 32 changed files with 894 additions and 785 deletions.
2 changes: 1 addition & 1 deletion Account Management System - AMS.txt
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ th u(NEWCONF,config,SYSTEM,AUTO_ACCOUNT,1,Auto-Bind accounts based on IP?,BOOL)

&Q`GET`LOGINS [u(cobj,ams)]=SELECT login_result,login_address,UNIX_TIMESTAMP(login_date),login_reason from $LOGINS$ as logins LEFT JOIN $PLAYERS$ as players ON players.player_id=logins.player_id WHERE players.objid=? ORDER BY login_date ASC LIMIT 10

&TRG`IP`CLEANCONNLOGS [u(cobj,ams)]=@attach %!/INC`IDCHECK=%0;@check %q<id>;th u(setq,keepids,u(mysql,GET`GOOD_LOGINS,%q<id>));@attach %!/INC`DOSQL=DELETE`OLD_LOGINS=%q<id>,u(SQL`IN`NUMBER,%q<keepids>)
&TRG`IP`CLEANCONNLOGS [u(cobj,ams)]=@attach %!/INC`IDCHECK=%0;@check %q<id>;th u(setq,keepids,u(mysql,GET`GOOD_LOGINS,%q<id>));@attach %!/INC`DOSQL=DELETE`OLD_LOGINS,%q<id>,u(SQL`IN`NUMBER,%q<keepids>)

&Q`GET`GOOD_LOGINS [u(cobj,ams)]=SELECT login_id FROM $LOGINS$ WHERE player_id=? ORDER BY login_date DESC LIMIT 20
&Q`DELETE`OLD_LOGINS [u(cobj,ams)]=DELETE FROM $LOGINS$ WHERE player_id=? AND login_id NOT IN (!)
Expand Down
6 changes: 3 additions & 3 deletions Ancestor Objects - Room Parents.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
@@ DEPENDENCIES: CORE

@@ ANCESTOR ROOM
@select/inline isdbref(u(coi,ar))=1,{&COBJ`ANCESTOR_ROOM [cobj,mco]=[u(coi,ar)]},0,{@select/inline isdbref(u(cobj,ancestor_room))=0,{th u(attrib_set,u(cobj,mco),COBJ`ANCESTOR_ROOM,dig(Ancestor Room))}}
@select/inline isdbref(u(coi,ar))=1,{&COBJ`ANCESTOR_ROOM [u(cobj,mco)]=[u(coi,ar)]},0,{@select/inline isdbref(u(cobj,ancestor_room))=0,{th u(attrib_set,u(cobj,mco),COBJ`ANCESTOR_ROOM,dig(Ancestor Room))}}

&HEADER [u(cobj,ancestor_room)]=header(%0,,%1,,v(COLOR`BORDER),v(COLOR`HEADER_STAR),v(COLOR`HEADER_TEXT))
&SEPARATOR [u(cobj,ancestor_room)]=separator(%0,,%1,,v(COLOR`BORDER),v(COLOR`HEADER_STAR),v(COLOR`HEADER_TEXT))
Expand Down Expand Up @@ -48,7 +48,7 @@ th u(NEWCONF,pconf,ROOM,EXITALIAS,,Color of exit names.,COLOR)

@@ ANCESTOR PLAYER

@select/inline isbref(u(setr,ap,pmatch(*ancestor player)))=1,{th u(attrib_set,u(cobj,mco),COBJ`ANCESTOR_PLAYER,%q<ap>)},0,{@select/inline isdbref(u(cobj,ancestor_player))=0,{th u(attrib_set,u(cobj,mco),COBJ`ANCESTOR_PLAYER,pcreate(Ancestor Player,digest(md5,secs())))}}
@select/inline isdbref(u(setr,ap,u(coi,ap)))=1,{th u(attrib_set,u(cobj,mco),COBJ`ANCESTOR_PLAYER,%q<ap>)},0,{@select/inline isdbref(u(cobj,ancestor_player))=0,{th u(attrib_set,u(cobj,mco),COBJ`ANCESTOR_PLAYER,pcreate(Ancestor Player,digest(md5,secs())))}}
@tel [u(cobj,ancestor_player)]=[u(cobj,ancestor_room)]

@pageformat [u(cobj,ancestor_player)]=ansi(color(%@,COLOR,PAGE),colornames(%!,%4,PAGES,lwho(%!),%#))
Expand All @@ -67,5 +67,5 @@ th u(NEWCONF,pconf,COLOR,PAGE,,For incoming pages.,COLOR)
th u(NEWCONF,pconf,COLOR,OUTPAGE,,For outgoing pages.,COLOR)

@@ ANCESTOR THING
@select/inline isbref(u(coi,at))=1,{th u(attrib_set,u(cobj,mco),COBJ`ANCESTOR_THING,u(coi,at))},0,{@select/inline isdbref(u(coi,ae))=0,{th u(attrib_set,u(cobj,mco),COBJ`ANCESTOR_THING,create(Ancestor Thing <AT>))}}
@select/inline isdbref(u(coi,at))=1,{th u(attrib_set,u(cobj,mco),COBJ`ANCESTOR_THING,u(coi,at))},0,{@select/inline isdbref(u(coi,ae))=0,{th u(attrib_set,u(cobj,mco),COBJ`ANCESTOR_THING,create(Ancestor Thing <AT>))}}
@tel [u(cobj,ancestor_thing)]=[u(cobj,ancestor_room)]
5 changes: 4 additions & 1 deletion Bulletin Board System - BBS.txt
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ th u(NEWCOBJ,Volund's Board System <BBS>,bbs,,,,WIZARD SAFE !NO_COMMAND,INHERIT

&FIL`CANREAD`BB [u(cobj,bbs)]=cor(not(u(FUN`READLOCK`BB,%0,%1)),elock(%0,%1),u(isadmin,%1))
&FIL`CANWRITE`BB [u(cobj,bbs)]=cor(not(u(FUN`WRITELOCK`BB,%0,%1)),elock(%0/enter,%1),u(isadmin,%1))
&FIL`CANADMIN`BB [u(Cobj,bbs)]=u(isadmin,%1)

&FUN`READLOCK`BB [u(cobj,bbs)]=switch(v(game),PennMUSH,not(strmatch(lock(%0),*UNLOCKED*)),RhostMUSH,t(strlen(lock(%0))))
&FUN`WRITELOCK`BB [u(cobj,bbs)]=switch(v(game),PennMUSH,not(strmatch(lock(%0/enter),*UNLOCKED*)),RhostMUSH,t(strlen(lock(%0/enter))))
Expand Down Expand Up @@ -137,7 +138,7 @@ th u(NEWCONF,config,BBS,GBS,1,Enable group boards?,BOOL)

&FIL`UNREADBB [u(cobj,bbs)]=t(words(setdiff(edit(u(lattr,%0/~`*),~`,),u(FUN`GETREAD,%1,%0))))

&INC`READ`LISTGROUPS [u(cobj,bbs)]=@pemit %#=u(HEADER,u(fun`name,%0,%q<bb>,%q<gid1>));@pemit %#=[space(7)]Board Name[space(20)]Last Post[space(6)]# of messages;@pemit %#=u(SEPARATOR);@dolist %q<visigroups>={th u(setq,listposts,u(FUN`LISTPOSTS,##));@pemit %#=rjust(u(pueblize,u(setr,bbnum,match(%q<allboards>,##)),+[lcstr(%0)]read [match(%q<allboards>,##)]),2)[center(u(FUN`SHOWLOCK,##,%#,%q<gid1>,%0),5)][ljust(u(pueblize,u(moniker,##),+[lcstr(%0)]read %q<bbnum>),30)][ljust(if(u(setr,time,first(elements(u(setr,details,get(##/~`[u(setr,last,last(%q<listposts>))]`DETAILS)),4 3,|,%B))),u(fancyday,%q<time>,%#),None),20)][rjust(words(%q<listposts>),3)]%b[ljust(if(words(setdiff(%q<listposts>,u(FUN`GETREAD,%#,##))),U),2)];@select/inline #@=words(%q<visigroups>),{@pemit %#=u(SEPARATOR)%r'*' = restricted[space(5)]'-' = read only[space(5)]'%(-%)' = read only\, but you can write%r[u(SUBHEADER)]}}
&INC`READ`LISTGROUPS [u(cobj,bbs)]=@pemit %#=u(HEADER,u(fun`name,%0,%q<bb>,%q<gid1>));@pemit %#=ansi(u(color,%#,COLOR,COLUMN_NAMES),[space(7)]Board Name[space(20)]Last Post[space(6)]# of messages);@pemit %#=u(SEPARATOR);@dolist %q<visigroups>={th u(setq,listposts,u(FUN`LISTPOSTS,##));@pemit %#=rjust(u(pueblize,u(setr,bbnum,match(%q<allboards>,##)),+[lcstr(%0)]read [match(%q<allboards>,##)]),2)[center(u(FUN`SHOWLOCK,##,%#,%q<gid1>,%0),5)][ljust(u(pueblize,u(moniker,##),+[lcstr(%0)]read %q<bbnum>),30)][ljust(if(u(setr,time,first(elements(u(setr,details,get(##/~`[u(setr,last,last(%q<listposts>))]`DETAILS)),4 3,|,%B))),u(fancyday,%q<time>,%#),None),20)][rjust(words(%q<listposts>),3)]%b[ljust(if(words(setdiff(%q<listposts>,u(FUN`GETREAD,%#,##))),U),2)];@select/inline #@=words(%q<visigroups>),{@pemit %#=u(SEPARATOR)%r'*' = restricted[space(5)]'-' = read only[space(5)]'%(-%)' = read only\, but you can write%r[u(SUBHEADER)]}}

&FUN`SHOWLOCK [u(cobj,bbs)]=switch(u(FUN`READLOCK`%3,%0):[u(FUN`WRITELOCK`%3,%0)]:[u(FIL`CANWRITE`%3,%0,%1,%2)],1:*,*,0:1:0,-,0:1:1,lit((-)),0:0:1,)

Expand Down Expand Up @@ -242,6 +243,8 @@ th u(NEWCONF,config,BBS,GBS,1,Enable group boards?,BOOL)

&MIGRATE`BBS`GROUP [u(cobj,migrate)]=th u(setq,gid1,%0);@dolist get(%0/BOARDS)={@tel ##=[u(cobj,oldbox)];@attach u(cobj,bbs)/INC`NEWGROUP=GB,name(%1);&ORDER %q<bb>=mul(inum(0),10);@cpattr %q<bdb>/BB`##`ANONYMOUS=%q<bb>/ANONYMOUS;@cpattr %q<bdb>/BB`##`NEXT=%q<bb>/NEXT;@cpattr %q<bdb>/BB`##`GREAD=%q<bb>/CANREAD;@cpattr %q<bdb>/BB`##`GWRITE=%q<bb>/CANWRITE;@dolist/inline u(lattr,%1/*)={@cpattr %1/%i0=%q<bb>/~`%i0;@cpattr %1/%i0`HDR=%q<bb>/~`%i0`HDR;@cpattr %1/%i0`TIMEOUT=%q<bb>/~`%i0`TIMEOUT;@cpattr %1/%i0`NOTIMEOUT=%q<bb>/~`%i0`NOTIMEOUT;&~`%i0`DETAILS %q<bb>=u(filter,STRLEN,get(%1/%i0`BY)|[get(%1/%i0`BYDB)]|[get(%1/%i0`ON)]|[get(%1/%i0`EDITED)],|,|)}}

&CONFLICT`BBS [u(cobj,migrate)]=@dolist/inline u(coi,bbs)={@set %i0=NO_COMMAND HALT;@tel %i0=u(cobj,oldbox)}

&FIL`STRLEN [u(cobj,migrate)]=t(strlen(%0))

@@ COMMUNICATIONS - BBS
Expand Down
10 changes: 6 additions & 4 deletions CORE 01 - Master Code Object - MCO.txt
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,8 @@ th if(isdbref(u(cobj,mco)),,setq(0,create(Master Code Object <MCO>))[tel(%q0,swi
&STARTUP [u(cobj,mco)]=@dolist/inline u(lattr,%!/STARTUP`*)={@include/nobreak %!/##}

&STARTUP`FUNCTIONS [u(cobj,mco)]=@include %!/STARTUP`FUNCTIONS`[v(game)]
&STARTUP`FUNCTIONS`PENNMUSH [u(cobj,mco)]=@dolist/inline setunion(game_config header subheader separator isadmin isapproved approved sortname color mxpmenu pueblize my_config speech chancolor colornames choosegame sortorder namelink,v(FUNCTIONLIST`EXTRA))={@function %i0=u(cobj,mco),%i0;@function/restrict %i0=localize};@dolist/inline v(FUNCTIONLIST`ADMIN)={@function/restrict %i0=admin}
&STARTUP`FUNCTIONS`RHOSTMUSH [u(cobj,mco)]=@dolist/inline setunion(align lalign sortkey game_config header subheader separator isadmin isapproved approved moniker lvplayers lvthings lvexits sortname color mxpmenu pueblize strfirstof table my_config speech chancolor colornames choosegame sortorder objid namelink,v(FUNCTIONLIST`EXTRA))={@function/privileged %d0=%!/%d0};@dolist/inline v(FUNCTIONLIST`ADMIN)={@admin function_access=%d0 wizard}
&STARTUP`FUNCTIONS`PENNMUSH [u(cobj,mco)]=@dolist/inline setunion(game_config header subheader separator isadmin isapproved approved sortname color mxpmenu pueblize my_config speech chancolor colornames choosegame sortorder namelink weblink,v(FUNCTIONLIST`EXTRA))={@function %i0=u(cobj,mco),%i0;@function/restrict %i0=localize};@dolist/inline v(FUNCTIONLIST`ADMIN)={@function/restrict %i0=admin}
&STARTUP`FUNCTIONS`RHOSTMUSH [u(cobj,mco)]=@dolist/inline setunion(align lalign sortkey game_config header subheader separator isadmin isapproved approved moniker lvplayers lvthings lvexits sortname color mxpmenu pueblize strfirstof table my_config speech chancolor colornames choosegame sortorder objid namelink weblink,v(FUNCTIONLIST`EXTRA))={@function/privileged %d0=%!/%d0};@dolist/inline v(FUNCTIONLIST`ADMIN)={@admin function_access=%d0 wizard}

&FUNCTIONLIST`EXTRA [u(cobj,mco)]=
&FUNCTIONLIST`ADMIN [u(cobj,mco)]=
Expand Down Expand Up @@ -457,7 +457,7 @@ th if(isdbref(u(cobj,mco)),,setq(0,create(Master Code Object <MCO>))[tel(%q0,swi
@@ Sort section.

&SORTATTR [u(cobj,mco)]=u(SORTATTR`[v(game)],%0,if(strlen(%1),%1,%B),if(strlen(%2),%2,%B))
&SORTATTR`PENNMUSH [u(cobj,mco)]=sortkey(SRT`ATTRSLOT,%0,%1,%2)
&SORTATTR`PENNMUSH [u(cobj,mco)]=sortkey(#lambda/last(\%0,`),%0,n,%1,%2)
&SORTATTR`RHOSTMUSH [u(cobj,mco)]=sortby(#lambda/[lit([ncomp(last(%0,`),last(%1,`))])],%0,%1,%2)

&SORTIDLE [u(cobj,mco)]=u(SORTIDLE`[v(game)],%0,if(strlen(%1),%1,%B),if(strlen(%2),%2,%B))
Expand Down Expand Up @@ -515,7 +515,7 @@ th if(isdbref(u(cobj,mco)),,setq(0,create(Master Code Object <MCO>))[tel(%q0,swi

&SYSTEM`NAME [u(cobj,mco)]=SYSTEM

&INC`CHECKPC [u(cobj,mco)]=@check strlen(%0)=@attach %!/INC`MSG=ERROR: You must enter a player name!;@check strlen(%1);@check isdbref(u(setr,t%1,pmatch(%0)))=@attach %!/INC`MSG=ERROR: %0 [if(strmatch(%q<t%1>,#-2*),matches multiple players!,does not match a player!)];th u(setq,t%1objid,u(objid,pmatch(%0)));th u(setq,t%1name,name(pmatch(%0)));th u(setq,t%1acc,u(accid,pmatch(%0)));@select/inline t(%2)=1,{th u(setq,t%1id,u(mysql,GET`ID_FROM_OBJID,u(objid,%0)))}
&INC`CHECKPC [u(cobj,mco)]=@check strlen(%0)=@attach %!/INC`MSG=ERROR: You must enter a player name!;@check strlen(%1);@check isdbref(u(setr,t%1,pmatch(%0)))=@attach %!/INC`MSG=ERROR: %0 [if(strmatch(%q<t%1>,#-2*),matches multiple players!,does not match a player!)];th u(setq,t%1objid,u(objid,pmatch(%0)));th u(setq,t%1name,name(pmatch(%0)));th u(setq,t%1acc,u(accid,pmatch(%0)));@select/inline t(%2)=1,{th u(setq,t%1id,u(mysql,GET`ID_FROM_OBJID,u(objid,pmatch(%0))))}
@@ CHECK PC Arguments: %0 = player being checked, %1 = register number to load their data into. %2 - Boolean for also looking up a SQL id.

&INC`IDCHECK [u(cobj,mco)]=@select/inline t(u(setr,id,u(mysql,GET`ID_FROM_OBJID,u(objid,%0))))=0,{@attach %!/INC`DOSQL=INSERT`PLAYER,u(objid,%0),name(%0);@attach %!/INC`IDCHECK}
Expand Down Expand Up @@ -626,6 +626,8 @@ th if(isdbref(u(cobj,mco)),,setq(0,create(Master Code Object <MCO>))[tel(%q0,swi
&PLAYER_CONFIG [u(cobj,mco)]=localize(u(strfirstof,if(isdbref(u(setr,accid,u(accid,%0))),get(%q<accid>/D`CONFIG`%1`%2)),get(%0/D`CONFIG`%1`%2),get(u(cobj,pconf)/DEFAULT`%1`%2)))

&APPROVED [u(cobj,mco)]=u(isapproved,%0)
&APPROVED2 [u(cobj,mco)]=u(isapproved,%#)


&ISAPPROVED [u(cobj,mco)]=if(u(game_config,SYSTEM,REQUIRE_APPROVAL),default(%0/D`APPROVED,0),1)

Expand Down
5 changes: 2 additions & 3 deletions Group Management System - GMS.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
@@ DEPENDENCIES: Core
@@ RECOMMENDED: BBS - Installing the BBS will give each group their own +gboards.
@@ Group channel recall requires MySQL
@@ NOTE: Installation requires a @shutdown/reboot or @restart u(cobj,gms) to install grpperm().

th u(NEWCOBJ,Group Management System <GMS>,gms,,,,WIZARD SAFE !NO_COMMAND,INHERIT SIDEFX SAFE)
Expand Down Expand Up @@ -104,9 +103,9 @@ th u(NEWCOBJ,Group Object Parent <GOP>,gop,u(cobj,gms),,1,WIZARD SAFE,INHERIT SI
&ISGROUPMEMBER [u(cobj,gms)]=elock(if(isdbref(%1),%1,u(FUN`FINDGROUP,%1)),%0)

&INC`CHOOSE`+G`DISBAND`MAIN [u(cobj,gms)]=@attach %!/INC`CODE`VALGROUP=u(strfirstof,u(getstat,%#,D`GROUP,Group),0),1;@attach %!/INC`CODE`DISBAND
&INC`CODE`DISBAND [u(cobj,gms)]=@check u(FUN`GRPPERM,u(objid,%#),%q<gid1>,DISBAND)=@attach %!/INC`MSG=ERROR: Permission denied.;@select/inline t(u(FUN`GETSET,%q<gid1>,MAJOR))=1,{@check u(iswizard,%#)=@attach %!/INC`MSG=ERROR: Disbanding of MAJOR groups is WIZ-ONLY.};@check strmatch(%0,%q<gname1>)=@attach %!/INC`MSG=ERROR: To disband a group, you must also enter its exact name.;@attach %!/INC`VERIFY={WARNING: This will completely disband %q<gname1>. Are you sure you want to continue? Enter the same command again within 10 seconds to Verify!},FAC DELETE %q<gid1>;@attach %!/INC`CODE`CHAT={[ansi(hw,ALERT:)] %n has Disbanded the Group!},OOC,1;@parent %q<gid1>;@name %q<gid1>=%q<gname1>-OLD;@attach %!/INC`MSG=The Group has been disbanded. It has been moved to storage. If this was in error\, please have a wizard [ansi(h,@parent %q<gid1>=[u(cobj,gop)])] and [ansi(h,@name %q<gid1>=%q<gname1>)];@attach %!/INC`MSG`CHAN=DISBANDED Group: %q<gname1>. If this was in error, a wizard can undo this by typing [ansi(h,@parent %q<gid1>=[u(cobj,gop)])] and [ansi(h,@name %q<gid1>=%q<gname1>)]. If This was intentional\, a wizard will need to manually dispose of object %q<gid1> and any Boards it contains. Deletion or relocation will initiate player setting cleanup.
&INC`CODE`DISBAND [u(cobj,gms)]=@check u(FUN`GRPPERM,u(objid,%#),%q<gid1>,DISBAND)=@attach %!/INC`MSG=ERROR: Permission denied.;@select/inline t(u(FUN`GETSET,%q<gid1>,MAJOR))=1,{@check u(iswizard,%#)=@attach %!/INC`MSG=ERROR: Disbanding of MAJOR groups is WIZ-ONLY.};@check strmatch(%0,%q<gname1>)=@attach %!/INC`MSG=ERROR: To disband a group, you must also enter its exact name.;@attach %!/INC`VERIFY={WARNING: This will completely disband %q<gname1>. Are you sure you want to continue? Enter the same command again within 10 seconds to Verify!},FAC DELETE %q<gid1>;@attach %!/INC`CODE`CHAT={[ansi(hw,ALERT:)] %n has Disbanded the Group!},OOC,1;@parent %q<gid1>;@name %q<gid1>=%q<gname1>-OLD;@attach %!/INC`MSG=The Group has been disbanded. It has been moved to storage. If this was in error\, please have a wizard [ansi(h,@parent %q<gid1>=[u(cobj,gop)])] and [ansi(h,@name %q<gid1>=%q<gname1>)];@attach %!/INC`MSG`CHAN=DISBANDED Group: %q<gname1>. If this was in error\, a wizard can undo this by typing [ansi(h,@parent %q<gid1>=[u(cobj,gop)])] and [ansi(h,@name %q<gid1>=%q<gname1>)]. If This was intentional\, a wizard will need to manually dispose of object %q<gid1> and any Boards it contains. Deletion or relocation will initiate player setting cleanup.;@dolist/inline get(%q<gid1>/MEMBERS)={@attach %!/WIPE=##,D`CACHE}

&PLAYER`CONNECT`GROUPCLEAN [u(cobj,gms)]=@check u(nattr,%0/D`GROUP`*);@check words(u(setr,dbs,edit(u(lattr,%0/D`GROUP`#*),D`GROUP`,)));@check words(u(setr,purge,setdiff(%q<dbs>,lthings(u(cobj,gop)))));@dolist %q<purge>={@wipe %0/D`GROUP`##}
&PLAYER`CONNECT`GROUPCLEAN [u(cobj,gms)]=@check u(nattr,%0/D`GROUP`*);@check words(u(setr,dbs,edit(u(lattr,%0/D`GROUP`#*),D`GROUP`,)));@check words(u(setr,purge,setdiff(%q<dbs>,lthings(u(cobj,gop)))));@dolist %q<purge>={@attach %!/WIPE=%0,D`GROUP`##;@attach %!/WIPE=%0,D`CACHE}

&PLAYER`DISCONNECT`CLEANGAG [u(cobj,gms)]=@stop %1;@wipe %0/D`GROUP`#*`*GAG

Expand Down
1 change: 1 addition & 0 deletions Info Management System - IMS.txt
Original file line number Diff line number Diff line change
Expand Up @@ -57,5 +57,6 @@ th u(NEWCOBJ,Info Management System <IMS>,ims,,,,WIZARD SAFE !NO_COMMAND,INHERIT
+shelp/category +info=Character
&SHLP`+INFO [u(cobj,ims)]=Staff are able to see, create, edit, delete, rename, and otherwise manage +info and +pinfo files on any character. The commands work the same as for players via <name>/<filename>.%R%R[ansi(hc,Staff Commands)]%R[align(5 [sub(u(width,%#),6)],,[ansi(h,+info/lock <player>/<filelist>)] - Lock one or more info files.%R[ansi(h,+info/unlock <player>/<filelist>)] - Unlock one or more info files.%R%RLocked files cannot be edited by players. This is useful for 'approved information' depending on the game.)]

&MIGRATE`INFO [u(cobj,migrate)]=

&CONFLICT`INFO [u(cobj,migrate)]=@tel u(coi,ifo)=u(cobj,oldbox);@set u(coi,ifo)=NO_COMMAND HALT
Loading

0 comments on commit 093d936

Please sign in to comment.