/* $Id: ctrl.c,v 1.6 1993/09/18 19:04:16 nils Exp $ */
/* file containing programming commands. */
#include "config.h"
#include "externs.h"
void do_switch(player,exp,argv,cause)
dbref player;
char *exp;
char *argv[];
dbref cause;
{
int any=0,a,c;
char buff[1024];
char *ptrsrv[10];
strcpy(buff,exp);
if (!argv[1])
return;
for(c=0;c<10;c++)
ptrsrv[c]=wptr[c];
/* now try a wild card match of buff with stuff in coms */
for(a=1;(a<(MAX_ARG-1)) && argv[a] && argv[a+1];a+=2)
if (wild_match(argv[a],buff))
{
any=1;
for(c=0;c<10;c++)
wptr[c]=ptrsrv[c];
parse_que(player,argv[a+1],cause);
}
for(c=0;c<10;c++)
wptr[c]=ptrsrv[c];
if ((a<MAX_ARG) && !any && argv[a])
parse_que(player,argv[a],cause);
}
void do_foreach(player, list, command, cause)
dbref player;
char *list, *command;
dbref cause;
{
char *k;
char *ptrsrv[10];
int c;
for(c=0;c<10;c++)
ptrsrv[c] = wptr[c];
for(c=0;c<10;c++)
wptr[c] = "";
while ((k=parse_up(&list, ' '))) {
wptr[0] = k;
parse_que(player, command, cause);
}
for(c=0;c<10;c++)
wptr[c] = ptrsrv[c];
}
void do_trigger(player,object,argv)
dbref player;
char *object;
char *argv[];
{
dbref thing;
ATTR *attrib;
int a;
if (!parse_attrib(player,object,&thing,&attrib,POW_SEEATR)) {
notify(player,"No match.");
return;
}
if (!controls(player,thing,POW_MODIFY)) {
notify(player,"Permission denied.");
return;
}
if ( thing == GOD ) {
notify(player,"You can't trigger god!");
return;
}
for(a=0;a<10;a++)
wptr[a]=argv[a+1];
did_it(player,thing,NULL,0,NULL,0,attrib);
if(!(db[player].flags&QUIET))
notify(player,
tprintf("%s - Triggered.",db[thing].name));
}
void do_trigger_as (player,object,argv)
dbref player;
char *object;
char *argv[];
{
dbref thing;
dbref cause;
ATTR *attrib;
int a;
if (!argv[1] || !*argv[1] || ((cause = match_thing(player, argv[1]))==NOTHING))
return;
if (!controls (player, cause, POW_MODIFY)) {
notify(player,"Permission denied.");
return;
}
if (!parse_attrib(player,object,&thing,&attrib,POW_SEEATR)) {
notify(player,"No match.");
return;
}
if (!controls(player,thing,POW_MODIFY)) {
notify(player,"Permission denied.");
return;
}
if ( thing == GOD ) {
notify(player,"You can't trigger god!");
return;
}
for(a=0;a<9;a++)
wptr[a]=argv[a+2];
did_it(cause,thing,NULL,0,NULL,0,attrib);
if(!(db[player].flags&QUIET))
notify(player,
tprintf("%s - Triggered.",db[thing].name));
}
void do_decompile (player, arg1, arg2)
dbref player;
char *arg1;
char *arg2;
{
dbref obj;
ALIST *a;
ATRDEF *k;
char buf[1024];
char *s;
obj = match_thing (player, arg1);
if (obj == NOTHING)
return;
if ((!controls(player,obj,POW_SEEATR) || !controls(player,obj,POW_EXAMINE)) && !(db[obj].flags&SEE_OK)) {
notify(player,"Permission denied.");
return;
}
s = flag_description(obj);
if ((s=strchr(s,':')) && (s=strchr(++s,':'))) {
char *g;
s+=2;
while ((g=parse_up(&s,' ')))
notify(player,tprintf("@set %s=%s",(*arg2)?arg2:arg1,g));
}
if (db[obj].atrdefs) {
for (k=db[obj].atrdefs; k; k=k->next) {
sprintf(buf,"@defattr %s/%s%s",
(*arg2)?arg2:arg1,
k->a.name,
(k->a.flags)?"=":"");
if (k->a.flags & AF_WIZARD)
strcat(buf, " wizard");
if (k->a.flags & AF_UNIMP)
strcat(buf, " unsaved");
if (k->a.flags & AF_OSEE)
strcat(buf, " osee");
if (k->a.flags & AF_INHERIT)
strcat(buf, " inherit");
if (k->a.flags & AF_DARK)
strcat(buf, " dark");
if (k->a.flags & AF_DATE)
strcat(buf, " date");
if (k->a.flags & AF_LOCK)
strcat(buf, " lock");
if (k->a.flags & AF_FUNC)
strcat(buf, " function");
notify(player, buf);
}
}
for (a=db[obj].list; a; a=AL_NEXT(a))
if (AL_TYPE(a))
if (!(AL_TYPE(a)->flags&AF_UNIMP))
if (can_see_atr (player, obj, AL_TYPE(a))) {
if ( AL_TYPE(a)->obj == NOTHING )
sprintf(buf, "%s", unparse_attr(AL_TYPE(a),0));
else {
sprintf(buf, "#%d", obj);
sprintf(buf, "%s%s", db[obj].name, unparse_attr(AL_TYPE(a),0)+strlen(buf));
}
notify(player,tprintf("@nset %s=%s:%s",(*arg2)?arg2:arg1,
buf,
uncompress(AL_STR(a))));
}
}
void do_cycle (player, arg1, argv)
dbref player;
char *arg1;
char **argv;
{
int i;
dbref thing;
ATTR *attrib;
char *curv;
if (!parse_attrib(player, arg1, &thing, &attrib, POW_SEEATR)) {
notify(player,"no Match.");
return;
}
if (!argv[1]) {
notify(player,"wha? quit that. you're confusing me.");
return;
}
if (!can_set_atr(player,thing, attrib)) {
notify(player,"permission denied.");
return;
}
curv = atr_get (thing, attrib);
for (i=1; i<10 && argv[i]; i++)
if (!string_compare(curv, argv[i])) {
i++;
if (!(db[player].flags&QUIET))
notify(player,"cycling...");
if (i<10 && argv[i])
atr_add(thing,attrib,argv[i]);
else
atr_add(thing,attrib,argv[1]);
return;
}
if (!(db[player].flags&QUIET))
notify(player,"defaulting to first in cycle");
atr_add(thing,attrib,argv[1]);
}