From 385873c8a782f7a9fe8a53f8731294b107fe5374 Mon Sep 17 00:00:00 2001 From: Andrew Bastien Date: Sat, 5 Sep 2015 21:10:20 -0400 Subject: [PATCH] 2.0 Beta Too many fixes to list. It'll be finished soon! --- Bulletin Board System - BBS.txt | 4 +- CORE 01 - Master Code Object - MCO.txt | 15 +- Channel Management System - CMS.txt | 10 +- FCList Management System - FCLIST.txt | 4 +- Finger Management System - FINGER.txt | 2 +- Group Management System - GMS.txt | 6 +- Help Management System - HELP.txt | 8 +- Info Management System - IMS.txt | 4 +- Who System - WHO.txt | 7 +- scenesys/README.txt | 15 +- scenesys/Scene System - SCENE.txt | 21 +- .../Character Data Editor - DATA.txt | 12 +- .../exalted3/Character Data Editor - DATA.txt | 199 +++++++++++++++++ .../Character Data Object - EX-CDO.txt | 206 ------------------ .../exalted3/Pools System Object - EX-PSO.txt | 62 +++--- 15 files changed, 292 insertions(+), 283 deletions(-) create mode 100644 unfinished/storyteller/exalted3/Character Data Editor - DATA.txt delete mode 100644 unfinished/storyteller/exalted3/Character Data Object - EX-CDO.txt diff --git a/Bulletin Board System - BBS.txt b/Bulletin Board System - BBS.txt index 0aff01b..3dabaaf 100644 --- a/Bulletin Board System - BBS.txt +++ b/Bulletin Board System - BBS.txt @@ -150,7 +150,7 @@ th u(NEWCONF,config,BBS,GBS,1,Enable group boards?,BOOL) &FUN`GETTIMEOUT [u(cobj,bbs)]=if(default(%0/~`%1`NOTIMEOUT,0),X,get(%0/~`%1`TIMEOUT)) @@ %0 - bbs, %1 - post -&INC`READ`SHOWPOST [u(cobj,bbs)]=@attach %!/INC`CHECK`FINDPOST=%0,%1,%2;@pemit %#=u(HEADER,u(fun`name,%0,%2,%q));@pemit %#=ljust(Message: %q/%q %([if(not(u(game_config,bbs,auto_timeout)),No System Timeout,switch(u(setr,showtimeout,u(FUN`GETTIMEOUT,%q,%q)),X,No Timeout,>0,etime(%q),Timed Out!))]%),35)Posted[space(8)]Author%r[ljust(get(%2/~`%q`HDR),35)][ljust(u(fancyday,first(elements(u(setr,details,get(%2/~`%q`DETAILS)),4 3,|,%B)),%#),14)][left(if(strlen(%q),if(%q,%([ansi(hx,get(%q/%q`BY))]%),%q),u(moniker,elements(%q
,2,|))),21)]%R[u(SEPARATOR)];@pemit %#=get(%q/~`%q);@select/inline t(u(nattr,%q/~`%q`COMM`*))=1,{@attach %!/INC`READ`SHOWCOMMS},0,{@pemit %#=u(SUBHEADER)};th u(FUN`SETREAD,%#,%2,%q) +&INC`READ`SHOWPOST [u(cobj,bbs)]=@attach %!/INC`CHECK`FINDPOST=%0,%1,%2;@pemit %#=u(HEADER,u(fun`name,%0,%2,%q));@pemit %#=ljust(Message: %q/%q %([if(not(u(game_config,bbs,auto_timeout)),No System Timeout,switch(u(setr,showtimeout,u(FUN`GETTIMEOUT,%q,%q)),X,No Timeout,>0,etime(%q),Timed Out!))]%),35)Posted[space(8)]Author%r[ljust(get(%2/~`%q`HDR),35)][ljust(u(fancyday,first(elements(u(setr,details,get(%2/~`%q`DETAILS)),4 3,|,%B)),%#),14)][left(if(strlen(%q),if(%q,%([ansi(hx,elements(%q
,1,|))]%),%q),u(moniker,elements(%q
,2,|))),21)]%R[u(SEPARATOR)];@pemit %#=get(%q/~`%q);@select/inline t(u(nattr,%q/~`%q`COMM`*))=1,{@attach %!/INC`READ`SHOWCOMMS},0,{@pemit %#=u(SUBHEADER)};th u(FUN`SETREAD,%#,%2,%q) &INC`READ`SHOWCOMMS [u(cobj,bbs)]=@dolist u(setr,allcomms,u(sortattr,u(lattr,%q/%q`COMM`*)))={@pemit %#=u(SEPARATOR,Comment #@ - Added [u(fancytime,get(%q/##`ON),%#)]);@pemit %#=u(moniker,get(%q/##`BY)) Commented:;@pemit %#=get(%q/##);@select/inline #@=1,{@pemit %#=u(SUBHEADER)}} @@ -188,7 +188,7 @@ th u(NEWCONF,config,BBS,GBS,1,Enable group boards?,BOOL) &INC`CONFIG [u(cobj,bbs)]=@attach %!/INC`CHECK`FINDBB=%0,%1,WRITE;@select/inline strlen(%2)=0,{@attach %!/INC`CONFIG`BOARD`SHOW},{@attach %!/INC`PARTIAL=%2,anonymous|timeout[switch(%0,BB,|mandatory)],|,parameter,parameter;@select/inline strlen(%3)=0,{@attach %!/INC`MSG=%q for Board [name(%q)] cleared.;&%q %q},{@attach %!/INC`CONFIG`GLOBAL`%q;@attach %!/INC`MSG=%q for Board [name(%q)] set to: %3.;&%q %q=u(strfirstof,%q,%3)}} -&INC`CONFIG`BOARD`SHOW [u(cobj,bbs)]=@pemit %#=u(HEADER,%q - [name(%q)] Board Settings);@pemit %#=TIMEOUT: [u(strfirstof,u(FUN`CONFIG,%q,timeout),0)] [if(u(FUN`CONFIG,%q,timeout),- [etime(u(FUN`CONFIG,%q,timeout))])] [if(strlen(get(%q/TIMEOUT)),- Using Board Setting,- Using Global Default)];@pemit %#=ANONYMOUS: [default(%q/ANONYMOUS,))];@pemit %#=MANDATORY: [t(get(%q/MANDATORY))];@pemit %#=u(SUBHEADER) +&INC`CONFIG`BOARD`SHOW [u(cobj,bbs)]=@pemit %#=u(HEADER,%q - [name(%q)] Board Settings);@pemit %#=TIMEOUT: [u(strfirstof,u(FUN`CONFIG,%q,timeout),0)] [if(u(FUN`CONFIG,%q,timeout),- [etime(u(FUN`CONFIG,%q,timeout))])] [if(strlen(get(%q/TIMEOUT)),- Using Board Setting,- Using Global Default)];@pemit %#=ANONYMOUS: [default(%q/ANONYMOUS,)];@pemit %#=MANDATORY: [t(get(%q/MANDATORY))];@pemit %#=u(SUBHEADER) &INC`CONFIG`BOARD`TIMEOUT [u(cobj,bbs)]=@check strlen(u(setr,entry,u(stringsecs,%3)))=@attach %!/INC`MSG=ERROR: Entry doesn't convert properly. Check [u(pueblize,help stringsecs)] for proper format. &INC`CONFIG`BOARD`ANONYMOUS [u(cobj,bbs)]=@check strlen(%3)=@attach %!/INC`MSG=ERROR: Anonymous entry must be a string. diff --git a/CORE 01 - Master Code Object - MCO.txt b/CORE 01 - Master Code Object - MCO.txt index 1eb7f19..7427995 100644 --- a/CORE 01 - Master Code Object - MCO.txt +++ b/CORE 01 - Master Code Object - MCO.txt @@ -46,7 +46,7 @@ th if(isdbref(u(cobj,mco)),,setq(0,create(Master Code Object ))[tel(%q0,swi &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 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`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} &FUNCTIONLIST`EXTRA [u(cobj,mco)]= &FUNCTIONLIST`ADMIN [u(cobj,mco)]= @@ -197,7 +197,7 @@ th if(isdbref(u(cobj,mco)),,setq(0,create(Master Code Object ))[tel(%q0,swi &MONIKER`PENNMUSH [u(cobj,mco)]=moniker(%0) &MONIKER`RHOSTMUSH [u(cobj,mco)]=cname(%0) -&NAMELINK [u(cobj,mco)]=localize(u(mxpmenu,u(moniker,%0),iter(u(setr,com,u(game_config,SYSTEM,NAMELINK)),%i0 [name(%0)]),%q)) +&NAMELINK [u(cobj,mco)]=localize(u(mxpmenu,u(moniker,%0),iter(u(setr,com,u(game_config,SYSTEM,NAMELINK)),%i0 [name(%0)],|,|),%q)) &NAMEGRAB [u(cobj,mco)]=u(NAMEGRAB`[v(game)],%0,%1) &NAMEGRAB`PENNMUSH [u(cobj,mco)]=namegrab(%0,%1) @@ -263,7 +263,7 @@ th if(isdbref(u(cobj,mco)),,setq(0,create(Master Code Object ))[tel(%q0,swi @@ Rhost Functions &ALIGN [u(cobj,mco)]=[printf([iter(%0,$[case(mid(%i0,0,1),<,-[delete(%i0,0,1)],>,[delete(%i0,0,1)],_,_[delete(%i0,0,1)],-,^[delete(%i0,0,1)],=,_[delete(%i0,0,1)],-%i0)]|"s)],%1,%2,%3,%4,%5,%6,%7,%8,%9)] &SORTKEY [u(cobj,mco)]=munge(#lambda/%[sort%(%%0%,%2%,%3%)%],iter(%1,edit(u(%0,itext(0)),%b,),ifelse(!$v(3),%b,%3),ifelse(!$v(3),%b,%3)),%1,ifelse(!$v(3),%b,%3),ifelse(!$v(4),ifelse(!$v(3),%b,%3),%4)) -@@ +&LALIGN [u(cobj,mco)]=[strfunc(printf,[iter(%0,$[case(mid(%i0,0,1),<,-[delete(%i0,0,1)],>,[delete(%i0,0,1)],_,_[delete(%i0,0,1)],-,^[delete(%i0,0,1)],=,_[delete(%i0,0,1)],-%i0)]|"s)]%2%1,%2)] &BASECONV [u(cobj,mco)]=u(BASECONV`[v(game)],%0,%1,%2) &BASECONV`PENNMUSH [u(cobj,mco)]=baseconv(%0,%1,%2) @@ -351,6 +351,11 @@ th if(isdbref(u(cobj,mco)),,setq(0,create(Master Code Object ))[tel(%q0,swi &GETPROPERTY`MONIKER [u(cobj,mco)]=u(moniker,%0) &GETPROPERTY`ALIASNAME [u(cobj,mco)]=name(%0)[if(strlen(u(getalias,%0)),%B\([u(getalias,%0)]\))] &GETPROPERTY`ALIASMONIKER [u(cobj,mco)]=u(moniker,%0)[if(strlen(u(getalias,%0)),%B\([u(getalias,%0)]\))] +&GETPROPERTY`NAMELINK [u(cobj,mco)]=u(namelink,%0) +&GETPROPERTY`HIDEIDLE [u(cobj,mco)]=u(hideidle,%0) +&GETPROPERTY`HIDECONN [u(cobj,mco)]=u(hideconn,%0) +&GETPROPERTY`SEXLETTER [u(cobj,mco)]=left(get(%0/SEX),1) +&GETPROPERTY`LOCATION [u(cobj,mco)]=if(findable(%#,%0),name(loc(%0)),*UNFINDABLE*) &GETPROPERTY`WIKI [u(cobj,mco)]=u(weblink,get(%0/D`FINGER`WIKI)) &GETPROPERTY`GROUPNAMES2 [u(cobj,mco)]=u(getproperty`groupnames,%0,1) @@ -536,8 +541,8 @@ th if(isdbref(u(cobj,mco)),,setq(0,create(Master Code Object ))[tel(%q0,swi &INC`VALID`DBREF [u(cobj,mco)]=@check isdbref(%0)=@attach %!/INC`MSG={ERROR: DBREF not found.};th u(setq,value,u(objid,%0)) &INC`VALID`TZ [u(cobj,mco)]=@check valid(timezone,u(setr,value,%0))=@attach %!/INC`MSG={ERROR: That is not a valid timezone. Check help timezone} &INC`VALID`DURATION [u(cobj,mco)]=@check u(setr,value,u(stringsecs,%0))=@attach %!/INC`MSG={ERROR: '%0' did not resolve into a time. Check help stringsecs()} -&INC`VALID`POSINT [u(cobj,mco)]=@check u(valnum,%0)=@attach %!/INC`MSG={ERROR: '%0' must be a whole number 0 or greater.} -&INC`VALID`INT [u(cobj,mco)]=@check isint(%0)=@attach %!/INC`MSG={ERROR: '%0' must be a whole number 0.} +&INC`VALID`POSINT [u(cobj,mco)]=@check u(valnum,%0)=@attach %!/INC`MSG={ERROR: '[u(strfirstof,%1,%0)]' must be a whole number 0 or greater.};th u(setq,value,%0) +&INC`VALID`INT [u(cobj,mco)]=@check isint(%0)=@attach %!/INC`MSG={ERROR: '%0' must be a whole number 0.};th u(setq,value,%0) &INC`VALID`LOCK [u(cobj,mco)]=@check valid(lockkey,%0)=@attach %!/INC`MSG={ERROR: '%0' was not accepted by the @lock system.};th u(setq,value,%0) @@ MESSAGING SECTION diff --git a/Channel Management System - CMS.txt b/Channel Management System - CMS.txt index e1de777..b1bb38d 100644 --- a/Channel Management System - CMS.txt +++ b/Channel Management System - CMS.txt @@ -13,7 +13,7 @@ th u(NEWCOBJ,Muzzle Database ,muzzle,u(cobj,channel),,,WIZARD SAFE !NO_C @set [u(cobj,channel)]/CMD`+CHANNEL`PENNMUSH=regexp &CMD`+CHANNEL`RHOSTMUSH [u(cobj,channel)]=$^(?s)(?\:\+)?(?\:channel|chan)(?\:/(\\S+)?)?(?\: +(.+?))?(?\:/(.*?))?(?\:=(.*))?$:@attach %!/CMD`+CHANNEL`MAIN @set [u(cobj,channel)]/CMD`+CHANNEL`RHOSTMUSH=regexp -&CMD`+CHANNEL`MAIN [u(cobj,channel)]=th setq(sysname,CHANNEL);@attach %!/INC`GETSWITCH=%1;@include %!/INC`CHANNEL`[u(strfirstof,%q,MAIN)]=%2,%3,$4 +&CMD`+CHANNEL`MAIN [u(cobj,channel)]=th setq(sysname,CHANNEL);@attach %!/INC`GETSWITCH=%1;@include %!/INC`CHANNEL`[u(strfirstof,%q,MAIN)]=%2,%3,%4 @set [u(cobj,channel)]/CMD`+CHANNEL`[switch(v(game),PennMUSH,RHOSTMUSH,RhostMUSH,PENNMUSH)]=no_command &SYSTEM`NAME [u(cobj,channel)]=u(strfirstof,%q,CHANNEL) @@ -27,7 +27,7 @@ th u(NEWCOBJ,Muzzle Database ,muzzle,u(cobj,channel),,,WIZARD SAFE !NO_C &INC`CHANNEL`COLOR [u(cobj,channel)]=@force/inline %#=+color/channel %0=%1 -&INC`CHANNEL`ADD [u(cobj,channel)]=@check strlen(%0)=@attach %!/INC`MSG=ERROR: Channel name empty!;@check valid(channel,%0)=@attach %!/INC`MSG=ERROR: Channel name was not accepted. A channel of that name already exists or the entered name was too long or had unacceptable characters.;@select/inline strlen(%1)=>0,{@stop strmatch(ansi(%1,test),u(setr,error,#-*))=@attach %!/INC`MSG=ERROR: '%1' was not accepted by ansi()! Error returned: %q};@channel/add if(strlen(%1),ansi(%1,%0),%0)=u(game_config,CHANNELS,DEFAULT_PRIVS);@attach %!/INC`CHANNEL`INIT;@attach %!/INC`MSG=Channel [if(strlen(%1),ansi(%1,%0),%0)] created!;@attach %!/INC`MSG`CHAN=Created the [if(strlen(%1),ansi(%1,%0),%0)] channel! +&INC`CHANNEL`ADD [u(cobj,channel)]=@check strlen(%0)=@attach %!/INC`MSG=ERROR: Channel name empty!;@check valid(channel,%0)=@attach %!/INC`MSG=ERROR: Channel name was not accepted. A channel of that name already exists or the entered name was too long or had unacceptable characters.;@select/inline strlen(%1)=>0,{@stop strmatch(ansi(%2,test),u(setr,error,#-*))=@attach %!/INC`MSG=ERROR: '%2' was not accepted by ansi()! Error returned: %q};@channel/add if(strlen(%2),ansi(%2,%0),%0)=u(game_config,CHANNELS,DEFAULT_PRIVS);@attach %!/INC`CHANNEL`INIT;@attach %!/INC`MSG=Channel [if(strlen(%2),ansi(%2,%0),%0)] created!;@attach %!/INC`MSG`CHAN=Created the [if(strlen(%2),ansi(%2,%0),%0)] channel! th u(NEWCONF,config,CHANNELS,DEFAULT_PRIVS,PQ,Default priveleges for new channels.,WORD) @@ -35,11 +35,11 @@ th u(NEWCONF,config,CHANNELS,DEFAULT_PRIVS,PQ,Default priveleges for new channel &INC`CHANNEL`DELETE [u(cobj,channel)]=@attach %!/INC`PARTIAL=%0,stripansi(objeval(%#,channels(|))),|,channel,channel;@attach %!/INC`VERIFY={[ansi(hr,WARNING:)] This will delete channel %q. Are you sure? Enter the same command within ten seconds to continue!},CHANNEL DELETE %q;@select/inline isdbref(u(setr,mog,cmogrifier(%q)))=1,{@attach %!/DELETE=%q};@channel/delete %q;@attach %!/INC`MSG`CHAN=Deleted Channel %q -&INC`CHANNEL`RENAME [u(cobj,channel)]=@attach %!/INC`PARTIAL=%0,stripansi(objeval(%#,channels(|))),|,channel,channel;@check cor(u(isadmin,%#),testlock(clock(%q/Mod),%#))=@attach %!/INC`MSG=ERROR: Permission denied.;@check strlen(%1)=@attach %!/INC`MSG=ERROR: New Name field Empty.;@check valid(channel,stripansi(%1),%q)=@attach %!/INC`MSG=ERROR: Either a channel by that name already exists, or the entered new name wasn't an acceptable channel name.;@channel/name %q=trim(%1);@attach %!/INC`MSG=You have renamed channel %q to: [trim(%1)]!;@attach %!/INC`MSG`CHAN=Channel %q renamed to: [trim(%1)]! +&INC`CHANNEL`RENAME [u(cobj,channel)]=@attach %!/INC`PARTIAL=%0,stripansi(objeval(%#,channels(|))),|,channel,channel;@check cor(u(isadmin,%#),testlock(clock(%q/Mod),%#))=@attach %!/INC`MSG=ERROR: Permission denied.;@check strlen(%2)=@attach %!/INC`MSG=ERROR: New Name field Empty.;@check valid(channel,stripansi(%2),%q)=@attach %!/INC`MSG=ERROR: Either a channel by that name already exists, or the entered new name wasn't an acceptable channel name.;@channel/name %q=trim(%2);@attach %!/INC`MSG=You have renamed channel %q to: [trim(%2)]!;@attach %!/INC`MSG`CHAN=Channel %q renamed to: [trim(%2)]! -@@ &INC`CHANNEL`CONFIG [u(cobj,channel)]=@attach %!/INC`PARTIAL=%0,stripansi(objeval(%#,channels(|))),|,channel,channel;@check cor(u(isadmin,%#),testlock(clock(%q/Mod),%#))=@attach %!/INC`MSG=ERROR: Permission denied.;@stop not(strmatch(parent(u(setr,mog,cmogrifier(%q))),num(u(cobj,mop))))=@attach %!/INC`MSG=ERROR: Channel is not initialized. Please use +channel/init %q;@attach %!/INC`PARTIAL=%2,CODENAME,|,parameter,parameter;@select/inline strlen(%1)=0,{&CONF`%q %q;@attach %!/INC`MSG=You cleared Channel %q's %q Setting.},{@attach %!/INC`CHANNEL`CONFIG`%q;&CONF`%q %q=%q;@attach %!/INC`MSG=You set Channel %q's %q Setting to: %q};@attach %!/INC`MSG`CHAN=[if(strlen(%1),set,cleared)] the %q Channel's %q Setting[if(strlen(%1),%bto %1!,.)] +@@ &INC`CHANNEL`CONFIG [u(cobj,channel)]=@attach %!/INC`PARTIAL=%0,stripansi(objeval(%#,channels(|))),|,channel,channel;@check cor(u(isadmin,%#),testlock(clock(%q/Mod),%#))=@attach %!/INC`MSG=ERROR: Permission denied.;@stop not(strmatch(parent(u(setr,mog,cmogrifier(%q))),num(u(cobj,mop))))=@attach %!/INC`MSG=ERROR: Channel is not initialized. Please use +channel/init %q;@attach %!/INC`PARTIAL=%2,CODENAME,|,parameter,parameter;@select/inline strlen(%2)=0,{&CONF`%q %q;@attach %!/INC`MSG=You cleared Channel %q's %q Setting.},{@attach %!/INC`CHANNEL`CONFIG`%q;&CONF`%q %q=%q;@attach %!/INC`MSG=You set Channel %q's %q Setting to: %q};@attach %!/INC`MSG`CHAN=[if(strlen(%2),set,cleared)] the %q Channel's %q Setting[if(strlen(%2),%bto %2!,.)] -&INC`CHANNEL`MOGCONF [u(cobj,channel)]=@attach %!/INC`PARTIAL=%0,stripansi(objeval(%#,channels(|))),|,channel,channel;@check cor(u(isadmin,%#),testlock(clock(%q/Mod),%#))=@attach %!/INC`MSG=ERROR: Permission denied.;@stop not(strmatch(parent(u(setr,mog,cmogrifier(%q))),num(u(cobj,mop))))=@attach %!/INC`MSG=ERROR: Channel is not initialized. Please use +channel/init %q;@switch/first/inline gt(strlen(before(%2,/)),0)=0,{@attach %!/INC`CHANNEL`MOGCONF`SHOWCONFIG},1,{@attach %!/INC`PARTIAL=before(%2,/),v(MOGTYPES),|,mogrifier,mogrifier;@select/inline gt(strlen(after(%2,/)),0)=1,{@attach %!/INC`CHANNEL`MOGCONF`SUBCONFIG},0,{@attach %!/INC`CHANNEL`MOGCONF`MAINCONFIG}} +&INC`CHANNEL`MOGCONF [u(cobj,channel)]=@attach %!/INC`PARTIAL=%0,stripansi(objeval(%#,channels(|))),|,channel,channel;@check cor(u(isadmin,%#),testlock(clock(%q/Mod),%#))=@attach %!/INC`MSG=ERROR: Permission denied.;@stop not(strmatch(parent(u(setr,mog,cmogrifier(%q))),num(u(cobj,mop))))=@attach %!/INC`MSG=ERROR: Channel is not initialized. Please use +channel/init %q;@select/inline gt(strlen(before(%2,/)),0)=0,{@attach %!/INC`CHANNEL`MOGCONF`SHOWCONFIG},1,{@attach %!/INC`PARTIAL=before(%2,/),v(MOGTYPES),|,mogrifier,mogrifier;@select/inline gt(strlen(after(%2,/)),0)=1,{@attach %!/INC`CHANNEL`MOGCONF`SUBCONFIG},0,{@attach %!/INC`CHANNEL`MOGCONF`MAINCONFIG}} &INC`CHANNEL`MOGCONF`MAINCONFIG [u(cobj,channel)]=@select/inline strlen(%1)=0,{@attach %!/INC`VERIFY={ansi(hr,WARNING:) This will clear the Channel %q %q Mogrifier List, which is currently [u(setr,msg,'[get(%q/MOGUSE`%q)]'[if(not(hasattr(%q/MOGUSE`%q)),%b(inherited))].)] Are you sure? Enter the same command again within ten seconds to continue!},CLEAR %q %q;&MOGCONF`%q %q;@attach %!/INC`MSG=You clear Channel %q's Mogrifier list.;@attach %!/INC`MSG`CHAN=cleared Channel '%q''s Mogrifier list\, which was %q},{@check lmath(min,iter(lcstr(%1),match(lcstr(get(%q/MOGORDER`%q)),%i0)))=@attach %!/INC`MSG=ERROR: One or more of the entered mogrifier types was not recognized.;th u(setq,oldmog,get(%q/MOGUSE`%q),inherited,hasattr(%q/MOGUSE`%q));&MOGUSE`%q %q=u(setr,newmog,filterbool(#lambda/match(lcstr(%1),\%0),lcstr(get(%q/MOGORDER`%q))));@attach %!/INC`MSG=You set Channel %q's Mogrifier list to: %q;@attach %!/INC`MSG`CHAN=set Channel '%q''s Mogrifier list\, which was '%q'[if(not(%q),%b(inherited))]\, to: %q} diff --git a/FCList Management System - FCLIST.txt b/FCList Management System - FCLIST.txt index d7a9d8f..1577c20 100644 --- a/FCList Management System - FCLIST.txt +++ b/FCList Management System - FCLIST.txt @@ -19,11 +19,11 @@ th u(NEWCOBJ,FCList Database ,fclist-db,u(cobj,fclist),,1,WIZARD SAFE &INC`LISTALL [u(cobj,fclist)]=@pemit %#=u(HEADER,mudname()'s Themes);@pemit %#=u(table,iter(u(sortattr,lattr(u(cobj,fclist-db)/F`*)),pueblize(get(u(cobj,fclist-db)/%i0),%q [get(u(cobj,fclist-db)/%i0)]),%b,|),26,u(width,%#),|);@pemit %#=u(SUBHEADER,%q for listing - %q/info for Info) -&INC`LIST [u(cobj,fclist)]=@attach %!/INC`FIND=%0;@pemit %#=u(HEADER,%q Roster);@pemit %#=ansi(u(color,%#,FCLIST,COLUMN_NAMES),align(23 21 10 9 9,Name,Faction,Last On,Type,Available));@pemit %#=[u(SEPARATOR)];@dolist/inline u(sortname,u(filter,ISOBJID,get(u(cobj,fclist-db)/%q`LIST)))={@pemit %#=align(23 21 10 9 9,u(moniker,##),u(strfirstof,u(getproperty,##,MAJORNAMECLICK),Unaffiliated),u(lastidle,##),default(##/D`FINGER`TYPE,FC),u(capnames,default(##/D`FINGER`STATUS,Open)))};@pemit %#=u(SUBHEADER) +&INC`LIST [u(cobj,fclist)]=@attach %!/INC`FIND=%0;@pemit %#=u(HEADER,%q Roster);@select/inline strlen(u(setr,desc,get(u(cobj,fclist-db)/%q`DESC)))=>0,{@pemit %#=%q;@pemit %#=u(separator)};@pemit %#=ansi(u(color,%#,FCLIST,COLUMN_NAMES),align(23 21 10 9 9,Name,Faction,Last On,Type,Available));@pemit %#=u(SEPARATOR);@dolist/inline u(sortname,u(filter,ISOBJID,get(u(cobj,fclist-db)/%q`LIST)))={@pemit %#=align(23 21 10 9 9,u(moniker,##),u(strfirstof,u(getproperty,##,MAJORNAMECLICK),Unaffiliated),u(lastidle,##),default(##/D`FINGER`TYPE,FC),u(capnames,default(##/D`FINGER`STATUS,Open)))};@pemit %#=u(SUBHEADER) &INC`INFO [u(cobj,fclist)]=@attach %!/INC`FIND=%0;@pemit %#=u(HEADER,Theme Info: %q);@pemit %#=get(u(cobj,fclist-db)/%q`DESC);@pemit %#=u(SUBHEADER) -&INC`DESC [u(cobj,fclist)]=@attach %!/INC`FIND=%0;@check strlen(%1)=@attach %!/INC`MSG=ERROR: Theme description empty!;@attach %!/INC`MSG=Theme description changed!;@attach %!/INC`MSG`CHAN=FCLIST Group '%q' Description changed to: [left(%1,80)]...;&%q`DESC [u(cobj,fclist-db)]=%1 +&INC`DESCRIBE [u(cobj,fclist)]=@attach %!/INC`FIND=%0;@check strlen(%1)=@attach %!/INC`MSG=ERROR: Theme description empty!;@attach %!/INC`MSG=Theme description changed!;@attach %!/INC`MSG`CHAN=FCLIST Group '%q' Description changed to: [left(%1,80)]...;&%q`DESC [u(cobj,fclist-db)]=%1 &INC`CREATE [u(cobj,fclist)]=@stop u(FUN`FINDEXACT,%0)=@attach %!/INC`MSG=ERROR: Group already exists!;th u(attrib_set,u(cobj,fclist-db),u(setr,attr,F`[u(nextslot,u(cobj,fclist-db),F)]),%0);@attach %!/INC`MSG=Group '%0' created!;@attach %!/INC`MSG`CHAN={Group '%0' created!} diff --git a/Finger Management System - FINGER.txt b/Finger Management System - FINGER.txt index 97f42f4..60e68e7 100644 --- a/Finger Management System - FINGER.txt +++ b/Finger Management System - FINGER.txt @@ -38,7 +38,7 @@ th u(NEWCONF,config,FINGER,ADMINSET,,fields settable by admin,LIST) &SWITCHES`OOCFINGER`PLAYER [u(cobj,finger)]=SET &SWITCHES`OOCFINGER`ADMIN [u(cobj,finger)]= -&INC`OOCFINGER`MAIN [u(cobj,finger)]=@attach %!/INC`CHECKPC=u(strfirstof,%0,%#),1;@pemit %#=u(HEADER,%q);@dolist/inline/delimit | [u(game_config,OOCFINGER,COLUMN)]={@pemit %#=align(1. >[u(setr,oocw,u(game_config,OOCFINGER,WIDTH))] 1. [sub(u(width,%#),%q,7)] 1.,ansi(u(color,%#,FINGER,BORDER),|),elements(##,2,~),ansi(u(color,%#,FINGER,BORDER),|),u(getproperty,%q,elements(##,1,~)),ansi(u(color,%#,FINGER,BORDER),|))};@dolist/inline/delimit | [u(game_config,OOCFINGER,EXTRA)]={@select/inline t(strlen(u(setr,found,u(getproperty,%q,##))))=1,{@pemit %#=u(subheader,u(capnames,##));@pemit %#=align(1. [sub(u(width,%#),4)] 1.,ansi(u(color,%#,FINGER,BORDER),|),edit(%q,%t,space(8)),ansi(u(color,%#,FINGER,BORDER),|))}};@pemit %#=u(SUBHEADER);@select/inline nor(u(isadmin,%#),strmatch(%#,%q))=1,{@trigger %q/AOOCFINGER=%#,u(moniker,%#)} +&INC`OOCFINGER`MAIN [u(cobj,finger)]=@attach %!/INC`CHECKPC=u(strfirstof,%0,%#),1;@pemit %#=u(HEADER,%q);@dolist/inline/delimit | [u(game_config,OOCFINGER,COLUMN)]={@pemit %#=align(1. >[u(setr,oocw,u(game_config,OOCFINGER,WIDTH))] 1. [sub(u(width,%#),%q,7)] 1.,ansi(u(color,%#,FINGER,BORDER),|),elements(##,2,~),ansi(u(color,%#,FINGER,BORDER),|),u(strfirstof,u(getproperty,%q,elements(##,1,~)),get(%q/D`FINGER`[elements(##,1,~)])),ansi(u(color,%#,FINGER,BORDER),|))};@dolist/inline/delimit | [u(game_config,OOCFINGER,EXTRA)]={@select/inline t(strlen(u(setr,found,u(strfirstof,u(getproperty,%q,##),get(%q/D`FINGER`##)))))=1,{@pemit %#=u(subheader,u(capnames,##));@pemit %#=align(1. [sub(u(width,%#),4)] 1.,ansi(u(color,%#,FINGER,BORDER),|),edit(%q,%t,space(8)),ansi(u(color,%#,FINGER,BORDER),|))}};@pemit %#=u(SUBHEADER);@select/inline nor(u(isadmin,%#),strmatch(%#,%q))=1,{@trigger %q/AOOCFINGER=%#,u(moniker,%#)} &INC`OOCFINGER`SET [u(cobj,finger)]=@attach %!/INC`CHECKPC=if(cand(u(isadmin,%#),strmatch(%0,*/*)),before(%0,/),%#),1;@attach %!/INC`PARTIAL=if(cand(u(isadmin,%#),strmatch(%0,*/*)),after(%0,/),%0),setunion(u(game_config,OOCFINGER,PLAYERSET),if(u(isadmin,%#),u(game_config,OOCFINGER,ADMINSET)),|,|),|,field,field;@select/inline strlen(%1)=0,{@attach %!/INC`VERIFY={[ansi(hr,WARNING:)] Setting %q to nothing will clear it. Are you sure? Enter that again to verify!},CLEAR OOCFINGER %q};&D`FINGER`%q %q=%1;@attach %!/INC`MSG=You set [if(strmatch(%#,%q),your,%q's)] [u(capnames,%q)] OOCFinger Field to: %1;@select/inline strmatch(%#,%q)=0,{@attach %!/INC`MSG={Your [u(capnames,%q)] OOCFinger Field is now: %1},%q} diff --git a/Group Management System - GMS.txt b/Group Management System - GMS.txt index 0cc71ee..011de0a 100644 --- a/Group Management System - GMS.txt +++ b/Group Management System - GMS.txt @@ -140,7 +140,7 @@ th u(NEWCOBJ,Group Object Parent ,gop,u(cobj,gms),,1,WIZARD SAFE,INHERIT SI &INC`CODE`LISTMEMBERS`DIVISIONAL [u(cobj,gms)]=@pemit %#=ansi(u(color,%#,GROUP,COLUMN_NAMES),align(19 5 21 20 10,Name,R#,Rank,Title,Last/Idle));@pemit %#=u(separator,Command Staff);@dolist/inline u(sortrank,u(filter,COMMAND,u(setr,mainlist,if(%2,u(sortname,setinter(u(filter,ISOBJID,get(%q/MEMBERS)),u(lwhoid,%#))),u(sortname,u(filter,ISOBJID,get(%q/MEMBERS))))),%b,%b,%q))={@pemit %#=align(19 5 21 19 >10,u(pueblize,u(moniker,%i0),+finger [name(%i0)]),u(FUN`GETRANK,%q,##,1),get(%q/RANK`[u(FUN`GETRANK,%q,##,1)]`NAME),get(##/D`GROUP`%q`TITLE),u(lastidle,##,%#))};@dolist/inline u(sortdiv,u(lattr,%q/DIVISION`*))={@pemit %#=u(separator,get(%q/[u(choosegame,%i0,%d0)]));th u(setq,div,u(choosegame,%i0,%d0));@dolist/inline u(sortdivrank,u(filter,DIVMEMBERS,%q,%b,%b,%q,%q
))={@pemit %#=align(19 5 21 19 >10,u(pueblize,u(moniker,u(choosegame,%i0,%d0)),+finger [name(u(choosegame,%i0,%d0))]),u(FUN`GETRANK,%q,u(choosegame,%i0,%d0),1)-[get(u(choosegame,%i0,%d0)/D`GROUP`%q`[u(choosegame,%i1,%d1)]`RANK)],get(%q/[u(choosegame,%i1,%d1)]`RANK`[get(u(choosegame,%i0,%d0)/D`GROUP`%q`[u(choosegame,%i1,%d1)]`RANK)]),default(u(choosegame,%i0,%d0)/D`GROUP`%q`[u(choosegame,%i1,%d1)]`TITLE,[u(choosegame,%i0,%d0)]/D`GROUP`%q`TITLE,),u(lastidle,u(choosegame,%i0,%d0),%#))}};@select/inline gt(words(u(setr,unset,u(filter,NOTDIV,%q))),0)=1,{@pemit %#=u(separator,Unassigned Members);@dolist/inline u(sortrank,%q)=@pemit %#=align(19 5 21 19 >10,u(pueblize,u(moniker,##),+finger [name(%i0)]),u(FUN`GETRANK,%q,%i0,1),get(%q/RANK`[u(FUN`GETRANK,%q,%i0,1)]`NAME),get(##/D`GROUP`%q`TITLE),u(lastidle,##,%#))} -&FIL`DIVMEMBERS [u(cobj,gms)]=t(match(get(%1/DIVISION`%2`MEMBERS),u(objid,%0))) +&FIL`DIVMEMBERS [u(cobj,gms)]=t(match(get(%1/%2`MEMBERS),u(objid,%0))) &SORTDIV [u(cobj,gms)]=u(SORTDIV`[v(game)],%0,if(strlen(%1),%1,%B),if(strlen(%2),%2,%B)) &SORTDIV`PENNMUSH [u(cobj,gms)]=sortkey(#lambda/default(%q/\%0`ORDER,99),%0,n,%1,%2) @@ -155,7 +155,7 @@ th u(NEWCOBJ,Group Object Parent ,gop,u(cobj,gms),,1,WIZARD SAFE,INHERIT SI &INC`CHOOSE`+D`IVISIONS`MAIN [u(cobj,gms)]=@attach %!/INC`CODE`VALGROUP=u(strfirstof,u(getstat,%#,D`GROUP,Group),0),1;@attach %!/INC`CODE`LISTDIVS -&INC`CODE`LISTDIVS [u(cobj,gms)]=@pemit %#=u(HEADER,DIVISIONS: %q);@pemit %#=ansi(u(color,%#,GROUPS,COLUMN_NAMES),align(24 21 20 10,Name,Rank,Title,Last/Idle));@dolist/inline u(sortdiv,u(lattr,%q/DIVISION`*))={@pemit %#=u(separator,ID \([last(##,`)]\) - [get(%q/##)] - ORDER [get(%q/##`ORDER)]);th u(setq,div,##);@dolist/inline u(sortdivrank,u(filter,DIVMEMBERS,get(%q/##`MEMBERS),%b,%b,%q,%q
))={@pemit %#=align(24 21 19 >10,u(pueblize,u(moniker,u(choosegame,%i0,%d0)),+finger [name(u(choosegame,%i0,%d0))]),get(%q/[u(choosegame,%i1,%d1)]`RANK`[get([u(choosegame,%i0,%d0)]/D`GROUP`%q`[u(choosegame,%i1,%d1)]`RANK)]),u(strfirstof,get(u(choosegame,%i0,%d0)/D`GROUP`%q`[u(choosegame,%i1,%d1)]`TITLE),get(u(choosegame,%i0,%d0)/D`GROUP`%q`TITLE)),u(lastidle,u(choosegame,%i0,%d0),%#))}};@pemit %#=u(header) +&INC`CODE`LISTDIVS [u(cobj,gms)]=@pemit %#=u(HEADER,DIVISIONS: %q);@pemit %#=ansi(u(color,%#,GROUPS,COLUMN_NAMES),align(24 21 20 10,Name,Rank,Title,Last/Idle));@dolist/inline u(sortdiv,u(lattr,%q/DIVISION`*))={@pemit %#=u(separator,ID \([last(##,`)]\) - [get(%q/##)] - ORDER [get(%q/##`ORDER)]);th u(setq,div,##);@dolist/inline u(sortdivrank,u(filter,DIVMEMBERS,get(%q/##`MEMBERS),%b,%b,%q,%q
))={@pemit %#=align(24 21 19 >10,u(pueblize,u(moniker,u(choosegame,%i0,%d0)),+finger [name(u(choosegame,%i0,%d0))]),get(%q/[u(choosegame,%i1,%d1)]`RANK`[get(u(choosegame,%i0,%d0)/D`GROUP`%q`[u(choosegame,%i1,%d1)]`RANK)]),u(strfirstof,get(u(choosegame,%i0,%d0)/D`GROUP`%q`[u(choosegame,%i1,%d1)]`TITLE),get(u(choosegame,%i0,%d0)/D`GROUP`%q`TITLE)),u(lastidle,u(choosegame,%i0,%d0),%#))}};@pemit %#=u(subheader) &INC`CHOOSE`+G`ROUPS`MAIN [u(cobj,gms)]=@attach %!/INC`CODE`GROUPLIST @@ -393,7 +393,7 @@ th u(NEWCONF,config,GROUPS,INTERVAL,259200,Interval between timeout checks?,DURA &HLP`GROUPS`ADMINISTRATION [u(cobj,gms)]=[ansi(hc,Leader Commands)]%ROnly the group leader is allowed to alter the rank structure and associated permissions.%R[align(5 [sub(u(width,%#),6)],,[ansi(h,+gaddrank <#>=)] - Create a new rank.%R[ansi(h,+gdelrank <#>)] - Remove a rank\, if no players in it.%R[ansi(h,+gnamerank <#>=)] - Renames a rank.%R[ansi(h,+gaddperm <#>=)] - Adds to a rank's Permissions. ALL may be targeted too!%R[ansi(h,+gdelperm <#>=)] - Removes from a rank's permissions.%R[ansi(h,+gaddpriv =)] - Extend a Permission to a specific player.%R[ansi(h,+gdelpriv =)] - Revoke a Permission granted to a player.%R[ansi(h,+gprivlist)] - View all priveleges granted to specific group members.)]%R%R[ansi(hc,Priveleged Commands)]%R[align(5 [sub(u(width,%#),6)],,[ansi(h,+grank =<#>)] - Alter a player's rank to <#>. Can only be used on subordinates\, and not to your own rank or better.%R[ansi(h,+gtitle =)] - Set a player's title. Setting to nothing clears it. Can only re-title subordinates.%R[ansi(h,+glog <#>)] - Looks back <#> amount of events and displays related logs.)]%R%R[ansi(hc,Member Commands)]%R[align(5 [sub(u(width,%#),6)],,[ansi(h,+grank)] - Display rank structure and permissions granted.)]%R%R[ansi(hc,Permissions)]%R[align(5 [sub(u(width,%#),6)],,[ansi(h,moderate)] - Passes the group's /moderate lock for use with +key. May use +gmuzzle and edit board posts on the +gbs.%R[ansi(h,manage)] - may manage invites\, kick players\, and alter player rank. Also grants divisional alteration powers.%R[ansi(h,gbadmin)] - may use +gb admin commands such as +gbnewgroup\, +gblock\, and +gbcleargroup.%R[ansi(h,gemit)] - May use +gemit.%R[ansi(h,ic)] and [ansi(h,ooc)] - grants access to the IC and OOC group channels.%R[ansi(h,titleself)] - May use +gtitle... but only on yourself.)] +help/add Groups/Divisions=[u(cobj,gms)]/HLP`GROUPS`DIVISIONS -&HLP`GROUPS`DIVISIONS [u(cobj,gms)]=Divisions are groups within a group. Codedly they are simply extra labels to help with organizing members. Divisions have no extra permissions, and ranks are completely for show.%R%R[ansi(hc,Administrating Divisions)]%RThis requires the Manage permission.%R[align(5 [sub(u(width,%#),6)],,[ansi(h,+dcreate <name>)] - Creates a new division.%R[ansi(h,+drename <#>=<new name>)] - Renames a division.%R[ansi(h,+ddisband <division name or #>)] - Delete a division.%R[ansi(h,+daddrank <#>=<name>)] - Adds a new rank to a Division.%R[ansi(h,+ddelrank <#>)] - Removes a rank if unused.%R[ansi(h,+drenrank <#>=<newname>)] - Renames a division rank.%R[ansi(h,+dassign <player>=<division name or #>)] - Add a player to <Division.>%R[ansi(h,+dkick <player>=<division name or #>)] - Remove a player from <division.>%R[ansi(h,+drank <division>/<player>=<#>)] - Sets a player's rank in <division.>)]%R%R[ansi(hc,Member Commands)]%R[align(5 [sub(u(width,%#),6)],,[ansi(h,+divisions)] - Show all Divisions.%R[ansi(h,+drank <division>)] - Display Rank information for <division>.)] +&HLP`GROUPS`DIVISIONS [u(cobj,gms)]=Divisions are groups within a group. Codedly they are simply extra labels to help with organizing members. Divisions have no extra permissions, and ranks are completely for show.%R%R[ansi(hc,Administrating Divisions)]%RThis requires the Manage permission.%R[align(5 [sub(u(width,%#),6)],,[ansi(h,+dcreate <name>)] - Creates a new division.%R[ansi(h,+drename <#>=<new name>)] - Renames a division.%R[ansi(h,+ddisband <division name or #>)] - Delete a division.%R[ansi(h,+daddrank <div>/<ranknumber>=<name>)] - Adds a new rank to a Division.%R[ansi(h,+ddelrank <div>/<rank>)] - Removes a rank if unused.%R[ansi(h,+dnamerank <div>/<rank>=<newname>)] - Renames a division rank.%R[ansi(h,+dassign <player>=<division name or #>)] - Add a player to <Division.>%R[ansi(h,+dkick <player>=<division name or #>)] - Remove a player from <division.>%R[ansi(h,+drank <division>/<player>=<#>)] - Sets a player's rank in <division.>)]%R%R[ansi(hc,Member Commands)]%R[align(5 [sub(u(width,%#),6)],,[ansi(h,+divisions)] - Show all Divisions.%R[ansi(h,+drank <division>)] - Display Rank information for <division>.)] +help/add Groups/Settings=[u(cobj,gms)]/HLP`GROUPS`SETTINGS &HLP`GROUPS`SETTINGS [u(cobj,gms)]=[ansi(hc,Group Settings)]%R[align(5 [sub(u(width,%#),6)],,[ansi(h,Channelrank)] - <bool> - Display rank tags in group channels.%R[ansi(h,Color)] - <colorcode> - What color the group channels and group name will be\, unless personally overriden.%R[ansi(h,Command)] - <rank> - The tier at which Divisional display Type will consider someone part of the command staff.%R[ansi(h,IC)] - <bool> - enable or disable the IC/RADIO channel.%R[ansi(h,OOC)] - <bool> - enable or disable the OOC channel.%R[ansi(h,Major)] - <bool> - display group in the Major category in +groups.%R[ansi(h,Type)] - <typeword> - The group display uses special rules governed by <typeword>. If set to nothing\, or an invalid typeword\, uses default display. See further on.%R[ansi(h,Startrank)] - <rank> - the Rank at which a newly added player begins. Defaults to 4 if this is ever rendered invalid.%R[ansi(h,ABBREVIATION)] - The abbreviation used for Who list and other areas if the Group is MAJOR=1.%R[ansi(h,Sysalert)] - <rank> - Anyone at or above this rank will receive group system alerts regarding major events.%R%ROnly the group leader may alter these using:%R[ansi(h,+gset <setting>=<value>)]%R'bool' refers to a true false value. 0 = false\, 1 = true.%RTYPE\, MAJOR\, and ABBREVIATION may only be changed by staff.)]%R%R[ansi(hc,Display Types)]%R[align(5 [sub(u(width,%#),6)],,[ansi(h,FACTION)] - Alters display for large and officialized factions. +group <name> and +gwho will use a variable width roster showing only name\, rank number\, and the first found of either <title> or <rankname>\, such as 1-Field Marshal \(or if a title was set\, 1-Grand Poobah\).%R[ansi(h,DIVISIONAL)] - For well-organized groups that make use of divisions a lot. +group <name> and +gwho become a fusion of traditional +groups display and +divisions\, showing first anyone who is at or over COMMAND rank\, followed by every division\, then anyone who isn't in a division. The R# column is <grouprank>-<divrank>.)] diff --git a/Help Management System - HELP.txt b/Help Management System - HELP.txt index 2cfb461..a4d98cc 100644 --- a/Help Management System - HELP.txt +++ b/Help Management System - HELP.txt @@ -20,7 +20,7 @@ th u(NEWCOBJ,DYNAMIC DATABASE,HELP-DYNAMIC,u(cobj,help),,1,WIZARD SAFE,SIDEFX SA &SYSTEM`NAME [u(cobj,help)]=u(strfirstof,%q<sysname>,HELP) &SWITCHES`PLAYER [u(cobj,help)]= -&SWITCHES`ADMIN [u(cobj,help)]=HELP|ADD|RENAME|DELETE|CATEGORY|RENCATEGORY|METATAGS +&SWITCHES`ADMIN [u(cobj,help)]=HELP|ADD|RENAME|DELETE|CATEGORY|RENCATEGORY|METATAGS|VIEWCODE &FUN`CATEGORIES [u(cobj,help)]=ucstr(setunion(ucstr(iter(u(lattr,%0/H`*`CATEGORY),get(%0/%i0),%b,|)),,|,|)) &FUN`FILESOFCAT [u(cobj,help)]=localize(u(sorthelp,u(filter,if(strlen(u(setr,catname,%1)),ISHELPCATEGORY,ISUNCATEGORIZED),u(lattr,%0/H`*),%b,%b,%0))) @@ -62,11 +62,11 @@ th u(NEWCOBJ,DYNAMIC DATABASE,HELP-DYNAMIC,u(cobj,help),,1,WIZARD SAFE,SIDEFX SA &INC`CATEGORY [u(cobj,help)]=@attach %!/INC`FINDMAIN=%0;@check strlen(%2)=@attach %!/INC`MSG=ERROR: New Category field empty.;@stop strmatch(%2,UNCATEGORIZED)=@attach %!/INC`MSG=ERROR: 'UNCATEGORIZED' is reserved for system use.;th u(attrib_set,%q<db>,H`%q<topid>`CATEGORY,ucstr(%2));th u(attrib_set,%q<db>,H`%q<topid>`TIMESTAMP,secs());@attach %!/INC`MSG=u(setr,msg,File '[get(%q<db>/H`%q<topid>)]' moved to Category: [ucstr(%2)]);@attach %!/INC`MSG`CHAN=%q<msg> -&INC`VIEWCODE [u(cobj,help)]=@select/inline words(%2,/)=0,{@attach %!/INC`MSG=ERROR: Must include an article to retrieve!},1,{@attach %!/INC`GET`TOPIC},2,{@attach %!/INC`GET`SUB},{@attach %!/INC`MSG=ERROR: %q<comm> supports only 2 maximum arguments for retrieving unformatted text.} +&INC`VIEWCODE [u(cobj,help)]=@select/inline t(strlen(%0))[t(strlen(%1))]=10,{@attach %!/INC`GET`TOPIC},11,{@attach %!/INC`GET`SUB},{@attach %!/INC`MSG=ERROR: What are you retrieving?} -&INC`GET`TOPIC [u(cobj,help)]=@attach %!/INC`FINDMAIN=%0;@pemit %#=decompose(get(%q<db>/%q<topid>`CONTENTS)) +&INC`GET`TOPIC [u(cobj,help)]=@attach %!/INC`FINDMAIN=%0;@pemit %#=decompose(get(%q<db>/H`%q<topid>`CONTENTS)) -&INC`GET`SUB [u(cobj,help)]=@attach %!/INC`FINDMAIN=%0;@attach %!/INC`FINDSUB;@pemit %#=decompose(get(%q<db>/%q<topid>`SUB`%q<subid>`CONTENTS)) +&INC`GET`SUB [u(cobj,help)]=@attach %!/INC`FINDMAIN=%0;@attach %!/INC`FINDSUB=%1;@pemit %#=decompose(get(%q<db>/H`%q<topid>`SUB`%q<subid>`CONTENTS)) &INC`HELP [u(cobj,help)]=@pemit %#=u(header,Staff %q<comm> Commands);@pemit %#=[ansi(hc,Administrator Commands)]%R[align(5 [sub(u(width,%#),6)],,{[ansi(h,%q<comm>/add <filename>=<text>)] - Creates or update a helpfile. If <text> is #DBREF/ATTRIBUTE format, the given attribute will be u()'d for retrieval.%R[ansi(h,%q<comm>/add <filename>/<subfilename>=<text>)] - Create or update a sub-helpfile..%R[ansi(h,%q<comm>/category <filename>=<category>)] - Assign or re-assign a helpfile to a category. Categories are arbitrary and do not need to be creative.%R[ansi(h,%q<comm>/rencategory <category>=<new name>)] - Re-assign all helpfiles of a given category to a new one.%R[ansi(h,%q<comm>/delete <filename>\[/<subfilename>\])] - Delete a helpfile or subfile.%R[ansi(h,%q<comm>/rename <filename>\[/<subfilename>\])]=<newname> - Rename a file/subfile.%R[ansi(h,%q<comm>/metatags <filename>=<list of tags>)] - Set or overwrite a helpfile's list of metatags used for searching.})];@pemit %#=u(subheader) diff --git a/Info Management System - IMS.txt b/Info Management System - IMS.txt index d625e97..ca21f0e 100644 --- a/Info Management System - IMS.txt +++ b/Info Management System - IMS.txt @@ -2,9 +2,9 @@ th u(NEWCOBJ,Info Management System <IMS>,ims,,,,WIZARD SAFE !NO_COMMAND,INHERIT SIDEFX SAFE) -&CMD`+INFO`PENNMUSH [u(cobj,ims)]=$^(?\:\+)?(info|pinfo)(?\:/(\S+)?)?(?\: +(.+?))?(?\:/(.+?))?(?\:=(.*))?$:@attach %!/CMD`+INFO`MAIN +&CMD`+INFO`PENNMUSH [u(cobj,ims)]=$^(?s)(?\:\+)?(info|pinfo)(?\:/(\S+)?)?(?\: +(.+?))?(?\:/(.+?))?(?\:=(.*))?$:@attach %!/CMD`+INFO`MAIN @set [u(cobj,ims)]/CMD`+INFO`PENNMUSH=regexp -&CMD`+INFO`RHOSTMUSH [u(cobj,ims)]=$^(?\:\+)?(info|pinfo)(?\:/(\\S+)?)?(?\: +(.+?))?(?\:/(.+?))?(?\:=(.*))?$:@attach %!/CMD`+INFO`MAIN +&CMD`+INFO`RHOSTMUSH [u(cobj,ims)]=$^(?s)(?\:\+)?(info|pinfo)(?\:/(\\S+)?)?(?\: +(.+?))?(?\:/(.+?))?(?\:=(.*))?$:@attach %!/CMD`+INFO`MAIN @set [u(cobj,ims)]/CMD`+INFO`RHOSTMUSH=regexp &CMD`+INFO`MAIN [u(cobj,ims)]=@attach %!/INC`GETSWITCH=%2;th u(setq,sysname,ucstr(%1));@attach %!/INC`[u(strfirstof,%q<switch>,MAIN)]=trim(%3),trim(%4),%5 @set [u(cobj,ims)]/CMD`+INFO`[switch(v(game),PennMUSH,RHOSTMUSH,RhostMUSH,PENNMUSH)]=no_command diff --git a/Who System - WHO.txt b/Who System - WHO.txt index 45622b7..a93fdc3 100644 --- a/Who System - WHO.txt +++ b/Who System - WHO.txt @@ -29,10 +29,13 @@ th u(NEWCOBJ,Who System <WHO>,who,,,,WIZARD SAFE !NO_COMMAND,INHERIT SIDEFX SAFE th u(NEWCONF,config,WHO,SHOW_IPS,1,Show # of unique IPs?,BOOL) -&INC`WHO`HEADER`MAIN [u(cobj,who)]=@pemit %#=ansi(u(color,%#,WHO,COLUMN_NAMES),align(20 11 3 4 4 1 29,Name,Alias,Fac,Idle,Conn,G,Location)) +th u(newconf,CONFIG,WHO,HEADER,Name~20|Alias~11|Fac~3|Idle~4|Conn~4|G~1|Location~29,check +shelp +who,LIST) +th u(newconf,CONFIG,WHO,COLUMNS,NAMELINK~20|ALIAS~11|MAJORABBR~3|HIDEIDLE~>4|HIDECONN~>4|SEXLETTER~1|LOCATION~29,Check +shelp +who,LIST) + +&INC`WHO`HEADER`MAIN [u(cobj,who)]=@pemit %#=ansi(u(color,%#,WHO,COLUMN_NAMES),lalign(iter(u(setr,hdr,u(game_config,WHO,HEADER)),after(%i0,~),|,%b),iter(%q<hdr>,before(%i0,~),|,beep()),beep())) &INC`WHO`HEADER`IDLE [u(cobj,who)]=@attach %!/INC`WHO`HEADER`MAIN -&FUN`WHO`PLAYERLINE`MAIN [u(cobj,who)]=align(20 11 -3 >4 >4 1 [sub(u(width,%#),49)],u(pueblize,if(u(ishidden,%0),ansi(hx,name(%0)),u(moniker,%0)),+finger [name(%0)]),u(getalias,%0),u(strfirstof,u(getproperty,%0,MAJORABBR),ansi(hx,---)),u(hideidle,%0),u(hideconn,%0),ucstr(left(default(%0/sex,?),1)),if(not(findable(%#,%0)),*UNFINDABLE*,if(match(%q<portable>,loc(%0)),u(pueblize,left(name(loc(%0)),sub(u(width,%#),49)),+port [loc(%0)]),left(name(loc(%0)),sub(u(width,%#),49))))) +&FUN`WHO`PLAYERLINE`MAIN [u(cobj,who)]=lalign(iter(u(setr,col,u(game_config,WHO,COLUMNS)),after(%i0,~),|,%b),iter(%q<col>,u(getproperty,%0,before(%i0,~)),|,beep()),beep()) &FUN`WHO`PLAYERLINE`IDLE [u(cobj,who)]=u(FUN`WHO`PLAYERLINE`MAIN,%0) @@ &STARTUP [u(cobj,who)]=@hook/override WHO=%!,CMD`+WHO`[v(game)] diff --git a/scenesys/README.txt b/scenesys/README.txt index 5762491..254c81e 100644 --- a/scenesys/README.txt +++ b/scenesys/README.txt @@ -64,11 +64,11 @@ require_once("$IP/extensions/CSS/CSS.php"); # External Data include_once("$IP/extensions/ExternalData/ExternalData.php"); -$edgDBServer['ID'] = "localhost"; -$edgDBServerType['ID'] = "mysql"; -$edgDBName['ID'] = "DB name"; -$edgDBUser['ID'] = "username"; -$edgDBPass['ID'] = "password"; +$edgDBServer['scenesys'] = "localhost"; +$edgDBServerType['scenesys'] = "mysql"; +$edgDBName['scenesys'] = "DB name"; +$edgDBUser['scenesys'] = "username"; +$edgDBPass['scenesys'] = "password"; # Header Tabs require_once("$IP/extensions/HeaderTabs/HeaderTabs.php"); @@ -96,4 +96,7 @@ $wgDefaultUserOptions['wikieditor-publish'] = 1; # Parser Functions require_once("$IP/extensions/ParserFunctions/ParserFunctions.php"); -$wgPFEnableStringFunctions = true; \ No newline at end of file +$wgPFEnableStringFunctions = true; + +# Variables +require_once("$IP/extensions/Variables/Variables.php"); \ No newline at end of file diff --git a/scenesys/Scene System - SCENE.txt b/scenesys/Scene System - SCENE.txt index 68c21b1..82b873b 100644 --- a/scenesys/Scene System - SCENE.txt +++ b/scenesys/Scene System - SCENE.txt @@ -12,6 +12,9 @@ th u(NEWCOBJ,Scene Management System <SCENE>,scene,,,,WIZARD SAFE !NO_COMMAND,IN &CMD`+SCENE`MAIN [u(cobj,scene)]=th u(setq,mode,switch(%1,scene,scene,scenes,scenes,schedule,scenes,events,scenes,plot,plot,pot,pot,summary,summary));@select/inline t(match(scene scenes plot,%q<mode>))=1,{@check not(strmatch(sql(SELECT DATABASE()),#-*))=@attach %!/INC`MSG=ERROR: SQL is not ready.};@attach %!/INC`GETSWITCH=%2;@include %!/INC`%q<mode>`[u(strfirstof,%q<switch>,MAIN)]=trim(%3),trim(%4),%3[if(strlen(%4),=%4)] @set [u(cobj,scene)]/CMD`+SCENE`[switch(v(game),PennMUSH,RHOSTMUSH,RhostMUSH,PENNMUSH)]=no_command +&CMD`CHARID [u(cobj,scene)]=$^\+charid(?\: +(.*))?$:@force %#=+scene/charid %1 +@set [u(cobj,scene)]/CMD`CHARID=regexp + &SYSTEM`SWITCHES [u(cobj,scene)]=setunion(v(SWITCHES`%q<mode>`PLAYER),if(u(isadmin,%#),v(SWITCHES`%q<mode>`ADMIN)),|,|) &SWITCHES`SCENE`PLAYER [u(cobj,scene)]=SETUP|CHARID|JOIN|LEAVE|TITLE|DESC|CREATE|LOUDCREATE|RECALL|FINISH|PAUSE|CONTINUE|UNDO|REDO|SPOOF|MOVE|PLOT|OLD|WHO @@ -91,11 +94,11 @@ th u(NEWCONF,pconf,ALERTS,SCENES,0,Show upcoming scenes on logon?,BOOL) &FIL`POSEHEADER [u(cobj,scene)]=cor(words(%2),t(u(player_config,owner(%0),IC,BORDERS))) -&INC`FOOTER [u(cobj,scene)]=@check isic(u(objid,owner(%#)));th u(setq,poser,End of [ansi(hw,u(moniker,u(objid,owner(%#))))]'s pose[if(u(setr,spoof,get(%#/D`SCENE`SPOOF)),%B\(as [u(moniker,%q<spoof>)]\))]%b);@dolist/inline %q<footrecp>={@select/inline t(u(player_config,##,IC,BORDERS))=1,{@pemit ##=u(subheader,%q<logheader>%q<poser>,##)}} +&INC`FOOTER [u(cobj,scene)]=@check u(isic,u(objid,owner(%#)));th u(setq,poser,End of [ansi(hw,u(moniker,u(objid,owner(%#))))]'s pose[if(u(setr,spoof,get(%#/D`SCENE`SPOOF)),%B\(as [u(moniker,%q<spoof>)]\))]%b);@dolist/inline %q<footrecp>={@select/inline t(u(player_config,##,IC,BORDERS))=1,{@pemit ##=u(subheader,%q<logheader>%q<poser>,##)}} -&INC`POTRECORD [u(cobj,scene)]=@check get(%l/D`POT);th u(attrib_set,%l,u(setr,potattr,D`POSES`[u(nextslot,%l,D`POSES)]),%1);&%q<potattr>`CUSTLOC %l=%2;&%q<potattr>`TYPE %l=switch(%0,@EMIT,|,SAY,",SEMIPOSE,;,POSE,:);&%q<potattr>`BY %l=owner(%#);&%q<potattr>`WHEN %l=secs();@switch/inline gt(u(setr,count,u(nattr,%l/D`POSES`*)),80)=1,{@dolist/inline elements(u(sortattr,u(lattr,%l/D`POSES`*)),lnum(1,sub(%q<count>,80)))=@attach %!/WIPE=%l,##} +&INC`POTRECORD [u(cobj,scene)]=@check cor(cand(u(isic,%#),not(get(%l/D`POT))),cand(not(u(isic,%#))),get(%l/D`POT));th u(attrib_set,%l,u(setr,potattr,D`POSES`[u(nextslot,%l,D`POSES)]),%1);&%q<potattr>`CUSTLOC %l=%2;&%q<potattr>`TYPE %l=switch(%0,@EMIT,|,SAY,",SEMIPOSE,;,POSE,:);&%q<potattr>`BY %l=owner(%#);&%q<potattr>`WHEN %l=secs();@switch/inline gt(u(setr,count,u(nattr,%l/D`POSES`*)),80)=1,{@dolist/inline elements(u(sortattr,u(lattr,%l/D`POSES`*)),lnum(1,sub(%q<count>,80)))=@attach %!/WIPE=%l,##} -&INC`POT`MAIN [u(cobj,scene)]=@check get(%l/D`POT)=@attach %!/INC`MSG=ERROR: +pot is disabled in this location.;@switch/inline default(%#/D`POT`MODE,0)=0,{@attach %!/INC`POT`LIST},1,{@attach %!/INC`POT`BRIEF} +&INC`POT`MAIN [u(cobj,scene)]=@check cor(cand(u(isic,%#),not(get(%l/D`POT))),cand(not(u(isic,%#))),get(%l/D`POT))=@attach %!/INC`MSG=ERROR: +pot is disabled in this location.;@switch/inline default(%#/D`POT`MODE,0)=0,{@attach %!/INC`POT`LIST},1,{@attach %!/INC`POT`BRIEF} &FIL`POSELOC [u(cobj,scene)]=strmatch(get(%1/%0`CUSTLOC),%2) &FUN`POT`POSES [u(cobj,scene)]=u(filter,POSELOC,u(sortattr,u(lattr,%0/D`POSES`*)),%b,%b,%0,%2) @@ -105,17 +108,17 @@ th u(NEWCONF,pconf,ALERTS,SCENES,0,Show upcoming scenes on logon?,BOOL) &FUN`POT`LASTPOSE [u(cobj,scene)]=localize(last(u(filter,poseby,u(FUN`POT`POSES,%0,%1),%b,%b,%2))) &FIL`POSEBY [u(cobj,scene)]=strmatch(get(%1/%0`BY),%2) -&INC`POT`BRIEF [u(cobj,scene)]=@check get(%l/D`POT)=@attach %!/INC`MSG=ERROR: +pot is disabled in this location.;@select/inline u(strfirstof,%0,get(%#/D`POT`MAX))=0,{th u(setq,max,0)},>0,{th u(setq,max,%0)},{th u(setq,max,15)};@check words(u(setr,poses,if(%q<max>,revwords(elements(revwords(u(FUN`POT`POSES,%l,u(%l/D`CUSTLOC,%#))),lnum(1,%q<max>))),u(FUN`POT`POSES,%l,u(%l/D`CUSTLOC,%#)))))=@attach %!/INC`MSG=No active RP in the room!;@pemit %#=u(HEADER,RP Activity for [u(moniker,%l)]);@pemit %#=ansi(u(color,%#,POT,COLUMN_NAMES),align(20 4 4 [sub(u(width,%#),31)],Name,Pose,Idle,Summary));@pemit %#=u(separator);@dolist/inline %q<poses>=@pemit %#=align(20 4 4 [sub(u(width,%#),31)],u(pueblize,u(moniker,get(%l/##`BY)),+pot/last [name(get(%l/##`BY))]),ansi(u(ryg,round(mul(fdiv(bound(sub(secs(),get(%l/##`WHEN)),0,3600),3600),100),0)),u(smalltime,sub(secs(),get(%l/##`WHEN)))),ansi(u(ryg,round(mul(fdiv(bound(idle(get(%l/##`BY)),0,3600),3600),100),0)),u(smalltime,idle(get(%l/##`BY)))),get(%l/##`SUMMARY));@pemit %#=u(SUBHEADER) +&INC`POT`BRIEF [u(cobj,scene)]=@check cor(cand(u(isic,%#),not(get(%l/D`POT))),cand(not(u(isic,%#))),get(%l/D`POT))=@attach %!/INC`MSG=ERROR: +pot is disabled in this location.;@select/inline u(strfirstof,%0,get(%#/D`POT`MAX))=0,{th u(setq,max,0)},>0,{th u(setq,max,%0)},{th u(setq,max,15)};@check words(u(setr,poses,if(%q<max>,revwords(elements(revwords(u(FUN`POT`POSES,%l,u(%l/D`CUSTLOC,%#))),lnum(1,%q<max>))),u(FUN`POT`POSES,%l,u(%l/D`CUSTLOC,%#)))))=@attach %!/INC`MSG=No active RP in the room!;@pemit %#=u(HEADER,RP Activity for [u(moniker,%l)]);@pemit %#=ansi(u(color,%#,POT,COLUMN_NAMES),align(20 4 4 [sub(u(width,%#),31)],Name,Pose,Idle,Summary));@pemit %#=u(separator);@dolist/inline %q<poses>=@pemit %#=align(20 4 4 [sub(u(width,%#),31)],u(pueblize,u(moniker,get(%l/##`BY)),+pot/last [name(get(%l/##`BY))]),ansi(u(ryg,round(mul(fdiv(bound(sub(secs(),get(%l/##`WHEN)),0,3600),3600),100),0)),u(smalltime,sub(secs(),get(%l/##`WHEN)))),ansi(u(ryg,round(mul(fdiv(bound(idle(get(%l/##`BY)),0,3600),3600),100),0)),u(smalltime,idle(get(%l/##`BY)))),get(%l/##`SUMMARY));@pemit %#=u(SUBHEADER) -&INC`POT`LAST [u(cobj,scene)]=@check get(%l/D`POT)=@attach %!/INC`MSG=ERROR: +pot is disabled in this location.;@attach %!/INC`CHECKPC=%0,1;@check strmatch(loc(%q<t1>),%l)=@attach %!/INC`MSG=%q<t1name> is not in the room!;@check strlen(u(setr,pose,u(FUN`POT`LASTPOSE,%l,u(%l/D`CUSTLOC,%#),%q<t1>)))=@attach %!/INC`MSG=%q<t1name> hasn't posed in this room.;@pemit %#=u(header,%q<t1name>'s Last Pose [u(smalltime,u(setr,ago,sub(secs(),get(%l/%q<pose>`WHEN))))] Ago);@pemit %#=u(FUN`FORMATPOSE,%#,%q<t1>,get(%l/%q<pose>`TYPE),u(trimlines,get(%l/%q<pose>)),IC,u(FUN`POT`POSERS,%l,u(%l/D`CUSTLOC,%#)));@pemit %#=u(subheader) +&INC`POT`LAST [u(cobj,scene)]=@check cor(cand(u(isic,%#),not(get(%l/D`POT))),cand(not(u(isic,%#))),get(%l/D`POT))=@attach %!/INC`MSG=ERROR: +pot is disabled in this location.;@attach %!/INC`CHECKPC=%0,1;@check strmatch(loc(%q<t1>),%l)=@attach %!/INC`MSG=%q<t1name> is not in the room!;@check strlen(u(setr,pose,u(FUN`POT`LASTPOSE,%l,u(%l/D`CUSTLOC,%#),%q<t1>)))=@attach %!/INC`MSG=%q<t1name> hasn't posed in this room.;@pemit %#=u(header,%q<t1name>'s Last Pose [u(smalltime,u(setr,ago,sub(secs(),get(%l/%q<pose>`WHEN))))] Ago);@pemit %#=u(FUN`FORMATPOSE,%#,%q<t1>,get(%l/%q<pose>`TYPE),u(trimlines,get(%l/%q<pose>)),IC,u(FUN`POT`POSERS,%l,u(%l/D`CUSTLOC,%#)));@pemit %#=u(subheader) &INC`POT`MODE [u(cobj,scene)]=&D`POT`MODE %#=u(setr,mode,not(get(%#/D`POT`MODE)));@attach %!/INC`MSG=+pot will now default to +pot/[if(%q<mode>,summary,list)] -&INC`POT`LIST [u(cobj,scene)]=@check get(%l/D`POT)=@attach %!/INC`MSG=ERROR: +pot is disabled in this location.;@select/inline u(strfirstof,%0,get(%#/D`POT`MAX))=0,{th u(setq,max,0)},>0,{th u(setq,max,%0)},{th u(setq,max,15)};@check words(u(setr,poses,if(%q<max>,revwords(elements(revwords(u(FUN`POT`POSES,%l,u(%l/D`CUSTLOC,%#))),lnum(1,%q<max>))),u(FUN`POT`POSES,%l,u(%l/D`CUSTLOC,%#)))))=@attach %!/INC`MSG=No active RP in the room!;th u(setq,players,u(lplayers,%l));@pemit %#=u(header,Recent Poses);@dolist %q<poses>={@pemit %#=u(separator,u(moniker,get(%l/##`BY)) posed [ansi(c,trim(u(smalltime,sub(secs(),get(%l/##`WHEN)))))] Ago);@pemit %#=u(FUN`FORMATPOSE,%#,get(%l/##`BY),get(%l/##`TYPE),get(%l/##),u(lplayers,%l));@switch/inline #@=words(%q<poses>),{@pemit %#=u(subheader,End of Poses)}} +&INC`POT`LIST [u(cobj,scene)]=@check cor(cand(u(isic,%#),not(get(%l/D`POT))),cand(not(u(isic,%#))),get(%l/D`POT))=@attach %!/INC`MSG=ERROR: +pot is disabled in this location.;@select/inline u(strfirstof,%0,get(%#/D`POT`MAX))=0,{th u(setq,max,0)},>0,{th u(setq,max,%0)},{th u(setq,max,15)};@check words(u(setr,poses,if(%q<max>,revwords(elements(revwords(u(FUN`POT`POSES,%l,u(%l/D`CUSTLOC,%#))),lnum(1,%q<max>))),u(FUN`POT`POSES,%l,u(%l/D`CUSTLOC,%#)))))=@attach %!/INC`MSG=No active RP in the room!;th u(setq,players,u(lplayers,%l));@pemit %#=u(header,Recent Poses);@dolist %q<poses>={@pemit %#=u(separator,u(moniker,get(%l/##`BY)) posed [ansi(c,trim(u(smalltime,sub(secs(),get(%l/##`WHEN)))))] Ago);@pemit %#=u(FUN`FORMATPOSE,%#,get(%l/##`BY),get(%l/##`TYPE),get(%l/##),u(lplayers,%l));@switch/inline #@=words(%q<poses>),{@pemit %#=u(subheader,End of Poses)}} &INC`POT`MAX [u(cobj,scene)]=@check u(valnum,%0)=@attach %!/INC`MSG=ERROR: You must enter a whole number greater than 0 for your maximum poses!;&D`POT`MAX %#=%0;@attach %!/INC`MSG=You will now see only the last %0 poses in +pot. -&INC`POT`TOGGLE [u(cobj,scene)]=@check cor(controls(%#,%l),u(isadmin,%#))=@attach %!/INC`MSG=ERROR: Permission denied.;@attach %!/INC`MSG`ROOM=Pot will [if(u(setr,mode,not(get(%l/D`POT))),now,no longer)]%bfunction in this location.,lcon(%l);&D`POT %l=%q<mode> +&INC`POT`TOGGLE [u(cobj,scene)]=@check cor(controls(%#,%l),u(isadmin,%#))=@attach %!/INC`MSG=ERROR: Permission denied.;@attach %!/INC`MSG`ROOM=Pot will [if(u(setr,mode,not(get(%l/D`POT))),no longer,now)]%bfunction in this location.,lcon(%l);&D`POT %l=%q<mode> &Q`GET`ACTIVEHERE [u(cobj,scene)]=SELECT scene_id from $SCENES$ WHERE room_objid=? AND room_custloc=? AND scene_state='0' @@ -246,7 +249,7 @@ th u(NEWCONF,config,CHANNELS,ROLEPLAY,,Channel to announce scenes on?,LIST) &INC`SCENE`WHO [u(cobj,scene)]=@attach %!/INC`VALSCENE=u(strfirstof,%0,get(%#/D`SCENE`ACTIVE));@attach %!/INC`MSG=Joined participants for Scene %q<scene>: [u(strfirstof,u(itemize,iter(lsearch(all,type,player,elock,D`SCENE`ACTIVE:%q<scene>),name(%i0)[if(strmatch(%l,loc(%i0)),,%b\(not present\))],%b,|),|,and,\,),Nobody!)] -&INC`SCENE`MOVE [u(cobj,scene)]=@attach %!/INC`USERCHECK=u(objid,%#);@attach %!/INC`VALSCENE=%0;@attach %!/INC`OWNCHECK=%q<scene>,%q<pid>;@check isic(%l)=@attach %!/INC`MSG=ERROR: This location is not IC!;@attach %!/INC`DOSQL=SET`RELOCATE,u(objid,%l),name(%l),uldefault(%l/D`CUSTLOC,%l,%#),%q<scene>;@attach %!/INC`MESSAGE=%q<scene>,{[u(moniker,%#)] has changed the scene's location to: %l - [name(%l)]} +&INC`SCENE`MOVE [u(cobj,scene)]=@attach %!/INC`USERCHECK=u(objid,%#);@attach %!/INC`VALSCENE=%0;@attach %!/INC`OWNCHECK=%q<scene>,%q<pid>;@check u(isic,%l)=@attach %!/INC`MSG=ERROR: This location is not IC!;@attach %!/INC`DOSQL=SET`RELOCATE,u(objid,%l),name(%l),uldefault(%l/D`CUSTLOC,%l,%#),%q<scene>;@attach %!/INC`MESSAGE=%q<scene>,{[u(moniker,%#)] has changed the scene's location to: %l - [name(%l)]} &INC`SCENE`TINYPLOT [u(cobj,scene)]=@attach %!/INC`USERCHECK=u(objid,%#);@attach %!/INC`VALSCENE=%0;@attach %!/INC`OWNCHECK=%q<scene>,%q<pid>;@attach %!/INC`VALPLOT=%1;@attach %!/INC`DOSQL=SET`SCENEPLOT,%q<plot>,%q<scene>;@attach %!/INC`MSGSCENE=%q<scene>,{[u(moniker,%#)] linked Scene %q<scene> to Tinyplot %q<plot>} &INC`SCENE`NOTINYPLOT [u(cobj,scene)]=@attach %!/INC`USERCHECK=u(objid,%#);@attach %!/INC`VALSCENE=%0;@attach %!/INC`OWNCHECK=%q<scene>,%q<pid>;@check u(setr,plot,u(mysql,get`sceneplot,%q<scene>))=@attach %!/INC`MSG=That scene is not linked to any Tinyplots!;@attach %!/INC`DOSQL=SET`NOSCENEPLOT,%q<scene>; @@ -437,7 +440,7 @@ th u(NEWCONF,config,CHANNELS,ROLEPLAY,,Channel to announce scenes on?,LIST) @@ POSE ORDER TRACKER - POT +help/add +pot=[u(cobj,scene)]/HLP`+POT +help/category +pot=Roleplaying -&HLP`+POT [u(cobj,scene)]=+pot, or [ansi(h,Po)]se [ansi(h,T)]racker, is a system that stores poses within the room for easy retrieval for review. Sometimes, poses are lost in spam or scroll, or a player enters late and needs to see what's going on, or was disconnected when someone else posed, and that's what this system's here to aid with.%R%R[ansi(hc,Commands)]%R[align(5 [sub(u(width,%#),6)],,[ansi(h,+pot)] - Show either +pot/list or +pot/brief\, depending on /mode. \(See below.\)%R[ansi(h,+pot/list)] - show the last 15 \(or set max\) poses.%R[ansi(h,+pot/list <number>)] - Show a specified amount of poses.%R[ansi(h,+pot/max <number>)] - Set a new default number of poses to show.%R[ansi(h,+pot/brief)] - Show when people last posed and their last +summary made after that pose if they have one.%R[ansi(h,+pot/mode)] - Change the behavior of +pot. By default\, +pot uses +pot/list display style. Change mode and it will use +pot/brief instead.%R%R[ansi(h,+pot/toggle)] - THINGS used as rooms will not support +pot by default. Object owners can use +pot/toggle to enable pose recording.)] +&HLP`+POT [u(cobj,scene)]=+pot, or [ansi(h,Po)]se [ansi(h,T)]racker, is a system that stores poses within the room for easy retrieval for review. Sometimes, poses are lost in spam or scroll, or a player enters late and needs to see what's going on, or was disconnected when someone else posed, and that's what this system's here to aid with.%R%R[ansi(hc,Commands)]%R[align(5 [sub(u(width,%#),6)],,[ansi(h,+pot)] - Show either +pot/list or +pot/brief\, depending on /mode. \(See below.\)%R[ansi(h,+pot/list)] - show the last 15 \(or set max\) poses.%R[ansi(h,+pot/list <number>)] - Show a specified amount of poses.%R[ansi(h,+pot/max <number>)] - Set a new default number of poses to show.%R[ansi(h,+pot/brief)] - Show when people last posed and their last +summary made after that pose if they have one.%R[ansi(h,+pot/mode)] - Change the behavior of +pot. By default\, +pot uses +pot/list display style. Change mode and it will use +pot/brief instead.%R%R[ansi(h,+pot/toggle)] - THINGS used as rooms WILL support +pot if they are within an IC room. Object owners can use +pot/toggle to switch off recording. It can also enable recording in areas that are normally OOC.)] +help/add +summary=[u(cobj,scene)]/HLP`+SUMMARY +Help/category +summary=Roleplaying diff --git a/unfinished/storyteller/Character Data Editor - DATA.txt b/unfinished/storyteller/Character Data Editor - DATA.txt index f4cfecf..d367aad 100644 --- a/unfinished/storyteller/Character Data Editor - DATA.txt +++ b/unfinished/storyteller/Character Data Editor - DATA.txt @@ -6,7 +6,7 @@ th u(newcobj,Character Data Editor <DATA>,data,,,,WIZARD SAFE !NO_COMMAND,INHERI @set [u(cobj,data)]/CMD`+EDITCHAR`PENNMUSH=regexp &CMD`+EDITCHAR`RHOSTMUSH [u(cobj,data)]=$^\+editchar(?\:/(\\S+))?(?\: +(.+?))?(?\:=(.*))?$:@attach %!/CMD`+WHO`MAIN @set [u(cobj,data)]/CMD`+EDITCHAR`RHOSTMUSH=regexp -&CMD`+EDITCHAR`MAIN [u(cobj,data)]=@attach %!/INC`GETSWITCH=%1,|,switch,switch;th iter(before(%2,=),u(setq,chr(add(inum(0),64)),%i0),|);@attach %!/INC`CHECKPC=%qa,1;@check strlen(%qb)=@attach %!/INC`MSG=ERROR: No Type entered to %q<switch> Your choices are: [itemize(iter(u(lattr,[u(cobj,data)]/INC`%q<switch>`*,|),last(%i0,`),|,|),|,and,\,)]!;@attach %!/INC`PARTIAL=%qb,iter(u(lattr,%!/INC`%q<switch>`*,|),last(%i0,`),|,|),|,topic,option;@attach [u(cobj,data)]/INC`%q<switch>`%q<topic>=%q<t1>,after(iter(%2,trim(%i0),|,|),elements(%2,1,|)|),squish(squish(trim(%3)),|) +&CMD`+EDITCHAR`MAIN [u(cobj,data)]=@attach %!/INC`GETSWITCH=%1;th iter(before(%2,=),u(setq,chr(add(inum(0),64)),%i0),|);@attach %!/INC`CHECKPC=%qa,1;@check strlen(%qb)=@attach %!/INC`MSG=ERROR: No Type entered to %q<switch> Your choices are: [itemize(iter(u(lattr,[u(cobj,data)]/INC`%q<switch>`*,|),last(%i0,`),|,|),|,and,\,)]!;@attach %!/INC`PARTIAL=%qb,iter(u(lattr,%!/INC`%q<switch>`*,|),last(%i0,`),|,|),|,topic,option;@attach [u(cobj,data)]/INC`%q<switch>`%q<topic>=%q<t1>,after(iter(%2,trim(%i0),|,|),elements(%2,1,|)|),squish(squish(trim(%3)),|) @set [u(cobj,data)]/CMD`+EDITCHAR`[switch(v(game),PennMUSH,RHOSTMUSH,RhostMUSH,PENNMUSH)]=no_command &GETSPHERE [u(cobj,data)]=u(strfirstof,u(getstat,%0/D`INFO,Sphere),Mortal) @@ -18,6 +18,10 @@ th u(newcobj,Character Data Editor <DATA>,data,,,,WIZARD SAFE !NO_COMMAND,INHERI &DO`ANNOUNCE [u(cobj,data)]=@attach %!/INC`MSG`CHAN=%1;@select/inline strmatch(%#,%0)=0,{@attach %!/INC`MSG=%2,%0;@attach %!/INC`MSG=%3},1,{@attach %!/INC`MSG=%2,%0} +&DO`CHECKSTAT [u(cobj,data)]=@select/inline strlen(u(setr,value,%2))=>0,{@attach %!/INC`VALID`POSINT=%2,%1} + +&DO`RENDERSTAT [u(cobj,data)]=th u(setq,msg,if(strlen(%q<value>)),'[ansi(h,u(capnames,u(strfirstof,%2,%q<find>)))]' %1 was set to: [ansi(h,%q<value>)].,'[ansi(h,u(capnames,u(strfirstof,%2,%q<find>)))]' %1 was cleared.);@attach %!/DO`ANNOUNCE=%0,{[ansi(h,name(%0))]'s %q<msg>},{Your %q<msg>},{[ansi(h,name(%0))]'s %q<msg>} + @@ %0 - player being modified. %1 - message for admin channel. %2 - message for player. %3 - message for admin. @@ Advantages @@ -34,8 +38,6 @@ th u(newcobj,Character Data Editor <DATA>,data,,,,WIZARD SAFE !NO_COMMAND,INHERI &DO`VAL`POWER [u(cobj,data)]=@check u(valnum,%2)=@attach %!/INC`MSG=ERROR: Power must be a positive integer.;th u(setq,entry,%2) &DO`SET`POWER [u(cobj,data)]=@attach [u(cobj,data)]/DO`VAL`POWER;@attach [u(cobj,data)]/KEYVALUE`SET=%0,D`INFO,POWER,%q<entry> -th u(setstat,%0,D`INFO,Power,%q<entry>) - &INC`SET`WILLPOWER [u(cobj,data)]=@attach %!/DO`SET`WILLPOWER;@attach %!/DO`ANNOUNCE=%0,{u(setr,msg,ansi(h,name(%0))'s [u(setr,have,Willpower is now: [ansi(h,%q<entry>)])])},{Your %q<have>},{%q<msg>} &DO`VAL`WILLPOWER [u(cobj,data)]=@check u(valnum,%2)=@attach %!/INC`MSG=ERROR: Willpower must be a positive integer.;th u(setq,entry,%2) @@ -45,6 +47,6 @@ th u(setstat,%0,D`INFO,Power,%q<entry>) &WORDLIST`VAL [u(cobj,data)]=@stop u(charsearch,%2,~)=@attach %!/INC`MSG=ERROR: ~ is a system-reserved character.;th u(setq,filtered,u(filter,STRLEN,iter(ucstr(%2),squish(%i0),|,|),|,|)) &KEYVALUE`SET [u(cobj,data)]=@stop u(charsearch,%2 %3,| ~)=@attach %!/INC`MSG=ERROR: ~ and | are system-reserved characters.;@select/inline strlen(%3)=>0,{th u(setstat,%0,%1,ucstr(%2),%3)},{th u(delstat,%0,%1,ucstr(%2))} -&WORDLIST`ADD [u(cobj,data)]=@attach [u(cobj,data)]/WORDLIST`VAL;@dolist/inline/delimit | %q<filtered>=th u(setstat,%0,%1,##,add(1,u(getstat,%0,%1,##)));th u(setq,returnlist,iter(ucstr(%2),%i0~[u(getstat,%0,%1,##)],|,|)) -&WORDLIST`DEL [u(cobj,data)]=@attach [u(cobj,data)]/WORDLIST`VAL;@dolist/inline/delimit | %q<filtered>=@select/inline u(setr,rank,u(getstat,%0,%1,##))=>1,{th u(setstat,%0,%1,##,sub(%q<rank>,1))},{th u(delstat,%0,%1,##)};th u(setq,returnlist,iter(ucstr(%2),%i0~[bound(u(getstat,%0,%1,%i0),0)],|,|)) +&WORDLIST`ADD [u(cobj,data)]=@attach [u(cobj,data)]/WORDLIST`VAL;@dolist/inline/delimit | %q<filtered>=th u(setstat,%0,%1,##,add(1,u(getstat,%0,%1,##)));th u(setq,returnlist,iter(ucstr(%2),%i0~[u(getstat,%0,%1,##)],|,|));th u(setq,returnformat,u(itemize,iter(%q<returnlist>,u(capnames,before(%i0,~))%b%([after(%i0,~)]%),|,|))) +&WORDLIST`DEL [u(cobj,data)]=@attach [u(cobj,data)]/WORDLIST`VAL;@dolist/inline/delimit | %q<filtered>=@select/inline u(setr,rank,u(getstat,%0,%1,##))=>1,{th u(setstat,%0,%1,##,sub(%q<rank>,1))},{th u(delstat,%0,%1,##)};th u(setq,returnlist,iter(ucstr(%2),%i0~[bound(u(getstat,%0,%1,%i0),0)],|,|));th u(setq,returnformat,u(itemize,iter(%q<returnlist>,u(capnames,before(%i0,~))%b%([after(%i0,~)]%),|,|))) @@ %0 - Target. %1 - Attr. %2 - List. %3 - Entry for keyvalue. \ No newline at end of file diff --git a/unfinished/storyteller/exalted3/Character Data Editor - DATA.txt b/unfinished/storyteller/exalted3/Character Data Editor - DATA.txt new file mode 100644 index 0000000..cd17ad8 --- /dev/null +++ b/unfinished/storyteller/exalted3/Character Data Editor - DATA.txt @@ -0,0 +1,199 @@ +@@ Advantages + +&INC`SET`SPLAT [u(cobj,data)]=@attach [u(cobj,data)]/INC`SET`SPHERE +&SPHERES [u(cobj,data)]=SOLAR|MORTAL + +&INC`SET`CASTE [u(cobj,data)]=@attach [u(cobj,data)]/DO`SET`CASTE;@attach %!/DO`ANNOUNCE=%0,{ansi(h,name(%0))'s [u(setr,msg,Caste is now set to: [ansi(h,u(capnames,%q<find>))])]},{Your %q<msg>},{ansi(h,name(%0))'s %q<msg>} + +&DO`VAL`CASTE [u(cobj,data)]=th u(setq,sphere,u(getsphere,%0));@check words(u(setr,castes,get(u(cobj,data)/CASTE`%q<sphere>)),|)=@attach %!/INC`MSG=[u(capnames,%q<sphere>)]s do not have Castes.;@check strlen(%2)=@attach %!/INC`MSG=ERROR: No Caste name entered.;@attach %!/INC`PARTIAL=%2,%q<castes>,|,find,caste +&DO`SET`CASTE [u(cobj,data)]=@attach [u(cobj,data)]/DO`VAL`CASTE;@attach [u(cobj,data)]/KEYVALUE`SET=%0,D`INFO,CASTE,%q<find> + +&CASTE`SOLAR [u(cobj,data)]=DAWN|ZENITH|TWILIGHT|NIGHT|ECLIPSE +&CASTE`LUNAR [u(cobj,data)]=FULL MOON|CHANGING MOON|NO MOON|CASTELESS +&CASTE`TERRESTRIAL [u(cobj,data)]=AIR|EARTH|FIRE|WATER|WOOD +&CASTE`ABYSSAL [u(cobj,data)]=DUSK|MIDNIGHT|DAYBREAK|DAY|MOONSHADOW +&CASTE`LIMINAL [u(cobj,data)]=BLOOD|BREATH|FLESH|MARROW|SOIL +&CASTE`SIDEREAL [u(cobj,data)]=JOURNEYS|ENDINGS|BATTLES|SECRETS|SERENITY + +&CASTE`ALCHEMICAL [u(cobj,data)]=ORICHALCUM|MOONSILVER|JADE|SOULSTEEL|STARMETAL|ADAMANT +&CASTE`DRAGON-KING [u(cobj,data)]=ANKLOK|MOSOK|PTEROK|RAPTOK +&CASTE`GOD-BLOODED [u(cobj,data)]=DIVINE|GHOST|DEMON|FAE|SOLAR|LUNAR|SIDEREAL|ABYSSAL|INFERNAL +&CASTE`INFERNAL [u(cobj,data)]=SLAYER|FIEND|SCOURGE|MALEFACTOR|DEFILER +&CASTE`JADEBORN [u(cobj,data)]=ARTISAN|WORKER|WARRIOR +&CASTE`RAKSHA [u(cobj,data)]=DIPLOMAT|COURTIER|IMPERIAL RAKSHA|SCRIBE|ENTERTAINER|LUMINARY|ESHU|ORNAMENTAL RAKSHA|WARRIOR|ANARCH|XIA|CATAPHRACT|WORKER|PANJANDRUM|ARTISAN|STRATEGOS|GUIDE|HARBINGER|VAGABOND|NOMAD|FERRYMAN|HERALD|SKALD|DRAGOON|ATTENDANT +&CASTE`SPIRIT [u(cobj,data)]=GOD|DEMON + +@@ Attributes + +&INC`SET`ATTRIBUTE [u(cobj,data)]=@attach %!/DO`SET`ATTRIBUTE=%0,elements(%1,2,|),%2;@attach %!/DO`RENDERSTAT=%0,Attribute + +&DO`VAL`ATTRIBUTE [u(cobj,data)]=@check strlen(%1)=@attach %!/INC`MSG=ERROR: No Attribute name entered.;@attach %!/INC`PARTIAL=%1,u(u(cobj,data)/FUN`GET`ATTRIBUTES),|,find,attribute;@attach %!/DO`CHECKSTAT=%0,Attributes,%2 +&DO`SET`ATTRIBUTE [u(cobj,data)]=@attach [u(cobj,data)]/DO`VAL`ATTRIBUTE;@attach [u(cobj,data)]/KEYVALUE`SET=%0,D`ATTRIBUTES,%q<find>,%q<value> + +&FUN`GET`ATTRIBUTES [u(cobj,data)]=u(game_config,STORYTELLER,ATTRIBUTES) +&FUN`RET`ATTRIBUTES [u(cobj,data)]=iter(ucstr(get(%0/D`ATTRIBUTES)),before(%i0,~),|,|) + +th u(newconf,STORYTELLER,ATTRIBUTES,STRENGTH|CHARISMA|PERCEPTION|DEXTERITY|MANIPULATION|INTELLIGENCE|STAMINA|APPEARANCE|WITS,Attributes list,list) + +@@ Abilities + +&INC`SET`ABILITY [u(cobj,data)]=@attach [u(cobj,data)]/DO`SET`ABILITY=%0,elements(%1,2,|),%2;@attach %!/DO`RENDERSTAT=%0,Ability + +&DO`VAL`ABILITY [u(cobj,data)]=@check strlen(%1)=@attach %!/INC`MSG=ERROR: No Ability name entered.;@attach %!/INC`PARTIAL=%1,u(u(cobj,data)/FUN`GET`ABILITIES),|,find,ability;@attach %!/DO`CHECKSTAT=%0,Abilities,%2 +&DO`SET`ABILITY [u(cobj,data)]=@attach [u(cobj,data)]/DO`VAL`ABILITY;@attach [u(cobj,data)]/KEYVALUE`SET=%0,D`ABILITIES,%q<find>,%q<value> + +&FUN`GET`ABILITIES [u(cobj,data)]=u(game_config,STORYTELLER,ABILITIES) +&FUN`RET`ABILITIES [u(cobj,data)]=iter(ucstr(get(%0/D`ABILITIES)),before(%i0,~),|,|) + +th u(newconf,STORYTELLER,ABILITIES_EXTRA,ARCHERY|BRAWL|MARTIAL ARTS|MELEE|THROWN|WAR|BUREAUCRACY|LINGUISTICS|RIDE|SAIL|SOCIALIZE|ATHLETICS|AWARENESS|DODGE|LARCENY|STEALTH|CRAFT|INVESTIGATION|LORE|MEDICINE|OCCULT|INTEGRITY|PERFORMANCE|PRESENCE|RESISTANCE|SURVIVAL,Abilities list for display,LIST) +th u(newconf,STORYTELLER,ABILITIES,ARCHERY|BRAWL|MELEE|THROWN|WAR|BUREAUCRACY|LINGUISTICS|RIDE|SAIL|SOCIALIZE|ATHLETICS|AWARENESS|DODGE|LARCENY|STEALTH|CRAFT|INVESTIGATION|LORE|MEDICINE|OCCULT|INTEGRITY|PERFORMANCE|PRESENCE|RESISTANCE|SURVIVAL,Abilities list,list) + +@@ Styles + +&INC`SET`STYLES [u(cobj,data)]=@attach [u(cobj,data)]/DO`SET`STYLES=%0,elements(%1,2,|),%2;@attach %!/DO`RENDERSTAT=%0,Style + +&DO`VAL`STYLES [u(cobj,data)]=@check strlen(%1)=@attach %!/INC`MSG=ERROR: No Style name entered.;@attach %!/INC`PARTIAL=%1,u(u(cobj,data)/FUN`GET`STYLES),|,find,style;@attach %!/DO`CHECKSTAT=%0,Styles,%2 +&DO`SET`STYLES [u(cobj,data)]=@attach [u(cobj,data)]/DO`VAL`STYLES;@attach [u(cobj,data)]/KEYVALUE`SET=%0,D`STYLES,%q<find>,%q<value> + +&FUN`GET`STYLES [u(cobj,data)]=u(game_config,STORYTELLER,STYLES) +th u(newconf,CONFIG,STORYTELLER,SNAKE STYLE|TIGER STYLE|SINGLE POINT SHINING INTO THE VOID STYLE|WHITE REAPER STYLE|EBON SHADOW STYLE|CRANE STYLE|SILVER-VOICED NIGHTINGALE STYLE|RIGHTEOUS DEVIL STYLE|BLACK CLAW STYLE|DREAMING PEARL COURTESAN STYLE|STEEL DEVIL STYLE,Available Martial Arts,LIST) + +@@ Crafts + +&INC`SET`CRAFTS [u(cobj,data)]=@attach [u(cobj,data)]/DO`SET`CRAFTS=%0,elements(%1,2,|),%2;@attach %!/DO`RENDERSTAT=%0,Craft + +&DO`VAL`CRAFTS [u(cobj,data)]=@check strlen(%1)=@attach %!/INC`MSG=ERROR: No Craft name entered.;@attach %!/INC`PARTIAL=%1,u(u(cobj,data)/FUN`GET`CRAFTS),|,find,Craft;@attach %!/DO`CHECKSTAT=%0,Crafts,%2 +&DO`SET`CRAFTS [u(cobj,data)]=@attach [u(cobj,data)]/DO`VAL`CRAFTS;@attach [u(cobj,data)]/KEYVALUE`SET=%0,D`CRAFTS,%q<find>,%q<value> + +&FUN`RET`CRAFTS [u(cobj,data)]=iter(ucstr(get(%0/D`CRAFTS)),before(%i0,~),|,|) + +&FUN`GET`CRAFTS [u(cobj,data)]=u(game_config,STORYTELLER,CRAFTS) +th u(newconf,CONFIG,STORYTELLER,CRAFTS,ARTIFACTS|GEOMANCY|FIRST AGE ARTIFICE,Available Craft Types,LIST) + +@@ Specialties + +&INC`SET`SPECIALTY [u(cobj,data)]=@attach [u(cobj,data)]/Do`SET`SPECIALTY=%0,elements(%1,2,|),%2;@attach %!/DO`RENDERSTAT=%0,Specialty,%q<find>/%q<spec> + +&DO`VAL`SPECIALTY [u(cobj,data)]=@check strlen(u(setr,enstat,before(%1,/)))=@attach %!/INC`MSG=ERROR: No stat entered to specialize in.;@attach %!/INC`PARTIAL=%q<enstat>,setunion(setunion(u(u(cobj,data)/FUN`GET`ABILITIES),MARTIAL ARTS,|,|),u(u(cobj,data)/FUN`GET`ATTRIBUTES),|,|),|,find,stat;@check strlen(u(setr,spec,after(%1,/)))=@attach %!/INC`MSG=ERROR: No Specialty name entered.;@attach %!/DO`CHECKSTAT=%0,Specialties,%2 +&DO`SET`SPECIALTY [u(cobj,data)]=@attach [u(cobj,data)]/DO`VAL`SPECIALTY;@attach [u(cobj,data)]/KEYVALUE`SET=%0,D`SPECIALTIES,%q<find>/%q<spec>,%q<value> + +&FUN`RET`SPECIALTIES [u(cobj,data)]=iter(ucstr(get(%0/D`SPECIALTIES)),before(%i0,~),|,|) + +@@ Native Charms + +&CHARMTYPE [u(cobj,mco)]=reswitchi(u(getsphere,%0),^(SOLAR|LUNAR|ABYSSAL|ALCHEMICAL|INFERNAL|TERRESTIAL|RAKSHA|SIDEREAL|GHOST|SPIRIT|MORTAL|JADEBORN)$,u(getsphere,%0),^(GOD-BLOODED)$,reswitchi(u(getstat,%0/D`INFO,Caste),^(Divine)$,Spirit,^(Demon)$,Spirit,^(Fae)$,Raksha,^(SOLAR|LUNAR|ABYSSAL|INFERNAL|SIDEREAL)$,u(getstat,%0/D`INFO,Caste),Mortal),MORTAL) + +&INC`ADD`CHARM [u(cobj,data)]=@attach [u(cobj,data)]/DO`ADD`CHARM=%0,u(charmtype,%0)/[elements(%1,2,|)],%2;@attach [u(cobj,data)]/INC`ADD`CHARM`REPORT +&INC`REM`CHARM [u(cobj,data)]=@attach [u(cobj,data)]/DO`REM`CHARM=%0,u(charmtype,%0)/[elements(%1,2,|)],%2;@attach [u(cobj,data)]/INC`REM`CHARM`REPORT + +&INC`ADD`CHARM`REPORT [u(cobj,data)]=@attach %!/DO`ANNOUNCE=%0,{[u(setr,msg,ansi(h,name(%0)) gained the [u(setr,have,ansi(h,u(capnames,%q<find> %q<find2>)) Charms [u(itemize,iter(u(capnames,%q<filtered>),%i0,|,|),|,and,\,))]. Result of additions: %q<returnformat>)])]},{You now have the %q<have>},{%q<msg>} +&INC`REM`CHARM`REPORT [u(cobj,data)]=@attach %!/DO`ANNOUNCE=%0,{[u(setr,msg,ansi(h,name(%0)) lost the [u(setr,have,ansi(h,u(capnames,%q<find> %q<find2>)) Charms: [u(itemize,iter(u(capnames,%q<filtered>),%i0,|,|),|,and,\,))]. Result of removal: %q<returnformat>},{You no longer have the %q<have>},{%q<msg>} + +&INC`ADD`OCHARM [u(cobj,data)]=@attach %!/DO`ADD`CHARM=%0,elements(%1,2,|)/[elements(%1,3,|)],%2;@attach %!/INC`ADD`CHARM`REPORT +&INC`REM`OCHARM [u(cobj,data)]=@attach %!/DO`REM`CHARM=%0,elements(%1,2,|)/[elements(%1,3,|)],%2;@attach %!/INC`REM`CHARM`REPORT + +&DO`VAL`CHARM [u(cobj,data)]=@check strlen(before(%1,/))=@attach %!/INC`MSG=ERROR: No Charmtype entered.;@attach %!/INC`PARTIAL=before(%1,/),u(u(cobj,data)/FUN`GET`CHARMTYPES),|,find,charmtype;@check strlen(after(%1,/))=@attach %!/INC`MSG=ERROR: No Charm Category entered.;@attach %!/INC`PARTIAL=after(%1,/),u(u(cobj,data)/FUN`GET`CHARMTYPES`%q<find>),|,find2,Charm Category;@check strlen(u(setr,value,%2))=@attach %!/INC`MSG=ERROR: No Charms entered. +&DO`ADD`CHARM [u(cobj,data)]=@attach [u(cobj,data)]/DO`VAL`CHARM;@attach [u(cobj,data)]/WORDLIST`ADD=%0,D`CHARMS`%q<find>`%q<find2>,%q<value> +&DO`REM`CHARM [u(cobj,data)]=@attach [u(cobj,data)]/DO`VAL`CHARM;@attach [u(cobj,data)]/WORDLIST`REM=%0,D`CHARMS`%q<find>`%q<Find2>,%q<value> + +&FUN`GET`CHARMTYPES [u(cobj,data)]=SOLAR|ABYSSAL|TERRESTRIAL|LUNAR|SIDEREAL|INFERNAL|SPIRIT + +&FUN`GET`CHARMTYPES`SOLAR [u(cobj,data)]=u(FUN`GET`ABILITIES) +&FUN`GET`CHARMTYPES`ABYSSAL [u(cobj,data)]=u(FUN`GET`ABILITIES) +&FUN`GET`CHARMTYPES`TERRESTRIAL [u(cobj,data)]=u(FUN`GET`ABILITIES) +&FUN`GET`CHARMTYPES`LUNAR [u(cobj,data)]=u(FUN`GET`ATTRIBUTES) +&FUN`GET`CHARMTYPES`SIDEREAL [u(cobj,data)]=u(FUN`GET`ABILITIES) +&FUN`GET`CHARMTYPES`INFERNAL [u(cobj,data)]=u(FUN`GET`ABILITIES) +&FUN`GET`CHARMTYPES`SPIRIT [u(cobj,data)]=UNIVERSAL + +@@ &VAR`CHARMS`ALCHEMICAL [u(cobj,data)]=COMBAT|SURVIVAL|SPEED_AND_MOBILITY|SOCIAL|STEALTH_AND_DISGUISE|ANALYTIC_AND_COGNITIVE|LABOR_AND_UTILITY|SUBMODULES|GENERAL|MASS_COMBAT|SPIRITUAL +@@ &VAR`CHARMS`RAKSHA [u(cobj,data)]=MASK|HEART|CUP|RING|STAFF|SWORD|WAY +@@ &VAR`CHARMS`SPIRIT [u(cobj,data)]=GENERAL|UNIVERSAL|AEGIS|BLESSINGS|CURSES|DIVINATIONS|DIVINE_WORKS|EDGES|EIDOLA|ENCHANTMENTS|INHABITINGS|RELOCATIONS|SENDINGS|TANTRA +@@ &VAR`CHARMS`MORTAL [u(cobj,data)]=UNIVERSAL +@@ &VAR`CHARMS`GHOST [u(cobj,data)]=UNIVERSAL +@@ &VAR`CHARMS`JADEBORN [u(cobj,data)]=FOUNDATION|WORKER|WARRIOR|ARTISAN|ENLIGHTENED|CHAOS + +@@ Martial Arts Charms + +&INC`ADD`MACHARM [u(cobj,data)]=@attach %!/DO`ADD`MACHARM;@attach %!/DO`ANNOUNCE=%0,{[ansi(h,name(%0))] [u(setr,have,gained [ansi(h,u(u(cobj,data)/FUN`GET`STYLENAME,%0,%q<slot>))] Charms: [u(itemize,iter(u(capnames,%q<filtered>),%i0,|,|),|,and,\,))]. Result of addition: %q<returnformat>)]},{You %q<have>},{[ansi(h,name(%0))] gained %q<have>} + +&INC`REM`MACHARM [u(cobj,data)]=@attach %!/DO`REM`MACHARM;@attach %!/DO`ANNOUNCE=%0,{[ansi(h,name(%0))] [u(setr,have,lost [ansi(h,u(u(cobj,data)/FUN`GET`STYLENAME,%0,%q<slot>))] Charms: [u(itemize,iter(u(capnames,%q<filtered>),%i0,|,|),|,and,\,))]. Result of removal: %q<returnformat>)]},{You %q<have>},{[ansi(h,name(%0))] lost %q<have>} + +&DO`VAL`MACHARM [u(cobj,data)]=@check strlen(%1)=@attach %!/INC`MSG=ERROR: No Style entered.;@check words(u(setr,styles,u(u(cobj,data)/FUN`RET`STYLES,%0)),|)=@attach %!/INC`MSG=ERROR: [switch(%0,%#,You don't,name(%0) doesn't)] know any styles.;@attach %!/INC`PARTIAL=%1,%q<styles>,|,style,style;th u(setq,slot,u(strfirstof,elements(first(u(wildgrepi,%0,D`CHARMS`MACHARMS`*`NAME,%q<style>)),4,`,`),u(nextslot,%0,D`CHARMS`MACHARMS)));@check strlen(u(setr,value,%2))=@attach %!/INC`MSG=ERROR: No Charms entered. + +&DO`ADD`MACHARM [u(cobj,data)]=@attach [u(cobj,data)]/DO`VAL`MACHARM;@attach [u(cobj,data)]/WORDLIST`ADD=%0,D`CHARMS`MACHARMS`%q<slot>,%q<value>;&D`CHARMS`MACHARMS`%q<slot>`NAME %0=ucstr(%q<style>) + +&DO`REM`MACHARM [u(cobj,data)]=@attach [u(cobj,data)]/DO`VAL`MACHARM;@attach [u(cobj,data)]/WORDLIST`ADD=%0,D`CHARMS`MACHARMS`%q<slot>,%q<value>;@select/inline strlen(get(%0/D`CHARMS`MACHARMS`%q<slot>))=0,{@attach %!/WIPE=%0,D`CHARMS`MACHARMS`%q<slot>} + +&FUN`RET`STYLES [u(cobj,data)]=iter(ucstr(get(%0/D`STYLES)),before(%i0,~),|,|) +&FUN`RET`STYLENAME [u(cobj,data)]=u(capnames,default(%0/D`CHARMS`MACHARMS`%1`NAME,Unnamed Style)) + +@@ Evocations +&INC`ADD`EVOCATION [u(cobj,data)]=@attach %!/DO`ADD`EVOCATION=%0,elements(%1,2,|),%2;@attach %!/DO`ANNOUNCE=%0,{[ansi(h,name(%0))] [u(setr,have,gained [ansi(h,u(u(cobj,data)/FUN`RET`EVOCNAME,%0,%q<slot>))] Evocations: [u(itemize,iter(u(capnames,%q<filtered>),%i0,|,|),|,and,\,))]. Result of addition: %q<returnformat>)]},{You %q<have>},{[ansi(h,name(%0))] gained %q<have>} + +&INC`REM`EVOCATION [u(cobj,data)]=@attach %!/DO`REM`EVOCATION=%0,elements(%1,2,|),%2;@attach %!/DO`ANNOUNCE=%0,{[ansi(h,name(%0))] [u(setr,have,lost [ansi(h,u(u(cobj,data)/FUN`RET`EVOCNAME,%0,%q<slot>))] Evocations: [u(itemize,iter(u(capnames,%q<filtered>),%i0,|,|),|,and,\,))]. Result of removal: %q<returnformat>)]},{You %q<have>},{[ansi(h,name(%0))] lost %q<have>} + +&DO`VAL`EVOCATION [u(cobj,data)]=@check strlen(u(setr,style,%1))=@attach %!/INC`MSG=ERROR: No Style entered.;th u(setq,slot,u(strfirstof,elements(first(u(wildgrepi,%0,D`CHARMS`EVOCATIONS`*`NAME,%q<style>)),4,`,`),u(nextslot,%0,D`CHARMS`EVOCATIONS)));@check strlen(u(setr,value,%2))=@attach %!/INC`MSG=ERROR: No Charms entered. + +&DO`ADD`EVOCATION [u(cobj,data)]=@attach [u(cobj,data)]/DO`VAL`EVOCATION;@attach [u(cobj,data)]/WORDLIST`ADD=%0,D`CHARMS`EVOCATIONS`%q<slot>,%q<value>;&D`CHARMS`EVOCATIONS`%q<slot>`NAME %0=ucstr(%q<style>) + +&DO`REM`EVOCATION [u(cobj,data)]=@attach [u(cobj,data)]/DO`VAL`EVOCATION;@attach [u(cobj,dta)]/WORDLIST`REM=%0,D`CHARMS`EVOCATIONS`%q<slot>,%q<value>;@select/inline strlen(get(%0/D`CHARMS`EVOCATIONS`%q<slot>))=0,{@attach %!/WIPE=%0,D`CHARMS`EVOCATIONS`%q<slot>} + +&FUN`RET`EVOCNAME [u(cobj,data)]=u(capnames,default(%0/D`CHARMS`EVOCATIONS`%1`NAME,Unnamed Artifact)) + +@@ Health + +&INC`ADD`HEALTH [u(cobj,data)]=@attach %!/DO`ADD`HEALTH;th u(setq,have,additional Health Levels: [sortby(FUN`HEALTHSORT,ucstr(%2))]);@attach %!/DO`ANNOUNCE=%0,{[ansi(h,name(%0))] has gained %q<have>},{You have gained %q<have>},{[ansi(h,name(%0))] has gained %q<have>} + +&INC`REM`HEALTH [u(cobj,data)]=@attach %!/DO`REM`HEALTH;th u(setq,have,Health Levels: [sortby(FUN`HEALTHSORT,ucstr(%2))]);@attach %!/DO`ANNOUNCE=%0,{[ansi(h,name(%0))] has lost %q<have>},{You have lost %q<have>},{[ansi(h,name(%0))] has lost %q<have>} + +&DO`VAL`HEALTH [u(cobj,data)]=@check strlen(%2)=@attach %!/INC`MSG=ERROR: Health levels field empty.;@check lmath(min,iter(ucstr(%2),or(isnum(%i0),regmatchi(%i0,^(I|D)$))))=@attach %!/INC`MSG=ERROR: %q<newhealth> contains an invalid value. Health values must be a negative number, I, or D. +&DO`ADD`HEALTH [u(cobj,data)]=@attach [u(cobj,data)]/DO`VAL`HEALTH;&D`HEALTH %0=sortby(u(cobj,data)/FUN`HEALTHSORT,cat(get(%0/D`HEALTH),ucstr(%2))) +&DO`REM`HEALTh [u(cobj,data)]=@attach [u(cobj,data)]/DO`VAL`HEALTH;&D`HEALTH %0=sortby(u(cobj,data)/FUN`HEALTHSORT,remove(get(%0/D`HEALTH),ucstr(%2))) + +&FUN`HEALTHSORT [u(cobj,data)]=comp(u(FUN`HEALTHSORT`GET,%0),u(FUN`HEALTHSORT`GET,%1),N) + +&FUN`HEALTHSORT`GET [u(cobj,data)]=switch(%0,-0,1,-1,2,-2,3,-4,4,I,5,D,6) + +@@ Spells + +&INC`ADD`SPELL [u(cobj,data)]=@attach %!/DO`ADD`SPELL=%0,elements(%1,2,|),%2;@attach %!/DO`ANNOUNCE=%0,{[u(setr,msg,ansi(h,name(%0)) now has the [u(setr,have,ansi(h,u(capnames,%q<find>)) Spells [u(itemize,iter(u(capnames,%q<filtered>),%i0,|,|),|,and,\,))]. Result of additions: %q<returnformat>)])]},{You now have the %q<have>},{%q<msg>} +&INC`REM`SPELL [u(cobj,data)]=@attach %!/DO`REM`SPELL=%0,elements(%1,2,|),%2;@attach %!/DO`ANNOUNCE=%0,{[u(setr,msg,ansi(h,name(%0)) no longer have the [u(setr,have,ansi(h,u(capnames,%q<find>)) Spells: [u(itemize,iter(u(capnames,%q<filtered>),%i0,|,|),|,and,\,))]. Result of removal: %q<returnformat>)])]},{You no longer have the %q<have>},{%q<msg>} + +&DO`VAL`SPELL [u(cobj,data)]=@check strlen(%1)=@attach %!/INC`MSG=ERROR: No Spell Category entered.;@attach %!/INC`PARTIAL=%1,u(u(cobj,data)/FUN`GET`SPELLS),|,find,Spell Category;@check strlen(u(setr,value,%2))=@attach %!/INC`MSG=ERROR: No Spells entered. + +&DO`ADD`SPELL [u(cobj,data)]=@attach [u(cobj,data)]/DO`VAL`SPELL;@attach [u(cobj,data)]/WORDLIST`ADD=%0,D`SPELLS`%q<find>,%q<value> +&DO`REM`SPELL [u(cobj,data)]=@attach [u(cobj,data)]/DO`VAL`SPELL;@attach [u(cobj,data)]/WORDLIST`REM=%0,D`SPELLS`%q<find>,%q<value>;@select/inline strlen(get(%0/D`SPELLS`%q<find>))=0,{@wipe %0/D`SPELLS`%q<find>;@select/inline strlen(get(%0/D`SPELLS))=0,{@wipe %0/D`SPELLS}} + +&FUN`GET`SPELLS [u(cobj,data)]=u(game_config,STORYTELLERY,SPELLS) +th u(newconf,CONFIG,STORYTELLER,SPELLS,TERRESTRIAL|CELESTIAL|SOLAR|SHADOWLANDS|LABYRINTH|VOID,Available Spell Categories,LIST) + +@@ Favored + +&INC`ADD`FAVORED [u(cobj,data)]=@attach %!/DO`ADD`FAVORED=%0,elements(%1,2,|),%2;@attach %!/DO`ANNOUNCE=%0,{[u(setr,msg,ansi(h,name(%0)) now [u(setr,have,[ansi(h,u(capnames,%q<find>))] Favors: [u(itemize,iter(%q<value>,ansi(h,u(capnames,%i0)),|,|),|,and,\,)])])]},{You now %q<have>},{%q<msg>} +&INC`REM`FAVORED [u(cobj,data)]=@attach %!/DO`REM`FAVORED=%0,elements(%1,2,|),%2;@attach %!/DO`ANNOUNCE=%0,{[u(setr,msg,ansi(h,name(%0)) no longer [u(setr,have,[ansi(h,u(capnames,%q<find>))] Favor: [u(itemize,iter(%q<value>,ansi(h,u(capnames,%i0)),|,|),|,and,\,)])])]},{You no longer %q<have>},{%q<msg>} + +&DO`VAL`FAVORED [u(cobj,data)]=@check strlen(before(%1,/))=@attach %!/INC`MSG=ERROR: No Favored Type entered.;@attach %!/INC`PARTIAL=before(%1,/),u(u(cobj,data)/FUN`GET`FAVORED),|,find,Favored Type;@check strlen(%2)=@attach %!/INC`MSG=ERROR: No [u(capnames,%q<find>)] entered.;th u(setq,find2,u(u(cobj,data)/FUN`GET`FAVORED`%q<find>));th u(setq,value,iter(ucstr(%2),grab(%q<find2>,if(strlen(%i0),%i0*),|),|,|));@check lmath(min,iter(%q<value>,strlen(%i0),|,%b))=@attach %!/INC`MSG=ERROR: One or more [u(capnames,%q<find>)] didn't resolve. Please check your entry. + +&DO`ADD`FAVORED [u(cobj,data)]=@attach [u(cobj,data)]/DO`VAL`FAVORED;@stop words(u(setr,conflict,setinter(u(setr,oldcharms,ucstr(get(%0/D`FAVORED`%q<find>))),ucstr(%q<value>),|,|)),|)=@attach %!/INC`MSG=[switch(%0,%#,You already have,name(%0) already has)] the [u(itemize,u(capnames,%q<conflict>),|,and,\,)] [ansi(h,u(capnames,%q<find>))] Favored.;&D`FAVORED`%q<find> %0=u(setr,newcharms,setunion(%q<oldcharms>,ucstr(%q<value>),|,|)) +&DO`REM`FAVORED [u(cobj,data)]=@attach [u(cobj,data)]/DO`VAL`FAVORED;@stop words(u(setr,conflict,setdiff(ucstr(%q<value>),u(setr,oldcharms,ucstr(get(%0/D`FAVORED`%q<find>))),|,|)),|)=@attach %!/INC`MSG=[switch(%0,%#,You don't have have,name(%0) doesn't have)] the [u(itemize,u(capnames,%q<conflict>),|,and,\,)] [ansi(h,u(capnames,%q<find>))] Favored.;&D`FAVORED`%q<find> %0=u(setr,newcharms,setdiff(get(%0/D`FAVORED`%q<find>),ucstr(%q<value>),|,|));@select/inline strlen(%q<newcharms>)=0,{@wipe %0/D`FAVORED`%q<find>} + +&FUN`GET`FAVORED [u(cobj,data)]=ATTRIBUTES|ABILITIES +&FUN`GET`FAVORED`ATTRIBUTES [u(cobj,data)]=u(FUN`GET`ATTRIBUTES) +&FUN`GET`FAVORED`ABILITIES [u(cobj,data)]=u(FUN`GET`ABILITIES) + +@@ Supernal + +&INC`ADD`SUPERNAL [u(cobj,data)]=@attach [u(cobj,data)]/DO`ADD`SUPERNAL=%0,elements(%1,2,|),%2;@attach %!/DO`ANNOUNCE=%0,{u(setr,msg,ansi(h,name(%0)) now [u(setr,have,[ansi(h,u(capnames,%q<find>))] Supernals: [u(itemize,iter(%q<value>,ansi(h,u(capnames,%i0)),|,|),|,and,\,)])])},{You now %q<have>},{%q<msg>} +&INC`REM`SUPERNAL [u(cobj,data)]=@attach [u(cobj,data)]/DO`REM`SUPERNAL=%0,elements(%1,2,|),%2;@attach %!/DO`ANNOUNCE=%0,{u(setr,msg,ansi(h,name(%0)) no longer [u(setr,have,[ansi(h,u(capnames,%q<find>))] Supernals: [u(itemize,iter(%q<value>,ansi(h,u(capnames,%i0)),|,|),|,and,\,)])])},{You no longer %q<have>},{%q<msg>} + +&DO`VAL`SUPERNAL [u(cobj,data)]=@check strlen(before(%1,/))=@attach %!/INC`MSG=ERROR: No Favored Type entered.;@attach %!/INC`PARTIAL=before(%1,/),u(u(cobj,data)/FUN`GET`SUPERNAL),|,find,Favored Type;@check strlen(%2)=@attach %!/INC`MSG=ERROR: No [u(capnames,%q<find>)] entered.;th u(setq,find2,u(u(cobj,data)/FUN`GET`SUPERNAL`%q<find>));th u(setq,value,iter(ucstr(%2),grab(%q<find2>,if(strlen(%i0),%i0*),|),|,|));@check lmath(min,iter(%q<value>,strlen(%i0),|,%b))=@attach %!/INC`MSG=ERROR: One or more [u(capnames,%q<find>)] didn't resolve. Please check your entry. + +&DO`ADD`SUPERNAL [u(cobj,data)]=@attach [u(cobj,data)]/DO`VAL`SUPERNAL;@stop words(u(setr,conflict,setinter(u(setr,oldcharms,ucstr(get(%0/D`SUPERNAL`%q<find>))),ucstr(%q<value>),|,|)),|)=@attach %!/INC`MSG=[switch(%0,%#,You already have,name(%0) already has)] the [u(itemize,u(capnames,%q<conflict>),|,and,\,)] [ansi(h,u(capnames,%q<find>))] as Supernal.;&D`SUPERNAL`%q<find> %0=u(setr,newcharms,setunion(%q<oldcharms>,ucstr(%q<value>),|,|)) +&DO`REM`SUPERNAL [u(cobj,data)]=@attach [u(cobj,data)]/DO`VAL`SUPERNAL;@stop words(u(setr,conflict,setdiff(ucstr(%q<value>),u(setr,oldcharms,ucstr(get(%0/D`SUPERNAL`%q<find>))),|,|)),|)=@attach %!/INC`MSG=[switch(%0,%#,You don't have have,name(%0) doesn't have)] the [u(itemize,u(capnames,%q<conflict>),|,and,\,)] [ansi(h,u(capnames,%q<find>))] as Supernal.;&D`SUPERNAL`%q<find> %0=u(setr,newcharms,setdiff(get(%0/D`SUPERNAL`%q<find>),ucstr(%q<value>),|,|));@select/inline strlen(%q<newcharms>)=0,{@wipe %0/D`SUPERNAL`%q<find>} + +&FUN`GET`SUPERNAL [u(cobj,data)]=ATTRIBUTES|ABILITIES +&FUN`GET`SUPERNAL`ATTRIBUTES [u(cobj,data)]=u(FUN`GET`ATTRIBUTES) +&FUN`GET`SUPERNAL`ABILITIES [u(cobj,data)]=setunion(u(FUN`GET`ABILITIES),MARTIAL ARTS,|,|) + ++shelp/addmain Characters/+editchar=+editchar is used to modify all parts of a character's +sheet!%R%R[ansi(h,+editchar/<flag> <player>|<categories|and|objects>\[=<modification>\])]%r%r[ansi(h,FLAG: SET)]%r[ansi(h,Splat)]%t%t=<splat>%r[ansi(h,Caste)]%T%T=<caste>%R[ansi(h,Essence)]%t%t=<value>%R[ansi(h,Willpower)]%t=<value>%R[ansi(h,Attribute)]%t<attribute>=<value>%r[ansi(h,Ability)]%t%t<ability>=<value>%r[ansi(h,Specialty)]%t<ability or attribute>/<specialty>=<value>%R[ansi(h,Style)]%t%t<style>=<value>%r[ansi(h,Craft)]%t%t<field>=<value> (Weaponsmithing, etc)%r%r[ansi(h,FLAG: ADD & REM)]%r[ansi(h,Charm)]%t%t<category>=<charm1>|<charm2>|etc (Native Charms)%r[ansi(h,MACharm)]%t%t<style>=<charm1>|<charm2>|etc (Martial Arts Charms)%r[ansi(h,Evocation)]%t<artifact>=<charm1>|<charm2>|etc (Evocations)%r[ansi(h,OCharm)]%t%t<splat>|<category>=<charm1>|<charm2>|etc (Cross-Splat Charms)%r[ansi(h,Spell)]%t%t<circle>=<spell1>|<spell2>|etc%r[ansi(h,Favored)]%t%t<Attribute/Ability>=<Item1>|<Item2>|etc%r[ansi(h,Supernal)]%t<Attribute/Ability>=<Item1>|<Item2>|etc%r[ansi(h,Health)]%t%t=<level1> <level2> etc (must be -0, -1, D, etc)%r%r[ansi(h,EXAMPLES)]%r%r[ansi(h,+editchar/set Isidoros|Attribute|Dexterity=4)]%r%tSets Isidoros' Dexterity to 4%r[ansi(h,+editchar/rem Isidoros|Health=-0 -1)]%r%tRemoves one -0 and one -1 from Isidoros' permanent Health Pool%R%R[ansi(h,CLEARING VALUES)]%RLeaves Values absolutely clear to remove them entirely! Example:%R+editchar/set Isidoros|Attribute|Dexterity= \ No newline at end of file diff --git a/unfinished/storyteller/exalted3/Character Data Object - EX-CDO.txt b/unfinished/storyteller/exalted3/Character Data Object - EX-CDO.txt deleted file mode 100644 index 63c61f7..0000000 --- a/unfinished/storyteller/exalted3/Character Data Object - EX-CDO.txt +++ /dev/null @@ -1,206 +0,0 @@ -@@ Advantages - -&INC`SET`SPLAT [u(cobj,data)]=@attach [u(cobj,data)]/INC`SET`SPHERE -&SPHERES [u(cobj,data)]=SOLAR|MORTAL - -&INC`SET`CASTE [u(cobj,data)]=@attach [u(cobj,data)]/DO`SET`CASTE;@attach %!/DO`ANNOUNCE=%0,{ansi(h,name(%0))'s [u(setr,msg,Caste is now set to: [ansi(h,u(capnames,%q<find>))])]},{Your %q<msg>},{ansi(h,name(%0))'s %q<msg>} - -&DO`VAL`CASTE [u(cobj,data)]=th u(setq,splat,u(getsphere,%0));@check words(u(setr,castes,get(u(cobj,data)/CASTE`%q<splat>)),|)=@attach %!/INC`MSG=[u(capnames,%q<splat>)]s do not have Castes.;@check strlen(%2)=@attach %!/INC`MSG=ERROR: No Caste name entered.;@attach u(ccs)/INC`PARTIAL=%2,%q<castes>,|,find,caste -&DO`SET`CASTE [u(cobj,data)]=@attach [u(cobj,data)]/DO`VAL`CASTE;th u(setstat,%0/D`INFO,Caste,u(capnames,%q<find>)) - -&CASTE`SOLAR [u(cobj,data)]=DAWN|ZENITH|TWILIGHT|NIGHT|ECLIPSE -&CASTE`LUNAR [u(cobj,data)]=FULL MOON|CHANGING MOON|NO MOON|CASTELESS -&CASTE`TERRESTRIAL [u(cobj,data)]=AIR|EARTH|FIRE|WATER|WOOD -&CASTE`ABYSSAL [u(cobj,data)]=DUSK|MIDNIGHT|DAYBREAK|DAY|MOONSHADOW -&CASTE`LIMINAL [u(cobj,data)]=BLOOD|BREATH|FLESH|MARROW|SOIL -&CASTE`SIDEREAL [u(cobj,data)]=JOURNEYS|ENDINGS|BATTLES|SECRETS|SERENITY - -&CASTE`ALCHEMICAL [u(cobj,data)]=ORICHALCUM|MOONSILVER|JADE|SOULSTEEL|STARMETAL|ADAMANT -&CASTE`DRAGON-KING [u(cobj,data)]=ANKLOK|MOSOK|PTEROK|RAPTOK -&CASTE`GOD-BLOODED [u(cobj,data)]=DIVINE|GHOST|DEMON|FAE|SOLAR|LUNAR|SIDEREAL|ABYSSAL|INFERNAL -&CASTE`INFERNAL [u(cobj,data)]=SLAYER|FIEND|SCOURGE|MALEFACTOR|DEFILER -&CASTE`JADEBORN [u(cobj,data)]=ARTISAN|WORKER|WARRIOR -&CASTE`RAKSHA [u(cobj,data)]=DIPLOMAT|COURTIER|IMPERIAL RAKSHA|SCRIBE|ENTERTAINER|LUMINARY|ESHU|ORNAMENTAL RAKSHA|WARRIOR|ANARCH|XIA|CATAPHRACT|WORKER|PANJANDRUM|ARTISAN|STRATEGOS|GUIDE|HARBINGER|VAGABOND|NOMAD|FERRYMAN|HERALD|SKALD|DRAGOON|ATTENDANT -&CASTE`SPIRIT [u(cobj,data)]=GOD|DEMON - -@@ Attributes - -&INC`SET`ATTRIBUTE [u(cobj,data)]=@attach [u(cobj,data)]/DO`SET`ATTRIBUTE=%0,elements(%1,2,|),%2;@select/inline t(strlen(%q<entry>))=0,{@attach %!/DO`ANNOUNCE=%0,{ansi(h,name(%0))'s [u(setr,msg,'[ansi(h,u(capnames,%q<find>))]' Attribute was cleared.)]},{Your %q<msg>},{ansi(h,name(%0))'s %q<msg>}},1,{@attach %!/DO`ANNOUNCE=%0,{ansi(h,name(%0))'s [u(setr,msg,'[ansi(h,u(capnames,%q<find>))]' Attribute was set to: [ansi(h,%q<entry>)].)]},{Your %q<msg>},{ansi(h,name(%0))'s %q<msg>}} - -&DO`VAL`ATTRIBUTE [u(cobj,data)]=@check strlen(%1)=@attach %!/INC`MSG=ERROR: No Attribute name entered.;@attach %!/INC`PARTIAL=%1,u(u(cobj,data)/FUN`GET`ATTRIBUTES),|,find,attribute;@select/inline strlen(u(setr,entry,%2))=>0,{@check u(valnum,%2)=@attach %!/INC`MSG=ERROR: Attributes must be positive integers.} -&DO`SET`ATTRIBUTE [u(cobj,data)]=@attach [u(cobj,data)]/DO`VAL`ATTRIBUTE;@attach [u(cobj,data)]/KEYVALUE`SET=%0,D`ATTRIBUTES,%q<find>,%q<entry> - -&FUN`GET`ATTRIBUTES [u(cobj,data)]=v(ATTRIBUTES) -&FUN`RET`ATTRIBUTES [u(cobj,data)]=iter(ucstr(get(%0/D`ATTRIBUTES)),before(%i0,~),|,|) - -&ATTRIBUTES [u(cobj,data)]=STRENGTH|CHARISMA|PERCEPTION|DEXTERITY|MANIPULATION|INTELLIGENCE|STAMINA|APPEARANCE|WITS - -@@ Abilities - -&INC`SET`ABILITY [u(cobj,data)]=@attach [u(cobj,data)]/DO`SET`ABILITY=%0,elements(%1,2,|),%2;@select/inline t(strlen(%q<entry>))=0,{@attach %!/DO`ANNOUNCE=%0,{ansi(h,name(%0))'s [u(setr,msg,'[ansi(h,u(capnames,%q<find>))]' Ability was cleared.)]},{Your %q<msg>},{ansi(h,name(%0))'s %q<msg>}},1,{@attach %!/DO`ANNOUNCE=%0,{[ansi(h,name(%0))]'s [u(setr,msg,'[ansi(h,u(capnames,%q<find>))]' Ability was set to: [ansi(h,%q<entry>)].)]},{Your %q<msg>},{[ansi(h,name(%0))]'s %q<msg>}} - -&DO`VAL`ABILITY [u(cobj,data)]=@check strlen(%1)=@attach %!/INC`MSG=ERROR: No Ability name entered.;@attach u(ccs)/INC`PARTIAL=%1,u([u(cobj,data)]/FUN`GET`ABILITIES),|,find,ability;@select/inline strlen(u(setr,entry,%2))=>0,{@check u(valnum,%2)=@attach %!/INC`MSG=ERROR: Abilities must be positive integers.} -&DO`SET`ABILITY [u(cobj,data)]=@attach [u(cobj,data)]/DO`VAL`ABILITY;@select/inline strlen(%q<entry>)=0,{th u(delstat,%0/D`ABILITIES,ucstr(%q<find>))},{th u(setstat,%0/D`ABILITIES,ucstr(%q<find>),%q<entry>)} - -&FUN`GET`ABILITIES [u(cobj,data)]=get(u(cobj,data)/VAR`ABILITIES) -&FUN`RET`ABILITIES [u(cobj,data)]=iter(ucstr(get(%0/D`ABILITIES)),before(%i0,~),|,|) - -&FUN`GET`ABILITIES`EXTRA [u(cobj,data)]=ARCHERY|BRAWL|MARTIAL ARTS|MELEE|THROWN|WAR|BUREAUCRACY|LINGUISTICS|RIDE|SAIL|SOCIALIZE|ATHLETICS|AWARENESS|DODGE|LARCENY|STEALTH|CRAFT|INVESTIGATION|LORE|MEDICINE|OCCULT|INTEGRITY|PERFORMANCE|PRESENCE|RESISTANCE|SURVIVAL - -&VAR`ABILITIES [u(cobj,data)]=ARCHERY|BRAWL|MELEE|THROWN|WAR|BUREAUCRACY|LINGUISTICS|RIDE|SAIL|SOCIALIZE|ATHLETICS|AWARENESS|DODGE|LARCENY|STEALTH|CRAFT|INVESTIGATION|LORE|MEDICINE|OCCULT|INTEGRITY|PERFORMANCE|PRESENCE|RESISTANCE|SURVIVAL - -&INC`SET`STYLES [u(cobj,data)]=@attach [u(cobj,data)]/DO`SET`STYLES=%0,elements(%1,2,|),%2;@select/inline t(strlen(%q<entry>))=0,{@attach %!/DO`ANNOUNCE=%0,{ansi(h,name(%0))'s [u(setr,msg,'[ansi(h,u(capnames,%q<find>))]' Style was cleared.)]},{Your %q<msg>},{ansi(h,name(%0))'s %q<msg>}},1,{@attach %!/DO`ANNOUNCE=%0,{ansi(h,name(%0))'s [u(setr,msg,'[ansi(h,u(capnames,%q<find>))]' Style was set to: [ansi(h,%q<entry>)].)]},{Your %q<msg>},{ansi(h,name(%0))'s %q<msg>}} - -&DO`VAL`STYLES [u(cobj,data)]=@check strlen(%1)=@attach %!/INC`MSG=ERROR: No Style name entered.;@attach u(ccs)/INC`PARTIAL=%1,u([u(cobj,data)]/FUN`GET`STYLES),|,EDITCHAR,find,style;@select/inline t(strlen(u(setr,entry,%2)))=1,{@check u(valnum,%2)=@attach %!/INC`MSG=ERROR: Styles must be positive integers.} -&DO`SET`STYLES [u(cobj,data)]=@attach [u(cobj,data)]/DO`VAL`STYLES;@select/inline strlen(%q<entry>)=0,{th u(delstat,%0/D`STYLES,ucstr(%q<find>))},{th u(setstat,%0/D`STYLES,ucstr(%q<find>),%q<entry>)} - -&INC`SET`CRAFTS [u(cobj,data)]=@attach [u(cobj,data)]/DO`SET`CRAFTS=%0,elements(%1,2,|),%2;@select/inline t(strlen(%q<entry>))=0,{@attach %!/DO`ANNOUNCE=%0,{ansi(h,name(%0))'s [u(setr,msg,'[ansi(h,u(capnames,%q<find>))]' Craft was cleared.)]},{Your %q<msg>},{ansi(h,name(%0))'s %q<msg>}},1,{@attach %!/DO`ANNOUNCE=%0,{ansi(h,name(%0))'s [u(setr,msg,'[ansi(h,u(capnames,%q<find>))]' Craft was set to: [ansi(h,%q<entry>)].)]},{Your %q<msg>},{ansi(h,name(%0))'s %q<msg>}} - -&DO`VAL`CRAFTS [u(cobj,data)]=@check strlen(%1)=@attach %!/INC`MSG=ERROR: No Craft name entered.;@attach u(ccs)/INC`PARTIAL=%1,u([u(cobj,data)]/FUN`GET`CRAFTS),|,EDITCHAR,find,Craft;@select/inline t(strlen(u(setr,entry,%2)))=1,{@check u(valnum,%2)=@attach %!/INC`MSG=ERROR: Crafts must be positive integers.} -&DO`SET`CRAFTS [u(cobj,data)]=@attach [u(cobj,data)]/DO`VAL`CRAFTS;@select/inline strlen(%q<entry>)=0,{th u(delstat,%0/D`CRAFTS,ucstr(%q<find>))},{th u(setstat,%0/D`CRAFTS,ucstr(%q<find>),%q<entry>)} - -&FUN`RET`CRAFTS [u(cobj,data)]=iter(ucstr(get(%0/D`CRAFTS)),before(%i0,~),|,|) - -&FUN`GET`CRAFTS [u(cobj,data)]=v(VAL`CRAFTS) -&VAL`CRAFTS [u(cobj,data)]=ARTIFACTS|GEOMANCY|FIRST AGE ARTIFICE - -@@ Specialties - -&INC`SET`SPECIALTY [u(cobj,data)]=@attach [u(cobj,data)]/Do`SET`SPECIALTY=%0,elements(%1,2,|),%2;@select/inline t(%q<entry>)=1,{@attach %!/DO`ANNOUNCE=%0,{u(setr,msg,ansi(h,name(%0)) now has the [u(setr,have,ansi(h,u(capnames,%q<find>/%q<spec>)) Specialty at [ansi(h,%q<entry>)])] )},{You now have the %q<have>},{%q<msg>}},0,{@attach %!/DO`ANNOUNCE=%0,{u(setr,msg,ansi(h,name(%0)) has lost the [u(setr,have,ansi(h,u(capnames,%q<find>/%q<spec>)) Specialty)] )},{You have lost the %q<have>},{%q<msg>}} - -&DO`VAL`SPECIALTY [u(cobj,data)]=@check strlen(u(setr,enstat,before(%1,/)))=@attach %!/INC`MSG=ERROR: No stat entered to specialize in.;@attach u(ccs)/INC`PARTIAL=%q<enstat>,setunion(setunion(u([u(cobj,data)]/FUN`GET`ABILITIES),MARTIAL ARTS,|,i,|),u([u(cobj,data)]/FUN`GET`ATTRIBUTES),|,i,|),|,EDITCHAR,find,stat;@check strlen(u(setr,spec,after(%1,/)))=@attach %!/INC`MSG=ERROR: No Specialty name entered.;@select/inline t(strlen(u(setr,entry,%2)))=1,{@check u(valnum,%q<entry>)=@attach %!/INC`MSG=ERROR: Specialty values must be integers.} -&DO`SET`SPECIALTY [u(cobj,data)]=@attach [u(cobj,data)]/DO`VAL`SPECIALTY;@select/inline t(%q<entry>)=0,{th u(delstat,%0/D`SPECIALTIES,ucstr(%q<find>/%q<spec>))},1,{th u(setstat,%0/D`SPECIALTIES,ucstr(%q<find>/%q<spec>),%q<entry>)} - -&FUN`RET`SPECIALTIES [u(cobj,data)]=iter(ucstr(get(%0/D`SPECIALTIES)),before(%i0,~),|,|) - -@@ Merits and Flaws - - -&VAR`MERITS [u(cobj,data)]=ALLIES|AMBIDEXTROUS|ARTIFACT|BACKING|BOUNDLESS ENDURANCE|COMMAND|CONTACTS|CULT|DANGER SENSE|DEMESNE|DIRECTION SENSE|EIDETIC MEMORY|FAMILIAR|FAST REFLEXES|FLEET OF FOOT|FOLLOWERS|GIANT|HEARTHSTONE|HIDEOUS|INFLUENCE|IRON STOMACH|LANGUAGE|MANSE|MENTOR|MARTIAL ARTIST|MIGHTY THEW|NATURAL IMMUNITY|PAIN TOLERANCE|QUICK DRAW|RETAINERS|RESOURCES|RESOURCES|SELECTIVE CONTRACEPTION|STRONG LUNGS|TEMPERED BY THE ELEMENTS|TOXIN RESISTANCE|CHAMELEON|CLAWS|FANGS|HOOVES|HORNS|ENHANCED SENSE|EXALTED HEALING|EXTRA LIMBS|GILLS|POISONED BODY|QUILLS|SUBTLETY|TAIL|THAUMATURGIST|UNUSUAL HIDE|VENOMOUS|WALL WALKING|WINGS -&VAR`FLAWS [u(cobj,data)]=ADDICTION|AMPUTEE|BLIND|DEAF|DERANGEMENT|MUTE|STERILE|WYLD MUTANT - -@@ Native Charms - -&GFN`CHARMTYPE [u(cobj,data)]=reswitchi(u(getsphere,%0),^(SOLAR|LUNAR|ABYSSAL|ALCHEMICAL|INFERNAL|TERRESTIAL|RAKSHA|SIDEREAL|GHOST|SPIRIT|MORTAL|JADEBORN)$,u(getsphere,%0),^(GOD-BLOODED)$,reswitchi(u(getstat,%0/D`INFO,Caste),^(Divine)$,Spirit,^(Demon)$,Spirit,^(Fae)$,Raksha,^(SOLAR|LUNAR|ABYSSAL|INFERNAL|SIDEREAL)$,u(getstat,%0/D`INFO,Caste),Mortal),MORTAL) - -&INC`ADD`CHARM [u(cobj,data)]=@attach [u(cobj,data)]/DO`ADD`CHARM=%0,charmtype(%0)/[elements(%1,2,|)],%2;@attach [u(cobj,data)]/INC`ADD`CHARM`REPORT -&INC`REM`CHARM [u(cobj,data)]=@attach [u(cobj,data)]/DO`REM`CHARM=%0,charmtype(%0)/[elements(%1,2,|)],%2;@attach [u(cobj,data)]/INC`REM`CHARM`REPORT - -&INC`ADD`CHARM`REPORT [u(cobj,data)]=@attach %!/DO`ANNOUNCE=%0,{u(setr,msg,ansi(h,name(%0)) now has the [u(setr,have,ansi(h,u(capnames,%q<find> %q<find2>)) Charms [itemize(iter(%q<entry>,ansi(h,u(capnames,%i0)),|,|),|,and,\,)])])},{You now have the %q<have>},{%q<msg>} -&INC`REM`CHARM`REPORT [u(cobj,data)]=@attach %!/DO`ANNOUNCE=%0,{u(setr,msg,ansi(h,name(%0)) no longer have the [u(setr,have,ansi(h,u(capnames,%q<find> %q<find2>)) Charms: [itemize(iter(%q<entry>,ansi(h,u(capnames,%i0)),|,|),|,and,\,)])])},{You no longer have the %q<have>},{%q<msg>} - -&INC`ADD`OCHARM [u(cobj,data)]=@attach [u(cobj,data)]/DO`ADD`CHARM=%0,elements(%1,2,|)/[elements(%1,3,|)],%2;@attach [u(cobj,data)]/INC`ADD`CHARM`REPORT -&INC`REM`OCHARM [u(cobj,data)]=@attach [u(cobj,data)]/DO`REM`CHARM=%0,elements(%1,2,|)/[elements(%1,3,|)],%2;@attach [u(cobj,data)]/INC`REM`CHARM`REPORT - -&DO`VAL`CHARM [u(cobj,data)]=@check strlen(before(%1,/))=@attach %!/INC`MSG=ERROR: No Charmtype entered.;@attach u(ccs)/INC`PARTIAL=before(%1,/),u([u(cobj,data)]/FUN`GET`CHARMTYPES),|,v(VAR`MSGHEAD),find,charmtype;@check strlen(after(%1,/))=@attach %!/INC`MSG=ERROR: No Charm Category entered.;@attach u(ccs)/INC`PARTIAL=after(%1,/),u([u(cobj,data)]/FUN`GET`CHARMTYPES`%q<find>),|,v(VAR`MSGHEAD),find2,Charm Category;@check strlen(%2)=@attach %!/INC`MSG=ERROR: No Charms entered.;@check strlen(u(setr,entry,filterbool(#lambda/strlen(\%0),%2,|,|)))=@attach %!/INC`MSG=ERROR: Charm entries invalid. -&DO`ADD`CHARM [u(cobj,data)]=@attach [u(cobj,data)]/DO`VAL`CHARM;@stop words(u(setr,conflict,setinter(u(setr,oldcharms,ucstr(get(%0/D`CHARMS`%q<find>`%q<find2>))),ucstr(%q<entry>),|,i,|)),|)=@attach %!/INC`MSG=[switch(%0,%#,You already have,name(%0) already has)] [ansi(h,u(capnames,%q<find> %q<find2>))] Charms [itemize(u(capnames,%q<conflict>),|,and,\,)].;&D`CHARMS`%q<find>`%q<find2> %0=u(setr,newcharms,setunion(%q<oldcharms>,ucstr(%q<entry>),|,i,|)) -&DO`REM`CHARM [u(cobj,data)]=@attach [u(cobj,data)]/DO`VAL`CHARM;@stop words(u(setr,conflict,setdiff(ucstr(%q<entry>),u(setr,oldcharms,ucstr(get(%0/D`CHARMS`%q<find>`%q<find2>))),|,i,|)),|)=@attach %!/INC`MSG=[switch(%0,%#,You don't have have,name(%0) doesn't have)] [ansi(h,u(capnames,%q<find> %q<find2>))] Charms [itemize(u(capnames,%q<conflict>),|,and,\,)].;&D`CHARMS`%q<find>`%q<find2> %0=u(setr,newcharms,setdiff(get(%0/D`CHARMS`%q<find>`%q<find2>),ucstr(%q<entry>),|,i,|));@select/inline strlen(%q<newcharms>)=0,{@wipe %0/D`CHARMS`%q<find>`%q<find2>} - -&FUN`GET`CHARMTYPES [u(cobj,data)]=SOLAR|ABYSSAL|TERRESTRIAL|LUNAR|SIDEREAL|INFERNAL|SPIRIT - -&FUN`GET`CHARMTYPES`SOLAR [u(cobj,data)]=u(FUN`GET`ABILITIES) -&FUN`GET`CHARMTYPES`ABYSSAL [u(cobj,data)]=u(FUN`GET`ABILITIES) -&FUN`GET`CHARMTYPES`TERRESTRIAL [u(cobj,data)]=u(FUN`GET`ABILITIES) -&FUN`GET`CHARMTYPES`LUNAR [u(cobj,data)]=u(FUN`GET`ATTRIBUTES) -&FUN`GET`CHARMTYPES`SIDEREAL [u(cobj,data)]=u(FUN`GET`ABILITIES) -&FUN`GET`CHARMTYPES`INFERNAL [u(cobj,data)]=u(FUN`GET`ABILITIES) -&FUN`GET`CHARMTYPES`SPIRIT [u(cobj,data)]=UNIVERSAL - -@@ &VAR`CHARMS`ALCHEMICAL [u(cobj,data)]=COMBAT|SURVIVAL|SPEED_AND_MOBILITY|SOCIAL|STEALTH_AND_DISGUISE|ANALYTIC_AND_COGNITIVE|LABOR_AND_UTILITY|SUBMODULES|GENERAL|MASS_COMBAT|SPIRITUAL -@@ &VAR`CHARMS`RAKSHA [u(cobj,data)]=MASK|HEART|CUP|RING|STAFF|SWORD|WAY -@@ &VAR`CHARMS`SPIRIT [u(cobj,data)]=GENERAL|UNIVERSAL|AEGIS|BLESSINGS|CURSES|DIVINATIONS|DIVINE_WORKS|EDGES|EIDOLA|ENCHANTMENTS|INHABITINGS|RELOCATIONS|SENDINGS|TANTRA -@@ &VAR`CHARMS`MORTAL [u(cobj,data)]=UNIVERSAL -@@ &VAR`CHARMS`GHOST [u(cobj,data)]=UNIVERSAL -@@ &VAR`CHARMS`JADEBORN [u(cobj,data)]=FOUNDATION|WORKER|WARRIOR|ARTISAN|ENLIGHTENED|CHAOS - -@@ Martial Arts Charms - -&INC`ADD`MACHARM [u(cobj,data)]=@attach [u(cobj,data)]/DO`ADD`MACHARM;@attach %!/DO`ANNOUNCE=%0,{[ansi(h,name(%0))] [u(setr,have,gained [ansi(h,u([u(cobj,data)]/FUN`GET`STYLENAME,%0,%q<slot>))] Charms: [itemize(iter(%q<entry>,ansi(h,u(capnames,%i0)),|,|),|,and,\,)])]},{You %q<have>},{ansi(h,name(%0)) gained %q<have>} - -&INC`REM`MACHARM [u(cobj,data)]=@attach [u(cobj,data)]/DO`REM`MACHARM;@attach %!/DO`ANNOUNCE=%0,{[ansi(h,name(%0))] [u(setr,have,lost [ansi(h,u([u(cobj,data)]/FUN`GET`STYLENAME,%0,%q<slot>))] Charms: [itemize(iter(%q<entry>,ansi(h,u(capnames,%i0)),|,|),|,and,\,)])]},{You %q<have>},{ansi(h,name(%0)) lost %q<have>} - -&DO`VAL`MACHARM [u(cobj,data)]=@check strlen(%1)=@attach %!/INC`MSG=ERROR: No Style entered.;@check words(u(setr,styles,u([u(cobj,data)]/FUN`RET`STYLES,%0)),|)=@attach %!/INC`MSG=ERROR: [switch(%0,%#,You don't,name(%0) doesn't)] know any styles.;@attach u(ccs)/INC`PARTIAL=%1,%q<styles>,|,v(VAR`MSGHEAD),style,style;th u(setq,slot,strfirstof(elements(first(wildgrepi(%0,D`CHARMS`MACHARMS`*`NAME,%q<style>)),4,`,`),nextslot(%0,D`CHARMS`MACHARMS)));@check strlen(%2)=@attach %!/INC`MSG=ERROR: No Charms entered.;@check strlen(u(setr,entry,filterbool(#lambda/strlen(\%0),%2,|,|)))=@attach %!/INC`MSG=ERROR: Charm entries invalid. - -&DO`ADD`MACHARM [u(cobj,data)]=@attach [u(cobj,data)]/DO`VAL`MACHARM;@stop words(u(setr,conflict,setinter(u(setr,oldcharms,ucstr(get(%0/D`CHARMS`MACHARMS`%q<slot>))),ucstr(%q<entry>),|,i,|)),|)=@attach %!/INC`MSG=[switch(%0,%#,You already have,name(%0) already has)] [u([u(cobj,data)]/FUN`RET`STYLENAME,%0,%q<slot>)] Charms [itemize(u(capnames,%q<conflict>),|,and,\,)].;&D`CHARMS`MACHARMS`%q<slot> %0=u(setr,newcharms,setunion(%q<oldcharms>,ucstr(%q<entry>),|,i,|));&D`CHARMS`MACHARMS`%q<slot>`NAME %0=ucstr(%q<style>) - -&DO`REM`MACHARM [u(cobj,data)]=@attach [u(cobj,data)]/DO`VAL`MACHARM;@stop words(u(setr,conflict,setdiff(ucstr(%q<entry>),u(setr,oldcharms,ucstr(get(%0/D`CHARMS`MACHARMS`%q<slot>))),|,i,|)),|)=@attach %!/INC`MSG=[switch(%0,%#,You don't have have,name(%0) doesn't have)] [u([u(cobj,data)]/FUN`RET`STYLENAME,%0,%q<slot>)] Charms [itemize(u(capnames,%q<conflict>),|,and,\,)].;&D`CHARMS`MACHARMS`%q<slot> %0=u(setr,newcharms,setdiff(get(%0/D`CHARMS`MACHARMS`%q<slot>),ucstr(%q<entry>),|,i,|));@select/inline strlen(%q<newcharms>)=0,{@wipe %0/D`CHARMS`MACHARMS`%q<slot>} - -&FUN`GET`STYLES [u(cobj,data)]=setdiff(v(VAR`STYLES),v(VAR`STYLES`BANNED),|,i,|) - -&VAR`STYLES [u(cobj,data)]=SNAKE STYLE|TIGER STYLE|SINGLE POINT SHINING INTO THE VOID STYLE|WHITE REAPER STYLE|EBON SHADOW STYLE|CRANE STYLE|SILVER-VOICED NIGHTINGALE STYLE|RIGHTEOUS DEVIL STYLE|BLACK CLAW STYLE|DREAMING PEARL COURTESAN STYLE|STEEL DEVIL STYLE -&VAR`STYLES`BANNED [u(cobj,data)]= - -&FUN`RET`STYLES [u(cobj,data)]=iter(ucstr(get(%0/D`STYLES)),before(%i0,~),|,|) -&FUN`RET`STYLENAME [u(cobj,data)]=u(capnames,default(%0/D`CHARMS`MACHARMS`%1`NAME,Unnamed Style)) - -@@ Evocations -&INC`ADD`EVOCATION [u(cobj,data)]=@attach [u(cobj,data)]/DO`ADD`EVOCATION=%0,elements(%1,2,|),%2;@attach %!/DO`ANNOUNCE=%0,{[ansi(h,name(%0))] [u(setr,have,gained [ansi(h,u([u(cobj,data)]/FUN`RET`EVOCNAME,%0,%q<slot>))] Evocations: [itemize(iter(%q<entry>,ansi(h,u(capnames,%i0)),|,|),|,and,\,)])]},{You %q<have>},{ansi(h,name(%0)) gained %q<have>} - -&INC`REM`EVOCATION [u(cobj,data)]=@attach [u(cobj,data)]/DO`REM`EVOCATION=%0,elements(%1,2,|),%2;@attach %!/DO`ANNOUNCE=%0,{[ansi(h,name(%0))] [u(setr,have,lost [ansi(h,u([u(cobj,data)]/FUN`RET`EVOCNAME,%0,%q<slot>))] Evocations: [itemize(iter(%q<entry>,ansi(h,u(capnames,%i0)),|,|),|,and,\,)])]},{You %q<have>},{ansi(h,name(%0)) lost %q<have>} - -&DO`VAL`EVOCATION [u(cobj,data)]=@check strlen(u(setr,style,%1))=@attach %!/INC`MSG=ERROR: No Style entered.;th u(setq,slot,strfirstof(elements(first(wildgrepi(%0,D`CHARMS`EVOCATIONS`*`NAME,%q<style>)),4,`,`),nextslot(%0,D`CHARMS`EVOCATIONS)));@check strlen(%2)=@attach %!/INC`MSG=ERROR: No Charms entered.;@check strlen(u(setr,entry,filterbool(#lambda/strlen(\%0),%2,|,|)))=@attach %!/INC`MSG=ERROR: Charm entries invalid. - -&DO`ADD`EVOCATION [u(cobj,data)]=@attach [u(cobj,data)]/DO`VAL`EVOCATION;@stop words(u(setr,conflict,setinter(u(setr,oldcharms,ucstr(get(%0/D`CHARMS`EVOCATIONS`%q<slot>))),ucstr(%q<entry>),|,i,|)),|)=@attach %!/INC`MSG=[switch(%0,%#,You already have,name(%0) already has)] [u([u(cobj,data)]/FUN`RET`EVOCATIONS,%0,%q<slot>)] Charms [itemize(u(capnames,%q<conflict>),|,and,\,)].;&D`CHARMS`EVOCATIONS`%q<slot> %0=u(setr,newcharms,setunion(%q<oldcharms>,ucstr(%q<entry>),|,i,|));&D`CHARMS`EVOCATIONS`%q<slot>`NAME %0=ucstr(%q<style>) - -&DO`REM`EVOCATION [u(cobj,data)]=@attach [u(cobj,data)]/DO`VAL`EVOCATION;@stop words(u(setr,conflict,setdiff(ucstr(%q<entry>),u(setr,oldcharms,ucstr(get(%0/D`CHARMS`EVOCATIONS`%q<slot>))),|,i,|)),|)=@attach %!/INC`MSG=[switch(%0,%#,You don't have have,name(%0) doesn't have)] [u([u(cobj,data)]/FUN`RET`EVOCNAME,%0,%q<slot>)] Charms [itemize(u(capnames,%q<conflict>),|,and,\,)].;&D`CHARMS`EVOCATIONS`%q<slot> %0=u(setr,newcharms,setdiff(get(%0/D`CHARMS`EVOCATIONS`%q<slot>),ucstr(%q<entry>),|,i,|));@select/inline strlen(%q<newcharms>)=0,{@wipe %0/D`CHARMS`EVOCATIONS`%q<slot>} - -&FUN`RET`EVOCNAME [u(cobj,data)]=u(capnames,default(%0/D`CHARMS`EVOCATIONS`%1`NAME,Unnamed Artifact)) - -@@ Health - -&INC`ADD`HEALTH [u(cobj,data)]=@attach [u(cobj,data)]/DO`ADD`HEALTH;th u(setq,have,additional Health Levels: [sortby([u(cobj,data)]/FUN`HEALTHSORT,ucstr(%2))]);@attach %!/DO`ANNOUNCE=%0,{ansi(h,name(%0)) has gained %q<have>},{You have gained %q<have>},{[ansi(h,name(%0))] has gained %q<have>} - -&INC`REM`HEALTH [u(cobj,data)]=@attach [u(cobj,data)]/DO`REM`HEALTH;th u(setq,have,Health Levels: [sortby([u(cobj,data)]/FUN`HEALTHSORT,ucstr(%2))]);@attach %!/DO`ANNOUNCE=%0,{ansi(h,name(%0)) has lost %q<have>},{You have lost %q<have>},{[ansi(h,name(%0))] has lost %q<have>} - -&DO`VAL`HEALTH [u(cobj,data)]=@check strlen(%2)=@attach %!/INC`MSG=ERROR: Health levels field empty.;@check lmath(min,iter(ucstr(%2),or(isnum(%i0),regmatchi(%i0,^(I|D)$))))=@attach %!/INC`MSG=ERROR: %q<newhealth> contains an invalid value. Health values must be a negative number, I, or D. -&DO`ADD`HEALTH [u(cobj,data)]=@attach [u(cobj,data)]/DO`VAL`HEALTH;&D`HEALTH %0=sortby([u(cobj,data)]/FUN`HEALTHSORT,cat(get(%0/D`HEALTH),ucstr(%2))) -&DO`REM`HEALTh [u(cobj,data)]=@attach [u(cobj,data)]/DO`VAL`HEALTH;&D`HEALTH %0=sortby([u(cobj,data)]/FUN`HEALTHSORT,remove(get(%0/D`HEALTH),ucstr(%2))) - -&FUN`HEALTHSORT [u(cobj,data)]=comp(u(FUN`HEALTHSORT`GET,%0),u(FUN`HEALTHSORT`GET,%1),N) - -&FUN`HEALTHSORT`GET [u(cobj,data)]=switch(%0,-0,1,-1,2,-2,3,-4,4,I,5,D,6) - -@@ Spells - -&INC`ADD`SPELL [u(cobj,data)]=@attach [u(cobj,data)]/DO`ADD`SPELL=%0,elements(%1,2,|),%2;@attach %!/DO`ANNOUNCE=%0,{u(setr,msg,ansi(h,name(%0)) now has the [u(setr,have,ansi(h,u(capnames,%q<find>)) Spells [itemize(iter(%q<entry>,ansi(h,u(capnames,%i0)),|,|),|,and,\,)])])},{You now have the %q<have>},{%q<msg>} -&INC`REM`SPELL [u(cobj,data)]=@attach [u(cobj,data)]/DO`REM`SPELL=%0,elements(%1,2,|),%2;@attach %!/DO`ANNOUNCE=%0,{u(setr,msg,ansi(h,name(%0)) no longer have the [u(setr,have,ansi(h,u(capnames,%q<find>)) Spells: [itemize(iter(%q<entry>,ansi(h,u(capnames,%i0)),|,|),|,and,\,)])])},{You no longer have the %q<have>},{%q<msg>} - -&DO`VAL`SPELL [u(cobj,data)]=@check strlen(%1)=@attach %!/INC`MSG=ERROR: No Spell Category entered.;@attach u(ccs)/INC`PARTIAL=%1,u([u(cobj,data)]/FUN`GET`SPELLS),|,v(VAR`MSGHEAD),find,Spell Category;@check strlen(%2)=@attach %!/INC`MSG=ERROR: No Spells entered.;@check strlen(u(setr,entry,filterbool(#lambda/strlen(\%0),%2,|,|)))=@attach %!/INC`MSG=ERROR: Spell entries invalid. - -&DO`ADD`SPELL [u(cobj,data)]=@attach [u(cobj,data)]/DO`VAL`SPELL;@stop words(u(setr,conflict,setinter(u(setr,oldcharms,ucstr(get(%0/D`SPELLS`%q<find>))),ucstr(%q<entry>),|,i,|)),|)=@attach %!/INC`MSG=[switch(%0,%#,You already have,name(%0) already has)] [ansi(h,u(capnames,%q<find>))] Spells [itemize(u(capnames,%q<conflict>),|,and,\,)].;&D`SPELLS`%q<find> %0=u(setr,newcharms,setunion(%q<oldcharms>,ucstr(%q<entry>),|,i,|)) -&DO`REM`SPELL [u(cobj,data)]=@attach [u(cobj,data)]/DO`VAL`SPELL;@stop words(u(setr,conflict,setdiff(ucstr(%q<entry>),u(setr,oldcharms,ucstr(get(%0/D`SPELLS`%q<find>))),|,i,|)),|)=@attach %!/INC`MSG=[switch(%0,%#,You don't have have,name(%0) doesn't have)] [ansi(h,u(capnames,%q<find>))] Spells [itemize(u(capnames,%q<conflict>),|,and,\,)].;&D`SPELLS`%q<find> %0=u(setr,newcharms,setdiff(get(%0/D`SPELLS`%q<find>),ucstr(%q<entry>),|,i,|));@select/inline strlen(%q<newcharms>)=0,{@wipe %0/D`SPELLS`%q<find>} - -&FUN`GET`SPELLS [u(cobj,data)]=setdiff(v(VAR`SPELLS),v(VAR`SPELLS`BANNED),|,i,|) - -&VAR`SPELLS [u(cobj,data)]=TERRESTRIAL|CELESTIAL|SOLAR|SHADOWLANDS|LABYRINTH|VOID -&VAR`SPELLS`BANNED [u(cobj,data)]= - -@@ Favored - -&INC`ADD`FAVORED [u(cobj,data)]=@attach [u(cobj,data)]/DO`ADD`FAVORED=%0,elements(%1,2,|),%2;@attach %!/DO`ANNOUNCE=%0,{u(setr,msg,ansi(h,name(%0)) now [u(setr,have,[ansi(h,u(capnames,%q<find>))] Favors: [itemize(iter(%q<entry>,ansi(h,u(capnames,%i0)),|,|),|,and,\,)])])},{You now %q<have>},{%q<msg>} -&INC`REM`FAVORED [u(cobj,data)]=@attach [u(cobj,data)]/DO`REM`FAVORED=%0,elements(%1,2,|),%2;@attach %!/DO`ANNOUNCE=%0,{u(setr,msg,ansi(h,name(%0)) no longer [u(setr,have,[ansi(h,u(capnames,%q<find>))] Favor: [itemize(iter(%q<entry>,ansi(h,u(capnames,%i0)),|,|),|,and,\,)])])},{You no longer %q<have>},{%q<msg>} - -&DO`VAL`FAVORED [u(cobj,data)]=@check strlen(before(%1,/))=@attach %!/INC`MSG=ERROR: No Favored Type entered.;@attach u(ccs)/INC`PARTIAL=before(%1,/),u([u(cobj,data)]/FUN`GET`FAVORED),|,v(VAR`MSGHEAD),find,Favored Type;@check strlen(%2)=@attach %!/INC`MSG=ERROR: No [u(capnames,%q<find>)] entered.;th u(setq,find2,u([u(cobj,data)]/FUN`GET`FAVORED`%q<find>));th u(setq,entry,iter(ucstr(%2),grab(%q<find2>,if(strlen(%i0),%i0*),|),|,|));@check lmath(min,iter(%q<entry>,strlen(%i0),|,%b))=@attach %!/INC`MSG=ERROR: One or more [u(capnames,%q<find>)] didn't resolve. Please check your entry. - -&DO`ADD`FAVORED [u(cobj,data)]=@attach [u(cobj,data)]/DO`VAL`FAVORED;@stop words(u(setr,conflict,setinter(u(setr,oldcharms,ucstr(get(%0/D`FAVORED`%q<find>))),ucstr(%q<entry>),|,i,|)),|)=@attach %!/INC`MSG=[switch(%0,%#,You already have,name(%0) already has)] the [itemize(u(capnames,%q<conflict>),|,and,\,)] [ansi(h,u(capnames,%q<find>))] Favored.;&D`FAVORED`%q<find> %0=u(setr,newcharms,setunion(%q<oldcharms>,ucstr(%q<entry>),|,i,|)) -&DO`REM`FAVORED [u(cobj,data)]=@attach [u(cobj,data)]/DO`VAL`FAVORED;@stop words(u(setr,conflict,setdiff(ucstr(%q<entry>),u(setr,oldcharms,ucstr(get(%0/D`FAVORED`%q<find>))),|,i,|)),|)=@attach %!/INC`MSG=[switch(%0,%#,You don't have have,name(%0) doesn't have)] the [itemize(u(capnames,%q<conflict>),|,and,\,)] [ansi(h,u(capnames,%q<find>))] Favored.;&D`FAVORED`%q<find> %0=u(setr,newcharms,setdiff(get(%0/D`FAVORED`%q<find>),ucstr(%q<entry>),|,i,|));@select/inline strlen(%q<newcharms>)=0,{@wipe %0/D`FAVORED`%q<find>} - -&FUN`GET`FAVORED [u(cobj,data)]=ATTRIBUTES|ABILITIES -&FUN`GET`FAVORED`ATTRIBUTES [u(cobj,data)]=u(FUN`GET`ATTRIBUTES) -&FUN`GET`FAVORED`ABILITIES [u(cobj,data)]=u(FUN`GET`ABILITIES) - -@@ Supernal - -&INC`ADD`SUPERNAL [u(cobj,data)]=@attach [u(cobj,data)]/DO`ADD`SUPERNAL=%0,elements(%1,2,|),%2;@attach %!/DO`ANNOUNCE=%0,{u(setr,msg,ansi(h,name(%0)) now [u(setr,have,[ansi(h,u(capnames,%q<find>))] Supernals: [itemize(iter(%q<entry>,ansi(h,u(capnames,%i0)),|,|),|,and,\,)])])},{You now %q<have>},{%q<msg>} -&INC`REM`SUPERNAL [u(cobj,data)]=@attach [u(cobj,data)]/DO`REM`SUPERNAL=%0,elements(%1,2,|),%2;@attach %!/DO`ANNOUNCE=%0,{u(setr,msg,ansi(h,name(%0)) no longer [u(setr,have,[ansi(h,u(capnames,%q<find>))] Supernals: [itemize(iter(%q<entry>,ansi(h,u(capnames,%i0)),|,|),|,and,\,)])])},{You no longer %q<have>},{%q<msg>} - -&DO`VAL`SUPERNAL [u(cobj,data)]=@check strlen(before(%1,/))=@attach %!/INC`MSG=ERROR: No Favored Type entered.;@attach u(ccs)/INC`PARTIAL=before(%1,/),u([u(cobj,data)]/FUN`GET`SUPERNAL),|,v(VAR`MSGHEAD),find,Favored Type;@check strlen(%2)=@attach %!/INC`MSG=ERROR: No [u(capnames,%q<find>)] entered.;th u(setq,find2,u([u(cobj,data)]/FUN`GET`SUPERNAL`%q<find>));th u(setq,entry,iter(ucstr(%2),grab(%q<find2>,if(strlen(%i0),%i0*),|),|,|));@check lmath(min,iter(%q<entry>,strlen(%i0),|,%b))=@attach %!/INC`MSG=ERROR: One or more [u(capnames,%q<find>)] didn't resolve. Please check your entry. - -&DO`ADD`SUPERNAL [u(cobj,data)]=@attach [u(cobj,data)]/DO`VAL`SUPERNAL;@stop words(u(setr,conflict,setinter(u(setr,oldcharms,ucstr(get(%0/D`SUPERNAL`%q<find>))),ucstr(%q<entry>),|,i,|)),|)=@attach %!/INC`MSG=[switch(%0,%#,You already have,name(%0) already has)] the [itemize(u(capnames,%q<conflict>),|,and,\,)] [ansi(h,u(capnames,%q<find>))] as Supernal.;&D`SUPERNAL`%q<find> %0=u(setr,newcharms,setunion(%q<oldcharms>,ucstr(%q<entry>),|,i,|)) -&DO`REM`SUPERNAL [u(cobj,data)]=@attach [u(cobj,data)]/DO`VAL`SUPERNAL;@stop words(u(setr,conflict,setdiff(ucstr(%q<entry>),u(setr,oldcharms,ucstr(get(%0/D`SUPERNAL`%q<find>))),|,i,|)),|)=@attach %!/INC`MSG=[switch(%0,%#,You don't have have,name(%0) doesn't have)] the [itemize(u(capnames,%q<conflict>),|,and,\,)] [ansi(h,u(capnames,%q<find>))] as Supernal.;&D`SUPERNAL`%q<find> %0=u(setr,newcharms,setdiff(get(%0/D`SUPERNAL`%q<find>),ucstr(%q<entry>),|,i,|));@select/inline strlen(%q<newcharms>)=0,{@wipe %0/D`SUPERNAL`%q<find>} - -&FUN`GET`SUPERNAL [u(cobj,data)]=ATTRIBUTES|ABILITIES -&FUN`GET`SUPERNAL`ATTRIBUTES [u(cobj,data)]=u(FUN`GET`ATTRIBUTES) -&FUN`GET`SUPERNAL`ABILITIES [u(cobj,data)]=setunion(u(FUN`GET`ABILITIES),MARTIAL ARTS,|,i,|) - -+shelp/addmain Characters/+editchar=+editchar is used to modify all parts of a character's +sheet!%R%R[ansi(h,+editchar/<flag> <player>|<categories|and|objects>\[=<modification>\])]%r%r[ansi(h,FLAG: SET)]%r[ansi(h,Splat)]%t%t=<splat>%r[ansi(h,Caste)]%T%T=<caste>%R[ansi(h,Essence)]%t%t=<value>%R[ansi(h,Willpower)]%t=<value>%R[ansi(h,Attribute)]%t<attribute>=<value>%r[ansi(h,Ability)]%t%t<ability>=<value>%r[ansi(h,Specialty)]%t<ability or attribute>/<specialty>=<value>%R[ansi(h,Style)]%t%t<style>=<value>%r[ansi(h,Craft)]%t%t<field>=<value> (Weaponsmithing, etc)%r%r[ansi(h,FLAG: ADD & REM)]%r[ansi(h,Charm)]%t%t<category>=<charm1>|<charm2>|etc (Native Charms)%r[ansi(h,MACharm)]%t%t<style>=<charm1>|<charm2>|etc (Martial Arts Charms)%r[ansi(h,Evocation)]%t<artifact>=<charm1>|<charm2>|etc (Evocations)%r[ansi(h,OCharm)]%t%t<splat>|<category>=<charm1>|<charm2>|etc (Cross-Splat Charms)%r[ansi(h,Spell)]%t%t<circle>=<spell1>|<spell2>|etc%r[ansi(h,Favored)]%t%t<Attribute/Ability>=<Item1>|<Item2>|etc%r[ansi(h,Supernal)]%t<Attribute/Ability>=<Item1>|<Item2>|etc%r[ansi(h,Health)]%t%t=<level1> <level2> etc (must be -0, -1, D, etc)%r%r[ansi(h,EXAMPLES)]%r%r[ansi(h,+editchar/set Isidoros|Attribute|Dexterity=4)]%r%tSets Isidoros' Dexterity to 4%r[ansi(h,+editchar/rem Isidoros|Health=-0 -1)]%r%tRemoves one -0 and one -1 from Isidoros' permanent Health Pool%R%R[ansi(h,CLEARING VALUES)]%RLeaves Values absolutely clear to remove them entirely! Example:%R+editchar/set Isidoros|Attribute|Dexterity= \ No newline at end of file diff --git a/unfinished/storyteller/exalted3/Pools System Object - EX-PSO.txt b/unfinished/storyteller/exalted3/Pools System Object - EX-PSO.txt index 7689c89..2d0bfae 100644 --- a/unfinished/storyteller/exalted3/Pools System Object - EX-PSO.txt +++ b/unfinished/storyteller/exalted3/Pools System Object - EX-PSO.txt @@ -35,69 +35,69 @@ &FUN`CUR u(ex-pso)=bound(get(%0/D`POOLS`%1`CUR),if(strmatch(v(DAT`%1`TYPE),Track),u(FUN`TOTALCOMMIT,%0,%1),0),if(strmatch(v(DAT`%1`TYPE),Pool),sub(u(FUN`MAX,%0,%1),u(FUN`TOTALCOMMIT,%0,%1)),u(FUN`MAX,%0,%1))) -&FUN`MAX u(ex-pso)=add(u(FUN`MAX`%1,%0),getstat(%0/D`POOLBONUS,%1)) +&FUN`MAX u(ex-pso)=add(u(FUN`MAX`%1,%0),u(getstat,%0,D`POOLBONUS,%1)) -&FUN`MAX`PERSONAL u(ex-pso)=add(u(FUN`MAX`PERSONAL`[getsplat(%0)],%0),mul(getstat(%0/D`POSITIVE_MUTATIONS,Essence Abundance),3)) +&FUN`MAX`PERSONAL u(ex-pso)=add(u(FUN`MAX`PERSONAL`[getsplat(%0)],%0),mul(u(getstat,%0,D`POSITIVE_MUTATIONS,Essence Abundance),3)) &FUN`MAX`PERIPHERAL u(ex-pso)=add(u(FUN`MAX`PERIPHERAL`[getsplat(%0)],%0),0) -&FUN`MAX`LIMIT u(ex-pso)=switch(1,regmatchi(getsplat(%0),^(SOLAR|LUNAR|SIDEREAL|INFERNAL|TERRESTRIAL)$),10,gt(getstat(%0/D`NEGATIVE_MUTATIONS,Great Curse),0),10,0) +&FUN`MAX`LIMIT u(ex-pso)=switch(1,regmatchi(getsplat(%0),^(SOLAR|LUNAR|SIDEREAL|INFERNAL|TERRESTRIAL)$),10,gt(u(getstat,%0,D`NEGATIVE_MUTATIONS,Great Curse),0),10,0) &FUN`MAX`RESONANCE u(ex-pso)=switch(1,regmatchi(getsplat(%0),^(ABYSSAL)$),10,0) &FUN`MAX`CLARITY u(ex-pso)=switch(1,regmatchi(getsplat(%0),^(ALCHEMICAL)$),10,0) -&FUN`MAX`PERSONAL`GOD-BLOODED u(ex-pso)=reswitchi(getstat(%0/D`INFO,Caste),^(Fae)$,mul(getstat(%0/D`INFO,Essence),8),^(Divine|Ghost|Demon)$,add(mul(getstat(%0/D`INFO,Essence),5),mul(u(FUN`MAX`WILLPOWER,%0),2),if(default(VAR`MAXVIRTUES,0),20,lmath(add,iter(get(%0/D`VIRTUES),last(%i0,~),|)))),add(mul(getstat(%0/D`INFO,Essence),4),u(FUN`MAX`WILLPOWER,%0),if(default(VAR`MAXVIRTUES,0),20,lmath(add,iter(get(%0/D`VIRTUES),last(%i0,~),|))))) +&FUN`MAX`PERSONAL`GOD-BLOODED u(ex-pso)=reswitchi(u(getstat,%0,D`INFO,Caste),^(Fae)$,mul(u(getstat,%0,D`INFO,Essence),8),^(Divine|Ghost|Demon)$,add(mul(u(getstat,%0,D`INFO,Essence),5),mul(u(FUN`MAX`WILLPOWER,%0),2),if(default(VAR`MAXVIRTUES,0),20,lmath(add,iter(get(%0/D`VIRTUES),last(%i0,~),|)))),add(mul(u(getstat,%0,D`INFO,Essence),4),u(FUN`MAX`WILLPOWER,%0),if(default(VAR`MAXVIRTUES,0),20,lmath(add,iter(get(%0/D`VIRTUES),last(%i0,~),|))))) -&FUN`MAX`PERSONAL`SOLAR u(ex-pso)=add(mul(3,getstat(%0/D`INFO,Essence)),10) -&FUN`MAX`PERIPHERAL`SOLAR u(ex-pso)=add(mul(7,getstat(%0/D`INFO,Essence)),26) +&FUN`MAX`PERSONAL`SOLAR u(ex-pso)=add(mul(3,u(getstat,%0,D`INFO,Essence)),10) +&FUN`MAX`PERIPHERAL`SOLAR u(ex-pso)=add(mul(7,u(getstat,%0,D`INFO,Essence)),26) -&FUN`MAX`PERSONAL`TERRESTRIAL u(ex-pso)=add(mul(1,getstat(%0/D`INFO,Essence)),11) -&FUN`MAX`PERIPHERAL`TERRESTRIAL u(ex-pso)=add(mul(4,getstat(%0/D`INFO,Essence)),23) +&FUN`MAX`PERSONAL`TERRESTRIAL u(ex-pso)=add(mul(1,u(getstat,%0,D`INFO,Essence)),11) +&FUN`MAX`PERIPHERAL`TERRESTRIAL u(ex-pso)=add(mul(4,u(getstat,%0,D`INFO,Essence)),23) -&FUN`MAX`PERSONAL`LUNAR u(ex-pso)=add(mul(1,getstat(%0/D`INFO,Essence)),15) -&FUN`MAX`PERIPHERAL`LUNAR u(ex-pso)=add(mul(4,getstat(%0/D`INFO,Essence)),34) +&FUN`MAX`PERSONAL`LUNAR u(ex-pso)=add(mul(1,u(getstat,%0,D`INFO,Essence)),15) +&FUN`MAX`PERIPHERAL`LUNAR u(ex-pso)=add(mul(4,u(getstat,%0,D`INFO,Essence)),34) -&FUN`MAX`PERSONAL`SIDEREAL u(ex-pso)=add(mul(2,getstat(%0/D`INFO,Essence)),9) -&FUN`MAX`PERIPHERAL`SIDEREAL u(ex-pso)=add(mul(6,getstat(%0/D`INFO,Essence)),25) +&FUN`MAX`PERSONAL`SIDEREAL u(ex-pso)=add(mul(2,u(getstat,%0,D`INFO,Essence)),9) +&FUN`MAX`PERIPHERAL`SIDEREAL u(ex-pso)=add(mul(6,u(getstat,%0,D`INFO,Essence)),25) &FUN`MAX`PARADOX u(ex-pso)=switch(1,regmatchi(getsplat(%0),^(SIDEREAL)$),10,0) -&FUN`MAX`PERSONAL`ABYSSAL u(ex-pso)=add(mul(3,getstat(%0/D`INFO,Essence)),10) -&FUN`MAX`PERIPHERAL`ABYSSAL u(ex-pso)=add(mul(7,getstat(%0/D`INFO,Essence)),26) +&FUN`MAX`PERSONAL`ABYSSAL u(ex-pso)=add(mul(3,u(getstat,%0,D`INFO,Essence)),10) +&FUN`MAX`PERIPHERAL`ABYSSAL u(ex-pso)=add(mul(7,u(getstat,%0,D`INFO,Essence)),26) -&FUN`MAX`PERSONAL`LIMINAL u(ex-pso)=add(mul(3,getstat(%0/D`INFO,Essence)),10) -&FUN`MAX`PERIPHERAL`LIMINAL u(ex-pso)=add(mul(4,getstat(%0/D`INFO,Essence)),23) +&FUN`MAX`PERSONAL`LIMINAL u(ex-pso)=add(mul(3,u(getstat,%0,D`INFO,Essence)),10) +&FUN`MAX`PERIPHERAL`LIMINAL u(ex-pso)=add(mul(4,u(getstat,%0,D`INFO,Essence)),23) -&FUN`MAX`PERSONAL`ALCHEMICAL u(ex-pso)=add(mul(3,getstat(%0/D`INFO,Essence)),u(FUN`MAX`WILLPOWER,%0)) -&FUN`MAX`PERIPHERAL`ALCHEMICAL u(ex-pso)=add(mul(5,getstat(%0/D`INFO,Essence)),mul(3,u(FUN`MAX`WILLPOWER,%0)),null(SKINMOUNTHERE),mul(2,if(default(VAR`MAXVIRTUES,0),5,lmath(max,iter(get(%0/D`VIRTUES),last(%i0,~),|))))) +&FUN`MAX`PERSONAL`ALCHEMICAL u(ex-pso)=add(mul(3,u(getstat,%0,D`INFO,Essence)),u(FUN`MAX`WILLPOWER,%0)) +&FUN`MAX`PERIPHERAL`ALCHEMICAL u(ex-pso)=add(mul(5,u(getstat,%0,D`INFO,Essence)),mul(3,u(FUN`MAX`WILLPOWER,%0)),null(SKINMOUNTHERE),mul(2,if(default(VAR`MAXVIRTUES,0),5,lmath(max,iter(get(%0/D`VIRTUES),last(%i0,~),|))))) -&FUN`MAX`PERSONAL`DRAGON-KING u(ex-pso)=add(mul(4,getstat(%0/D`INFO,Essence)),null(SKINMOUNTHERE),mul(2,u(FUN`MAX`WILLPOWER,%0)),if(default(VAR`MAXVIRTUES,0),10,add(getstat(%0/D`VIRTUES,Conviction),getstat(%0/D`VIRTUES,Valor)))) +&FUN`MAX`PERSONAL`DRAGON-KING u(ex-pso)=add(mul(4,u(getstat,%0,D`INFO,Essence)),null(SKINMOUNTHERE),mul(2,u(FUN`MAX`WILLPOWER,%0)),if(default(VAR`MAXVIRTUES,0),10,add(u(getstat,%0,D`VIRTUES,Conviction),u(getstat,%0,D`VIRTUES,Valor)))) -&FUN`MAX`PERSONAL`GHOST u(ex-pso)=add(mul(10,getstat(%0/D`INFO,Essence)),mul(3,u(FUN`MAX`WILLPOWER,%0)),null(SKINMOUNTHERE),mul(2,if(default(VAR`MAXVIRTUES,0),20,lmath(add,iter(get(%0/D`VIRTUES),last(%i0,~),|))))) +&FUN`MAX`PERSONAL`GHOST u(ex-pso)=add(mul(10,u(getstat,%0,D`INFO,Essence)),mul(3,u(FUN`MAX`WILLPOWER,%0)),null(SKINMOUNTHERE),mul(2,if(default(VAR`MAXVIRTUES,0),20,lmath(add,iter(get(%0/D`VIRTUES),last(%i0,~),|))))) -&FUN`MAX`PERSONAL`GOD`BLOODED u(ex-pso)=add(reswitchi(getstat(%0/D`INFO,Caste),^(Fae)$,mul(getstat(%0/D`INFO,Essence),8),^(Divine|Demon|Ghost)$,add(mul(5,getstat(%0/D`INFO,Essence)),if(default(VAR`MAXVIRTUES,0),20,lmath(add,iter(get(%0/D`VIRTUES),last(%i0,~),|))),mul(2,u(FUN`MAX`WILLPOWER,%0)))),switch(getstat(%0/D`POSITIVE_MUTATIONS,Essence Abundance),1,3,2,6,4,12,6,16,0)) +&FUN`MAX`PERSONAL`GOD`BLOODED u(ex-pso)=add(reswitchi(u(getstat,%0,D`INFO,Caste),^(Fae)$,mul(u(getstat,%0,D`INFO,Essence),8),^(Divine|Demon|Ghost)$,add(mul(5,u(getstat,%0,D`INFO,Essence)),if(default(VAR`MAXVIRTUES,0),20,lmath(add,iter(get(%0/D`VIRTUES),last(%i0,~),|))),mul(2,u(FUN`MAX`WILLPOWER,%0)))),switch(u(getstat,%0,D`POSITIVE_MUTATIONS,Essence Abundance),1,3,2,6,4,12,6,16,0)) -&FUN`MAX`PERSONAL`HALF`CASTE u(ex-pso)=add(mul(4,getstat(%0/D`INFO,Essence)),u(FUN`MAX`WILLPOWER,%0),if(default(VAR`MAXVIRTUES,0),20,lmath(add,iter(get(%0/D`VIRTUES),last(%i0,~),|))),switch(getstat(%0/D`POSITIVE_MUTATIONS,Essence Abundance),1,3,2,6,4,12,6,16,0)) +&FUN`MAX`PERSONAL`HALF`CASTE u(ex-pso)=add(mul(4,u(getstat,%0,D`INFO,Essence)),u(FUN`MAX`WILLPOWER,%0),if(default(VAR`MAXVIRTUES,0),20,lmath(add,iter(get(%0/D`VIRTUES),last(%i0,~),|))),switch(u(getstat,%0,D`POSITIVE_MUTATIONS,Essence Abundance),1,3,2,6,4,12,6,16,0)) -&FUN`MAX`PERSONAL`INFERNAL u(ex-pso)=add(mul(3,getstat(%0/D`INFO,Essence)),u(FUN`MAX`WILLPOWER,%0)) -&FUN`MAX`PERIPHERAL`INFERNAL u(ex-pso)=add(mul(7,getstat(%0/D`INFO,Essence)),u(FUN`MAX`WILLPOWER,%0),if(default(VAR`MAXVIRTUES,0),20,lmath(add,iter(get(%0/D`VIRTUES),last(%i0,~),|))),null(SKINMOUNTHERE)) +&FUN`MAX`PERSONAL`INFERNAL u(ex-pso)=add(mul(3,u(getstat,%0,D`INFO,Essence)),u(FUN`MAX`WILLPOWER,%0)) +&FUN`MAX`PERIPHERAL`INFERNAL u(ex-pso)=add(mul(7,u(getstat,%0,D`INFO,Essence)),u(FUN`MAX`WILLPOWER,%0),if(default(VAR`MAXVIRTUES,0),20,lmath(add,iter(get(%0/D`VIRTUES),last(%i0,~),|))),null(SKINMOUNTHERE)) -&FUN`MAX`PERSONAL`JADEBORN u(ex-pso)=add(mul(10,getstat(%0/D`INFO,Essence)),null(SKINMOUNTHERE)) +&FUN`MAX`PERSONAL`JADEBORN u(ex-pso)=add(mul(10,u(getstat,%0,D`INFO,Essence)),null(SKINMOUNTHERE)) &FUN`MAX`DIVERGENCE u(ex-pso)=switch(1,regmatchi(getsplat(%0),^(JADEBORN)$),10,0) -&FUN`MAX`PERSONAL`MORTAL u(ex-pso)=if(or(getstat(%0/D`MERITS,Awakened Essence),getstat(%0/D`POSITIVE_MUTATIONS,Awakened Essence),v(VAR`MORTALESSENCE)),add(mul(10,getstat(%0/D`INFO,Essence)),null(SKINMOUNTHERE)),0) +&FUN`MAX`PERSONAL`MORTAL u(ex-pso)=if(or(u(getstat,%0,D`MERITS,Awakened Essence),u(getstat,%0,D`POSITIVE_MUTATIONS,Awakened Essence),v(VAR`MORTALESSENCE)),add(mul(10,u(getstat,%0,D`INFO,Essence)),null(SKINMOUNTHERE)),0) &VAR`MORTALESSENCE u(ex-pso)=0 -&FUN`MAX`PERSONAL`RAKSHA u(ex-pso)=add(mul(10,getstat(%0/D`INFO,Essence)),null(SKINMOUNTHERE)) +&FUN`MAX`PERSONAL`RAKSHA u(ex-pso)=add(mul(10,u(getstat,%0,D`INFO,Essence)),null(SKINMOUNTHERE)) &FUN`MAX`STASIS u(ex-pso)=switch(1,regmatchi(getsplat(%0),^(RAKSHA)$),10,0) -&FUN`MAX`GOSSAMER u(ex-pso)=switch(getstat(%0/D`BACKGROUNDS,Gossamer),1,1,2,3,3,6,4,10,5,20,0) +&FUN`MAX`GOSSAMER u(ex-pso)=switch(u(getstat,%0,D`BACKGROUNDS,Gossamer),1,1,2,3,3,6,4,10,5,20,0) -&FUN`MAX`PERSONAL`SPIRIT u(ex-pso)=add(mul(10,getstat(%0/D`INFO,Essence)),mul(5,u(FUN`MAX`WILLPOWER,%0)),null(SKINMOUNTHERE)) +&FUN`MAX`PERSONAL`SPIRIT u(ex-pso)=add(mul(10,u(getstat,%0,D`INFO,Essence)),mul(5,u(FUN`MAX`WILLPOWER,%0)),null(SKINMOUNTHERE)) -&FUN`MAX`WILLPOWER u(ex-pso)=firstof(getstat(%0/D`INFO,Willpower),0) -&FUN`MAX`DISSONANCE u(ex-pso)=if(getstat(%0/D`NEGATIVE_MUTATIONS,Gremlin Syndrome),10,0) +&FUN`MAX`WILLPOWER u(ex-pso)=firstof(u(getstat,%0,D`INFO,Willpower),0) +&FUN`MAX`DISSONANCE u(ex-pso)=if(u(getstat,%0,D`NEGATIVE_MUTATIONS,Gremlin Syndrome),10,0) &DAT`CLARITY u(ex-pso)= &DAT`CLARITY`TYPE u(ex-pso)=Track