For the most part things seem to be working, with a few exceptions. The bbgroups weren't created by the installation, and for whatever reason I can't create "Job Tracker" manually. I can create any other bbgroup with any other name, but "Job Tracker" saves as "#-2" on the bbpocket and refuses to display even when the dbref is manually set. No idea...
Lines that print "That's terrific, but what should I do with the list?" when entered:
@dolist lcon([v(JOB_VC)])={@switch [first(version())]=PennMUSH,{@set ##=!HALT},{@set ##=!HALTED};@switch [first(version())]=TinyMUSH,{@set ##=!COMMANDS},{@set ##=NO_COMMAND};@set ##=UNFINDABLE;@switch [first(version())]=PennMUSH,{@set ##=WIZARD},{@set ##=INHERIT};}
Problem lines (Those that just hung, no error messages):
@switch [v(JOB_PATCH)]=1,{@dolist STARTUP BUCKET_HEADER DATA_CHARS2 DISPLAY_MYHEADERS DISPLAY_MYJOB MYJOBS_HEADER FIL_DELETE FN_ANSIFY FN_COORD2ANG FN_EASYPIE_PENN FN_EASYPIE_TINY FN_GENDATA MAP_GENDATA MAP_GENDATA2 PENN_PIE PENN10_PIE PENN12_PIE FN_NEW_JOBS FN_PACK IS_PLAYER JOBS_HEADER JOBS_HEADER2 MAP_ANSIFY MAP_ARTSGRAPH MAP_NAME2 MAP_NEW MAP_ISPLAYER MAP_PMATCH MAP_READERS={@switch [hasattr(v(JOB_VA),##)]=1,&## [v(JOB_VA)]}}
@switch [v(JOB_PATCH)]=0,{&ACCESS [v(JOB_VC)]=lit([u(%va/FN_STAFFALL,%#)]);&ACCESS_DESC [v(JOB_VC)]=lit([u(%va/FN_STAFFALL,%0)]);&ACCESS_HELP [v(JOB_VC)]=lit([u(%va/FN_STAFFALL,%0)]);&ACCESS_HIDDEN [v(JOB_VC)]=lit([u(%va/FN_WIZONLY,%0)]);&ACCESS_LOCKED [v(JOB_VC)]=lit([u(%va/FN_WIZONLY,%0)]);&ACCESS_LOGFILE [v(JOB_VC)]=lit([u(%va/FN_WIZONLY,%0)]);&ACCESS_MYJOBS [v(JOB_VC)]=lit([u(%va/FN_WIZONLY,%0)]);&ACCESS_POST_APPROVE [v(JOB_VC)]=lit([u(%va/FN_WIZONLY,%0)]);&ACCESS_POST_COMPLETE [v(JOB_VC)]=lit([u(%va/FN_WIZONLY,%0)]);&ACCESS_POST_DENY [v(JOB_VC)]=lit([u(%va/FN_WIZONLY,%0)]);&ACCESS_TURNAROUND [v(JOB_VC)]=lit([u(%va/FN_WIZONLY,%0)]);}
@switch [hasattr(v(JOB_VC),STAT_ART)]=0,{&STAT_ART [v(JOB_VC)]=0 0}
@switch [v(JOB_PATCH)]=0,{think [setq(0,create(ADMIN,10))][setq(1,create(Job 1,10))];@Desc %q0=For game administrative issues.;@lock/Speech %q0=ACCESS/1;&ACCESS %q0=lit([u(%va/FN_STAFFALL,%#)]);@parent %q0=[v(JOB_VC)];@tel %q0=[v(JOB_VC)];think [ansi(hc,ANOMALY JOBS:)] Creating initial job.;&OPENED_BY %q1=%#;&OPENED_ON %q1=[secs()];&MODIFIED_ON %q1=[secs()];&STATUS %q1=1;&TITLE %q1=Welcome;@parent %q1=%q0;@tel %q1=[v(JOB_VA)];&NUM_COMMENT %q1=3;&LIST_STATS %q1=ADD|1;&PRIORITY %q1=1;&COMMENT_1 %q1=CRE|[secs()]|#0|Anomaly Jobs|Thank you for choosing Anomaly Jobs. This is fully-featured task tracking code that helps to keep games organized. Please see '+jobs/credits' for information on version, license and other credits.;&COMMENT_2 %q1=ADD|[secs()]|#0|Anomaly Jobs|Remember that /complete posts to the public BBS (unless changed for a bucket - see the help file on buckets). /approve and /deny sends mail to the job-creator, and posts to private BBS.;@set %q1=UNFINDABLE;&JOBS_NUM [v(JOB_VA)]=1;&MAX_JOBS [v(JOB_VA)]=200;@switch [first(version())]=TinyMUSH,{@set %q1=!COMMANDS},{@set %q1=NO_COMMAND}}
@switch [v(JOB_PATCH)]=0,{think [setq(0,create(APPS,10))];@Desc %q0=Character applications submitted for review.;@lock/Speech %q0=ACCESS/1;&ALETTER_OTH %q0=lit(Application for approval submitted by [name(%1)].);&MLETTER_OTH %q0=lit(You have submitted an application for approval. Please give staff some time to process the application. You will hear back soon.);&MLETTER_APR %q0=lit(You have been approved by [name(%2)].);&PLETTER_APR %q0=lit([name(%2)] has approved [name(get(%0/OPENED_BY))] for roleplay.);&ACCESS %q0=lit([u(%va/FN_STAFFALL,%#)]);@parent %q0=[v(JOB_VC)];@tel %q0=[v(JOB_VC)]}
@switch [v(JOB_PATCH)]=0,{think [setq(0,create(BUILD,10))];@Desc %q0=For building issues and typo reports.;@lock/Speech %q0=ACCESS/1;&PUBLIC %q0=1;&ACCESS %q0=lit([or(haspower(%#,builder),u(%va/FN_STAFFALL,%#))]);@set %q0=SAFE;@parent %q0=[v(JOB_VC)];@tel %q0=[v(JOB_VC)]}
@switch [v(JOB_PATCH)]=0,{think [setq(0,create(CGEN,10))];@Desc %q0=For character generation problems and updates.;@lock/Speech %q0=ACCESS/1;&ACCESS %q0=lit([u(%va/FN_STAFFALL,%#)]);@parent %q0=[v(JOB_VC)];@tel %q0=[v(JOB_VC)]}
@switch [v(JOB_PATCH)]=0,{think [setq(0,create(CODE,10))];@Desc %q0=For bugs and code enhancements.;@lock/Speech %q0=ACCESS/1;&PUBLIC %q0=1;&ACCESS %q0=lit([u(%va/FN_STAFFALL,%#)]);@set %q0=SAFE;@parent %q0=[v(JOB_VC)];@tel %q0=[v(JOB_VC)]}
@switch [v(JOB_PATCH)]=0,{think [setq(0,create(FEEP,10))];@Desc %q0=Storage for unimplemented game ideas.;@lock/Speech %q0=ACCESS/1;&HIDDEN %q0=1;&ACCESS %q0=lit([u(%va/FN_STAFFALL,%#)]);@parent %q0=[v(JOB_VC)];@tel %q0=[v(JOB_VC)]}
@switch [v(JOB_PATCH)]=0,{think [setq(0,create(FORUM,10))];@Desc %q0=Tabled discussion jobs. Feedback needed.;@lock/Speech %q0=ACCESS/1;&ACCESS %q0=lit([u(%va/FN_STAFFALL,%#)]);@parent %q0=[v(JOB_VC)];@tel %q0=[v(JOB_VC)]}
@switch [v(JOB_PATCH)]=0,{think [setq(0,create(PITCH,10))];@Desc %q0=Pitched plots and stories.;@lock/Speech %q0=ACCESS/1;&ACCESS %q0=lit([u(%va/FN_STAFFALL,%#)]);&HIDDEN %q0=1;@set %q0=SAFE;@parent %q0=[v(JOB_VC)];@tel %q0=[v(JOB_VC)]}
@switch [v(JOB_PATCH)]=0,{think [setq(0,create(PUB,10))];@Desc %q0=Public jobs. Everyone has +myjobs access.;@lock/Speech %q0=ACCESS/1;&ACCESS %q0=lit([u(%va/FN_STAFFALL,%#)]);&TRANSPARENT %q0=1;&PUBLIC %q0=1;&HOOK_CRE %q0=lit(@set %0/COMMENT_1=no_inherit);@parent %q0=[v(JOB_VC)];@tel %q0=[v(JOB_VC)]}
@switch [v(JOB_PATCH)]=0,{think [setq(0,create(QUERY,10))];@Desc %q0=Query bucket.;@lock/Speech %q0=ACCESS/1;&PRIORITY %q0=2;&PUBLIC %q0=1;&ACCESS %q0=lit([u(%va/FN_STAFFALL,%#)]);&TURNAROUND %q0=168;&HOOK_OTH %q0=lit(@set %0/COMMENT_1=no_inherit;&ASSIGNED_TO %0=%1);&MLETTER_OTH %q0=lit(You have been issued an official query by the jobs system by [name(%2)]. You have [div(v(TURNAROUND),24)] days at the time of this mail to respond to the query%, otherwise staff may need to act on the issue without your input. To see your query%, please type '+myjob [last(name(%0))]'.);@set %q0=SAFE;@parent %q0=[v(JOB_VC)];@tel %q0=[v(JOB_VC)]}
@switch [v(JOB_PATCH)]=0,{think [setq(0,create(REQ,10))];@Desc %q0=Player requests.;@lock/Speech %q0=ACCESS/1;&PUBLIC %q0=1;&PRIORITY %q0=2;&ACCESS %q0=lit([u(%va/FN_STAFFALL,%#)]);&TURNAROUND %q0=72;&LOGFILE %q0=reqlog;&MLETTER_OTH %q0=lit(You have requested '[name(%0)]: [get(%0/TITLE)]' from staff: %r%r%3%r%r[repeat(-,75)]%rSee '[ansi(h,+help myjobs)]' for help on how to display and add to your jobs.%r%rPlease give staff at least [u(me/TURNAROUND)] hours from the date of this mail to process your request.);@set %q0=SAFE;@parent %q0=[v(JOB_VC)];@tel %q0=[v(JOB_VC)]}
@switch [v(JOB_PATCH)]=0,{think [setq(0,create(RP,10))];@Desc %q0=For storing potential plots.;@lock/Speech %q0=ACCESS/1;&ACCESS %q0=lit([u(%va/FN_STAFFALL,%#)]);&ACCESS_APPROVED %q0=lit([u(%va/FN_WIZONLY,%0)]);&ACCESS_ARC %q0=lit([u(%va/FN_STAFFALL,%0)]);&ACCESS_PLAYERS %q0=lit([u(%va/FN_STAFFALL,%0)]);&ACCESS_SCHEDULE %q0=lit([u(%va/FN_STAFFALL,%0)]);&ACCESS_STAFF %q0=lit([u(%va/FN_STAFFALL,%0)]);&ACCESS_SYNOPSIS %q0=lit([u(%va/FN_STAFFALL,%0)]);&ERROR_PLAYERS %q0=lit(I don't recognize [ansi(h,%qp)] as a player.);&ERROR_STAFF %q0=lit(I don't recognize [ansi(h,%qp)] as a player.);&HIDDEN %q0=1;&MAP_NAME %q0=lit([name(*%0)]);&PROCESS_APPROVED %q0=lit([setq(3,APPROVED)][setq(1,%0)]1);&PROCESS_ARC %q0=lit([setq(3,PLOT_ARC)][setq(1,u(%va/FN_STRTRUNC,%0,50))]);&PROCESS_PLAYERS %q0=lit([setq(3,PLAYERS)][ifelse(not(gt(strlen(u(%va/fn_trim,squish(iter(%0,ifelse(not(isdbref(pmatch(itext(0)))),setr(p,itext(0)),))))),0)),[setq(9,iter(%0,pmatch(itext(0))))][setq(8,get(%1/PLAYERS))][iter(%q9,ifelse(gt(member(%q8,##),0),setq(8,remove(%q8,##)),setq(8,setunion(%q8,##))))][setq(1,%q8)]1,0)]);&PROCESS_SCHEDULE %q0=lit([setq(3,SCHEDULE)][setq(1,u(%va/FN_STRTRUNC,%0,50))]1);&PROCESS_STAFF %q0=lit([setq(3,WRITER)][ifelse(not(gt(strlen(u(%va/fn_trim,squish(iter(%0,ifelse(not(isdbref(pmatch(itext(0)))),setr(p,itext(0)),))))),0)),[setq(9,iter(%0,pmatch(itext(0))))][setq(8,get(%1/WRITER))][iter(%q9,ifelse(gt(member(%q8,##),0),setq(8,remove(%q8,##)),setq(8,setunion(%q8,##))))][setq(1,%q8)]1,0)]);&PROCESS_SYNOPSIS %q0=lit([setq(3,BRIEF)][setq(1,%0)]1);&SUMMARY %q0=lit([rjust(ansi(hc,Approved:),10)]%b[ifelse(u(%va/FN_HASATTRP,%0,APPROVED),get(%0/APPROVED),Unapproved)]%r[rjust(ansi(hc,Players:),10)]%b[ifelse(u(%va/FN_HASATTRP,%0,PLAYERS),u(%va/FN_ITEMIZE,map(me/MAP_NAME,get(%0/PLAYERS),%b,|),|),Nobody)]%r[rjust(ansi(hc,Schedule:),10)]%b[ifelse(u(%va/FN_HASATTRP,%0,SCHEDULE),get(%0/SCHEDULE),Unset)]%r[rjust(ansi(hc,Arc:),10)]%b[ifelse(u(%va/FN_HASATTRP,%0,PLOT_ARC),get(%0/PLOT_ARC),Unset)]%r[rjust(ansi(hc,Staff:),10)]%b[ifelse(u(%va/FN_HASATTRP,%0,WRITER),u(%va/FN_ITEMIZE,map(me/MAP_NAME,get(%0/WRITER),%b,|),|),Nobody)]%r[rjust(ansi(hc,Synopsis:),10)]%b[ifelse(u(%va/FN_HASATTRP,%0,BRIEF),get(%0/BRIEF),Unset)]);&HELP %q0=lit(%r[space(5)]This bucket is for plots that have potential but aren't yet ready to run. Jobs in this bucket should remain here until the plot is approved to be run.%r%r[u(%va/FN_BREAK,ansi(hc,Settings for +job/sumset))]%r[ljust(ansi(h,PLAYERS),10)] Accepts <player> as a valid parameter.%r[ljust(ansi(h,SCHEDULE),10)] Describe when the plot is in effect.%r[ljust(ansi(h,ARC),10)] Describes the story arc associated to this plot.%r[ljust(ansi(h,STAFF),10)] Accepts <player> as a valid parameter.%r[ljust(ansi(h,SYNOPSIS),10)] A brief synopsis of the plot.%r[ljust(ansi(h,APPROVED),10)] Wiz-only, for approving plots. Accepts 'yes' or 'no'.);@parent %q0=[v(JOB_VC)];@tel %q0=[v(JOB_VC)]}
@switch [v(JOB_PATCH)]=0,{think [setq(0,create(TECH,10))];@Desc %q0=Technology issues - weapon objects, etc.;@lock/Speech %q0=ACCESS/1;&ACCESS %q0=lit([u(%va/FN_STAFFALL,%#)]);@parent %q0=[v(JOB_VC)];@tel %q0=[v(JOB_VC)]}
@switch [v(JOB_PATCH)]=0,{think [setq(0,create(THEME,10))];@Desc %q0=Thematic issues and discussion.;@lock/Speech %q0=ACCESS/1;&ACCESS %q0=lit([u(%va/FN_STAFFALL,%#)]);@parent %q0=[v(JOB_VC)];@tel %q0=[v(JOB_VC)]}
@switch [v(JOB_PATCH)]=0,{think [setq(0,create(TPS,10))];@Desc TPS=Actively running tiny plots.;@lock/Speech TPS=ACCESS/1;&SUMMARY TPS=lit([rjust(ansi(hc,Approved:),10)]%b[ifelse(u(%va/FN_HASATTRP,%0,APPROVED),get(%0/APPROVED),Unapproved)]%r[rjust(ansi(hc,Players:),10)]%b[ifelse(u(%va/FN_HASATTRP,%0,PLAYERS),u(%va/FN_ITEMIZE,map(me/MAP_NAME,get(%0/PLAYERS),%b,|),|),Nobody)]%r[rjust(ansi(hc,Schedule:),10)]%b[ifelse(u(%va/FN_HASATTRP,%0,SCHEDULE),get(%0/SCHEDULE),Unset)]%r[rjust(ansi(hc,Arc:),10)]%b[ifelse(u(%va/FN_HASATTRP,%0,PLOT_ARC),get(%0/PLOT_ARC),Unset)]%r[rjust(ansi(hc,Staff:),10)]%b[ifelse(u(%va/FN_HASATTRP,%0,WRITER),u(%va/FN_ITEMIZE,map(me/MAP_NAME,get(%0/WRITER),%b,|),|),Nobody)]%r[rjust(ansi(hc,Synopsis:),10)]%b[ifelse(u(%va/FN_HASATTRP,%0,BRIEF),get(%0/BRIEF),Unset)]);&MAP_NAME TPS=lit([name(*%0)]);&ACCESS TPS=lit([u(%va/FN_STAFFALL,%#)]);&ACCESS_PLAYERS TPS=lit([u(%va/FN_STAFFALL,%0)]);&PROCESS_PLAYERS TPS=lit([setq(3,PLAYERS)][ifelse(not(gt(strlen(u(%va/fn_trim,squish(iter(%0,ifelse(not(isdbref(pmatch(itext(0)))),setr(p,itext(0)),))))),0)),[setq(9,iter(%0,pmatch(itext(0))))][setq(8,get(%1/PLAYERS))][iter(%q9,ifelse(gt(member(%q8,##),0),setq(8,remove(%q8,##)),setq(8,setunion(%q8,##))))][setq(1,%q8)]1,0)]);&ERROR_PLAYERS TPS=lit(I don't recognize [ansi(h,%qp)] as a player.);&ACCESS_SCHEDULE TPS=lit([u(%va/FN_STAFFALL,%0)]);&PROCESS_SCHEDULE TPS=lit([setq(3,SCHEDULE)][setq(1,u(%va/FN_STRTRUNC,%0,50))]1);&ERROR_SCHEDULE TPS=lit(You must enter a valid date string.);&ACCESS_ARC TPS=lit([u(%va/FN_STAFFALL,%0)]);&PROCESS_ARC TPS=lit([setq(3,PLOT_ARC)][setq(1,u(%va/FN_STRTRUNC,%0,50))]);&ACCESS_STAFF TPS=lit([u(%va/FN_STAFFALL,%0)]);&PROCESS_STAFF TPS=lit([setq(3,WRITER)][ifelse(not(gt(strlen(u(%va/fn_trim,squish(iter(%0,ifelse(not(isdbref(pmatch(itext(0)))),setr(p,itext(0)),))))),0)),[setq(9,iter(%0,pmatch(itext(0))))][setq(8,get(%1/WRITER))][iter(%q9,ifelse(gt(member(%q8,##),0),setq(8,remove(%q8,##)),setq(8,setunion(%q8,##))))][setq(1,%q8)]1,0)]);&ERROR_STAFF TPS=lit(I don't recognize [ansi(h,%qp)] as a player.);&ACCESS_SYNOPSIS TPS=lit([u(%va/FN_STAFFALL,%0)]);&PROCESS_SYNOPSIS TPS=lit([setq(3,BRIEF)][setq(1,%0)]1);&ACCESS_APPROVED TPS=lit([u(%va/FN_WIZONLY,%0)]);&PROCESS_APPROVED TPS=lit([setq(3,APPROVED)][setq(1,%0)]1);&HELP TPS=lit(%r[space(5)]This bucket is for currently active plots that are running on the grid. Care should be taken to keep the headers of these jobs up-to-date, especially in terms of Progress settings and due dates. When the plot is completed, the job should be set complete and left open until follow-up requests are completed.%r%r[u(%va/FN_BREAK,ansi(hc,Settings for +job/sumset))]%r[ljust(ansi(h,PLAYERS),10)] Accepts <player> as a valid parameter.%r[ljust(ansi(h,SCHEDULE),10)] Describe when the plot is in effect.%r[ljust(ansi(h,ARC),10)] Describes the story arc associated to this plot.%r[ljust(ansi(h,STAFF),10)] Accepts <player> as a valid parameter.%r[ljust(ansi(h,SYNOPSIS),10)] A brief synopsis of the plot.%r[ljust(ansi(h,APPROVED),10)] Wiz-only, for approving plots. Accepts 'yes' or 'no'.);@parent TPS=[v(JOB_VC)];@tel TPS=[v(JOB_VC)]}
@switch [v(JOB_PATCH)]=0,{&HAS_ACCESS [v(JOB_VA)]=lit([or(haspower(%0,builder),u(%va/FN_STAFFALL,%0))]);&ADD_ACCESS [v(JOB_VA)]=lit([u(%va/FN_STAFFALL,%0)]);&APPROVE_ACCESS [v(JOB_VA)]=lit([u(%va/FN_STAFFALL,%0)]);&COMPLETE_ACCESS [v(JOB_VA)]=lit([u(%va/FN_STAFFALL,%0)]);&CREATE_ACCESS [v(JOB_VA)]=lit([u(%va/FN_STAFFALL,%0)]);&DENY_ACCESS [v(JOB_VA)]=lit([u(%va/FN_STAFFALL,%0)]);&EDIT_ACCESS [v(JOB_VA)]=lit([u(%va/FN_STAFFALL,%0)]);&GIVE_ACCESS [v(JOB_VA)]=lit([u(%va/FN_WIZONLY,%0)]);&LOG_ACCESS [v(JOB_VA)]=lit([u(%va/FN_WIZONLY,%0)]);&MAIL_ACCESS [v(JOB_VA)]=lit([u(%va/FN_STAFFALL,%0)]);&STATS_ACCESS [v(JOB_VA)]=lit([u(%va/FN_STAFFALL,%0)]);&CONFIG_ACCESS [v(JOB_VA)]=lit([u(%va/FN_STAFFALL,%0)]);}
@switch [v(JOB_PATCH)]=0,{&JOB_LOGGING [v(JOB_VA)]=1;&LOGFILE [v(JOB_VC)]=joblog}
@switch [v(JOB_PATCH)]=0,{&INSTALL_DATE [v(JOB_VA)]=[time()]}
@switch [setq(0,switch(first(version()),PennMUSH,lsearch(all,eobjects,[strmatch(name(##),bbpocket)]),RhostMUSH,searchng(object=bbpocket),search(object=bbpocket)))][isdbref(%q0)][v(JOB_PATCH)]=0*,{think [ansi(hc,ANOMALY JOBS:)] Couldn't find Myrddin's BBS. Installation is not complete.},10,{think [ansi(hc,ANOMALY JOBS:)] Setting up the BBS.;&BBPOCKET [v(JOB_VC)]=%q0;+bbnewgroup Job Tracker;@wait 2={+bbnewgroup Staff Job Tracker};@wait 5={&POST_COMPLETE [setq(1,extract(u(%q0/GROUPS),dec(words(u(%q0/GROUPS))),1))][setq(2,last(u(%q0/GROUPS)))][setq(3,v(JOB_VB))][setq(4,switch(first(version()),RhostMUSH,lit(gte(bittype(%0),2)),PennMUSH,lit(orflags(%0,Wr)),lit(orflags(%0,WZ))))][v(JOB_VC)]=%q1;&POST_APPROVE [v(JOB_VC)]=%q2;&POST_DENY [v(JOB_VC)]=%q2;&POST_DELETE [v(JOB_VC)]=%q2;&CANREAD %q1=1;&CANWRITE %q1=%[or%(strmatch%(%%0,%q3%),%q4%)%];&CANREAD %q2=%q4;&CANWRITE %q2=%[or%(strmatch%(%%0,%q3%),%q4%)%];}},{think [ansi(hc,ANOMALY JOBS:)] Updating BBS settings.;&BBPOCKET [v(JOB_VC)]=%q0;@dolist [v(JOB_VC)] [lcon(v(JOB_VC))]={@switch [and(hasattr(##,POST_COMPLETE),isnum(get(##/POST_COMPLETE)))][and(hasattr(##,POST_APPROVE),isnum(get(##/POST_APPROVE)))][and(hasattr(##,POST_DENY),isnum(get(##/POST_DENY)))][and(hasattr(##,POST_DELETE),isnum(get(##/POST_DELETE)))]=1???,{&POST_COMPLETE ##=[extract(u(%q0/GROUPS),get(##/POST_COMPLETE),1)]},?1??,{&POST_APPROVE ##=[extract(u(%q0/GROUPS),get(##/POST_APPROVE),1)]},??1?,{&POST_DENY ##=[extract(u(%q0/GROUPS),get(##/POST_DENY),1)]},???1,{&POST_DELETE ##=[extract(u(%q0/GROUPS),get(##/POST_DELETE),1)]}}}
@switch [v(JOB_PATCH)]=>0,{think [ansi(hc,ANOMALY JOBS:)] Checking hooks for compatibility.;@dolist [v(JOB_VC)] [lcon(v(JOB_VC))]={@switch [hasattr(##,HOOK_COMPLETE)][hasattr(##,HOOK_APPROVE)][hasattr(##,HOOK_DENY)][hasattr(##,HOOK_DELETE)]=1???,{think [ansi(hc,ANOMALY JOBS:)] ##/HOOK_COMPLETE not valid: move to ##/HOOK_COM;},?1??,{think [ansi(hc,ANOMALY JOBS:)] ##/HOOK_APPROVE not valid: move to ##/HOOK_APR;},??1?,{think [ansi(hc,ANOMALY JOBS:)] ##/HOOK_DENY not valid: move to ##/HOOK_DNY;},???1,{think [ansi(hc,ANOMALY JOBS:)] ##/HOOK_DELETE not valid: move to ##/HOOK_DEL;}}}
@switch [v(JOB_PATCH)]=>0,{think [ansi(hc,ANOMALY JOBS:)] Updating special job access to unique player ID.;@dolist switch(first(version()),PennMUSH,lsearch(all,eplayers,[hasattrval(##,JOBSB)]),RhostMUSH,searchng(eplayer=hasattr(##,JOBSB)),search(eplayer=hasattr(##,JOBSB)))={think [name(##)] has access to buckets: [u([v(JOB_VA)]/FN_ITEMIZE,iter(get(##/JOBSB),name(first(itext(0),:)),|),|)];&JOBSB ##=iter(get(##/JOBSB),u([v(JOB_VA)]/FN_OBJID,first(itext(0),:)))}}
@switch [v(JOB_PATCH)]=>0,{think [ansi(hc,ANOMALY JOBS:)] Updating new job indicators.;@dolist lcon(v(JOB_VA))={&LIST_JOBSN ##=[default(##/LIST_JOBSN,get(##/LIST_READERS))];}}