// _lockpick.c // from the Nightmare mudlib // Rogue ability // created by Descartes of Borg 211092 // You will be assimilated. #include <std.h> inherit DAEMON; int cmd_lockpick(string str) { string what; int which, i, skip, locks; int resist; object ob; object *inv; if(!str) { notify_fail("Lockpick what?\n"); return 0; } ob = present(str, this_player()); if(!ob) ob = present(str, environment(this_player())); if(!ob) ob = environment(this_player()); if(!ob->id(str)) { notify_fail("You cannot lockpick that.\n"); return 0; } ob->set_disable(); if(!ob->query_locked(str)) { notify_fail("The "+str+" is not locked!\n"); return 0; } locks = (int)this_player()->query_skill("locks"); inv = all_inventory(this_player()); for(i=0; i<sizeof(inv); i++) { locks += (int)inv[i]->query_property("lockpicking tool"); } resist = (int)ob->query_property("magic hold"); if(locks < (random(101) + resist)) { this_player()->add_hp(-5); write("You fail to pick the lock.\n"); if((int)this_player()->query_stats("dexterity") < random(101)) { write("You cut yourself on the lock!\n"); this_player()->do_damage((string)this_player()->return_limb(), random(10)); say(this_player()->query_cap_name()+" gets cut picking the lock.\n"); this_player()->add_skill_points("locks", random(5)); return 1; } this_player()->add_skill_points("locks", random(7)); say(this_player()->query_cap_name()+" fails to pick the lock.\n", this_player()); return 1; } if(!ob->pick_lock(str)) { this_player()->add_hp(-5); write("A magic force prevents you from picking the lock.\n"); say("A magic force prevents "+this_player()->query_cap_name()+" from the picking the lock.\n"); this_player()->add_skill_points("locks", random(resist)); return 1; } write("You pick the lock.\n"); say(this_player()->query_name()+" successfully picks the lock.\n", this_player()); this_player()->add_skill_points("locks", 10 + resist); return 1; } void help() { write("Syntax: <lockpick [(item)]>\n\n"+ "This command is an attempt to pick the lock on an item if an item\n"+ "is specified, or a lock in the room if no item is specified.\n"); }