inherit "/std/item.c"; static int pick_skill; static string tool_type; varargs int box_unlock_part2(string chest, object ob2); object locd_ob; int query_pick_skill() { object ob = this_player(); int level = ob->query_level(); string g_name = ob->query_guild_name(); int stat_int = ob->query_int(); int stat_dex = ob->query_dex(); int toolbonus = this_object()->query_property("skill enhance"); if((string)ob->query_race_name() == "dwarf"){ pick_skill = pick_skill + 10; } if((string)ob->query_race_name() == "duergar"){ pick_skill = pick_skill + 10; } if((string)ob->query_race_name() == "elf"){ pick_skill = pick_skill - 5; } if((string)ob->query_race_name() == "orc"){ pick_skill = pick_skill - 20; } if((string)ob->query_race_name() == "drow"){ pick_skill = pick_skill - 5; } if((string)ob->query_race_name() == "kender"){ pick_skill = pick_skill + 15 + random(20); } if((string)ob->query_race_name() == "goblin"){ pick_skill = pick_skill + 10 + random(5); } if((string)ob->query_race_name() == "gnome"){ pick_skill = pick_skill + 10 + random(5); } if((string)ob->query_race_name() == "halfling"){ pick_skill = pick_skill + 5 + random(5); } switch(g_name){ case "wizthief": pick_skill=5+random(10)+((level*3)/2)+((stat_int+stat_dex)/2); break; case "thief": pick_skill=10+random(10)+((level*3)/2)+((stat_int+stat_dex)/2); break; case "hokemj": pick_skill=random(20)-40+((level*3)/2)+((stat_int+stat_dex)/2); break; case "Grimbrand": pick_skill=5+random(10)+((level*3)/2)+((stat_int+stat_dex)/2); break; case "bard": pick_skill=random(10)-20+((level*3)/2)+((stat_int+stat_dex)/2); break; default: pick_skill = random(10)-50+((level*3)/2)+((stat_int+stat_dex)/2); break; } pick_skill = pick_skill + toolbonus; return pick_skill; } string query_tool_type() { string ttype; ttype = this_object()->query_property("tool_type"); return ttype; } int pick_door_lock(string direc) { int lock_str,lock_dir,skill; string lock_type, tool_type; object ob; ob = this_player(); lock_str = environment(ob)->query_lock_str(direc); lock_dir = environment(ob)->query_lock_dir(direc); lock_type = environment(ob)->query_lock_type(direc); skill = query_pick_skill(); tool_type = query_tool_type(); if(ob->query_gp() <= 1) { tell_object(ob,"\n Sorry pal, but you don't seem to have " "what it takes to pick a lock at this time.\n"); return 1; } if(lock_dir == 0) { tell_object(ob,"\n Why unlock that which was never locked in" " the first place. \n\n"); return(1); } // Logging lock_strength and players pick skill... Piper [2.24.96] log_file("pick_lock.bugs", ctime(time())+ "-> "+ob->query_cap_name()+" tried pick'n "+ lock_str+" lock with "+pick_skill+" skill.\n"); if(lock_type != tool_type) { tell_object(ob,"\n You fumble around a bit, but fail to pick" " the lock... perhaps you need better" " tools.\n\n"); ob->adjust_gp(-1); return(1); } if(skill < lock_str) { tell_object(ob,"\n You fumble around a bit, but fail to pick" " the lock... perhaps you just need to practice.\n\n"); ob->adjust_gp(-1); return(1); } if((skill >= lock_str)&&(lock_type == tool_type)) { tell_object(ob,"\n After a few minutes of trying to jimmy" " the lock, it clicks open.\n\n"); ob->adjust_xp(random(50)); environment(ob)->remove_lock(direc); return(1); } tell_object(ob,"\n What exactly are you trying to do?\n\n"); return(1); } int pick_box_lock(string chest) { int i,j; object ob,*olist,*olist2; ob = this_player(); olist = all_inventory(environment(ob)); olist2 = all_inventory(ob); for(i=0; i<sizeof(olist); i++) { if((string)olist[i]->query_name() == chest) { if(olist[i]->check_lock(chest) == 0) { int k; int lnum = olist[i]->query_num_locks(); mixed *lock_list = olist[i]->query_lock_list(); printf("\n%s%d%s"," It seems that there are ",lnum," locks."); printf("\n%s"," Which lock do you want to pick:"); for(k=0; k<sizeof(lock_list); k++) { printf("\n%s%s"," ",(string)lock_list[k]); } printf("\n%s\n"," Pick one of the above. "); locd_ob = olist[i]; input_to("box_unlock_part2"); return(1); } box_unlock_part2(chest,olist[i]); return(1); } } for(j=0; j<sizeof(olist2); j++) { if((string)olist2[j]->query_name() == chest) { if(olist2[j]->check_lock(chest) == 0) { int k; int lnum = olist2[j]->query_num_locks(); mixed *lock_list = olist2[j]->query_lock_list(); printf("\n%s%d%s"," It seems that there are ",lnum," locks."); printf("\n%s"," Which lock do you want to pick:"); for(k=0; k<sizeof(lock_list); k++) { printf("\n%s%s"," ",(string)lock_list[k]); } printf("\n%s\n"," Pick one of the above. "); locd_ob = olist2[j]; input_to("box_unlock_part2"); return(1); } box_unlock_part2(chest,olist2[j]); return(1); } } box_unlock_part2(chest); return(1); } varargs int box_unlock_part2(string chest, object ob2) { int lock_str,skill; string lock_type,tool_type; object ob; ob = this_player(); skill = query_pick_skill(); tool_type = query_tool_type(); if((locd_ob)&&(!ob2)) { ob2 = locd_ob; } if((ob2)&&(ob2->check_lock(chest) != 0)) { lock_str = ob2->query_lock_str(chest); lock_type = ob2->query_ltype(chest); } if((!ob2)||(lock_str == 0)||(ob2->check_lock(chest) == 0)) { tell_object(ob,"\n Why unlock that which was never locked" " in the first place. \n\n"); return(1); } if(lock_type != tool_type) { tell_object(ob,"\n You fumble around a bit, but fail to" " pick the lock... perhaps you need better" " tools.\n\n"); return(1); } if(skill < lock_str) { tell_object(ob,"\n You fumble around a bit, but fail to" " pick the lock... perhaps you just need" " a little practice.\n\n"); return(1); } if((skill >= lock_str)&&(lock_type == tool_type)) { tell_object(ob,"\n After a few minutes of trying to" " jimmy the lock, it clicks open.\n\n"); ob->adjust_xp(random(50)); ob2->remove_lock(chest); return(1); } tell_object(ob,"\n What exactly are you trying to do??\n\n"); return(1); } int pick_lock(string pickin) { int i; string *direcs = environment(this_player())->query_direc(); for(i=0;i<sizeof(direcs);i++) { if(pickin == direcs[i]) { this_object()->pick_door_lock(pickin); return(1); } } this_object()->pick_box_lock(pickin); return(1); } string alt_lock_name_too(string lock_name) { return lock_name; } int lock_help(string str) { if((str == "picklock")||(str == "pick")) { write("\n" "Syntax: picklock <locked exit name>\n" " picklock <locked object name(lowercase)>\n\n" " These tools allow anyone to 'try' to unlock" " something that is locked.\n *Note* Any can try" " not all may suceed." "\n\n"); return(1); } } void init() { ::init(); add_action("pick_lock", "picklock"); add_action("pick_lock", "pick"); add_action("lock_help","help"); }