setup() { set_level(8); set_name("guard"); set_short("City guard"); set_long("This is a city guard. He is supposed to protect the city from "+ "undesirables. Sadly Anhk Morpork isn't very fussy and he is almost "+ "asleep.\n"); set_race("human"); set_al(50); give_money(150,100); load_chat(10, ({ 1, "@snore", 1, ":snoozes.\n", 1, ":moves in his sleep.\n" }) );
void do_give(dbref player, dbref cause, int key, char *who, char *amnt) { dbref recipient; /* check recipient */ init_match(player, who, TYPE_PLAYER); match_neighbor(); match_possession(); match_me(); if (Privilaged(player) || HasPriv(player,NOTHING,POWER_LONG_FINGERS,POWER3,NOTHING)) { match_player(); match_absolute(); } recipient = match_result(); switch (recipient) { case NOTHING: notify(player, "Give to whom?"); return; case AMBIGUOUS: notify(player, "I don't know who you mean!"); return; } if (DePriv(player,recipient,DP_GIVE,POWER7,POWER_LEVEL_SPC)) { notify(player, "Permission denied."); return; } if (DePriv(recipient,player,DP_RECEIVE,POWER7,POWER_LEVEL_SPC)) { notify(player, "Permission denied."); return; } if (is_number(amnt)) { give_money(player, recipient, key, atoi(amnt)); } else if(Guest(recipient)) { notify(player, "Guest really doesn't need money or anything."); return; } else { if ( Typeof(player) != TYPE_ROOM ) give_thing(player, recipient, key, amnt); else notify(player, "Command incompatible with invoker type."); } }
void clubmaster_driver(int cn,int ret,int lastact) { struct clubmaster_driver_data *dat; int co,in,n,rank,cc,val; struct msg *msg,*next; char *ptr,tmp[80],name[80]; dat=set_data(cn,DRD_CLUBMASTERDRIVER,sizeof(struct clubmaster_driver_data)); if (!dat) return; // oops... if (ch[cn].arg) { clubmaster_driver_parse(cn,dat); ch[cn].arg=NULL; } // loop through our messages for (msg=ch[cn].msg; msg; msg=next) { next=msg->next; // did we see someone? if (msg->type==NT_CHAR) { co=msg->dat1; // dont talk to someone we cant see, and dont talk to ourself if (!char_see_char(cn,co) || cn==co) { remove_message(cn,msg); continue; } // dont talk to someone far away if (char_dist(cn,co)>10) { remove_message(cn,msg); continue; } // dont talk to the same person twice if (mem_check_driver(cn,co,7)) { remove_message(cn,msg); continue; } if (!get_char_club(cn) && !get_char_clan(cn)) quiet_say(cn,"Hello %s! Would you like to found a °c4club°c0?",ch[co].name); mem_add_driver(cn,co,7); } // talk back if (msg->type==NT_TEXT) { analyse_text_driver(cn,msg->dat1,(char*)msg->dat2,msg->dat3); if ((msg->dat1==1 || msg->dat1==2) && (co=msg->dat3)!=cn) { // talk, and not our talk if ((ptr=strcasestr((char*)msg->dat2,"found:"))) { if (!(ch[co].flags&CF_PAID)) { quiet_say(cn,"I'm sorry, %s, but only paying players may found clubs.",ch[co].name); } else if (!get_char_clan(co) && !get_char_club(co)) { if (ch[co].gold>=10000*100) { ptr+=6; while (isspace(*ptr)) ptr++; for (n=0; n<79; n++) { if (!(isalpha(*ptr) || *ptr==' ')) break; name[n]=*ptr++; } name[n]=0; if ((n=create_club(name))) { take_money(co,10000*100); ch[co].clan=n+CLUBOFFSET; ch[co].clan_serial=club[n].serial; ch[co].clan_rank=2; quiet_say(cn,"Congratulations, %s, you are now the leader of the club %s.",ch[co].name,club[n].name); dlog(co,0,"created club %d %s",n,club[n].name); } else quiet_say(cn,"Something's wrong with the name."); } else quiet_say(cn,"You cannot pay the fee of 10,000 gold."); } else quiet_say(cn,"You are already a member of a clan or club. You cannot found a new one."); } if ((ptr=strcasestr((char*)msg->dat2,"accept:"))) { if (!get_char_club(co) || ch[co].clan_rank<1) { quiet_say(cn,"You are not a club leader, %s.",ch[co].name); } else { ptr+=7; while (isspace(*ptr)) ptr++; for (n=0; n<79; n++) { if (!*ptr || *ptr=='"') break; dat->accept[n]=*ptr++; } dat->accept[n]=0; strcpy(dat->join,ch[co].name); dat->accept_clan=get_char_club(co); dat->accept_cn=co; quiet_say(cn,"To join %s's club %s, say: 'join: %s'",dat->join,dat->accept,dat->join); } } if ((ptr=strcasestr((char*)msg->dat2,"join:"))) { if (get_char_clan(co) || get_char_club(co)) { quiet_say(cn,"You are already a clan or club member, %s.",ch[co].name); } else { ptr+=5; while (isspace(*ptr)) ptr++; for (n=0; n<79; n++) { if (!*ptr || *ptr=='"') break; tmp[n]=*ptr++; } tmp[n]=0; if (strcasecmp(dat->accept,ch[co].name)) { quiet_say(cn,"You have not been invited, %s.",ch[co].name); } else if (strcasecmp(dat->join,tmp)) { quiet_say(cn,"%s has not invited you, %s.",tmp,ch[co].name); } else { //add_member(co,dat->accept_clan,dat->join); ch[co].clan=dat->accept_clan+CLUBOFFSET; ch[co].clan_serial=club[dat->accept_clan].serial; ch[co].clan_rank=0; quiet_say(cn,"%s, you are now a member of %s's club.",ch[co].name,dat->join); dat->accept[0]=0; dat->accept_clan=0; dat->join[0]=0; } } } if ((ptr=strcasestr((char*)msg->dat2,"leave!"))) { if (!get_char_club(co)) { quiet_say(cn,"You are not a club member, %s.",ch[co].name); } else { remove_member(co,co); quiet_say(cn,"You are no longer a member of any club, %s",ch[co].name); } } if ((ptr=strcasestr((char*)msg->dat2,"rank:"))) { if (!get_char_club(co) || ch[co].clan_rank<2) { quiet_say(cn,"You are not a club founder, %s.",ch[co].name); } else { ptr+=6; while (isspace(*ptr)) ptr++; for (n=0; n<79; n++) { if (!*ptr || *ptr=='"' || isspace(*ptr)) break; tmp[n]=*ptr++; } tmp[n]=0; rank=atoi(ptr); if (rank<0 || rank>1) { quiet_say(cn,"You must use a rank between 0 and 1."); remove_message(cn,msg); continue; } for (cc=getfirst_char(); cc; cc=getnext_char(cc)) { if (!strcasecmp(tmp,ch[cc].name) && (ch[cc].flags&CF_PLAYER)) break; } if (cc) { if (!(ch[cc].flags&CF_PAID) && rank>0) { quiet_say(cn,"%s is not a paying player, you cannot set the rank higher than 0.",ch[cc].name); } else if (ch[cc].clan_rank==2) { quiet_say(cn,"%s is the club's founder, cannot change rank.",ch[cc].name); } else if (get_char_club(cc)==get_char_club(co)) { ch[cc].clan_rank=rank; quiet_say(cn,"Set %s's rank to %d.",ch[cc].name,rank); } else quiet_say(cn,"You cannot change the rank of those not belonging to your club."); } else { int uID; uID=lookup_name(tmp,NULL); if (uID==0) continue; if (uID==-1) { quiet_say(cn,"Sorry, no player by the name %s found.",tmp); } else { task_set_clan_rank(uID,ch[co].ID,get_char_club(co)+CLUBOFFSET,rank,ch[co].name); quiet_say(cn,"Update scheduled (%s,%d).",tmp,rank); } } } } if ((ptr=strcasestr((char*)msg->dat2,"fire:"))) { if (!get_char_club(co) || ch[co].clan_rank<1) { quiet_say(cn,"You are not a club leader, %s.",ch[co].name); } else { ptr+=6; while (isspace(*ptr)) ptr++; for (n=0; n<79; n++) { if (!*ptr || *ptr=='"' || isspace(*ptr)) break; tmp[n]=*ptr++; } tmp[n]=0; for (cc=getfirst_char(); cc; cc=getnext_char(cc)) { if (!strcasecmp(tmp,ch[cc].name) && (ch[cc].flags&CF_PLAYER)) break; } if (cc) { if (get_char_club(cc)==get_char_club(co)) { if (ch[cc].clan_rank<2) { remove_member(cc,co); quiet_say(cn,"Fired: %s.",ch[cc].name); } else quiet_say(cn,"You cannot fire the founder of the club."); } else quiet_say(cn,"You cannot fire those not belonging to your club."); } else { int uID; uID=lookup_name(tmp,NULL); if (uID==0) continue; if (uID==-1) { quiet_say(cn,"Sorry, no player by the name %s found.",tmp); } else { task_fire_from_clan(uID,ch[co].ID,get_char_club(co)+CLUBOFFSET,ch[co].name); quiet_say(cn,"Update scheduled (%s).",tmp); } } } } if ((ptr=strcasestr((char*)msg->dat2,"deposit:"))) { if (!(n=get_char_club(co))) { quiet_say(cn,"You are not a club member, %s.",ch[co].name); } else { val=atoi(ptr+8)*100; if (val>0 && ch[co].gold>=val) { club[n].money+=val; take_money(co,val); quiet_say(cn,"You have deposited %dG, for a total of %dG, %s.",val/100,club[n].money/100,ch[co].name); dlog(co,0,"Deposited %dG into club %d, for a new total of %dG",val/100,n,club[n].money/100); db_update_club(n); } else quiet_say(cn,"You do not have that much gold, %s.",ch[co].name); } } if ((ptr=strcasestr((char*)msg->dat2,"withdraw:"))) { if (!(n=get_char_club(co)) || ch[co].clan_rank<2) { quiet_say(cn,"You are not a club founder, %s.",ch[co].name); } else { val=atoi(ptr+9)*100; if (val>0 && club[n].money>=val) { club[n].money-=val; give_money(co,val,"club withdrawal"); quiet_say(cn,"You have withdrawn %dG, money left in club %dG, %s.",val/100,club[n].money/100,ch[co].name); dlog(co,0,"Withdrew %dG from club %d, for a new total of %dG",val/100,n,club[n].money/100); db_update_club(n); } else quiet_say(cn,"The club does not have that much gold, %s.",ch[co].name); } } } } // got an item? if (msg->type==NT_GIVE) { co=msg->dat1; if ((in=ch[cn].citem)) { // we still have it // try to give it back if (give_char_item(cn,co)) return; // didnt work, let it vanish, then destroy_item(ch[cn].citem); ch[cn].citem=0; } } remove_message(cn,msg); } // do something. whenever possible, call do_idle with as high a tick count // as reasonable when doing nothing. if (secure_move_driver(cn,ch[cn].tmpx,ch[cn].tmpy,dat->dir,ret,lastact)) return; if (ticker>dat->last_talk+TICKS*60 && !RANDOM(25)) { switch(RANDOM(8)) { case 0: murmur(cn,"My back itches."); break; case 1: whisper(cn,"There's something stuck between your teeth."); break; case 2: murmur(cn,"Oh yeah, those were the days."); break; case 3: murmur(cn,"Now where did I put it?"); break; case 4: murmur(cn,"Oh my, life is hard but unfair."); break; case 5: murmur(cn,"Beware of the fire snails!"); break; case 6: murmur(cn,"I love the clicking of coins."); break; case 7: murmur(cn,"Gold and Silver, Silver and Gold."); break; default: break; } dat->last_talk=ticker; } if (ticker>dat->memcleartimer) { mem_erase_driver(cn,7); dat->memcleartimer=ticker+TICKS*60*60*12; } do_idle(cn,TICKS*2); }