/** * This is the draw command for drawing weapons from scabbard. * Original - DW, partly rewritten by Sandoz, 2002. */ inherit COMMAND_BASE; int cmd( string weapon_str, object *scabbards ) { object scabbard, *weapons, weapon, *tmp; int targetted, limbs; string failed; if( !scabbards ) { scabbards = filter( INV( TP ), (: $1->query_scabbard() :) ); if( !sizeof(scabbards) ) { add_failed_mess("You don't appear to have any scabbards.\n"); return 0; } weapons = match_objects_for_existence( weapon_str, scabbards ); if( !sizeof(weapons) ) { add_failed_mess("There is no "+weapon_str+" in "+ ( sizeof(scabbards) == 1 ? (string)scabbards[0]->poss_short() : "any of your scabbards")+".\n"); return 0; } scabbard = ENV( weapons[0] ); } else { if( sizeof(scabbards) > 1 ) { add_failed_mess("You can only draw weapons from one scabbard at " "a time.\n"); return -1; } scabbard = scabbards[0]; if( !scabbard->query_scabbard() ) { add_failed_mess("$I doesn't appear to be a scabbard.\n", ({ scabbard }) ); return 0; } if( ENV(scabbard) != TP ) { add_failed_mess("You have to take $I out of "+ ENV(scabbard)->the_short()+" before you can draw any " "weapons from it.\n", ({ scabbard }) ); return 0; } weapons = match_objects_for_existence( weapon_str, scabbard ); if( !sizeof(weapons) ) { add_failed_mess("There is no "+weapon_str+" in $I.\n", scabbards ); return -1; } targetted = 1; } weapon = weapons[0]; // these are the weapons inside the same scabbard as the first one. weapons = filter( weapons, (: ENV($1) == ENV($2) :), weapon ); if( targetted && sizeof(weapons) > 1 && ( ( limbs = weapon->query_no_limbs() ) > 1 || weapons[1]->query_no_limbs() > 1 ) ) { add_failed_mess("You cannot draw more than one "+ query_num( limbs >= weapons[1]->query_no_limbs() ? limbs : weapons[1]->query_no_limbs() )+"-handed weapon at a " "time.\n"); return 0; } if( targetted && sizeof(weapons) > 2 ) { add_failed_mess("You cannot draw more than two weapons at a time " "from $I.\n", ({ scabbard }) ); return 0; } weapons = ( weapon->query_no_limbs() > 1 ? weapons[0..0] : weapons[0..1] ); failed = ""; tmp = filter( weapons, (: $1->move( TP ) :) ); if( sizeof(tmp) ) { failed += "You cannot $V "+query_multiple_short(tmp, "the")+" from "+ scabbard->the_short()+" because you are too burdened.\n"; if( !sizeof( weapons -= tmp ) ) { add_failed_mess( failed ); return 0; } } tmp = filter( weapons, (: !sizeof( $1->hold_item( TP ) ) :) ); if( sizeof(tmp) ) { failed += "You cannot $V "+query_multiple_short(tmp, "the")+" from "+ scabbard->the_short()+" because you cannot hold "+ ( query_group(weapons) ? "them" : "it")+".\n"; if( !sizeof( weapons -= tmp ) ) { add_failed_mess( failed ); return 0; } } add_succeeded_mess( ({ "$N $V "+query_multiple_short(weapons)+" from $I.\n", "$N $V "+query_multiple_short(weapons)+" from "+ scabbard->poss_short()+".\n"}), ({ scabbard }) ); return 1; } /* cmd() */ mixed query_patterns() { return ({"<string'weapon'>", (: cmd( $4[0], 0 ) :), "<string'weapon'> from <indirect:object:me'scabbard'>", (: cmd( $4[0], $1 ) :) }); } /* query_patterns() */